Merge remote-tracking branch 'github/master' into 201904

This commit is contained in:
Shu0T1an ChenG 2019-06-11 12:21:05 -07:00
commit 3ca6711c0a
179 changed files with 17794 additions and 1006 deletions

View File

@ -0,0 +1,55 @@
# name lanes alias index
Ethernet0 1 twentyfiveGigE1 1
Ethernet1 2 twentyfiveGigE2 2
Ethernet2 3 twentyfiveGigE3 3
Ethernet3 4 twentyfiveGigE4 4
Ethernet4 5 twentyfiveGigE5 5
Ethernet5 6 twentyfiveGigE6 6
Ethernet6 7 twentyfiveGigE7 7
Ethernet7 8 twentyfiveGigE8 8
Ethernet8 9 twentyfiveGigE9 9
Ethernet9 10 twentyfiveGigE10 10
Ethernet10 11 twentyfiveGigE11 11
Ethernet11 12 twentyfiveGigE12 12
Ethernet12 13 twentyfiveGigE13 13
Ethernet13 14 twentyfiveGigE14 14
Ethernet14 15 twentyfiveGigE15 15
Ethernet15 16 twentyfiveGigE16 16
Ethernet16 17 twentyfiveGigE17 17
Ethernet17 18 twentyfiveGigE18 18
Ethernet18 19 twentyfiveGigE19 19
Ethernet19 20 twentyfiveGigE20 20
Ethernet20 21 twentyfiveGigE21 21
Ethernet21 22 twentyfiveGigE22 22
Ethernet22 23 twentyfiveGigE23 23
Ethernet23 24 twentyfiveGigE24 24
Ethernet24 53 twentyfiveGigE25 25
Ethernet25 54 twentyfiveGigE26 26
Ethernet26 55 twentyfiveGigE27 27
Ethernet27 56 twentyfiveGigE28 28
Ethernet28 57 twentyfiveGigE29 29
Ethernet29 58 twentyfiveGigE30 30
Ethernet30 59 twentyfiveGigE31 31
Ethernet31 60 twentyfiveGigE32 32
Ethernet32 61 twentyfiveGigE33 33
Ethernet33 62 twentyfiveGigE34 34
Ethernet34 63 twentyfiveGigE35 35
Ethernet35 64 twentyfiveGigE36 36
Ethernet36 65 twentyfiveGigE37 37
Ethernet37 66 twentyfiveGigE38 38
Ethernet38 67 twentyfiveGigE39 39
Ethernet39 68 twentyfiveGigE40 40
Ethernet40 69 twentyfiveGigE41 41
Ethernet41 70 twentyfiveGigE42 42
Ethernet42 71 twentyfiveGigE43 43
Ethernet43 72 twentyfiveGigE44 44
Ethernet44 73 twentyfiveGigE45 45
Ethernet45 74 twentyfiveGigE46 46
Ethernet46 75 twentyfiveGigE47 47
Ethernet47 76 twentyfiveGigE48 48
Ethernet48 29,30,31,32 hundredGigE49 49
Ethernet52 33,34,35,36 hundredGigE50 53
Ethernet56 37,38,39,40 hundredGigE51 57
Ethernet60 41,42,43,44 hundredGigE52 61
Ethernet64 45,46,47,48 hundredGigE53 65
Ethernet68 49,50,51,52 hundredGigE54 69

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/etc/bcm/td3-as5835-48x10G+6x100G.config.bcm

View File

@ -0,0 +1,467 @@
#polarity/lanemap is using TH2 style.
core_clock_frequency=1525
dpp_clock_ratio=2:3
ptp_ts_pll_fref=50000000
ptp_bs_fref_0=50000000
ptp_bs_fref_1=50000000
oversubscribe_mode=1
pbmp_xport_xe=0x1FFFFFFFFFFFFFFFE
parity_enable=0
mem_cache_enable=0
l2_mem_entries=32768
#l3_mem_entries=49152
#fpem_mem_entries=16384
l2xmsg_mode=1
#FC0
dport_map_port_1=1
dport_map_port_2=2
dport_map_port_3=3
dport_map_port_4=4
portmap_1=1:10
portmap_2=2:10
portmap_3=3:10
portmap_4=4:10
phy_chain_rx_lane_map_physical{1.0}=0x0123
phy_chain_rx_lane_map_physical{2.0}=0x0123
phy_chain_rx_lane_map_physical{3.0}=0x0123
phy_chain_rx_lane_map_physical{4.0}=0x0123
phy_chain_tx_lane_map_physical{1.0}=0x0123
phy_chain_tx_lane_map_physical{2.0}=0x0123
phy_chain_tx_lane_map_physical{3.0}=0x0123
phy_chain_tx_lane_map_physical{4.0}=0x0123
phy_chain_rx_polarity_flip_physical{1.0}=0x1
phy_chain_rx_polarity_flip_physical{2.0}=0x1
phy_chain_rx_polarity_flip_physical{3.0}=0x1
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{1.0}=0x0
phy_chain_tx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
#FC1
dport_map_port_5=5
dport_map_port_6=6
dport_map_port_7=7
dport_map_port_8=8
portmap_5=5:10
portmap_6=6:10
portmap_7=7:10
portmap_8=8:10
phy_chain_rx_lane_map_physical{5.0}=0x0123
phy_chain_rx_lane_map_physical{6.0}=0x0123
phy_chain_rx_lane_map_physical{7.0}=0x0123
phy_chain_rx_lane_map_physical{8.0}=0x0123
phy_chain_tx_lane_map_physical{5.0}=0x0123
phy_chain_tx_lane_map_physical{6.0}=0x0123
phy_chain_tx_lane_map_physical{7.0}=0x0123
phy_chain_tx_lane_map_physical{8.0}=0x0123
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{6.0}=0x0
phy_chain_rx_polarity_flip_physical{7.0}=0x0
phy_chain_rx_polarity_flip_physical{8.0}=0x0
phy_chain_tx_polarity_flip_physical{5.0}=0x0
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x0
phy_chain_tx_polarity_flip_physical{8.0}=0x1
#FC2
dport_map_port_9=9
dport_map_port_10=10
dport_map_port_11=11
dport_map_port_12=12
portmap_9=9:10
portmap_10=10:10
portmap_11=11:10
portmap_12=12:10
phy_chain_rx_lane_map_physical{9.0}=0x0123
phy_chain_rx_lane_map_physical{10.0}=0x0123
phy_chain_rx_lane_map_physical{11.0}=0x0123
phy_chain_rx_lane_map_physical{12.0}=0x0123
phy_chain_tx_lane_map_physical{9.0}=0x0123
phy_chain_tx_lane_map_physical{10.0}=0x0123
phy_chain_tx_lane_map_physical{11.0}=0x0123
phy_chain_tx_lane_map_physical{12.0}=0x0123
phy_chain_rx_polarity_flip_physical{9.0}=0x0
phy_chain_rx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{12.0}=0x0
phy_chain_tx_polarity_flip_physical{9.0}=0x0
phy_chain_tx_polarity_flip_physical{10.0}=0x1
phy_chain_tx_polarity_flip_physical{11.0}=0x0
phy_chain_tx_polarity_flip_physical{12.0}=0x1
#FC3
dport_map_port_13=13
dport_map_port_14=14
dport_map_port_15=15
dport_map_port_16=16
portmap_13=13:10
portmap_14=14:10
portmap_15=15:10
portmap_16=16:10
phy_chain_rx_lane_map_physical{13.0}=0x0123
phy_chain_rx_lane_map_physical{14.0}=0x0123
phy_chain_rx_lane_map_physical{15.0}=0x0123
phy_chain_rx_lane_map_physical{16.0}=0x0123
phy_chain_tx_lane_map_physical{13.0}=0x0123
phy_chain_tx_lane_map_physical{14.0}=0x0123
phy_chain_tx_lane_map_physical{15.0}=0x0123
phy_chain_tx_lane_map_physical{16.0}=0x0123
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{14.0}=0x0
phy_chain_rx_polarity_flip_physical{15.0}=0x0
phy_chain_rx_polarity_flip_physical{16.0}=0x0
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x1
phy_chain_tx_polarity_flip_physical{15.0}=0x0
phy_chain_tx_polarity_flip_physical{16.0}=0x1
#FC4
dport_map_port_17=17
dport_map_port_18=18
dport_map_port_19=19
dport_map_port_20=20
portmap_17=17:10
portmap_18=18:10
portmap_19=19:10
portmap_20=20:10
phy_chain_rx_lane_map_physical{17.0}=0x0123
phy_chain_rx_lane_map_physical{18.0}=0x0123
phy_chain_rx_lane_map_physical{19.0}=0x0123
phy_chain_rx_lane_map_physical{20.0}=0x0123
phy_chain_tx_lane_map_physical{17.0}=0x0123
phy_chain_tx_lane_map_physical{18.0}=0x0123
phy_chain_tx_lane_map_physical{19.0}=0x0123
phy_chain_tx_lane_map_physical{20.0}=0x0123
phy_chain_rx_polarity_flip_physical{17.0}=0x1
phy_chain_rx_polarity_flip_physical{18.0}=0x1
phy_chain_rx_polarity_flip_physical{19.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{17.0}=0x0
phy_chain_tx_polarity_flip_physical{18.0}=0x1
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
#FC5
dport_map_port_21=21
dport_map_port_22=22
dport_map_port_23=23
dport_map_port_24=24
portmap_21=21:10
portmap_22=22:10
portmap_23=23:10
portmap_24=24:10
phy_chain_rx_lane_map_physical{21.0}=0x0123
phy_chain_rx_lane_map_physical{22.0}=0x0123
phy_chain_rx_lane_map_physical{23.0}=0x0123
phy_chain_rx_lane_map_physical{24.0}=0x0123
phy_chain_tx_lane_map_physical{21.0}=0x0123
phy_chain_tx_lane_map_physical{22.0}=0x0123
phy_chain_tx_lane_map_physical{23.0}=0x0123
phy_chain_tx_lane_map_physical{24.0}=0x0123
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{22.0}=0x0
phy_chain_rx_polarity_flip_physical{23.0}=0x0
phy_chain_rx_polarity_flip_physical{24.0}=0x0
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x0
phy_chain_tx_polarity_flip_physical{24.0}=0x1
#FC6
#FC7
dport_map_port_25=50
portmap_25=29:100:4
phy_chain_rx_lane_map_physical{29.0}=0x1302
phy_chain_rx_lane_map_physical{30.0}=0x1302
phy_chain_rx_lane_map_physical{31.0}=0x1302
phy_chain_rx_lane_map_physical{32.0}=0x1302
phy_chain_tx_lane_map_physical{29.0}=0x2031
phy_chain_tx_lane_map_physical{30.0}=0x2031
phy_chain_tx_lane_map_physical{31.0}=0x2031
phy_chain_tx_lane_map_physical{32.0}=0x2031
phy_chain_rx_polarity_flip_physical{29.0}=0x1
phy_chain_rx_polarity_flip_physical{30.0}=0x0
phy_chain_rx_polarity_flip_physical{31.0}=0x1
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{29.0}=0x1
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_tx_polarity_flip_physical{31.0}=0x1
phy_chain_tx_polarity_flip_physical{32.0}=0x1
#FC8
dport_map_port_26=51
portmap_26=33:100:4
phy_chain_rx_lane_map_physical{33.0}=0x1203
phy_chain_rx_lane_map_physical{34.0}=0x1203
phy_chain_rx_lane_map_physical{35.0}=0x1203
phy_chain_rx_lane_map_physical{36.0}=0x1203
phy_chain_tx_lane_map_physical{33.0}=0x3120
phy_chain_tx_lane_map_physical{34.0}=0x3120
phy_chain_tx_lane_map_physical{35.0}=0x3120
phy_chain_tx_lane_map_physical{36.0}=0x3120
phy_chain_rx_polarity_flip_physical{33.0}=0x0
phy_chain_rx_polarity_flip_physical{34.0}=0x1
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{36.0}=0x1
phy_chain_tx_polarity_flip_physical{33.0}=0x0
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x1
phy_chain_tx_polarity_flip_physical{36.0}=0x0
#FC9
dport_map_port_27=49
dport_map_port_28=52
dport_map_port_29=53
dport_map_port_30=54
portmap_27=37:100:4
phy_chain_rx_lane_map_physical{37.0}=0x2130
phy_chain_rx_lane_map_physical{38.0}=0x2130
phy_chain_rx_lane_map_physical{39.0}=0x2130
phy_chain_rx_lane_map_physical{40.0}=0x2130
phy_chain_tx_lane_map_physical{37.0}=0x3210
phy_chain_tx_lane_map_physical{38.0}=0x3210
phy_chain_tx_lane_map_physical{39.0}=0x3210
phy_chain_tx_lane_map_physical{40.0}=0x3210
phy_chain_rx_polarity_flip_physical{37.0}=0x0
phy_chain_rx_polarity_flip_physical{38.0}=0x0
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x0
phy_chain_tx_polarity_flip_physical{37.0}=0x0
phy_chain_tx_polarity_flip_physical{38.0}=0x0
phy_chain_tx_polarity_flip_physical{39.0}=0x0
phy_chain_tx_polarity_flip_physical{40.0}=0x0
#FC10
dport_map_port_33=57
portmap_33=41:100:4
phy_chain_rx_lane_map_physical{41.0}=0x1320
phy_chain_rx_lane_map_physical{42.0}=0x1320
phy_chain_rx_lane_map_physical{43.0}=0x1320
phy_chain_rx_lane_map_physical{44.0}=0x1320
phy_chain_tx_lane_map_physical{41.0}=0x3210
phy_chain_tx_lane_map_physical{42.0}=0x3210
phy_chain_tx_lane_map_physical{43.0}=0x3210
phy_chain_tx_lane_map_physical{44.0}=0x3210
phy_chain_rx_polarity_flip_physical{41.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x0
phy_chain_rx_polarity_flip_physical{43.0}=0x0
phy_chain_rx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{41.0}=0x0
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_tx_polarity_flip_physical{43.0}=0x0
phy_chain_tx_polarity_flip_physical{44.0}=0x0
#FC11
dport_map_port_34=56
portmap_34=45:100:4
phy_chain_rx_lane_map_physical{45.0}=0x3201
phy_chain_rx_lane_map_physical{46.0}=0x3201
phy_chain_rx_lane_map_physical{47.0}=0x3201
phy_chain_rx_lane_map_physical{48.0}=0x3201
phy_chain_tx_lane_map_physical{45.0}=0x3210
phy_chain_tx_lane_map_physical{46.0}=0x3210
phy_chain_tx_lane_map_physical{47.0}=0x3210
phy_chain_tx_lane_map_physical{48.0}=0x3210
phy_chain_rx_polarity_flip_physical{45.0}=0x1
phy_chain_rx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x0
phy_chain_rx_polarity_flip_physical{48.0}=0x0
phy_chain_tx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x0
phy_chain_tx_polarity_flip_physical{48.0}=0x0
#FC12
dport_map_port_35=55
dport_map_port_36=58
dport_map_port_37=59
dport_map_port_38=60
portmap_35=49:100:4
phy_chain_rx_lane_map_physical{49.0}=0x0312
phy_chain_rx_lane_map_physical{50.0}=0x0312
phy_chain_rx_lane_map_physical{51.0}=0x0312
phy_chain_rx_lane_map_physical{52.0}=0x0312
phy_chain_tx_lane_map_physical{49.0}=0x3210
phy_chain_tx_lane_map_physical{50.0}=0x3210
phy_chain_tx_lane_map_physical{51.0}=0x3210
phy_chain_tx_lane_map_physical{52.0}=0x3210
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x0
phy_chain_rx_polarity_flip_physical{52.0}=0x0
phy_chain_tx_polarity_flip_physical{49.0}=0x0
phy_chain_tx_polarity_flip_physical{50.0}=0x0
phy_chain_tx_polarity_flip_physical{51.0}=0x0
phy_chain_tx_polarity_flip_physical{52.0}=0x0
#FC13
dport_map_port_39=25
dport_map_port_40=26
dport_map_port_41=27
dport_map_port_42=28
portmap_39=53:10
portmap_40=54:10
portmap_41=55:10
portmap_42=56:10
phy_chain_rx_lane_map_physical{53.0}=0x3120
phy_chain_rx_lane_map_physical{54.0}=0x3120
phy_chain_rx_lane_map_physical{55.0}=0x3120
phy_chain_rx_lane_map_physical{56.0}=0x3120
phy_chain_tx_lane_map_physical{53.0}=0x3102
phy_chain_tx_lane_map_physical{54.0}=0x3102
phy_chain_tx_lane_map_physical{55.0}=0x3102
phy_chain_tx_lane_map_physical{56.0}=0x3102
phy_chain_rx_polarity_flip_physical{53.0}=0x1
phy_chain_rx_polarity_flip_physical{54.0}=0x0
phy_chain_rx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x1
phy_chain_tx_polarity_flip_physical{55.0}=0x0
phy_chain_tx_polarity_flip_physical{56.0}=0x1
#FC14
dport_map_port_43=29
dport_map_port_44=30
dport_map_port_45=31
dport_map_port_46=32
portmap_43=57:10
portmap_44=58:10
portmap_45=59:10
portmap_46=60:10
phy_chain_rx_lane_map_physical{57.0}=0x3210
phy_chain_rx_lane_map_physical{58.0}=0x3210
phy_chain_rx_lane_map_physical{59.0}=0x3210
phy_chain_rx_lane_map_physical{60.0}=0x3210
phy_chain_tx_lane_map_physical{57.0}=0x3210
phy_chain_tx_lane_map_physical{58.0}=0x3210
phy_chain_tx_lane_map_physical{59.0}=0x3210
phy_chain_tx_lane_map_physical{60.0}=0x3210
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_rx_polarity_flip_physical{58.0}=0x0
phy_chain_rx_polarity_flip_physical{59.0}=0x0
phy_chain_rx_polarity_flip_physical{60.0}=0x0
phy_chain_tx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
#FC15
dport_map_port_47=33
dport_map_port_48=34
dport_map_port_49=35
dport_map_port_50=36
portmap_47=61:10
portmap_48=62:10
portmap_49=63:10
portmap_50=64:10
phy_chain_rx_lane_map_physical{61.0}=0x3210
phy_chain_rx_lane_map_physical{62.0}=0x3210
phy_chain_rx_lane_map_physical{63.0}=0x3210
phy_chain_rx_lane_map_physical{64.0}=0x3210
phy_chain_tx_lane_map_physical{61.0}=0x3210
phy_chain_tx_lane_map_physical{62.0}=0x3210
phy_chain_tx_lane_map_physical{63.0}=0x3210
phy_chain_tx_lane_map_physical{64.0}=0x3210
phy_chain_rx_polarity_flip_physical{61.0}=0x1
phy_chain_rx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_rx_polarity_flip_physical{64.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_tx_polarity_flip_physical{62.0}=0x1
phy_chain_tx_polarity_flip_physical{63.0}=0x0
phy_chain_tx_polarity_flip_physical{64.0}=0x1
#FC16
dport_map_port_51=37
dport_map_port_52=38
dport_map_port_53=39
dport_map_port_54=40
portmap_51=65:10
portmap_52=66:10
portmap_53=67:10
portmap_54=68:10
phy_chain_rx_lane_map_physical{65.0}=0x3210
phy_chain_rx_lane_map_physical{66.0}=0x3210
phy_chain_rx_lane_map_physical{67.0}=0x3210
phy_chain_rx_lane_map_physical{68.0}=0x3210
phy_chain_tx_lane_map_physical{65.0}=0x3210
phy_chain_tx_lane_map_physical{66.0}=0x3210
phy_chain_tx_lane_map_physical{67.0}=0x3210
phy_chain_tx_lane_map_physical{68.0}=0x3210
phy_chain_rx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{66.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x1
phy_chain_rx_polarity_flip_physical{68.0}=0x1
phy_chain_tx_polarity_flip_physical{65.0}=0x0
phy_chain_tx_polarity_flip_physical{66.0}=0x1
phy_chain_tx_polarity_flip_physical{67.0}=0x0
phy_chain_tx_polarity_flip_physical{68.0}=0x1
#FC17
dport_map_port_55=41
dport_map_port_56=42
dport_map_port_57=43
dport_map_port_58=44
portmap_55=69:10
portmap_56=70:10
portmap_57=71:10
portmap_58=72:10
phy_chain_rx_lane_map_physical{69.0}=0x3210
phy_chain_rx_lane_map_physical{70.0}=0x3210
phy_chain_rx_lane_map_physical{71.0}=0x3210
phy_chain_rx_lane_map_physical{72.0}=0x3210
phy_chain_tx_lane_map_physical{69.0}=0x3210
phy_chain_tx_lane_map_physical{70.0}=0x3210
phy_chain_tx_lane_map_physical{71.0}=0x3210
phy_chain_tx_lane_map_physical{72.0}=0x3210
phy_chain_rx_polarity_flip_physical{69.0}=0x0
phy_chain_rx_polarity_flip_physical{70.0}=0x0
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x0
phy_chain_tx_polarity_flip_physical{70.0}=0x1
phy_chain_tx_polarity_flip_physical{71.0}=0x0
phy_chain_tx_polarity_flip_physical{72.0}=0x1
#FC18
dport_map_port_59=45
dport_map_port_60=46
dport_map_port_61=47
dport_map_port_62=48
portmap_59=73:10
portmap_60=74:10
portmap_61=75:10
portmap_62=76:10
phy_chain_rx_lane_map_physical{73.0}=0x3210
phy_chain_rx_lane_map_physical{74.0}=0x3210
phy_chain_rx_lane_map_physical{75.0}=0x3210
phy_chain_rx_lane_map_physical{76.0}=0x3210
phy_chain_tx_lane_map_physical{73.0}=0x0231
phy_chain_tx_lane_map_physical{74.0}=0x0231
phy_chain_tx_lane_map_physical{75.0}=0x0231
phy_chain_tx_lane_map_physical{76.0}=0x0231
phy_chain_rx_polarity_flip_physical{73.0}=0x0
phy_chain_rx_polarity_flip_physical{74.0}=0x0
phy_chain_rx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_tx_polarity_flip_physical{76.0}=0x0
#FC19
dport_map_port_64=64
portmap_64=81:10:m
phy_chain_rx_polarity_flip_physical{81.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x1

View File

@ -0,0 +1 @@
Accton-AS5835-54X t1

View File

@ -0,0 +1,3 @@
CONSOLE_PORT=0x3f8
CONSOLE_DEV=0
CONSOLE_SPEED=115200

View File

@ -0,0 +1,24 @@
#!/usr/bin/env python
try:
import exceptions
import binascii
import time
import optparse
import warnings
import os
import sys
from sonic_eeprom import eeprom_base
from sonic_eeprom import eeprom_tlvinfo
import subprocess
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
class board(eeprom_tlvinfo.TlvInfoDecoder):
_TLV_INFO_MAX_LEN = 256
def __init__(self, name, path, cpld_root, ro):
self.eeprom_path = "/sys/bus/i2c/devices/1-0057/eeprom"
#Two i2c buses might get flipped order, check them both.
if not os.path.exists(self.eeprom_path):
self.eeprom_path = "/sys/bus/i2c/devices/0-0057/eeprom"
super(board, self).__init__(self.eeprom_path, 0, '', True)

View File

@ -0,0 +1,61 @@
#!/usr/bin/env python
#############################################################################
# Accton
#
# Module contains an implementation of SONiC PSU Base API and
# provides the PSUs status which are available in the platform
#
#############################################################################
import os.path
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/bus/i2c/devices/"
self.psu_presence = "/psu_present"
self.psu_oper_status = "/psu_power_good"
self.psu_mapping = {
1: "11-0050",
2: "12-0053",
}
def get_num_psus(self):
return len(self.psu_mapping)
def get_psu_status(self, index):
if index is None:
return False
status = 0
node = self.psu_path + self.psu_mapping[index]+self.psu_oper_status
try:
with open(node, 'r') as power_status:
status = int(power_status.read())
except IOError:
return False
return status == 1
def get_psu_presence(self, index):
if index is None:
return False
status = 0
node = self.psu_path + self.psu_mapping[index] + self.psu_presence
try:
with open(node, 'r') as presence_status:
status = int(presence_status.read())
except IOError:
return False
return status == 1

View File

@ -0,0 +1,297 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import time
import string
from ctypes import create_string_buffer
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 1
PORT_END = 72
PORTS_IN_BLOCK = 72
QSFP_PORT_START = 49
QSFP_PORT_END = 72
BASE_VAL_PATH = "/sys/class/i2c-adapter/i2c-{0}/{1}-0050/"
_port_to_is_present = {}
_port_to_lp_mode = {}
_port_to_eeprom_mapping = {}
_cpld_mapping = {
0: "3-0060",
1: "3-0061",
2: "3-0062",
}
_port_to_i2c_mapping = {
1: 42,
2: 43,
3: 44,
4: 45,
5: 46,
6: 47,
7: 48,
8: 49,
9: 50,
10: 51,
11: 52,
12: 53,
13: 54,
14: 55,
15: 56,
16: 57,
17: 58,
18: 59,
19: 60,
20: 61,
21: 62,
22: 63,
23: 64,
24: 65,
25: 66,
26: 67,
27: 68,
28: 69,
29: 70,
30: 71,
31: 72,
32: 73,
33: 74,
34: 75,
35: 76,
36: 77,
37: 78,
38: 79,
39: 80,
40: 81,
41: 82,
42: 83,
43: 84,
44: 85,
45: 86,
46: 87,
47: 88,
48: 89,
49: 28, #QSFP49
50: 28,
51: 28,
52: 28,
53: 29, #QSFP50
54: 29,
55: 29,
56: 29,
57: 26, #QSFP51
58: 26,
59: 26,
60: 26,
61: 30, #QSFP52
62: 30,
63: 30,
64: 30,
65: 31, #QSFP53
66: 31,
67: 31,
68: 31,
69: 27, #QSFP54
70: 27,
71: 27,
72: 27,
}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_port_start(self):
return self.QSFP_PORT_START
@property
def qsfp_port_end(self):
return self.QSFP_PORT_END
@property
def qsfp_ports(self):
return range(self.QSFP_PORT_START, self.PORTS_IN_BLOCK + 1)
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def __init__(self):
eeprom_path = '/sys/bus/i2c/devices/{0}-0050/eeprom'
for x in range(self.port_start, self.port_end+1):
self.port_to_eeprom_mapping[x] = eeprom_path.format(
self._port_to_i2c_mapping[x])
SfpUtilBase.__init__(self)
# For port 49~54 are QSFP, here presumed they're all split to 4 lanes.
def get_cage_num(self, port_num):
cage_num = port_num
if (port_num >= self.QSFP_PORT_START):
cage_num = (port_num - self.QSFP_PORT_START)/4
cage_num = cage_num + self.QSFP_PORT_START
return cage_num
# For cage 1~38 are at cpld2, others are at cpld3.
def get_cpld_num(self, port_num):
return 1 if (port_num < 39) else 2
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
cage_num = self.get_cage_num(port_num)
cpld_i = self.get_cpld_num(port_num)
cpld_ps = self._cpld_mapping[cpld_i]
path = "/sys/bus/i2c/devices/{0}/module_present_{1}"
port_ps = path.format(cpld_ps, cage_num)
try:
val_file = open(port_ps)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
val_file.close()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode_cpld(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
cage_num = self.get_cage_num(port_num)
cpld_i = self.get_cpld_num(port_num)
cpld_ps = self._cpld_mapping[cpld_i]
path = "/sys/bus/i2c/devices/{0}/module_lpmode_{1}"
lp_mode_path = path.format(cpld_ps, cage_num)
try:
val_file = open(lp_mode_path)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
val_file.close()
# content is a string, either "0" or "1"
if content == "1":
return True
return False
def get_low_power_mode(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
if not self.get_presence(port_num):
return False
try:
eeprom = None
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
eeprom.seek(93)
lpmode = ord(eeprom.read(1))
if not (lpmode & 0x1): # 'Power override' bit is 0
return self.get_low_power_mode_cpld(port_num)
else:
if ((lpmode & 0x2) == 0x2):
return True # Low Power Mode if "Power set" bit is 1
else:
return False # High Power Mode if "Power set" bit is 0
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def set_low_power_mode(self, port_num, lpmode):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
try:
eeprom = None
if not self.get_presence(port_num):
return False # Port is not present, unable to set the eeprom
# Fill in write buffer
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
buffer = create_string_buffer(1)
buffer[0] = chr(regval)
# Write to eeprom
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
eeprom.seek(93)
eeprom.write(buffer[0])
return True
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
finally:
if eeprom is not None:
eeprom.close()
time.sleep(0.01)
def reset(self, port_num):
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
return False
cage_num = self.get_cage_num(port_num)
cpld_i = self.get_cpld_num(port_num)
cpld_ps = self._cpld_mapping[cpld_i]
path = "/sys/bus/i2c/devices/{0}/module_reset_{1}"
port_ps = path.format(cpld_ps, cage_num)
try:
reg_file = open(port_ps, 'w')
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
#toggle reset
reg_file.seek(0)
reg_file.write('0')
time.sleep(1)
reg_file.seek(0)
reg_file.write('1')
reg_file.close()
return True
def get_transceiver_change_event(self):
"""
TODO: This function need to be implemented
when decide to support monitoring SFP(Xcvrd)
on this platform.
"""
raise NotImplementedError

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,13 +0,0 @@
#!/usr/bin/env python
"""
Arista 7050QX-32 eeprom plugin
Uses the arista driver library to obtain the TlvInfoDecoder
"""
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,6 +0,0 @@
try:
import arista.utils.sonic_leds as arista_leds
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
LedControl = arista_leds.getLedControl()

View File

@ -1,12 +0,0 @@
# psuutil.py
#
# Platform-specific PSU interface for SONiC
#
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,12 +0,0 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,13 +0,0 @@
#!/usr/bin/env python
"""
Arista 7050QX-32S eeprom plugin
Uses the arista driver library to obtain the TlvInfoDecoder
"""
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,6 +0,0 @@
try:
import arista.utils.sonic_leds as arista_leds
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
LedControl = arista_leds.getLedControl()

View File

@ -1,12 +0,0 @@
# psuutil.py
#
# Platform-specific PSU interface for SONiC
#
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,12 +0,0 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,13 +0,0 @@
#!/usr/bin/env python
"""
Arista 7060CX-32S eeprom plugin
Uses the arista driver library to obtain the TlvInfoDecoder
"""
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,6 +0,0 @@
try:
import arista.utils.sonic_leds as arista_leds
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
LedControl = arista_leds.getLedControl()

View File

@ -1,12 +0,0 @@
# psuutil.py
#
# Platform-specific PSU interface for SONiC
#
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,12 +0,0 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -0,0 +1,67 @@
# name lanes alias index speed
Ethernet0 1,2,3,4 Ethernet1/1 1 100000
Ethernet4 5,6,7,8 Ethernet1/5 1 100000
Ethernet8 9,10,11,12 Ethernet2/1 2 100000
Ethernet12 13,14,15,16 Ethernet2/5 2 100000
Ethernet16 17,18,19,20 Ethernet3/1 3 100000
Ethernet20 21,22,23,24 Ethernet3/5 3 100000
Ethernet24 25,26,27,28 Ethernet4/1 4 100000
Ethernet28 29,30,31,32 Ethernet4/5 4 100000
Ethernet32 33,34,35,36 Ethernet5/1 5 100000
Ethernet36 37,38,39,40 Ethernet5/5 5 100000
Ethernet40 41,42,43,44 Ethernet6/1 6 100000
Ethernet44 45,46,47,48 Ethernet6/5 6 100000
Ethernet48 49,50,51,52 Ethernet7/1 7 100000
Ethernet52 53,54,55,56 Ethernet7/5 7 100000
Ethernet56 57,58,59,60 Ethernet8/1 8 100000
Ethernet60 61,62,63,64 Ethernet8/5 8 100000
Ethernet64 65,66,67,68 Ethernet9/1 9 100000
Ethernet68 69,70,71,72 Ethernet9/5 9 100000
Ethernet72 73,74,75,76 Ethernet10/1 10 100000
Ethernet76 77,78,79,80 Ethernet10/5 10 100000
Ethernet80 81,82,83,84 Ethernet11/1 11 100000
Ethernet84 85,86,87,88 Ethernet11/5 11 100000
Ethernet88 89,90,91,92 Ethernet12/1 12 100000
Ethernet92 93,94,95,96 Ethernet12/5 12 100000
Ethernet96 97,98,99,100 Ethernet13/1 13 100000
Ethernet100 101,102,103,104 Ethernet13/5 13 100000
Ethernet104 105,106,107,108 Ethernet14/1 14 100000
Ethernet108 109,110,111,112 Ethernet14/5 14 100000
Ethernet112 113,114,115,116 Ethernet15/1 15 100000
Ethernet116 117,118,119,120 Ethernet15/5 15 100000
Ethernet120 121,122,123,124 Ethernet16/1 16 100000
Ethernet124 125,126,127,128 Ethernet16/5 16 100000
Ethernet128 129,130,131,132 Ethernet17/1 17 100000
Ethernet132 133,134,135,136 Ethernet17/5 17 100000
Ethernet136 137,138,139,140 Ethernet18/1 18 100000
Ethernet140 141,142,143,144 Ethernet18/5 18 100000
Ethernet144 145,146,147,148 Ethernet19/1 19 100000
Ethernet148 149,150,151,152 Ethernet19/5 19 100000
Ethernet152 153,154,155,156 Ethernet20/1 20 100000
Ethernet156 157,158,159,160 Ethernet20/5 20 100000
Ethernet160 161,162,163,164 Ethernet21/1 21 100000
Ethernet164 165,166,167,168 Ethernet21/5 21 100000
Ethernet168 169,170,171,172 Ethernet22/1 22 100000
Ethernet172 173,174,175,176 Ethernet22/5 22 100000
Ethernet176 177,178,179,180 Ethernet23/1 23 100000
Ethernet180 181,182,183,184 Ethernet23/5 23 100000
Ethernet184 185,186,187,188 Ethernet24/1 24 100000
Ethernet188 189,190,191,192 Ethernet24/5 24 100000
Ethernet192 193,194,195,196 Ethernet25/1 25 100000
Ethernet196 197,198,199,200 Ethernet25/5 25 100000
Ethernet200 201,202,203,204 Ethernet26/1 26 100000
Ethernet204 205,206,207,208 Ethernet26/5 26 100000
Ethernet208 209,210,211,212 Ethernet27/1 27 100000
Ethernet212 213,214,215,216 Ethernet27/5 27 100000
Ethernet216 217,218,219,220 Ethernet28/1 28 100000
Ethernet220 221,222,223,224 Ethernet28/5 28 100000
Ethernet224 225,226,227,228 Ethernet29/1 29 100000
Ethernet228 229,230,231,232 Ethernet29/5 29 100000
Ethernet232 233,234,235,236 Ethernet30/1 30 100000
Ethernet236 237,238,239,240 Ethernet30/5 30 100000
Ethernet240 241,242,243,244 Ethernet31/1 31 100000
Ethernet244 245,246,247,248 Ethernet31/5 31 100000
Ethernet248 249,250,251,252 Ethernet32/1 32 100000
Ethernet252 253,254,255,256 Ethernet32/5 32 100000
Ethernet256 258 Ethernet33 33 10000
Ethernet260 257 Ethernet34 34 10000

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th3-a7060px4-32-64x100G.config.bcm

View File

@ -0,0 +1,877 @@
PHY_AN_ALLOW_PLL_CHANGE=1
arl_clean_timeout_usec=15000000
asf_mem_profile.0=2
bcm_num_cos.0=8
bcm_stat_flags=1
bcm_stat_jumbo.0=9236
cdma_timeout_usec.0=15000000
dma_desc_timeout_usec.0=15000000
dpr_clock_frequency.0=1000
higig2_hdr_mode.0=1
ipv6_lpm_128b_enable.0=0
l2xmsg_mode.0=1
l2_mem_entries.0=8192
l3_alpm_enable.0=2
l3_mem_entries.0=16384
max_vp_lags.0=0
miim_intr_enable.0=0
module_64ports.0=1
multicast_l2_range.0=511
num_ipv6_lpm_128b_entries.0=0
os=unix
oversubscribe_mode=1
pbmp_xport_xe.0=0xf0000f4000f0000f0000f0000f4000f0001e
phy_an_c37_38.0=2
phy_an_c37_118.0=2
phy_an_c37_1.0=1
phy_an_c37_2.0=1
phy_an_c37_3.0=1
phy_an_c37_4.0=1
phy_an_c37_5.0=1
phy_an_c37_6.0=1
phy_an_c37_7.0=1
phy_an_c37_8.0=1
phy_an_c37_20.0=1
phy_an_c37_21.0=1
phy_an_c37_22.0=1
phy_an_c37_23.0=1
phy_an_c37_24.0=1
phy_an_c37_25.0=1
phy_an_c37_26.0=1
phy_an_c37_27.0=1
phy_an_c37_38.0=0
phy_an_c37_40.0=1
phy_an_c37_41.0=1
phy_an_c37_42.0=1
phy_an_c37_43.0=1
phy_an_c37_44.0=1
phy_an_c37_45.0=1
phy_an_c37_46.0=1
phy_an_c37_47.0=1
phy_an_c37_60.0=1
phy_an_c37_61.0=1
phy_an_c37_62.0=1
phy_an_c37_63.0=1
phy_an_c37_64.0=1
phy_an_c37_65.0=1
phy_an_c37_66.0=1
phy_an_c37_67.0=1
phy_an_c37_80.0=1
phy_an_c37_81.0=1
phy_an_c37_82.0=1
phy_an_c37_83.0=1
phy_an_c37_84.0=1
phy_an_c37_85.0=1
phy_an_c37_86.0=1
phy_an_c37_87.0=1
phy_an_c37_100.0=1
phy_an_c37_101.0=1
phy_an_c37_102.0=1
phy_an_c37_103.0=1
phy_an_c37_104.0=1
phy_an_c37_105.0=1
phy_an_c37_106.0=1
phy_an_c37_107.0=1
phy_an_c37_118.0=0
phy_an_c37_120.0=1
phy_an_c37_121.0=1
phy_an_c37_122.0=1
phy_an_c37_123.0=1
phy_an_c37_124.0=1
phy_an_c37_125.0=1
phy_an_c37_126.0=1
phy_an_c37_127.0=1
phy_an_c37_140.0=1
phy_an_c37_141.0=1
phy_an_c37_142.0=1
phy_an_c37_143.0=1
phy_an_c37_144.0=1
phy_an_c37_145.0=1
phy_an_c37_146.0=1
phy_an_c37_147.0=1
phy_chain_rx_lane_map_physical{1.0}=0x72634150
phy_chain_rx_lane_map_physical{9.0}=0x63725041
phy_chain_rx_lane_map_physical{17.0}=0x23071465
phy_chain_rx_lane_map_physical{25.0}=0x03125746
phy_chain_rx_lane_map_physical{33.0}=0x12063574
phy_chain_rx_lane_map_physical{41.0}=0x03125647
phy_chain_rx_lane_map_physical{49.0}=0x12053467
phy_chain_rx_lane_map_physical{57.0}=0x03125647
phy_chain_rx_lane_map_physical{65.0}=0x12043576
phy_chain_rx_lane_map_physical{73.0}=0x03125746
phy_chain_rx_lane_map_physical{81.0}=0x12043576
phy_chain_rx_lane_map_physical{89.0}=0x03125746
phy_chain_rx_lane_map_physical{97.0}=0x40165327
phy_chain_rx_lane_map_physical{105.0}=0x56470213
phy_chain_rx_lane_map_physical{113.0}=0x21340576
phy_chain_rx_lane_map_physical{121.0}=0x47562130
phy_chain_rx_lane_map_physical{129.0}=0x56437201
phy_chain_rx_lane_map_physical{137.0}=0x03125647
phy_chain_rx_lane_map_physical{145.0}=0x12043576
phy_chain_rx_lane_map_physical{153.0}=0x54106723
phy_chain_rx_lane_map_physical{161.0}=0x63257014
phy_chain_rx_lane_map_physical{169.0}=0x03125647
phy_chain_rx_lane_map_physical{177.0}=0x12043567
phy_chain_rx_lane_map_physical{185.0}=0x03125647
phy_chain_rx_lane_map_physical{193.0}=0x12043567
phy_chain_rx_lane_map_physical{201.0}=0x03125647
phy_chain_rx_lane_map_physical{209.0}=0x12043576
phy_chain_rx_lane_map_physical{217.0}=0x03125467
phy_chain_rx_lane_map_physical{225.0}=0x12073465
phy_chain_rx_lane_map_physical{233.0}=0x30215647
phy_chain_rx_lane_map_physical{241.0}=0x23071564
phy_chain_rx_lane_map_physical{249.0}=0x72634150
phy_chain_rx_lane_map_physical{257.0}=0x3210
phy_chain_rx_polarity_flip_physical{1.0}=0x1
phy_chain_rx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x1
phy_chain_rx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_rx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{18.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_rx_polarity_flip_physical{29.0}=0x0
phy_chain_rx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{31.0}=0x1
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{34.0}=0x1
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{41.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x0
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_rx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{56.0}=0x0
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{59.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{66.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{70.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x1
phy_chain_rx_polarity_flip_physical{82.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x0
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{90.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{93.0}=0x0
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{95.0}=0x1
phy_chain_rx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{97.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{100.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{109.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{114.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{120.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{133.0}=0x0
phy_chain_rx_polarity_flip_physical{134.0}=0x1
phy_chain_rx_polarity_flip_physical{135.0}=0x0
phy_chain_rx_polarity_flip_physical{136.0}=0x0
phy_chain_rx_polarity_flip_physical{137.0}=0x0
phy_chain_rx_polarity_flip_physical{138.0}=0x1
phy_chain_rx_polarity_flip_physical{139.0}=0x1
phy_chain_rx_polarity_flip_physical{140.0}=0x0
phy_chain_rx_polarity_flip_physical{141.0}=0x0
phy_chain_rx_polarity_flip_physical{142.0}=0x1
phy_chain_rx_polarity_flip_physical{143.0}=0x1
phy_chain_rx_polarity_flip_physical{144.0}=0x0
phy_chain_rx_polarity_flip_physical{145.0}=0x1
phy_chain_rx_polarity_flip_physical{146.0}=0x1
phy_chain_rx_polarity_flip_physical{147.0}=0x0
phy_chain_rx_polarity_flip_physical{148.0}=0x0
phy_chain_rx_polarity_flip_physical{149.0}=0x1
phy_chain_rx_polarity_flip_physical{150.0}=0x1
phy_chain_rx_polarity_flip_physical{151.0}=0x0
phy_chain_rx_polarity_flip_physical{152.0}=0x0
phy_chain_rx_polarity_flip_physical{153.0}=0x0
phy_chain_rx_polarity_flip_physical{154.0}=0x1
phy_chain_rx_polarity_flip_physical{155.0}=0x0
phy_chain_rx_polarity_flip_physical{156.0}=0x1
phy_chain_rx_polarity_flip_physical{157.0}=0x1
phy_chain_rx_polarity_flip_physical{158.0}=0x0
phy_chain_rx_polarity_flip_physical{159.0}=0x1
phy_chain_rx_polarity_flip_physical{160.0}=0x0
phy_chain_rx_polarity_flip_physical{161.0}=0x1
phy_chain_rx_polarity_flip_physical{162.0}=0x1
phy_chain_rx_polarity_flip_physical{163.0}=0x1
phy_chain_rx_polarity_flip_physical{164.0}=0x1
phy_chain_rx_polarity_flip_physical{165.0}=0x0
phy_chain_rx_polarity_flip_physical{166.0}=0x0
phy_chain_rx_polarity_flip_physical{167.0}=0x0
phy_chain_rx_polarity_flip_physical{168.0}=0x0
phy_chain_rx_polarity_flip_physical{169.0}=0x0
phy_chain_rx_polarity_flip_physical{170.0}=0x1
phy_chain_rx_polarity_flip_physical{171.0}=0x1
phy_chain_rx_polarity_flip_physical{172.0}=0x0
phy_chain_rx_polarity_flip_physical{173.0}=0x0
phy_chain_rx_polarity_flip_physical{174.0}=0x1
phy_chain_rx_polarity_flip_physical{175.0}=0x1
phy_chain_rx_polarity_flip_physical{176.0}=0x0
phy_chain_rx_polarity_flip_physical{177.0}=0x0
phy_chain_rx_polarity_flip_physical{178.0}=0x0
phy_chain_rx_polarity_flip_physical{179.0}=0x0
phy_chain_rx_polarity_flip_physical{180.0}=0x0
phy_chain_rx_polarity_flip_physical{181.0}=0x1
phy_chain_rx_polarity_flip_physical{182.0}=0x1
phy_chain_rx_polarity_flip_physical{183.0}=0x0
phy_chain_rx_polarity_flip_physical{184.0}=0x0
phy_chain_rx_polarity_flip_physical{185.0}=0x0
phy_chain_rx_polarity_flip_physical{186.0}=0x1
phy_chain_rx_polarity_flip_physical{187.0}=0x1
phy_chain_rx_polarity_flip_physical{188.0}=0x0
phy_chain_rx_polarity_flip_physical{189.0}=0x0
phy_chain_rx_polarity_flip_physical{190.0}=0x1
phy_chain_rx_polarity_flip_physical{191.0}=0x1
phy_chain_rx_polarity_flip_physical{192.0}=0x0
phy_chain_rx_polarity_flip_physical{193.0}=0x0
phy_chain_rx_polarity_flip_physical{194.0}=0x0
phy_chain_rx_polarity_flip_physical{195.0}=0x0
phy_chain_rx_polarity_flip_physical{196.0}=0x0
phy_chain_rx_polarity_flip_physical{197.0}=0x1
phy_chain_rx_polarity_flip_physical{198.0}=0x1
phy_chain_rx_polarity_flip_physical{199.0}=0x0
phy_chain_rx_polarity_flip_physical{200.0}=0x0
phy_chain_rx_polarity_flip_physical{201.0}=0x0
phy_chain_rx_polarity_flip_physical{202.0}=0x1
phy_chain_rx_polarity_flip_physical{203.0}=0x1
phy_chain_rx_polarity_flip_physical{204.0}=0x0
phy_chain_rx_polarity_flip_physical{205.0}=0x0
phy_chain_rx_polarity_flip_physical{206.0}=0x1
phy_chain_rx_polarity_flip_physical{207.0}=0x1
phy_chain_rx_polarity_flip_physical{208.0}=0x0
phy_chain_rx_polarity_flip_physical{209.0}=0x1
phy_chain_rx_polarity_flip_physical{210.0}=0x1
phy_chain_rx_polarity_flip_physical{211.0}=0x0
phy_chain_rx_polarity_flip_physical{212.0}=0x0
phy_chain_rx_polarity_flip_physical{213.0}=0x1
phy_chain_rx_polarity_flip_physical{214.0}=0x1
phy_chain_rx_polarity_flip_physical{215.0}=0x0
phy_chain_rx_polarity_flip_physical{216.0}=0x0
phy_chain_rx_polarity_flip_physical{217.0}=0x0
phy_chain_rx_polarity_flip_physical{218.0}=0x1
phy_chain_rx_polarity_flip_physical{219.0}=0x1
phy_chain_rx_polarity_flip_physical{220.0}=0x0
phy_chain_rx_polarity_flip_physical{221.0}=0x0
phy_chain_rx_polarity_flip_physical{222.0}=0x1
phy_chain_rx_polarity_flip_physical{223.0}=0x1
phy_chain_rx_polarity_flip_physical{224.0}=0x0
phy_chain_rx_polarity_flip_physical{225.0}=0x0
phy_chain_rx_polarity_flip_physical{226.0}=0x0
phy_chain_rx_polarity_flip_physical{227.0}=0x1
phy_chain_rx_polarity_flip_physical{228.0}=0x0
phy_chain_rx_polarity_flip_physical{229.0}=0x0
phy_chain_rx_polarity_flip_physical{230.0}=0x1
phy_chain_rx_polarity_flip_physical{231.0}=0x0
phy_chain_rx_polarity_flip_physical{232.0}=0x0
phy_chain_rx_polarity_flip_physical{233.0}=0x0
phy_chain_rx_polarity_flip_physical{234.0}=0x1
phy_chain_rx_polarity_flip_physical{235.0}=0x1
phy_chain_rx_polarity_flip_physical{236.0}=0x0
phy_chain_rx_polarity_flip_physical{237.0}=0x1
phy_chain_rx_polarity_flip_physical{238.0}=0x0
phy_chain_rx_polarity_flip_physical{239.0}=0x0
phy_chain_rx_polarity_flip_physical{240.0}=0x1
phy_chain_rx_polarity_flip_physical{241.0}=0x1
phy_chain_rx_polarity_flip_physical{242.0}=0x0
phy_chain_rx_polarity_flip_physical{243.0}=0x0
phy_chain_rx_polarity_flip_physical{244.0}=0x0
phy_chain_rx_polarity_flip_physical{245.0}=0x0
phy_chain_rx_polarity_flip_physical{246.0}=0x1
phy_chain_rx_polarity_flip_physical{247.0}=0x1
phy_chain_rx_polarity_flip_physical{248.0}=0x1
phy_chain_rx_polarity_flip_physical{249.0}=0x1
phy_chain_rx_polarity_flip_physical{250.0}=0x1
phy_chain_rx_polarity_flip_physical{251.0}=0x0
phy_chain_rx_polarity_flip_physical{252.0}=0x0
phy_chain_rx_polarity_flip_physical{253.0}=0x0
phy_chain_rx_polarity_flip_physical{254.0}=0x0
phy_chain_rx_polarity_flip_physical{255.0}=0x1
phy_chain_rx_polarity_flip_physical{256.0}=0x1
phy_chain_rx_polarity_flip_physical{257.0}=0x0
phy_chain_rx_polarity_flip_physical{258.0}=0x0
phy_chain_tx_lane_map_physical{1.0}=0x13245076
phy_chain_tx_lane_map_physical{9.0}=0x76501423
phy_chain_tx_lane_map_physical{17.0}=0x75643120
phy_chain_tx_lane_map_physical{25.0}=0x74653201
phy_chain_tx_lane_map_physical{33.0}=0x75603124
phy_chain_tx_lane_map_physical{41.0}=0x64753120
phy_chain_tx_lane_map_physical{49.0}=0x65741032
phy_chain_tx_lane_map_physical{57.0}=0x64753210
phy_chain_tx_lane_map_physical{65.0}=0x65740132
phy_chain_tx_lane_map_physical{73.0}=0x64753210
phy_chain_tx_lane_map_physical{81.0}=0x65740132
phy_chain_tx_lane_map_physical{89.0}=0x64753210
phy_chain_tx_lane_map_physical{97.0}=0x63057124
phy_chain_tx_lane_map_physical{105.0}=0x67453021
phy_chain_tx_lane_map_physical{113.0}=0x76502413
phy_chain_tx_lane_map_physical{121.0}=0x13257064
phy_chain_tx_lane_map_physical{129.0}=0x32146057
phy_chain_tx_lane_map_physical{137.0}=0x57613420
phy_chain_tx_lane_map_physical{145.0}=0x76502413
phy_chain_tx_lane_map_physical{153.0}=0x64173520
phy_chain_tx_lane_map_physical{161.0}=0x56742031
phy_chain_tx_lane_map_physical{169.0}=0x74601523
phy_chain_tx_lane_map_physical{177.0}=0x56742031
phy_chain_tx_lane_map_physical{185.0}=0x74601523
phy_chain_tx_lane_map_physical{193.0}=0x56742031
phy_chain_tx_lane_map_physical{201.0}=0x74601523
phy_chain_tx_lane_map_physical{209.0}=0x56742031
phy_chain_tx_lane_map_physical{217.0}=0x74603512
phy_chain_tx_lane_map_physical{225.0}=0x75642031
phy_chain_tx_lane_map_physical{233.0}=0x57612430
phy_chain_tx_lane_map_physical{241.0}=0x65742031
phy_chain_tx_lane_map_physical{249.0}=0x52316470
phy_chain_tx_lane_map_physical{257.0}=0x3210
phy_chain_tx_polarity_flip_physical{1.0}=0x1
phy_chain_tx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x1
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x0
phy_chain_tx_polarity_flip_physical{9.0}=0x1
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_tx_polarity_flip_physical{11.0}=0x1
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x0
phy_chain_tx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_tx_polarity_flip_physical{17.0}=0x1
phy_chain_tx_polarity_flip_physical{18.0}=0x0
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x0
phy_chain_tx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_tx_polarity_flip_physical{29.0}=0x0
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_tx_polarity_flip_physical{31.0}=0x1
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x0
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_tx_polarity_flip_physical{41.0}=0x0
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_tx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x0
phy_chain_tx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_tx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x1
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_tx_polarity_flip_physical{66.0}=0x1
phy_chain_tx_polarity_flip_physical{67.0}=0x0
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x0
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_tx_polarity_flip_physical{72.0}=0x1
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x1
phy_chain_tx_polarity_flip_physical{82.0}=0x1
phy_chain_tx_polarity_flip_physical{83.0}=0x0
phy_chain_tx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x0
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_tx_polarity_flip_physical{88.0}=0x1
phy_chain_tx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x1
phy_chain_tx_polarity_flip_physical{91.0}=0x0
phy_chain_tx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x0
phy_chain_tx_polarity_flip_physical{94.0}=0x0
phy_chain_tx_polarity_flip_physical{95.0}=0x1
phy_chain_tx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x0
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x0
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_tx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_tx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x0
phy_chain_tx_polarity_flip_physical{114.0}=0x1
phy_chain_tx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x0
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_tx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x1
phy_chain_tx_polarity_flip_physical{127.0}=0x0
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x1
phy_chain_tx_polarity_flip_physical{131.0}=0x0
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_tx_polarity_flip_physical{133.0}=0x1
phy_chain_tx_polarity_flip_physical{134.0}=0x0
phy_chain_tx_polarity_flip_physical{135.0}=0x0
phy_chain_tx_polarity_flip_physical{136.0}=0x0
phy_chain_tx_polarity_flip_physical{137.0}=0x0
phy_chain_tx_polarity_flip_physical{138.0}=0x0
phy_chain_tx_polarity_flip_physical{139.0}=0x1
phy_chain_tx_polarity_flip_physical{140.0}=0x1
phy_chain_tx_polarity_flip_physical{141.0}=0x1
phy_chain_tx_polarity_flip_physical{142.0}=0x1
phy_chain_tx_polarity_flip_physical{143.0}=0x0
phy_chain_tx_polarity_flip_physical{144.0}=0x0
phy_chain_tx_polarity_flip_physical{145.0}=0x0
phy_chain_tx_polarity_flip_physical{146.0}=0x1
phy_chain_tx_polarity_flip_physical{147.0}=0x0
phy_chain_tx_polarity_flip_physical{148.0}=0x0
phy_chain_tx_polarity_flip_physical{149.0}=0x1
phy_chain_tx_polarity_flip_physical{150.0}=0x0
phy_chain_tx_polarity_flip_physical{151.0}=0x0
phy_chain_tx_polarity_flip_physical{152.0}=0x0
phy_chain_tx_polarity_flip_physical{153.0}=0x0
phy_chain_tx_polarity_flip_physical{154.0}=0x0
phy_chain_tx_polarity_flip_physical{155.0}=0x0
phy_chain_tx_polarity_flip_physical{156.0}=0x1
phy_chain_tx_polarity_flip_physical{157.0}=0x0
phy_chain_tx_polarity_flip_physical{158.0}=0x1
phy_chain_tx_polarity_flip_physical{159.0}=0x1
phy_chain_tx_polarity_flip_physical{160.0}=0x0
phy_chain_tx_polarity_flip_physical{161.0}=0x0
phy_chain_tx_polarity_flip_physical{162.0}=0x1
phy_chain_tx_polarity_flip_physical{163.0}=0x1
phy_chain_tx_polarity_flip_physical{164.0}=0x0
phy_chain_tx_polarity_flip_physical{165.0}=0x0
phy_chain_tx_polarity_flip_physical{166.0}=0x0
phy_chain_tx_polarity_flip_physical{167.0}=0x0
phy_chain_tx_polarity_flip_physical{168.0}=0x0
phy_chain_tx_polarity_flip_physical{169.0}=0x1
phy_chain_tx_polarity_flip_physical{170.0}=0x0
phy_chain_tx_polarity_flip_physical{171.0}=0x0
phy_chain_tx_polarity_flip_physical{172.0}=0x1
phy_chain_tx_polarity_flip_physical{173.0}=0x0
phy_chain_tx_polarity_flip_physical{174.0}=0x1
phy_chain_tx_polarity_flip_physical{175.0}=0x1
phy_chain_tx_polarity_flip_physical{176.0}=0x0
phy_chain_tx_polarity_flip_physical{177.0}=0x0
phy_chain_tx_polarity_flip_physical{178.0}=0x1
phy_chain_tx_polarity_flip_physical{179.0}=0x1
phy_chain_tx_polarity_flip_physical{180.0}=0x0
phy_chain_tx_polarity_flip_physical{181.0}=0x0
phy_chain_tx_polarity_flip_physical{182.0}=0x0
phy_chain_tx_polarity_flip_physical{183.0}=0x0
phy_chain_tx_polarity_flip_physical{184.0}=0x0
phy_chain_tx_polarity_flip_physical{185.0}=0x1
phy_chain_tx_polarity_flip_physical{186.0}=0x0
phy_chain_tx_polarity_flip_physical{187.0}=0x0
phy_chain_tx_polarity_flip_physical{188.0}=0x1
phy_chain_tx_polarity_flip_physical{189.0}=0x0
phy_chain_tx_polarity_flip_physical{190.0}=0x1
phy_chain_tx_polarity_flip_physical{191.0}=0x1
phy_chain_tx_polarity_flip_physical{192.0}=0x0
phy_chain_tx_polarity_flip_physical{193.0}=0x0
phy_chain_tx_polarity_flip_physical{194.0}=0x1
phy_chain_tx_polarity_flip_physical{195.0}=0x1
phy_chain_tx_polarity_flip_physical{196.0}=0x0
phy_chain_tx_polarity_flip_physical{197.0}=0x0
phy_chain_tx_polarity_flip_physical{198.0}=0x0
phy_chain_tx_polarity_flip_physical{199.0}=0x0
phy_chain_tx_polarity_flip_physical{200.0}=0x0
phy_chain_tx_polarity_flip_physical{201.0}=0x1
phy_chain_tx_polarity_flip_physical{202.0}=0x0
phy_chain_tx_polarity_flip_physical{203.0}=0x0
phy_chain_tx_polarity_flip_physical{204.0}=0x1
phy_chain_tx_polarity_flip_physical{205.0}=0x0
phy_chain_tx_polarity_flip_physical{206.0}=0x1
phy_chain_tx_polarity_flip_physical{207.0}=0x1
phy_chain_tx_polarity_flip_physical{208.0}=0x0
phy_chain_tx_polarity_flip_physical{209.0}=0x0
phy_chain_tx_polarity_flip_physical{210.0}=0x1
phy_chain_tx_polarity_flip_physical{211.0}=0x1
phy_chain_tx_polarity_flip_physical{212.0}=0x0
phy_chain_tx_polarity_flip_physical{213.0}=0x0
phy_chain_tx_polarity_flip_physical{214.0}=0x0
phy_chain_tx_polarity_flip_physical{215.0}=0x0
phy_chain_tx_polarity_flip_physical{216.0}=0x0
phy_chain_tx_polarity_flip_physical{217.0}=0x0
phy_chain_tx_polarity_flip_physical{218.0}=0x1
phy_chain_tx_polarity_flip_physical{219.0}=0x0
phy_chain_tx_polarity_flip_physical{220.0}=0x1
phy_chain_tx_polarity_flip_physical{221.0}=0x0
phy_chain_tx_polarity_flip_physical{222.0}=0x1
phy_chain_tx_polarity_flip_physical{223.0}=0x1
phy_chain_tx_polarity_flip_physical{224.0}=0x0
phy_chain_tx_polarity_flip_physical{225.0}=0x0
phy_chain_tx_polarity_flip_physical{226.0}=0x1
phy_chain_tx_polarity_flip_physical{227.0}=0x1
phy_chain_tx_polarity_flip_physical{228.0}=0x0
phy_chain_tx_polarity_flip_physical{229.0}=0x0
phy_chain_tx_polarity_flip_physical{230.0}=0x1
phy_chain_tx_polarity_flip_physical{231.0}=0x1
phy_chain_tx_polarity_flip_physical{232.0}=0x0
phy_chain_tx_polarity_flip_physical{233.0}=0x0
phy_chain_tx_polarity_flip_physical{234.0}=0x1
phy_chain_tx_polarity_flip_physical{235.0}=0x1
phy_chain_tx_polarity_flip_physical{236.0}=0x0
phy_chain_tx_polarity_flip_physical{237.0}=0x1
phy_chain_tx_polarity_flip_physical{238.0}=0x1
phy_chain_tx_polarity_flip_physical{239.0}=0x0
phy_chain_tx_polarity_flip_physical{240.0}=0x0
phy_chain_tx_polarity_flip_physical{241.0}=0x0
phy_chain_tx_polarity_flip_physical{242.0}=0x1
phy_chain_tx_polarity_flip_physical{243.0}=0x1
phy_chain_tx_polarity_flip_physical{244.0}=0x0
phy_chain_tx_polarity_flip_physical{245.0}=0x0
phy_chain_tx_polarity_flip_physical{246.0}=0x0
phy_chain_tx_polarity_flip_physical{247.0}=0x1
phy_chain_tx_polarity_flip_physical{248.0}=0x1
phy_chain_tx_polarity_flip_physical{249.0}=0x1
phy_chain_tx_polarity_flip_physical{250.0}=0x1
phy_chain_tx_polarity_flip_physical{251.0}=0x0
phy_chain_tx_polarity_flip_physical{252.0}=0x0
phy_chain_tx_polarity_flip_physical{253.0}=0x0
phy_chain_tx_polarity_flip_physical{254.0}=0x0
phy_chain_tx_polarity_flip_physical{255.0}=0x1
phy_chain_tx_polarity_flip_physical{256.0}=0x1
phy_chain_tx_polarity_flip_physical{257.0}=0x0
phy_chain_tx_polarity_flip_physical{258.0}=0x0
portmap_1.0=1:100:4
portmap_2.0=5:100:4
portmap_3.0=9:100:4
portmap_4.0=13:100:4
portmap_5.0=17:100:4
portmap_6.0=21:100:4
portmap_7.0=25:100:4
portmap_8.0=29:100:4
portmap_20.0=33:100:4
portmap_21.0=37:100:4
portmap_22.0=41:100:4
portmap_23.0=45:100:4
portmap_24.0=49:100:4
portmap_25.0=53:100:4
portmap_26.0=57:100:4
portmap_27.0=61:100:4
portmap_38.0=257:10
portmap_40.0=65:100:4
portmap_41.0=69:100:4
portmap_42.0=73:100:4
portmap_43.0=77:100:4
portmap_44.0=81:100:4
portmap_45.0=85:100:4
portmap_46.0=89:100:4
portmap_47.0=93:100:4
portmap_60.0=97:100:4
portmap_61.0=101:100:4
portmap_62.0=105:100:4
portmap_63.0=109:100:4
portmap_64.0=113:100:4
portmap_65.0=117:100:4
portmap_66.0=121:100:4
portmap_67.0=125:100:4
portmap_80.0=129:100:4
portmap_81.0=133:100:4
portmap_82.0=137:100:4
portmap_83.0=141:100:4
portmap_84.0=145:100:4
portmap_85.0=149:100:4
portmap_86.0=153:100:4
portmap_87.0=157:100:4
portmap_100.0=161:100:4
portmap_101.0=165:100:4
portmap_102.0=169:100:4
portmap_103.0=173:100:4
portmap_104.0=177:100:4
portmap_105.0=181:100:4
portmap_106.0=185:100:4
portmap_107.0=189:100:4
portmap_118.0=258:10
portmap_120.0=193:100:4
portmap_121.0=197:100:4
portmap_122.0=201:100:4
portmap_123.0=205:100:4
portmap_124.0=209:100:4
portmap_125.0=213:100:4
portmap_126.0=217:100:4
portmap_127.0=221:100:4
portmap_140.0=225:100:4
portmap_141.0=229:100:4
portmap_142.0=233:100:4
portmap_143.0=237:100:4
portmap_144.0=241:100:4
portmap_145.0=245:100:4
portmap_146.0=249:100:4
portmap_147.0=253:100:4
port_init_autoneg_1.0=0
port_init_autoneg_2.0=0
port_init_autoneg_3.0=0
port_init_autoneg_4.0=0
port_init_autoneg_5.0=0
port_init_autoneg_6.0=0
port_init_autoneg_7.0=0
port_init_autoneg_8.0=0
port_init_autoneg_20.0=0
port_init_autoneg_21.0=0
port_init_autoneg_22.0=0
port_init_autoneg_23.0=0
port_init_autoneg_24.0=0
port_init_autoneg_25.0=0
port_init_autoneg_26.0=0
port_init_autoneg_27.0=0
port_init_autoneg_38.0=0
port_init_autoneg_40.0=0
port_init_autoneg_41.0=0
port_init_autoneg_42.0=0
port_init_autoneg_43.0=0
port_init_autoneg_44.0=0
port_init_autoneg_45.0=0
port_init_autoneg_46.0=0
port_init_autoneg_47.0=0
port_init_autoneg_60.0=0
port_init_autoneg_61.0=0
port_init_autoneg_62.0=0
port_init_autoneg_63.0=0
port_init_autoneg_64.0=0
port_init_autoneg_65.0=0
port_init_autoneg_66.0=0
port_init_autoneg_67.0=0
port_init_autoneg_80.0=0
port_init_autoneg_81.0=0
port_init_autoneg_82.0=0
port_init_autoneg_83.0=0
port_init_autoneg_84.0=0
port_init_autoneg_85.0=0
port_init_autoneg_86.0=0
port_init_autoneg_87.0=0
port_init_autoneg_100.0=0
port_init_autoneg_101.0=0
port_init_autoneg_102.0=0
port_init_autoneg_103.0=0
port_init_autoneg_104.0=0
port_init_autoneg_105.0=0
port_init_autoneg_106.0=0
port_init_autoneg_107.0=0
port_init_autoneg_118.0=0
port_init_autoneg_120.0=0
port_init_autoneg_121.0=0
port_init_autoneg_122.0=0
port_init_autoneg_123.0=0
port_init_autoneg_124.0=0
port_init_autoneg_125.0=0
port_init_autoneg_126.0=0
port_init_autoneg_127.0=0
port_init_autoneg_140.0=0
port_init_autoneg_141.0=0
port_init_autoneg_142.0=0
port_init_autoneg_143.0=0
port_init_autoneg_144.0=0
port_init_autoneg_145.0=0
port_init_autoneg_146.0=0
port_init_autoneg_147.0=0
port_phy_addr_1.0=0xff
port_phy_addr_2.0=0xff
port_phy_addr_3.0=0xff
port_phy_addr_4.0=0xff
port_phy_addr_5.0=0xff
port_phy_addr_6.0=0xff
port_phy_addr_7.0=0xff
port_phy_addr_8.0=0xff
port_phy_addr_20.0=0xff
port_phy_addr_21.0=0xff
port_phy_addr_22.0=0xff
port_phy_addr_23.0=0xff
port_phy_addr_24.0=0xff
port_phy_addr_25.0=0xff
port_phy_addr_26.0=0xff
port_phy_addr_27.0=0xff
port_phy_addr_38.0=0xff
port_phy_addr_40.0=0xff
port_phy_addr_41.0=0xff
port_phy_addr_42.0=0xff
port_phy_addr_43.0=0xff
port_phy_addr_44.0=0xff
port_phy_addr_45.0=0xff
port_phy_addr_46.0=0xff
port_phy_addr_47.0=0xff
port_phy_addr_60.0=0xff
port_phy_addr_61.0=0xff
port_phy_addr_62.0=0xff
port_phy_addr_63.0=0xff
port_phy_addr_64.0=0xff
port_phy_addr_65.0=0xff
port_phy_addr_66.0=0xff
port_phy_addr_67.0=0xff
port_phy_addr_80.0=0xff
port_phy_addr_81.0=0xff
port_phy_addr_82.0=0xff
port_phy_addr_83.0=0xff
port_phy_addr_84.0=0xff
port_phy_addr_85.0=0xff
port_phy_addr_86.0=0xff
port_phy_addr_87.0=0xff
port_phy_addr_100.0=0xff
port_phy_addr_101.0=0xff
port_phy_addr_102.0=0xff
port_phy_addr_103.0=0xff
port_phy_addr_104.0=0xff
port_phy_addr_105.0=0xff
port_phy_addr_106.0=0xff
port_phy_addr_107.0=0xff
port_phy_addr_118.0=0xff
port_phy_addr_120.0=0xff
port_phy_addr_121.0=0xff
port_phy_addr_122.0=0xff
port_phy_addr_123.0=0xff
port_phy_addr_124.0=0xff
port_phy_addr_125.0=0xff
port_phy_addr_126.0=0xff
port_phy_addr_127.0=0xff
port_phy_addr_140.0=0xff
port_phy_addr_141.0=0xff
port_phy_addr_142.0=0xff
port_phy_addr_143.0=0xff
port_phy_addr_144.0=0xff
port_phy_addr_145.0=0xff
port_phy_addr_146.0=0xff
port_phy_addr_147.0=0xff
robust_hash_disable_egress_vlan.0=1
robust_hash_disable_mpls.0=1
robust_hash_disable_vlan.0=1
sram_scan_enable.0=0
tdma_timeout_usec.0=15000000
tslam_timeout_usec.0=15000000

View File

@ -0,0 +1,749 @@
PHY_AN_ALLOW_PLL_CHANGE=1
arl_clean_timeout_usec=15000000
asf_mem_profile.0=2
bcm_num_cos.0=8
bcm_stat_flags=1
bcm_stat_jumbo.0=9236
cdma_timeout_usec.0=15000000
dma_desc_timeout_usec.0=15000000
dpr_clock_frequency.0=1000
higig2_hdr_mode.0=1
ipv6_lpm_128b_enable.0=0
l2xmsg_mode.0=1
l2_mem_entries.0=8192
l3_alpm_enable.0=2
l3_mem_entries.0=16384
max_vp_lags.0=0
miim_intr_enable.0=0
module_64ports.0=1
multicast_l2_range.0=511
num_ipv6_lpm_128b_entries.0=0
os=unix
oversubscribe_mode=1
pbmp_xport_xe.0=0xf0000f4000f0000f0000f0000f4000f0001e
phy_an_c37_38.0=2
phy_an_c37_118.0=2
phy_an_c73_1.0=1
phy_an_c73_2.0=1
phy_an_c73_3.0=1
phy_an_c73_4.0=1
phy_an_c73_20.0=1
phy_an_c73_21.0=1
phy_an_c73_22.0=1
phy_an_c73_23.0=1
phy_an_c73_38.0=0
phy_an_c73_40.0=1
phy_an_c73_41.0=1
phy_an_c73_42.0=1
phy_an_c73_43.0=1
phy_an_c73_60.0=1
phy_an_c73_61.0=1
phy_an_c73_62.0=1
phy_an_c73_63.0=1
phy_an_c73_80.0=1
phy_an_c73_81.0=1
phy_an_c73_82.0=1
phy_an_c73_83.0=1
phy_an_c73_100.0=1
phy_an_c73_101.0=1
phy_an_c73_102.0=1
phy_an_c73_103.0=1
phy_an_c73_118.0=0
phy_an_c73_120.0=1
phy_an_c73_121.0=1
phy_an_c73_122.0=1
phy_an_c73_123.0=1
phy_an_c73_140.0=1
phy_an_c73_141.0=1
phy_an_c73_142.0=1
phy_an_c73_143.0=1
phy_chain_rx_lane_map_physical{1.0}=0x72634150
phy_chain_rx_lane_map_physical{9.0}=0x63725041
phy_chain_rx_lane_map_physical{17.0}=0x23071465
phy_chain_rx_lane_map_physical{25.0}=0x03125746
phy_chain_rx_lane_map_physical{33.0}=0x12063574
phy_chain_rx_lane_map_physical{41.0}=0x03125647
phy_chain_rx_lane_map_physical{49.0}=0x12053467
phy_chain_rx_lane_map_physical{57.0}=0x03125647
phy_chain_rx_lane_map_physical{65.0}=0x12043576
phy_chain_rx_lane_map_physical{73.0}=0x03125746
phy_chain_rx_lane_map_physical{81.0}=0x12043576
phy_chain_rx_lane_map_physical{89.0}=0x03125746
phy_chain_rx_lane_map_physical{97.0}=0x40165327
phy_chain_rx_lane_map_physical{105.0}=0x56470213
phy_chain_rx_lane_map_physical{113.0}=0x21340576
phy_chain_rx_lane_map_physical{121.0}=0x47562130
phy_chain_rx_lane_map_physical{129.0}=0x56437201
phy_chain_rx_lane_map_physical{137.0}=0x03125647
phy_chain_rx_lane_map_physical{145.0}=0x12043576
phy_chain_rx_lane_map_physical{153.0}=0x54106723
phy_chain_rx_lane_map_physical{161.0}=0x63257014
phy_chain_rx_lane_map_physical{169.0}=0x03125647
phy_chain_rx_lane_map_physical{177.0}=0x12043567
phy_chain_rx_lane_map_physical{185.0}=0x03125647
phy_chain_rx_lane_map_physical{193.0}=0x12043567
phy_chain_rx_lane_map_physical{201.0}=0x03125647
phy_chain_rx_lane_map_physical{209.0}=0x12043576
phy_chain_rx_lane_map_physical{217.0}=0x03125467
phy_chain_rx_lane_map_physical{225.0}=0x12073465
phy_chain_rx_lane_map_physical{233.0}=0x30215647
phy_chain_rx_lane_map_physical{241.0}=0x23071564
phy_chain_rx_lane_map_physical{249.0}=0x72634150
phy_chain_rx_lane_map_physical{257.0}=0x3210
phy_chain_rx_polarity_flip_physical{1.0}=0x1
phy_chain_rx_polarity_flip_physical{2.0}=0x0
phy_chain_rx_polarity_flip_physical{3.0}=0x0
phy_chain_rx_polarity_flip_physical{4.0}=0x1
phy_chain_rx_polarity_flip_physical{5.0}=0x0
phy_chain_rx_polarity_flip_physical{6.0}=0x1
phy_chain_rx_polarity_flip_physical{7.0}=0x1
phy_chain_rx_polarity_flip_physical{8.0}=0x0
phy_chain_rx_polarity_flip_physical{9.0}=0x1
phy_chain_rx_polarity_flip_physical{10.0}=0x0
phy_chain_rx_polarity_flip_physical{11.0}=0x0
phy_chain_rx_polarity_flip_physical{12.0}=0x1
phy_chain_rx_polarity_flip_physical{13.0}=0x0
phy_chain_rx_polarity_flip_physical{14.0}=0x1
phy_chain_rx_polarity_flip_physical{15.0}=0x1
phy_chain_rx_polarity_flip_physical{16.0}=0x0
phy_chain_rx_polarity_flip_physical{17.0}=0x0
phy_chain_rx_polarity_flip_physical{18.0}=0x0
phy_chain_rx_polarity_flip_physical{19.0}=0x1
phy_chain_rx_polarity_flip_physical{20.0}=0x0
phy_chain_rx_polarity_flip_physical{21.0}=0x0
phy_chain_rx_polarity_flip_physical{22.0}=0x1
phy_chain_rx_polarity_flip_physical{23.0}=0x1
phy_chain_rx_polarity_flip_physical{24.0}=0x1
phy_chain_rx_polarity_flip_physical{25.0}=0x0
phy_chain_rx_polarity_flip_physical{26.0}=0x1
phy_chain_rx_polarity_flip_physical{27.0}=0x0
phy_chain_rx_polarity_flip_physical{28.0}=0x0
phy_chain_rx_polarity_flip_physical{29.0}=0x0
phy_chain_rx_polarity_flip_physical{30.0}=0x1
phy_chain_rx_polarity_flip_physical{31.0}=0x1
phy_chain_rx_polarity_flip_physical{32.0}=0x0
phy_chain_rx_polarity_flip_physical{33.0}=0x1
phy_chain_rx_polarity_flip_physical{34.0}=0x1
phy_chain_rx_polarity_flip_physical{35.0}=0x0
phy_chain_rx_polarity_flip_physical{36.0}=0x0
phy_chain_rx_polarity_flip_physical{37.0}=0x1
phy_chain_rx_polarity_flip_physical{38.0}=0x1
phy_chain_rx_polarity_flip_physical{39.0}=0x0
phy_chain_rx_polarity_flip_physical{40.0}=0x0
phy_chain_rx_polarity_flip_physical{41.0}=0x0
phy_chain_rx_polarity_flip_physical{42.0}=0x1
phy_chain_rx_polarity_flip_physical{43.0}=0x1
phy_chain_rx_polarity_flip_physical{44.0}=0x0
phy_chain_rx_polarity_flip_physical{45.0}=0x0
phy_chain_rx_polarity_flip_physical{46.0}=0x1
phy_chain_rx_polarity_flip_physical{47.0}=0x1
phy_chain_rx_polarity_flip_physical{48.0}=0x0
phy_chain_rx_polarity_flip_physical{49.0}=0x0
phy_chain_rx_polarity_flip_physical{50.0}=0x0
phy_chain_rx_polarity_flip_physical{51.0}=0x1
phy_chain_rx_polarity_flip_physical{52.0}=0x0
phy_chain_rx_polarity_flip_physical{53.0}=0x0
phy_chain_rx_polarity_flip_physical{54.0}=0x1
phy_chain_rx_polarity_flip_physical{55.0}=0x0
phy_chain_rx_polarity_flip_physical{56.0}=0x0
phy_chain_rx_polarity_flip_physical{57.0}=0x0
phy_chain_rx_polarity_flip_physical{58.0}=0x1
phy_chain_rx_polarity_flip_physical{59.0}=0x1
phy_chain_rx_polarity_flip_physical{60.0}=0x0
phy_chain_rx_polarity_flip_physical{61.0}=0x0
phy_chain_rx_polarity_flip_physical{62.0}=0x1
phy_chain_rx_polarity_flip_physical{63.0}=0x1
phy_chain_rx_polarity_flip_physical{64.0}=0x0
phy_chain_rx_polarity_flip_physical{65.0}=0x1
phy_chain_rx_polarity_flip_physical{66.0}=0x1
phy_chain_rx_polarity_flip_physical{67.0}=0x0
phy_chain_rx_polarity_flip_physical{68.0}=0x0
phy_chain_rx_polarity_flip_physical{69.0}=0x1
phy_chain_rx_polarity_flip_physical{70.0}=0x1
phy_chain_rx_polarity_flip_physical{71.0}=0x0
phy_chain_rx_polarity_flip_physical{72.0}=0x0
phy_chain_rx_polarity_flip_physical{73.0}=0x1
phy_chain_rx_polarity_flip_physical{74.0}=0x1
phy_chain_rx_polarity_flip_physical{75.0}=0x0
phy_chain_rx_polarity_flip_physical{76.0}=0x0
phy_chain_rx_polarity_flip_physical{77.0}=0x0
phy_chain_rx_polarity_flip_physical{78.0}=0x1
phy_chain_rx_polarity_flip_physical{79.0}=0x1
phy_chain_rx_polarity_flip_physical{80.0}=0x0
phy_chain_rx_polarity_flip_physical{81.0}=0x1
phy_chain_rx_polarity_flip_physical{82.0}=0x1
phy_chain_rx_polarity_flip_physical{83.0}=0x0
phy_chain_rx_polarity_flip_physical{84.0}=0x0
phy_chain_rx_polarity_flip_physical{85.0}=0x1
phy_chain_rx_polarity_flip_physical{86.0}=0x1
phy_chain_rx_polarity_flip_physical{87.0}=0x0
phy_chain_rx_polarity_flip_physical{88.0}=0x0
phy_chain_rx_polarity_flip_physical{89.0}=0x1
phy_chain_rx_polarity_flip_physical{90.0}=0x1
phy_chain_rx_polarity_flip_physical{91.0}=0x0
phy_chain_rx_polarity_flip_physical{92.0}=0x0
phy_chain_rx_polarity_flip_physical{93.0}=0x0
phy_chain_rx_polarity_flip_physical{94.0}=0x1
phy_chain_rx_polarity_flip_physical{95.0}=0x1
phy_chain_rx_polarity_flip_physical{96.0}=0x0
phy_chain_rx_polarity_flip_physical{97.0}=0x0
phy_chain_rx_polarity_flip_physical{98.0}=0x1
phy_chain_rx_polarity_flip_physical{99.0}=0x1
phy_chain_rx_polarity_flip_physical{100.0}=0x1
phy_chain_rx_polarity_flip_physical{101.0}=0x1
phy_chain_rx_polarity_flip_physical{102.0}=0x0
phy_chain_rx_polarity_flip_physical{103.0}=0x0
phy_chain_rx_polarity_flip_physical{104.0}=0x0
phy_chain_rx_polarity_flip_physical{105.0}=0x1
phy_chain_rx_polarity_flip_physical{106.0}=0x1
phy_chain_rx_polarity_flip_physical{107.0}=0x0
phy_chain_rx_polarity_flip_physical{108.0}=0x0
phy_chain_rx_polarity_flip_physical{109.0}=0x0
phy_chain_rx_polarity_flip_physical{110.0}=0x1
phy_chain_rx_polarity_flip_physical{111.0}=0x1
phy_chain_rx_polarity_flip_physical{112.0}=0x0
phy_chain_rx_polarity_flip_physical{113.0}=0x1
phy_chain_rx_polarity_flip_physical{114.0}=0x1
phy_chain_rx_polarity_flip_physical{115.0}=0x0
phy_chain_rx_polarity_flip_physical{116.0}=0x1
phy_chain_rx_polarity_flip_physical{117.0}=0x1
phy_chain_rx_polarity_flip_physical{118.0}=0x0
phy_chain_rx_polarity_flip_physical{119.0}=0x1
phy_chain_rx_polarity_flip_physical{120.0}=0x1
phy_chain_rx_polarity_flip_physical{121.0}=0x1
phy_chain_rx_polarity_flip_physical{122.0}=0x0
phy_chain_rx_polarity_flip_physical{123.0}=0x0
phy_chain_rx_polarity_flip_physical{124.0}=0x1
phy_chain_rx_polarity_flip_physical{125.0}=0x0
phy_chain_rx_polarity_flip_physical{126.0}=0x1
phy_chain_rx_polarity_flip_physical{127.0}=0x1
phy_chain_rx_polarity_flip_physical{128.0}=0x0
phy_chain_rx_polarity_flip_physical{129.0}=0x0
phy_chain_rx_polarity_flip_physical{130.0}=0x0
phy_chain_rx_polarity_flip_physical{131.0}=0x1
phy_chain_rx_polarity_flip_physical{132.0}=0x0
phy_chain_rx_polarity_flip_physical{133.0}=0x0
phy_chain_rx_polarity_flip_physical{134.0}=0x1
phy_chain_rx_polarity_flip_physical{135.0}=0x0
phy_chain_rx_polarity_flip_physical{136.0}=0x0
phy_chain_rx_polarity_flip_physical{137.0}=0x0
phy_chain_rx_polarity_flip_physical{138.0}=0x1
phy_chain_rx_polarity_flip_physical{139.0}=0x1
phy_chain_rx_polarity_flip_physical{140.0}=0x0
phy_chain_rx_polarity_flip_physical{141.0}=0x0
phy_chain_rx_polarity_flip_physical{142.0}=0x1
phy_chain_rx_polarity_flip_physical{143.0}=0x1
phy_chain_rx_polarity_flip_physical{144.0}=0x0
phy_chain_rx_polarity_flip_physical{145.0}=0x1
phy_chain_rx_polarity_flip_physical{146.0}=0x1
phy_chain_rx_polarity_flip_physical{147.0}=0x0
phy_chain_rx_polarity_flip_physical{148.0}=0x0
phy_chain_rx_polarity_flip_physical{149.0}=0x1
phy_chain_rx_polarity_flip_physical{150.0}=0x1
phy_chain_rx_polarity_flip_physical{151.0}=0x0
phy_chain_rx_polarity_flip_physical{152.0}=0x0
phy_chain_rx_polarity_flip_physical{153.0}=0x0
phy_chain_rx_polarity_flip_physical{154.0}=0x1
phy_chain_rx_polarity_flip_physical{155.0}=0x0
phy_chain_rx_polarity_flip_physical{156.0}=0x1
phy_chain_rx_polarity_flip_physical{157.0}=0x1
phy_chain_rx_polarity_flip_physical{158.0}=0x0
phy_chain_rx_polarity_flip_physical{159.0}=0x1
phy_chain_rx_polarity_flip_physical{160.0}=0x0
phy_chain_rx_polarity_flip_physical{161.0}=0x1
phy_chain_rx_polarity_flip_physical{162.0}=0x1
phy_chain_rx_polarity_flip_physical{163.0}=0x1
phy_chain_rx_polarity_flip_physical{164.0}=0x1
phy_chain_rx_polarity_flip_physical{165.0}=0x0
phy_chain_rx_polarity_flip_physical{166.0}=0x0
phy_chain_rx_polarity_flip_physical{167.0}=0x0
phy_chain_rx_polarity_flip_physical{168.0}=0x0
phy_chain_rx_polarity_flip_physical{169.0}=0x0
phy_chain_rx_polarity_flip_physical{170.0}=0x1
phy_chain_rx_polarity_flip_physical{171.0}=0x1
phy_chain_rx_polarity_flip_physical{172.0}=0x0
phy_chain_rx_polarity_flip_physical{173.0}=0x0
phy_chain_rx_polarity_flip_physical{174.0}=0x1
phy_chain_rx_polarity_flip_physical{175.0}=0x1
phy_chain_rx_polarity_flip_physical{176.0}=0x0
phy_chain_rx_polarity_flip_physical{177.0}=0x0
phy_chain_rx_polarity_flip_physical{178.0}=0x0
phy_chain_rx_polarity_flip_physical{179.0}=0x0
phy_chain_rx_polarity_flip_physical{180.0}=0x0
phy_chain_rx_polarity_flip_physical{181.0}=0x1
phy_chain_rx_polarity_flip_physical{182.0}=0x1
phy_chain_rx_polarity_flip_physical{183.0}=0x0
phy_chain_rx_polarity_flip_physical{184.0}=0x0
phy_chain_rx_polarity_flip_physical{185.0}=0x0
phy_chain_rx_polarity_flip_physical{186.0}=0x1
phy_chain_rx_polarity_flip_physical{187.0}=0x1
phy_chain_rx_polarity_flip_physical{188.0}=0x0
phy_chain_rx_polarity_flip_physical{189.0}=0x0
phy_chain_rx_polarity_flip_physical{190.0}=0x1
phy_chain_rx_polarity_flip_physical{191.0}=0x1
phy_chain_rx_polarity_flip_physical{192.0}=0x0
phy_chain_rx_polarity_flip_physical{193.0}=0x0
phy_chain_rx_polarity_flip_physical{194.0}=0x0
phy_chain_rx_polarity_flip_physical{195.0}=0x0
phy_chain_rx_polarity_flip_physical{196.0}=0x0
phy_chain_rx_polarity_flip_physical{197.0}=0x1
phy_chain_rx_polarity_flip_physical{198.0}=0x1
phy_chain_rx_polarity_flip_physical{199.0}=0x0
phy_chain_rx_polarity_flip_physical{200.0}=0x0
phy_chain_rx_polarity_flip_physical{201.0}=0x0
phy_chain_rx_polarity_flip_physical{202.0}=0x1
phy_chain_rx_polarity_flip_physical{203.0}=0x1
phy_chain_rx_polarity_flip_physical{204.0}=0x0
phy_chain_rx_polarity_flip_physical{205.0}=0x0
phy_chain_rx_polarity_flip_physical{206.0}=0x1
phy_chain_rx_polarity_flip_physical{207.0}=0x1
phy_chain_rx_polarity_flip_physical{208.0}=0x0
phy_chain_rx_polarity_flip_physical{209.0}=0x1
phy_chain_rx_polarity_flip_physical{210.0}=0x1
phy_chain_rx_polarity_flip_physical{211.0}=0x0
phy_chain_rx_polarity_flip_physical{212.0}=0x0
phy_chain_rx_polarity_flip_physical{213.0}=0x1
phy_chain_rx_polarity_flip_physical{214.0}=0x1
phy_chain_rx_polarity_flip_physical{215.0}=0x0
phy_chain_rx_polarity_flip_physical{216.0}=0x0
phy_chain_rx_polarity_flip_physical{217.0}=0x0
phy_chain_rx_polarity_flip_physical{218.0}=0x1
phy_chain_rx_polarity_flip_physical{219.0}=0x1
phy_chain_rx_polarity_flip_physical{220.0}=0x0
phy_chain_rx_polarity_flip_physical{221.0}=0x0
phy_chain_rx_polarity_flip_physical{222.0}=0x1
phy_chain_rx_polarity_flip_physical{223.0}=0x1
phy_chain_rx_polarity_flip_physical{224.0}=0x0
phy_chain_rx_polarity_flip_physical{225.0}=0x0
phy_chain_rx_polarity_flip_physical{226.0}=0x0
phy_chain_rx_polarity_flip_physical{227.0}=0x1
phy_chain_rx_polarity_flip_physical{228.0}=0x0
phy_chain_rx_polarity_flip_physical{229.0}=0x0
phy_chain_rx_polarity_flip_physical{230.0}=0x1
phy_chain_rx_polarity_flip_physical{231.0}=0x0
phy_chain_rx_polarity_flip_physical{232.0}=0x0
phy_chain_rx_polarity_flip_physical{233.0}=0x0
phy_chain_rx_polarity_flip_physical{234.0}=0x1
phy_chain_rx_polarity_flip_physical{235.0}=0x1
phy_chain_rx_polarity_flip_physical{236.0}=0x0
phy_chain_rx_polarity_flip_physical{237.0}=0x1
phy_chain_rx_polarity_flip_physical{238.0}=0x0
phy_chain_rx_polarity_flip_physical{239.0}=0x0
phy_chain_rx_polarity_flip_physical{240.0}=0x1
phy_chain_rx_polarity_flip_physical{241.0}=0x1
phy_chain_rx_polarity_flip_physical{242.0}=0x0
phy_chain_rx_polarity_flip_physical{243.0}=0x0
phy_chain_rx_polarity_flip_physical{244.0}=0x0
phy_chain_rx_polarity_flip_physical{245.0}=0x0
phy_chain_rx_polarity_flip_physical{246.0}=0x1
phy_chain_rx_polarity_flip_physical{247.0}=0x1
phy_chain_rx_polarity_flip_physical{248.0}=0x1
phy_chain_rx_polarity_flip_physical{249.0}=0x1
phy_chain_rx_polarity_flip_physical{250.0}=0x1
phy_chain_rx_polarity_flip_physical{251.0}=0x0
phy_chain_rx_polarity_flip_physical{252.0}=0x0
phy_chain_rx_polarity_flip_physical{253.0}=0x0
phy_chain_rx_polarity_flip_physical{254.0}=0x0
phy_chain_rx_polarity_flip_physical{255.0}=0x1
phy_chain_rx_polarity_flip_physical{256.0}=0x1
phy_chain_rx_polarity_flip_physical{257.0}=0x0
phy_chain_rx_polarity_flip_physical{258.0}=0x0
phy_chain_tx_lane_map_physical{1.0}=0x13245076
phy_chain_tx_lane_map_physical{9.0}=0x76501423
phy_chain_tx_lane_map_physical{17.0}=0x75643120
phy_chain_tx_lane_map_physical{25.0}=0x74653201
phy_chain_tx_lane_map_physical{33.0}=0x75603124
phy_chain_tx_lane_map_physical{41.0}=0x64753120
phy_chain_tx_lane_map_physical{49.0}=0x65741032
phy_chain_tx_lane_map_physical{57.0}=0x64753210
phy_chain_tx_lane_map_physical{65.0}=0x65740132
phy_chain_tx_lane_map_physical{73.0}=0x64753210
phy_chain_tx_lane_map_physical{81.0}=0x65740132
phy_chain_tx_lane_map_physical{89.0}=0x64753210
phy_chain_tx_lane_map_physical{97.0}=0x63057124
phy_chain_tx_lane_map_physical{105.0}=0x67453021
phy_chain_tx_lane_map_physical{113.0}=0x76502413
phy_chain_tx_lane_map_physical{121.0}=0x13257064
phy_chain_tx_lane_map_physical{129.0}=0x32146057
phy_chain_tx_lane_map_physical{137.0}=0x57613420
phy_chain_tx_lane_map_physical{145.0}=0x76502413
phy_chain_tx_lane_map_physical{153.0}=0x64173520
phy_chain_tx_lane_map_physical{161.0}=0x56742031
phy_chain_tx_lane_map_physical{169.0}=0x74601523
phy_chain_tx_lane_map_physical{177.0}=0x56742031
phy_chain_tx_lane_map_physical{185.0}=0x74601523
phy_chain_tx_lane_map_physical{193.0}=0x56742031
phy_chain_tx_lane_map_physical{201.0}=0x74601523
phy_chain_tx_lane_map_physical{209.0}=0x56742031
phy_chain_tx_lane_map_physical{217.0}=0x74603512
phy_chain_tx_lane_map_physical{225.0}=0x75642031
phy_chain_tx_lane_map_physical{233.0}=0x57612430
phy_chain_tx_lane_map_physical{241.0}=0x65742031
phy_chain_tx_lane_map_physical{249.0}=0x52316470
phy_chain_tx_lane_map_physical{257.0}=0x3210
phy_chain_tx_polarity_flip_physical{1.0}=0x1
phy_chain_tx_polarity_flip_physical{2.0}=0x1
phy_chain_tx_polarity_flip_physical{3.0}=0x0
phy_chain_tx_polarity_flip_physical{4.0}=0x1
phy_chain_tx_polarity_flip_physical{5.0}=0x1
phy_chain_tx_polarity_flip_physical{6.0}=0x1
phy_chain_tx_polarity_flip_physical{7.0}=0x1
phy_chain_tx_polarity_flip_physical{8.0}=0x0
phy_chain_tx_polarity_flip_physical{9.0}=0x1
phy_chain_tx_polarity_flip_physical{10.0}=0x0
phy_chain_tx_polarity_flip_physical{11.0}=0x1
phy_chain_tx_polarity_flip_physical{12.0}=0x1
phy_chain_tx_polarity_flip_physical{13.0}=0x0
phy_chain_tx_polarity_flip_physical{14.0}=0x0
phy_chain_tx_polarity_flip_physical{15.0}=0x1
phy_chain_tx_polarity_flip_physical{16.0}=0x0
phy_chain_tx_polarity_flip_physical{17.0}=0x1
phy_chain_tx_polarity_flip_physical{18.0}=0x0
phy_chain_tx_polarity_flip_physical{19.0}=0x0
phy_chain_tx_polarity_flip_physical{20.0}=0x1
phy_chain_tx_polarity_flip_physical{21.0}=0x0
phy_chain_tx_polarity_flip_physical{22.0}=0x1
phy_chain_tx_polarity_flip_physical{23.0}=0x1
phy_chain_tx_polarity_flip_physical{24.0}=0x0
phy_chain_tx_polarity_flip_physical{25.0}=0x1
phy_chain_tx_polarity_flip_physical{26.0}=0x0
phy_chain_tx_polarity_flip_physical{27.0}=0x0
phy_chain_tx_polarity_flip_physical{28.0}=0x1
phy_chain_tx_polarity_flip_physical{29.0}=0x0
phy_chain_tx_polarity_flip_physical{30.0}=0x1
phy_chain_tx_polarity_flip_physical{31.0}=0x1
phy_chain_tx_polarity_flip_physical{32.0}=0x0
phy_chain_tx_polarity_flip_physical{33.0}=0x0
phy_chain_tx_polarity_flip_physical{34.0}=0x0
phy_chain_tx_polarity_flip_physical{35.0}=0x0
phy_chain_tx_polarity_flip_physical{36.0}=0x1
phy_chain_tx_polarity_flip_physical{37.0}=0x1
phy_chain_tx_polarity_flip_physical{38.0}=0x1
phy_chain_tx_polarity_flip_physical{39.0}=0x1
phy_chain_tx_polarity_flip_physical{40.0}=0x0
phy_chain_tx_polarity_flip_physical{41.0}=0x0
phy_chain_tx_polarity_flip_physical{42.0}=0x0
phy_chain_tx_polarity_flip_physical{43.0}=0x1
phy_chain_tx_polarity_flip_physical{44.0}=0x1
phy_chain_tx_polarity_flip_physical{45.0}=0x0
phy_chain_tx_polarity_flip_physical{46.0}=0x0
phy_chain_tx_polarity_flip_physical{47.0}=0x1
phy_chain_tx_polarity_flip_physical{48.0}=0x1
phy_chain_tx_polarity_flip_physical{49.0}=0x1
phy_chain_tx_polarity_flip_physical{50.0}=0x1
phy_chain_tx_polarity_flip_physical{51.0}=0x1
phy_chain_tx_polarity_flip_physical{52.0}=0x1
phy_chain_tx_polarity_flip_physical{53.0}=0x0
phy_chain_tx_polarity_flip_physical{54.0}=0x0
phy_chain_tx_polarity_flip_physical{55.0}=0x1
phy_chain_tx_polarity_flip_physical{56.0}=0x1
phy_chain_tx_polarity_flip_physical{57.0}=0x0
phy_chain_tx_polarity_flip_physical{58.0}=0x1
phy_chain_tx_polarity_flip_physical{59.0}=0x0
phy_chain_tx_polarity_flip_physical{60.0}=0x1
phy_chain_tx_polarity_flip_physical{61.0}=0x0
phy_chain_tx_polarity_flip_physical{62.0}=0x0
phy_chain_tx_polarity_flip_physical{63.0}=0x1
phy_chain_tx_polarity_flip_physical{64.0}=0x1
phy_chain_tx_polarity_flip_physical{65.0}=0x1
phy_chain_tx_polarity_flip_physical{66.0}=0x1
phy_chain_tx_polarity_flip_physical{67.0}=0x0
phy_chain_tx_polarity_flip_physical{68.0}=0x0
phy_chain_tx_polarity_flip_physical{69.0}=0x0
phy_chain_tx_polarity_flip_physical{70.0}=0x0
phy_chain_tx_polarity_flip_physical{71.0}=0x1
phy_chain_tx_polarity_flip_physical{72.0}=0x1
phy_chain_tx_polarity_flip_physical{73.0}=0x0
phy_chain_tx_polarity_flip_physical{74.0}=0x1
phy_chain_tx_polarity_flip_physical{75.0}=0x0
phy_chain_tx_polarity_flip_physical{76.0}=0x1
phy_chain_tx_polarity_flip_physical{77.0}=0x0
phy_chain_tx_polarity_flip_physical{78.0}=0x0
phy_chain_tx_polarity_flip_physical{79.0}=0x1
phy_chain_tx_polarity_flip_physical{80.0}=0x1
phy_chain_tx_polarity_flip_physical{81.0}=0x1
phy_chain_tx_polarity_flip_physical{82.0}=0x1
phy_chain_tx_polarity_flip_physical{83.0}=0x0
phy_chain_tx_polarity_flip_physical{84.0}=0x0
phy_chain_tx_polarity_flip_physical{85.0}=0x0
phy_chain_tx_polarity_flip_physical{86.0}=0x0
phy_chain_tx_polarity_flip_physical{87.0}=0x1
phy_chain_tx_polarity_flip_physical{88.0}=0x1
phy_chain_tx_polarity_flip_physical{89.0}=0x0
phy_chain_tx_polarity_flip_physical{90.0}=0x1
phy_chain_tx_polarity_flip_physical{91.0}=0x0
phy_chain_tx_polarity_flip_physical{92.0}=0x1
phy_chain_tx_polarity_flip_physical{93.0}=0x0
phy_chain_tx_polarity_flip_physical{94.0}=0x0
phy_chain_tx_polarity_flip_physical{95.0}=0x1
phy_chain_tx_polarity_flip_physical{96.0}=0x1
phy_chain_tx_polarity_flip_physical{97.0}=0x0
phy_chain_tx_polarity_flip_physical{98.0}=0x0
phy_chain_tx_polarity_flip_physical{99.0}=0x0
phy_chain_tx_polarity_flip_physical{100.0}=0x0
phy_chain_tx_polarity_flip_physical{101.0}=0x1
phy_chain_tx_polarity_flip_physical{102.0}=0x1
phy_chain_tx_polarity_flip_physical{103.0}=0x1
phy_chain_tx_polarity_flip_physical{104.0}=0x0
phy_chain_tx_polarity_flip_physical{105.0}=0x1
phy_chain_tx_polarity_flip_physical{106.0}=0x0
phy_chain_tx_polarity_flip_physical{107.0}=0x0
phy_chain_tx_polarity_flip_physical{108.0}=0x1
phy_chain_tx_polarity_flip_physical{109.0}=0x1
phy_chain_tx_polarity_flip_physical{110.0}=0x0
phy_chain_tx_polarity_flip_physical{111.0}=0x1
phy_chain_tx_polarity_flip_physical{112.0}=0x0
phy_chain_tx_polarity_flip_physical{113.0}=0x0
phy_chain_tx_polarity_flip_physical{114.0}=0x1
phy_chain_tx_polarity_flip_physical{115.0}=0x0
phy_chain_tx_polarity_flip_physical{116.0}=0x0
phy_chain_tx_polarity_flip_physical{117.0}=0x1
phy_chain_tx_polarity_flip_physical{118.0}=0x0
phy_chain_tx_polarity_flip_physical{119.0}=0x0
phy_chain_tx_polarity_flip_physical{120.0}=0x0
phy_chain_tx_polarity_flip_physical{121.0}=0x0
phy_chain_tx_polarity_flip_physical{122.0}=0x0
phy_chain_tx_polarity_flip_physical{123.0}=0x1
phy_chain_tx_polarity_flip_physical{124.0}=0x1
phy_chain_tx_polarity_flip_physical{125.0}=0x1
phy_chain_tx_polarity_flip_physical{126.0}=0x1
phy_chain_tx_polarity_flip_physical{127.0}=0x0
phy_chain_tx_polarity_flip_physical{128.0}=0x0
phy_chain_tx_polarity_flip_physical{129.0}=0x0
phy_chain_tx_polarity_flip_physical{130.0}=0x1
phy_chain_tx_polarity_flip_physical{131.0}=0x0
phy_chain_tx_polarity_flip_physical{132.0}=0x0
phy_chain_tx_polarity_flip_physical{133.0}=0x1
phy_chain_tx_polarity_flip_physical{134.0}=0x0
phy_chain_tx_polarity_flip_physical{135.0}=0x0
phy_chain_tx_polarity_flip_physical{136.0}=0x0
phy_chain_tx_polarity_flip_physical{137.0}=0x0
phy_chain_tx_polarity_flip_physical{138.0}=0x0
phy_chain_tx_polarity_flip_physical{139.0}=0x1
phy_chain_tx_polarity_flip_physical{140.0}=0x1
phy_chain_tx_polarity_flip_physical{141.0}=0x1
phy_chain_tx_polarity_flip_physical{142.0}=0x1
phy_chain_tx_polarity_flip_physical{143.0}=0x0
phy_chain_tx_polarity_flip_physical{144.0}=0x0
phy_chain_tx_polarity_flip_physical{145.0}=0x0
phy_chain_tx_polarity_flip_physical{146.0}=0x1
phy_chain_tx_polarity_flip_physical{147.0}=0x0
phy_chain_tx_polarity_flip_physical{148.0}=0x0
phy_chain_tx_polarity_flip_physical{149.0}=0x1
phy_chain_tx_polarity_flip_physical{150.0}=0x0
phy_chain_tx_polarity_flip_physical{151.0}=0x0
phy_chain_tx_polarity_flip_physical{152.0}=0x0
phy_chain_tx_polarity_flip_physical{153.0}=0x0
phy_chain_tx_polarity_flip_physical{154.0}=0x0
phy_chain_tx_polarity_flip_physical{155.0}=0x0
phy_chain_tx_polarity_flip_physical{156.0}=0x1
phy_chain_tx_polarity_flip_physical{157.0}=0x0
phy_chain_tx_polarity_flip_physical{158.0}=0x1
phy_chain_tx_polarity_flip_physical{159.0}=0x1
phy_chain_tx_polarity_flip_physical{160.0}=0x0
phy_chain_tx_polarity_flip_physical{161.0}=0x0
phy_chain_tx_polarity_flip_physical{162.0}=0x1
phy_chain_tx_polarity_flip_physical{163.0}=0x1
phy_chain_tx_polarity_flip_physical{164.0}=0x0
phy_chain_tx_polarity_flip_physical{165.0}=0x0
phy_chain_tx_polarity_flip_physical{166.0}=0x0
phy_chain_tx_polarity_flip_physical{167.0}=0x0
phy_chain_tx_polarity_flip_physical{168.0}=0x0
phy_chain_tx_polarity_flip_physical{169.0}=0x1
phy_chain_tx_polarity_flip_physical{170.0}=0x0
phy_chain_tx_polarity_flip_physical{171.0}=0x0
phy_chain_tx_polarity_flip_physical{172.0}=0x1
phy_chain_tx_polarity_flip_physical{173.0}=0x0
phy_chain_tx_polarity_flip_physical{174.0}=0x1
phy_chain_tx_polarity_flip_physical{175.0}=0x1
phy_chain_tx_polarity_flip_physical{176.0}=0x0
phy_chain_tx_polarity_flip_physical{177.0}=0x0
phy_chain_tx_polarity_flip_physical{178.0}=0x1
phy_chain_tx_polarity_flip_physical{179.0}=0x1
phy_chain_tx_polarity_flip_physical{180.0}=0x0
phy_chain_tx_polarity_flip_physical{181.0}=0x0
phy_chain_tx_polarity_flip_physical{182.0}=0x0
phy_chain_tx_polarity_flip_physical{183.0}=0x0
phy_chain_tx_polarity_flip_physical{184.0}=0x0
phy_chain_tx_polarity_flip_physical{185.0}=0x1
phy_chain_tx_polarity_flip_physical{186.0}=0x0
phy_chain_tx_polarity_flip_physical{187.0}=0x0
phy_chain_tx_polarity_flip_physical{188.0}=0x1
phy_chain_tx_polarity_flip_physical{189.0}=0x0
phy_chain_tx_polarity_flip_physical{190.0}=0x1
phy_chain_tx_polarity_flip_physical{191.0}=0x1
phy_chain_tx_polarity_flip_physical{192.0}=0x0
phy_chain_tx_polarity_flip_physical{193.0}=0x0
phy_chain_tx_polarity_flip_physical{194.0}=0x1
phy_chain_tx_polarity_flip_physical{195.0}=0x1
phy_chain_tx_polarity_flip_physical{196.0}=0x0
phy_chain_tx_polarity_flip_physical{197.0}=0x0
phy_chain_tx_polarity_flip_physical{198.0}=0x0
phy_chain_tx_polarity_flip_physical{199.0}=0x0
phy_chain_tx_polarity_flip_physical{200.0}=0x0
phy_chain_tx_polarity_flip_physical{201.0}=0x1
phy_chain_tx_polarity_flip_physical{202.0}=0x0
phy_chain_tx_polarity_flip_physical{203.0}=0x0
phy_chain_tx_polarity_flip_physical{204.0}=0x1
phy_chain_tx_polarity_flip_physical{205.0}=0x0
phy_chain_tx_polarity_flip_physical{206.0}=0x1
phy_chain_tx_polarity_flip_physical{207.0}=0x1
phy_chain_tx_polarity_flip_physical{208.0}=0x0
phy_chain_tx_polarity_flip_physical{209.0}=0x0
phy_chain_tx_polarity_flip_physical{210.0}=0x1
phy_chain_tx_polarity_flip_physical{211.0}=0x1
phy_chain_tx_polarity_flip_physical{212.0}=0x0
phy_chain_tx_polarity_flip_physical{213.0}=0x0
phy_chain_tx_polarity_flip_physical{214.0}=0x0
phy_chain_tx_polarity_flip_physical{215.0}=0x0
phy_chain_tx_polarity_flip_physical{216.0}=0x0
phy_chain_tx_polarity_flip_physical{217.0}=0x0
phy_chain_tx_polarity_flip_physical{218.0}=0x1
phy_chain_tx_polarity_flip_physical{219.0}=0x0
phy_chain_tx_polarity_flip_physical{220.0}=0x1
phy_chain_tx_polarity_flip_physical{221.0}=0x0
phy_chain_tx_polarity_flip_physical{222.0}=0x1
phy_chain_tx_polarity_flip_physical{223.0}=0x1
phy_chain_tx_polarity_flip_physical{224.0}=0x0
phy_chain_tx_polarity_flip_physical{225.0}=0x0
phy_chain_tx_polarity_flip_physical{226.0}=0x1
phy_chain_tx_polarity_flip_physical{227.0}=0x1
phy_chain_tx_polarity_flip_physical{228.0}=0x0
phy_chain_tx_polarity_flip_physical{229.0}=0x0
phy_chain_tx_polarity_flip_physical{230.0}=0x1
phy_chain_tx_polarity_flip_physical{231.0}=0x1
phy_chain_tx_polarity_flip_physical{232.0}=0x0
phy_chain_tx_polarity_flip_physical{233.0}=0x0
phy_chain_tx_polarity_flip_physical{234.0}=0x1
phy_chain_tx_polarity_flip_physical{235.0}=0x1
phy_chain_tx_polarity_flip_physical{236.0}=0x0
phy_chain_tx_polarity_flip_physical{237.0}=0x1
phy_chain_tx_polarity_flip_physical{238.0}=0x1
phy_chain_tx_polarity_flip_physical{239.0}=0x0
phy_chain_tx_polarity_flip_physical{240.0}=0x0
phy_chain_tx_polarity_flip_physical{241.0}=0x0
phy_chain_tx_polarity_flip_physical{242.0}=0x1
phy_chain_tx_polarity_flip_physical{243.0}=0x1
phy_chain_tx_polarity_flip_physical{244.0}=0x0
phy_chain_tx_polarity_flip_physical{245.0}=0x0
phy_chain_tx_polarity_flip_physical{246.0}=0x0
phy_chain_tx_polarity_flip_physical{247.0}=0x1
phy_chain_tx_polarity_flip_physical{248.0}=0x1
phy_chain_tx_polarity_flip_physical{249.0}=0x1
phy_chain_tx_polarity_flip_physical{250.0}=0x1
phy_chain_tx_polarity_flip_physical{251.0}=0x0
phy_chain_tx_polarity_flip_physical{252.0}=0x0
phy_chain_tx_polarity_flip_physical{253.0}=0x0
phy_chain_tx_polarity_flip_physical{254.0}=0x0
phy_chain_tx_polarity_flip_physical{255.0}=0x1
phy_chain_tx_polarity_flip_physical{256.0}=0x1
phy_chain_tx_polarity_flip_physical{257.0}=0x0
phy_chain_tx_polarity_flip_physical{258.0}=0x0
portmap_1.0=1:400
portmap_2.0=9:400
portmap_3.0=17:400
portmap_4.0=25:400
portmap_20.0=33:400
portmap_21.0=41:400
portmap_22.0=49:400
portmap_23.0=57:400
portmap_38.0=257:10
portmap_40.0=65:400
portmap_41.0=73:400
portmap_42.0=81:400
portmap_43.0=89:400
portmap_60.0=97:400
portmap_61.0=105:400
portmap_62.0=113:400
portmap_63.0=121:400
portmap_80.0=129:400
portmap_81.0=137:400
portmap_82.0=145:400
portmap_83.0=153:400
portmap_100.0=161:400
portmap_101.0=169:400
portmap_102.0=177:400
portmap_103.0=185:400
portmap_118.0=258:10
portmap_120.0=193:400
portmap_121.0=201:400
portmap_122.0=209:400
portmap_123.0=217:400
portmap_140.0=225:400
portmap_141.0=233:400
portmap_142.0=241:400
portmap_143.0=249:400
port_init_autoneg_1.0=0
port_init_autoneg_2.0=0
port_init_autoneg_3.0=0
port_init_autoneg_4.0=0
port_init_autoneg_20.0=0
port_init_autoneg_21.0=0
port_init_autoneg_22.0=0
port_init_autoneg_23.0=0
port_init_autoneg_38.0=0
port_init_autoneg_40.0=0
port_init_autoneg_41.0=0
port_init_autoneg_42.0=0
port_init_autoneg_43.0=0
port_init_autoneg_60.0=0
port_init_autoneg_61.0=0
port_init_autoneg_62.0=0
port_init_autoneg_63.0=0
port_init_autoneg_80.0=0
port_init_autoneg_81.0=0
port_init_autoneg_82.0=0
port_init_autoneg_83.0=0
port_init_autoneg_100.0=0
port_init_autoneg_101.0=0
port_init_autoneg_102.0=0
port_init_autoneg_103.0=0
port_init_autoneg_118.0=0
port_init_autoneg_120.0=0
port_init_autoneg_121.0=0
port_init_autoneg_122.0=0
port_init_autoneg_123.0=0
port_init_autoneg_140.0=0
port_init_autoneg_141.0=0
port_init_autoneg_142.0=0
port_init_autoneg_143.0=0
port_phy_addr_1.0=0xff
port_phy_addr_2.0=0xff
port_phy_addr_3.0=0xff
port_phy_addr_4.0=0xff
port_phy_addr_20.0=0xff
port_phy_addr_21.0=0xff
port_phy_addr_22.0=0xff
port_phy_addr_23.0=0xff
port_phy_addr_38.0=0xff
port_phy_addr_40.0=0xff
port_phy_addr_41.0=0xff
port_phy_addr_42.0=0xff
port_phy_addr_43.0=0xff
port_phy_addr_60.0=0xff
port_phy_addr_61.0=0xff
port_phy_addr_62.0=0xff
port_phy_addr_63.0=0xff
port_phy_addr_80.0=0xff
port_phy_addr_81.0=0xff
port_phy_addr_82.0=0xff
port_phy_addr_83.0=0xff
port_phy_addr_100.0=0xff
port_phy_addr_101.0=0xff
port_phy_addr_102.0=0xff
port_phy_addr_103.0=0xff
port_phy_addr_118.0=0xff
port_phy_addr_120.0=0xff
port_phy_addr_121.0=0xff
port_phy_addr_122.0=0xff
port_phy_addr_123.0=0xff
port_phy_addr_140.0=0xff
port_phy_addr_141.0=0xff
port_phy_addr_142.0=0xff
port_phy_addr_143.0=0xff
robust_hash_disable_egress_vlan.0=1
robust_hash_disable_mpls.0=1
robust_hash_disable_vlan.0=1
sram_scan_enable.0=0
tdma_timeout_usec.0=15000000
tslam_timeout_usec.0=15000000

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_leds as arista_leds
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
LedControl = arista_leds.getLedControl()

View File

@ -1,12 +0,0 @@
# psuutil.py
#
# Platform-specific PSU interface for SONiC
#
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,13 +0,0 @@
#!/usr/bin/env python
"""
Arista 7260CX3-64 eeprom plugin
Uses the arista driver library to obtain the TlvInfoDecoder
"""
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,6 +0,0 @@
try:
import arista.utils.sonic_leds as arista_leds
except ImportError, e:
raise ImportError (str(e) + "- required module not found")
LedControl = arista_leds.getLedControl()

View File

@ -1,12 +0,0 @@
# psuutil.py
#
# Platform-specific PSU interface for SONiC
#
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,12 +0,0 @@
# sfputil.py
#
# Platform-specific SFP transceiver interface for SONiC
#
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -0,0 +1 @@
../x86_64-arista_common/plugins/

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_eeprom as arista_eeprom
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
board = arista_eeprom.getTlvInfoDecoder()

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_leds as arista_leds
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
LedControl = arista_leds.getLedControl()

View File

@ -1,8 +0,0 @@
# psuutil.py
try:
import arista.utils.sonic_psu as arista_psuutil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
PsuUtil = arista_psuutil.getPsuUtil()

View File

@ -1,8 +0,0 @@
#!/usr/bin/env python
try:
import arista.utils.sonic_sfputil as arista_sfputil
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
SfpUtil = arista_sfputil.getSfpUtil()

View File

@ -1,5 +1,10 @@
#!/usr/bin/env python #!/usr/bin/env python
#
# Arista eeprom processing for SONiC
# Uses the arista driver library to obtain the TlvInfoDecoder
#
try: try:
import arista.utils.sonic_eeprom as arista_eeprom import arista.utils.sonic_eeprom as arista_eeprom
except ImportError as e: except ImportError as e:

View File

@ -1,3 +1,9 @@
#!/usr/bin/env python
#
# Arista LED controls for SONiC
#
try: try:
import arista.utils.sonic_leds as arista_leds import arista.utils.sonic_leds as arista_leds
except ImportError as e: except ImportError as e:

View File

@ -1,6 +1,7 @@
# psuutil.py #!/usr/bin/env python
# #
# Platform-specific PSU interface for SONiC # Arista PSU interface for SONiC
# #
try: try:

View File

@ -1,6 +1,7 @@
# sfputil.py #!/usr/bin/env python
# #
# Platform-specific SFP transceiver interface for SONiC # Arista SFP transceiver interface for SONiC
# #
try: try:

View File

@ -0,0 +1,77 @@
portmap_1=1:100
portmap_2=5:100
portmap_3=9:100
portmap_4=13:100
portmap_5=17:100
portmap_6=21:100
portmap_7=25:100
portmap_8=29:100
portmap_34=33:100
portmap_35=37:100
portmap_36=41:100
portmap_37=45:100
portmap_38=49:100
portmap_39=53:100
portmap_40=57:100
portmap_41=61:100
portmap_68=65:100
portmap_69=69:100
portmap_70=73:100
portmap_71=77:100
portmap_72=81:100
portmap_73=85:100
portmap_74=89:100
portmap_75=93:100
portmap_102=97:100
portmap_103=101:100
portmap_104=105:100
portmap_105=109:100
portmap_106=113:100
portmap_107=117:100
portmap_108=121:100
portmap_109=125:100
oversubscribe_mode=1
portmap_66=129:10
portmap_100=131:10
pbmp_xport_xe=0x3fd000000ff4000003fc000001fe
portmap_33=132:10
portmap_67=133:10
portmap_101=134:10
portmap_135=135:10
xgxs_tx_lane_map_ce18=0x1032
xgxs_rx_lane_map_ce18=0x1032
xgxs_rx_lane_map_ce19=0x2301
xgxs_rx_lane_map_ce20=0x2301
xgxs_rx_lane_map_ce21=0x2301
xgxs_rx_lane_map_ce22=0x2301
xgxs_rx_lane_map_ce23=0x2301
xgxs_rx_lane_map_ce24=0x2301
xgxs_rx_lane_map_ce25=0x2301
xgxs_rx_lane_map_ce26=0x2301
xgxs_rx_lane_map_ce27=0x2301
xgxs_rx_lane_map_ce28=0x2301
phy_xaui_rx_polarity_flip_ce4=0x2
phy_xaui_tx_polarity_flip_ce5=0x8
phy_xaui_rx_polarity_flip_ce5=0x5
phy_xaui_rx_polarity_flip_ce6=0x2
phy_xaui_tx_polarity_flip_ce7=0x8
phy_xaui_tx_polarity_flip_ce8=0x8
phy_xaui_rx_polarity_flip_ce8=0x8
phy_xaui_tx_polarity_flip_ce10=0x8
phy_xaui_rx_polarity_flip_ce10=0x1
phy_xaui_rx_polarity_flip_ce11=0x2
phy_xaui_tx_polarity_flip_ce19=0x2
phy_xaui_rx_polarity_flip_ce19=0x3
phy_xaui_tx_polarity_flip_ce20=0x8
phy_xaui_rx_polarity_flip_ce21=0x4
phy_xaui_tx_polarity_flip_ce22=0x8
phy_xaui_rx_polarity_flip_ce22=0x8
phy_xaui_rx_polarity_flip_ce23=0x4
phy_xaui_rx_polarity_flip_ce24=0x4
phy_xaui_tx_polarity_flip_ce25=0x8
phy_xaui_rx_polarity_flip_ce25=0x8
phy_xaui_rx_polarity_flip_ce26=0x4
phy_xaui_tx_polarity_flip_ce27=0x8
phy_xaui_rx_polarity_flip_ce27=0x8
l2xmsg_mode=1
fpem_mem_entries=32768

View File

@ -0,0 +1,33 @@
# name lanes alias index speed
Ethernet0 1,2,3,4 Ethernet1/0/1 0 100000
Ethernet4 5,6,7,8 Ethernet1/0/5 1 100000
Ethernet8 9,10,11,12 Ethernet1/0/9 2 100000
Ethernet12 13,14,15,16 Ethernet1/0/13 3 100000
Ethernet16 17,18,19,20 Ethernet1/0/17 4 100000
Ethernet20 21,22,23,24 Ethernet1/0/21 5 100000
Ethernet24 25,26,27,28 Ethernet1/0/25 6 100000
Ethernet28 29,30,31,32 Ethernet1/0/29 7 100000
Ethernet32 33,34,35,36 Ethernet1/0/33 8 100000
Ethernet36 37,38,39,40 Ethernet1/0/37 9 100000
Ethernet40 41,42,43,44 Ethernet1/0/41 10 100000
Ethernet44 45,46,47,48 Ethernet1/0/45 11 100000
Ethernet48 49,50,51,52 Ethernet1/0/49 12 100000
Ethernet52 53,54,55,56 Ethernet1/0/53 13 100000
Ethernet56 57,58,59,60 Ethernet1/0/57 14 100000
Ethernet60 61,62,63,64 Ethernet1/0/61 15 100000
Ethernet64 65,66,67,68 Ethernet1/0/65 16 100000
Ethernet68 69,70,71,72 Ethernet1/0/69 17 100000
Ethernet72 73,74,75,76 Ethernet1/0/73 18 100000
Ethernet76 77,78,79,80 Ethernet1/0/77 19 100000
Ethernet80 81,82,83,84 Ethernet1/0/81 20 100000
Ethernet84 85,86,87,88 Ethernet1/0/85 21 100000
Ethernet88 89,90,91,92 Ethernet1/0/89 22 100000
Ethernet92 93,94,95,96 Ethernet1/0/93 23 100000
Ethernet96 97,98,99,100 Ethernet1/0/97 24 100000
Ethernet100 101,102,103,104 Ethernet1/0/101 25 100000
Ethernet104 105,106,107,108 Ethernet1/0/105 26 100000
Ethernet108 109,110,111,112 Ethernet1/0/109 27 100000
Ethernet112 113,114,115,116 Ethernet1/0/113 28 100000
Ethernet116 117,118,119,120 Ethernet1/0/117 29 100000
Ethernet120 121,122,123,124 Ethernet1/0/121 30 100000
Ethernet124 125,126,127,128 Ethernet1/0/125 31 100000

View File

@ -0,0 +1 @@
SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/config_th_32x100.bcm

View File

@ -0,0 +1 @@
bcm_xlr t1

View File

@ -0,0 +1,9 @@
if [ -d /sys/devices/pci0000:00/0000:00:13.0 ]; then
CONSOLE_PORT=0x3e8
CONSOLE_DEV=2
else
CONSOLE_PORT=0x3f8
CONSOLE_DEV=0
fi
ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="libata.dma=0 libata.noacpi=1"
CONSOLE_SPEED=115200

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python
#############################################################################
# Broadcom XLR/GTS 'eeprom' support
#
# 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
#
# Note: the file /etc/sys_eeprom.bin is generated by the script
# brcm-xlr-gts-create-eeprom-file.py
#############################################################################
try:
from sonic_eeprom import eeprom_tlvinfo
except ImportError, 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 = "/etc/sys_eeprom.bin"
super(board, self).__init__(self.eeprom_path, 0, '', False, True)
def serial_number_str(self, e):
"""Return service tag instead of serial number"""
return "No service tag"

View File

@ -0,0 +1,41 @@
#!/usr/bin/env python
import os.path
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)
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 0
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
"""
return False
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
"""
return False

View File

@ -0,0 +1,50 @@
#!/usr/bin/env python
try:
import time
import os
from sonic_sfp.sfputilbase import SfpUtilBase
except ImportError as e:
raise ImportError("%s - required module not found" % str(e))
class SfpUtil(SfpUtilBase):
"""Platform-specific SfpUtil class"""
PORT_START = 1
PORT_END = 52
_port_to_eeprom_mapping = {}
@property
def port_start(self):
return self.PORT_START
@property
def port_end(self):
return self.PORT_END
@property
def qsfp_ports(self):
return []
@property
def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping
def __init__(self):
SfpUtilBase.__init__(self)
def get_presence(self, port_num):
return False
def get_low_power_mode(self, port_num):
raise NotImplementedError
def set_low_power_mode(self, port_num, lpmode):
raise NotImplementedError
def reset(self, port_num):
raise NotImplementedError
def get_transceiver_change_event(self, timeout=0):
raise NotImplementedError

View File

@ -1,13 +1,56 @@
#!/bin/sh #!/usr/bin/python
import sys
import os
import struct
# Export GPIO10 if needed NVRAM_RES = '/dev/nvram'
[ -d /sys/class/gpio/gpio10 ] || echo 10 > /sys/class/gpio/export COLD_RESET = 0xE # Cold Reset
echo out > /sys/class/gpio/gpio10/direction WARM_RESET = 0x6 # Warm Reset
#Toggle GPIO10 pin (to reset MUX) def io_reg_write(resource, offset, val):
echo 1 > /sys/class/gpio/gpio10/value fd = os.open(resource, os.O_RDWR)
echo 0 > /sys/class/gpio/gpio10/value if(fd < 0):
print 'file open failed %s" % resource'
return
if(os.lseek(fd, offset, os.SEEK_SET) != offset):
print 'lseek failed on %s' % resource
return
ret = os.write(fd, struct.pack('B', val))
if(ret != 1):
print 'write failed %d' % ret
return
os.close(fd)
#Power Reset def power_reset(val):
echo 1 > /sys/devices/platform/dell-s6000-cpld.0/power_reset with open('/sys/devices/platform/dell-s6000-cpld.0/power_reset', 'w') as p:
p.write(str(int(val)) + '\n')
p.flush()
def gpio_direction(pin,direction):
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/direction'
with open(('kernpath'), 'w') as p:
p.write(str(direction) + '\n')
p.flush()
def gpio_set(pin,value):
kernpath = '/sys/class/gpio/gpio'+str(pin)+'/value'
with open(('kernpath'), 'w') as p:
p.write(str(int(value)) + '\n')
p.flush()
def gpio_export(value):
with open('/sys/class/gpio/export', 'w') as p:
p.write(str(int(value)) + '\n')
p.flush()
if __name__ == "__main__":
io_reg_write(NVRAM_RES, 0x49, COLD_RESET)
if not os.path.isdir("/sys/class/gpio/gpio10"):
gpio_export(10)
gpio_direction("10","out")
#Toggle GPIO10 pin (to reset MUX)
gpio_set("10",1)
gpio_set("10",0)
power_reset(1)

View File

@ -0,0 +1,751 @@
{
"GLOBAL_MEDIA_SETTINGS": {
"1-32": {
"AMPHENOL-NDARHF-M201": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x8"
}
},
"AMPHENOL-NDAAFF-M201": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x8",
"lane2":"0x8",
"lane3":"0x8"
}
},
"MOLEX-1003461101": {
"preemphasis": {
"lane0":"0x046804",
"lane1":"0x046804"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x8"
}
},
"AMPHENOL-NDARHF-M206": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb"
}
},
"AMPHENOL-NDAAFF-M206": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
},
"AMPHENOL-NDARHJ-M206": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb"
}
},
"MOLEX-1003463151": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb"
}
},
"AMPHENOL-NDARHJ-M202": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb"
}
},
"AMPHENOL-NDAAFJ-M202": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
},
"MOLEX-1003461201": {
"preemphasis": {
"lane0":"0x046408",
"lane1":"0x046408"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb"
}
},
"AMPHENOL-NDARHF-M205": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x8"
}
},
"AMPHENOL-NDAAFF-M205": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x8",
"lane2":"0x8",
"lane3":"0x8"
}
},
"AMPHENOL-NDARHJ-M203": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808"
},
"idriver": {
"lane0":"0xe",
"lane1":"0xe"
}
},
"AMPHENOL-NDAAFJ-M203": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0xe",
"lane1":"0xe",
"lane2":"0xe",
"lane3":"0xe"
}
},
"MOLEX-1002979024": {
"preemphasis": {
"lane0":"0x006808",
"lane1":"0x006808",
"lane2":"0x006808",
"lane3":"0x006808"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
},
"QSFP28-40GBASE-CR4-1M":{
"preemphasis": {
"lane0":"0x32320c",
"lane1":"0x32320c",
"lane2":"0x32320c",
"lane3":"0x32320c"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x9",
"lane2":"0x9",
"lane3":"0x9"
}
},
"QSFP28-40GBASE-CR4-2M":{
"preemphasis": {
"lane0":"0x252f0c",
"lane1":"0x252f0c",
"lane2":"0x252f0c",
"lane3":"0x252f0c"
},
"idriver": {
"lane0":"0xc",
"lane1":"0xc",
"lane2":"0xc",
"lane3":"0xc"
}
},
"QSFP28-40GBASE-CR4-3M":{
"preemphasis": {
"lane0":"0x252f0c",
"lane1":"0x252f0c",
"lane2":"0x252f0c",
"lane3":"0x252f0c"
},
"idriver": {
"lane0":"0xe",
"lane1":"0xe",
"lane2":"0xe",
"lane3":"0xe"
}
},
"QSFP28-40GBASE-CR4-5M":{
"preemphasis": {
"lane0":"0x3d2f04",
"lane1":"0x3d2f04",
"lane2":"0x3d2f04",
"lane3":"0x3d2f04"
},
"idriver": {
"lane0":"0xf",
"lane1":"0xf",
"lane2":"0xf",
"lane3":"0xf"
}
}
}
},
"PORT_MEDIA_SETTINGS": {
"1": {
"Default": {
"preemphasis": {
"lane0":"0x2c4004",
"lane1":"0x2b4203",
"lane2":"0x2c4004",
"lane3":"0x2c4004"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
}
},
"2": {
"Default": {
"preemphasis": {
"lane0":"0x2b4203",
"lane1":"0x294403",
"lane2":"0x2b4203",
"lane3":"0x2b4203"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xa",
"lane2":"0xb",
"lane3":"0xb"
}
}
},
"3": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x294403",
"lane2":"0x294403",
"lane3":"0x294403"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"4": {
"Default": {
"preemphasis": {
"lane0":"0x284503",
"lane1":"0x284503",
"lane2":"0x284503",
"lane3":"0x294403"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xb",
"lane3":"0xa"
}
}
},
"5": {
"Default": {
"preemphasis": {
"lane0":"0x284503",
"lane1":"0x284503",
"lane2":"0x264703",
"lane3":"0x284503"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"6": {
"Default": {
"preemphasis": {
"lane0":"0x264703",
"lane1":"0x244903",
"lane2":"0x284503",
"lane3":"0x264703"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"7": {
"Default": {
"preemphasis": {
"lane0":"0x244903",
"lane1":"0x244903",
"lane2":"0x264703",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0x9"
}
}
},
"8": {
"Default": {
"preemphasis": {
"lane0":"0x234b02",
"lane1":"0x244903",
"lane2":"0x244903",
"lane3":"0x234b02"
},
"idriver": {
"lane0":"0x9",
"lane1":"0xa",
"lane2":"0x9",
"lane3":"0x9"
}
}
},
"9": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x2c4004",
"lane2":"0x2b4203",
"lane3":"0x2e3e04"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
}
},
"10": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x294403",
"lane2":"0x294403",
"lane3":"0x294403"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"11": {
"Default": {
"preemphasis": {
"lane0":"0x244903",
"lane1":"0x274603",
"lane2":"0x284503",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"12": {
"Default": {
"preemphasis": {
"lane0":"0x284503",
"lane1":"0x274603",
"lane2":"0x264703",
"lane3":"0x264703"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"13": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x204e02",
"lane2":"0x1f4f02",
"lane3":"0x1f4f02"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x9",
"lane2":"0x8",
"lane3":"0x8"
}
}
},
"14": {
"Default": {
"preemphasis": {
"lane0":"0x1e5002",
"lane1":"0x204e02",
"lane2":"0x1e5002",
"lane3":"0x204e02"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x9",
"lane2":"0x8",
"lane3":"0x9"
}
}
},
"15": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x1e5002",
"lane2":"0x1f4f02",
"lane3":"0x1f4f02"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x8",
"lane2":"0x8",
"lane3":"0x8"
}
}
},
"16": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x1e5002",
"lane2":"0x204e02",
"lane3":"0x1e5002"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x8",
"lane2":"0x9",
"lane3":"0x8"
}
}
},
"17": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x1e5002",
"lane2":"0x204e02",
"lane3":"0x1e5002"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x8",
"lane2":"0x9",
"lane3":"0x8"
}
}
},
"18": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x1e5002",
"lane2":"0x204e02",
"lane3":"0x1e5002"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x8",
"lane2":"0x9",
"lane3":"0x8"
}
}
},
"19": {
"Default": {
"preemphasis": {
"lane0":"0x1e5002",
"lane1":"0x204e02",
"lane2":"0x1e5002",
"lane3":"0x204e02"
},
"idriver": {
"lane0":"0x8",
"lane1":"0x9",
"lane2":"0x8",
"lane3":"0x9"
}
}
},
"20": {
"Default": {
"preemphasis": {
"lane0":"0x204e02",
"lane1":"0x1f4f02",
"lane2":"0x204e02",
"lane3":"0x1f4f02"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x8",
"lane2":"0x9",
"lane3":"0x8"
}
}
},
"21": {
"Default": {
"preemphasis": {
"lane0":"0x244903",
"lane1":"0x244903",
"lane2":"0x244903",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0xa",
"lane1":"0x9",
"lane2":"0xa",
"lane3":"0x9"
}
}
},
"22": {
"Default": {
"preemphasis": {
"lane0":"0x264703",
"lane1":"0x244903",
"lane2":"0x244903",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0xa",
"lane1":"0x9",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"23": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x244903",
"lane2":"0x244903",
"lane3":"0x284503"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"24": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x2b4203",
"lane2":"0x2c4004",
"lane3":"0x2d3f04"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
}
},
"25": {
"Default": {
"preemphasis": {
"lane0":"0x234b02",
"lane1":"0x234b02",
"lane2":"0x234b02",
"lane3":"0x234b02"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x9",
"lane2":"0x9",
"lane3":"0x9"
}
}
},
"26": {
"Default": {
"preemphasis": {
"lane0":"0x234b02",
"lane1":"0x244903",
"lane2":"0x244903",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0x9",
"lane1":"0x9",
"lane2":"0x9",
"lane3":"0x9"
}
}
},
"27": {
"Default": {
"preemphasis": {
"lane0":"0x274603",
"lane1":"0x264703",
"lane2":"0x244903",
"lane3":"0x244903"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0x9",
"lane3":"0xa"
}
}
},
"28": {
"Default": {
"preemphasis": {
"lane0":"0x264703",
"lane1":"0x244903",
"lane2":"0x284503",
"lane3":"0x274603"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"29": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x294403",
"lane2":"0x294403",
"lane3":"0x284503"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"30": {
"Default": {
"preemphasis": {
"lane0":"0x294403",
"lane1":"0x284503",
"lane2":"0x294403",
"lane3":"0x294403"
},
"idriver": {
"lane0":"0xa",
"lane1":"0xa",
"lane2":"0xa",
"lane3":"0xa"
}
}
},
"31": {
"Default": {
"preemphasis": {
"lane0":"0x2b4203",
"lane1":"0x294403",
"lane2":"0x2b4203",
"lane3":"0x2b4203"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xa",
"lane2":"0xb",
"lane3":"0xb"
}
}
},
"32": {
"Default": {
"preemphasis": {
"lane0":"0x2b4203",
"lane1":"0x2b4203",
"lane2":"0x2c4004",
"lane3":"0x2c4004"
},
"idriver": {
"lane0":"0xb",
"lane1":"0xb",
"lane2":"0xb",
"lane3":"0xb"
}
}
}
}
}

View File

@ -0,0 +1,111 @@
# LED microprocessor initialization for DellEMC-Z9264f
m CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=32 REMAP_PORT_2=33 REMAP_PORT_1=34 REMAP_PORT_0=35
m CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=36 REMAP_PORT_6=37 REMAP_PORT_5=38 REMAP_PORT_4=39
m CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=4 REMAP_PORT_10=5 REMAP_PORT_9=6 REMAP_PORT_8=7
m CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0 REMAP_PORT_14=1 REMAP_PORT_13=2 REMAP_PORT_12=3
m CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=56 REMAP_PORT_18=57 REMAP_PORT_17=58 REMAP_PORT_16=59
m CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=60 REMAP_PORT_22=61 REMAP_PORT_21=62 REMAP_PORT_20=63
m CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=28 REMAP_PORT_26=29 REMAP_PORT_25=30 REMAP_PORT_24=31
m CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=24 REMAP_PORT_30=25 REMAP_PORT_29=26 REMAP_PORT_28=27
m CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=48 REMAP_PORT_34=49 REMAP_PORT_33=50 REMAP_PORT_32=51
m CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=52 REMAP_PORT_38=53 REMAP_PORT_37=54 REMAP_PORT_36=55
m CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=20 REMAP_PORT_42=21 REMAP_PORT_41=22 REMAP_PORT_40=23
m CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=16 REMAP_PORT_46=17 REMAP_PORT_45=18 REMAP_PORT_44=19
m CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=40 REMAP_PORT_50=41 REMAP_PORT_49=42 REMAP_PORT_48=43
m CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=44 REMAP_PORT_54=45 REMAP_PORT_53=46 REMAP_PORT_52=47
m CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=12 REMAP_PORT_58=13 REMAP_PORT_57=14 REMAP_PORT_56=15
m CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=8 REMAP_PORT_62=9 REMAP_PORT_61=10 REMAP_PORT_60=11
m CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0 REMAP_PORT_2=1 REMAP_PORT_1=2 REMAP_PORT_0=3
m CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=4 REMAP_PORT_6=5 REMAP_PORT_5=6 REMAP_PORT_4=7
m CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=38 REMAP_PORT_8=39 REMAP_PORT_11=36 REMAP_PORT_10=37
m CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=32 REMAP_PORT_14=33 REMAP_PORT_13=34 REMAP_PORT_12=35
m CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=8 REMAP_PORT_18=9 REMAP_PORT_17=10 REMAP_PORT_16=11
m CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=12 REMAP_PORT_22=13 REMAP_PORT_21=14 REMAP_PORT_20=15
m CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=44 REMAP_PORT_26=45 REMAP_PORT_25=46 REMAP_PORT_24=47
m CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=40 REMAP_PORT_30=41 REMAP_PORT_29=42 REMAP_PORT_28=43
m CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=16 REMAP_PORT_34=17 REMAP_PORT_33=18 REMAP_PORT_32=19
m CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=20 REMAP_PORT_38=21 REMAP_PORT_37=22 REMAP_PORT_36=23
m CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=52 REMAP_PORT_42=53 REMAP_PORT_41=54 REMAP_PORT_40=55
m CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=48 REMAP_PORT_46=49 REMAP_PORT_45=50 REMAP_PORT_44=51
m CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=24 REMAP_PORT_50=25 REMAP_PORT_49=26 REMAP_PORT_48=27
m CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=28 REMAP_PORT_54=29 REMAP_PORT_53=30 REMAP_PORT_52=31
m CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=60 REMAP_PORT_58=61 REMAP_PORT_57=62 REMAP_PORT_56=63
m CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=56 REMAP_PORT_62=57 REMAP_PORT_61=58 REMAP_PORT_60=59
m CMIC_LEDUP2_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=60 REMAP_PORT_2=61 REMAP_PORT_1=62 REMAP_PORT_0=63
m CMIC_LEDUP2_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=56 REMAP_PORT_6=57 REMAP_PORT_5=58 REMAP_PORT_4=59
m CMIC_LEDUP2_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=24 REMAP_PORT_10=25 REMAP_PORT_9=26 REMAP_PORT_8=27
m CMIC_LEDUP2_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=28 REMAP_PORT_14=29 REMAP_PORT_13=30 REMAP_PORT_12=31
m CMIC_LEDUP2_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=52 REMAP_PORT_18=53 REMAP_PORT_17=54 REMAP_PORT_16=55
m CMIC_LEDUP2_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=48 REMAP_PORT_22=49 REMAP_PORT_21=50 REMAP_PORT_20=51
m CMIC_LEDUP2_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=16 REMAP_PORT_26=17 REMAP_PORT_25=18 REMAP_PORT_24=19
m CMIC_LEDUP2_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=20 REMAP_PORT_30=21 REMAP_PORT_29=22 REMAP_PORT_28=23
m CMIC_LEDUP2_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=44 REMAP_PORT_34=45 REMAP_PORT_33=46 REMAP_PORT_32=47
m CMIC_LEDUP2_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=40 REMAP_PORT_38=41 REMAP_PORT_37=42 REMAP_PORT_36=43
m CMIC_LEDUP2_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=8 REMAP_PORT_42=9 REMAP_PORT_41=10 REMAP_PORT_40=11
m CMIC_LEDUP2_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=12 REMAP_PORT_46=13 REMAP_PORT_45=14 REMAP_PORT_44=15
m CMIC_LEDUP2_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=36 REMAP_PORT_50=37 REMAP_PORT_49=38 REMAP_PORT_48=39
m CMIC_LEDUP2_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=32 REMAP_PORT_54=33 REMAP_PORT_53=34 REMAP_PORT_52=35
m CMIC_LEDUP2_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=0 REMAP_PORT_58=1 REMAP_PORT_57=2 REMAP_PORT_56=3
m CMIC_LEDUP2_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=4 REMAP_PORT_62=5 REMAP_PORT_61=6 REMAP_PORT_60=7
m CMIC_LEDUP3_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=28 REMAP_PORT_2=29 REMAP_PORT_1=30 REMAP_PORT_0=31
m CMIC_LEDUP3_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=24 REMAP_PORT_6=25 REMAP_PORT_5=26 REMAP_PORT_4=27
m CMIC_LEDUP3_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=56 REMAP_PORT_10=57 REMAP_PORT_9=58 REMAP_PORT_8=59
m CMIC_LEDUP3_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=60 REMAP_PORT_14=61 REMAP_PORT_13=62 REMAP_PORT_12=63
m CMIC_LEDUP3_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=4 REMAP_PORT_18=5 REMAP_PORT_17=6 REMAP_PORT_16=7
m CMIC_LEDUP3_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0 REMAP_PORT_22=1 REMAP_PORT_21=2 REMAP_PORT_20=3
m CMIC_LEDUP3_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=32 REMAP_PORT_26=33 REMAP_PORT_25=34 REMAP_PORT_24=35
m CMIC_LEDUP3_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=36 REMAP_PORT_30=37 REMAP_PORT_29=38 REMAP_PORT_28=39
m CMIC_LEDUP3_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=12 REMAP_PORT_34=13 REMAP_PORT_33=14 REMAP_PORT_32=15
m CMIC_LEDUP3_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=8 REMAP_PORT_38=9 REMAP_PORT_37=10 REMAP_PORT_36=11
m CMIC_LEDUP3_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=40 REMAP_PORT_42=41 REMAP_PORT_41=42 REMAP_PORT_40=43
m CMIC_LEDUP3_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=44 REMAP_PORT_46=45 REMAP_PORT_45=46 REMAP_PORT_44=47
m CMIC_LEDUP3_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=20 REMAP_PORT_50=21 REMAP_PORT_49=22 REMAP_PORT_48=23
m CMIC_LEDUP3_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=16 REMAP_PORT_54=17 REMAP_PORT_53=18 REMAP_PORT_52=19
m CMIC_LEDUP3_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=48 REMAP_PORT_58=49 REMAP_PORT_57=50 REMAP_PORT_56=51
m CMIC_LEDUP3_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=52 REMAP_PORT_62=53 REMAP_PORT_61=54 REMAP_PORT_60=55
m CMIC_LEDUP4_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=1 REMAP_PORT_1=0
led 0 stop
led 0 prog \
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
led 0 auto on
led 0 start
led 1 stop
led 1 prog \
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
led 1 auto on
led 1 start
led 2 stop
led 2 prog \
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
led 2 auto on
led 2 start
led 3 stop
led 3 prog \
02 00 60 FE 2E FE 67 1C 86 FE 06 FE D2 40 71 04 \
12 FF 85 05 D2 05 71 1A 52 00 3A 80 32 08 97 71 \
23 77 4B 32 00 32 01 B7 97 75 32 12 BC FE FE 02 \
0A 50 12 BC FE FE 95 75 3C 85 77 44 16 FF DA 02 \
71 4B 77 44 22 0F 87 22 0E 87 57 22 0E 87 22 0E \
87 57 22 0E 87 22 0F 87 57 00 00 00 00 00 00 00
led 3 auto on
led 3 start

View File

@ -0,0 +1,115 @@
# LED microprocessor initialization for DellEMC-Z9264f
m CMIC_LEDUP0_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=32 REMAP_PORT_2=33 REMAP_PORT_1=34 REMAP_PORT_0=35
m CMIC_LEDUP0_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=36 REMAP_PORT_6=37 REMAP_PORT_5=38 REMAP_PORT_4=39
m CMIC_LEDUP0_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=4 REMAP_PORT_10=5 REMAP_PORT_9=6 REMAP_PORT_8=7
m CMIC_LEDUP0_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=0 REMAP_PORT_14=1 REMAP_PORT_13=2 REMAP_PORT_12=3
m CMIC_LEDUP0_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=56 REMAP_PORT_18=57 REMAP_PORT_17=58 REMAP_PORT_16=59
m CMIC_LEDUP0_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=60 REMAP_PORT_22=61 REMAP_PORT_21=62 REMAP_PORT_20=63
m CMIC_LEDUP0_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=28 REMAP_PORT_26=29 REMAP_PORT_25=30 REMAP_PORT_24=31
m CMIC_LEDUP0_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=24 REMAP_PORT_30=25 REMAP_PORT_29=26 REMAP_PORT_28=27
m CMIC_LEDUP0_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=48 REMAP_PORT_34=49 REMAP_PORT_33=50 REMAP_PORT_32=51
m CMIC_LEDUP0_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=52 REMAP_PORT_38=53 REMAP_PORT_37=54 REMAP_PORT_36=55
m CMIC_LEDUP0_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=20 REMAP_PORT_42=21 REMAP_PORT_41=22 REMAP_PORT_40=23
m CMIC_LEDUP0_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=16 REMAP_PORT_46=17 REMAP_PORT_45=18 REMAP_PORT_44=19
m CMIC_LEDUP0_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=40 REMAP_PORT_50=41 REMAP_PORT_49=42 REMAP_PORT_48=43
m CMIC_LEDUP0_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=44 REMAP_PORT_54=45 REMAP_PORT_53=46 REMAP_PORT_52=47
m CMIC_LEDUP0_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=12 REMAP_PORT_58=13 REMAP_PORT_57=14 REMAP_PORT_56=15
m CMIC_LEDUP0_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=8 REMAP_PORT_62=9 REMAP_PORT_61=10 REMAP_PORT_60=11
m CMIC_LEDUP1_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=0 REMAP_PORT_2=1 REMAP_PORT_1=2 REMAP_PORT_0=3
m CMIC_LEDUP1_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=4 REMAP_PORT_6=5 REMAP_PORT_5=6 REMAP_PORT_4=7
m CMIC_LEDUP1_PORT_ORDER_REMAP_8_11 REMAP_PORT_9=38 REMAP_PORT_8=39 REMAP_PORT_11=36 REMAP_PORT_10=37
m CMIC_LEDUP1_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=32 REMAP_PORT_14=33 REMAP_PORT_13=34 REMAP_PORT_12=35
m CMIC_LEDUP1_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=8 REMAP_PORT_18=9 REMAP_PORT_17=10 REMAP_PORT_16=11
m CMIC_LEDUP1_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=12 REMAP_PORT_22=13 REMAP_PORT_21=14 REMAP_PORT_20=15
m CMIC_LEDUP1_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=44 REMAP_PORT_26=45 REMAP_PORT_25=46 REMAP_PORT_24=47
m CMIC_LEDUP1_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=40 REMAP_PORT_30=41 REMAP_PORT_29=42 REMAP_PORT_28=43
m CMIC_LEDUP1_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=16 REMAP_PORT_34=17 REMAP_PORT_33=18 REMAP_PORT_32=19
m CMIC_LEDUP1_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=20 REMAP_PORT_38=21 REMAP_PORT_37=22 REMAP_PORT_36=23
m CMIC_LEDUP1_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=52 REMAP_PORT_42=53 REMAP_PORT_41=54 REMAP_PORT_40=55
m CMIC_LEDUP1_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=48 REMAP_PORT_46=49 REMAP_PORT_45=50 REMAP_PORT_44=51
m CMIC_LEDUP1_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=24 REMAP_PORT_50=25 REMAP_PORT_49=26 REMAP_PORT_48=27
m CMIC_LEDUP1_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=28 REMAP_PORT_54=29 REMAP_PORT_53=30 REMAP_PORT_52=31
m CMIC_LEDUP1_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=60 REMAP_PORT_58=61 REMAP_PORT_57=62 REMAP_PORT_56=63
m CMIC_LEDUP1_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=56 REMAP_PORT_62=57 REMAP_PORT_61=58 REMAP_PORT_60=59
m CMIC_LEDUP2_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=60 REMAP_PORT_2=61 REMAP_PORT_1=62 REMAP_PORT_0=63
m CMIC_LEDUP2_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=56 REMAP_PORT_6=57 REMAP_PORT_5=58 REMAP_PORT_4=59
m CMIC_LEDUP2_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=24 REMAP_PORT_10=25 REMAP_PORT_9=26 REMAP_PORT_8=27
m CMIC_LEDUP2_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=28 REMAP_PORT_14=29 REMAP_PORT_13=30 REMAP_PORT_12=31
m CMIC_LEDUP2_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=52 REMAP_PORT_18=53 REMAP_PORT_17=54 REMAP_PORT_16=55
m CMIC_LEDUP2_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=48 REMAP_PORT_22=49 REMAP_PORT_21=50 REMAP_PORT_20=51
m CMIC_LEDUP2_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=16 REMAP_PORT_26=17 REMAP_PORT_25=18 REMAP_PORT_24=19
m CMIC_LEDUP2_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=20 REMAP_PORT_30=21 REMAP_PORT_29=22 REMAP_PORT_28=23
m CMIC_LEDUP2_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=44 REMAP_PORT_34=45 REMAP_PORT_33=46 REMAP_PORT_32=47
m CMIC_LEDUP2_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=40 REMAP_PORT_38=41 REMAP_PORT_37=42 REMAP_PORT_36=43
m CMIC_LEDUP2_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=8 REMAP_PORT_42=9 REMAP_PORT_41=10 REMAP_PORT_40=11
m CMIC_LEDUP2_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=12 REMAP_PORT_46=13 REMAP_PORT_45=14 REMAP_PORT_44=15
m CMIC_LEDUP2_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=36 REMAP_PORT_50=37 REMAP_PORT_49=38 REMAP_PORT_48=39
m CMIC_LEDUP2_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=32 REMAP_PORT_54=33 REMAP_PORT_53=34 REMAP_PORT_52=35
m CMIC_LEDUP2_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=0 REMAP_PORT_58=1 REMAP_PORT_57=2 REMAP_PORT_56=3
m CMIC_LEDUP2_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=4 REMAP_PORT_62=5 REMAP_PORT_61=6 REMAP_PORT_60=7
m CMIC_LEDUP3_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=28 REMAP_PORT_2=29 REMAP_PORT_1=30 REMAP_PORT_0=31
m CMIC_LEDUP3_PORT_ORDER_REMAP_4_7 REMAP_PORT_7=24 REMAP_PORT_6=25 REMAP_PORT_5=26 REMAP_PORT_4=27
m CMIC_LEDUP3_PORT_ORDER_REMAP_8_11 REMAP_PORT_11=56 REMAP_PORT_10=57 REMAP_PORT_9=58 REMAP_PORT_8=59
m CMIC_LEDUP3_PORT_ORDER_REMAP_12_15 REMAP_PORT_15=60 REMAP_PORT_14=61 REMAP_PORT_13=62 REMAP_PORT_12=63
m CMIC_LEDUP3_PORT_ORDER_REMAP_16_19 REMAP_PORT_19=4 REMAP_PORT_18=5 REMAP_PORT_17=6 REMAP_PORT_16=7
m CMIC_LEDUP3_PORT_ORDER_REMAP_20_23 REMAP_PORT_23=0 REMAP_PORT_22=1 REMAP_PORT_21=2 REMAP_PORT_20=3
m CMIC_LEDUP3_PORT_ORDER_REMAP_24_27 REMAP_PORT_27=32 REMAP_PORT_26=33 REMAP_PORT_25=34 REMAP_PORT_24=35
m CMIC_LEDUP3_PORT_ORDER_REMAP_28_31 REMAP_PORT_31=36 REMAP_PORT_30=37 REMAP_PORT_29=38 REMAP_PORT_28=39
m CMIC_LEDUP3_PORT_ORDER_REMAP_32_35 REMAP_PORT_35=12 REMAP_PORT_34=13 REMAP_PORT_33=14 REMAP_PORT_32=15
m CMIC_LEDUP3_PORT_ORDER_REMAP_36_39 REMAP_PORT_39=8 REMAP_PORT_38=9 REMAP_PORT_37=10 REMAP_PORT_36=11
m CMIC_LEDUP3_PORT_ORDER_REMAP_40_43 REMAP_PORT_43=40 REMAP_PORT_42=41 REMAP_PORT_41=42 REMAP_PORT_40=43
m CMIC_LEDUP3_PORT_ORDER_REMAP_44_47 REMAP_PORT_47=44 REMAP_PORT_46=45 REMAP_PORT_45=46 REMAP_PORT_44=47
m CMIC_LEDUP3_PORT_ORDER_REMAP_48_51 REMAP_PORT_51=20 REMAP_PORT_50=21 REMAP_PORT_49=22 REMAP_PORT_48=23
m CMIC_LEDUP3_PORT_ORDER_REMAP_52_55 REMAP_PORT_55=16 REMAP_PORT_54=17 REMAP_PORT_53=18 REMAP_PORT_52=19
m CMIC_LEDUP3_PORT_ORDER_REMAP_56_59 REMAP_PORT_59=48 REMAP_PORT_58=49 REMAP_PORT_57=50 REMAP_PORT_56=51
m CMIC_LEDUP3_PORT_ORDER_REMAP_60_63 REMAP_PORT_63=52 REMAP_PORT_62=53 REMAP_PORT_61=54 REMAP_PORT_60=55
m CMIC_LEDUP4_PORT_ORDER_REMAP_0_3 REMAP_PORT_3=1 REMAP_PORT_1=0
led 0 stop
led 0 prog \
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
led 0 auto on
led 0 start
led 1 stop
led 1 prog \
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
led 1 auto on
led 1 start
led 2 stop
led 2 prog \
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
led 2 auto on
led 2 start
led 3 stop
led 3 prog \
02 00 28 60 FE 67 1B 06 FE 80 D2 40 74 02 86 FD \
3A 80 28 32 08 97 71 5A 77 4C 57 28 32 08 97 75 \
4C 28 32 00 32 01 B7 97 75 3C 16 FD DA 0A 74 36 \
12 00 61 FD CA 05 CA 05 74 3C 77 4C 12 96 F8 15 \
1A 00 75 53 77 5A 57 28 32 07 97 57 32 0E 87 32 \
0E 87 57 32 0E 87 32 0F 87 57 32 0F 87 32 0E 87 \
57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
led 3 auto on
led 3 start

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@
try: try:
import time import time
import subprocess import subprocess
from sonic_sfp.sfputilbase import SfpUtilBase from sonic_sfp.sfputilbase import *
except ImportError as e: except ImportError as e:
raise ImportError("%s - required module not found" % str(e)) raise ImportError("%s - required module not found" % str(e))
@ -20,6 +20,10 @@ SFP_STATUS_INSERTED = '1'
GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku" GET_HWSKU_CMD = "sonic-cfggen -d -v DEVICE_METADATA.localhost.hwsku"
# Ethernet<n> <=> sfp<n+SFP_PORT_NAME_OFFSET>
SFP_PORT_NAME_OFFSET = 1
SFP_PORT_NAME_CONVENTION = "sfp{}"
# magic code defnition for port number, qsfp port position of each hwsku # magic code defnition for port number, qsfp port position of each hwsku
# port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET) # port_position_tuple = (PORT_START, QSFP_PORT_START, PORT_END, PORT_IN_BLOCK, EEPROM_OFFSET)
hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0, 'Mellanox-SN2700': 0, 'Mellanox-SN2700-D48C8': 0} hwsku_dict = {'ACS-MSN2700': 0, "LS-SN2700":0, 'ACS-MSN2740': 0, 'ACS-MSN2100': 1, 'ACS-MSN2410': 2, 'ACS-MSN2010': 3, 'ACS-MSN3700': 0, 'ACS-MSN3700C': 0, 'Mellanox-SN2700': 0, 'Mellanox-SN2700-D48C8': 0}
@ -33,15 +37,12 @@ class SfpUtil(SfpUtilBase):
PORTS_IN_BLOCK = 0 PORTS_IN_BLOCK = 0
EEPROM_OFFSET = 0 EEPROM_OFFSET = 0
_port_to_eeprom_mapping = {}
db_sel = None db_sel = None
db_sel_timeout = None db_sel_timeout = None
db_sel_object = None db_sel_object = None
db_sel_tbl = None db_sel_tbl = None
state_db = None state_db = None
sfpd_status_tbl = None sfpd_status_tbl = None
qsfp_sysfs_path = "/var/run/hw-management/qsfp/"
@property @property
def port_start(self): def port_start(self):
@ -57,7 +58,8 @@ class SfpUtil(SfpUtilBase):
@property @property
def port_to_eeprom_mapping(self): def port_to_eeprom_mapping(self):
return self._port_to_eeprom_mapping print "dependency on sysfs has been removed"
raise Exception()
def get_port_position_tuple_by_sku_name(self): def get_port_position_tuple_by_sku_name(self):
p = subprocess.Popen(GET_HWSKU_CMD, shell=True, stdout=subprocess.PIPE) p = subprocess.Popen(GET_HWSKU_CMD, shell=True, stdout=subprocess.PIPE)
@ -73,29 +75,31 @@ class SfpUtil(SfpUtilBase):
self.PORTS_IN_BLOCK = port_position_tuple[3] self.PORTS_IN_BLOCK = port_position_tuple[3]
self.EEPROM_OFFSET = port_position_tuple[4] self.EEPROM_OFFSET = port_position_tuple[4]
for x in range(0, self.port_end + 1):
self._port_to_eeprom_mapping[x] = self.qsfp_sysfs_path + "qsfp{}".format(x + self.EEPROM_OFFSET)
SfpUtilBase.__init__(self) SfpUtilBase.__init__(self)
def get_presence(self, port_num): def get_presence(self, port_num):
presence = False
# Check for invalid port_num # Check for invalid port_num
if port_num < self.port_start or port_num > self.port_end: if port_num < self.port_start or port_num > self.port_end:
return False return presence
port_num += SFP_PORT_NAME_OFFSET
sfpname = SFP_PORT_NAME_CONVENTION.format(port_num)
ethtool_cmd = "ethtool -m {} 2>/dev/null".format(sfpname)
try: try:
reg_file = open(self.qsfp_sysfs_path + "qsfp{}_status".format(port_num + 1)) proc = subprocess.Popen(ethtool_cmd, stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
except IOError as e: stdout = proc.communicate()[0]
print "Error: unable to open file: %s" % str(e) proc.wait()
return False result = stdout.rstrip('\n')
if result != '':
presence = True
content = reg_file.readline().rstrip() except OSError, e:
return presence
# content is a string with the qsfp status return presence
if content == SFP_STATUS_INSERTED:
return True
return False
def get_low_power_mode(self, port_num): def get_low_power_mode(self, port_num):
# Check for invalid port_num # Check for invalid port_num
@ -191,3 +195,354 @@ class SfpUtil(SfpUtilBase):
return status, phy_port_dict return status, phy_port_dict
def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes):
print("_read_eeprom_specific_bytes should not be called since the sysfs it dependents on will no longer exist.")
print("_read_eeprom_specific_bytes_via_ethtool should be called instead")
raise Exception()
# Read out any bytes from any offset
def _read_eeprom_specific_bytes_via_ethtool(self, port_num, offset, num_bytes):
port_num += SFP_PORT_NAME_OFFSET
sfpname = SFP_PORT_NAME_CONVENTION.format(port_num)
eeprom_raw = []
ethtool_cmd = "ethtool -m {} hex on offset {} length {}".format(sfpname, offset, num_bytes)
try:
output = subprocess.check_output(ethtool_cmd, shell=True)
output_lines = output.splitlines()
first_line_raw = output_lines[0]
if "Offset" in first_line_raw:
for line in output_lines[2:]:
line_split = line.split()
eeprom_raw = eeprom_raw + line_split[1:]
except subprocess.CalledProcessError as e:
return None
return eeprom_raw
# Read eeprom
def _read_eeprom_devid(self, port_num, devid, offset, num_bytes = 512):
if port_num in self.osfp_ports:
pass
elif port_num in self.qsfp_ports:
pass
elif (self.DOM_EEPROM_ADDR == devid):
offset += 256
eeprom_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, num_bytes)
return eeprom_raw
# Read out SFP type, vendor name, PN, REV, SN from eeprom.
def get_transceiver_info_dict(self, port_num):
transceiver_info_dict = {}
compliance_code_dict = {}
# ToDo: OSFP tranceiver info parsing not fully supported.
# in inf8628.py lack of some memory map definition
# will be implemented when the inf8628 memory map ready
if port_num in self.osfp_ports:
offset = 0
vendor_rev_width = XCVR_HW_REV_WIDTH_OSFP
sfpi_obj = inf8628InterfaceId()
if sfpi_obj is None:
print("Error: sfp_object open failed")
return None
sfp_type_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_TYPE_OFFSET), XCVR_TYPE_WIDTH)
if sfp_type_raw is not None:
sfp_type_data = sfpi_obj.parse_sfp_type(sfp_type_raw, 0)
else:
return None
sfp_vendor_name_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH)
if sfp_vendor_name_raw is not None:
sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0)
else:
return None
sfp_vendor_pn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH)
if sfp_vendor_pn_raw is not None:
sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0)
else:
return None
sfp_vendor_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_HW_REV_OFFSET), vendor_rev_width)
if sfp_vendor_rev_raw is not None:
sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0)
else:
return None
sfp_vendor_sn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + OSFP_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH)
if sfp_vendor_sn_raw is not None:
sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0)
else:
return None
transceiver_info_dict['type'] = sfp_type_data['data']['type']['value']
transceiver_info_dict['manufacturename'] = sfp_vendor_name_data['data']['Vendor Name']['value']
transceiver_info_dict['modelname'] = sfp_vendor_pn_data['data']['Vendor PN']['value']
transceiver_info_dict['hardwarerev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value']
transceiver_info_dict['serialnum'] = sfp_vendor_sn_data['data']['Vendor SN']['value']
# Below part is added to avoid fail the xcvrd, shall be implemented later
transceiver_info_dict['vendor_oui'] = 'N/A'
transceiver_info_dict['vendor_date'] = 'N/A'
transceiver_info_dict['Connector'] = 'N/A'
transceiver_info_dict['encoding'] = 'N/A'
transceiver_info_dict['ext_identifier'] = 'N/A'
transceiver_info_dict['ext_rateselect_compliance'] = 'N/A'
transceiver_info_dict['cable_type'] = 'N/A'
transceiver_info_dict['cable_length'] = 'N/A'
transceiver_info_dict['specification_compliance'] = 'N/A'
transceiver_info_dict['nominal_bit_rate'] = 'N/A'
else:
if port_num in self.qsfp_ports:
offset = 128
vendor_rev_width = XCVR_HW_REV_WIDTH_QSFP
cable_length_width = XCVR_CABLE_LENGTH_WIDTH_QSFP
interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_QSFP
sfp_type = 'QSFP'
sfpi_obj = sff8436InterfaceId()
if sfpi_obj is None:
print("Error: sfp_object open failed")
return None
else:
offset = 0
vendor_rev_width = XCVR_HW_REV_WIDTH_SFP
cable_length_width = XCVR_CABLE_LENGTH_WIDTH_SFP
interface_info_bulk_width = XCVR_INTFACE_BULK_WIDTH_SFP
sfp_type = 'SFP'
sfpi_obj = sff8472InterfaceId()
if sfpi_obj is None:
print("Error: sfp_object open failed")
return None
sfp_interface_bulk_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_INTFACE_BULK_OFFSET), interface_info_bulk_width)
if sfp_interface_bulk_raw is not None:
sfp_interface_bulk_data = sfpi_obj.parse_sfp_info_bulk(sfp_interface_bulk_raw, 0)
else:
return None
sfp_vendor_name_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_NAME_OFFSET), XCVR_VENDOR_NAME_WIDTH)
if sfp_vendor_name_raw is not None:
sfp_vendor_name_data = sfpi_obj.parse_vendor_name(sfp_vendor_name_raw, 0)
else:
return None
sfp_vendor_pn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_PN_OFFSET), XCVR_VENDOR_PN_WIDTH)
if sfp_vendor_pn_raw is not None:
sfp_vendor_pn_data = sfpi_obj.parse_vendor_pn(sfp_vendor_pn_raw, 0)
else:
return None
sfp_vendor_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_HW_REV_OFFSET), vendor_rev_width)
if sfp_vendor_rev_raw is not None:
sfp_vendor_rev_data = sfpi_obj.parse_vendor_rev(sfp_vendor_rev_raw, 0)
else:
return None
sfp_vendor_sn_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_SN_OFFSET), XCVR_VENDOR_SN_WIDTH)
if sfp_vendor_sn_raw is not None:
sfp_vendor_sn_data = sfpi_obj.parse_vendor_sn(sfp_vendor_sn_raw, 0)
else:
return None
sfp_vendor_oui_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_OUI_OFFSET), XCVR_VENDOR_OUI_WIDTH)
if sfp_vendor_oui_raw is not None:
sfp_vendor_oui_data = sfpi_obj.parse_vendor_oui(sfp_vendor_oui_raw, 0)
else:
return None
sfp_vendor_date_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + XCVR_VENDOR_DATE_OFFSET), XCVR_VENDOR_DATE_WIDTH)
if sfp_vendor_date_raw is not None:
sfp_vendor_date_data = sfpi_obj.parse_vendor_date(sfp_vendor_date_raw, 0)
else:
return None
transceiver_info_dict['type'] = sfp_interface_bulk_data['data']['type']['value']
transceiver_info_dict['manufacturename'] = sfp_vendor_name_data['data']['Vendor Name']['value']
transceiver_info_dict['modelname'] = sfp_vendor_pn_data['data']['Vendor PN']['value']
transceiver_info_dict['hardwarerev'] = sfp_vendor_rev_data['data']['Vendor Rev']['value']
transceiver_info_dict['serialnum'] = sfp_vendor_sn_data['data']['Vendor SN']['value']
transceiver_info_dict['vendor_oui'] = sfp_vendor_oui_data['data']['Vendor OUI']['value']
transceiver_info_dict['vendor_date'] = sfp_vendor_date_data['data']['VendorDataCode(YYYY-MM-DD Lot)']['value']
transceiver_info_dict['Connector'] = sfp_interface_bulk_data['data']['Connector']['value']
transceiver_info_dict['encoding'] = sfp_interface_bulk_data['data']['EncodingCodes']['value']
transceiver_info_dict['ext_identifier'] = sfp_interface_bulk_data['data']['Extended Identifier']['value']
transceiver_info_dict['ext_rateselect_compliance'] = sfp_interface_bulk_data['data']['RateIdentifier']['value']
if sfp_type == 'QSFP':
for key in qsfp_cable_length_tup:
if key in sfp_interface_bulk_data['data']:
transceiver_info_dict['cable_type'] = key
transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value'])
for key in qsfp_compliance_code_tup:
if key in sfp_interface_bulk_data['data']['Specification compliance']['value']:
compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value']
transceiver_info_dict['specification_compliance'] = str(compliance_code_dict)
transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['Nominal Bit Rate(100Mbs)']['value'])
else:
for key in sfp_cable_length_tup:
if key in sfp_interface_bulk_data['data']:
transceiver_info_dict['cable_type'] = key
transceiver_info_dict['cable_length'] = str(sfp_interface_bulk_data['data'][key]['value'])
for key in sfp_compliance_code_tup:
if key in sfp_interface_bulk_data['data']['Specification compliance']['value']:
compliance_code_dict[key] = sfp_interface_bulk_data['data']['Specification compliance']['value'][key]['value']
transceiver_info_dict['specification_compliance'] = str(compliance_code_dict)
transceiver_info_dict['nominal_bit_rate'] = str(sfp_interface_bulk_data['data']['NominalSignallingRate(UnitsOf100Mbd)']['value'])
return transceiver_info_dict
def get_transceiver_dom_info_dict(self, port_num):
transceiver_dom_info_dict = {}
# Below part is added to avoid failing xcvrd
# Currently, the way in which dom data is read has been changed from
# using sysfs to using ethtool.
# The ethtool returns None for ports without dom support, resulting in
# None being returned. However, this fails xcvrd to add the
# TRANSCEIVER_DOM_SENSOR table entry of associated port to CONFIG_DB
# and then causes SNMP fail.
# To address this issue a default dict is initialized with all data set to
# 'N/A' and is returned is the above case.
# BTW, in the original implementation which sysfs is used to read dom data,
# even though non-None data is returned for ports without dom support,
# it does not contain valid data. This can result in wrong data in
# TRANSCEIVER_DOM_SENSOR table.
transceiver_dom_info_dict['temperature'] = 'N/A'
transceiver_dom_info_dict['voltage'] = 'N/A'
transceiver_dom_info_dict['rx1power'] = 'N/A'
transceiver_dom_info_dict['rx2power'] = 'N/A'
transceiver_dom_info_dict['rx3power'] = 'N/A'
transceiver_dom_info_dict['rx4power'] = 'N/A'
transceiver_dom_info_dict['tx1bias'] = 'N/A'
transceiver_dom_info_dict['tx2bias'] = 'N/A'
transceiver_dom_info_dict['tx3bias'] = 'N/A'
transceiver_dom_info_dict['tx4bias'] = 'N/A'
transceiver_dom_info_dict['tx1power'] = 'N/A'
transceiver_dom_info_dict['tx2power'] = 'N/A'
transceiver_dom_info_dict['tx3power'] = 'N/A'
transceiver_dom_info_dict['tx4power'] = 'N/A'
if port_num in self.osfp_ports:
pass
elif port_num in self.qsfp_ports:
offset = 0
offset_xcvr = 128
sfpd_obj = sff8436Dom()
if sfpd_obj is None:
return None
sfpi_obj = sff8436InterfaceId()
if sfpi_obj is None:
return None
# QSFP capability byte parse, through this byte can know whether it support tx_power or not.
# TODO: in the future when decided to migrate to support SFF-8636 instead of SFF-8436,
# need to add more code for determining the capability and version compliance
# in SFF-8636 dom capability definitions evolving with the versions.
qsfp_dom_capability_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset_xcvr + XCVR_DOM_CAPABILITY_OFFSET), XCVR_DOM_CAPABILITY_WIDTH)
if qsfp_dom_capability_raw is not None:
qspf_dom_capability_data = sfpi_obj.parse_qsfp_dom_capability(qsfp_dom_capability_raw, 0)
else:
return transceiver_dom_info_dict
dom_temperature_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_TEMPE_OFFSET), QSFP_TEMPE_WIDTH)
if dom_temperature_raw is not None:
dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0)
else:
return transceiver_dom_info_dict
dom_voltage_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_VLOT_OFFSET), QSFP_VOLT_WIDTH)
if dom_voltage_raw is not None:
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
else:
return transceiver_dom_info_dict
qsfp_dom_rev_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_DOM_REV_OFFSET), QSFP_DOM_REV_WIDTH)
if qsfp_dom_rev_raw is not None:
qsfp_dom_rev_data = sfpd_obj.parse_sfp_dom_rev(qsfp_dom_rev_raw, 0)
else:
return transceiver_dom_info_dict
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
# The tx_power monitoring is only available on QSFP which compliant with SFF-8636
# and claimed that it support tx_power with one indicator bit.
dom_channel_monitor_data = {}
qsfp_dom_rev = qsfp_dom_rev_data['data']['dom_rev']['value']
qsfp_tx_power_support = qspf_dom_capability_data['data']['Tx_power_support']['value']
if (qsfp_dom_rev[0:8] != 'SFF-8636' or (qsfp_dom_rev[0:8] == 'SFF-8636' and qsfp_tx_power_support != 'on')):
dom_channel_monitor_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WIDTH)
if dom_channel_monitor_raw is not None:
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0)
else:
return transceiver_dom_info_dict
else:
dom_channel_monitor_raw = self._read_eeprom_specific_bytes_via_ethtool(port_num, (offset + QSFP_CHANNL_MON_OFFSET), QSFP_CHANNL_MON_WITH_TX_POWER_WIDTH)
if dom_channel_monitor_raw is not None:
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params_with_tx_power(dom_channel_monitor_raw, 0)
else:
return transceiver_dom_info_dict
transceiver_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TX1Power']['value']
transceiver_dom_info_dict['tx2power'] = dom_channel_monitor_data['data']['TX2Power']['value']
transceiver_dom_info_dict['tx3power'] = dom_channel_monitor_data['data']['TX3Power']['value']
transceiver_dom_info_dict['tx4power'] = dom_channel_monitor_data['data']['TX4Power']['value']
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
transceiver_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RX1Power']['value']
transceiver_dom_info_dict['rx2power'] = dom_channel_monitor_data['data']['RX2Power']['value']
transceiver_dom_info_dict['rx3power'] = dom_channel_monitor_data['data']['RX3Power']['value']
transceiver_dom_info_dict['rx4power'] = dom_channel_monitor_data['data']['RX4Power']['value']
transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TX1Bias']['value']
transceiver_dom_info_dict['tx2bias'] = dom_channel_monitor_data['data']['TX2Bias']['value']
transceiver_dom_info_dict['tx3bias'] = dom_channel_monitor_data['data']['TX3Bias']['value']
transceiver_dom_info_dict['tx4bias'] = dom_channel_monitor_data['data']['TX4Bias']['value']
else:
offset = 256
eeprom_raw = ['0'] * 256
eeprom_raw[92:92+16] = self._read_eeprom_specific_bytes_via_ethtool(port_num, 92, 16)
sfp_obj = sff8472InterfaceId()
calibration_type = sfp_obj._get_calibration_type(eeprom_raw)
eeprom_domraw = self._read_eeprom_specific_bytes_via_ethtool(port_num, offset, 256)
if eeprom_domraw is None:
return transceiver_dom_info_dict
sfpd_obj = sff8472Dom(None, calibration_type)
if sfpd_obj is None:
print "no sff8472Dom"
return None
dom_temperature_raw = eeprom_domraw[SFP_TEMPE_OFFSET:SFP_TEMPE_OFFSET+SFP_TEMPE_WIDTH]
dom_temperature_data = sfpd_obj.parse_temperature(dom_temperature_raw, 0)
dom_voltage_raw = eeprom_domraw[SFP_VLOT_OFFSET:SFP_VLOT_OFFSET+SFP_VOLT_WIDTH]
dom_voltage_data = sfpd_obj.parse_voltage(dom_voltage_raw, 0)
dom_channel_monitor_raw = eeprom_domraw[SFP_CHANNL_MON_OFFSET:SFP_CHANNL_MON_OFFSET+SFP_CHANNL_MON_WIDTH]
dom_channel_monitor_data = sfpd_obj.parse_channel_monitor_params(dom_channel_monitor_raw, 0)
transceiver_dom_info_dict['temperature'] = dom_temperature_data['data']['Temperature']['value']
transceiver_dom_info_dict['voltage'] = dom_voltage_data['data']['Vcc']['value']
transceiver_dom_info_dict['rx1power'] = dom_channel_monitor_data['data']['RXPower']['value']
transceiver_dom_info_dict['tx1bias'] = dom_channel_monitor_data['data']['TXBias']['value']
transceiver_dom_info_dict['tx1power'] = dom_channel_monitor_data['data']['TXPower']['value']
return transceiver_dom_info_dict

View File

@ -32,28 +32,33 @@ stderr_logfile=syslog
{% if num_relays.count > 0 %} {% if num_relays.count > 0 %}
[group:isc-dhcp-relay] [group:isc-dhcp-relay]
programs= programs=
{%- set add_preceding_comma = { 'flag': False } -%} {%- set add_preceding_comma = { 'flag': False } %}
{%- for vlan_name in VLAN -%} {% for vlan_name in VLAN %}
{%- if VLAN[vlan_name]['dhcp_servers'] -%} {% if VLAN[vlan_name]['dhcp_servers'] %}
{%- if add_preceding_comma.flag %},{% endif -%} {% if add_preceding_comma.flag %},{% endif %}
{%- set _dummy = add_preceding_comma.update({'flag': True}) -%} {% set _dummy = add_preceding_comma.update({'flag': True}) %}
isc-dhcp-relay-{{ vlan_name }} isc-dhcp-relay-{{ vlan_name }}
{%- endif %} {%- endif %}
{% endfor %} {% endfor %}
{# Create a program entry for each DHCP relay agent instance #} {# Create a program entry for each DHCP relay agent instance #}
{% for vlan_name in VLAN -%} {% for vlan_name in VLAN %}
{%- if VLAN[vlan_name]['dhcp_servers'] -%} {% if VLAN[vlan_name]['dhcp_servers'] %}
[program:isc-dhcp-relay-{{ vlan_name }}] [program:isc-dhcp-relay-{{ vlan_name }}]
command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -i {{ vlan_name }} {# We treat this VLAN as a downstream interface (-id), as we only want to listen for requests #}
{%- for (name, prefix) in INTERFACE -%} command=/usr/sbin/dhcrelay -d -m discard -a %%h:%%p %%P --name-alias-map-file /tmp/port-name-alias-map.txt -id {{ vlan_name }}
{%- if prefix | ipv4 %} -i {{ name }}{% endif -%} {#- We treat all other interfaces as upstream interfaces (-iu), as we only want to listen for replies #}
{%- endfor -%} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{%- for (name, prefix) in PORTCHANNEL_INTERFACE -%} {% if prefix | ipv4 and name != vlan_name %} -iu {{ name }}{% endif -%}
{%- if prefix | ipv4 %} -i {{ name }}{% endif -%} {% endfor %}
{%- endfor -%} {% for (name, prefix) in INTERFACE|pfx_filter %}
{%- for dhcp_server in VLAN[vlan_name]['dhcp_servers'] %} {{ dhcp_server }}{% endfor %} {% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
{% endfor %}
{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} -iu {{ name }}{% endif -%}
{% endfor %}
{% for dhcp_server in VLAN[vlan_name]['dhcp_servers'] %} {{ dhcp_server }}{% endfor %}
priority=3 priority=3
autostart=false autostart=false

View File

@ -29,12 +29,12 @@ function wait_until_iface_ready
# Wait for all interfaces to be up and ready # Wait for all interfaces to be up and ready
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
wait_until_iface_ready ${PORT_TABLE_PREFIX} {{ name }} wait_until_iface_ready ${PORT_TABLE_PREFIX} {{ name }}
{% endfor %} {% endfor %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }} wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
{% endfor %} {% endfor %}
{% for (name, prefix) in PORTCHANNEL_INTERFACE %} {% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
wait_until_iface_ready ${LAG_TABLE_PREFIX} {{ name }} wait_until_iface_ready ${LAG_TABLE_PREFIX} {{ name }}
{% endfor %} {% endfor %}

View File

@ -29,13 +29,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
no bgp default ipv4-unicast no bgp default ipv4-unicast
bgp graceful-restart restart-time 240 bgp graceful-restart restart-time 240
bgp graceful-restart bgp graceful-restart
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }} bgp router-id {{ prefix | ip }}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{# advertise loopback #} {# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32 network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %} {% elif prefix | ipv6 and name == 'Loopback0' %}
@ -47,7 +47,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% endblock bgp_init %} {% endblock bgp_init %}
{% endif %} {% endif %}
{% block vlan_advertisement %} {% block vlan_advertisement %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
network {{ prefix }} network {{ prefix }}
{% elif prefix | ipv6 %} {% elif prefix | ipv6 %}
@ -108,7 +108,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% if bgp_peer['src_address'] is defined %} {% if bgp_peer['src_address'] is defined %}
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }} neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
{% else %} {% else %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback1' %} {% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }} neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %} {% endif %}

View File

@ -16,7 +16,7 @@ log facility local4
! !
{% block interfaces %} {% block interfaces %}
! Enable link-detect (default disabled) ! Enable link-detect (default disabled)
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
interface {{ name }} interface {{ name }}
link-detect link-detect
! !
@ -30,7 +30,7 @@ link-detect
! !
{% block default_route %} {% block default_route %}
! set static default route to mgmt gateway as a backup to learned default ! set static default route to mgmt gateway as a backup to learned default
{% for (name, prefix) in MGMT_INTERFACE %} {% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200 ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% endif %} {% endif %}
@ -41,7 +41,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% set lo_ipv4_addrs = [] %} {% set lo_ipv4_addrs = [] %}
{% set lo_ipv6_addrs = [] %} {% set lo_ipv6_addrs = [] %}
{% if LOOPBACK_INTERFACE %} {% if LOOPBACK_INTERFACE %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback0' %} {% if name == 'Loopback0' %}
{% if prefix | ipv6 %} {% if prefix | ipv6 %}
{% if lo_ipv6_addrs.append(prefix) %} {% if lo_ipv6_addrs.append(prefix) %}
@ -87,13 +87,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %} {% if DEVICE_METADATA['localhost']['type'] == 'ToRRouter' %}
bgp graceful-restart bgp graceful-restart
{% endif %} {% endif %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }} bgp router-id {{ prefix | ip }}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{# advertise loopback #} {# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32 network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %} {% elif prefix | ipv6 and name == 'Loopback0' %}
@ -105,7 +105,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% endblock bgp_init %} {% endblock bgp_init %}
{% endif %} {% endif %}
{% block vlan_advertisement %} {% block vlan_advertisement %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
network {{ prefix }} network {{ prefix }}
{% elif prefix | ipv6 %} {% elif prefix | ipv6 %}
@ -173,7 +173,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
neighbor {{ bgp_peer['name'] }} passive neighbor {{ bgp_peer['name'] }} passive
neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }} neighbor {{ bgp_peer['name'] }} remote-as {{ deployment_id_asn_map[DEVICE_METADATA['localhost']['deployment_id']] }}
neighbor {{ bgp_peer['name'] }} ebgp-multihop 255 neighbor {{ bgp_peer['name'] }} ebgp-multihop 255
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback1' %} {% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }} neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %} {% endif %}

View File

@ -8,9 +8,11 @@ if [ -z "$CONFIG_TYPE" ] || [ "$CONFIG_TYPE" == "separated" ]; then
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/frr/bgpd.conf sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/bgpd.conf.j2 > /etc/frr/bgpd.conf
sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/frr/zebra.conf sonic-cfggen -d -t /usr/share/sonic/templates/zebra.conf.j2 > /etc/frr/zebra.conf
touch /etc/frr/vtysh.conf touch /etc/frr/vtysh.conf
rm -f /etc/frr/frr.conf
elif [ "$CONFIG_TYPE" == "unified" ]; then elif [ "$CONFIG_TYPE" == "unified" ]; then
sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/frr.conf.j2 >/etc/frr/frr.conf sonic-cfggen -d -y /etc/sonic/deployment_id_asn_map.yml -t /usr/share/sonic/templates/frr.conf.j2 >/etc/frr/frr.conf
echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf echo "service integrated-vtysh-config" > /etc/frr/vtysh.conf
rm -f /etc/frr/bgpd.conf /etc/frr/vtysh.conf
fi fi
sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate sonic-cfggen -d -t /usr/share/sonic/templates/isolate.j2 > /usr/sbin/bgp-isolate

View File

@ -14,7 +14,7 @@ enable password zebra
! !
{% block interfaces %} {% block interfaces %}
! Enable link-detect (default disabled) ! Enable link-detect (default disabled)
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
interface {{ name }} interface {{ name }}
link-detect link-detect
! !
@ -28,7 +28,7 @@ link-detect
! !
{% block default_route %} {% block default_route %}
! set static default route to mgmt gateway as a backup to learned default ! set static default route to mgmt gateway as a backup to learned default
{% for (name, prefix) in MGMT_INTERFACE %} {% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200 ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% endif %} {% endif %}
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% set lo_ipv4_addrs = [] %} {% set lo_ipv4_addrs = [] %}
{% set lo_ipv6_addrs = [] %} {% set lo_ipv6_addrs = [] %}
{% if LOOPBACK_INTERFACE %} {% if LOOPBACK_INTERFACE %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback0' %} {% if name == 'Loopback0' %}
{% if prefix | ipv6 %} {% if prefix | ipv6 %}
{% if lo_ipv6_addrs.append(prefix) %} {% if lo_ipv6_addrs.append(prefix) %}

View File

@ -14,7 +14,7 @@ enable password zebra
! !
{% block interfaces %} {% block interfaces %}
! Enable link-detect (default disabled) ! Enable link-detect (default disabled)
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
interface {{ name }} interface {{ name }}
link-detect link-detect
! !
@ -28,7 +28,7 @@ link-detect
! !
{% block default_route %} {% block default_route %}
! set static default route to mgmt gateway as a backup to learned default ! set static default route to mgmt gateway as a backup to learned default
{% for (name, prefix) in MGMT_INTERFACE %} {% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200 ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% endif %} {% endif %}
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% set lo_ipv4_addrs = [] %} {% set lo_ipv4_addrs = [] %}
{% set lo_ipv6_addrs = [] %} {% set lo_ipv6_addrs = [] %}
{% if LOOPBACK_INTERFACE %} {% if LOOPBACK_INTERFACE %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv6 %} {% if prefix | ipv6 %}
{% if lo_ipv6_addrs.append(prefix) %} {% if lo_ipv6_addrs.append(prefix) %}
{% endif %} {% endif %}

View File

@ -29,13 +29,13 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
no bgp default ipv4-unicast no bgp default ipv4-unicast
bgp graceful-restart restart-time 240 bgp graceful-restart restart-time 240
bgp graceful-restart bgp graceful-restart
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
bgp router-id {{ prefix | ip }} bgp router-id {{ prefix | ip }}
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{# advertise loopback #} {# advertise loopback #}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if prefix | ipv4 and name == 'Loopback0' %} {% if prefix | ipv4 and name == 'Loopback0' %}
network {{ prefix | ip }}/32 network {{ prefix | ip }}/32
{% elif prefix | ipv6 and name == 'Loopback0' %} {% elif prefix | ipv6 and name == 'Loopback0' %}
@ -47,7 +47,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% endblock bgp_init %} {% endblock bgp_init %}
{% endif %} {% endif %}
{% block vlan_advertisement %} {% block vlan_advertisement %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
network {{ prefix }} network {{ prefix }}
{% elif prefix | ipv6 %} {% elif prefix | ipv6 %}
@ -108,7 +108,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }}
{% if bgp_peer['src_address'] is defined %} {% if bgp_peer['src_address'] is defined %}
neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }} neighbor {{ bgp_peer['name'] }} update-source {{ bgp_peer['src_address'] | ip }}
{% else %} {% else %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback1' %} {% if name == 'Loopback1' %}
neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }} neighbor {{ bgp_peer['name'] }} update-source {{ prefix | ip }}
{% endif %} {% endif %}

View File

@ -14,7 +14,7 @@ enable password zebra
! !
{% block interfaces %} {% block interfaces %}
! Enable link-detect (default disabled) ! Enable link-detect (default disabled)
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
interface {{ name }} interface {{ name }}
link-detect link-detect
! !
@ -28,7 +28,7 @@ link-detect
! !
{% block default_route %} {% block default_route %}
! set static default route to mgmt gateway as a backup to learned default ! set static default route to mgmt gateway as a backup to learned default
{% for (name, prefix) in MGMT_INTERFACE %} {% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
{% if prefix | ipv4 %} {% if prefix | ipv4 %}
ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200 ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% endif %} {% endif %}
@ -39,7 +39,7 @@ ip route 0.0.0.0/0 {{ MGMT_INTERFACE[(name, prefix)]['gwaddr'] }} 200
{% set lo_ipv4_addrs = [] %} {% set lo_ipv4_addrs = [] %}
{% set lo_ipv6_addrs = [] %} {% set lo_ipv6_addrs = [] %}
{% if LOOPBACK_INTERFACE %} {% if LOOPBACK_INTERFACE %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{% if name == 'Loopback0' %} {% if name == 'Loopback0' %}
{% if prefix | ipv6 %} {% if prefix | ipv6 %}
{% if lo_ipv6_addrs.append(prefix) %} {% if lo_ipv6_addrs.append(prefix) %}

View File

@ -2,7 +2,7 @@
{% set ipv6_addresses = [] %} {% set ipv6_addresses = [] %}
{% set ipv4_loopback_addresses = [] %} {% set ipv4_loopback_addresses = [] %}
{% set ipv6_loopback_addresses = [] %} {% set ipv6_loopback_addresses = [] %}
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
{%- if prefix | ipv4 and name == 'Loopback0' %} {%- if prefix | ipv4 and name == 'Loopback0' %}
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %} {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
{%- set ipv4_loopback_addresses = ipv4_loopback_addresses.append(prefix) %} {%- set ipv4_loopback_addresses = ipv4_loopback_addresses.append(prefix) %}
@ -12,7 +12,7 @@
{%- set ipv6_loopback_addresses = ipv6_loopback_addresses.append(prefix) %} {%- set ipv6_loopback_addresses = ipv6_loopback_addresses.append(prefix) %}
{%- endif %} {%- endif %}
{% endfor %} {% endfor %}
{% for (name, prefix) in INTERFACE %} {% for (name, prefix) in INTERFACE|pfx_filter %}
{%- if prefix | ipv4 %} {%- if prefix | ipv4 %}
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %} {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
{%- endif %} {%- endif %}
@ -20,7 +20,7 @@
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %} {%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
{%- endif %} {%- endif %}
{% endfor %} {% endfor %}
{% for (name, prefix) in PORTCHANNEL_INTERFACE %} {% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %}
{%- if prefix | ipv4 %} {%- if prefix | ipv4 %}
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %} {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
{%- endif %} {%- endif %}
@ -28,7 +28,7 @@
{%- set ipv6_addresses = ipv6_addresses.append(prefix) %} {%- set ipv6_addresses = ipv6_addresses.append(prefix) %}
{%- endif %} {%- endif %}
{% endfor %} {% endfor %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{%- if prefix | ipv4 %} {%- if prefix | ipv4 %}
{%- set ipv4_addresses = ipv4_addresses.append(prefix) %} {%- set ipv4_addresses = ipv4_addresses.append(prefix) %}
{%- endif %} {%- endif %}

View File

@ -1,4 +1,4 @@
FROM debian:jessie FROM debian:stretch
MAINTAINER Pavel Shirshov MAINTAINER Pavel Shirshov
@ -38,7 +38,7 @@ RUN sed --in-place 's/httpredir.debian.org/debian-archive.trafficmanager.net/' /
cmake \ cmake \
libqt5core5a \ libqt5core5a \
libqt5network5 \ libqt5network5 \
libboost-atomic1.55.0 \ libboost-atomic1.62.0 \
less \ less \
git \ git \
iputils-ping \ iputils-ping \

View File

@ -10,7 +10,7 @@
{# If our configuration has VLAN interfaces... #} {# If our configuration has VLAN interfaces... #}
{% if VLAN_INTERFACE %} {% if VLAN_INTERFACE %}
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
{# If this VLAN has an IPv6 address... #} {# If this VLAN has an IPv6 address... #}
{% if prefix | ipv6 %} {% if prefix | ipv6 %}
interface {{ name }} interface {{ name }}

View File

@ -27,6 +27,6 @@ function wait_until_iface_ready
# Wait for all interfaces to be up and ready # Wait for all interfaces to be up and ready
{% for (name, prefix) in VLAN_INTERFACE %} {% for (name, prefix) in VLAN_INTERFACE|pfx_filter %}
wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }} wait_until_iface_ready ${VLAN_TABLE_PREFIX} {{ name }}
{% endfor %} {% endfor %}

View File

@ -5,6 +5,32 @@ function getMountPoint()
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
} }
function updateHostName()
{
HOSTS=/etc/hosts
HOSTS_TMP=/etc/hosts.tmp
EXEC="docker exec -i {{docker_container_name}} bash -c"
NEW_HOSTNAME="$1"
HOSTNAME=`$EXEC "hostname"`
if ! [[ $HOSTNAME =~ ^[a-zA-Z0-9.\-]*$ ]]; then
HOSTNAME=`hostname`
fi
# copy HOSTS to HOSTS_TMP
$EXEC "cp $HOSTS $HOSTS_TMP"
# remove entry with hostname
$EXEC "sed -i \"/$HOSTNAME$/d\" $HOSTS_TMP"
# add entry with new hostname
$EXEC "echo -e \"127.0.0.1\t$NEW_HOSTNAME\" >> $HOSTS_TMP"
echo "Set hostname in {{docker_container_name}} container"
$EXEC "hostname '$NEW_HOSTNAME'"
$EXEC "cat $HOSTS_TMP > $HOSTS"
$EXEC "rm -f $HOSTS_TMP"
}
function getBootType() function getBootType()
{ {
local BOOT_TYPE local BOOT_TYPE
@ -105,6 +131,10 @@ start() {
# Obtain our HWSKU as we will mount directories with these names in each docker # Obtain our HWSKU as we will mount directories with these names in each docker
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]'` HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]'`
{%- endif %} {%- endif %}
HOSTNAME=`sonic-cfggen -m -v 'DEVICE_METADATA["localhost"]["hostname"]'`
if [ -z "$HOSTNAME" ] || ! [[ $HOSTNAME =~ ^[a-zA-Z0-9.\-]*$ ]]; then
HOSTNAME=`hostname`
fi
DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null` DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null`
if [ "$?" -eq "0" ]; then if [ "$?" -eq "0" ]; then
@ -121,6 +151,7 @@ start() {
{%- endif %} {%- endif %}
preStartAction preStartAction
docker start {{docker_container_name}} docker start {{docker_container_name}}
updateHostName "$HOSTNAME"
postStartAction postStartAction
exit $? exit $?
fi fi
@ -134,6 +165,9 @@ start() {
echo "Creating new {{docker_container_name}} container" echo "Creating new {{docker_container_name}} container"
{%- else %} {%- else %}
echo "Creating new {{docker_container_name}} container with HWSKU $HWSKU" echo "Creating new {{docker_container_name}} container with HWSKU $HWSKU"
{%- endif %}
{%- if sonic_asic_platform == "mellanox" %}
# TODO: Mellanox will remove the --tmpfs exception after SDK socket path changed in new SDK version
{%- endif %} {%- endif %}
docker create {{docker_image_run_opt}} \ docker create {{docker_image_run_opt}} \
{%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %} {%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %}
@ -146,6 +180,10 @@ start() {
-e PRM_SNIFFER \ -e PRM_SNIFFER \
-e PRM_SNIFFER_FILE_PATH \ -e PRM_SNIFFER_FILE_PATH \
-v /var/log/mellanox/sniffer:/var/log/mellanox/sniffer:rw \ -v /var/log/mellanox/sniffer:/var/log/mellanox/sniffer:rw \
-v mlnx_sdk_socket:/tmp \
-v /dev/shm:/dev/shm:rw \
{%- else %}
--tmpfs /tmp \
{%- endif %} {%- endif %}
{%- if docker_container_name == "pmon" %} {%- if docker_container_name == "pmon" %}
-v /var/run/hw-management:/var/run/hw-management:rw \ -v /var/run/hw-management:/var/run/hw-management:rw \
@ -156,8 +194,11 @@ start() {
{%- if docker_container_name != "database" %} {%- if docker_container_name != "database" %}
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \ -v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
{%- endif %} {%- endif %}
{%- if sonic_asic_platform != "mellanox" %}
--tmpfs /tmp \ --tmpfs /tmp \
{%- endif %}
--tmpfs /var/tmp \ --tmpfs /var/tmp \
--hostname "$HOSTNAME" \
--name={{docker_container_name}} {{docker_image_name}}:latest || { --name={{docker_container_name}} {{docker_image_name}}:latest || {
echo "Failed to docker run" >&1 echo "Failed to docker run" >&1
exit 4 exit 4
@ -177,11 +218,13 @@ stop() {
} }
case "$1" in case "$1" in
start|wait|stop) start|wait|stop|updateHostName)
$1 cmd=$1
shift
$cmd $@
;; ;;
*) *)
echo "Usage: $0 {start|wait|stop}" echo "Usage: $0 {start|wait|stop|updateHostName new_hostname}"
exit 1 exit 1
;; ;;
esac esac

View File

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import re
import sys import sys
import subprocess import subprocess
import syslog import syslog
@ -22,6 +23,15 @@ TACPLUS_SERVER_TIMEOUT_DEFAULT = "5"
TACPLUS_SERVER_AUTH_TYPE_DEFAULT = "pap" TACPLUS_SERVER_AUTH_TYPE_DEFAULT = "pap"
def is_valid_hostname(name):
if hostname[-1] == ".":
hostname = hostname[:-1] # strip exactly one dot from the right, if present
if len(hostname) > 253:
return False
allowed = re.compile("(?!-)[A-Z\d-]{1,63}(?<!-)$", re.IGNORECASE)
return all(allowed.match(x) for x in hostname.split("."))
def is_true(val): def is_true(val):
if val == 'True' or val == 'true': if val == 'True' or val == 'true':
return True return True
@ -148,6 +158,7 @@ class HostConfigDaemon:
tacacs_server = self.config_db.get_table('TACPLUS_SERVER') tacacs_server = self.config_db.get_table('TACPLUS_SERVER')
self.aaacfg = AaaCfg() self.aaacfg = AaaCfg()
self.aaacfg.load(aaa, tacacs_global, tacacs_server) self.aaacfg.load(aaa, tacacs_global, tacacs_server)
self.hostname_cache=""
def aaa_handler(self, key, data): def aaa_handler(self, key, data):
self.aaacfg.aaa_update(key, data) self.aaacfg.aaa_update(key, data)
@ -166,10 +177,49 @@ class HostConfigDaemon:
log_data['passkey'] = obfuscate(log_data['passkey']) log_data['passkey'] = obfuscate(log_data['passkey'])
syslog.syslog(syslog.LOG_INFO, 'value of {} changed to {}'.format(key, log_data)) syslog.syslog(syslog.LOG_INFO, 'value of {} changed to {}'.format(key, log_data))
def hostname_handler(self, key, data):
if key != "localhost":
return
hostname = data.get("hostname")
if not hostname:
syslog.syslog(syslog.LOG_WARNING, "hostname key is missing")
return
if not is_valid_hostname(hostname):
return
if hostname == self.hostname_cache:
return
syslog.syslog(syslog.LOG_INFO, "Get all running containers")
cmd = 'docker ps --format "{{.Names}}"'
try:
containers = subprocess.check_output(cmd, shell=True).split("\n")[:-1]
except subprocess.CalledProcessError as err:
syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}"
.format(err.cmd, err.returncode, err.output))
for name in containers:
script = '/usr/bin/{}.sh'.format(name)
exists = os.path.isfile(script)
if not exists:
syslog.syslog(syslog.LOG_ERR, "Can't find control script for {}".format(name))
continue
cmd = "{} updateHostName {}".format(script, hostname)
try:
subprocess.check_call(cmd, shell=True)
except subprocess.CalledProcessError as err:
syslog.syslog(syslog.LOG_ERR, "{} - failed: return code - {}, output:\n{}"
.format(err.cmd, err.returncode, err.output))
self.hostname_cache = hostname
def start(self): def start(self):
self.config_db.subscribe('AAA', lambda table, key, data: self.aaa_handler(key, data)) self.config_db.subscribe('AAA', lambda table, key, data: self.aaa_handler(key, data))
self.config_db.subscribe('TACPLUS_SERVER', lambda table, key, data: self.tacacs_server_handler(key, data)) self.config_db.subscribe('TACPLUS_SERVER', lambda table, key, data: self.tacacs_server_handler(key, data))
self.config_db.subscribe('TACPLUS', lambda table, key, data: self.tacacs_global_handler(key, data)) self.config_db.subscribe('TACPLUS', lambda table, key, data: self.tacacs_global_handler(key, data))
self.config_db.subscribe('DEVICE_METADATA', lambda table, key, data: self.hostname_handler(key, data))
self.config_db.listen() self.config_db.listen()

View File

@ -10,7 +10,7 @@
auto lo auto lo
iface lo inet loopback iface lo inet loopback
# Use command 'ip addr list dev lo' to check all addresses # Use command 'ip addr list dev lo' to check all addresses
{% for (name, prefix) in LOOPBACK_INTERFACE %} {% for (name, prefix) in LOOPBACK_INTERFACE|pfx_filter %}
iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static
address {{ prefix | ip }} address {{ prefix | ip }}
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }} netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}
@ -22,7 +22,7 @@ iface lo {{ 'inet' if prefix | ipv4 else 'inet6' }} static
# The management network interface # The management network interface
auto eth0 auto eth0
{% if MGMT_INTERFACE %} {% if MGMT_INTERFACE %}
{% for (name, prefix) in MGMT_INTERFACE %} {% for (name, prefix) in MGMT_INTERFACE|pfx_filter %}
iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static iface eth0 {{ 'inet' if prefix | ipv4 else 'inet6' }} static
address {{ prefix | ip }} address {{ prefix | ip }}
netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }} netmask {{ prefix | netmask if prefix | ipv4 else prefix | prefixlen }}

View File

@ -30,7 +30,7 @@ server {{ ntp_server }} iburst
#only listen on localhost and eth0 ips (default is to listen on all ip addresses) #only listen on localhost and eth0 ips (default is to listen on all ip addresses)
interface ignore wildcard interface ignore wildcard
{% if MGMT_INTERFACE %} {% if MGMT_INTERFACE %}
{% for (mgmt_intf, mgmt_prefix) in MGMT_INTERFACE %} {% for (mgmt_intf, mgmt_prefix) in MGMT_INTERFACE|pfx_filter %}
interface listen {{ mgmt_prefix | ip }} interface listen {{ mgmt_prefix | ip }}
{% endfor %} {% endfor %}
{% else %} {% else %}

View File

@ -9,9 +9,9 @@
while /bin/true; do while /bin/true; do
# find L3 interfaces which are UP, send ipv6 multicast pings # find L3 interfaces which are UP, send ipv6 multicast pings
echo "{% for (name, prefix) in INTERFACE %} {{name}} {% endfor %}" > /tmp/intf_tmp.j2 echo "{% for (name, prefix) in INTERFACE|pfx_filter %} {{name}} {% endfor %}" > /tmp/intf_tmp.j2
INTERFACE=`sonic-cfggen -d -t /tmp/intf_tmp.j2` INTERFACE=`sonic-cfggen -d -t /tmp/intf_tmp.j2`
echo "{% for (name, prefix) in PORTCHANNEL_INTERFACE %} {{name}} {% endfor %}" > /tmp/pc_intf_tmp.j2 echo "{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %} {{name}} {% endfor %}" > /tmp/pc_intf_tmp.j2
PC_INTERFACE=`sonic-cfggen -d -t /tmp/pc_intf_tmp.j2` PC_INTERFACE=`sonic-cfggen -d -t /tmp/pc_intf_tmp.j2`
ALL_INTERFACE="$INTERFACE $PC_INTERFACE" ALL_INTERFACE="$INTERFACE $PC_INTERFACE"

@ -1 +1 @@
Subproject commit 0ed1df5a7d6c88319ce41b10ce604c2727afab69 Subproject commit 7b7c79ee463b43e570c48915215cdbf6ec250225

View File

@ -4,7 +4,7 @@ DOCKER_SAISERVER_BRCM = docker-saiserver-brcm.gz
$(DOCKER_SAISERVER_BRCM)_PATH = $(PLATFORM_PATH)/docker-saiserver-brcm $(DOCKER_SAISERVER_BRCM)_PATH = $(PLATFORM_PATH)/docker-saiserver-brcm
$(DOCKER_SAISERVER_BRCM)_DEPENDS += $(SAISERVER) $(DOCKER_SAISERVER_BRCM)_DEPENDS += $(SAISERVER)
$(DOCKER_SAISERVER_BRCM)_FILES += $(DSSERVE) $(BCMCMD) $(DOCKER_SAISERVER_BRCM)_FILES += $(DSSERVE) $(BCMCMD)
$(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE) $(DOCKER_SAISERVER_BRCM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_STRETCH)
SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM) SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_BRCM)
$(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver $(DOCKER_SAISERVER_BRCM)_CONTAINER_NAME = saiserver

View File

@ -1,4 +1,4 @@
FROM docker-config-engine FROM docker-config-engine-stretch
ARG docker_container_name ARG docker_container_name
RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf

View File

@ -25,6 +25,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
$(ACCTON_AS4630_54PE_PLATFORM_MODULE) \ $(ACCTON_AS4630_54PE_PLATFORM_MODULE) \
$(ACCTON_MINIPACK_PLATFORM_MODULE) \ $(ACCTON_MINIPACK_PLATFORM_MODULE) \
$(ACCTON_AS5812_54X_PLATFORM_MODULE) \ $(ACCTON_AS5812_54X_PLATFORM_MODULE) \
$(ACCTON_AS5835_54X_PLATFORM_MODULE) \
$(INVENTEC_D7032Q28B_PLATFORM_MODULE) \ $(INVENTEC_D7032Q28B_PLATFORM_MODULE) \
$(INVENTEC_D7054Q28B_PLATFORM_MODULE) \ $(INVENTEC_D7054Q28B_PLATFORM_MODULE) \
$(INVENTEC_D7264Q28B_PLATFORM_MODULE) \ $(INVENTEC_D7264Q28B_PLATFORM_MODULE) \
@ -37,6 +38,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \
$(QUANTA_IX1B_32X_PLATFORM_MODULE) \ $(QUANTA_IX1B_32X_PLATFORM_MODULE) \
$(MITAC_LY1200_32X_PLATFORM_MODULE) \ $(MITAC_LY1200_32X_PLATFORM_MODULE) \
$(ALPHANETWORKS_SNH60A0_320FV2_PLATFORM_MODULE) \ $(ALPHANETWORKS_SNH60A0_320FV2_PLATFORM_MODULE) \
$(ALPHANETWORKS_SNH60B0_640F_PLATFORM_MODULE) $(ALPHANETWORKS_SNH60B0_640F_PLATFORM_MODULE) \
$(BRCM_XLR_GTS_PLATFORM_MODULE)
$(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES)
SONIC_INSTALLERS += $(SONIC_ONE_IMAGE) SONIC_INSTALLERS += $(SONIC_ONE_IMAGE)

View File

@ -12,6 +12,7 @@ ACCTON_AS7726_32X_PLATFORM_MODULE_VERSION = 1.1
ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION = 1.1 ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION = 1.1
ACCTON_MINIPACK_PLATFORM_MODULE_VERSION = 1.1 ACCTON_MINIPACK_PLATFORM_MODULE_VERSION = 1.1
ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION = 1.1 ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION = 1.1
ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION = 1.1
export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION export ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION
export ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION export ACCTON_AS5712_54X_PLATFORM_MODULE_VERSION
@ -25,6 +26,7 @@ export ACCTON_AS7726_32X_PLATFORM_MODULE_VERSION
export ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION export ACCTON_AS4630_54PE_PLATFORM_MODULE_VERSION
export ACCTON_MINIPACK_PLATFORM_MODULE_VERSION export ACCTON_MINIPACK_PLATFORM_MODULE_VERSION
export ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION export ACCTON_AS5812_54X_PLATFORM_MODULE_VERSION
export ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION
ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb ACCTON_AS7712_32X_PLATFORM_MODULE = sonic-platform-accton-as7712-32x_$(ACCTON_AS7712_32X_PLATFORM_MODULE_VERSION)_amd64.deb
$(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton $(ACCTON_AS7712_32X_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-accton
@ -77,4 +79,8 @@ ACCTON_AS5812_54X_PLATFORM_MODULE = sonic-platform-accton-as5812-54x_$(ACCTON_AS
$(ACCTON_AS5812_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5812_54x-r0 $(ACCTON_AS5812_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5812_54x-r0
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5812_54X_PLATFORM_MODULE))) $(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5812_54X_PLATFORM_MODULE)))
ACCTON_AS5835_54X_PLATFORM_MODULE = sonic-platform-accton-as5835-54x_$(ACCTON_AS5835_54X_PLATFORM_MODULE_VERSION)_amd64.deb
$(ACCTON_AS5835_54X_PLATFORM_MODULE)_PLATFORM = x86_64-accton_as5835_54x-r0
$(eval $(call add_extra_package,$(ACCTON_AS7712_32X_PLATFORM_MODULE),$(ACCTON_AS5835_54X_PLATFORM_MODULE)))
SONIC_STRETCH_DEBS += $(ACCTON_AS7712_32X_PLATFORM_MODULE) SONIC_STRETCH_DEBS += $(ACCTON_AS7712_32X_PLATFORM_MODULE)

View File

@ -0,0 +1,15 @@
# Broadcom XLR/GTS Platform modules
BRCM_XLR_GTS_PLATFORM_MODULE_VERSION = 1.0
export BRCM_XLR_GTS_PLATFORM_MODULE_VERSION
BRCM_XLR_GTS_PLATFORM_MODULE = sonic-platform-brcm-xlr-gts_$(BRCM_XLR_GTS_PLATFORM_MODULE_VERSION)_amd64.deb
$(BRCM_XLR_GTS_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-brcm-xlr-gts
$(BRCM_XLR_GTS_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON)
$(BRCM_XLR_GTS_PLATFORM_MODULE)_PLATFORM = x86_64-bcm_xlr-r0
SONIC_MAKE_DEBS += $(BRCM_XLR_GTS_PLATFORM_MODULE)
export BRCM_XLR_GTS_PLATFORM_MODULE
SONIC_STRETCH_DEBS += $(BRCM_XLR_GTS_PLATFORM_MODULE)

View File

@ -11,6 +11,7 @@ include $(PLATFORM_PATH)/platform-modules-cel.mk
include $(PLATFORM_PATH)/platform-modules-delta.mk include $(PLATFORM_PATH)/platform-modules-delta.mk
include $(PLATFORM_PATH)/platform-modules-quanta.mk include $(PLATFORM_PATH)/platform-modules-quanta.mk
#include $(PLATFORM_PATH)/platform-modules-mitac.mk #include $(PLATFORM_PATH)/platform-modules-mitac.mk
include $(PLATFORM_PATH)/platform-modules-brcm-xlr-gts.mk
include $(PLATFORM_PATH)/docker-syncd-brcm.mk include $(PLATFORM_PATH)/docker-syncd-brcm.mk
include $(PLATFORM_PATH)/docker-syncd-brcm-rpc.mk include $(PLATFORM_PATH)/docker-syncd-brcm-rpc.mk
include $(PLATFORM_PATH)/docker-saiserver-brcm.mk include $(PLATFORM_PATH)/docker-saiserver-brcm.mk

View File

@ -252,7 +252,7 @@ def driver_inserted():
kos = [ kos = [
'depmod -ae', 'depmod -ae',
'modprobe i2c_dev', 'modprobe i2c_dev',
'modprobe i2c_mux_pca954x', 'modprobe i2c_mux_pca954x force_deselect_on_exit=1',
'modprobe optoe', 'modprobe optoe',
'modprobe i2c-mux-accton_as5712_54x_cpld', 'modprobe i2c-mux-accton_as5712_54x_cpld',
'modprobe cpr_4011_4mxx', 'modprobe cpr_4011_4mxx',
@ -273,7 +273,15 @@ def driver_install():
def driver_uninstall(): def driver_uninstall():
global FORCE global FORCE
for i in range(0,len(kos)): for i in range(0,len(kos)):
rm = kos[-(i+1)].replace("modprobe", "modprobe -rq") #remove parameter if any
rm = kos[-(i+1)]
lst = rm.split(" ")
if len(lst) > 2:
del(lst[2:])
rm = " ".join(lst)
#Change to removing commands
rm = rm.replace("modprobe", "modprobe -rq")
rm = rm.replace("insmod", "rmmod") rm = rm.replace("insmod", "rmmod")
status, output = log_os_system(rm, 1) status, output = log_os_system(rm, 1)
if status: if status:

View File

@ -252,7 +252,7 @@ def driver_inserted():
kos = [ kos = [
'depmod -ae', 'depmod -ae',
'modprobe i2c_dev', 'modprobe i2c_dev',
'modprobe i2c_mux_pca954x', 'modprobe i2c_mux_pca954x force_deselect_on_exit=1',
'modprobe optoe', 'modprobe optoe',
'modprobe i2c-mux-accton_as5812_54x_cpld', 'modprobe i2c-mux-accton_as5812_54x_cpld',
'modprobe cpr_4011_4mxx', 'modprobe cpr_4011_4mxx',
@ -273,7 +273,15 @@ def driver_install():
def driver_uninstall(): def driver_uninstall():
global FORCE global FORCE
for i in range(0,len(kos)): for i in range(0,len(kos)):
rm = kos[-(i+1)].replace("modprobe", "modprobe -rq") #remove parameter if any
rm = kos[-(i+1)]
lst = rm.split(" ")
if len(lst) > 2:
del(lst[2:])
rm = " ".join(lst)
#Change to removing commands
rm = rm.replace("modprobe", "modprobe -rq")
rm = rm.replace("insmod", "rmmod") rm = rm.replace("insmod", "rmmod")
status, output = log_os_system(rm, 1) status, output = log_os_system(rm, 1)
if status: if status:

View File

@ -0,0 +1,237 @@
#!/usr/bin/env python
#
# Copyright (C) 2017 Accton Technology Corporation
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
# ------------------------------------------------------------------
# HISTORY:
# mm/dd/yyyy (A.D.)
# 5/27/2019: Brandon_Chuang create
# ------------------------------------------------------------------
try:
import time
import logging
from collections import namedtuple
except ImportError as e:
raise ImportError('%s - required module not found' % str(e))
class FanUtil(object):
"""Platform-specific FanUtil class"""
FAN_NUM_ON_MAIN_BROAD = 5
FAN_NUM_1_IDX = 1
FAN_NUM_2_IDX = 2
FAN_NUM_3_IDX = 3
FAN_NUM_4_IDX = 4
FAN_NUM_5_IDX = 5
FAN_NODE_NUM_OF_MAP = 2
FAN_NODE_FAULT_IDX_OF_MAP = 1
FAN_NODE_DIR_IDX_OF_MAP = 2
BASE_VAL_PATH = '/sys/bus/i2c/devices/3-0063/{0}'
FAN_DUTY_PATH = '/sys/bus/i2c/devices/3-0063/fan_duty_cycle_percentage'
#logfile = ''
#loglevel = logging.INFO
""" Dictionary where
key1 = fan id index (integer) starting from 1
key2 = fan node index (interger) starting from 1
value = path to fan device file (string) """
_fan_to_device_path_mapping = {}
#fan1_direction
#fan1_fault
#fan1_present
#(FAN_NUM_2_IDX, FAN_NODE_DUTY_IDX_OF_MAP): 'fan2_duty_cycle_percentage',
_fan_to_device_node_mapping = {
(FAN_NUM_1_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan1_fault',
(FAN_NUM_1_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan1_direction',
(FAN_NUM_2_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan2_fault',
(FAN_NUM_2_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan2_direction',
(FAN_NUM_3_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan3_fault',
(FAN_NUM_3_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan3_direction',
(FAN_NUM_4_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan4_fault',
(FAN_NUM_4_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan4_direction',
(FAN_NUM_5_IDX, FAN_NODE_FAULT_IDX_OF_MAP): 'fan5_fault',
(FAN_NUM_5_IDX, FAN_NODE_DIR_IDX_OF_MAP): 'fan5_direction',
}
def _get_fan_to_device_node(self, fan_num, node_num):
return self._fan_to_device_node_mapping[(fan_num, node_num)]
def _get_fan_node_val(self, fan_num, node_num):
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
logging.debug('GET. Parameter error. fan_num:%d', fan_num)
return None
if node_num < self.FAN_NODE_FAULT_IDX_OF_MAP or node_num > self.FAN_NODE_NUM_OF_MAP:
logging.debug('GET. Parameter error. node_num:%d', node_num)
return None
device_path = self.get_fan_to_device_path(fan_num, node_num)
try:
val_file = open(device_path, 'r')
except IOError as e:
logging.error('GET. unable to open file: %s', str(e))
return None
content = val_file.readline().rstrip()
if content == '':
logging.debug('GET. content is NULL. device_path:%s', device_path)
return None
try:
val_file.close()
except:
logging.debug('GET. unable to close file. device_path:%s', device_path)
return None
return int(content)
def _set_fan_node_val(self, fan_num, node_num, val):
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
logging.debug('GET. Parameter error. fan_num:%d', fan_num)
return None
if node_num < self.FAN_NODE_FAULT_IDX_OF_MAP or node_num > self.FAN_NODE_NUM_OF_MAP:
logging.debug('GET. Parameter error. node_num:%d', node_num)
return None
content = str(val)
if content == '':
logging.debug('GET. content is NULL. device_path:%s', device_path)
return None
device_path = self.get_fan_to_device_path(fan_num, node_num)
try:
val_file = open(device_path, 'w')
except IOError as e:
logging.error('GET. unable to open file: %s', str(e))
return None
val_file.write(content)
try:
val_file.close()
except:
logging.debug('GET. unable to close file. device_path:%s', device_path)
return None
return True
def __init__(self):
fan_path = self.BASE_VAL_PATH
for fan_num in range(self.FAN_NUM_1_IDX, self.FAN_NUM_ON_MAIN_BROAD+1):
for node_num in range(self.FAN_NODE_FAULT_IDX_OF_MAP, self.FAN_NODE_NUM_OF_MAP+1):
self._fan_to_device_path_mapping[(fan_num, node_num)] = fan_path.format(
self._fan_to_device_node_mapping[(fan_num, node_num)])
def get_num_fans(self):
return self.FAN_NUM_ON_MAIN_BROAD
def get_idx_fan_start(self):
return self.FAN_NUM_1_IDX
def get_num_nodes(self):
return self.FAN_NODE_NUM_OF_MAP
def get_idx_node_start(self):
return self.FAN_NODE_FAULT_IDX_OF_MAP
def get_size_node_map(self):
return len(self._fan_to_device_node_mapping)
def get_size_path_map(self):
return len(self._fan_to_device_path_mapping)
def get_fan_to_device_path(self, fan_num, node_num):
return self._fan_to_device_path_mapping[(fan_num, node_num)]
def get_fan_fault(self, fan_num):
return self._get_fan_node_val(fan_num, self.FAN_NODE_FAULT_IDX_OF_MAP)
#def get_fan_speed(self, fan_num):
# return self._get_fan_node_val(fan_num, self.FAN_NODE_SPEED_IDX_OF_MAP)
def get_fan_dir(self, fan_num):
return self._get_fan_node_val(fan_num, self.FAN_NODE_DIR_IDX_OF_MAP)
def get_fan_duty_cycle(self):
#duty_path = self.FAN_DUTY_PATH
try:
val_file = open(self.FAN_DUTY_PATH)
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
content = val_file.readline().rstrip()
val_file.close()
return int(content)
def set_fan_duty_cycle(self, val):
try:
fan_file = open(self.FAN_DUTY_PATH, 'r+')
except IOError as e:
print "Error: unable to open file: %s" % str(e)
return False
fan_file.write(str(val))
fan_file.close()
return True
#def get_fanr_fault(self, fan_num):
# return self._get_fan_node_val(fan_num, self.FANR_NODE_FAULT_IDX_OF_MAP)
def get_fanr_speed(self, fan_num):
return self._get_fan_node_val(fan_num, self.FANR_NODE_SPEED_IDX_OF_MAP)
def get_fan_status(self, fan_num):
if fan_num < self.FAN_NUM_1_IDX or fan_num > self.FAN_NUM_ON_MAIN_BROAD:
logging.debug('GET. Parameter error. fan_num, %d', fan_num)
return None
if self.get_fan_fault(fan_num) is not None and self.get_fan_fault(fan_num) > 0:
logging.debug('GET. FAN fault. fan_num, %d', fan_num)
return False
#if self.get_fanr_fault(fan_num) is not None and self.get_fanr_fault(fan_num) > 0:
# logging.debug('GET. FANR fault. fan_num, %d', fan_num)
# return False
return True
#def main():
# fan = FanUtil()
#
# print 'get_size_node_map : %d' % fan.get_size_node_map()
# print 'get_size_path_map : %d' % fan.get_size_path_map()
# for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1):
# for y in range(fan.get_idx_node_start(), fan.get_num_nodes()+1):
# print fan.get_fan_to_device_path(x, y)
#
#if __name__ == '__main__':
# main()

View File

@ -0,0 +1,129 @@
#!/usr/bin/env python
#
# Copyright (C) 2017 Accton Technology Corporation
#
# 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 3 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, see <http://www.gnu.org/licenses/>.
# ------------------------------------------------------------------
# HISTORY:
# mm/dd/yyyy (A.D.)
# 5/27/2019: Brandon_Chuang create
# ------------------------------------------------------------------
try:
import os
import time
import logging
import glob
import commands
from collections import namedtuple
except ImportError as e:
raise ImportError('%s - required module not found' % str(e))
class ThermalUtil(object):
"""Platform-specific ThermalUtil class"""
THERMAL_NUM_MAX = 4
THERMAL_NUM_1_IDX = 1 # 1_ON_CPU_BROAD. LM75
THERMAL_NUM_2_IDX = 2 # 2_ON_MAIN_BROAD. LM75
THERMAL_NUM_3_IDX = 3 # 3_ON_MAIN_BROAD. LM75
THERMAL_NUM_4_IDX = 4 # 4_ON_MAIN_BROAD. LM75
""" Dictionary where
key1 = thermal id index (integer) starting from 1
value = path to fan device file (string) """
#_thermal_to_device_path_mapping = {}
_thermal_to_device_node_mapping = {
THERMAL_NUM_1_IDX: ['18', '4b'],
THERMAL_NUM_2_IDX: ['19', '4c'],
THERMAL_NUM_3_IDX: ['20', '49'],
THERMAL_NUM_4_IDX: ['21', '4a'],
}
thermal_sysfspath ={
THERMAL_NUM_1_IDX: ["/sys/bus/i2c/devices/18-004b/hwmon/hwmon3/temp1_input"],
THERMAL_NUM_2_IDX: ["/sys/bus/i2c/devices/19-004c/hwmon/hwmon4/temp1_input"],
THERMAL_NUM_3_IDX: ["/sys/bus/i2c/devices/20-0049/hwmon/hwmon5/temp1_input"],
THERMAL_NUM_4_IDX: ["/sys/bus/i2c/devices/21-004a/hwmon/hwmon6/temp1_input"],
}
#def __init__(self):
def _get_thermal_val(self, thermal_num):
if thermal_num < self.THERMAL_NUM_1_IDX or thermal_num > self.THERMAL_NUM_MAX:
logging.debug('GET. Parameter error. thermal_num, %d', thermal_num)
return None
device_path = self.get_thermal_to_device_path(thermal_num)
if(os.path.isfile(device_path)):
for filename in glob.glob(device_path):
try:
val_file = open(filename, 'r')
except IOError as e:
logging.error('GET. unable to open file: %s', str(e))
return None
content = val_file.readline().rstrip()
if content == '':
logging.debug('GET. content is NULL. device_path:%s', device_path)
return None
try:
val_file.close()
except:
logging.debug('GET. unable to close file. device_path:%s', device_path)
return None
return int(content)
else:
print "No such device_path=%s"%device_path
return 0
def get_num_thermals(self):
return self.THERMAL_NUM_MAX
def get_idx_thermal_start(self):
return self.THERMAL_NUM_1_IDX
def get_size_node_map(self):
return len(self._thermal_to_device_node_mapping)
def get_size_path_map(self):
return len(self.thermal_sysfspath)
def get_thermal_to_device_path(self, thermal_num):
return self.thermal_sysfspath[thermal_num][0]
def get_thermal_1_val(self):
return self._get_thermal_val(self.THERMAL_NUM_1_IDX)
def get_thermal_2_val(self):
return self._get_thermal_val(self.THERMAL_NUM_2_IDX)
def get_thermal_3_val(self):
return self._get_thermal_val(self.THERMAL_NUM_3_IDX)
def get_thermal_temp(self):
return (self._get_thermal_val(self.THERMAL_NUM_1_IDX) + self._get_thermal_val(self.THERMAL_NUM_2_IDX) +self._get_thermal_val(self.THERMAL_NUM_3_IDX))
def main():
thermal = ThermalUtil()
print "termal1=%d" %thermal._get_thermal_val(1)
print "termal2=%d" %thermal._get_thermal_val(2)
print "termal3=%d" %thermal._get_thermal_val(3)
print "termal4=%d" %thermal._get_thermal_val(4)
#
# print 'get_size_node_map : %d' % thermal.get_size_node_map()
# print 'get_size_path_map : %d' % thermal.get_size_path_map()
# for x in range(thermal.get_idx_thermal_start(), thermal.get_num_thermals()+1):
# print thermal.get_thermal_to_device_path(x)
#
if __name__ == '__main__':
main()

View File

@ -0,0 +1,17 @@
ifneq ($(KERNELRELEASE),)
obj-m:= accton_as5835_54x_cpld.o accton_as5835_54x_psu.o \
accton_as5835_54x_fan.o accton_as5835_54x_leds.o \
ym2651y.o
else
ifeq (,$(KERNEL_SRC))
$(error KERNEL_SRC is not defined)
else
KERNELDIR:=$(KERNEL_SRC)
endif
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *.mod.o *.mod.o *.ko .*cmd .tmp_versions Module.markers Module.symvers modules.order
endif

View File

@ -0,0 +1,484 @@
/*
* A hwmon driver for the Accton as5835 54x fan
*
* Copyright (C) 2016 Accton Technology Corporation.
* Brandon Chuang <brandon_chuang@accton.com.tw>
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/jiffies.h>
#include <linux/i2c.h>
#include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/slab.h>
#include <linux/dmi.h>
#include <linux/platform_device.h>
#define DRVNAME "as5835_54x_fan"
#define MAX_FAN_SPEED_RPM 21500
static struct as5835_54x_fan_data *as5835_54x_fan_update_device(struct device *dev);
static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
const char *buf, size_t count);
static ssize_t show_version(struct device *dev, struct device_attribute *da,
char *buf);
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
extern int as5835_54x_cpld_write(unsigned short cpld_addr, u8 reg, u8 value);
/* fan related data, the index should match sysfs_fan_attributes
*/
static const u8 fan_reg[] = {
0x02, /* fan 1-5 present status */
0x03, /* fan 1-5 direction(0:F2B 1:B2F) */
0x04, /* front fan 1-5 fault status */
0x05, /* rear fan 1-5 fault status */
0x06, /* fan PWM(for all fan) */
0x07, /* front fan 1 speed(rpm) */
0x08, /* front fan 2 speed(rpm) */
0x09, /* front fan 3 speed(rpm) */
0x0A, /* front fan 4 speed(rpm) */
0x0B, /* front fan 5 speed(rpm) */
0x0C, /* rear fan 1 speed(rpm) */
0x0D, /* rear fan 2 speed(rpm) */
0x0E, /* rear fan 3 speed(rpm) */
0x0F, /* rear fan 4 speed(rpm) */
0x10, /* rear fan 5 speed(rpm) */
};
/* fan data */
struct as5835_54x_fan_data {
struct platform_device *pdev;
struct device *hwmon_dev;
struct mutex update_lock;
char valid; /* != 0 if registers are valid */
unsigned long last_updated; /* In jiffies */
u8 reg_val[ARRAY_SIZE(fan_reg)]; /* Register value */
};
enum fan_id {
FAN1_ID,
FAN2_ID,
FAN3_ID,
FAN4_ID,
FAN5_ID
};
enum sysfs_fan_attributes {
FAN_PRESENT_REG,
FAN_DIRECTION_REG,
FAN_FRONT_FAULT_REG,
FAN_REAR_FAULT_REG,
FAN_DUTY_CYCLE_PERCENTAGE, /* Only one CPLD register to control duty cycle for all fans */
FAN1_FRONT_SPEED_RPM,
FAN2_FRONT_SPEED_RPM,
FAN3_FRONT_SPEED_RPM,
FAN4_FRONT_SPEED_RPM,
FAN5_FRONT_SPEED_RPM,
FAN1_REAR_SPEED_RPM,
FAN2_REAR_SPEED_RPM,
FAN3_REAR_SPEED_RPM,
FAN4_REAR_SPEED_RPM,
FAN5_REAR_SPEED_RPM,
FAN1_DIRECTION,
FAN2_DIRECTION,
FAN3_DIRECTION,
FAN4_DIRECTION,
FAN5_DIRECTION,
FAN1_PRESENT,
FAN2_PRESENT,
FAN3_PRESENT,
FAN4_PRESENT,
FAN5_PRESENT,
FAN1_FAULT,
FAN2_FAULT,
FAN3_FAULT,
FAN4_FAULT,
FAN5_FAULT,
FAN_MAX_RPM,
CPLD_VERSION
};
/* Define attributes
*/
#define DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(index, index2) \
static SENSOR_DEVICE_ATTR(fan##index##_fault, S_IRUGO, fan_show_value, NULL, FAN##index##_FAULT);\
static SENSOR_DEVICE_ATTR(fan##index2##_fault, S_IRUGO, fan_show_value, NULL, FAN##index##_FAULT)
#define DECLARE_FAN_FAULT_ATTR(index, index2) &sensor_dev_attr_fan##index##_fault.dev_attr.attr, \
&sensor_dev_attr_fan##index2##_fault.dev_attr.attr
#define DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(index) \
static SENSOR_DEVICE_ATTR(fan##index##_direction, S_IRUGO, fan_show_value, NULL, FAN##index##_DIRECTION)
#define DECLARE_FAN_DIRECTION_ATTR(index) &sensor_dev_attr_fan##index##_direction.dev_attr.attr
#define DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR(index) \
static SENSOR_DEVICE_ATTR(fan##index##_duty_cycle_percentage, S_IWUSR | S_IRUGO, fan_show_value, set_duty_cycle, FAN##index##_DUTY_CYCLE_PERCENTAGE)
#define DECLARE_FAN_DUTY_CYCLE_ATTR(index) &sensor_dev_attr_fan##index##_duty_cycle_percentage.dev_attr.attr
#define DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(index) \
static SENSOR_DEVICE_ATTR(fan##index##_present, S_IRUGO, fan_show_value, NULL, FAN##index##_PRESENT)
#define DECLARE_FAN_PRESENT_ATTR(index) &sensor_dev_attr_fan##index##_present.dev_attr.attr
#define DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(index, index2) \
static SENSOR_DEVICE_ATTR(fan##index##_front_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_FRONT_SPEED_RPM);\
static SENSOR_DEVICE_ATTR(fan##index##_rear_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN##index##_REAR_SPEED_RPM);\
static SENSOR_DEVICE_ATTR(fan##index##_input, S_IRUGO, fan_show_value, NULL, FAN##index##_FRONT_SPEED_RPM);\
static SENSOR_DEVICE_ATTR(fan##index2##_input, S_IRUGO, fan_show_value, NULL, FAN##index##_REAR_SPEED_RPM)
#define DECLARE_FAN_SPEED_RPM_ATTR(index, index2) &sensor_dev_attr_fan##index##_front_speed_rpm.dev_attr.attr, \
&sensor_dev_attr_fan##index##_rear_speed_rpm.dev_attr.attr, \
&sensor_dev_attr_fan##index##_input.dev_attr.attr, \
&sensor_dev_attr_fan##index2##_input.dev_attr.attr
static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_version, NULL, CPLD_VERSION);
static SENSOR_DEVICE_ATTR(fan_max_speed_rpm, S_IRUGO, fan_show_value, NULL, FAN_MAX_RPM);
#define DECLARE_FAN_MAX_RPM_ATTR(index) &sensor_dev_attr_fan_max_speed_rpm.dev_attr.attr
/* 5 fan fault attributes in this platform */
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(1, 11);
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(2, 12);
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(3, 13);
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(4, 14);
DECLARE_FAN_FAULT_SENSOR_DEV_ATTR(5, 15);
/* 5 fan speed(rpm) attributes in this platform */
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(1, 11);
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(2, 12);
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(3, 13);
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(4, 14);
DECLARE_FAN_SPEED_RPM_SENSOR_DEV_ATTR(5, 15);
/* 5 fan present attributes in this platform */
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(1);
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(2);
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(3);
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(4);
DECLARE_FAN_PRESENT_SENSOR_DEV_ATTR(5);
/* 5 fan direction attribute in this platform */
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(1);
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(2);
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(3);
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(4);
DECLARE_FAN_DIRECTION_SENSOR_DEV_ATTR(5);
/* 1 fan duty cycle attribute in this platform */
DECLARE_FAN_DUTY_CYCLE_SENSOR_DEV_ATTR();
static struct attribute *as5835_54x_fan_attributes[] = {
&sensor_dev_attr_version.dev_attr.attr,
/* fan related attributes */
DECLARE_FAN_FAULT_ATTR(1, 11),
DECLARE_FAN_FAULT_ATTR(2, 12),
DECLARE_FAN_FAULT_ATTR(3, 13),
DECLARE_FAN_FAULT_ATTR(4, 14),
DECLARE_FAN_FAULT_ATTR(5, 15),
DECLARE_FAN_SPEED_RPM_ATTR(1, 11),
DECLARE_FAN_SPEED_RPM_ATTR(2, 12),
DECLARE_FAN_SPEED_RPM_ATTR(3, 13),
DECLARE_FAN_SPEED_RPM_ATTR(4, 14),
DECLARE_FAN_SPEED_RPM_ATTR(5, 15),
DECLARE_FAN_PRESENT_ATTR(1),
DECLARE_FAN_PRESENT_ATTR(2),
DECLARE_FAN_PRESENT_ATTR(3),
DECLARE_FAN_PRESENT_ATTR(4),
DECLARE_FAN_PRESENT_ATTR(5),
DECLARE_FAN_DIRECTION_ATTR(1),
DECLARE_FAN_DIRECTION_ATTR(2),
DECLARE_FAN_DIRECTION_ATTR(3),
DECLARE_FAN_DIRECTION_ATTR(4),
DECLARE_FAN_DIRECTION_ATTR(5),
DECLARE_FAN_DUTY_CYCLE_ATTR(),
DECLARE_FAN_MAX_RPM_ATTR(),
NULL
};
#define FAN_DUTY_CYCLE_REG_MASK 0x1F
#define FAN_MAX_DUTY_CYCLE 100
#define FAN_REG_VAL_TO_SPEED_RPM_STEP 150
static int as5835_54x_fan_read_value(struct i2c_client *client, u8 reg)
{
return i2c_smbus_read_byte_data(client, reg);
}
static int as5835_54x_fan_write_value(struct i2c_client *client, u8 reg, u8 value)
{
return i2c_smbus_write_byte_data(client, reg, value);
}
/* fan utility functions
*/
static u32 reg_val_to_duty_cycle(u8 reg_val)
{
return (reg_val & FAN_DUTY_CYCLE_REG_MASK) * 5;
}
static u8 duty_cycle_to_reg_val(u8 duty_cycle)
{
if (duty_cycle > FAN_MAX_DUTY_CYCLE) {
duty_cycle = FAN_MAX_DUTY_CYCLE;
}
return (duty_cycle / 5);
}
static u32 reg_val_to_speed_rpm(u8 reg_val)
{
return (u32)reg_val * FAN_REG_VAL_TO_SPEED_RPM_STEP;
}
static u8 reg_val_to_direction(u8 reg_val, enum fan_id id)
{
return !!(reg_val & BIT(id)); /* 0: Front to Back, 1: Back to Front*/
}
static u8 reg_val_to_is_present(u8 reg_val, enum fan_id id)
{
return !(reg_val & BIT(id));
}
static u8 is_fan_fault(struct as5835_54x_fan_data *data, enum fan_id id)
{
if ((data->reg_val[FAN_FRONT_FAULT_REG] & BIT(id)) ||
(data->reg_val[FAN_REAR_FAULT_REG] & BIT(id))) {
return 1;
}
return 0;
}
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
const char *buf, size_t count)
{
int error, value;
struct i2c_client *client = to_i2c_client(dev);
error = kstrtoint(buf, 10, &value);
if (error) {
return error;
}
if (value < 0 || value > FAN_MAX_DUTY_CYCLE) {
return -EINVAL;
}
as5835_54x_fan_write_value(client, fan_reg[FAN_DUTY_CYCLE_PERCENTAGE], duty_cycle_to_reg_val(value));
return count;
}
static ssize_t fan_show_value(struct device *dev, struct device_attribute *da,
char *buf)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct as5835_54x_fan_data *data = as5835_54x_fan_update_device(dev);
ssize_t ret = 0;
if (data->valid) {
switch (attr->index) {
case FAN_DUTY_CYCLE_PERCENTAGE:
{
u32 duty_cycle = reg_val_to_duty_cycle(data->reg_val[FAN_DUTY_CYCLE_PERCENTAGE]);
ret = sprintf(buf, "%u\n", duty_cycle);
break;
}
case FAN1_FRONT_SPEED_RPM:
case FAN2_FRONT_SPEED_RPM:
case FAN3_FRONT_SPEED_RPM:
case FAN4_FRONT_SPEED_RPM:
case FAN5_FRONT_SPEED_RPM:
case FAN1_REAR_SPEED_RPM:
case FAN2_REAR_SPEED_RPM:
case FAN3_REAR_SPEED_RPM:
case FAN4_REAR_SPEED_RPM:
case FAN5_REAR_SPEED_RPM:
ret = sprintf(buf, "%u\n", reg_val_to_speed_rpm(data->reg_val[attr->index]));
break;
case FAN1_PRESENT:
case FAN2_PRESENT:
case FAN3_PRESENT:
case FAN4_PRESENT:
case FAN5_PRESENT:
ret = sprintf(buf, "%d\n",
reg_val_to_is_present(data->reg_val[FAN_PRESENT_REG],
attr->index - FAN1_PRESENT));
break;
case FAN1_FAULT:
case FAN2_FAULT:
case FAN3_FAULT:
case FAN4_FAULT:
case FAN5_FAULT:
ret = sprintf(buf, "%d\n", is_fan_fault(data, attr->index - FAN1_FAULT));
break;
case FAN1_DIRECTION:
case FAN2_DIRECTION:
case FAN3_DIRECTION:
case FAN4_DIRECTION:
case FAN5_DIRECTION:
ret = sprintf(buf, "%d\n",
reg_val_to_direction(data->reg_val[FAN_DIRECTION_REG],
attr->index - FAN1_DIRECTION));
break;
case FAN_MAX_RPM:
ret = sprintf(buf, "%d\n", MAX_FAN_SPEED_RPM);
default:
break;
}
}
return ret;
}
static const struct attribute_group as5835_54x_fan_group = {
.attrs = as5835_54x_fan_attributes,
};
static struct as5835_54x_fan_data *as5835_54x_fan_update_device(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct as5835_54x_fan_data *data = i2c_get_clientdata(client);
mutex_lock(&data->update_lock);
if (time_after(jiffies, data->last_updated + HZ + HZ / 2) ||
!data->valid) {
int i;
dev_dbg(&client->dev, "Starting as5835_54x_fan update\n");
data->valid = 0;
/* Update fan data
*/
for (i = 0; i < ARRAY_SIZE(data->reg_val); i++) {
int status = as5835_54x_fan_read_value(client, fan_reg[i]);
if (status < 0) {
data->valid = 0;
mutex_unlock(&data->update_lock);
dev_dbg(&client->dev, "reg %d, err %d\n", fan_reg[i], status);
return data;
}
else {
data->reg_val[i] = status;
}
}
data->last_updated = jiffies;
data->valid = 1;
}
mutex_unlock(&data->update_lock);
return data;
}
static ssize_t show_version(struct device *dev, struct device_attribute *attr, char *buf)
{
int val = 0;
struct i2c_client *client = to_i2c_client(dev);
val = i2c_smbus_read_byte_data(client, 0x1);
if (val < 0) {
dev_dbg(&client->dev, "cpld(0x%x) reg(0x1) err %d\n", client->addr, val);
}
return sprintf(buf, "%d\n", val);
}
static int as5835_54x_fan_probe(struct i2c_client *client,
const struct i2c_device_id *dev_id)
{
struct as5835_54x_fan_data *data;
int status;
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
status = -EIO;
goto exit;
}
data = kzalloc(sizeof(struct as5835_54x_fan_data), GFP_KERNEL);
if (!data) {
status = -ENOMEM;
goto exit;
}
i2c_set_clientdata(client, data);
data->valid = 0;
mutex_init(&data->update_lock);
dev_info(&client->dev, "chip found\n");
/* Register sysfs hooks */
status = sysfs_create_group(&client->dev.kobj, &as5835_54x_fan_group);
if (status) {
goto exit_free;
}
data->hwmon_dev = hwmon_device_register_with_info(&client->dev, "as5835_54x_fan",
NULL, NULL, NULL);
if (IS_ERR(data->hwmon_dev)) {
status = PTR_ERR(data->hwmon_dev);
goto exit_remove;
}
dev_info(&client->dev, "%s: fan '%s'\n",
dev_name(data->hwmon_dev), client->name);
return 0;
exit_remove:
sysfs_remove_group(&client->dev.kobj, &as5835_54x_fan_group);
exit_free:
kfree(data);
exit:
return status;
}
static int as5835_54x_fan_remove(struct i2c_client *client)
{
struct as5835_54x_fan_data *data = i2c_get_clientdata(client);
hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &as5835_54x_fan_group);
return 0;
}
/* Addresses to scan */
static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
static const struct i2c_device_id as5835_54x_fan_id[] = {
{ "as5835_54x_fan", 0 },
{}
};
MODULE_DEVICE_TABLE(i2c, as5835_54x_fan_id);
static struct i2c_driver as5835_54x_fan_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = DRVNAME,
},
.probe = as5835_54x_fan_probe,
.remove = as5835_54x_fan_remove,
.id_table = as5835_54x_fan_id,
.address_list = normal_i2c,
};
module_i2c_driver(as5835_54x_fan_driver);
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
MODULE_DESCRIPTION("as5835_54x_fan driver");
MODULE_LICENSE("GPL");

View File

@ -0,0 +1,380 @@
/*
* A LED driver for the accton_as5822_54x_led
*
* Copyright (C) 2016 Accton Technology Corporation.
* Brandon Chuang <brandon_chuang@accton.com.tw>
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/err.h>
#include <linux/leds.h>
#include <linux/slab.h>
#define DRVNAME "as5835_54x_led"
#define DEBUG_MODE 0
#if (DEBUG_MODE == 1)
#define DEBUG_PRINT(fmt, args...) \
printk (KERN_INFO "%s:%s[%d]: " fmt "\r\n", __FILE__, __FUNCTION__, __LINE__, ##args)
#else
#define DEBUG_PRINT(fmt, args...)
#endif
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
extern int as5835_54x_cpld_write(unsigned short cpld_addr, u8 reg, u8 value);
struct accton_as5835_54x_led_data {
struct platform_device *pdev;
struct mutex update_lock;
char valid; /* != 0 if registers are valid */
unsigned long last_updated; /* In jiffies */
u8 reg_val[2]; /* Register value, 0 = RELEASE/DIAG LED,
1 = FAN/PSU LED,
2 ~ 4 = SYSTEM LED */
};
static struct accton_as5835_54x_led_data *ledctl = NULL;
#define LED_CNTRLER_I2C_ADDRESS (0x60)
#define LED_TYPE_DIAG_REG_MASK (0x0C)
#define LED_MODE_DIAG_GREEN_VALUE (0x08)
#define LED_MODE_DIAG_AMBER_VALUE (0x04)
#define LED_MODE_DIAG_OFF_VALUE (0x0C)
#define LED_MODE_DIAG_AMBER_VALUE1 (0x00)
#define LED_TYPE_LOC_REG_MASK (0x30)
#define LED_MODE_LOC_AMBER_BLINK_VALUE (0x20)
#define LED_MODE_LOC_OFF_VALUE (0x10)
#define LED_MODE_LOC_AMBER_VALUE (0x00)
static const u8 led_reg[] = {
0xA, /* LOC/DIAG/FAN LED */
0xB, /* PSU LED */
};
enum led_type {
LED_TYPE_DIAG,
LED_TYPE_LOC,
LED_TYPE_FAN,
LED_TYPE_PSU1,
LED_TYPE_PSU2
};
/* FAN/PSU/DIAG/RELEASE led mode */
enum led_light_mode {
LED_MODE_OFF = 0,
LED_MODE_GREEN,
LED_MODE_GREEN_BLINK,
LED_MODE_AMBER,
LED_MODE_AMBER_BLINK,
LED_MODE_RED,
LED_MODE_RED_BLINK,
LED_MODE_BLUE,
LED_MODE_BLUE_BLINK,
LED_MODE_AUTO,
LED_MODE_UNKNOWN
};
struct led_type_mode {
enum led_type type;
enum led_light_mode mode;
int type_mask;
int mode_value;
};
static struct led_type_mode led_type_mode_data[] = {
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
{LED_TYPE_LOC, LED_MODE_AMBER_BLINK, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_BLINK_VALUE},
{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_VALUE},
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE},
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE},
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE1},
};
static int led_reg_val_to_light_mode(enum led_type type, u8 reg_val) {
int i;
for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) {
if (type != led_type_mode_data[i].type) {
continue;
}
if ((led_type_mode_data[i].type_mask & reg_val) ==
led_type_mode_data[i].mode_value) {
return led_type_mode_data[i].mode;
}
}
return LED_MODE_UNKNOWN;
}
static u8 led_light_mode_to_reg_val(enum led_type type,
enum led_light_mode mode, u8 reg_val) {
int i;
for (i = 0; i < ARRAY_SIZE(led_type_mode_data); i++) {
int type_mask, mode_value;
if (type != led_type_mode_data[i].type)
continue;
if (mode != led_type_mode_data[i].mode)
continue;
type_mask = led_type_mode_data[i].type_mask;
mode_value = led_type_mode_data[i].mode_value;
reg_val = (reg_val & ~type_mask) | mode_value;
}
return reg_val;
}
static int accton_as5835_54x_led_read_value(u8 reg)
{
return as5835_54x_cpld_read(LED_CNTRLER_I2C_ADDRESS, reg);
}
static int accton_as5835_54x_led_write_value(u8 reg, u8 value)
{
return as5835_54x_cpld_write(LED_CNTRLER_I2C_ADDRESS, reg, value);
}
static void accton_as5835_54x_led_update(void)
{
mutex_lock(&ledctl->update_lock);
if (time_after(jiffies, ledctl->last_updated + HZ + HZ / 2)
|| !ledctl->valid) {
int i;
dev_dbg(&ledctl->pdev->dev, "Starting accton_as5835_54x_led update\n");
ledctl->valid = 0;
/* Update LED data
*/
for (i = 0; i < ARRAY_SIZE(ledctl->reg_val); i++) {
int status = accton_as5835_54x_led_read_value(led_reg[i]);
if (status < 0) {
dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", led_reg[i], status);
goto exit;
}
else
ledctl->reg_val[i] = status;
}
ledctl->last_updated = jiffies;
ledctl->valid = 1;
}
exit:
mutex_unlock(&ledctl->update_lock);
}
static void accton_as5835_54x_led_set(struct led_classdev *led_cdev,
enum led_brightness led_light_mode,
u8 reg, enum led_type type)
{
int reg_val;
mutex_lock(&ledctl->update_lock);
reg_val = accton_as5835_54x_led_read_value(reg);
if (reg_val < 0) {
dev_dbg(&ledctl->pdev->dev, "reg %d, err %d\n", reg, reg_val);
goto exit;
}
reg_val = led_light_mode_to_reg_val(type, led_light_mode, reg_val);
accton_as5835_54x_led_write_value(reg, reg_val);
ledctl->valid = 0;
exit:
mutex_unlock(&ledctl->update_lock);
}
static void accton_as7312_54x_led_auto_set(struct led_classdev *led_cdev,
enum led_brightness led_light_mode)
{
}
static enum led_brightness accton_as7312_54x_led_auto_get(struct led_classdev *cdev)
{
return LED_MODE_AUTO;
}
static void accton_as5835_54x_led_diag_set(struct led_classdev *led_cdev,
enum led_brightness led_light_mode)
{
accton_as5835_54x_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_DIAG);
}
static enum led_brightness accton_as5835_54x_led_diag_get(struct led_classdev *cdev)
{
accton_as5835_54x_led_update();
return led_reg_val_to_light_mode(LED_TYPE_DIAG, ledctl->reg_val[0]);
}
static enum led_brightness accton_as5835_54x_led_loc_get(struct led_classdev *cdev)
{
accton_as5835_54x_led_update();
return led_reg_val_to_light_mode(LED_TYPE_LOC, ledctl->reg_val[0]);
}
static void accton_as5835_54x_led_loc_set(struct led_classdev *led_cdev,
enum led_brightness led_light_mode)
{
accton_as5835_54x_led_set(led_cdev, led_light_mode, led_reg[0], LED_TYPE_LOC);
}
static struct led_classdev accton_as5835_54x_leds[] = {
[LED_TYPE_LOC] = {
.name = "as5835_54x_led::loc",
.default_trigger = "unused",
.brightness_set = accton_as5835_54x_led_loc_set,
.brightness_get = accton_as5835_54x_led_loc_get,
.max_brightness = LED_MODE_AMBER_BLINK,
},
[LED_TYPE_DIAG] = {
.name = "as5835_54x_led::diag",
.default_trigger = "unused",
.brightness_set = accton_as5835_54x_led_diag_set,
.brightness_get = accton_as5835_54x_led_diag_get,
.max_brightness = LED_MODE_AMBER,
},
[LED_TYPE_PSU1] = {
.name = "as5835_54x_led::psu1",
.default_trigger = "unused",
.brightness_set = accton_as7312_54x_led_auto_set,
.brightness_get = accton_as7312_54x_led_auto_get,
.max_brightness = LED_MODE_AUTO,
},
[LED_TYPE_PSU2] = {
.name = "as5835_54x_led::psu2",
.default_trigger = "unused",
.brightness_set = accton_as7312_54x_led_auto_set,
.brightness_get = accton_as7312_54x_led_auto_get,
.max_brightness = LED_MODE_AUTO,
},
[LED_TYPE_FAN] = {
.name = "as5835_54x_led::fan",
.default_trigger = "unused",
.brightness_set = accton_as7312_54x_led_auto_set,
.brightness_get = accton_as7312_54x_led_auto_get,
.max_brightness = LED_MODE_AUTO,
},
};
static int accton_as5835_54x_led_probe(struct platform_device *pdev)
{
int ret, i;
for (i = 0; i < ARRAY_SIZE(accton_as5835_54x_leds); i++) {
ret = led_classdev_register(&pdev->dev, &accton_as5835_54x_leds[i]);
if (ret < 0) {
break;
}
}
/* Check if all LEDs were successfully registered */
if (i != ARRAY_SIZE(accton_as5835_54x_leds)){
int j;
/* only unregister the LEDs that were successfully registered */
for (j = 0; j < i; j++) {
led_classdev_unregister(&accton_as5835_54x_leds[i]);
}
}
return ret;
}
static int accton_as5835_54x_led_remove(struct platform_device *pdev)
{
int i;
for (i = 0; i < ARRAY_SIZE(accton_as5835_54x_leds); i++) {
led_classdev_unregister(&accton_as5835_54x_leds[i]);
}
return 0;
}
static struct platform_driver accton_as5835_54x_led_driver = {
.probe = accton_as5835_54x_led_probe,
.remove = accton_as5835_54x_led_remove,
.driver = {
.name = DRVNAME,
.owner = THIS_MODULE,
},
};
static int __init accton_as5835_54x_led_init(void)
{
int ret;
ret = platform_driver_register(&accton_as5835_54x_led_driver);
if (ret < 0) {
goto exit;
}
ledctl = kzalloc(sizeof(struct accton_as5835_54x_led_data), GFP_KERNEL);
if (!ledctl) {
ret = -ENOMEM;
goto exit_driver;
}
mutex_init(&ledctl->update_lock);
ledctl->pdev = platform_device_register_simple(DRVNAME, -1, NULL, 0);
if (IS_ERR(ledctl->pdev)) {
ret = PTR_ERR(ledctl->pdev);
goto exit_free;
}
return 0;
exit_free:
kfree(ledctl);
exit_driver:
platform_driver_unregister(&accton_as5835_54x_led_driver);
exit:
return ret;
}
static void __exit accton_as5835_54x_led_exit(void)
{
platform_device_unregister(ledctl->pdev);
platform_driver_unregister(&accton_as5835_54x_led_driver);
kfree(ledctl);
}
late_initcall(accton_as5835_54x_led_init);
module_exit(accton_as5835_54x_led_exit);
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
MODULE_DESCRIPTION("accton_as5835_54x_led driver");
MODULE_LICENSE("GPL");

View File

@ -0,0 +1,343 @@
/*
* An hwmon driver for accton as5835_54x Power Module
*
* Copyright (C) 2014 Accton Technology Corporation.
* Brandon Chuang <brandon_chuang@accton.com.tw>
*
* Based on ad7414.c
* Copyright 2006 Stefan Roese <sr at denx.de>, DENX Software Engineering
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/module.h>
#include <linux/jiffies.h>
#include <linux/i2c.h>
#include <linux/hwmon.h>
#include <linux/hwmon-sysfs.h>
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/dmi.h>
#define PSU_STATUS_I2C_ADDR 0x60
#define PSU_STATUS_I2C_REG_OFFSET 0x2
#define MODEL_NAME_LEN 8
#define MODEL_NAME_REG_OFFSET 0x20
#define SERIAL_NUM_LEN 18
#define SERIAL_NUM_REG_OFFSET 0x35
#define IS_POWER_GOOD(id, value) (!!(value & BIT(id*4 + 1)))
#define IS_PRESENT(id, value) (!(value & BIT(id*4)))
static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t show_string(struct device *dev, struct device_attribute *da, char *buf);
extern int as5835_54x_cpld_read(unsigned short cpld_addr, u8 reg);
/* Addresses scanned
*/
static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
/* Each client has this additional data
*/
struct as5835_54x_psu_data {
struct device *hwmon_dev;
struct mutex update_lock;
char valid; /* !=0 if registers are valid */
unsigned long last_updated; /* In jiffies */
u8 index; /* PSU index */
u8 status; /* Status(present/power_good) register read from CPLD */
char model_name[MODEL_NAME_LEN+1]; /* Model name, read from eeprom */
char serial[SERIAL_NUM_LEN+1]; /* Serial number, read from eeprom*/
};
static struct as5835_54x_psu_data *as5835_54x_psu_update_device(struct device *dev);
enum as5835_54x_psu_sysfs_attributes {
PSU_PRESENT,
PSU_MODEL_NAME,
PSU_POWER_GOOD,
PSU_SERIAL_NUMBER
};
/* sysfs attributes for hwmon
*/
static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT);
static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_string, NULL, PSU_MODEL_NAME);
static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD);
static SENSOR_DEVICE_ATTR(psu_serial_numer, S_IRUGO, show_string, NULL, PSU_SERIAL_NUMBER);
static struct attribute *as5835_54x_psu_attributes[] = {
&sensor_dev_attr_psu_present.dev_attr.attr,
&sensor_dev_attr_psu_model_name.dev_attr.attr,
&sensor_dev_attr_psu_power_good.dev_attr.attr,
&sensor_dev_attr_psu_serial_numer.dev_attr.attr,
NULL
};
static ssize_t show_status(struct device *dev, struct device_attribute *da,
char *buf)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct as5835_54x_psu_data *data = as5835_54x_psu_update_device(dev);
u8 status = 0;
if (!data->valid) {
return sprintf(buf, "0\n");
}
if (attr->index == PSU_PRESENT) {
status = IS_PRESENT(data->index, data->status);
}
else { /* PSU_POWER_GOOD */
status = IS_POWER_GOOD(data->index, data->status);
}
return sprintf(buf, "%d\n", status);
}
static ssize_t show_string(struct device *dev, struct device_attribute *da,
char *buf)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct as5835_54x_psu_data *data = as5835_54x_psu_update_device(dev);
char *str = NULL;
if (!data->valid) {
return 0;
}
if (attr->index == PSU_MODEL_NAME) {
str = data->model_name;
}
else { /* PSU_SERIAL_NUBMER */
str = data->serial;
}
return sprintf(buf, "%s\n", str);
}
static const struct attribute_group as5835_54x_psu_group = {
.attrs = as5835_54x_psu_attributes,
};
static int as5835_54x_psu_probe(struct i2c_client *client,
const struct i2c_device_id *dev_id)
{
struct as5835_54x_psu_data *data;
int status;
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) {
status = -EIO;
goto exit;
}
data = kzalloc(sizeof(struct as5835_54x_psu_data), GFP_KERNEL);
if (!data) {
status = -ENOMEM;
goto exit;
}
i2c_set_clientdata(client, data);
data->valid = 0;
data->index = dev_id->driver_data;
mutex_init(&data->update_lock);
dev_info(&client->dev, "chip found\n");
/* Register sysfs hooks */
status = sysfs_create_group(&client->dev.kobj, &as5835_54x_psu_group);
if (status) {
goto exit_free;
}
data->hwmon_dev = hwmon_device_register_with_info(&client->dev, "as5835_54x_psu",
NULL, NULL, NULL);
if (IS_ERR(data->hwmon_dev)) {
status = PTR_ERR(data->hwmon_dev);
goto exit_remove;
}
dev_info(&client->dev, "%s: psu '%s'\n",
dev_name(data->hwmon_dev), client->name);
return 0;
exit_remove:
sysfs_remove_group(&client->dev.kobj, &as5835_54x_psu_group);
exit_free:
kfree(data);
exit:
return status;
}
static int as5835_54x_psu_remove(struct i2c_client *client)
{
struct as5835_54x_psu_data *data = i2c_get_clientdata(client);
hwmon_device_unregister(data->hwmon_dev);
sysfs_remove_group(&client->dev.kobj, &as5835_54x_psu_group);
kfree(data);
return 0;
}
enum psu_index
{
as5835_54x_psu1,
as5835_54x_psu2
};
static const struct i2c_device_id as5835_54x_psu_id[] = {
{ "as5835_54x_psu1", as5835_54x_psu1 },
{ "as5835_54x_psu2", as5835_54x_psu2 },
{}
};
MODULE_DEVICE_TABLE(i2c, as5835_54x_psu_id);
static struct i2c_driver as5835_54x_psu_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = "as5835_54x_psu",
},
.probe = as5835_54x_psu_probe,
.remove = as5835_54x_psu_remove,
.id_table = as5835_54x_psu_id,
.address_list = normal_i2c,
};
static int as5835_54x_psu_read_byte(struct i2c_client *client, u8 command, u8 *data)
{
int status = 0;
int retry_count = 5;
while (retry_count) {
status = i2c_smbus_read_byte_data(client, command);
if (unlikely(status < 0)) {
msleep(10);
retry_count--;
continue;
}
break;
}
if (unlikely(status < 0)) {
dev_dbg(&client->dev, "sfp read byte data failed, command(0x%2x), data(0x%2x)\r\n", command, status);
goto abort;
}
*data = (u8)status;
abort:
return status;
}
static int as5835_54x_psu_read_bytes(struct i2c_client *client, u8 command, u8 *data,
int data_len)
{
int ret = 0;
while (data_len) {
ssize_t status;
status = as5835_54x_psu_read_byte(client, command, data);
if (status <= 0) {
ret = status;
break;
}
data += 1;
command += 1;
data_len -= 1;
}
return ret;
}
static struct as5835_54x_psu_data *as5835_54x_psu_update_device(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct as5835_54x_psu_data *data = i2c_get_clientdata(client);
mutex_lock(&data->update_lock);
if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
|| !data->valid) {
int status;
dev_dbg(&client->dev, "Starting as5835_54x update\n");
data->valid = 0;
/* Read psu status */
status = as5835_54x_cpld_read(PSU_STATUS_I2C_ADDR, PSU_STATUS_I2C_REG_OFFSET);
if (status < 0) {
dev_dbg(&client->dev, "cpld reg (0x%x) err %d\n", PSU_STATUS_I2C_ADDR, status);
goto exit;
}
else {
data->status = status;
}
memset(data->model_name, 0, sizeof(data->model_name));
memset(data->serial, 0, sizeof(data->serial));
if (IS_PRESENT(data->index, data->status)) {
/* Read model name */
status = as5835_54x_psu_read_bytes(client, MODEL_NAME_REG_OFFSET, data->model_name,
ARRAY_SIZE(data->model_name)-1);
if (status < 0) {
data->model_name[0] = '\0';
dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr);
goto exit;
}
/* Read serial number */
status = as5835_54x_psu_read_bytes(client, SERIAL_NUM_REG_OFFSET, data->serial,
ARRAY_SIZE(data->serial)-1);
if (status < 0) {
data->serial[0] = '\0';
dev_dbg(&client->dev, "unable to read serial number from (0x%x)\n", client->addr);
goto exit;
}
else {
data->serial[SERIAL_NUM_LEN] = '\0';
}
}
data->last_updated = jiffies;
data->valid = 1;
}
exit:
mutex_unlock(&data->update_lock);
return data;
}
module_i2c_driver(as5835_54x_psu_driver);
MODULE_AUTHOR("Brandon Chuang <brandon_chuang@accton.com.tw>");
MODULE_DESCRIPTION("as5835_54x_psu driver");
MODULE_LICENSE("GPL");

View File

@ -0,0 +1 @@
../../common/modules/ym2651y.c

View File

@ -0,0 +1,16 @@
[Unit]
Description=Accton AS5835-54X Platform Monitoring FAN service
Before=pmon.service
After=as5835-54x-platform-monitor.service
DefaultDependencies=no
[Service]
ExecStart=/usr/local/bin/accton_as5835_54x_monitor_fan.py
KillSignal=SIGKILL
SuccessExitStatus=SIGKILL
# Resource Limitations
LimitCORE=infinity
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,16 @@
[Unit]
Description=Accton AS5835-54X Platform Monitoring PSU service
Before=pmon.service
After=as5835-54x-platform-monitor.service
DefaultDependencies=no
[Service]
ExecStart=/usr/local/bin/accton_as5835_54x_monitor_psu.py
KillSignal=SIGKILL
SuccessExitStatus=SIGKILL
# Resource Limitations
LimitCORE=infinity
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,18 @@
[Unit]
Description=Accton AS5835-54X Platform Monitoring service
Before=pmon.service
After=sysinit.target
DefaultDependencies=no
[Service]
ExecStartPre=/usr/local/bin/accton_as5835_54x_util.py install
ExecStart=/usr/local/bin/accton_as5835_54x_monitor.py
KillSignal=SIGKILL
SuccessExitStatus=SIGKILL
#StandardOutput=tty
# Resource Limitations
LimitCORE=infinity
[Install]
WantedBy=multi-user.target

Some files were not shown because too many files have changed in this diff Show More