diff --git a/.azure-pipelines/azure-pipelines-build.yml b/.azure-pipelines/azure-pipelines-build.yml index 941c30ecbea2..57819513073c 100644 --- a/.azure-pipelines/azure-pipelines-build.yml +++ b/.azure-pipelines/azure-pipelines-build.yml @@ -38,6 +38,7 @@ jobs: docker_syncd_rpc_image: no syncd_rpc_image: no platform_rpc: no + ss_image: no ${{ if parameters.qemuOrCrossBuild }}: SONIC_SLAVE_DOCKER_DRIVER: 'vfs' CACHE_MODE: 'none' @@ -81,7 +82,7 @@ jobs: variables: dbg_image: yes - - name: innovium + - name: marvell-teralynx variables: dbg_image: yes @@ -106,6 +107,7 @@ jobs: - name: mellanox variables: dbg_image: yes + ss_image: yes docker_syncd_rpc_image: yes syncd_rpc_image: yes platform_rpc: mlnx @@ -162,6 +164,10 @@ jobs: make $BUILD_OPTIONS INSTALL_DEBUG_TOOLS=y target/sonic-$(GROUP_NAME).bin mv target/sonic-$(GROUP_NAME).bin target/sonic-$(GROUP_NAME)-dbg.bin fi + if [ $(ss_image) == yes ]; then + make $BUILD_OPTIONS SMARTSWITCH=1 INCLUDE_DHCP_SERVER=y target/sonic-$(GROUP_NAME).bin + mv target/sonic-$(GROUP_NAME).bin target/sonic-$(GROUP_NAME)-smartswitch.bin + fi if [ $(swi_image) == yes ]; then make $BUILD_OPTIONS ENABLE_IMAGE_SIGNATURE=y target/sonic-aboot-$(GROUP_NAME).swi fi @@ -182,6 +188,9 @@ jobs: make $BUILD_OPTIONS ENABLE_SYNCD_RPC=y target/sonic-$(GROUP_NAME).bin mv target/sonic-mellanox.bin target/sonic-$(GROUP_NAME)-rpc.bin fi + if [ $(GROUP_NAME) == nvidia-bluefield ]; then + make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).bfb + fi make $BUILD_OPTIONS target/sonic-$(GROUP_NAME).bin fi displayName: "Build sonic image" diff --git a/.azure-pipelines/template-variables.yml b/.azure-pipelines/template-variables.yml index 934693196807..e8aa4f60c604 100644 --- a/.azure-pipelines/template-variables.yml +++ b/.azure-pipelines/template-variables.yml @@ -1,6 +1,6 @@ variables: DEFAULT_CONTAINER_REGISTRY: 'publicmirror.azurecr.io' - COMMON_LIB_BUILD_ENVS: 'bullseye' + COMMON_LIB_BUILD_ENVS: 'bookworm' SONIC_SLAVE_DOCKER_DRIVER: 'overlay2' SONIC_BUILD_RETRY_COUNT: 3 SONIC_BUILD_RETRY_INTERVAL: 600 diff --git a/.github/workflows/protect-file.yml b/.github/workflows/protect-file.yml new file mode 100644 index 000000000000..bc7e0ae1de1a --- /dev/null +++ b/.github/workflows/protect-file.yml @@ -0,0 +1,37 @@ +name: Protect certain files to avoid further changes + +on: + push: + branches: + - 'master' + - '202[2-9][0-9][0-9]' + pull_request: + branches: + - 'master' + - '202[2-9][0-9][0-9]' + +jobs: + check-file: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Fetch base branch + run: | + git fetch origin ${GITHUB_BASE_REF} + + - name: Check protected files + run: | + echo "Starting file check step" + protected_files=('src/sonic-config-engine/minigraph.py' 'files/build_templates/init_cfg.json.j2') + base_branch=$(git rev-parse origin/${GITHUB_BASE_REF}) + + for protected_file in "${protected_files[@]}"; do + echo "Checking ${protected_file}" + if git diff --name-only $base_branch | grep -q "^${protected_file}\$"; then + echo "Error: You are trying to modify ${protected_file}, which is protected." + exit 1 + fi + done + echo "No changes detected in protected files" diff --git a/.gitmodules b/.gitmodules index d559a7417b0e..f8d10f3af4ab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -46,7 +46,7 @@ [submodule "src/sonic-frr/frr"] path = src/sonic-frr/frr url = https://github.com/sonic-net/sonic-frr.git - branch = frr/8.5 + branch = frr-10.0.1 [submodule "platform/p4/p4-hlir/p4-hlir-v1.1"] path = platform/p4/p4-hlir/p4-hlir-v1.1 url = https://github.com/p4lang/p4-hlir.git @@ -124,9 +124,12 @@ [submodule "platform/marvell/sonic-platform-marvell"] path = platform/marvell/sonic-platform-marvell url = https://github.com/Marvell-switching/sonic-platform-arm64.git -[submodule "platform/innovium/sonic-platform-marvell"] - path = platform/innovium/sonic-platform-marvell - url = https://github.com/Marvell-switching/sonic-platform-marvell +[submodule "src/sonic-stp"] + path = src/sonic-stp + url = https://github.com/sonic-net/sonic-stp +[submodule "platform/marvell-teralynx/sonic-platform-marvell-teralynx"] + path = platform/marvell-teralynx/sonic-platform-marvell-teralynx + url = https://github.com/Marvell-switching/sonic-platform-marvell.git [submodule "platform/vpp"] path = platform/vpp - url = https://github.com/sonic-net/sonic-platform-vpp.git + url = https://github.com/sonic-net/sonic-platform-vpp.git \ No newline at end of file diff --git a/Makefile.work b/Makefile.work index 6079906a1005..fe14eebaedc7 100644 --- a/Makefile.work +++ b/Makefile.work @@ -61,6 +61,9 @@ # * SONIC_PTF_ENV_PY_VER: Python version for PTF image # * Default: mixed # * Values: mixed,py3 +# * ENABLE_MULTIDB: Enable multiple redis database instances. +# * Default: unset +# * Values: y ############################################################################### SHELL = /bin/bash @@ -532,10 +535,12 @@ SONIC_BUILD_INSTRUCTION := $(MAKE) \ SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD=$(SONIC_CONFIG_USE_NATIVE_DOCKERD_FOR_BUILD) \ SONIC_INCLUDE_SYSTEM_TELEMETRY=$(INCLUDE_SYSTEM_TELEMETRY) \ SONIC_INCLUDE_SYSTEM_GNMI=$(INCLUDE_SYSTEM_GNMI) \ + SONIC_INCLUDE_SYSTEM_BMP=$(INCLUDE_SYSTEM_BMP) \ SONIC_INCLUDE_SYSTEM_EVENTD=$(INCLUDE_SYSTEM_EVENTD) \ INCLUDE_DHCP_RELAY=$(INCLUDE_DHCP_RELAY) \ INCLUDE_DHCP_SERVER=$(INCLUDE_DHCP_SERVER) \ INCLUDE_MACSEC=$(INCLUDE_MACSEC) \ + INCLUDE_ICCPD=$(INCLUDE_ICCPD) \ SONIC_INCLUDE_RESTAPI=$(INCLUDE_RESTAPI) \ SONIC_INCLUDE_MUX=$(INCLUDE_MUX) \ ENABLE_TRANSLIB_WRITE=$(ENABLE_TRANSLIB_WRITE) \ @@ -570,6 +575,7 @@ SONIC_BUILD_INSTRUCTION := $(MAKE) \ BUILD_PROCESS_TIMEOUT=$(BUILD_PROCESS_TIMEOUT) \ LEGACY_SONIC_MGMT_DOCKER=$(LEGACY_SONIC_MGMT_DOCKER) \ SONIC_PTF_ENV_PY_VER=$(SONIC_PTF_ENV_PY_VER) \ + ENABLE_MULTIDB=$(ENABLE_MULTIDB) \ $(SONIC_OVERRIDE_BUILD_VARS) .PHONY: sonic-slave-build sonic-slave-bash init reset diff --git a/README.md b/README.md index 2488f972df41..aebacea58ca4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=master&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=master) [![Centec](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec?branchName=master&label=Centec)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=143&branchName=master) [![Centec(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec-arm64?branchName=master&label=Centec-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=140&branchName=master) -[![Innovium](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.innovium?branchName=master&label=Innovium)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=148&branchName=master) +[![Marvell-Teralynx](https://dev.azure.com/mssonic/build/_apis/build/status/marvell-teralynx/Azure.sonic-buildimage.official.marvell-teralynx?branchName=master&label=Marvell-Teralynx)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=148&branchName=master) [![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=master&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=master) [![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=master&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=master) [![Marvell(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-arm64?branchName=master&label=Marvell-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=master) @@ -215,7 +215,7 @@ The supported ASIC vendors are: * PLATFORM=centec * PLATFORM=nephos * PLATFORM=nvidia-bluefield -* PLATFORM=innovium +* PLATFORM=marvell-teralynx * PLATFORM=vs ## Usage for ARM Architecture @@ -373,8 +373,8 @@ on the SAI version for each SONiC release. and Mellanox switch ASIC (gzip tar archive) * docker-syncd-nephos.gz: docker image for the daemon to sync database and Nephos switch ASIC (gzip tar archive) - * docker-syncd-invm.gz: docker image for the daemon to sync database - and Innovium switch ASIC (gzip tar archive) + * docker-syncd-mrvl-teralynx.gz: docker image for the daemon to sync database + and Marvell-Teralynx switch ASIC (gzip tar archive) * docker-sonic-p4.gz: docker image for all-in-one for p4 software switch (gzip tar archive) * docker-sonic-vs.gz: docker image for all-in-one for software virtual switch diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3956a7c94448..4af6d03fea36 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -70,6 +70,8 @@ stages: - name: broadcom variables: swi_image: yes + docker_syncd_rpc_image: yes + platform_rpc: brcm INCLUDE_RESTAPI: y - name: mellanox variables: diff --git a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-200Gx48-100Gx32/th4-a7060dx5-32-200Gx48-100Gx32.config.bcm b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-200Gx48-100Gx32/th4-a7060dx5-32-200Gx48-100Gx32.config.bcm index ae51822fc619..027509541e29 100644 --- a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-200Gx48-100Gx32/th4-a7060dx5-32-200Gx48-100Gx32.config.bcm +++ b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-200Gx48-100Gx32/th4-a7060dx5-32-200Gx48-100Gx32.config.bcm @@ -19,6 +19,7 @@ bcm_device: 0: global: pktio_mode: 1 + default_cpu_tx_queue: 7 vlan_flooding_l2mc_num_reserved: 0 ipv6_lpm_128b_enable: 1 shared_block_mask_section: uc_bc diff --git a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-25Gx96-100Gx8-200Gx8/th4-a7060dx5-32-25Gx96-100Gx8-200Gx8.config.bcm b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-25Gx96-100Gx8-200Gx8/th4-a7060dx5-32-25Gx96-100Gx8-200Gx8.config.bcm index b1f524185899..a196ad2a2bc0 100644 --- a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-25Gx96-100Gx8-200Gx8/th4-a7060dx5-32-25Gx96-100Gx8-200Gx8.config.bcm +++ b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32-25Gx96-100Gx8-200Gx8/th4-a7060dx5-32-25Gx96-100Gx8-200Gx8.config.bcm @@ -23,6 +23,7 @@ bcm_device: 0: global: pktio_mode: 1 + default_cpu_tx_queue: 7 vlan_flooding_l2mc_num_reserved: 0 ipv6_lpm_128b_enable: 1 shared_block_mask_section: uc_bc diff --git a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32/th4-a7060dx5-32.config.bcm b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32/th4-a7060dx5-32.config.bcm index 65b289963d79..f4f77baf443a 100644 --- a/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32/th4-a7060dx5-32.config.bcm +++ b/device/arista/x86_64-arista_7060dx5_32/Arista-7060DX5-32/th4-a7060dx5-32.config.bcm @@ -23,6 +23,7 @@ bcm_device: 0: global: pktio_mode: 1 + default_cpu_tx_queue: 7 vlan_flooding_l2mc_num_reserved: 0 ipv6_lpm_128b_enable: 1 shared_block_mask_section: uc_bc diff --git a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml deleted file mode 120000 index d8e2cb69d236..000000000000 --- a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml +++ /dev/null @@ -1 +0,0 @@ -../../x86_64-arista_7060px5_64s/Arista-7060PX5-64S/blackhawk.xml \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml new file mode 100644 index 000000000000..11bfbc5b6811 --- /dev/null +++ b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/blackhawk.xml @@ -0,0 +1,379 @@ + + + CSDK-BH + retimer + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 3 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 4 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 5 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 6 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + + 7 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bypass + + + + + + diff --git a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/media_settings.json b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/media_settings.json new file mode 100644 index 000000000000..2ec71a30a6c8 --- /dev/null +++ b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/media_settings.json @@ -0,0 +1,4790 @@ +{ + "PORT_MEDIA_SETTINGS": { + "1": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "2": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "3": { + "Default": { + "main": { + "lane0": "0x8a", + "lane1": "0x8b", + "lane2": "0x8b", + "lane3": "0x8a", + "lane4": "0x8a", + "lane5": "0x8b", + "lane6": "0x8a", + "lane7": "0x8b" + }, + "post1": { + "lane0": "0xfffffff6", + "lane1": "0xfffffff5", + "lane2": "0xfffffff5", + "lane3": "0xfffffff6", + "lane4": "0xfffffff6", + "lane5": "0xfffffff5", + "lane6": "0xfffffff6", + "lane7": "0xfffffff5" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xffffffff", + "lane6": "0xfffffffe", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x2", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x2", + "lane4": "0x2", + "lane5": "0x1", + "lane6": "0x2", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "4": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x8b", + "lane2": "0x96", + "lane3": "0x8b", + "lane4": "0x8b", + "lane5": "0x8b", + "lane6": "0x8b", + "lane7": "0x8b" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff5", + "lane4": "0xfffffff5", + "lane5": "0xfffffff5", + "lane6": "0xfffffff5", + "lane7": "0xfffffff5" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff1", + "lane2": "0xfffffff2", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "5": { + "Default": { + "main": { + "lane0": "0x8a", + "lane1": "0x8b", + "lane2": "0x8b", + "lane3": "0x8a", + "lane4": "0x8a", + "lane5": "0x8b", + "lane6": "0x8a", + "lane7": "0x8b" + }, + "post1": { + "lane0": "0xfffffff6", + "lane1": "0xfffffff5", + "lane2": "0xfffffff5", + "lane3": "0xfffffff6", + "lane4": "0xfffffff6", + "lane5": "0xfffffff5", + "lane6": "0xfffffff6", + "lane7": "0xfffffff5" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xffffffff", + "lane6": "0xfffffffe", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x2", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x2", + "lane4": "0x2", + "lane5": "0x1", + "lane6": "0x2", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "6": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x8b", + "lane2": "0x96", + "lane3": "0x8b", + "lane4": "0x8b", + "lane5": "0x96", + "lane6": "0x8b", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff5", + "lane4": "0xfffffff5", + "lane5": "0x0", + "lane6": "0xfffffff5", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xfffffffe", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff1", + "lane2": "0xfffffff2", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff2", + "lane6": "0xfffffff1", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "7": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x8b", + "lane2": "0x9f", + "lane3": "0x8a", + "lane4": "0x9f", + "lane5": "0x8b", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff6", + "lane4": "0x0", + "lane5": "0xfffffff5", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xffffffff", + "lane2": "0xfffffffd", + "lane3": "0xfffffffe", + "lane4": "0xfffffffd", + "lane5": "0xffffffff", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0x0", + "lane1": "0xfffffffd", + "lane2": "0x0", + "lane3": "0xfffffffd", + "lane4": "0x0", + "lane5": "0xfffffffd", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff1", + "lane2": "0xfffffff8", + "lane3": "0xfffffff1", + "lane4": "0xfffffff8", + "lane5": "0xfffffff1", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x1", + "lane2": "0x0", + "lane3": "0x2", + "lane4": "0x0", + "lane5": "0x1", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "8": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x8b", + "lane2": "0x96", + "lane3": "0x8b", + "lane4": "0x96", + "lane5": "0x96", + "lane6": "0x96", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff5", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff1", + "lane2": "0xfffffff2", + "lane3": "0xfffffff1", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "9": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "10": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x96", + "lane2": "0x96", + "lane3": "0x96", + "lane4": "0x96", + "lane5": "0x96", + "lane6": "0x96", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "11": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x9f", + "lane2": "0x90", + "lane3": "0x9f", + "lane4": "0x90", + "lane5": "0x9f", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0x0", + "lane2": "0xfffffff4", + "lane3": "0x0", + "lane4": "0xfffffff4", + "lane5": "0x0", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffd", + "lane2": "0xfffffffe", + "lane3": "0xfffffffd", + "lane4": "0xfffffffe", + "lane5": "0xfffffffd", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0x0", + "lane2": "0xfffffffd", + "lane3": "0x0", + "lane4": "0xfffffffd", + "lane5": "0x0", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff8", + "lane2": "0xfffffff7", + "lane3": "0xfffffff8", + "lane4": "0xfffffff7", + "lane5": "0xfffffff8", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "12": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x96", + "lane2": "0x8f", + "lane3": "0x96", + "lane4": "0x8f", + "lane5": "0x96", + "lane6": "0x8f", + "lane7": "0x96" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0x0", + "lane2": "0xfffffff9", + "lane3": "0x0", + "lane4": "0xfffffff9", + "lane5": "0x0", + "lane6": "0xfffffff9", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xfffffffe", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xffffffff", + "lane5": "0xfffffffe", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff2", + "lane2": "0xfffffff3", + "lane3": "0xfffffff2", + "lane4": "0xfffffff3", + "lane5": "0xfffffff2", + "lane6": "0xfffffff3", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x1", + "lane2": "0x3", + "lane3": "0x1", + "lane4": "0x3", + "lane5": "0x1", + "lane6": "0x3", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "13": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x90", + "lane2": "0x90", + "lane3": "0x90", + "lane4": "0x90", + "lane5": "0x90", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff7", + "lane2": "0xfffffff7", + "lane3": "0xfffffff7", + "lane4": "0xfffffff7", + "lane5": "0xfffffff7", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "14": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "15": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x90", + "lane2": "0x90", + "lane3": "0x90", + "lane4": "0x90", + "lane5": "0x90", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff7", + "lane2": "0xfffffff7", + "lane3": "0xfffffff7", + "lane4": "0xfffffff7", + "lane5": "0xfffffff7", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "16": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "17": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x90", + "lane2": "0x90", + "lane3": "0x90", + "lane4": "0x90", + "lane5": "0x90", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff7", + "lane2": "0xfffffff7", + "lane3": "0xfffffff7", + "lane4": "0xfffffff7", + "lane5": "0xfffffff7", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "18": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "19": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x90", + "lane2": "0x90", + "lane3": "0x90", + "lane4": "0x90", + "lane5": "0x90", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff7", + "lane2": "0xfffffff7", + "lane3": "0xfffffff7", + "lane4": "0xfffffff7", + "lane5": "0xfffffff7", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "20": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "21": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x90", + "lane2": "0x90", + "lane3": "0x90", + "lane4": "0x90", + "lane5": "0x90", + "lane6": "0x90", + "lane7": "0x90" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff7", + "lane2": "0xfffffff7", + "lane3": "0xfffffff7", + "lane4": "0xfffffff7", + "lane5": "0xfffffff7", + "lane6": "0xfffffff7", + "lane7": "0xfffffff7" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "22": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "23": { + "Default": { + "main": { + "lane0": "0x90", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x90", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0xfffffff4", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffe", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0xfffffffd", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff7", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff7", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "24": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x96", + "lane2": "0x96", + "lane3": "0x96", + "lane4": "0x96", + "lane5": "0x96", + "lane6": "0x96", + "lane7": "0x96" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "25": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "26": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x96", + "lane2": "0x96", + "lane3": "0x96", + "lane4": "0x96", + "lane5": "0x96", + "lane6": "0x96", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "27": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x8b", + "lane2": "0x8b", + "lane3": "0x8a", + "lane4": "0x9f", + "lane5": "0x8b", + "lane6": "0x8a", + "lane7": "0x8b" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0xfffffff5", + "lane3": "0xfffffff6", + "lane4": "0x0", + "lane5": "0xfffffff5", + "lane6": "0xfffffff6", + "lane7": "0xfffffff5" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xfffffffd", + "lane5": "0xffffffff", + "lane6": "0xfffffffe", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0x0", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0x0", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff8", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x2", + "lane4": "0x0", + "lane5": "0x1", + "lane6": "0x2", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "28": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x8b", + "lane2": "0x96", + "lane3": "0x8b", + "lane4": "0x96", + "lane5": "0x96", + "lane6": "0x8b", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff5", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0xfffffff5", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff1", + "lane2": "0xfffffff2", + "lane3": "0xfffffff1", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff1", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "29": { + "Default": { + "main": { + "lane0": "0x8a", + "lane1": "0x8b", + "lane2": "0x8b", + "lane3": "0x8a", + "lane4": "0x8a", + "lane5": "0x8b", + "lane6": "0x8a", + "lane7": "0x8b" + }, + "post1": { + "lane0": "0xfffffff6", + "lane1": "0xfffffff5", + "lane2": "0xfffffff5", + "lane3": "0xfffffff6", + "lane4": "0xfffffff6", + "lane5": "0xfffffff5", + "lane6": "0xfffffff6", + "lane7": "0xfffffff5" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xffffffff", + "lane6": "0xfffffffe", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x2", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x2", + "lane4": "0x2", + "lane5": "0x1", + "lane6": "0x2", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "30": { + "Default": { + "main": { + "lane0": "0x96", + "lane1": "0x8b", + "lane2": "0x96", + "lane3": "0x8b", + "lane4": "0x8b", + "lane5": "0x96", + "lane6": "0x8b", + "lane7": "0x96" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffff5", + "lane2": "0x0", + "lane3": "0xfffffff5", + "lane4": "0xfffffff5", + "lane5": "0x0", + "lane6": "0xfffffff5", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xffffffff", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xfffffffe", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff1", + "lane2": "0xfffffff2", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff2", + "lane6": "0xfffffff1", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x1", + "lane2": "0x1", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x1", + "lane6": "0x1", + "lane7": "0x1" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "31": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "32": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "33": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "34": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "35": { + "Default": { + "main": { + "lane0": "0x8e", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8e", + "lane4": "0x8e", + "lane5": "0x8f", + "lane6": "0x8e", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffd", + "lane6": "0xfffffffb", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffd", + "lane6": "0xfffffffc", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffc", + "lane6": "0xfffffffe", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff1", + "lane6": "0xfffffff0", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x2", + "lane2": "0x2", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x2", + "lane6": "0x1", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "36": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "37": { + "Default": { + "main": { + "lane0": "0x8e", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8e", + "lane4": "0x8e", + "lane5": "0x8f", + "lane6": "0x8e", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffd", + "lane6": "0xfffffffb", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffd", + "lane6": "0xfffffffc", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffc", + "lane6": "0xfffffffe", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff1", + "lane6": "0xfffffff0", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x2", + "lane2": "0x2", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x2", + "lane6": "0x1", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "38": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "39": { + "Default": { + "main": { + "lane0": "0x99", + "lane1": "0x99", + "lane2": "0x99", + "lane3": "0x99", + "lane4": "0x99", + "lane5": "0x99", + "lane6": "0x99", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "40": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "41": { + "Default": { + "main": { + "lane0": "0x99", + "lane1": "0x99", + "lane2": "0x99", + "lane3": "0x99", + "lane4": "0x99", + "lane5": "0x99", + "lane6": "0x99", + "lane7": "0x99" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "42": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "43": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x99" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "44": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x91", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "45": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "46": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x91", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "47": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "48": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x91", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "49": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8f", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff3", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff3" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "50": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x91", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "51": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x99", + "lane4": "0x8f", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x99" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0x0", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff3", + "lane2": "0xfffffff3", + "lane3": "0xfffffff4", + "lane4": "0xfffffff3", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x0", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "52": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x91", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff2", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x3", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "53": { + "Default": { + "main": { + "lane0": "0x8f", + "lane1": "0x99", + "lane2": "0x8f", + "lane3": "0x99", + "lane4": "0x99", + "lane5": "0x8f", + "lane6": "0x8f", + "lane7": "0x99" + }, + "post1": { + "lane0": "0xfffffff9", + "lane1": "0x0", + "lane2": "0xfffffff9", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xfffffffe", + "lane2": "0xffffffff", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff3", + "lane1": "0xfffffff4", + "lane2": "0xfffffff3", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff3", + "lane6": "0xfffffff3", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x0", + "lane2": "0x3", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "54": { + "Default": { + "main": { + "lane0": "0x91", + "lane1": "0x91", + "lane2": "0x91", + "lane3": "0x9f", + "lane4": "0x91", + "lane5": "0x91", + "lane6": "0x91", + "lane7": "0x91" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffb", + "lane2": "0xfffffffb", + "lane3": "0x0", + "lane4": "0xfffffffb", + "lane5": "0xfffffffb", + "lane6": "0xfffffffb", + "lane7": "0xfffffffb" + }, + "post2": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xfffffffd", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xffffffff", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "pre1": { + "lane0": "0xfffffff2", + "lane1": "0xfffffff2", + "lane2": "0xfffffff2", + "lane3": "0xfffffff9", + "lane4": "0xfffffff2", + "lane5": "0xfffffff2", + "lane6": "0xfffffff2", + "lane7": "0xfffffff2" + }, + "pre2": { + "lane0": "0x3", + "lane1": "0x3", + "lane2": "0x3", + "lane3": "0x0", + "lane4": "0x3", + "lane5": "0x3", + "lane6": "0x3", + "lane7": "0x3" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "55": { + "Default": { + "main": { + "lane0": "0x99", + "lane1": "0x99", + "lane2": "0x99", + "lane3": "0x99", + "lane4": "0x99", + "lane5": "0x99", + "lane6": "0x99", + "lane7": "0x99" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "56": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "57": { + "Default": { + "main": { + "lane0": "0x99", + "lane1": "0x8f", + "lane2": "0x99", + "lane3": "0x8e", + "lane4": "0x99", + "lane5": "0x99", + "lane6": "0x99", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0xfffffffd", + "lane2": "0x0", + "lane3": "0xfffffffb", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffd", + "lane2": "0xfffffffe", + "lane3": "0xfffffffc", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffc", + "lane2": "0xfffffffd", + "lane3": "0xfffffffe", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff1", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x2", + "lane2": "0x0", + "lane3": "0x1", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "58": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "59": { + "Default": { + "main": { + "lane0": "0x8e", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8e", + "lane4": "0x8e", + "lane5": "0x8f", + "lane6": "0x8e", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffd", + "lane6": "0xfffffffb", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffd", + "lane6": "0xfffffffc", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffc", + "lane6": "0xfffffffe", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff1", + "lane6": "0xfffffff0", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x2", + "lane2": "0x2", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x2", + "lane6": "0x1", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "60": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "61": { + "Default": { + "main": { + "lane0": "0x8e", + "lane1": "0x8f", + "lane2": "0x8f", + "lane3": "0x8e", + "lane4": "0x8e", + "lane5": "0x8f", + "lane6": "0x8e", + "lane7": "0x8f" + }, + "post1": { + "lane0": "0xfffffffb", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffb", + "lane4": "0xfffffffb", + "lane5": "0xfffffffd", + "lane6": "0xfffffffb", + "lane7": "0xfffffffd" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffd", + "lane6": "0xfffffffc", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffc", + "lane6": "0xfffffffe", + "lane7": "0xfffffffc" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff1", + "lane6": "0xfffffff0", + "lane7": "0xfffffff1" + }, + "pre2": { + "lane0": "0x1", + "lane1": "0x2", + "lane2": "0x2", + "lane3": "0x1", + "lane4": "0x1", + "lane5": "0x2", + "lane6": "0x1", + "lane7": "0x2" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "62": { + "Default": { + "main": { + "lane0": "0x9f", + "lane1": "0x9f", + "lane2": "0x9f", + "lane3": "0x9f", + "lane4": "0x9f", + "lane5": "0x9f", + "lane6": "0x9f", + "lane7": "0x9f" + }, + "post1": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post2": { + "lane0": "0xfffffffd", + "lane1": "0xfffffffd", + "lane2": "0xfffffffd", + "lane3": "0xfffffffd", + "lane4": "0xfffffffd", + "lane5": "0xfffffffd", + "lane6": "0xfffffffd", + "lane7": "0xfffffffd" + }, + "post3": { + "lane0": "0xffffffff", + "lane1": "0xffffffff", + "lane2": "0xffffffff", + "lane3": "0xffffffff", + "lane4": "0xffffffff", + "lane5": "0xffffffff", + "lane6": "0xffffffff", + "lane7": "0xffffffff" + }, + "pre1": { + "lane0": "0xfffffff9", + "lane1": "0xfffffff9", + "lane2": "0xfffffff9", + "lane3": "0xfffffff9", + "lane4": "0xfffffff9", + "lane5": "0xfffffff9", + "lane6": "0xfffffff9", + "lane7": "0xfffffff9" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "63": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "64": { + "Default": { + "main": { + "lane0": "0x9a", + "lane1": "0x9a", + "lane2": "0x9a", + "lane3": "0x9a", + "lane4": "0x9a", + "lane5": "0x9a", + "lane6": "0x9a", + "lane7": "0x9a" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "post3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "pre2": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + }, + "pre3": { + "lane0": "0x0", + "lane1": "0x0", + "lane2": "0x0", + "lane3": "0x0", + "lane4": "0x0", + "lane5": "0x0", + "lane6": "0x0", + "lane7": "0x0" + } + } + }, + "65": { + "Default": { + "main": { + "lane0": "0x32" + }, + "post1": { + "lane0": "0x5" + }, + "post2": { + "lane0": "0x0" + }, + "post3": { + "lane0": "0x0" + }, + "pre1": { + "lane0": "0x5" + }, + "pre2": { + "lane0": "0x0" + }, + "pre3": { + "lane0": "0x0" + } + } + }, + "66": { + "Default": { + "main": { + "lane0": "0x32" + }, + "post1": { + "lane0": "0x5" + }, + "post2": { + "lane0": "0x0" + }, + "post3": { + "lane0": "0x0" + }, + "pre1": { + "lane0": "0x5" + }, + "pre2": { + "lane0": "0x0" + }, + "pre3": { + "lane0": "0x0" + } + } + } + } +} \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/port_config.ini b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/port_config.ini index c7bdcf79be6a..ef35708de118 100644 --- a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/port_config.ini +++ b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/port_config.ini @@ -1,67 +1,67 @@ # name lanes alias index speed fec -Ethernet0 9,10,11,12,13,14,15,16 Ethernet1/1 1 400000 rs -Ethernet8 5,6,7,8,9,10,11,12 Ethernet2/1 2 400000 rs -Ethernet16 25,26,27,28,29,30,31,32 Ethernet3/1 3 400000 rs -Ethernet24 17,18,19,20,21,22,23,24 Ethernet4/1 4 400000 rs -Ethernet32 41,42,43,44,45,46,47,48 Ethernet5/1 5 400000 rs -Ethernet40 33,34,35,36,37,38,39,40 Ethernet6/1 6 400000 rs -Ethernet48 57,58,59,60,61,62,63,64 Ethernet7/1 7 400000 rs -Ethernet56 49,50,51,52,53,54,55,56 Ethernet8/1 8 400000 rs -Ethernet64 73,74,75,76,77,78,79,80 Ethernet9/1 9 400000 rs -Ethernet72 65,66,67,68,69,70,71,72 Ethernet10/1 10 400000 rs -Ethernet80 89,90,91,92,93,94,95,96 Ethernet11/1 11 400000 rs -Ethernet88 81,82,83,84,85,86,87,88 Ethernet12/1 12 400000 rs -Ethernet96 105,106,107,108,109,110,111,112 Ethernet13/1 13 400000 rs -Ethernet104 97,98,99,100,101,102,103,104 Ethernet14/1 14 400000 rs -Ethernet112 121,122,123,124,125,126,127,128 Ethernet15/1 15 400000 rs -Ethernet120 117,118,119,120,121,122,123,124 Ethernet16/1 16 400000 rs -Ethernet128 141,142,143,144,145,146,147,148 Ethernet17/1 17 400000 rs -Ethernet136 129,130,131,132,133,134,135,136 Ethernet18/1 18 400000 rs -Ethernet144 153,154,155,156,157,158,159,160 Ethernet19/1 19 400000 rs -Ethernet152 145,146,147,148,149,150,151,152 Ethernet20/1 20 400000 rs -Ethernet160 169,170,171,172,173,174,175,176 Ethernet21/1 21 400000 rs -Ethernet168 161,162,163,164,165,166,167,168 Ethernet22/1 22 400000 rs -Ethernet176 185,186,187,188,189,190,191,192 Ethernet23/1 23 400000 rs -Ethernet184 177,178,179,180,181,182,183,184 Ethernet24/1 24 400000 rs -Ethernet192 201,202,203,204,205,206,207,208 Ethernet25/1 25 400000 rs -Ethernet200 193,194,195,196,197,198,199,200 Ethernet26/1 26 400000 rs -Ethernet208 217,218,219,220,221,222,223,224 Ethernet27/1 27 400000 rs -Ethernet216 209,210,211,212,213,214,215,216 Ethernet28/1 28 400000 rs -Ethernet224 233,234,235,236,237,238,239,240 Ethernet29/1 29 400000 rs -Ethernet232 225,226,227,228,229,230,231,232 Ethernet30/1 30 400000 rs -Ethernet240 241,242,243,244,245,246,247,248 Ethernet31/1 31 400000 rs -Ethernet248 253,254,255,256,257,258,259,260 Ethernet32/1 32 400000 rs +Ethernet0 17,18,19,20,21,22,23,24 Ethernet1/1 1 400000 rs +Ethernet8 9,10,11,12,13,14,15,16 Ethernet2/1 2 400000 rs +Ethernet16 49,50,51,52,53,54,55,56 Ethernet3/1 3 400000 rs +Ethernet24 33,34,35,36,37,38,39,40 Ethernet4/1 4 400000 rs +Ethernet32 81,82,83,84,85,86,87,88 Ethernet5/1 5 400000 rs +Ethernet40 65,66,67,68,69,70,71,72 Ethernet6/1 6 400000 rs +Ethernet48 113,114,115,116,117,118,119,120 Ethernet7/1 7 400000 rs +Ethernet56 97,98,99,100,101,102,103,104 Ethernet8/1 8 400000 rs +Ethernet64 145,146,147,148,149,150,151,152 Ethernet9/1 9 400000 rs +Ethernet72 129,130,131,132,133,134,135,136 Ethernet10/1 10 400000 rs +Ethernet80 177,178,179,180,181,182,183,184 Ethernet11/1 11 400000 rs +Ethernet88 161,162,163,164,165,166,167,168 Ethernet12/1 12 400000 rs +Ethernet96 209,210,211,212,213,214,215,216 Ethernet13/1 13 400000 rs +Ethernet104 193,194,195,196,197,198,199,200 Ethernet14/1 14 400000 rs +Ethernet112 241,242,243,244,245,246,247,248 Ethernet15/1 15 400000 rs +Ethernet120 233,234,235,236,237,238,239,240 Ethernet16/1 16 400000 rs +Ethernet128 281,282,283,284,285,286,287,288 Ethernet17/1 17 400000 rs +Ethernet136 257,258,259,260,261,262,263,264 Ethernet18/1 18 400000 rs +Ethernet144 305,306,307,308,309,310,311,312 Ethernet19/1 19 400000 rs +Ethernet152 289,290,291,292,293,294,295,296 Ethernet20/1 20 400000 rs +Ethernet160 337,338,339,340,341,342,343,344 Ethernet21/1 21 400000 rs +Ethernet168 321,322,323,324,325,326,327,328 Ethernet22/1 22 400000 rs +Ethernet176 369,370,371,372,373,374,375,376 Ethernet23/1 23 400000 rs +Ethernet184 353,354,355,356,357,358,359,360 Ethernet24/1 24 400000 rs +Ethernet192 401,402,403,404,405,406,407,408 Ethernet25/1 25 400000 rs +Ethernet200 385,386,387,388,389,390,391,392 Ethernet26/1 26 400000 rs +Ethernet208 433,434,435,436,437,438,439,440 Ethernet27/1 27 400000 rs +Ethernet216 417,418,419,420,421,422,423,424 Ethernet28/1 28 400000 rs +Ethernet224 465,466,467,468,469,470,471,472 Ethernet29/1 29 400000 rs +Ethernet232 449,450,451,452,453,454,455,456 Ethernet30/1 30 400000 rs +Ethernet240 481,482,483,484,485,486,487,488 Ethernet31/1 31 400000 rs +Ethernet248 505,506,507,508,509,510,511,512 Ethernet32/1 32 400000 rs Ethernet256 1,2,3,4,5,6,7,8 Ethernet33/1 33 400000 rs -Ethernet264 13,14,15,16,17,18,19,20 Ethernet34/1 34 400000 rs -Ethernet272 29,30,31,32,33,34,35,36 Ethernet35/1 35 400000 rs -Ethernet280 21,22,23,24,25,26,27,28 Ethernet36/1 36 400000 rs -Ethernet288 45,46,47,48,49,50,51,52 Ethernet37/1 37 400000 rs -Ethernet296 37,38,39,40,41,42,43,44 Ethernet38/1 38 400000 rs -Ethernet304 61,62,63,64,65,66,67,68 Ethernet39/1 39 400000 rs -Ethernet312 53,54,55,56,57,58,59,60 Ethernet40/1 40 400000 rs -Ethernet320 77,78,79,80,81,82,83,84 Ethernet41/1 41 400000 rs -Ethernet328 69,70,71,72,73,74,75,76 Ethernet42/1 42 400000 rs -Ethernet336 93,94,95,96,97,98,99,100 Ethernet43/1 43 400000 rs -Ethernet344 85,86,87,88,89,90,91,92 Ethernet44/1 44 400000 rs -Ethernet352 109,110,111,112,113,114,115,116 Ethernet45/1 45 400000 rs -Ethernet360 101,102,103,104,105,106,107,108 Ethernet46/1 46 400000 rs -Ethernet368 125,126,127,128,129,130,131,132 Ethernet47/1 47 400000 rs -Ethernet376 113,114,115,116,117,118,119,120 Ethernet48/1 48 400000 rs -Ethernet384 137,138,139,140,141,142,143,144 Ethernet49/1 49 400000 rs -Ethernet392 133,134,135,136,137,138,139,140 Ethernet50/1 50 400000 rs -Ethernet400 157,158,159,160,161,162,163,164 Ethernet51/1 51 400000 rs -Ethernet408 149,150,151,152,153,154,155,156 Ethernet52/1 52 400000 rs -Ethernet416 173,174,175,176,177,178,179,180 Ethernet53/1 53 400000 rs -Ethernet424 165,166,167,168,169,170,171,172 Ethernet54/1 54 400000 rs -Ethernet432 189,190,191,192,193,194,195,196 Ethernet55/1 55 400000 rs -Ethernet440 181,182,183,184,185,186,187,188 Ethernet56/1 56 400000 rs -Ethernet448 205,206,207,208,209,210,211,212 Ethernet57/1 57 400000 rs -Ethernet456 197,198,199,200,201,202,203,204 Ethernet58/1 58 400000 rs -Ethernet464 221,222,223,224,225,226,227,228 Ethernet59/1 59 400000 rs -Ethernet472 213,214,215,216,217,218,219,220 Ethernet60/1 60 400000 rs -Ethernet480 237,238,239,240,241,242,243,244 Ethernet61/1 61 400000 rs -Ethernet488 229,230,231,232,233,234,235,236 Ethernet62/1 62 400000 rs -Ethernet496 249,250,251,252,253,254,255,256 Ethernet63/1 63 400000 rs -Ethernet504 245,246,247,248,249,250,251,252 Ethernet64/1 64 400000 rs -Ethernet512 258 Ethernet65 65 10000 none -Ethernet513 257 Ethernet66 66 10000 none +Ethernet264 25,26,27,28,29,30,31,32 Ethernet34/1 34 400000 rs +Ethernet272 57,58,59,60,61,62,63,64 Ethernet35/1 35 400000 rs +Ethernet280 41,42,43,44,45,46,47,48 Ethernet36/1 36 400000 rs +Ethernet288 89,90,91,92,93,94,95,96 Ethernet37/1 37 400000 rs +Ethernet296 73,74,75,76,77,78,79,80 Ethernet38/1 38 400000 rs +Ethernet304 121,122,123,124,125,126,127,128 Ethernet39/1 39 400000 rs +Ethernet312 105,106,107,108,109,110,111,112 Ethernet40/1 40 400000 rs +Ethernet320 153,154,155,156,157,158,159,160 Ethernet41/1 41 400000 rs +Ethernet328 137,138,139,140,141,142,143,144 Ethernet42/1 42 400000 rs +Ethernet336 185,186,187,188,189,190,191,192 Ethernet43/1 43 400000 rs +Ethernet344 169,170,171,172,173,174,175,176 Ethernet44/1 44 400000 rs +Ethernet352 217,218,219,220,221,222,223,224 Ethernet45/1 45 400000 rs +Ethernet360 201,202,203,204,205,206,207,208 Ethernet46/1 46 400000 rs +Ethernet368 249,250,251,252,253,254,255,256 Ethernet47/1 47 400000 rs +Ethernet376 225,226,227,228,229,230,231,232 Ethernet48/1 48 400000 rs +Ethernet384 273,274,275,276,277,278,279,280 Ethernet49/1 49 400000 rs +Ethernet392 265,266,267,268,269,270,271,272 Ethernet50/1 50 400000 rs +Ethernet400 313,314,315,316,317,318,319,320 Ethernet51/1 51 400000 rs +Ethernet408 297,298,299,300,301,302,303,304 Ethernet52/1 52 400000 rs +Ethernet416 345,346,347,348,349,350,351,352 Ethernet53/1 53 400000 rs +Ethernet424 329,330,331,332,333,334,335,336 Ethernet54/1 54 400000 rs +Ethernet432 377,378,379,380,381,382,383,384 Ethernet55/1 55 400000 rs +Ethernet440 361,362,363,364,365,366,367,368 Ethernet56/1 56 400000 rs +Ethernet448 409,410,411,412,413,414,415,416 Ethernet57/1 57 400000 rs +Ethernet456 393,394,395,396,397,398,399,400 Ethernet58/1 58 400000 rs +Ethernet464 441,442,443,444,445,446,447,448 Ethernet59/1 59 400000 rs +Ethernet472 425,426,427,428,429,430,431,432 Ethernet60/1 60 400000 rs +Ethernet480 473,474,475,476,477,478,479,480 Ethernet61/1 61 400000 rs +Ethernet488 457,458,459,460,461,462,463,464 Ethernet62/1 62 400000 rs +Ethernet496 497,498,499,500,501,502,503,504 Ethernet63/1 63 400000 rs +Ethernet504 489,490,491,492,493,494,495,496 Ethernet64/1 64 400000 rs +Ethernet512 515 Ethernet65 65 10000 none +Ethernet513 513 Ethernet66 66 10000 none diff --git a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/th4-a7060dx5-64s.config.bcm b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/th4-a7060dx5-64s.config.bcm index 1d5894498362..ec5f4d9f0f4a 100644 --- a/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/th4-a7060dx5-64s.config.bcm +++ b/device/arista/x86_64-arista_7060dx5_64s/Arista-7060DX5-64S/th4-a7060dx5-64s.config.bcm @@ -23,6 +23,7 @@ bcm_device: 0: global: pktio_mode: 1 + default_cpu_tx_queue: 7 vlan_flooding_l2mc_num_reserved: 0 ipv6_lpm_128b_enable: 1 shared_block_mask_section: uc_bc diff --git a/device/arista/x86_64-arista_7060dx5_64s/platform.json b/device/arista/x86_64-arista_7060dx5_64s/platform.json index fa89a17687b5..a006f48dae4c 100644 --- a/device/arista/x86_64-arista_7060dx5_64s/platform.json +++ b/device/arista/x86_64-arista_7060dx5_64s/platform.json @@ -1,7 +1,20 @@ { "chassis": { "name": "DCS-7060DX5-64S", - "components": [], + "components": [ + { + "name": "Aboot()" + }, + { + "name": "Scd(addr=0000:00:18.7)" + }, + { + "name": "Scd(addr=0000:01:00.0)" + }, + { + "name": "LorikeetSysCpld(addr=13-0023)" + } + ], "fans": [], "fan_drawers": [ { @@ -40,24 +53,30 @@ "psus": [ { "name": "psu1", - "fans": [] + "fans": [ + { + "name": "psu1/1", + "speed": { + "controllable": false + } + } + ] }, { "name": "psu2", - "fans": [] + "fans": [ + { + "name": "psu2/1", + "speed": { + "controllable": false + } + } + ] } ], "thermals": [ { - "name": "Board sensor", - "controllable": false - }, - { - "name": "TH4 exhaust temp sensor", - "controllable": false - }, - { - "name": "Inlet temp sensor", + "name": "Cpu temp sensor", "controllable": false }, { @@ -65,35 +84,23 @@ "controllable": false }, { - "name": "Back panel temp sensor", + "name": "Back-panel temp sensor", "controllable": false }, { - "name": "Front panel temp sensor", + "name": "Switch card", "controllable": false }, { - "name": "Power supply 1 hotspot sensor", + "name": "Air outlet", "controllable": false }, { - "name": "Power supply 1 inlet temp sensor", + "name": "Air inlet", "controllable": false }, { - "name": "Power supply 1 exhaust temp sensor", - "controllable": false - }, - { - "name": "Power supply 2 hotspot sensor", - "controllable": false - }, - { - "name": "Power supply 2 inlet temp sensor", - "controllable": false - }, - { - "name": "Power supply 2 exhaust temp sensor", + "name": "Front-panel temp sensor", "controllable": false } ], @@ -301,7 +308,7 @@ "interfaces": { "Ethernet0": { "index": "1,1,1,1,1,1,1,1", - "lanes": "9,10,11,12,13,14,15,16", + "lanes": "17,18,19,20,21,22,23,24", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet1/1" @@ -330,7 +337,7 @@ }, "Ethernet8": { "index": "2,2,2,2,2,2,2,2", - "lanes": "5,6,7,8,9,10,11,12", + "lanes": "9,10,11,12,13,14,15,16", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet2/1" @@ -359,7 +366,7 @@ }, "Ethernet16": { "index": "3,3,3,3,3,3,3,3", - "lanes": "25,26,27,28,29,30,31,32", + "lanes": "49,50,51,52,53,54,55,56", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet3/1" @@ -388,7 +395,7 @@ }, "Ethernet24": { "index": "4,4,4,4,4,4,4,4", - "lanes": "17,18,19,20,21,22,23,24", + "lanes": "33,34,35,36,37,38,39,40", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet4/1" @@ -417,7 +424,7 @@ }, "Ethernet32": { "index": "5,5,5,5,5,5,5,5", - "lanes": "41,42,43,44,45,46,47,48", + "lanes": "81,82,83,84,85,86,87,88", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet5/1" @@ -446,7 +453,7 @@ }, "Ethernet40": { "index": "6,6,6,6,6,6,6,6", - "lanes": "33,34,35,36,37,38,39,40", + "lanes": "65,66,67,68,69,70,71,72", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet6/1" @@ -475,7 +482,7 @@ }, "Ethernet48": { "index": "7,7,7,7,7,7,7,7", - "lanes": "57,58,59,60,61,62,63,64", + "lanes": "113,114,115,116,117,118,119,120", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet7/1" @@ -504,7 +511,7 @@ }, "Ethernet56": { "index": "8,8,8,8,8,8,8,8", - "lanes": "49,50,51,52,53,54,55,56", + "lanes": "97,98,99,100,101,102,103,104", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet8/1" @@ -533,7 +540,7 @@ }, "Ethernet64": { "index": "9,9,9,9,9,9,9,9", - "lanes": "73,74,75,76,77,78,79,80", + "lanes": "145,146,147,148,149,150,151,152", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet9/1" @@ -562,7 +569,7 @@ }, "Ethernet72": { "index": "10,10,10,10,10,10,10,10", - "lanes": "65,66,67,68,69,70,71,72", + "lanes": "129,130,131,132,133,134,135,136", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet10/1" @@ -591,7 +598,7 @@ }, "Ethernet80": { "index": "11,11,11,11,11,11,11,11", - "lanes": "89,90,91,92,93,94,95,96", + "lanes": "177,178,179,180,181,182,183,184", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet11/1" @@ -620,7 +627,7 @@ }, "Ethernet88": { "index": "12,12,12,12,12,12,12,12", - "lanes": "81,82,83,84,85,86,87,88", + "lanes": "161,162,163,164,165,166,167,168", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet12/1" @@ -649,7 +656,7 @@ }, "Ethernet96": { "index": "13,13,13,13,13,13,13,13", - "lanes": "105,106,107,108,109,110,111,112", + "lanes": "209,210,211,212,213,214,215,216", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet13/1" @@ -678,7 +685,7 @@ }, "Ethernet104": { "index": "14,14,14,14,14,14,14,14", - "lanes": "97,98,99,100,101,102,103,104", + "lanes": "193,194,195,196,197,198,199,200", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet14/1" @@ -707,7 +714,7 @@ }, "Ethernet112": { "index": "15,15,15,15,15,15,15,15", - "lanes": "121,122,123,124,125,126,127,128", + "lanes": "241,242,243,244,245,246,247,248", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet15/1" @@ -736,7 +743,7 @@ }, "Ethernet120": { "index": "16,16,16,16,16,16,16,16", - "lanes": "117,118,119,120,121,122,123,124", + "lanes": "233,234,235,236,237,238,239,240", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet16/1" @@ -765,7 +772,7 @@ }, "Ethernet128": { "index": "17,17,17,17,17,17,17,17", - "lanes": "141,142,143,144,145,146,147,148", + "lanes": "281,282,283,284,285,286,287,288", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet17/1" @@ -794,7 +801,7 @@ }, "Ethernet136": { "index": "18,18,18,18,18,18,18,18", - "lanes": "129,130,131,132,133,134,135,136", + "lanes": "257,258,259,260,261,262,263,264", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet18/1" @@ -823,7 +830,7 @@ }, "Ethernet144": { "index": "19,19,19,19,19,19,19,19", - "lanes": "153,154,155,156,157,158,159,160", + "lanes": "305,306,307,308,309,310,311,312", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet19/1" @@ -852,7 +859,7 @@ }, "Ethernet152": { "index": "20,20,20,20,20,20,20,20", - "lanes": "145,146,147,148,149,150,151,152", + "lanes": "289,290,291,292,293,294,295,296", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet20/1" @@ -881,7 +888,7 @@ }, "Ethernet160": { "index": "21,21,21,21,21,21,21,21", - "lanes": "169,170,171,172,173,174,175,176", + "lanes": "337,338,339,340,341,342,343,344", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet21/1" @@ -910,7 +917,7 @@ }, "Ethernet168": { "index": "22,22,22,22,22,22,22,22", - "lanes": "161,162,163,164,165,166,167,168", + "lanes": "321,322,323,324,325,326,327,328", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet22/1" @@ -939,7 +946,7 @@ }, "Ethernet176": { "index": "23,23,23,23,23,23,23,23", - "lanes": "185,186,187,188,189,190,191,192", + "lanes": "369,370,371,372,373,374,375,376", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet23/1" @@ -968,7 +975,7 @@ }, "Ethernet184": { "index": "24,24,24,24,24,24,24,24", - "lanes": "177,178,179,180,181,182,183,184", + "lanes": "353,354,355,356,357,358,359,360", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet24/1" @@ -997,7 +1004,7 @@ }, "Ethernet192": { "index": "25,25,25,25,25,25,25,25", - "lanes": "201,202,203,204,205,206,207,208", + "lanes": "401,402,403,404,405,406,407,408", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet25/1" @@ -1026,7 +1033,7 @@ }, "Ethernet200": { "index": "26,26,26,26,26,26,26,26", - "lanes": "193,194,195,196,197,198,199,200", + "lanes": "385,386,387,388,389,390,391,392", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet26/1" @@ -1055,7 +1062,7 @@ }, "Ethernet208": { "index": "27,27,27,27,27,27,27,27", - "lanes": "217,218,219,220,221,222,223,224", + "lanes": "433,434,435,436,437,438,439,440", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet27/1" @@ -1084,7 +1091,7 @@ }, "Ethernet216": { "index": "28,28,28,28,28,28,28,28", - "lanes": "209,210,211,212,213,214,215,216", + "lanes": "417,418,419,420,421,422,423,424", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet28/1" @@ -1113,7 +1120,7 @@ }, "Ethernet224": { "index": "29,29,29,29,29,29,29,29", - "lanes": "233,234,235,236,237,238,239,240", + "lanes": "465,466,467,468,469,470,471,472", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet29/1" @@ -1142,7 +1149,7 @@ }, "Ethernet232": { "index": "30,30,30,30,30,30,30,30", - "lanes": "225,226,227,228,229,230,231,232", + "lanes": "449,450,451,452,453,454,455,456", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet30/1" @@ -1171,7 +1178,7 @@ }, "Ethernet240": { "index": "31,31,31,31,31,31,31,31", - "lanes": "241,242,243,244,245,246,247,248", + "lanes": "481,482,483,484,485,486,487,488", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet31/1" @@ -1200,7 +1207,7 @@ }, "Ethernet248": { "index": "32,32,32,32,32,32,32,32", - "lanes": "253,254,255,256,257,258,259,260", + "lanes": "505,506,507,508,509,510,511,512", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet32/1" @@ -1258,7 +1265,7 @@ }, "Ethernet264": { "index": "34,34,34,34,34,34,34,34", - "lanes": "13,14,15,16,17,18,19,20", + "lanes": "25,26,27,28,29,30,31,32", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet34/1" @@ -1287,7 +1294,7 @@ }, "Ethernet272": { "index": "35,35,35,35,35,35,35,35", - "lanes": "29,30,31,32,33,34,35,36", + "lanes": "57,58,59,60,61,62,63,64", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet35/1" @@ -1316,7 +1323,7 @@ }, "Ethernet280": { "index": "36,36,36,36,36,36,36,36", - "lanes": "21,22,23,24,25,26,27,28", + "lanes": "41,42,43,44,45,46,47,48", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet36/1" @@ -1345,7 +1352,7 @@ }, "Ethernet288": { "index": "37,37,37,37,37,37,37,37", - "lanes": "45,46,47,48,49,50,51,52", + "lanes": "89,90,91,92,93,94,95,96", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet37/1" @@ -1374,7 +1381,7 @@ }, "Ethernet296": { "index": "38,38,38,38,38,38,38,38", - "lanes": "37,38,39,40,41,42,43,44", + "lanes": "73,74,75,76,77,78,79,80", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet38/1" @@ -1403,7 +1410,7 @@ }, "Ethernet304": { "index": "39,39,39,39,39,39,39,39", - "lanes": "61,62,63,64,65,66,67,68", + "lanes": "121,122,123,124,125,126,127,128", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet39/1" @@ -1432,7 +1439,7 @@ }, "Ethernet312": { "index": "40,40,40,40,40,40,40,40", - "lanes": "53,54,55,56,57,58,59,60", + "lanes": "105,106,107,108,109,110,111,112", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet40/1" @@ -1461,7 +1468,7 @@ }, "Ethernet320": { "index": "41,41,41,41,41,41,41,41", - "lanes": "77,78,79,80,81,82,83,84", + "lanes": "153,154,155,156,157,158,159,160", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet41/1" @@ -1490,7 +1497,7 @@ }, "Ethernet328": { "index": "42,42,42,42,42,42,42,42", - "lanes": "69,70,71,72,73,74,75,76", + "lanes": "137,138,139,140,141,142,143,144", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet42/1" @@ -1519,7 +1526,7 @@ }, "Ethernet336": { "index": "43,43,43,43,43,43,43,43", - "lanes": "93,94,95,96,97,98,99,100", + "lanes": "185,186,187,188,189,190,191,192", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet43/1" @@ -1548,7 +1555,7 @@ }, "Ethernet344": { "index": "44,44,44,44,44,44,44,44", - "lanes": "85,86,87,88,89,90,91,92", + "lanes": "169,170,171,172,173,174,175,176", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet44/1" @@ -1577,7 +1584,7 @@ }, "Ethernet352": { "index": "45,45,45,45,45,45,45,45", - "lanes": "109,110,111,112,113,114,115,116", + "lanes": "217,218,219,220,221,222,223,224", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet45/1" @@ -1606,7 +1613,7 @@ }, "Ethernet360": { "index": "46,46,46,46,46,46,46,46", - "lanes": "101,102,103,104,105,106,107,108", + "lanes": "201,202,203,204,205,206,207,208", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet46/1" @@ -1635,7 +1642,7 @@ }, "Ethernet368": { "index": "47,47,47,47,47,47,47,47", - "lanes": "125,126,127,128,129,130,131,132", + "lanes": "249,250,251,252,253,254,255,256", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet47/1" @@ -1664,7 +1671,7 @@ }, "Ethernet376": { "index": "48,48,48,48,48,48,48,48", - "lanes": "113,114,115,116,117,118,119,120", + "lanes": "225,226,227,228,229,230,231,232", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet48/1" @@ -1693,7 +1700,7 @@ }, "Ethernet384": { "index": "49,49,49,49,49,49,49,49", - "lanes": "137,138,139,140,141,142,143,144", + "lanes": "273,274,275,276,277,278,279,280", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet49/1" @@ -1722,7 +1729,7 @@ }, "Ethernet392": { "index": "50,50,50,50,50,50,50,50", - "lanes": "133,134,135,136,137,138,139,140", + "lanes": "265,266,267,268,269,270,271,272", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet50/1" @@ -1751,7 +1758,7 @@ }, "Ethernet400": { "index": "51,51,51,51,51,51,51,51", - "lanes": "157,158,159,160,161,162,163,164", + "lanes": "313,314,315,316,317,318,319,320", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet51/1" @@ -1780,7 +1787,7 @@ }, "Ethernet408": { "index": "52,52,52,52,52,52,52,52", - "lanes": "149,150,151,152,153,154,155,156", + "lanes": "297,298,299,300,301,302,303,304", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet52/1" @@ -1809,7 +1816,7 @@ }, "Ethernet416": { "index": "53,53,53,53,53,53,53,53", - "lanes": "173,174,175,176,177,178,179,180", + "lanes": "345,346,347,348,349,350,351,352", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet53/1" @@ -1838,7 +1845,7 @@ }, "Ethernet424": { "index": "54,54,54,54,54,54,54,54", - "lanes": "165,166,167,168,169,170,171,172", + "lanes": "329,330,331,332,333,334,335,336", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet54/1" @@ -1867,7 +1874,7 @@ }, "Ethernet432": { "index": "55,55,55,55,55,55,55,55", - "lanes": "189,190,191,192,193,194,195,196", + "lanes": "377,378,379,380,381,382,383,384", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet55/1" @@ -1896,7 +1903,7 @@ }, "Ethernet440": { "index": "56,56,56,56,56,56,56,56", - "lanes": "181,182,183,184,185,186,187,188", + "lanes": "361,362,363,364,365,366,367,368", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet56/1" @@ -1925,7 +1932,7 @@ }, "Ethernet448": { "index": "57,57,57,57,57,57,57,57", - "lanes": "205,206,207,208,209,210,211,212", + "lanes": "409,410,411,412,413,414,415,416", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet57/1" @@ -1954,7 +1961,7 @@ }, "Ethernet456": { "index": "58,58,58,58,58,58,58,58", - "lanes": "197,198,199,200,201,202,203,204", + "lanes": "393,394,395,396,397,398,399,400", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet58/1" @@ -1983,7 +1990,7 @@ }, "Ethernet464": { "index": "59,59,59,59,59,59,59,59", - "lanes": "221,222,223,224,225,226,227,228", + "lanes": "441,442,443,444,445,446,447,448", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet59/1" @@ -2012,7 +2019,7 @@ }, "Ethernet472": { "index": "60,60,60,60,60,60,60,60", - "lanes": "213,214,215,216,217,218,219,220", + "lanes": "425,426,427,428,429,430,431,432", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet60/1" @@ -2041,7 +2048,7 @@ }, "Ethernet480": { "index": "61,61,61,61,61,61,61,61", - "lanes": "237,238,239,240,241,242,243,244", + "lanes": "473,474,475,476,477,478,479,480", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet61/1" @@ -2070,7 +2077,7 @@ }, "Ethernet488": { "index": "62,62,62,62,62,62,62,62", - "lanes": "229,230,231,232,233,234,235,236", + "lanes": "457,458,459,460,461,462,463,464", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet62/1" @@ -2099,7 +2106,7 @@ }, "Ethernet496": { "index": "63,63,63,63,63,63,63,63", - "lanes": "249,250,251,252,253,254,255,256", + "lanes": "497,498,499,500,501,502,503,504", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet63/1" @@ -2128,7 +2135,7 @@ }, "Ethernet504": { "index": "64,64,64,64,64,64,64,64", - "lanes": "245,246,247,248,249,250,251,252", + "lanes": "489,490,491,492,493,494,495,496", "breakout_modes": { "1x400G[200G,100G,50G,40G,25G,10G]": [ "Ethernet64/1" @@ -2157,7 +2164,7 @@ }, "Ethernet512": { "index": "65", - "lanes": "258", + "lanes": "515", "breakout_modes": { "1x10G": [ "Ethernet65" @@ -2166,7 +2173,7 @@ }, "Ethernet513": { "index": "66", - "lanes": "257", + "lanes": "513", "breakout_modes": { "1x10G": [ "Ethernet66" diff --git a/device/arista/x86_64-arista_7060dx5_64s/platform_components.json b/device/arista/x86_64-arista_7060dx5_64s/platform_components.json new file mode 100644 index 000000000000..2012dc63aa49 --- /dev/null +++ b/device/arista/x86_64-arista_7060dx5_64s/platform_components.json @@ -0,0 +1,12 @@ +{ + "chassis": { + "DCS-7060DX5-64S": { + "component": { + "Aboot()": {}, + "Scd(addr=0000:00:18.7)": {}, + "Scd(addr=0000:01:00.0)": {}, + "LorikeetSysCpld(addr=13-0023)": {} + } + } + } +} diff --git a/device/arista/x86_64-arista_7060px5_64s/Arista-7060PX5-64S/gearbox_config.json b/device/arista/x86_64-arista_7060px5_64s/Arista-7060PX5-64S/gearbox_config.json index b6d090ec6ef0..853ad935e8c3 100644 --- a/device/arista/x86_64-arista_7060px5_64s/Arista-7060PX5-64S/gearbox_config.json +++ b/device/arista/x86_64-arista_7060px5_64s/Arista-7060PX5-64S/gearbox_config.json @@ -5,7 +5,7 @@ "name": "phy1_1", "address": "1", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy1_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -18,7 +18,7 @@ "name": "phy1_2", "address": "2", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy2_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -31,7 +31,7 @@ "name": "phy2_1", "address": "3", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy3_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -44,7 +44,7 @@ "name": "phy2_2", "address": "4", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy4_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -57,7 +57,7 @@ "name": "phy3_1", "address": "5", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy5_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -70,7 +70,7 @@ "name": "phy3_2", "address": "6", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy6_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -83,7 +83,7 @@ "name": "phy4_1", "address": "7", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy7_config.json", "sai_init_config_file": "", "phy_access": "mdio", @@ -96,7 +96,7 @@ "name": "phy4_2", "address": "8", "lib_name": "", - "firmware_path": "/usr/etc/credo/firmware/blackhawk.lz4.fw.0.1.17.bin", + "firmware_path": "/usr/etc/credo/firmware/bh.lz4.fw.1.5.5.bin", "config_file": "/usr/share/sonic/hwsku/phy8_config.json", "sai_init_config_file": "", "phy_access": "mdio", diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm index eecb986fdb45..f9dc4cea1df0 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm @@ -1947,7 +1947,7 @@ device: THRESHOLD_MODE: LOSSY_AND_LOSSLESS TM_SCHEDULER_CONFIG: - NUM_MC_Q: NUM_MC_Q_2 + NUM_MC_Q: NUM_MC_Q_4 ... @@ -2144,7 +2144,7 @@ device: TM_PORT_MC_Q_TO_SERVICE_POOL: ? PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] - TM_MC_Q_ID: [[0,1]] + TM_MC_Q_ID: [[0,3]] : USE_QGROUP_MIN: 0 @@ -2161,7 +2161,7 @@ device: ? # uplink, downlink and loopback ports, 2 MC queues PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] - TM_MC_Q_ID: [[0,1]] + TM_MC_Q_ID: [[0,3]] : MIN_GUARANTEE_CELLS: 0 SHARED_LIMITS: 1 @@ -2622,7 +2622,7 @@ device: TM_PORT_UC_Q_TO_SERVICE_POOL: ? PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] - TM_UC_Q_ID: [0,1,2,5,6,8,9] + TM_UC_Q_ID: [0,1,2,5,6] : USE_QGROUP_MIN: 0 TM_EGR_SERVICE_POOL_ID: 0 @@ -2648,7 +2648,7 @@ device: TM_EGR_SERVICE_POOL_ID: 1 ? PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] - TM_MC_Q_ID: [[0,1]] + TM_MC_Q_ID: [[0,3]] : USE_QGROUP_MIN: 0 TM_EGR_SERVICE_POOL_ID: 0 @@ -2676,23 +2676,6 @@ device: YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 RED_LIMIT_CELLS_STATIC: 0 RED_LIMIT_DYNAMIC: PERCENTAGE_625 - ? - PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] - TM_UC_Q_ID: [8,9] - : - MIN_GUARANTEE_CELLS: 0 - SHARED_LIMITS: 1 - DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_CELLS_STATIC: 0 - SHARED_LIMIT_DYNAMIC: ALPHA_1 - DYNAMIC_GROUP: MID_PRI_GROUP - RESUME_OFFSET_CELLS: 2 - COLOR_SPECIFIC_LIMITS: 0 - COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 - YELLOW_LIMIT_CELLS_STATIC: 0 - YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 - RED_LIMIT_CELLS_STATIC: 0 - RED_LIMIT_DYNAMIC: PERCENTAGE_625 ? PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] TM_UC_Q_ID: [3,4] @@ -2724,23 +2707,6 @@ device: YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 RED_LIMIT_CELLS_STATIC: 0 RED_LIMIT_DYNAMIC: PERCENTAGE_625 - ? - PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] - TM_UC_Q_ID: [8,9] - : - MIN_GUARANTEE_CELLS: 0 - SHARED_LIMITS: 1 - DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_CELLS_STATIC: 0 - SHARED_LIMIT_DYNAMIC: ALPHA_1 - DYNAMIC_GROUP: MID_PRI_GROUP - RESUME_OFFSET_CELLS: 2 - COLOR_SPECIFIC_LIMITS: 0 - COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 - YELLOW_LIMIT_CELLS_STATIC: 0 - YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 - RED_LIMIT_CELLS_STATIC: 0 - RED_LIMIT_DYNAMIC: PERCENTAGE_625 ? PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] TM_UC_Q_ID: [3,4] @@ -2778,7 +2744,7 @@ device: RESUME_OFFSET_CELLS: 2 ? PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] - TM_MC_Q_ID: [0,1] + TM_MC_Q_ID: [0,3] SHARED_LIMIT_DYNAMIC: ALPHA_2 : SHARED_LIMITS: 1 diff --git a/device/arista/x86_64-arista_7800_sup/chassisdb.conf b/device/arista/x86_64-arista_7800_sup/chassisdb.conf index ebf71d01b165..f336d0cdb994 100644 --- a/device/arista/x86_64-arista_7800_sup/chassisdb.conf +++ b/device/arista/x86_64-arista_7800_sup/chassisdb.conf @@ -3,4 +3,4 @@ chassis_db_address=127.100.1.1 midplane_subnet=127.100.0.0/16 lag_id_start=1 -lag_id_end=1024 +lag_id_end=1023 diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 index b036683d1dba..38ee97c304e8 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 @@ -22,7 +22,7 @@ "size": "6441610000", "type": "both", "mode": "dynamic", - "xoff": "20761804" + "xoff": "1056256819" } }, "BUFFER_PROFILE": { diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/services.conf b/device/arista/x86_64-arista_7800r3_48cq2_lc/services.conf new file mode 100644 index 000000000000..2a0a236a8afe --- /dev/null +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/services.conf @@ -0,0 +1 @@ +startup_tsa_tsb.service diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/startup-tsa-tsb.conf b/device/arista/x86_64-arista_7800r3_48cq2_lc/startup-tsa-tsb.conf new file mode 100644 index 000000000000..150337493256 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/startup-tsa-tsb.conf @@ -0,0 +1 @@ +STARTUP_TSB_TIMER=900 diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/services.conf b/device/arista/x86_64-arista_7800r3_48cqm2_lc/services.conf new file mode 100644 index 000000000000..2a0a236a8afe --- /dev/null +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/services.conf @@ -0,0 +1 @@ +startup_tsa_tsb.service diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/startup-tsa-tsb.conf b/device/arista/x86_64-arista_7800r3_48cqm2_lc/startup-tsa-tsb.conf new file mode 100644 index 000000000000..150337493256 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/startup-tsa-tsb.conf @@ -0,0 +1 @@ +STARTUP_TSB_TIMER=900 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/services.conf b/device/arista/x86_64-arista_7800r3a_36d2_lc/services.conf new file mode 100644 index 000000000000..2a0a236a8afe --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/services.conf @@ -0,0 +1 @@ +startup_tsa_tsb.service diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/startup-tsa-tsb.conf b/device/arista/x86_64-arista_7800r3a_36d2_lc/startup-tsa-tsb.conf new file mode 100644 index 000000000000..150337493256 --- /dev/null +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/startup-tsa-tsb.conf @@ -0,0 +1 @@ +STARTUP_TSB_TIMER=900 diff --git a/device/arista/x86_64-arista_common/pmon_daemon_control_linecard.json b/device/arista/x86_64-arista_common/pmon_daemon_control_linecard.json index e31cf596f380..a5d08afdc367 100644 --- a/device/arista/x86_64-arista_common/pmon_daemon_control_linecard.json +++ b/device/arista/x86_64-arista_common/pmon_daemon_control_linecard.json @@ -1,5 +1,6 @@ { "skip_fancontrol": true, - "skip_pcied": true + "skip_pcied": true, + "enable_xcvrd_sff_mgr": true } diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b27/broadcom-sonic-td3.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b27/broadcom-sonic-td3.config.bcm new file mode 100644 index 000000000000..18009ef9f3e7 --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b27/broadcom-sonic-td3.config.bcm @@ -0,0 +1,9 @@ +[Low Inheritance Precedence] +mem_cache_enable=1 +l3_mem_entries=16384 +l3_alpm_enable=0 +riot_enable=0 +l2xmsg_mode=1 +l2_mem_entries=32768 +lpm_scaling_enable=0 +ipv6_lpm_128b_enable=0x1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b37/broadcom-sonic-td3.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b37/broadcom-sonic-td3.config.bcm new file mode 100644 index 000000000000..574ba37ba09c --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b37/broadcom-sonic-td3.config.bcm @@ -0,0 +1,25 @@ +[Low Inheritance Precedence] +sai_tunnel_support=1 +flow_init_mode=1 +riot_enable=1 +vlan_xlate_1_mem_entries=16384 +vlan_xlate_2_mem_entries=2048 +mem_cache_enable=1 +sai_load_hw_config=/usr/lib/cancun/ +l2_entry_used_as_my_station=1 +core_clock_frequency=893 +use_all_splithorizon_groups=1 +riot_overlay_l3_intf_mem_size=4096 +riot_overlay_l3_egress_mem_size=8192 +l3_ecmp_levels=2 +riot_overlay_ecmp_resilient_hash_size=16384 +mpls_mem_entries=2048 +sai_fast_convergence_support=1 +bcm_num_cos=8 +sai_brcm_sonic_trap_group=1 +host_as_route_disable=1 +multi_hash_recurse_depth_l3=6 +sai_stats_support_mask=0x1 + +# CPU Tx HW replication +sai_hostif_netif_iff_up_set=1 diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b77/broadcom-sonic-td3.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b77/broadcom-sonic-td3.config.bcm index 9dc71f839d16..0f71fda24322 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b77/broadcom-sonic-td3.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b77/broadcom-sonic-td3.config.bcm @@ -1,12 +1,32 @@ -mem_cache_enable=0 +[Low Inheritance Precedence] +mem_cache_enable=1 +flow_init_mode=1 +mpls_mem_entries=16384 +vlan_xlate_1_mem_entries=65536 +vlan_xlate_2_mem_entries=16384 +riot_enable=1 ifp_inports_support_enable=1 ipv6_lpm_128b_enable=0x1 l3_max_ecmp_mode=1 lpm_scaling_enable=0 bcm_num_cos=10 -default_cpu_tx_queue=9 mmu_lossless=0 host_as_route_disable=1 sai_eapp_config_file=/etc/broadcom/eapps_cfg.json sai_fast_convergence_support=1 -flow_init_mode=1 +sai_load_hw_config=/usr/lib/cancun/ +sai_nbr_bcast_ifp_optimized=1 +sai_brcm_sonic_acl_enhancements=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 +l2_entry_used_as_my_station=1 +multi_hash_recurse_depth_l3=3 +sai_stats_support_mask=0x1 + +#l3 common setting +riot_overlay_ecmp_resilient_hash_size=16384 +riot_overlay_l3_egress_mem_size=32768 +riot_overlay_l3_intf_mem_size=8192 + +l3_alpm_ipv6_128b_bkt_rsvd=1 +l3_ecmp_levels=2 diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b78/broadcom-sonic-td4.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b78/broadcom-sonic-td4.config.bcm new file mode 100644 index 000000000000..55f78671c2e9 --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b78/broadcom-sonic-td4.config.bcm @@ -0,0 +1,19 @@ +[Low Inheritance Precedence] +sai_tunnel_support: 1 +riot_enable: 1 +pktio_mode: 1 +vlan_flooding_l2mc_num_reserved: 0 +shared_block_mask_section: uc_bc +ctr_evict_enable: 0 +sai_brcm_sonic_acl_enhancements: 1 +sai_field_group_auto_prioritize: 1 +sai_modify_hash_flexdigest: 1 +sai_fast_convergence_support: 1 +sai_port_queue_ecn_counter: 1 +l2_table_default_view: 1 +flexctr_action_reserved_ipmc_hitbit: 1 +default_cpu_tx_queue: 7 +max_vp_lags: 1024 +multi_network_groups: 1 +bcm_tunnel_term_compatible_mode: 1 +use_all_splithorizon_groups: 1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b85/broadcom-sonic-td2.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b85/broadcom-sonic-td2.config.bcm index 01d767530da3..3093c2fce147 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b85/broadcom-sonic-td2.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b85/broadcom-sonic-td2.config.bcm @@ -1,6 +1,10 @@ +[Low Inheritance Precedence] mmu_lossless=0 #PTP -num_queues_pci=24 +num_queues_pci=30 num_queues_uc0=1 num_queues_uc1=19 sai_fast_convergence_support=1 +sai_nbr_bcast_ifp_optimized=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b87/broadcom-sonic-td3.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b87/broadcom-sonic-td3.config.bcm index 1439c8d875a5..84cc04f9e295 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b87/broadcom-sonic-td3.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b87/broadcom-sonic-td3.config.bcm @@ -1,8 +1,53 @@ -mem_cache_enable=0 +[Low Inheritance Precedence] +mem_cache_enable=1 +mpls_mem_entries=16384 +vlan_xlate_1_mem_entries=65536 +vlan_xlate_2_mem_entries=16384 +flow_init_mode=1 +sai_tunnel_support=1 ifp_inports_support_enable=1 ipv6_lpm_128b_enable=0x1 l3_max_ecmp_mode=1 lpm_scaling_enable=0 bcm_num_cos=10 -default_cpu_tx_queue=9 mmu_lossless=0 +sai_nbr_bcast_ifp_optimized=1 +l2_entry_used_as_my_station=1 +multi_hash_recurse_depth_l3=3 +# Drop monitor and IFA configuration +flowtracker_enable=2 +flowtracker_max_flows=48000 +flowtracker_drop_monitor_enable=1 +flowtracker_export_interval_usecs=1000000 +flowtracker_max_export_pkt_length=9000 +flowtracker_fsp_reinject_max_length=128 +host_as_route_disable=1 +num_queues_pci=46 +num_queues_uc0=1 +num_queues_uc1=1 +sai_eapp_config_file=/etc/broadcom/eapps_cfg.json +ifa_enable=1 +sai_load_hw_config=/usr/lib/cancun/ +sai_fast_convergence_support=1 +sai_brcm_sonic_acl_enhancements=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 +sai_stats_support_mask=0x1 + +# MMU Lossless configurations +sai_optimized_mmu=1 +sai_mmu_tc_to_pg_config=1 +buf.map.egress_pool0.ingress_pool=0 +buf.map.egress_pool1.ingress_pool=0 +buf.map.egress_pool2.ingress_pool=1 + +#Tunnels +use_all_splithorizon_groups=1 +bcm_tunnel_term_compatible_mode=1 + +#RIOT Enable +riot_enable=1 +riot_overlay_l3_intf_mem_size=8192 +riot_overlay_l3_egress_mem_size=32768 +l3_ecmp_levels=2 +riot_overlay_ecmp_resilient_hash_size=16384 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b88/broadcom-sonic-td4.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b88/broadcom-sonic-td4.config.bcm new file mode 100644 index 000000000000..39d8492228fe --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b88/broadcom-sonic-td4.config.bcm @@ -0,0 +1,18 @@ +[Low Inheritance Precedence] +sai_tunnel_support: 1 +l2_table_default_view: 1 +riot_enable: 1 +pktio_mode: 1 +vlan_flooding_l2mc_num_reserved: 0 +shared_block_mask_section: uc_bc +ctr_evict_enable: 0 +sai_brcm_sonic_acl_enhancements: 1 +sai_field_group_auto_prioritize: 1 +sai_modify_hash_flexdigest: 1 +sai_fast_convergence_support: 1 +sai_port_queue_ecn_counter: 1 +flexctr_action_reserved_ipmc_hitbit: 1 +default_cpu_tx_queue: 7 +multi_network_groups: 1 +bcm_tunnel_term_compatible_mode: 1 +use_all_splithorizon_groups: 1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b96/broadcom-sonic-th.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b96/broadcom-sonic-th.config.bcm index e8b5b7d88517..48c1330831e2 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b96/broadcom-sonic-th.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b96/broadcom-sonic-th.config.bcm @@ -1,9 +1,13 @@ +[Low Inheritance Precedence] mmu_lossless=0 bcm_num_cos=10 default_cpu_tx_queue=9 #PTP -num_queues_pci=24 +num_queues_pci=30 num_queues_uc0=1 num_queues_uc1=1 sai_fast_convergence_support=1 - +sai_nbr_bcast_ifp_optimized=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 +sai_stats_support_mask=0x1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b97/broadcom-sonic-th2.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b97/broadcom-sonic-th2.config.bcm index 039932b58f20..b9c9474190da 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b97/broadcom-sonic-th2.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b97/broadcom-sonic-th2.config.bcm @@ -1,5 +1,8 @@ -schan_intr_enable=0 +[Low Inheritance Precedence] l2xmsg_mode=1 +max_vp_lags=0 +flow_init_mode=1 +schan_intr_enable=0 mmu_lossless=0 arl_clean_timeout_usec=15000000 asf_mem_profile=2 @@ -9,12 +12,10 @@ cdma_timeout_usec=15000000 dma_desc_timeout_usec=15000000 ipv6_lpm_128b_enable=1 lpm_scaling_enable=0 -max_vp_lags=0 miim_intr_enable=0 module_64ports=1 oversubscribe_mode=1 bcm_num_cos=10 -default_cpu_tx_queue=9 # Drop monitor configuration flowtracker_enable=2 flowtracker_max_flows=48000 @@ -22,10 +23,12 @@ flowtracker_drop_monitor_enable=1 flowtracker_export_interval_usecs=1000000 flowtracker_max_export_pkt_length=9000 flowtracker_fsp_reinject_max_length=128 -flow_init_mode=1 num_queues_pci=46 num_queues_uc0=1 num_queues_uc1=1 sai_eapp_config_file=/etc/broadcom/eapps_cfg.json sai_fast_convergence_support=1 - +sai_nbr_bcast_ifp_optimized=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 +sai_stats_support_mask=0x1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b98/broadcom-sonic-th3.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b98/broadcom-sonic-th3.config.bcm index 460fb5186b4a..4dad54ceb1a4 100644 --- a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b98/broadcom-sonic-th3.config.bcm +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b98/broadcom-sonic-th3.config.bcm @@ -1,10 +1,12 @@ +[Low Inheritance Precedence] +l2xmsg_mode.0=1 +flow_init_mode=1 phy_null=1 pll_bypass=1 core_clock_frequency=1325 dpr_clock_frequency=1000 device_clock_frequency=1325 port_flex_enable=1 -l2xmsg_mode.0=1 mmu_port_num_mc_queue.0=1 module_64ports.0=1 multicast_l2_range.0=511 @@ -19,10 +21,14 @@ flowtracker_drop_monitor_enable=1 flowtracker_export_interval_usecs=1000000 flowtracker_max_export_pkt_length=9000 flowtracker_fsp_reinject_max_length=128 -flow_init_mode=1 num_queues_pci=46 num_queues_uc0=1 num_queues_uc1=1 sai_eapp_config_file=/etc/broadcom/eapps_cfg.json sai_fast_convergence_support=1 +sai_nbr_bcast_ifp_optimized=1 +# Reduced Trap Group QSET for BRCM Sonic +sai_brcm_sonic_trap_group=1 +# MMU Lossless configurations +sai_optimized_mmu=1 \ No newline at end of file diff --git a/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b99/broadcom-sonic-th4.config.bcm b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b99/broadcom-sonic-th4.config.bcm new file mode 100644 index 000000000000..90954d6332fe --- /dev/null +++ b/device/broadcom/x86_64-broadcom_common/x86_64-broadcom_b99/broadcom-sonic-th4.config.bcm @@ -0,0 +1,19 @@ +[Low Inheritance Precedence] +sai_tunnel_support: 2 +#System Configs +pktio_mode: 1 +pfc_deadlock_seq_control : 1 +default_cpu_tx_queue: 7 +vlan_flooding_l2mc_num_reserved: 0 +shared_block_mask_section: uc_bc + +#L3 Configs +ipv6_lpm_128b_enable: 1 +skip_protocol_default_entries: 1 +l3_alpm_template: 1 +l3_alpm_hit_skip: 1 +l3_ecmp_member_first_lkup_mem_size: 12288 +l3_intf_vlan_split_egress : 1 +bcm_tunnel_term_compatible_mode: 1 +sai_field_group_auto_prioritize: 1 +sai_port_queue_ecn_counter: 1 diff --git a/device/celestica/x86_64-cel_midstone-r0/platform_asic b/device/celestica/x86_64-cel_midstone-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/celestica/x86_64-cel_midstone-r0/platform_asic +++ b/device/celestica/x86_64-cel_midstone-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/delta/x86_64-delta_agc032-r0/platform_asic b/device/delta/x86_64-delta_agc032-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/delta/x86_64-delta_agc032-r0/platform_asic +++ b/device/delta/x86_64-delta_agc032-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..b9aabeb8706b --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +e48527ad3f7bc5db09ec1fe078eba9a1 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.xml new file mode 100644 index 000000000000..80434c00be65 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-Board-F3_2T-128x25G.xml @@ -0,0 +1,3990 @@ + + + + + + std-string + string + standard string. + 1 + 100 + + + board-callback-type + enumeration + Specifies os/ext drv callback types. + + linux-static + Linux Static + 0 + + + linux-shared + Linux Shared Lib mode + 1 + + + external + External Os + 3 + + + freeBsd + Free BSD + 4 + + + + board-pp-map-type + enumeration + Specifies pci info types. + + fixed + Fixed + 0 + + + autoscan + Auto scan + 1 + + + + board-pp-interface-channel-type + enumeration + Specifies channel interface type. + + pci + PCI + 0 + + + smi + SMI + 1 + + + twsi + TWSI + 2 + + + + board-pp-as-type + enumeration + Specifies Address space type. + + 4_regions + address-space 4 regions + 0 + + + 8_regions + address-space 8 regions + 1 + + + atu + address translation unit + 2 + + + + device-id-type + uint32 + Device ID 0..1 + 0 + 1 + + + port-mapping-type + enumeration + Specifies port map type. + + ethernet_mac + ETHERNET_MAC + 0 + + + cpu_sdma + CPU_SDMA + 1 + + + + interface-num-type + uint32 + Interface number + 0 + 1023 + + + txq-port-number-type + uint32 + TXq port number + 0 + 99 + + + phy-smi-interface-type + uint32 + Phy SMI interface type. + 0 + 3 + + + phy-xsmi-interface-type + uint32 + Phy XSMI interface type. + 0 + 15 + + + phy-type + enumeration + Specifies the PHY Part Identifier. + + NA + No Phy + 0 + + + alaska-88E1680 + Specifies PHY identifier 88E1680, used for Copper with speeds of 10M/100M/1G. + 1 + + + alaska-88E1780 + Specifies PHY identifier 88E1780, Integrated Octal 10/100/1000 Mbps Energy +Efficient Ethernet Transceiver + 2 + + + alaska-88E2540 + Specifies PHY identifier 88E2540, 4 ports 10/100/1000/2.5G/5GBASE-T Ethernet +Transceiver with IEEE 1588v2 PTP Support + 3 + + + alaska-88E2580 + Specifies PHY identifier 88E2580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 4 + + + alaska-88E2780 + Specifies PHY identifier 88E2780, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 5 + + + + physical-port-num-type + uint32 + PHYSICAL PORT NUM + 0 + 1023 + + + led-stream-port-type + enumeration + Specifies the ledstream port type. + + PORT_TYPE_TRI_SPEED + tri-speed port. + 1 + + + PORT_TYPE_XG + XG port. + 2 + + + + led-stream-blink-select-type + enumeration + Specifies the LED stream blink select type. + + BLINK_SELECT_0 + Blink 0 signal. + 1 + + + BLINK_SELECT_1 + Blink 1 signal + 2 + + + + led-stream-order-mode-type + enumeration + Specifies the LED stream ordering mode. + + ORDER_MODE_BY_PORT + the indication order is arranged by port. + 1 + + + ORDER_MODE_BY_CLASS + the indication order is arranged by class. + 2 + + + + led-stream-blink-duty-cycle-type + enumeration + Specifies the LED stream blink cycle duty cycle type. + + BLINK_DUTY_CYCLE_0 + 25% on, 75% off. + 1 + + + BLINK_DUTY_CYCLE_1 + 50% on, 50% off. + 2 + + + BLINK_DUTY_CYCLE_2 + 50% on, 50% off. + 3 + + + BLINK_DUTY_CYCLE_3 + 75% on, 25% off. + 4 + + + + led-stream-blink-duration-type + enumeration + Specifies the LED stream blink period type. + + BLINK_DURATION_0 + BLINK_DURATION_0. + 1 + + + BLINK_DURATION_1 + BLINK_DURATION_1. + 2 + + + BLINK_DURATION_2 + BLINK_DURATION_2. + 3 + + + BLINK_DURATION_3 + BLINK_DURATION_3. + 4 + + + BLINK_DURATION_4 + BLINK_DURATION_4. + 5 + + + BLINK_DURATION_5 + BLINK_DURATION_5. + 6 + + + BLINK_DURATION_6 + (APPLICABLE DEVICES: xCat3; AC5; Lion2; Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Pipe) . + 7 + + + BLINK_DURATION_7 + APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Pipe). + 8 + + + + led-stream-pulse-stretch-type + enumeration + Specifies the LED stream length of stretching for dynamic signals. + + PULSE_STRETCH_0_NO + PULSE_STRETCH_0_NO. + 1 + + + PULSE_STRETCH_1 + PULSE_STRETCH_1. + 2 + + + PULSE_STRETCH_2 + PULSE_STRETCH_2. + 3 + + + PULSE_STRETCH_3 + PULSE_STRETCH_3. + 4 + + + PULSE_STRETCH_4 + PULSE_STRETCH_4. + 5 + + + PULSE_STRETCH_5 + PULSE_STRETCH_5. + 6 + + + PULSE_STRETCH_6 + (APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Falcon; AC5P; Pipe). + 7 + + + PULSE_STRETCH_7 + (APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Falcon; AC5P; Pipe). + 8 + + + + led-stream-clock-out-frequency-type + enumeration + Specifies the LED stream blink cycle duty cycle type. + + _CLOCK_OUT_FREQUENCY_500 + 500 KHz LED clock frequency. + 1 + + + CLOCK_OUT_FREQUENCY_1000 + 1 MHz LED clock frequency. + 2 + + + CLOCK_OUT_FREQUENCY_2000 + 2 MHz LED clock frequency. + 3 + + + CLOCK_OUT_FREQUENCY_3000 + 3 MHz LED clock frequency. + 4 + + + + led-stream-class5-select-type + enumeration + Specifies the LED stream indication displayed on class5 (for dual-media port/phy). + + CLASS_5_SELECT_HALF_DUPLEX + Half Duplex is displayed on class5. + 1 + + + CLASS_5_SELECT_FIBER_LINK_UP + If port is a dual media port, Fiber Link Up is displayed on class5. + 2 + + + + led-stream-class13-select-type + enumeration + Specifies the LED stream indication displayed on class13 (for dual-media port/phy). + + CLASS_13_SELECT_LINK_DOWN + Link Down is displayed on class13. + 1 + + + CLASS_13_SELECT_COPPER_LINK_UP + If port is a dual media port, Copper Link Up is displayed on class13. + 2 + + + + led-class-num-type + uint32 + Led Class number + 0 + 11 + + + boolean-type + enumeration + Boolean 32 bits , due to bing endian + + false + False + 0 + + + true + True + 1 + + + + bus-id-type + uint32 + Bus Id Type, PCI/SMI + 0 + 255 + + + function-id-type + uint32 + Function Id Type, PCI/SMI + 0 + 255 + + + domain-type + uint32 + Domain, PCI/SMI + 0 + 255 + + + led-interface-type + uint32 + Led interface + 0 + 255 + + + led-position-type + uint32 + Led position + 0 + 63 + + + serdes-lane-type + uint32 + serdes lane + 0 + 7 + + + cpu-type + enumeration + The CPU Internal/External + + external + Extrenal connected CPU + 0 + + + internal + Internal CPU + 1 + + + + led-stream-clock-frequency-type + uint32 + Led Clock Frequency Sip6 + 500 + 80000 + + + led-unit-type + uint32 + Led units + 1 + 16 + + + led-unit-or-no-unit-type + uint32 + Led units, 0 for no Unit + 0 + 16 + + + led-group-type + uint32 + Led Group + 0 + 1 + + + led-stream-force-data-type + string + A hexadecimal string with octets represented as hex digits +separated by colons. The canonical representation uses +lowercase characters. + 3 + 11 + + + bit-type + uint32 + Bit range 0..31 + 0 + 31 + + + bit-size-type + uint32 + Bit leng 1..32 + 1 + 32 + + + led-sip-type + enumeration + The LED scehme + + na + NA + 0 + + + sip5 + SIP5: AC3x + 5 + + + sip6 + SIP6: Falcon, AC5x + 6 + + + + port-cscd-type + enumeration + Specifies the cascade port type. + + DSA_1_WORD + DSA Regular + 0 + + + DSA_2_WORDS + DSA Extended + 1 + + + NETWORK + Network. + 2 + + + DSA_3_WORDS + DSA 3 Words + 3 + + + DSA_4_WORD + DSA 4 Words + 4 + + + + trunk-cscd-type + uint32 + Specifies the Cascade Trunk id. + 0 + 127 + + + port-trunk-cscd-type + enumeration + Specifies the cascade port type. + + cscdPort + Cascade port + 0 + + + cscdTrunk + Csacde trunk + 1 + + + + hash-cscd-type + enumeration + Specifies the hash used by cascade trunk. + + pkt + Hash based on packet + 0 + + + srcPort + Hash based on source port + 1 + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + mpp-num-type + uint8 + Specifies the MPP pin number. + 0 + 63 + + + mpp-select-type + uint8 + Specifies the MPP pin value. + 0 + 15 + + + ASIC_Falcon + Falcon-3.2T-128x25G + linux-static + linux-static + autoscan + external + pci + atu + + 0 + 0 + ASK-PP-F3_2T-128x25G.xml + ASK-L1-F3_2T-128x25G.xml + sip6 + + 0 + + ethernet_mac + 0 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 1 + + ethernet_mac + 1 + false + + + NA + + + + false + + + + 2 + + ethernet_mac + 2 + false + + + NA + + + + false + + + + 3 + + ethernet_mac + 3 + false + + + NA + + + + false + + + + 4 + + ethernet_mac + 4 + false + + + NA + + + + + 2 + true + + false + + + + 5 + + ethernet_mac + 5 + false + + + NA + + + + false + + + + 6 + + ethernet_mac + 6 + false + + + NA + + + + false + + + + 7 + + ethernet_mac + 7 + false + + + NA + + + + false + + + + 8 + + ethernet_mac + 8 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 9 + + ethernet_mac + 9 + false + + + NA + + + + + 2 + true + + false + + + + 10 + + ethernet_mac + 10 + false + + + NA + + + + + 2 + true + + false + + + + 11 + + ethernet_mac + 11 + false + + + NA + + + + + 2 + true + + false + + + + 12 + + ethernet_mac + 12 + false + + + NA + + + + + 2 + true + + false + + + + 13 + + ethernet_mac + 13 + false + + + NA + + + + + 2 + true + + false + + + + 14 + + ethernet_mac + 14 + false + + + NA + + + + + 2 + true + + false + + + + 15 + + ethernet_mac + 15 + false + + + NA + + + + + 2 + true + + false + + + + 16 + + ethernet_mac + 16 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 17 + + ethernet_mac + 17 + false + + + NA + + + + + 2 + true + + false + + + + 18 + + ethernet_mac + 18 + false + + + NA + + + + + 2 + true + + false + + + + 19 + + ethernet_mac + 19 + false + + + NA + + + + + 2 + true + + false + + + + 20 + + ethernet_mac + 20 + false + + + NA + + + + + 2 + true + + false + + + + 21 + + ethernet_mac + 21 + false + + + NA + + + + + 2 + true + + false + + + + 22 + + ethernet_mac + 22 + false + + + NA + + + + + 2 + true + + false + + + + 23 + + ethernet_mac + 23 + false + + + NA + + + + + 2 + true + + false + + + + 24 + + ethernet_mac + 24 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 25 + + ethernet_mac + 25 + false + + + NA + + + + + 2 + true + + false + + + + 26 + + ethernet_mac + 26 + false + + + NA + + + + + 2 + true + + false + + + + 27 + + ethernet_mac + 27 + false + + + NA + + + + + 2 + true + + false + + + + 28 + + ethernet_mac + 28 + false + + + NA + + + + + 2 + true + + false + + + + 29 + + ethernet_mac + 29 + false + + + NA + + + + + 2 + true + + false + + + + 30 + + ethernet_mac + 30 + false + + + NA + + + + + 2 + true + + false + + + + 31 + + ethernet_mac + 31 + false + + + NA + + + + + 2 + true + + false + + + + 32 + + ethernet_mac + 32 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 33 + + ethernet_mac + 33 + false + + + NA + + + + + 2 + true + + false + + + + 34 + + ethernet_mac + 34 + false + + + NA + + + + + 2 + true + + false + + + + 35 + + ethernet_mac + 35 + false + + + NA + + + + + 2 + true + + false + + + + 36 + + ethernet_mac + 36 + false + + + NA + + + + + 2 + true + + false + + + + 37 + + ethernet_mac + 37 + false + + + NA + + + + + 2 + true + + false + + + + 38 + + ethernet_mac + 38 + false + + + NA + + + + + 2 + true + + false + + + + 39 + + ethernet_mac + 39 + false + + + NA + + + + + 2 + true + + false + + + + 40 + + ethernet_mac + 40 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 41 + + ethernet_mac + 41 + false + + + NA + + + + + 2 + true + + false + + + + 42 + + ethernet_mac + 42 + false + + + NA + + + + + 2 + true + + false + + + + 43 + + ethernet_mac + 43 + false + + + NA + + + + + 2 + true + + false + + + + 44 + + ethernet_mac + 44 + false + + + NA + + + + + 2 + true + + false + + + + 45 + + ethernet_mac + 45 + false + + + NA + + + + + 2 + true + + false + + + + 46 + + ethernet_mac + 46 + false + + + NA + + + + + 2 + true + + false + + + + 47 + + ethernet_mac + 47 + false + + + NA + + + + + 2 + true + + false + + + + 48 + + ethernet_mac + 48 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 49 + + ethernet_mac + 49 + false + + + NA + + + + + 2 + true + + false + + + + 50 + + ethernet_mac + 50 + false + + + NA + + + + + 2 + true + + false + + + + 51 + + ethernet_mac + 51 + false + + + NA + + + + + 2 + true + + false + + + + 52 + + ethernet_mac + 52 + false + + + NA + + + + + 2 + true + + false + + + + 53 + + ethernet_mac + 53 + false + + + NA + + + + + 2 + true + + false + + + + 54 + + ethernet_mac + 54 + false + + + NA + + + + + 2 + true + + false + + + + 55 + + ethernet_mac + 55 + false + + + NA + + + + + 2 + true + + false + + + + 56 + + ethernet_mac + 56 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 57 + + ethernet_mac + 57 + false + + + NA + + + + + 2 + true + + false + + + + 58 + + ethernet_mac + 58 + false + + + NA + + + + + 2 + true + + false + + + + 59 + + ethernet_mac + 59 + false + + + NA + + + + + 2 + true + + false + + + + 60 + + ethernet_mac + 60 + false + + + NA + + + + + 2 + true + + false + + + + 64 + + ethernet_mac + 61 + false + + + NA + + + + + 2 + true + + false + + + + 65 + + ethernet_mac + 62 + false + + + NA + + + + + 2 + true + + false + + + + 66 + + ethernet_mac + 63 + false + + + NA + + + + + 2 + true + + false + + + + 67 + + ethernet_mac + 64 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 68 + + ethernet_mac + 65 + false + + + NA + + + + + 2 + true + + false + + + + 69 + + ethernet_mac + 66 + false + + + NA + + + + + 2 + true + + false + + + + 70 + + ethernet_mac + 67 + false + + + NA + + + + + 2 + true + + false + + + + 130 + + ethernet_mac + 127 + false + + + NA + + + + + 2 + true + + false + + + + 129 + + ethernet_mac + 126 + false + + + NA + + + + + 2 + true + + false + + + + 128 + + ethernet_mac + 125 + false + + + NA + + + + + 2 + true + + false + + + + 127 + + ethernet_mac + 124 + false + + + NA + + + + + 2 + true + + false + + + + 126 + + ethernet_mac + 123 + false + + + NA + + + + + 2 + true + + false + + + + 125 + + ethernet_mac + 122 + false + + + NA + + + + + 2 + true + + false + + + + 124 + + ethernet_mac + 121 + false + + + NA + + + + + 2 + true + + false + + + + 123 + + ethernet_mac + 120 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 122 + + ethernet_mac + 119 + false + + + NA + + + + + 2 + true + + false + + + + 121 + + ethernet_mac + 118 + false + + + NA + + + + + 2 + true + + false + + + + 120 + + ethernet_mac + 117 + false + + + NA + + + + + 2 + true + + false + + + + 119 + + ethernet_mac + 116 + false + + + NA + + + + + 2 + true + + false + + + + 118 + + ethernet_mac + 115 + false + + + NA + + + + + 2 + true + + false + + + + 117 + + ethernet_mac + 114 + false + + + NA + + + + + 2 + true + + false + + + + 116 + + ethernet_mac + 113 + false + + + NA + + + + + 2 + true + + false + + + + 115 + + ethernet_mac + 112 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 114 + + ethernet_mac + 111 + false + + + NA + + + + + 2 + true + + false + + + + 113 + + ethernet_mac + 110 + false + + + NA + + + + + 2 + true + + false + + + + 112 + + ethernet_mac + 109 + false + + + NA + + + + + 2 + true + + false + + + + 111 + + ethernet_mac + 108 + false + + + NA + + + + + 2 + true + + false + + + + 110 + + ethernet_mac + 107 + false + + + NA + + + + + 2 + true + + false + + + + 109 + + ethernet_mac + 106 + false + + + NA + + + + + 2 + true + + false + + + + 108 + + ethernet_mac + 105 + false + + + NA + + + + + 2 + true + + false + + + + 107 + + ethernet_mac + 104 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 106 + + ethernet_mac + 103 + false + + + NA + + + + + 2 + true + + false + + + + 105 + + ethernet_mac + 102 + false + + + NA + + + + + 2 + true + + false + + + + 104 + + ethernet_mac + 101 + false + + + NA + + + + + 2 + true + + false + + + + 103 + + ethernet_mac + 100 + false + + + NA + + + + + 2 + true + + false + + + + 102 + + ethernet_mac + 99 + false + + + NA + + + + + 2 + true + + false + + + + 101 + + ethernet_mac + 98 + false + + + NA + + + + + 2 + true + + false + + + + 100 + + ethernet_mac + 97 + false + + + NA + + + + + 2 + true + + false + + + + 99 + + ethernet_mac + 96 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 98 + + ethernet_mac + 95 + false + + + NA + + + + + 2 + true + + false + + + + 97 + + ethernet_mac + 94 + false + + + NA + + + + + 2 + true + + false + + + + 96 + + ethernet_mac + 93 + false + + + NA + + + + + 2 + true + + false + + + + 95 + + ethernet_mac + 92 + false + + + NA + + + + + 2 + true + + false + + + + 94 + + ethernet_mac + 91 + false + + + NA + + + + + 2 + true + + false + + + + 93 + + ethernet_mac + 90 + false + + + NA + + + + + 2 + true + + false + + + + 92 + + ethernet_mac + 89 + false + + + NA + + + + + 2 + true + + false + + + + 91 + + ethernet_mac + 88 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 90 + + ethernet_mac + 87 + false + + + NA + + + + + 2 + true + + false + + + + 89 + + ethernet_mac + 86 + false + + + NA + + + + + 2 + true + + false + + + + 88 + + ethernet_mac + 85 + false + + + NA + + + + + 2 + true + + false + + + + 87 + + ethernet_mac + 84 + false + + + NA + + + + + 2 + true + + false + + + + 86 + + ethernet_mac + 83 + false + + + NA + + + + + 2 + true + + false + + + + 85 + + ethernet_mac + 82 + false + + + NA + + + + + 2 + true + + false + + + + 84 + + ethernet_mac + 81 + false + + + NA + + + + + 2 + true + + false + + + + 83 + + ethernet_mac + 80 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 82 + + ethernet_mac + 79 + false + + + NA + + + + + 2 + true + + false + + + + 81 + + ethernet_mac + 78 + false + + + NA + + + + + 2 + true + + false + + + + 80 + + ethernet_mac + 77 + false + + + NA + + + + + 2 + true + + false + + + + 79 + + ethernet_mac + 76 + false + + + NA + + + + + 2 + true + + false + + + + 78 + + ethernet_mac + 75 + false + + + NA + + + + + 2 + true + + false + + + + 77 + + ethernet_mac + 74 + false + + + NA + + + + + 2 + true + + false + + + + 76 + + ethernet_mac + 73 + false + + + NA + + + + + 2 + true + + false + + + + 75 + + ethernet_mac + 72 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 74 + + ethernet_mac + 71 + false + + + NA + + + + + 2 + true + + false + + + + 73 + + ethernet_mac + 70 + false + + + NA + + + + + 2 + true + + false + + + + 72 + + ethernet_mac + 69 + false + + + NA + + + + + 2 + true + + false + + + + 71 + + ethernet_mac + 68 + false + + + NA + + + + + 2 + true + + false + + + + 131 + + ethernet_mac + 128 + false + + + NA + + + + + + 2 + true + + false + + + + 132 + + ethernet_mac + 135 + false + + + NA + + + + + 2 + true + + false + + + + 63 + + cpu_sdma + 136 + false + + + + 133 + + cpu_sdma + 137 + false + + + + 134 + + cpu_sdma + 138 + false + + + + 135 + + cpu_sdma + 139 + false + + + + 7 + true + false + + + 1 + true + false + + + 6 + true + true + + + 0 + true + false + + + 5 + true + false + + + 3 + true + true + + + 4 + true + true + + + 2 + false + false + + + 8 + false + true + + + 14 + false + false + + + 9 + false + false + + + 15 + false + true + + + 10 + false + true + + + 12 + false + true + + + 11 + true + false + + + 13 + false + true + + + 23 + false + false + + + 17 + false + false + + + 22 + true + false + + + 16 + false + true + + + 21 + false + false + + + 19 + true + true + + + 20 + true + false + + + 18 + false + true + + + 24 + false + false + + + 30 + false + false + + + 25 + false + true + + + 31 + false + false + + + 26 + true + false + + + 28 + false + true + + + 27 + false + true + + + 29 + false + true + + + 39 + false + false + + + 33 + true + false + + + 38 + false + false + + + 32 + false + false + + + 37 + true + false + + + 35 + true + true + + + 36 + true + false + + + 34 + false + false + + + 40 + false + false + + + 41 + true + true + + + 46 + true + true + + + 47 + true + true + + + 42 + true + false + + + 44 + false + false + + + 43 + false + true + + + 45 + true + false + + + 55 + false + false + + + 49 + true + false + + + 54 + true + true + + + 48 + false + true + + + 53 + true + false + + + 51 + false + true + + + 52 + false + true + + + 50 + false + true + + + 56 + false + false + + + 62 + true + false + + + 57 + false + true + + + 63 + true + true + + + 58 + false + false + + + 60 + false + true + + + 59 + false + true + + + 61 + false + true + + + 71 + false + false + + + 65 + true + false + + + 70 + false + true + + + 64 + true + true + + + 69 + true + false + + + 67 + true + true + + + 68 + true + true + + + 66 + true + true + + + 72 + true + false + + + 78 + false + false + + + 73 + false + true + + + 79 + true + true + + + 74 + true + false + + + 76 + true + true + + + 75 + true + true + + + 77 + false + true + + + 87 + false + false + + + 81 + false + false + + + 86 + false + false + + + 80 + true + false + + + 85 + false + true + + + 83 + true + true + + + 84 + true + false + + + 82 + false + false + + + 88 + true + false + + + 94 + true + false + + + 89 + false + false + + + 95 + true + false + + + 90 + true + false + + + 92 + false + true + + + 91 + false + false + + + 93 + false + false + + + 103 + true + false + + + 97 + true + false + + + 102 + true + false + + + 96 + true + true + + + 101 + true + false + + + 99 + true + true + + + 100 + true + true + + + 98 + false + true + + + 104 + true + false + + + 110 + false + false + + + 105 + true + true + + + 111 + true + false + + + 106 + true + false + + + 108 + false + false + + + 107 + false + true + + + 109 + true + false + + + 119 + true + false + + + 113 + true + true + + + 118 + true + true + + + 112 + true + false + + + 117 + true + false + + + 115 + false + false + + + 116 + true + false + + + 114 + false + false + + + 120 + false + false + + + 126 + false + false + + + 121 + false + true + + + 127 + false + true + + + 122 + true + false + + + 124 + false + true + + + 123 + false + true + + + 125 + false + true + + + 128 + false + true + + + 135 + true + false + + + 0 + + ORDER_MODE_BY_CLASS + BLINK_DUTY_CYCLE_0 + BLINK_DURATION_0 + BLINK_DUTY_CYCLE_0 + BLINK_DURATION_1 + PULSE_STRETCH_1 + false + 1627 + false + + 1 + 64 + 66 + false + + + 2 + 64 + 65 + false + + + 3 + 64 + 65 + false + + + 4 + 64 + 66 + false + + + 5 + 64 + 66 + false + + + 6 + 64 + 65 + false + + + 7 + 64 + 65 + false + + + 8 + 64 + 66 + false + + + + 0 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 1 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 2 + PORT_TYPE_XG + true + BLINK_SELECT_0 + false + true + true + + + 3 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 4 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 5 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + + /tmp/cpss_uds + + 8 + + MAP0 + + 7 + + + 1 + + + 6 + + + 0 + + + 5 + + + 3 + + + 4 + + + 2 + + + + MAP1 + + 0 + + + 6 + + + 1 + + + 7 + + + 2 + + + 4 + + + 3 + + + 5 + + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..084f63926d4c --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +baf77e7f450def2266516782d159cbb4 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.xml new file mode 100644 index 000000000000..7a2208bf90ec --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-L1-F3_2T-128x25G.xml @@ -0,0 +1,1891 @@ + + + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + interface-mode-type + enumeration + Specifies supported Interface modes + + 1000BASE_X + 1G + 6 + + + SGMII + 1G , 2.5G + 3 + + + QSGMII + 1G + 13 + + + KR + 10G, 12G, 20G, 40G, 100G + 16 + + + SR_LR + 5G, 10G, 12G, 20G, 40G + 20 + + + KR2 + + 27 + + + KR4 + + 28 + + + SR_LR2 + + 29 + + + SR_LR4 + 100G + 30 + + + KR_C + CONSORTIUM - 25G + 32 + + + CR_C + CONSORTIUM - 25G + 33 + + + KR2_C + CONSORTIUM - 50G + 34 + + + CR2_C + CONSORTIUM - 50G + 35 + + + CR + + 36 + + + CR2 + + 37 + + + CR4 + + 38 + + + KR_S + + 39 + + + CR_S + + 40 + + + KR8 + + 41 + + + CR8 + + 42 + + + SR_LR8 + + 43 + + + USX_10G_QXGMII + + 51 + + + USX_20G_QXGMII + + 52 + + + USX_OUSGMII + + 53 + + + USX_20G_OXGMII + + 54 + + + NA + + 57 + + + + port-speed-type + enumeration + Specifies supported speeds + + 1G + 1G + 2 + + + 10G + 10G + 3 + + + 2500M + 2.5G + 5 + + + 5G + 5G + 6 + + + 25G + 25G, used in combination with CPSS_PORT_INTERFACE_MODE_KR_E, CPSS_PORT_INTERFACE_MODE_KR2_E + 21 + + + 40G + 40G + 9 + + + 50G + 50G + 14 + + + 100G + 100G + 13 + + + 200G + 200G + 24 + + + 400G + 400G + 25 + + + NA + NA + 35 + + + + fec-type + enumeration + Rx parameter type + + enabled + Enabled + 0 + + + disabled + Disabled + 1 + + + rs_enabled + RS FEC enabled + 2 + + + both_enabled + Both enabled + 3 + + + rs_544_514_enabled + RS FEC 544 and 514 + 4 + + + + physical-port-num-type + uint32 + PHYSICAL PORT NUM + 0 + 1023 + + + tx-param-type + enumeration + Tx parameter type + + pre + pre + 0 + + + post + post + 1 + + + peak + peak + 2 + + + + rx-param-type + enumeration + Rx parameter type + + dataRate + dataRate + 0 + + + res1Sel + res1Sel + 1 + + + res2Sel + res2Sel + 2 + + + cap1Sel + cap1Sel + 3 + + + cap2Sel + cap2Sel + 4 + + + minCap + minCap + 5 + + + minCapN + minCapN + 6 + + + sumfBoostTargetC0 + sumfBoostTargetC0 + 7 + + + sumfBoostTargetC1 + sumfBoostTargetC1 + 8 + + + sumfBoostTargetC2 + sumfBoostTargetC2 + 9 + + + midpointPhaseOs0 + midpointPhaseOs0 + 10 + + + midpointPhaseOs1 + midpointPhaseOs1 + 11 + + + midpointPhaseOs2 + midpointPhaseOs2 + 12 + + + selmufi + selmufi + 13 + + + selmuff + selmuff + 14 + + + selmupi + selmupi + 15 + + + selmupf + selmupf + 16 + + + midpointLargeThresKLane + midpointLargeThresKLane + 17 + + + midpointSmallThresKLane + midpointSmallThresKLane + 18 + + + midpointLargeThresCLane + midpointLargeThresCLane + 19 + + + midpointSmallThresCLane + midpointSmallThresCLane + 20 + + + inxSumfMidpointAdatptiveEnLane + inxSumfMidpointAdatptiveEnLane + 21 + + + dfeResF0aHighThresInitLane + dfeResF0aHighThresInitLane + 22 + + + dfeResF0aHighThresEndLane + dfeResF0aHighThresEndLane + 23 + + + squelch + squelch + 24 + + + align90 + align90 + 25 + + + sampler + sampler + 26 + + + slewRateCtrl0 + slewRateCtrl0 + 27 + + + slewRateCtrl1 + slewRateCtrl1 + 28 + + + EO + EO + 29 + + + minCap1 + minCap1 + 30 + + + maxCap1 + maxCap1 + 31 + + + minRes1 + minRes1 + 32 + + + maxRes1 + maxRes1 + 33 + + + + boolean-type + enumeration + Boolean 32 bits , due to big endian + + false + False + 0 + + + true + True + 1 + + + + serdes-type + enumeration + Serdes Type + + NA + No serdes + 0 + + + AVAGO + AVAGO + 1 + + + COMPHY + COMPHY + 2 + + + COMPHY_C12G + COMPHY_C12G + 3 + + + COMPHY_C28G + COMPHY_C28G + 4 + + + COMPHY_C112G + COMPHY_C112G + 5 + + + + phy-serdes-type + enumeration + Phy Serdes Type + + NA + No serdes + 0 + + + COMPHY + COMPHY + 1 + + + COMPHY_C28G + COMPHY_C28G + 2 + + + + port-interconnect-profile-type + enumeration + Enumerator of interconnect profile. + + profile_default + Profile Default + 0 + + + profile_1 + Profile 1 + 1 + + + profile_2 + Profile 2 + 2 + + + + ASIC_Falcon + + + 100GR2 + + CR2 + 100G + rs_544_514_enabled + + + KR2 + 100G + rs_544_514_enabled + + + SR_LR2 + 100G + rs_544_514_enabled + + + SR_LR2 + 50G + rs_enabled + + + CR2 + 50G + rs_enabled + + + KR2 + 50G + rs_enabled + + + CR2 + 100G + rs_544_514_enabled + rs_544_514_enabled + + + KR2 + 100G + rs_544_514_enabled + rs_544_514_enabled + + + CR2 + 50G + rs_enabled + rs_enabled + + + KR2 + 50G + rs_enabled + rs_enabled + + + + 100GR4 + + CR4 + 100G + rs_enabled + + + KR4 + 100G + rs_enabled + + + SR_LR4 + 100G + rs_enabled + + + CR4 + 100G + rs_enabled + rs_enabled + + + KR4 + 100G + rs_enabled + rs_enabled + + + + 10GR1 + + KR + 10G + enabled + + + SR_LR + 10G + enabled + + + KR + 10G + enabled + enabled + + + + 10GR1Fix + + KR + 10G + disabled + + + + 200GR4 + + CR4 + 200G + rs_544_514_enabled + + + SR_LR4 + 100G + rs_enabled + + + KR4 + 100G + rs_enabled + + + CR4 + 100G + rs_enabled + + + KR4 + 200G + rs_544_514_enabled + + + SR_LR4 + 200G + rs_544_514_enabled + + + CR4 + 200G + rs_544_514_enabled + rs_544_514_enabled + + + KR4 + 200G + rs_544_514_enabled + rs_544_514_enabled + + + CR4 + 100G + rs_enabled + rs_enabled + + + KR4 + 100G + rs_enabled + rs_enabled + + + + 25GR1 + + CR + 25G + rs_enabled + + + KR + 25G + rs_enabled + + + KR + 10G + enabled + + + SR_LR + 25G + rs_enabled + + + SR_LR + 10G + enabled + + + CR + 25G + rs_enabled + rs_enabled + + + KR + 25G + rs_enabled + rs_enabled + + + KR + 10G + enabled + enabled + + + + 400GR8 + + CR8 + 400G + rs_544_514_enabled + + + KR8 + 400G + rs_544_514_enabled + + + SR_LR8 + 400G + rs_544_514_enabled + + + CR8 + 400G + rs_544_514_enabled + rs_544_514_enabled + + + KR8 + 400G + rs_544_514_enabled + rs_544_514_enabled + + + + 50GR1 + + CR + 50G + rs_544_514_enabled + + + KR + 50G + rs_544_514_enabled + + + CR + 25G + rs_enabled + + + KR + 25G + rs_enabled + + + KR + 10G + enabled + + + SR_LR + 50G + rs_544_514_enabled + + + SR_LR + 25G + rs_enabled + + + SR_LR + 10G + enabled + + + CR + 50G + rs_544_514_enabled + rs_544_514_enabled + + + KR + 50G + rs_544_514_enabled + rs_544_514_enabled + + + CR + 25G + rs_enabled + rs_enabled + + + KR + 25G + rs_enabled + rs_enabled + + + KR + 10G + enabled + enabled + + + + + + 0 + AVAGO + profile_default + 100GR4 + true + + 0 + 25GR1 + + 100GR4 + + + + 1 + 25GR1 + + + + + + 2 + 25GR1 + + + + + + 3 + 25GR1 + + + + + + 4 + 25GR1 + + 100GR4 + + + + 5 + 25GR1 + + + + + + 6 + 25GR1 + + + + + + 7 + 25GR1 + + + + + + + 8 + AVAGO + profile_default + 100GR4 + true + + 8 + 25GR1 + + 100GR4 + + + + 9 + 25GR1 + + + + + + 10 + 25GR1 + + + + + + 11 + 25GR1 + + + + + + 12 + 25GR1 + + 100GR4 + + + + 13 + 25GR1 + + + + + + 14 + 25GR1 + + + + + + 15 + 25GR1 + + + + + + + 16 + AVAGO + profile_default + 100GR4 + true + + 16 + 25GR1 + + 100GR4 + + + + 17 + 25GR1 + + + + + + 18 + 25GR1 + + + + + + 19 + 25GR1 + + + + + + 20 + 25GR1 + + 100GR4 + + + + 21 + 25GR1 + + + + + + 22 + 25GR1 + + + + + + 23 + 25GR1 + + + + + + + 24 + AVAGO + profile_default + 100GR4 + true + + 24 + 25GR1 + + 100GR4 + + + + 25 + 25GR1 + + + + + + 26 + 25GR1 + + + + + + 27 + 25GR1 + + + + + + 28 + 25GR1 + + 100GR4 + + + + 29 + 25GR1 + + + + + + 30 + 25GR1 + + + + + + 31 + 25GR1 + + + + + + + 32 + AVAGO + profile_default + 100GR4 + true + + 32 + 25GR1 + + 100GR4 + + + + 33 + 25GR1 + + + + + + 34 + 25GR1 + + + + + + 35 + 25GR1 + + + + + + 36 + 25GR1 + + 100GR4 + + + + 37 + 25GR1 + + + + + + 38 + 25GR1 + + + + + + 39 + 25GR1 + + + + + + + 40 + AVAGO + profile_default + 100GR4 + true + + 40 + 25GR1 + + 100GR4 + + + + 41 + 25GR1 + + + + + + 42 + 25GR1 + + + + + + 43 + 25GR1 + + + + + + 44 + 25GR1 + + 100GR4 + + + + 45 + 25GR1 + + + + + + 46 + 25GR1 + + + + + + 47 + 25GR1 + + + + + + + 48 + AVAGO + profile_default + 100GR4 + true + + 48 + 25GR1 + + 100GR4 + + + + 49 + 25GR1 + + + + + + 50 + 25GR1 + + + + + + 51 + 25GR1 + + + + + + 52 + 25GR1 + + 100GR4 + + + + 53 + 25GR1 + + + + + + 54 + 25GR1 + + + + + + 55 + 25GR1 + + + + + + + 56 + AVAGO + profile_default + 100GR4 + true + + 56 + 25GR1 + + 100GR4 + + + + 57 + 25GR1 + + + + + + 58 + 25GR1 + + + + + + 59 + 25GR1 + + + + + + 60 + 25GR1 + + 100GR4 + + + + 64 + 25GR1 + + + + + + 65 + 25GR1 + + + + + + 66 + 25GR1 + + + + + + + 67 + AVAGO + profile_default + 100GR4 + true + + 67 + 25GR1 + + 100GR4 + + + + 68 + 25GR1 + + + + + + 69 + 25GR1 + + + + + + 70 + 25GR1 + + + + + + 71 + 25GR1 + + 100GR4 + + + + 72 + 25GR1 + + + + + + 73 + 25GR1 + + + + + + 74 + 25GR1 + + + + + + + 75 + AVAGO + profile_default + 100GR4 + true + + 75 + 25GR1 + + 100GR4 + + + + 76 + 25GR1 + + + + + + 77 + 25GR1 + + + + + + 78 + 25GR1 + + + + + + 79 + 25GR1 + + 100GR4 + + + + 80 + 25GR1 + + + + + + 81 + 25GR1 + + + + + + 82 + 25GR1 + + + + + + + 83 + AVAGO + profile_default + 100GR4 + true + + 83 + 25GR1 + + 100GR4 + + + + 84 + 25GR1 + + + + + + 85 + 25GR1 + + + + + + 86 + 25GR1 + + + + + + 87 + 25GR1 + + 100GR4 + + + + 88 + 25GR1 + + + + + + 89 + 25GR1 + + + + + + 90 + 25GR1 + + + + + + + 91 + AVAGO + profile_default + 100GR4 + true + + 91 + 25GR1 + + 100GR4 + + + + 92 + 25GR1 + + + + + + 93 + 25GR1 + + + + + + 94 + 25GR1 + + + + + + 95 + 25GR1 + + 100GR4 + + + + 96 + 25GR1 + + + + + + 97 + 25GR1 + + + + + + 98 + 25GR1 + + + + + + + 99 + AVAGO + profile_default + 100GR4 + true + + 99 + 25GR1 + + 100GR4 + + + + 100 + 25GR1 + + + + + + 101 + 25GR1 + + + + + + 102 + 25GR1 + + + + + + 103 + 25GR1 + + 100GR4 + + + + 104 + 25GR1 + + + + + + 105 + 25GR1 + + + + + + 106 + 25GR1 + + + + + + + 107 + AVAGO + profile_default + 100GR4 + true + + 107 + 25GR1 + + 100GR4 + + + + 108 + 25GR1 + + + + + + 109 + 25GR1 + + + + + + 110 + 25GR1 + + + + + + 111 + 25GR1 + + 100GR4 + + + + 112 + 25GR1 + + + + + + 113 + 25GR1 + + + + + + 114 + 25GR1 + + + + + + + 115 + AVAGO + profile_default + 100GR4 + true + + 115 + 25GR1 + + 100GR4 + + + + 116 + 25GR1 + + + + + + 117 + 25GR1 + + + + + + 118 + 25GR1 + + + + + + 119 + 25GR1 + + 100GR4 + + + + 120 + 25GR1 + + + + + + 121 + 25GR1 + + + + + + 122 + 25GR1 + + + + + + + 123 + AVAGO + profile_default + 100GR4 + true + + 123 + 25GR1 + + 100GR4 + + + + 124 + 25GR1 + + + + + + 125 + 25GR1 + + + + + + 126 + 25GR1 + + + + + + 127 + 25GR1 + + 100GR4 + + + + 128 + 25GR1 + + + + + + 129 + 25GR1 + + + + + + 130 + 25GR1 + + + + + + + 131 + AVAGO + profile_default + 10GR1Fix + false + + + 132 + AVAGO + profile_default + 10GR1Fix + false + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..4c6962b96910 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +9699d7ac6395ccab96dec333c782dc1d \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.xml new file mode 100644 index 000000000000..7cd85e016983 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/ASK-PP-F3_2T-128x25G.xml @@ -0,0 +1,1180 @@ + + + + + + std-string + string + standard string. + 1 + 100 + + + queue-id-type + uint32 + Queue id + 0 + 7 + + + precent-type + uint32 + Precent + 0 + 100 + + + phaThreadId-type + uint32 + Thread id + 1 + 255 + + + routing-mode-type + enumeration + Specifies routing mode. + + POLICY_BASED_ROUTING_ONLY + PBR only + 0 + + + TCAM_ROUTER_BASED + Router engine or PBR + 1 + + + + shared-table-mode-type + enumeration + Specifies table sharing modes for L3 (LPM), L2 (FDB), EM (Exact Match) + + MID_L3_MID_L2_NO_EM + MID_L3_MID_L2_NO_EM + 0 + + + MID_L3_MID_L2_MIN_EM + MID_L3_MID_L2_MIN_EM + 1 + + + LOW_MAX_L3_MID_LOW_L2_NO_EM + LOW_MAX_L3_MID_LOW_L2_NO_EM + 2 + + + MAX_L3_MIN_L2_NO_EM + MAX_L3_MIN_L2_NO_EM + 3 + + + + pha-firmware-image-id-type + enumeration + Specifies supported Pha image id + + DEFAULT + Default PHA firmware image ID + 0 + + + 01 + 01 firmware image ID + 1 + + + 02 + 02 PHA firmware image ID + 2 + + + + pha-firmware-thread-type + enumeration + Specifies supported Pha thread type + + IOAM_INGRESS_SWITCH_IPV4 + IOAM_INGRESS_SWITCH_IPV4 + 1 + + + IOAM_INGRESS_SWITCH_IPV6 + IOAM_INGRESS_SWITCH_IPV6 + 2 + + + IOAM_TRANSIT_SWITCH_IPV4 + IOAM_TRANSIT_SWITCH_IPV4 + 3 + + + IOAM_TRANSIT_SWITCH_IPV6 + IOAM_TRANSIT_SWITCH_IPV6 + 4 + + + INT_IOAM_MIRRORING + INT_IOAM_MIRRORING + 5 + + + INT_IOAM_EGRESS_SWITCH + INT_IOAM_EGRESS_SWITCH + 6 + + + MPLS_SR_NO_EL + MPLS_SR_NO_EL + 7 + + + MPLS_SR_ONE_EL + MPLS_SR_ONE_EL + 8 + + + MPLS_SR_TWO_EL + MPLS_SR_TWO_EL + 9 + + + MPLS_SR_THREE_EL + MPLS_SR_THREE_EL + 10 + + + UNIFIED_SR + UNIFIED_SR + 11 + + + CLASSIFIER_NSH_OVER_ETHERNET + CLASSIFIER_NSH_OVER_ETHERNET + 12 + + + CLASSIFIER_NSH_OVER_VXLAN_GPE + CLASSIFIER_NSH_OVER_VXLAN_GPE + 13 + + + SFF_NSH_VXLAN_GPE_TO_ETHERNET + SFF_NSH_VXLAN_GPE_TO_ETHERNET + 14 + + + SFF_NSH_ETHERNET_TO_VXLAN_GPE + SFF_NSH_ETHERNET_TO_VXLAN_GPE + 15 + + + IOAM_EGRESS_SWITCH_IPV6 + IOAM_EGRESS_SWITCH_IPV6 + 16 + + + SRV6_END_NODE + SRV6_END_NODE + 17 + + + SRV6_PENULTIMATE_END_NODE + SRV6_PENULTIMATE_END_NODE + 18 + + + SRV6_SRC_NODE_1_SEGMENT + SRV6_SRC_NODE_1_SEGMENT + 19 + + + SRV6_SRC_NODE_FIRST_PASS_2_3_SEGMENTS + SRV6_SRC_NODE_FIRST_PASS_2_3_SEGMENTS + 20 + + + SRV6_SRC_NODE_SECOND_PASS_3_SEGMENTS + SRV6_SRC_NODE_SECOND_PASS_3_SEGMENTS + 21 + + + SRV6_SRC_NODE_SECOND_PASS_2_SEGMENTS + SRV6_SRC_NODE_SECOND_PASS_2_SEGMENTS + 22 + + + SGT_NETWORK_ADD_MSB + SGT_NETWORK_ADD_MSB + 23 + + + SGT_NETWORK_FIX + SGT_NETWORK_FIX + 24 + + + SGT_NETWORK_REMOVE + SGT_NETWORK_REMOVE + 25 + + + SGT_EDSA_FIX + SGT_EDSA_FIX + 26 + + + SGT_EDSA_REMOVE + SGT_EDSA_REMOVE + 27 + + + SGT_GBP_FIX_IPV4 + SGT_GBP_FIX_IPV4 + 28 + + + SGT_GBP_FIX_IPV6 + SGT_GBP_FIX_IPV6 + 29 + + + SGT_GBP_REMOVE_IPV4 + SGT_GBP_REMOVE_IPV4 + 30 + + + SGT_GBP_REMOVE_IPV6 + SGT_GBP_REMOVE_IPV6 + 31 + + + PTP_PHY_1_STEP + PTP_PHY_1_STEP + 32 + + + EGRESS_MIRRORING_METADATA + EGRESS_MIRRORING_METADATA + 33 + + + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV4 + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV4 + 34 + + + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV6 + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV6 + 35 + + + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV4 + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV4 + 36 + + + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV6 + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV6 + 37 + + + CC_ERSPAN_TYPE_II_SRC_DEV + CC_ERSPAN_TYPE_II_SRC_DEV + 38 + + + VXLAN_GBP_SOURCE_GROUP_POLICY_ID + VXLAN_GBP_SOURCE_GROUP_POLICY_ID + 39 + + + SRV6_BEST_EFFORT + SRV6_BEST_EFFORT + 40 + + + SRV6_SRC_NODE_1_CONTAINER + SRV6_SRC_NODE_1_CONTAINER + 41 + + + SRV6_SRC_NODE_FIRST_PASS_2_3_CONTAINERS + SRV6_SRC_NODE_FIRST_PASS_2_3_CONTAINERS + 42 + + + SRV6_SRC_NODE_SECOND_PASS_2_CONTAINERS + SRV6_SRC_NODE_SECOND_PASS_2_CONTAINERS + 43 + + + SRV6_SRC_NODE_SECOND_PASS_3_CONTAINERS + SRV6_SRC_NODE_SECOND_PASS_3_CONTAINERS + 44 + + + SRV6_END_NODE_COC32_GSID + SRV6_END_NODE_COC32_GSID + 45 + + + IPV4_TTL_INCREMENT + IPV4_TTL_INCREMENT + 46 + + + IPV6_HOP_LIMIT_INCREMENT + IPV6_HOP_LIMIT_INCREMENT + 47 + + + CLEAR_OUTGOING_MTAG_COMMAND + CLEAR_OUTGOING_MTAG_COMMAND + 48 + + + SFLOW_V5_IPV4 + SFLOW_V5_IPV4 + 49 + + + SFLOW_V5_IPV6 + SFLOW_V5_IPV6 + 50 + + + SLS + SLS + 51 + + + + trunk-member-mode-type + enumeration + Specifies supported Pha image id + + NATIVE + NATIVE +* the trunk members are filled +* according to the order given by application. +* Regular trunk may hold max of 8 members. +* Cascade trunk may hold : +* max of 64 members + 0 + + + FLEX + FLEX +* A mode to allows flexibility for +* each Regular trunk to state it's max number of members (before starting to add members). +* (this mode not effect 'cascade trunk' members) +* Regular trunk may hold : max of 4K members. (each trunk set it's own limit) +* Cascade trunk may hold : max of 64 members. + 2 + + + + number-physical-port-type + enumeration + AC3X/AC5X 128, falcon 64, 128, 256, 512, 1024 + + no-ports + no-ports + 0 + + + 64-ports + 64-ports + 64 + + + 128-ports + 128-ports + 128 + + + 256-ports + 256-ports + 256 + + + 512-ports + 512-ports + 512 + + + 1024-ports + 1024-ports + 1024 + + + + serdes-ref-clock-type + enumeration + Specifies serdes refernce clock. + + external_25_single_ended + EXTERNAL_25_SINGLE_ENDED + 0 + + + external_125_single_ended + EXTERNAL_125_SINGLE_ENDED + 1 + + + external_125_diff + EXTERNAL_125_DIFF + 2 + + + external_156_25_single_ended + EXTERNAL_156_25_SINGLE_ENDED + 3 + + + external_156_25_diff + EXTERNAL_156_25_DIFF + 4 + + + internal_125 + INTERNAL_125 + 5 + + + + cpu-port-id-type + uint32 + CPU port id + 0 + 7 + + + rx-buffer-size-type + uint32 + Rx Buffer size + 64 + 10240 + + + tx-sdma-queue-mode-type + enumeration + Specifies TX queue mode. + + Normal + Application + 0 + + + Packet_Generator + Traffic generator + 1 + + + + alloc-method-type + enumeration + Specifies Buffers allocation method. + + Dynamic_Alloc + Dynamic + 0 + + + Static_Alloc + Static + 1 + + + + au_mesage_lenght-type + enumeration + Specifies Buffers allocation method. + + 4_words + 4 Words + 0 + + + 8_words + 8 Words + 1 + + + + boolean-type + enumeration + Boolean 32 bits , due to bing endian + + false + False + 0 + + + true + True + 1 + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + ASIC_Falcon + + Falcon-3.2 + + 4294967295 + external_25_single_ended + 2 + 60 + 256-ports + false + true + 0 + + + true + + 4096 + + + 2048 + + + + 0 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 6 + Static_Alloc + Packet_Generator + 256 + 256 + 144 + + + 3 + 7 + Static_Alloc + Packet_Generator + 1 + 1 + 3032 + + + + false + false + false + 0 + 8_words + false + + + + TCAM_ROUTER_BASED + 0 + MID_L3_MID_L2_NO_EM + false + + + true + true + true + true + true + true + + 1023 + FLEX + + true + true + true + true + + false + 02 + 0 + + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..cfa1a375d83b --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +88cbf08802a5d41b605a8dd83f2c5139 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.xml new file mode 100644 index 000000000000..635a099a35aa --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/SAI-F3_2T-128x25G.xml @@ -0,0 +1,900 @@ + + + + + + device-id-type + uint32 + Device ID 0..1 + 0 + 1 + + + port-id-type + uint32 + Interface number + 0 + 1023 + + + logDest-type + enumeration + Logging Feature Options + + SAI_LOG_SYSLOG + SYSLOG {Syslog service should be running to use this option} + 0 + + + SAI_LOG_CONSOLE + CONSOLE + 1 + + + SAI_LOG_FILE + FILE {Warning !!! Use with caution. Can cause disk full issues} + 2 + + + + InDropCounter-type + enumeration + Router In Drop Reason Feature Options + + TTL_HOPLIMIT_EXCEEDED + Router In Drop Counters track TTL & Hop Limit Exceeded Packets + 0 + + + ROUTE_BLACKHOLE + Router In Drop Counters track Route Black Hole Packets + 1 + + + + Feature-enable + enumeration + Feature Enabled/Disabled + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + log-dest-file-path-type + string + A string with path to file for logging feature + 2 + 30 + + + acl-feature-name-type + enumeration + + + port-sFlow + SFlow over Port + 0 + + + port-counters-ipv4-ipv6 + Port ipv4/ipv6 counters + 1 + + + control-acl + ACLs for control packet handling + 2 + + + debug-counter-acl + ACLs for Debug Counters + 3 + + + + ingress-acl-stage-type + enumeration + + + disabled + Feature not enabled + 0 + + + IPCL0 + Stage IPCL0 + 1 + + + IPCL1 + Stage IPCL1 + 2 + + + + egress-acl-stage-type + enumeration + + + disabled + Feature not enabled + 0 + + + EPCL0 + Stage EPCL0 + 2 + + + + feature-priority-type + uint32 + Feature priority + 2 + 15 + + + hit-number-type + uint32 + Hit/lookup number + 0 + 3 + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + ASIC_Falcon + ASK-Board-F3_2T-128x25G.xml + + + 0 + 0 + 0 + + + 1 + 0 + 1 + + + 2 + 0 + 2 + + + 3 + 0 + 3 + + + 4 + 0 + 4 + + + 5 + 0 + 5 + + + 6 + 0 + 6 + + + 7 + 0 + 7 + + + 8 + 0 + 8 + + + 9 + 0 + 9 + + + 10 + 0 + 10 + + + 11 + 0 + 11 + + + 12 + 0 + 12 + + + 13 + 0 + 13 + + + 14 + 0 + 14 + + + 15 + 0 + 15 + + + 16 + 0 + 16 + + + 17 + 0 + 17 + + + 18 + 0 + 18 + + + 19 + 0 + 19 + + + 20 + 0 + 20 + + + 21 + 0 + 21 + + + 22 + 0 + 22 + + + 23 + 0 + 23 + + + 24 + 0 + 24 + + + 25 + 0 + 25 + + + 26 + 0 + 26 + + + 27 + 0 + 27 + + + 28 + 0 + 28 + + + 29 + 0 + 29 + + + 30 + 0 + 30 + + + 31 + 0 + 31 + + + 32 + 0 + 32 + + + 33 + 0 + 33 + + + 34 + 0 + 34 + + + 35 + 0 + 35 + + + 36 + 0 + 36 + + + 37 + 0 + 37 + + + 38 + 0 + 38 + + + 39 + 0 + 39 + + + 40 + 0 + 40 + + + 41 + 0 + 41 + + + 42 + 0 + 42 + + + 43 + 0 + 43 + + + 44 + 0 + 44 + + + 45 + 0 + 45 + + + 46 + 0 + 46 + + + 47 + 0 + 47 + + + 48 + 0 + 48 + + + 49 + 0 + 49 + + + 50 + 0 + 50 + + + 51 + 0 + 51 + + + 52 + 0 + 52 + + + 53 + 0 + 53 + + + 54 + 0 + 54 + + + 55 + 0 + 55 + + + 56 + 0 + 56 + + + 57 + 0 + 57 + + + 58 + 0 + 58 + + + 59 + 0 + 59 + + + 60 + 0 + 60 + + + 61 + 0 + 64 + + + 62 + 0 + 65 + + + 63 + 0 + 66 + + + 64 + 0 + 67 + + + 65 + 0 + 68 + + + 66 + 0 + 69 + + + 67 + 0 + 70 + + + 68 + 0 + 71 + + + 69 + 0 + 72 + + + 70 + 0 + 73 + + + 71 + 0 + 74 + + + 72 + 0 + 75 + + + 73 + 0 + 76 + + + 74 + 0 + 77 + + + 75 + 0 + 78 + + + 76 + 0 + 79 + + + 77 + 0 + 80 + + + 78 + 0 + 81 + + + 79 + 0 + 82 + + + 80 + 0 + 83 + + + 81 + 0 + 84 + + + 82 + 0 + 85 + + + 83 + 0 + 86 + + + 84 + 0 + 87 + + + 85 + 0 + 88 + + + 86 + 0 + 89 + + + 87 + 0 + 90 + + + 88 + 0 + 91 + + + 89 + 0 + 92 + + + 90 + 0 + 93 + + + 91 + 0 + 94 + + + 92 + 0 + 95 + + + 93 + 0 + 96 + + + 94 + 0 + 97 + + + 95 + 0 + 98 + + + 96 + 0 + 99 + + + 97 + 0 + 100 + + + 98 + 0 + 101 + + + 99 + 0 + 102 + + + 100 + 0 + 103 + + + 101 + 0 + 104 + + + 102 + 0 + 105 + + + 103 + 0 + 106 + + + 104 + 0 + 107 + + + 105 + 0 + 108 + + + 106 + 0 + 109 + + + 107 + 0 + 110 + + + 108 + 0 + 111 + + + 109 + 0 + 112 + + + 110 + 0 + 113 + + + 111 + 0 + 114 + + + 112 + 0 + 115 + + + 113 + 0 + 116 + + + 114 + 0 + 117 + + + 115 + 0 + 118 + + + 116 + 0 + 119 + + + 117 + 0 + 120 + + + 118 + 0 + 121 + + + 119 + 0 + 122 + + + 120 + 0 + 123 + + + 121 + 0 + 124 + + + 122 + 0 + 125 + + + 123 + 0 + 126 + + + 124 + 0 + 127 + + + 125 + 0 + 128 + + + 126 + 0 + 129 + + + 127 + 0 + 130 + + + 128 + 0 + 131 + + + 129 + 0 + 132 + + + + 8 + 0 + 0 + 64 + 8 + 8 + 1024 + 0 + 0 + + + + 0 + + + Enabled + Enabled + + + Enabled + + + + SAI_LOG_SYSLOG + + + control-acl + 3 + + IPCL0 + 1 + + + EPCL0 + 0 + + + + port-sFlow + 4 + + IPCL0 + 0 + + + EPCL0 + 0 + + + + port-counters-ipv4-ipv6 + 5 + + IPCL0 + 3 + + + EPCL0 + 0 + + + + debug-counter-acl + 2 + + IPCL0 + 1 + + + EPCL0 + 0 + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t0.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..28e30dee8cc3 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t0.j2 @@ -0,0 +1,49 @@ + +{%- set default_cable = '40m' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "ingress" + }, + "ingress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "ingress" + }, + "egress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "egress" + }, + "egress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "egress" + } + }, + "BUFFER_PROFILE": { + "egress_lossless_profile": { + "pool": "egress_pool1", + "size": "0", + "dynamic_th": "1" + }, + "egress_lossy_profile": { + "pool": "egress_pool2", + "size": "0", + "dynamic_th": "1" + }, + "ingress_lossless_profile": { + "pool": "ingress_pool1", + "size": "0", + "dynamic_th": "-3" + }, + "ingress_lossy_profile": { + "pool": "ingress_pool2", + "size": "0", + "dynamic_th": "-3" + } + }, +{%- endmacro %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t1.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..28e30dee8cc3 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/buffers_defaults_t1.j2 @@ -0,0 +1,49 @@ + +{%- set default_cable = '40m' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "ingress" + }, + "ingress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "ingress" + }, + "egress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "egress" + }, + "egress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "egress" + } + }, + "BUFFER_PROFILE": { + "egress_lossless_profile": { + "pool": "egress_pool1", + "size": "0", + "dynamic_th": "1" + }, + "egress_lossy_profile": { + "pool": "egress_pool2", + "size": "0", + "dynamic_th": "1" + }, + "ingress_lossless_profile": { + "pool": "ingress_pool1", + "size": "0", + "dynamic_th": "-3" + }, + "ingress_lossy_profile": { + "pool": "ingress_pool2", + "size": "0", + "dynamic_th": "-3" + } + }, +{%- endmacro %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/create_only_config_db_buffers.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/create_only_config_db_buffers.json new file mode 100644 index 000000000000..8bea3894c083 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/create_only_config_db_buffers.json @@ -0,0 +1,7 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "create_only_config_db_buffers": "true" + } + } +} \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/hwsku.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/hwsku.json new file mode 100644 index 000000000000..f6745e836052 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/hwsku.json @@ -0,0 +1,204 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet4": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet8": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet12": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet16": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet20": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet24": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet28": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet32": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet36": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet40": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet44": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet48": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet52": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet56": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet60": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet64": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet68": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet72": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet76": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet80": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet84": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet88": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet92": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet96": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet100": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet104": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet108": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet112": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet116": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet120": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet124": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet128": { + "default_brkout_mode": "1x10G", + "autoneg": "off" + }, + "Ethernet129": { + "default_brkout_mode": "1x10G", + "autoneg": "off" + } + } +} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/port_config.ini b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/port_config.ini new file mode 100644 index 000000000000..85d256856fb8 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/port_config.ini @@ -0,0 +1,131 @@ +# name lanes alias speed autoneg fec index +Ethernet0 0 Eth1/1 25000 on none 1 +Ethernet1 1 Eth1/2 25000 on none 1 +Ethernet2 2 Eth1/3 25000 on none 1 +Ethernet3 3 Eth1/4 25000 on none 1 +Ethernet4 4 Eth1/5 25000 on none 1 +Ethernet5 5 Eth1/6 25000 on none 1 +Ethernet6 6 Eth1/7 25000 on none 1 +Ethernet7 7 Eth1/8 25000 on none 1 +Ethernet8 8 Eth2/1 25000 on none 2 +Ethernet9 9 Eth2/2 25000 on none 2 +Ethernet10 10 Eth2/3 25000 on none 2 +Ethernet11 11 Eth2/4 25000 on none 2 +Ethernet12 12 Eth2/5 25000 on none 2 +Ethernet13 13 Eth2/6 25000 on none 2 +Ethernet14 14 Eth2/7 25000 on none 2 +Ethernet15 15 Eth2/8 25000 on none 2 +Ethernet16 16 Eth3/1 25000 on none 3 +Ethernet17 17 Eth3/2 25000 on none 3 +Ethernet18 18 Eth3/3 25000 on none 3 +Ethernet19 19 Eth3/4 25000 on none 3 +Ethernet20 20 Eth3/5 25000 on none 3 +Ethernet21 21 Eth3/6 25000 on none 3 +Ethernet22 22 Eth3/7 25000 on none 3 +Ethernet23 23 Eth3/8 25000 on none 3 +Ethernet24 24 Eth4/1 25000 on none 4 +Ethernet25 25 Eth4/2 25000 on none 4 +Ethernet26 26 Eth4/3 25000 on none 4 +Ethernet27 27 Eth4/4 25000 on none 4 +Ethernet28 28 Eth4/5 25000 on none 4 +Ethernet29 29 Eth4/6 25000 on none 4 +Ethernet30 30 Eth4/7 25000 on none 4 +Ethernet31 31 Eth4/8 25000 on none 4 +Ethernet32 32 Eth5/1 25000 on none 5 +Ethernet33 33 Eth5/2 25000 on none 5 +Ethernet34 34 Eth5/3 25000 on none 5 +Ethernet35 35 Eth5/4 25000 on none 5 +Ethernet36 36 Eth5/5 25000 on none 5 +Ethernet37 37 Eth5/6 25000 on none 5 +Ethernet38 38 Eth5/7 25000 on none 5 +Ethernet39 39 Eth5/8 25000 on none 5 +Ethernet40 40 Eth6/1 25000 on none 6 +Ethernet41 41 Eth6/2 25000 on none 6 +Ethernet42 42 Eth6/3 25000 on none 6 +Ethernet43 43 Eth6/4 25000 on none 6 +Ethernet44 44 Eth6/5 25000 on none 6 +Ethernet45 45 Eth6/6 25000 on none 6 +Ethernet46 46 Eth6/7 25000 on none 6 +Ethernet47 47 Eth6/8 25000 on none 6 +Ethernet48 48 Eth7/1 25000 on none 7 +Ethernet49 49 Eth7/2 25000 on none 7 +Ethernet50 50 Eth7/3 25000 on none 7 +Ethernet51 51 Eth7/4 25000 on none 7 +Ethernet52 52 Eth7/5 25000 on none 7 +Ethernet53 53 Eth7/6 25000 on none 7 +Ethernet54 54 Eth7/7 25000 on none 7 +Ethernet55 55 Eth7/8 25000 on none 7 +Ethernet56 56 Eth8/1 25000 on none 8 +Ethernet57 57 Eth8/2 25000 on none 8 +Ethernet58 58 Eth8/3 25000 on none 8 +Ethernet59 59 Eth8/4 25000 on none 8 +Ethernet60 60 Eth8/5 25000 on none 8 +Ethernet61 61 Eth8/6 25000 on none 8 +Ethernet62 62 Eth8/7 25000 on none 8 +Ethernet63 63 Eth8/8 25000 on none 8 +Ethernet64 64 Eth9/1 25000 on none 9 +Ethernet65 65 Eth9/2 25000 on none 9 +Ethernet66 66 Eth9/3 25000 on none 9 +Ethernet67 67 Eth9/4 25000 on none 9 +Ethernet68 68 Eth9/5 25000 on none 9 +Ethernet69 69 Eth9/6 25000 on none 9 +Ethernet70 70 Eth9/7 25000 on none 9 +Ethernet71 71 Eth9/8 25000 on none 9 +Ethernet72 72 Eth10/1 25000 on none 10 +Ethernet73 73 Eth10/2 25000 on none 10 +Ethernet74 74 Eth10/3 25000 on none 10 +Ethernet75 75 Eth10/4 25000 on none 10 +Ethernet76 76 Eth10/5 25000 on none 10 +Ethernet77 77 Eth10/6 25000 on none 10 +Ethernet78 78 Eth10/7 25000 on none 10 +Ethernet79 79 Eth10/8 25000 on none 10 +Ethernet80 80 Eth11/1 25000 on none 11 +Ethernet81 81 Eth11/2 25000 on none 11 +Ethernet82 82 Eth11/3 25000 on none 11 +Ethernet83 83 Eth11/4 25000 on none 11 +Ethernet84 84 Eth11/5 25000 on none 11 +Ethernet85 85 Eth11/6 25000 on none 11 +Ethernet86 86 Eth11/7 25000 on none 11 +Ethernet87 87 Eth11/8 25000 on none 11 +Ethernet88 88 Eth12/1 25000 on none 12 +Ethernet89 89 Eth12/2 25000 on none 12 +Ethernet90 90 Eth12/3 25000 on none 12 +Ethernet91 91 Eth12/4 25000 on none 12 +Ethernet92 92 Eth12/5 25000 on none 12 +Ethernet93 93 Eth12/6 25000 on none 12 +Ethernet94 94 Eth12/7 25000 on none 12 +Ethernet95 95 Eth12/8 25000 on none 12 +Ethernet96 96 Eth13/1 25000 on none 13 +Ethernet97 97 Eth13/2 25000 on none 13 +Ethernet98 98 Eth13/3 25000 on none 13 +Ethernet99 99 Eth13/4 25000 on none 13 +Ethernet100 100 Eth13/5 25000 on none 13 +Ethernet101 101 Eth13/6 25000 on none 13 +Ethernet102 102 Eth13/7 25000 on none 13 +Ethernet103 103 Eth13/8 25000 on none 13 +Ethernet104 104 Eth14/1 25000 on none 14 +Ethernet105 105 Eth14/2 25000 on none 14 +Ethernet106 106 Eth14/3 25000 on none 14 +Ethernet107 107 Eth14/4 25000 on none 14 +Ethernet108 108 Eth14/5 25000 on none 14 +Ethernet109 109 Eth14/6 25000 on none 14 +Ethernet110 110 Eth14/7 25000 on none 14 +Ethernet111 111 Eth14/8 25000 on none 14 +Ethernet112 112 Eth15/1 25000 on none 15 +Ethernet113 113 Eth15/2 25000 on none 15 +Ethernet114 114 Eth15/3 25000 on none 15 +Ethernet115 115 Eth15/4 25000 on none 15 +Ethernet116 116 Eth15/5 25000 on none 15 +Ethernet117 117 Eth15/6 25000 on none 15 +Ethernet118 118 Eth15/7 25000 on none 15 +Ethernet119 119 Eth15/8 25000 on none 15 +Ethernet120 120 Eth16/1 25000 on none 16 +Ethernet121 121 Eth16/2 25000 on none 16 +Ethernet122 122 Eth16/3 25000 on none 16 +Ethernet123 123 Eth16/4 25000 on none 16 +Ethernet124 124 Eth16/5 25000 on none 16 +Ethernet125 125 Eth16/6 25000 on none 16 +Ethernet126 126 Eth16/7 25000 on none 16 +Ethernet127 127 Eth16/8 25000 on none 16 +Ethernet128 128 Eth17 10000 off none 129 +Ethernet129 129 Eth17 10000 off none 130 diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/profile.ini b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/profile.ini new file mode 100644 index 000000000000..c2f77685ad0a --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/profile.ini @@ -0,0 +1 @@ +switchMacAddress=00:01:02:03:04:05 diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/sai.profile b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/sai.profile new file mode 100644 index 000000000000..2477a839e09e --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/FC128x25G/sai.profile @@ -0,0 +1,4 @@ +mode=1 +hwId=FC128x25G +switchProfile=/usr/share/sonic/hwsku/SAI-F3_2T-128x25G.xml +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/profile.ini diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..b9aabeb8706b --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +e48527ad3f7bc5db09ec1fe078eba9a1 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.xml new file mode 100644 index 000000000000..80434c00be65 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-Board-F3_2T-128x25G.xml @@ -0,0 +1,3990 @@ + + + + + + std-string + string + standard string. + 1 + 100 + + + board-callback-type + enumeration + Specifies os/ext drv callback types. + + linux-static + Linux Static + 0 + + + linux-shared + Linux Shared Lib mode + 1 + + + external + External Os + 3 + + + freeBsd + Free BSD + 4 + + + + board-pp-map-type + enumeration + Specifies pci info types. + + fixed + Fixed + 0 + + + autoscan + Auto scan + 1 + + + + board-pp-interface-channel-type + enumeration + Specifies channel interface type. + + pci + PCI + 0 + + + smi + SMI + 1 + + + twsi + TWSI + 2 + + + + board-pp-as-type + enumeration + Specifies Address space type. + + 4_regions + address-space 4 regions + 0 + + + 8_regions + address-space 8 regions + 1 + + + atu + address translation unit + 2 + + + + device-id-type + uint32 + Device ID 0..1 + 0 + 1 + + + port-mapping-type + enumeration + Specifies port map type. + + ethernet_mac + ETHERNET_MAC + 0 + + + cpu_sdma + CPU_SDMA + 1 + + + + interface-num-type + uint32 + Interface number + 0 + 1023 + + + txq-port-number-type + uint32 + TXq port number + 0 + 99 + + + phy-smi-interface-type + uint32 + Phy SMI interface type. + 0 + 3 + + + phy-xsmi-interface-type + uint32 + Phy XSMI interface type. + 0 + 15 + + + phy-type + enumeration + Specifies the PHY Part Identifier. + + NA + No Phy + 0 + + + alaska-88E1680 + Specifies PHY identifier 88E1680, used for Copper with speeds of 10M/100M/1G. + 1 + + + alaska-88E1780 + Specifies PHY identifier 88E1780, Integrated Octal 10/100/1000 Mbps Energy +Efficient Ethernet Transceiver + 2 + + + alaska-88E2540 + Specifies PHY identifier 88E2540, 4 ports 10/100/1000/2.5G/5GBASE-T Ethernet +Transceiver with IEEE 1588v2 PTP Support + 3 + + + alaska-88E2580 + Specifies PHY identifier 88E2580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 4 + + + alaska-88E2780 + Specifies PHY identifier 88E2780, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 5 + + + + physical-port-num-type + uint32 + PHYSICAL PORT NUM + 0 + 1023 + + + led-stream-port-type + enumeration + Specifies the ledstream port type. + + PORT_TYPE_TRI_SPEED + tri-speed port. + 1 + + + PORT_TYPE_XG + XG port. + 2 + + + + led-stream-blink-select-type + enumeration + Specifies the LED stream blink select type. + + BLINK_SELECT_0 + Blink 0 signal. + 1 + + + BLINK_SELECT_1 + Blink 1 signal + 2 + + + + led-stream-order-mode-type + enumeration + Specifies the LED stream ordering mode. + + ORDER_MODE_BY_PORT + the indication order is arranged by port. + 1 + + + ORDER_MODE_BY_CLASS + the indication order is arranged by class. + 2 + + + + led-stream-blink-duty-cycle-type + enumeration + Specifies the LED stream blink cycle duty cycle type. + + BLINK_DUTY_CYCLE_0 + 25% on, 75% off. + 1 + + + BLINK_DUTY_CYCLE_1 + 50% on, 50% off. + 2 + + + BLINK_DUTY_CYCLE_2 + 50% on, 50% off. + 3 + + + BLINK_DUTY_CYCLE_3 + 75% on, 25% off. + 4 + + + + led-stream-blink-duration-type + enumeration + Specifies the LED stream blink period type. + + BLINK_DURATION_0 + BLINK_DURATION_0. + 1 + + + BLINK_DURATION_1 + BLINK_DURATION_1. + 2 + + + BLINK_DURATION_2 + BLINK_DURATION_2. + 3 + + + BLINK_DURATION_3 + BLINK_DURATION_3. + 4 + + + BLINK_DURATION_4 + BLINK_DURATION_4. + 5 + + + BLINK_DURATION_5 + BLINK_DURATION_5. + 6 + + + BLINK_DURATION_6 + (APPLICABLE DEVICES: xCat3; AC5; Lion2; Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Pipe) . + 7 + + + BLINK_DURATION_7 + APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Pipe). + 8 + + + + led-stream-pulse-stretch-type + enumeration + Specifies the LED stream length of stretching for dynamic signals. + + PULSE_STRETCH_0_NO + PULSE_STRETCH_0_NO. + 1 + + + PULSE_STRETCH_1 + PULSE_STRETCH_1. + 2 + + + PULSE_STRETCH_2 + PULSE_STRETCH_2. + 3 + + + PULSE_STRETCH_3 + PULSE_STRETCH_3. + 4 + + + PULSE_STRETCH_4 + PULSE_STRETCH_4. + 5 + + + PULSE_STRETCH_5 + PULSE_STRETCH_5. + 6 + + + PULSE_STRETCH_6 + (APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Falcon; AC5P; Pipe). + 7 + + + PULSE_STRETCH_7 + (APPLICABLE DEVICES: Bobcat2; Caelum; Aldrin; AC3X; Bobcat3; Aldrin2; Falcon; AC5P; Pipe). + 8 + + + + led-stream-clock-out-frequency-type + enumeration + Specifies the LED stream blink cycle duty cycle type. + + _CLOCK_OUT_FREQUENCY_500 + 500 KHz LED clock frequency. + 1 + + + CLOCK_OUT_FREQUENCY_1000 + 1 MHz LED clock frequency. + 2 + + + CLOCK_OUT_FREQUENCY_2000 + 2 MHz LED clock frequency. + 3 + + + CLOCK_OUT_FREQUENCY_3000 + 3 MHz LED clock frequency. + 4 + + + + led-stream-class5-select-type + enumeration + Specifies the LED stream indication displayed on class5 (for dual-media port/phy). + + CLASS_5_SELECT_HALF_DUPLEX + Half Duplex is displayed on class5. + 1 + + + CLASS_5_SELECT_FIBER_LINK_UP + If port is a dual media port, Fiber Link Up is displayed on class5. + 2 + + + + led-stream-class13-select-type + enumeration + Specifies the LED stream indication displayed on class13 (for dual-media port/phy). + + CLASS_13_SELECT_LINK_DOWN + Link Down is displayed on class13. + 1 + + + CLASS_13_SELECT_COPPER_LINK_UP + If port is a dual media port, Copper Link Up is displayed on class13. + 2 + + + + led-class-num-type + uint32 + Led Class number + 0 + 11 + + + boolean-type + enumeration + Boolean 32 bits , due to bing endian + + false + False + 0 + + + true + True + 1 + + + + bus-id-type + uint32 + Bus Id Type, PCI/SMI + 0 + 255 + + + function-id-type + uint32 + Function Id Type, PCI/SMI + 0 + 255 + + + domain-type + uint32 + Domain, PCI/SMI + 0 + 255 + + + led-interface-type + uint32 + Led interface + 0 + 255 + + + led-position-type + uint32 + Led position + 0 + 63 + + + serdes-lane-type + uint32 + serdes lane + 0 + 7 + + + cpu-type + enumeration + The CPU Internal/External + + external + Extrenal connected CPU + 0 + + + internal + Internal CPU + 1 + + + + led-stream-clock-frequency-type + uint32 + Led Clock Frequency Sip6 + 500 + 80000 + + + led-unit-type + uint32 + Led units + 1 + 16 + + + led-unit-or-no-unit-type + uint32 + Led units, 0 for no Unit + 0 + 16 + + + led-group-type + uint32 + Led Group + 0 + 1 + + + led-stream-force-data-type + string + A hexadecimal string with octets represented as hex digits +separated by colons. The canonical representation uses +lowercase characters. + 3 + 11 + + + bit-type + uint32 + Bit range 0..31 + 0 + 31 + + + bit-size-type + uint32 + Bit leng 1..32 + 1 + 32 + + + led-sip-type + enumeration + The LED scehme + + na + NA + 0 + + + sip5 + SIP5: AC3x + 5 + + + sip6 + SIP6: Falcon, AC5x + 6 + + + + port-cscd-type + enumeration + Specifies the cascade port type. + + DSA_1_WORD + DSA Regular + 0 + + + DSA_2_WORDS + DSA Extended + 1 + + + NETWORK + Network. + 2 + + + DSA_3_WORDS + DSA 3 Words + 3 + + + DSA_4_WORD + DSA 4 Words + 4 + + + + trunk-cscd-type + uint32 + Specifies the Cascade Trunk id. + 0 + 127 + + + port-trunk-cscd-type + enumeration + Specifies the cascade port type. + + cscdPort + Cascade port + 0 + + + cscdTrunk + Csacde trunk + 1 + + + + hash-cscd-type + enumeration + Specifies the hash used by cascade trunk. + + pkt + Hash based on packet + 0 + + + srcPort + Hash based on source port + 1 + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + mpp-num-type + uint8 + Specifies the MPP pin number. + 0 + 63 + + + mpp-select-type + uint8 + Specifies the MPP pin value. + 0 + 15 + + + ASIC_Falcon + Falcon-3.2T-128x25G + linux-static + linux-static + autoscan + external + pci + atu + + 0 + 0 + ASK-PP-F3_2T-128x25G.xml + ASK-L1-F3_2T-128x25G.xml + sip6 + + 0 + + ethernet_mac + 0 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 1 + + ethernet_mac + 1 + false + + + NA + + + + false + + + + 2 + + ethernet_mac + 2 + false + + + NA + + + + false + + + + 3 + + ethernet_mac + 3 + false + + + NA + + + + false + + + + 4 + + ethernet_mac + 4 + false + + + NA + + + + + 2 + true + + false + + + + 5 + + ethernet_mac + 5 + false + + + NA + + + + false + + + + 6 + + ethernet_mac + 6 + false + + + NA + + + + false + + + + 7 + + ethernet_mac + 7 + false + + + NA + + + + false + + + + 8 + + ethernet_mac + 8 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 9 + + ethernet_mac + 9 + false + + + NA + + + + + 2 + true + + false + + + + 10 + + ethernet_mac + 10 + false + + + NA + + + + + 2 + true + + false + + + + 11 + + ethernet_mac + 11 + false + + + NA + + + + + 2 + true + + false + + + + 12 + + ethernet_mac + 12 + false + + + NA + + + + + 2 + true + + false + + + + 13 + + ethernet_mac + 13 + false + + + NA + + + + + 2 + true + + false + + + + 14 + + ethernet_mac + 14 + false + + + NA + + + + + 2 + true + + false + + + + 15 + + ethernet_mac + 15 + false + + + NA + + + + + 2 + true + + false + + + + 16 + + ethernet_mac + 16 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 17 + + ethernet_mac + 17 + false + + + NA + + + + + 2 + true + + false + + + + 18 + + ethernet_mac + 18 + false + + + NA + + + + + 2 + true + + false + + + + 19 + + ethernet_mac + 19 + false + + + NA + + + + + 2 + true + + false + + + + 20 + + ethernet_mac + 20 + false + + + NA + + + + + 2 + true + + false + + + + 21 + + ethernet_mac + 21 + false + + + NA + + + + + 2 + true + + false + + + + 22 + + ethernet_mac + 22 + false + + + NA + + + + + 2 + true + + false + + + + 23 + + ethernet_mac + 23 + false + + + NA + + + + + 2 + true + + false + + + + 24 + + ethernet_mac + 24 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 25 + + ethernet_mac + 25 + false + + + NA + + + + + 2 + true + + false + + + + 26 + + ethernet_mac + 26 + false + + + NA + + + + + 2 + true + + false + + + + 27 + + ethernet_mac + 27 + false + + + NA + + + + + 2 + true + + false + + + + 28 + + ethernet_mac + 28 + false + + + NA + + + + + 2 + true + + false + + + + 29 + + ethernet_mac + 29 + false + + + NA + + + + + 2 + true + + false + + + + 30 + + ethernet_mac + 30 + false + + + NA + + + + + 2 + true + + false + + + + 31 + + ethernet_mac + 31 + false + + + NA + + + + + 2 + true + + false + + + + 32 + + ethernet_mac + 32 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 33 + + ethernet_mac + 33 + false + + + NA + + + + + 2 + true + + false + + + + 34 + + ethernet_mac + 34 + false + + + NA + + + + + 2 + true + + false + + + + 35 + + ethernet_mac + 35 + false + + + NA + + + + + 2 + true + + false + + + + 36 + + ethernet_mac + 36 + false + + + NA + + + + + 2 + true + + false + + + + 37 + + ethernet_mac + 37 + false + + + NA + + + + + 2 + true + + false + + + + 38 + + ethernet_mac + 38 + false + + + NA + + + + + 2 + true + + false + + + + 39 + + ethernet_mac + 39 + false + + + NA + + + + + 2 + true + + false + + + + 40 + + ethernet_mac + 40 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 41 + + ethernet_mac + 41 + false + + + NA + + + + + 2 + true + + false + + + + 42 + + ethernet_mac + 42 + false + + + NA + + + + + 2 + true + + false + + + + 43 + + ethernet_mac + 43 + false + + + NA + + + + + 2 + true + + false + + + + 44 + + ethernet_mac + 44 + false + + + NA + + + + + 2 + true + + false + + + + 45 + + ethernet_mac + 45 + false + + + NA + + + + + 2 + true + + false + + + + 46 + + ethernet_mac + 46 + false + + + NA + + + + + 2 + true + + false + + + + 47 + + ethernet_mac + 47 + false + + + NA + + + + + 2 + true + + false + + + + 48 + + ethernet_mac + 48 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 49 + + ethernet_mac + 49 + false + + + NA + + + + + 2 + true + + false + + + + 50 + + ethernet_mac + 50 + false + + + NA + + + + + 2 + true + + false + + + + 51 + + ethernet_mac + 51 + false + + + NA + + + + + 2 + true + + false + + + + 52 + + ethernet_mac + 52 + false + + + NA + + + + + 2 + true + + false + + + + 53 + + ethernet_mac + 53 + false + + + NA + + + + + 2 + true + + false + + + + 54 + + ethernet_mac + 54 + false + + + NA + + + + + 2 + true + + false + + + + 55 + + ethernet_mac + 55 + false + + + NA + + + + + 2 + true + + false + + + + 56 + + ethernet_mac + 56 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 57 + + ethernet_mac + 57 + false + + + NA + + + + + 2 + true + + false + + + + 58 + + ethernet_mac + 58 + false + + + NA + + + + + 2 + true + + false + + + + 59 + + ethernet_mac + 59 + false + + + NA + + + + + 2 + true + + false + + + + 60 + + ethernet_mac + 60 + false + + + NA + + + + + 2 + true + + false + + + + 64 + + ethernet_mac + 61 + false + + + NA + + + + + 2 + true + + false + + + + 65 + + ethernet_mac + 62 + false + + + NA + + + + + 2 + true + + false + + + + 66 + + ethernet_mac + 63 + false + + + NA + + + + + 2 + true + + false + + + + 67 + + ethernet_mac + 64 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 68 + + ethernet_mac + 65 + false + + + NA + + + + + 2 + true + + false + + + + 69 + + ethernet_mac + 66 + false + + + NA + + + + + 2 + true + + false + + + + 70 + + ethernet_mac + 67 + false + + + NA + + + + + 2 + true + + false + + + + 130 + + ethernet_mac + 127 + false + + + NA + + + + + 2 + true + + false + + + + 129 + + ethernet_mac + 126 + false + + + NA + + + + + 2 + true + + false + + + + 128 + + ethernet_mac + 125 + false + + + NA + + + + + 2 + true + + false + + + + 127 + + ethernet_mac + 124 + false + + + NA + + + + + 2 + true + + false + + + + 126 + + ethernet_mac + 123 + false + + + NA + + + + + 2 + true + + false + + + + 125 + + ethernet_mac + 122 + false + + + NA + + + + + 2 + true + + false + + + + 124 + + ethernet_mac + 121 + false + + + NA + + + + + 2 + true + + false + + + + 123 + + ethernet_mac + 120 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 122 + + ethernet_mac + 119 + false + + + NA + + + + + 2 + true + + false + + + + 121 + + ethernet_mac + 118 + false + + + NA + + + + + 2 + true + + false + + + + 120 + + ethernet_mac + 117 + false + + + NA + + + + + 2 + true + + false + + + + 119 + + ethernet_mac + 116 + false + + + NA + + + + + 2 + true + + false + + + + 118 + + ethernet_mac + 115 + false + + + NA + + + + + 2 + true + + false + + + + 117 + + ethernet_mac + 114 + false + + + NA + + + + + 2 + true + + false + + + + 116 + + ethernet_mac + 113 + false + + + NA + + + + + 2 + true + + false + + + + 115 + + ethernet_mac + 112 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 114 + + ethernet_mac + 111 + false + + + NA + + + + + 2 + true + + false + + + + 113 + + ethernet_mac + 110 + false + + + NA + + + + + 2 + true + + false + + + + 112 + + ethernet_mac + 109 + false + + + NA + + + + + 2 + true + + false + + + + 111 + + ethernet_mac + 108 + false + + + NA + + + + + 2 + true + + false + + + + 110 + + ethernet_mac + 107 + false + + + NA + + + + + 2 + true + + false + + + + 109 + + ethernet_mac + 106 + false + + + NA + + + + + 2 + true + + false + + + + 108 + + ethernet_mac + 105 + false + + + NA + + + + + 2 + true + + false + + + + 107 + + ethernet_mac + 104 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 106 + + ethernet_mac + 103 + false + + + NA + + + + + 2 + true + + false + + + + 105 + + ethernet_mac + 102 + false + + + NA + + + + + 2 + true + + false + + + + 104 + + ethernet_mac + 101 + false + + + NA + + + + + 2 + true + + false + + + + 103 + + ethernet_mac + 100 + false + + + NA + + + + + 2 + true + + false + + + + 102 + + ethernet_mac + 99 + false + + + NA + + + + + 2 + true + + false + + + + 101 + + ethernet_mac + 98 + false + + + NA + + + + + 2 + true + + false + + + + 100 + + ethernet_mac + 97 + false + + + NA + + + + + 2 + true + + false + + + + 99 + + ethernet_mac + 96 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 98 + + ethernet_mac + 95 + false + + + NA + + + + + 2 + true + + false + + + + 97 + + ethernet_mac + 94 + false + + + NA + + + + + 2 + true + + false + + + + 96 + + ethernet_mac + 93 + false + + + NA + + + + + 2 + true + + false + + + + 95 + + ethernet_mac + 92 + false + + + NA + + + + + 2 + true + + false + + + + 94 + + ethernet_mac + 91 + false + + + NA + + + + + 2 + true + + false + + + + 93 + + ethernet_mac + 90 + false + + + NA + + + + + 2 + true + + false + + + + 92 + + ethernet_mac + 89 + false + + + NA + + + + + 2 + true + + false + + + + 91 + + ethernet_mac + 88 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 90 + + ethernet_mac + 87 + false + + + NA + + + + + 2 + true + + false + + + + 89 + + ethernet_mac + 86 + false + + + NA + + + + + 2 + true + + false + + + + 88 + + ethernet_mac + 85 + false + + + NA + + + + + 2 + true + + false + + + + 87 + + ethernet_mac + 84 + false + + + NA + + + + + 2 + true + + false + + + + 86 + + ethernet_mac + 83 + false + + + NA + + + + + 2 + true + + false + + + + 85 + + ethernet_mac + 82 + false + + + NA + + + + + 2 + true + + false + + + + 84 + + ethernet_mac + 81 + false + + + NA + + + + + 2 + true + + false + + + + 83 + + ethernet_mac + 80 + false + + + NA + + MAP0 + + 0 + + 2 + true + + false + + + + 82 + + ethernet_mac + 79 + false + + + NA + + + + + 2 + true + + false + + + + 81 + + ethernet_mac + 78 + false + + + NA + + + + + 2 + true + + false + + + + 80 + + ethernet_mac + 77 + false + + + NA + + + + + 2 + true + + false + + + + 79 + + ethernet_mac + 76 + false + + + NA + + + + + 2 + true + + false + + + + 78 + + ethernet_mac + 75 + false + + + NA + + + + + 2 + true + + false + + + + 77 + + ethernet_mac + 74 + false + + + NA + + + + + 2 + true + + false + + + + 76 + + ethernet_mac + 73 + false + + + NA + + + + + 2 + true + + false + + + + 75 + + ethernet_mac + 72 + false + + + NA + + MAP1 + + 1 + + 2 + true + + false + + + + 74 + + ethernet_mac + 71 + false + + + NA + + + + + 2 + true + + false + + + + 73 + + ethernet_mac + 70 + false + + + NA + + + + + 2 + true + + false + + + + 72 + + ethernet_mac + 69 + false + + + NA + + + + + 2 + true + + false + + + + 71 + + ethernet_mac + 68 + false + + + NA + + + + + 2 + true + + false + + + + 131 + + ethernet_mac + 128 + false + + + NA + + + + + + 2 + true + + false + + + + 132 + + ethernet_mac + 135 + false + + + NA + + + + + 2 + true + + false + + + + 63 + + cpu_sdma + 136 + false + + + + 133 + + cpu_sdma + 137 + false + + + + 134 + + cpu_sdma + 138 + false + + + + 135 + + cpu_sdma + 139 + false + + + + 7 + true + false + + + 1 + true + false + + + 6 + true + true + + + 0 + true + false + + + 5 + true + false + + + 3 + true + true + + + 4 + true + true + + + 2 + false + false + + + 8 + false + true + + + 14 + false + false + + + 9 + false + false + + + 15 + false + true + + + 10 + false + true + + + 12 + false + true + + + 11 + true + false + + + 13 + false + true + + + 23 + false + false + + + 17 + false + false + + + 22 + true + false + + + 16 + false + true + + + 21 + false + false + + + 19 + true + true + + + 20 + true + false + + + 18 + false + true + + + 24 + false + false + + + 30 + false + false + + + 25 + false + true + + + 31 + false + false + + + 26 + true + false + + + 28 + false + true + + + 27 + false + true + + + 29 + false + true + + + 39 + false + false + + + 33 + true + false + + + 38 + false + false + + + 32 + false + false + + + 37 + true + false + + + 35 + true + true + + + 36 + true + false + + + 34 + false + false + + + 40 + false + false + + + 41 + true + true + + + 46 + true + true + + + 47 + true + true + + + 42 + true + false + + + 44 + false + false + + + 43 + false + true + + + 45 + true + false + + + 55 + false + false + + + 49 + true + false + + + 54 + true + true + + + 48 + false + true + + + 53 + true + false + + + 51 + false + true + + + 52 + false + true + + + 50 + false + true + + + 56 + false + false + + + 62 + true + false + + + 57 + false + true + + + 63 + true + true + + + 58 + false + false + + + 60 + false + true + + + 59 + false + true + + + 61 + false + true + + + 71 + false + false + + + 65 + true + false + + + 70 + false + true + + + 64 + true + true + + + 69 + true + false + + + 67 + true + true + + + 68 + true + true + + + 66 + true + true + + + 72 + true + false + + + 78 + false + false + + + 73 + false + true + + + 79 + true + true + + + 74 + true + false + + + 76 + true + true + + + 75 + true + true + + + 77 + false + true + + + 87 + false + false + + + 81 + false + false + + + 86 + false + false + + + 80 + true + false + + + 85 + false + true + + + 83 + true + true + + + 84 + true + false + + + 82 + false + false + + + 88 + true + false + + + 94 + true + false + + + 89 + false + false + + + 95 + true + false + + + 90 + true + false + + + 92 + false + true + + + 91 + false + false + + + 93 + false + false + + + 103 + true + false + + + 97 + true + false + + + 102 + true + false + + + 96 + true + true + + + 101 + true + false + + + 99 + true + true + + + 100 + true + true + + + 98 + false + true + + + 104 + true + false + + + 110 + false + false + + + 105 + true + true + + + 111 + true + false + + + 106 + true + false + + + 108 + false + false + + + 107 + false + true + + + 109 + true + false + + + 119 + true + false + + + 113 + true + true + + + 118 + true + true + + + 112 + true + false + + + 117 + true + false + + + 115 + false + false + + + 116 + true + false + + + 114 + false + false + + + 120 + false + false + + + 126 + false + false + + + 121 + false + true + + + 127 + false + true + + + 122 + true + false + + + 124 + false + true + + + 123 + false + true + + + 125 + false + true + + + 128 + false + true + + + 135 + true + false + + + 0 + + ORDER_MODE_BY_CLASS + BLINK_DUTY_CYCLE_0 + BLINK_DURATION_0 + BLINK_DUTY_CYCLE_0 + BLINK_DURATION_1 + PULSE_STRETCH_1 + false + 1627 + false + + 1 + 64 + 66 + false + + + 2 + 64 + 65 + false + + + 3 + 64 + 65 + false + + + 4 + 64 + 66 + false + + + 5 + 64 + 66 + false + + + 6 + 64 + 65 + false + + + 7 + 64 + 65 + false + + + 8 + 64 + 66 + false + + + + 0 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 1 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 2 + PORT_TYPE_XG + true + BLINK_SELECT_0 + false + true + true + + + 3 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 4 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + 5 + PORT_TYPE_XG + false + BLINK_SELECT_0 + false + true + false + + + + /tmp/cpss_uds + + 8 + + MAP0 + + 7 + + + 1 + + + 6 + + + 0 + + + 5 + + + 3 + + + 4 + + + 2 + + + + MAP1 + + 0 + + + 6 + + + 1 + + + 7 + + + 2 + + + 4 + + + 3 + + + 5 + + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..084f63926d4c --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +baf77e7f450def2266516782d159cbb4 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.xml new file mode 100644 index 000000000000..7a2208bf90ec --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-L1-F3_2T-128x25G.xml @@ -0,0 +1,1891 @@ + + + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + interface-mode-type + enumeration + Specifies supported Interface modes + + 1000BASE_X + 1G + 6 + + + SGMII + 1G , 2.5G + 3 + + + QSGMII + 1G + 13 + + + KR + 10G, 12G, 20G, 40G, 100G + 16 + + + SR_LR + 5G, 10G, 12G, 20G, 40G + 20 + + + KR2 + + 27 + + + KR4 + + 28 + + + SR_LR2 + + 29 + + + SR_LR4 + 100G + 30 + + + KR_C + CONSORTIUM - 25G + 32 + + + CR_C + CONSORTIUM - 25G + 33 + + + KR2_C + CONSORTIUM - 50G + 34 + + + CR2_C + CONSORTIUM - 50G + 35 + + + CR + + 36 + + + CR2 + + 37 + + + CR4 + + 38 + + + KR_S + + 39 + + + CR_S + + 40 + + + KR8 + + 41 + + + CR8 + + 42 + + + SR_LR8 + + 43 + + + USX_10G_QXGMII + + 51 + + + USX_20G_QXGMII + + 52 + + + USX_OUSGMII + + 53 + + + USX_20G_OXGMII + + 54 + + + NA + + 57 + + + + port-speed-type + enumeration + Specifies supported speeds + + 1G + 1G + 2 + + + 10G + 10G + 3 + + + 2500M + 2.5G + 5 + + + 5G + 5G + 6 + + + 25G + 25G, used in combination with CPSS_PORT_INTERFACE_MODE_KR_E, CPSS_PORT_INTERFACE_MODE_KR2_E + 21 + + + 40G + 40G + 9 + + + 50G + 50G + 14 + + + 100G + 100G + 13 + + + 200G + 200G + 24 + + + 400G + 400G + 25 + + + NA + NA + 35 + + + + fec-type + enumeration + Rx parameter type + + enabled + Enabled + 0 + + + disabled + Disabled + 1 + + + rs_enabled + RS FEC enabled + 2 + + + both_enabled + Both enabled + 3 + + + rs_544_514_enabled + RS FEC 544 and 514 + 4 + + + + physical-port-num-type + uint32 + PHYSICAL PORT NUM + 0 + 1023 + + + tx-param-type + enumeration + Tx parameter type + + pre + pre + 0 + + + post + post + 1 + + + peak + peak + 2 + + + + rx-param-type + enumeration + Rx parameter type + + dataRate + dataRate + 0 + + + res1Sel + res1Sel + 1 + + + res2Sel + res2Sel + 2 + + + cap1Sel + cap1Sel + 3 + + + cap2Sel + cap2Sel + 4 + + + minCap + minCap + 5 + + + minCapN + minCapN + 6 + + + sumfBoostTargetC0 + sumfBoostTargetC0 + 7 + + + sumfBoostTargetC1 + sumfBoostTargetC1 + 8 + + + sumfBoostTargetC2 + sumfBoostTargetC2 + 9 + + + midpointPhaseOs0 + midpointPhaseOs0 + 10 + + + midpointPhaseOs1 + midpointPhaseOs1 + 11 + + + midpointPhaseOs2 + midpointPhaseOs2 + 12 + + + selmufi + selmufi + 13 + + + selmuff + selmuff + 14 + + + selmupi + selmupi + 15 + + + selmupf + selmupf + 16 + + + midpointLargeThresKLane + midpointLargeThresKLane + 17 + + + midpointSmallThresKLane + midpointSmallThresKLane + 18 + + + midpointLargeThresCLane + midpointLargeThresCLane + 19 + + + midpointSmallThresCLane + midpointSmallThresCLane + 20 + + + inxSumfMidpointAdatptiveEnLane + inxSumfMidpointAdatptiveEnLane + 21 + + + dfeResF0aHighThresInitLane + dfeResF0aHighThresInitLane + 22 + + + dfeResF0aHighThresEndLane + dfeResF0aHighThresEndLane + 23 + + + squelch + squelch + 24 + + + align90 + align90 + 25 + + + sampler + sampler + 26 + + + slewRateCtrl0 + slewRateCtrl0 + 27 + + + slewRateCtrl1 + slewRateCtrl1 + 28 + + + EO + EO + 29 + + + minCap1 + minCap1 + 30 + + + maxCap1 + maxCap1 + 31 + + + minRes1 + minRes1 + 32 + + + maxRes1 + maxRes1 + 33 + + + + boolean-type + enumeration + Boolean 32 bits , due to big endian + + false + False + 0 + + + true + True + 1 + + + + serdes-type + enumeration + Serdes Type + + NA + No serdes + 0 + + + AVAGO + AVAGO + 1 + + + COMPHY + COMPHY + 2 + + + COMPHY_C12G + COMPHY_C12G + 3 + + + COMPHY_C28G + COMPHY_C28G + 4 + + + COMPHY_C112G + COMPHY_C112G + 5 + + + + phy-serdes-type + enumeration + Phy Serdes Type + + NA + No serdes + 0 + + + COMPHY + COMPHY + 1 + + + COMPHY_C28G + COMPHY_C28G + 2 + + + + port-interconnect-profile-type + enumeration + Enumerator of interconnect profile. + + profile_default + Profile Default + 0 + + + profile_1 + Profile 1 + 1 + + + profile_2 + Profile 2 + 2 + + + + ASIC_Falcon + + + 100GR2 + + CR2 + 100G + rs_544_514_enabled + + + KR2 + 100G + rs_544_514_enabled + + + SR_LR2 + 100G + rs_544_514_enabled + + + SR_LR2 + 50G + rs_enabled + + + CR2 + 50G + rs_enabled + + + KR2 + 50G + rs_enabled + + + CR2 + 100G + rs_544_514_enabled + rs_544_514_enabled + + + KR2 + 100G + rs_544_514_enabled + rs_544_514_enabled + + + CR2 + 50G + rs_enabled + rs_enabled + + + KR2 + 50G + rs_enabled + rs_enabled + + + + 100GR4 + + CR4 + 100G + rs_enabled + + + KR4 + 100G + rs_enabled + + + SR_LR4 + 100G + rs_enabled + + + CR4 + 100G + rs_enabled + rs_enabled + + + KR4 + 100G + rs_enabled + rs_enabled + + + + 10GR1 + + KR + 10G + enabled + + + SR_LR + 10G + enabled + + + KR + 10G + enabled + enabled + + + + 10GR1Fix + + KR + 10G + disabled + + + + 200GR4 + + CR4 + 200G + rs_544_514_enabled + + + SR_LR4 + 100G + rs_enabled + + + KR4 + 100G + rs_enabled + + + CR4 + 100G + rs_enabled + + + KR4 + 200G + rs_544_514_enabled + + + SR_LR4 + 200G + rs_544_514_enabled + + + CR4 + 200G + rs_544_514_enabled + rs_544_514_enabled + + + KR4 + 200G + rs_544_514_enabled + rs_544_514_enabled + + + CR4 + 100G + rs_enabled + rs_enabled + + + KR4 + 100G + rs_enabled + rs_enabled + + + + 25GR1 + + CR + 25G + rs_enabled + + + KR + 25G + rs_enabled + + + KR + 10G + enabled + + + SR_LR + 25G + rs_enabled + + + SR_LR + 10G + enabled + + + CR + 25G + rs_enabled + rs_enabled + + + KR + 25G + rs_enabled + rs_enabled + + + KR + 10G + enabled + enabled + + + + 400GR8 + + CR8 + 400G + rs_544_514_enabled + + + KR8 + 400G + rs_544_514_enabled + + + SR_LR8 + 400G + rs_544_514_enabled + + + CR8 + 400G + rs_544_514_enabled + rs_544_514_enabled + + + KR8 + 400G + rs_544_514_enabled + rs_544_514_enabled + + + + 50GR1 + + CR + 50G + rs_544_514_enabled + + + KR + 50G + rs_544_514_enabled + + + CR + 25G + rs_enabled + + + KR + 25G + rs_enabled + + + KR + 10G + enabled + + + SR_LR + 50G + rs_544_514_enabled + + + SR_LR + 25G + rs_enabled + + + SR_LR + 10G + enabled + + + CR + 50G + rs_544_514_enabled + rs_544_514_enabled + + + KR + 50G + rs_544_514_enabled + rs_544_514_enabled + + + CR + 25G + rs_enabled + rs_enabled + + + KR + 25G + rs_enabled + rs_enabled + + + KR + 10G + enabled + enabled + + + + + + 0 + AVAGO + profile_default + 100GR4 + true + + 0 + 25GR1 + + 100GR4 + + + + 1 + 25GR1 + + + + + + 2 + 25GR1 + + + + + + 3 + 25GR1 + + + + + + 4 + 25GR1 + + 100GR4 + + + + 5 + 25GR1 + + + + + + 6 + 25GR1 + + + + + + 7 + 25GR1 + + + + + + + 8 + AVAGO + profile_default + 100GR4 + true + + 8 + 25GR1 + + 100GR4 + + + + 9 + 25GR1 + + + + + + 10 + 25GR1 + + + + + + 11 + 25GR1 + + + + + + 12 + 25GR1 + + 100GR4 + + + + 13 + 25GR1 + + + + + + 14 + 25GR1 + + + + + + 15 + 25GR1 + + + + + + + 16 + AVAGO + profile_default + 100GR4 + true + + 16 + 25GR1 + + 100GR4 + + + + 17 + 25GR1 + + + + + + 18 + 25GR1 + + + + + + 19 + 25GR1 + + + + + + 20 + 25GR1 + + 100GR4 + + + + 21 + 25GR1 + + + + + + 22 + 25GR1 + + + + + + 23 + 25GR1 + + + + + + + 24 + AVAGO + profile_default + 100GR4 + true + + 24 + 25GR1 + + 100GR4 + + + + 25 + 25GR1 + + + + + + 26 + 25GR1 + + + + + + 27 + 25GR1 + + + + + + 28 + 25GR1 + + 100GR4 + + + + 29 + 25GR1 + + + + + + 30 + 25GR1 + + + + + + 31 + 25GR1 + + + + + + + 32 + AVAGO + profile_default + 100GR4 + true + + 32 + 25GR1 + + 100GR4 + + + + 33 + 25GR1 + + + + + + 34 + 25GR1 + + + + + + 35 + 25GR1 + + + + + + 36 + 25GR1 + + 100GR4 + + + + 37 + 25GR1 + + + + + + 38 + 25GR1 + + + + + + 39 + 25GR1 + + + + + + + 40 + AVAGO + profile_default + 100GR4 + true + + 40 + 25GR1 + + 100GR4 + + + + 41 + 25GR1 + + + + + + 42 + 25GR1 + + + + + + 43 + 25GR1 + + + + + + 44 + 25GR1 + + 100GR4 + + + + 45 + 25GR1 + + + + + + 46 + 25GR1 + + + + + + 47 + 25GR1 + + + + + + + 48 + AVAGO + profile_default + 100GR4 + true + + 48 + 25GR1 + + 100GR4 + + + + 49 + 25GR1 + + + + + + 50 + 25GR1 + + + + + + 51 + 25GR1 + + + + + + 52 + 25GR1 + + 100GR4 + + + + 53 + 25GR1 + + + + + + 54 + 25GR1 + + + + + + 55 + 25GR1 + + + + + + + 56 + AVAGO + profile_default + 100GR4 + true + + 56 + 25GR1 + + 100GR4 + + + + 57 + 25GR1 + + + + + + 58 + 25GR1 + + + + + + 59 + 25GR1 + + + + + + 60 + 25GR1 + + 100GR4 + + + + 64 + 25GR1 + + + + + + 65 + 25GR1 + + + + + + 66 + 25GR1 + + + + + + + 67 + AVAGO + profile_default + 100GR4 + true + + 67 + 25GR1 + + 100GR4 + + + + 68 + 25GR1 + + + + + + 69 + 25GR1 + + + + + + 70 + 25GR1 + + + + + + 71 + 25GR1 + + 100GR4 + + + + 72 + 25GR1 + + + + + + 73 + 25GR1 + + + + + + 74 + 25GR1 + + + + + + + 75 + AVAGO + profile_default + 100GR4 + true + + 75 + 25GR1 + + 100GR4 + + + + 76 + 25GR1 + + + + + + 77 + 25GR1 + + + + + + 78 + 25GR1 + + + + + + 79 + 25GR1 + + 100GR4 + + + + 80 + 25GR1 + + + + + + 81 + 25GR1 + + + + + + 82 + 25GR1 + + + + + + + 83 + AVAGO + profile_default + 100GR4 + true + + 83 + 25GR1 + + 100GR4 + + + + 84 + 25GR1 + + + + + + 85 + 25GR1 + + + + + + 86 + 25GR1 + + + + + + 87 + 25GR1 + + 100GR4 + + + + 88 + 25GR1 + + + + + + 89 + 25GR1 + + + + + + 90 + 25GR1 + + + + + + + 91 + AVAGO + profile_default + 100GR4 + true + + 91 + 25GR1 + + 100GR4 + + + + 92 + 25GR1 + + + + + + 93 + 25GR1 + + + + + + 94 + 25GR1 + + + + + + 95 + 25GR1 + + 100GR4 + + + + 96 + 25GR1 + + + + + + 97 + 25GR1 + + + + + + 98 + 25GR1 + + + + + + + 99 + AVAGO + profile_default + 100GR4 + true + + 99 + 25GR1 + + 100GR4 + + + + 100 + 25GR1 + + + + + + 101 + 25GR1 + + + + + + 102 + 25GR1 + + + + + + 103 + 25GR1 + + 100GR4 + + + + 104 + 25GR1 + + + + + + 105 + 25GR1 + + + + + + 106 + 25GR1 + + + + + + + 107 + AVAGO + profile_default + 100GR4 + true + + 107 + 25GR1 + + 100GR4 + + + + 108 + 25GR1 + + + + + + 109 + 25GR1 + + + + + + 110 + 25GR1 + + + + + + 111 + 25GR1 + + 100GR4 + + + + 112 + 25GR1 + + + + + + 113 + 25GR1 + + + + + + 114 + 25GR1 + + + + + + + 115 + AVAGO + profile_default + 100GR4 + true + + 115 + 25GR1 + + 100GR4 + + + + 116 + 25GR1 + + + + + + 117 + 25GR1 + + + + + + 118 + 25GR1 + + + + + + 119 + 25GR1 + + 100GR4 + + + + 120 + 25GR1 + + + + + + 121 + 25GR1 + + + + + + 122 + 25GR1 + + + + + + + 123 + AVAGO + profile_default + 100GR4 + true + + 123 + 25GR1 + + 100GR4 + + + + 124 + 25GR1 + + + + + + 125 + 25GR1 + + + + + + 126 + 25GR1 + + + + + + 127 + 25GR1 + + 100GR4 + + + + 128 + 25GR1 + + + + + + 129 + 25GR1 + + + + + + 130 + 25GR1 + + + + + + + 131 + AVAGO + profile_default + 10GR1Fix + false + + + 132 + AVAGO + profile_default + 10GR1Fix + false + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..4c6962b96910 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +9699d7ac6395ccab96dec333c782dc1d \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.xml new file mode 100644 index 000000000000..7cd85e016983 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/ASK-PP-F3_2T-128x25G.xml @@ -0,0 +1,1180 @@ + + + + + + std-string + string + standard string. + 1 + 100 + + + queue-id-type + uint32 + Queue id + 0 + 7 + + + precent-type + uint32 + Precent + 0 + 100 + + + phaThreadId-type + uint32 + Thread id + 1 + 255 + + + routing-mode-type + enumeration + Specifies routing mode. + + POLICY_BASED_ROUTING_ONLY + PBR only + 0 + + + TCAM_ROUTER_BASED + Router engine or PBR + 1 + + + + shared-table-mode-type + enumeration + Specifies table sharing modes for L3 (LPM), L2 (FDB), EM (Exact Match) + + MID_L3_MID_L2_NO_EM + MID_L3_MID_L2_NO_EM + 0 + + + MID_L3_MID_L2_MIN_EM + MID_L3_MID_L2_MIN_EM + 1 + + + LOW_MAX_L3_MID_LOW_L2_NO_EM + LOW_MAX_L3_MID_LOW_L2_NO_EM + 2 + + + MAX_L3_MIN_L2_NO_EM + MAX_L3_MIN_L2_NO_EM + 3 + + + + pha-firmware-image-id-type + enumeration + Specifies supported Pha image id + + DEFAULT + Default PHA firmware image ID + 0 + + + 01 + 01 firmware image ID + 1 + + + 02 + 02 PHA firmware image ID + 2 + + + + pha-firmware-thread-type + enumeration + Specifies supported Pha thread type + + IOAM_INGRESS_SWITCH_IPV4 + IOAM_INGRESS_SWITCH_IPV4 + 1 + + + IOAM_INGRESS_SWITCH_IPV6 + IOAM_INGRESS_SWITCH_IPV6 + 2 + + + IOAM_TRANSIT_SWITCH_IPV4 + IOAM_TRANSIT_SWITCH_IPV4 + 3 + + + IOAM_TRANSIT_SWITCH_IPV6 + IOAM_TRANSIT_SWITCH_IPV6 + 4 + + + INT_IOAM_MIRRORING + INT_IOAM_MIRRORING + 5 + + + INT_IOAM_EGRESS_SWITCH + INT_IOAM_EGRESS_SWITCH + 6 + + + MPLS_SR_NO_EL + MPLS_SR_NO_EL + 7 + + + MPLS_SR_ONE_EL + MPLS_SR_ONE_EL + 8 + + + MPLS_SR_TWO_EL + MPLS_SR_TWO_EL + 9 + + + MPLS_SR_THREE_EL + MPLS_SR_THREE_EL + 10 + + + UNIFIED_SR + UNIFIED_SR + 11 + + + CLASSIFIER_NSH_OVER_ETHERNET + CLASSIFIER_NSH_OVER_ETHERNET + 12 + + + CLASSIFIER_NSH_OVER_VXLAN_GPE + CLASSIFIER_NSH_OVER_VXLAN_GPE + 13 + + + SFF_NSH_VXLAN_GPE_TO_ETHERNET + SFF_NSH_VXLAN_GPE_TO_ETHERNET + 14 + + + SFF_NSH_ETHERNET_TO_VXLAN_GPE + SFF_NSH_ETHERNET_TO_VXLAN_GPE + 15 + + + IOAM_EGRESS_SWITCH_IPV6 + IOAM_EGRESS_SWITCH_IPV6 + 16 + + + SRV6_END_NODE + SRV6_END_NODE + 17 + + + SRV6_PENULTIMATE_END_NODE + SRV6_PENULTIMATE_END_NODE + 18 + + + SRV6_SRC_NODE_1_SEGMENT + SRV6_SRC_NODE_1_SEGMENT + 19 + + + SRV6_SRC_NODE_FIRST_PASS_2_3_SEGMENTS + SRV6_SRC_NODE_FIRST_PASS_2_3_SEGMENTS + 20 + + + SRV6_SRC_NODE_SECOND_PASS_3_SEGMENTS + SRV6_SRC_NODE_SECOND_PASS_3_SEGMENTS + 21 + + + SRV6_SRC_NODE_SECOND_PASS_2_SEGMENTS + SRV6_SRC_NODE_SECOND_PASS_2_SEGMENTS + 22 + + + SGT_NETWORK_ADD_MSB + SGT_NETWORK_ADD_MSB + 23 + + + SGT_NETWORK_FIX + SGT_NETWORK_FIX + 24 + + + SGT_NETWORK_REMOVE + SGT_NETWORK_REMOVE + 25 + + + SGT_EDSA_FIX + SGT_EDSA_FIX + 26 + + + SGT_EDSA_REMOVE + SGT_EDSA_REMOVE + 27 + + + SGT_GBP_FIX_IPV4 + SGT_GBP_FIX_IPV4 + 28 + + + SGT_GBP_FIX_IPV6 + SGT_GBP_FIX_IPV6 + 29 + + + SGT_GBP_REMOVE_IPV4 + SGT_GBP_REMOVE_IPV4 + 30 + + + SGT_GBP_REMOVE_IPV6 + SGT_GBP_REMOVE_IPV6 + 31 + + + PTP_PHY_1_STEP + PTP_PHY_1_STEP + 32 + + + EGRESS_MIRRORING_METADATA + EGRESS_MIRRORING_METADATA + 33 + + + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV4 + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV4 + 34 + + + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV6 + CC_ERSPAN_TYPE_II_TRG_DEV_LC_IPV6 + 35 + + + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV4 + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV4 + 36 + + + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV6 + CC_ERSPAN_TYPE_II_TRG_DEV_DIRECT_IPV6 + 37 + + + CC_ERSPAN_TYPE_II_SRC_DEV + CC_ERSPAN_TYPE_II_SRC_DEV + 38 + + + VXLAN_GBP_SOURCE_GROUP_POLICY_ID + VXLAN_GBP_SOURCE_GROUP_POLICY_ID + 39 + + + SRV6_BEST_EFFORT + SRV6_BEST_EFFORT + 40 + + + SRV6_SRC_NODE_1_CONTAINER + SRV6_SRC_NODE_1_CONTAINER + 41 + + + SRV6_SRC_NODE_FIRST_PASS_2_3_CONTAINERS + SRV6_SRC_NODE_FIRST_PASS_2_3_CONTAINERS + 42 + + + SRV6_SRC_NODE_SECOND_PASS_2_CONTAINERS + SRV6_SRC_NODE_SECOND_PASS_2_CONTAINERS + 43 + + + SRV6_SRC_NODE_SECOND_PASS_3_CONTAINERS + SRV6_SRC_NODE_SECOND_PASS_3_CONTAINERS + 44 + + + SRV6_END_NODE_COC32_GSID + SRV6_END_NODE_COC32_GSID + 45 + + + IPV4_TTL_INCREMENT + IPV4_TTL_INCREMENT + 46 + + + IPV6_HOP_LIMIT_INCREMENT + IPV6_HOP_LIMIT_INCREMENT + 47 + + + CLEAR_OUTGOING_MTAG_COMMAND + CLEAR_OUTGOING_MTAG_COMMAND + 48 + + + SFLOW_V5_IPV4 + SFLOW_V5_IPV4 + 49 + + + SFLOW_V5_IPV6 + SFLOW_V5_IPV6 + 50 + + + SLS + SLS + 51 + + + + trunk-member-mode-type + enumeration + Specifies supported Pha image id + + NATIVE + NATIVE +* the trunk members are filled +* according to the order given by application. +* Regular trunk may hold max of 8 members. +* Cascade trunk may hold : +* max of 64 members + 0 + + + FLEX + FLEX +* A mode to allows flexibility for +* each Regular trunk to state it's max number of members (before starting to add members). +* (this mode not effect 'cascade trunk' members) +* Regular trunk may hold : max of 4K members. (each trunk set it's own limit) +* Cascade trunk may hold : max of 64 members. + 2 + + + + number-physical-port-type + enumeration + AC3X/AC5X 128, falcon 64, 128, 256, 512, 1024 + + no-ports + no-ports + 0 + + + 64-ports + 64-ports + 64 + + + 128-ports + 128-ports + 128 + + + 256-ports + 256-ports + 256 + + + 512-ports + 512-ports + 512 + + + 1024-ports + 1024-ports + 1024 + + + + serdes-ref-clock-type + enumeration + Specifies serdes refernce clock. + + external_25_single_ended + EXTERNAL_25_SINGLE_ENDED + 0 + + + external_125_single_ended + EXTERNAL_125_SINGLE_ENDED + 1 + + + external_125_diff + EXTERNAL_125_DIFF + 2 + + + external_156_25_single_ended + EXTERNAL_156_25_SINGLE_ENDED + 3 + + + external_156_25_diff + EXTERNAL_156_25_DIFF + 4 + + + internal_125 + INTERNAL_125 + 5 + + + + cpu-port-id-type + uint32 + CPU port id + 0 + 7 + + + rx-buffer-size-type + uint32 + Rx Buffer size + 64 + 10240 + + + tx-sdma-queue-mode-type + enumeration + Specifies TX queue mode. + + Normal + Application + 0 + + + Packet_Generator + Traffic generator + 1 + + + + alloc-method-type + enumeration + Specifies Buffers allocation method. + + Dynamic_Alloc + Dynamic + 0 + + + Static_Alloc + Static + 1 + + + + au_mesage_lenght-type + enumeration + Specifies Buffers allocation method. + + 4_words + 4 Words + 0 + + + 8_words + 8 Words + 1 + + + + boolean-type + enumeration + Boolean 32 bits , due to bing endian + + false + False + 0 + + + true + True + 1 + + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + ASIC_Falcon + + Falcon-3.2 + + 4294967295 + external_25_single_ended + 2 + 60 + 256-ports + false + true + 0 + + + true + + 4096 + + + 2048 + + + + 0 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 3 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 2 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 1 + 0 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 7 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 6 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 5 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 4 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 3 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 2 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 1 + Static_Alloc + 20 + 20 + 2048 + 0 + + + 0 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 0 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 1 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 6 + Static_Alloc + Normal + 20 + 0 + 128 + + + 2 + 7 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 0 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 1 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 2 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 3 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 4 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 5 + Static_Alloc + Normal + 20 + 0 + 128 + + + 3 + 6 + Static_Alloc + Packet_Generator + 256 + 256 + 144 + + + 3 + 7 + Static_Alloc + Packet_Generator + 1 + 1 + 3032 + + + + false + false + false + 0 + 8_words + false + + + + TCAM_ROUTER_BASED + 0 + MID_L3_MID_L2_NO_EM + false + + + true + true + true + true + true + true + + 1023 + FLEX + + true + true + true + true + + false + 02 + 0 + + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.md5 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.md5 new file mode 100644 index 000000000000..cfa1a375d83b --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.md5 @@ -0,0 +1 @@ +88cbf08802a5d41b605a8dd83f2c5139 \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.xml b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.xml new file mode 100644 index 000000000000..635a099a35aa --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/SAI-F3_2T-128x25G.xml @@ -0,0 +1,900 @@ + + + + + + device-id-type + uint32 + Device ID 0..1 + 0 + 1 + + + port-id-type + uint32 + Interface number + 0 + 1023 + + + logDest-type + enumeration + Logging Feature Options + + SAI_LOG_SYSLOG + SYSLOG {Syslog service should be running to use this option} + 0 + + + SAI_LOG_CONSOLE + CONSOLE + 1 + + + SAI_LOG_FILE + FILE {Warning !!! Use with caution. Can cause disk full issues} + 2 + + + + InDropCounter-type + enumeration + Router In Drop Reason Feature Options + + TTL_HOPLIMIT_EXCEEDED + Router In Drop Counters track TTL & Hop Limit Exceeded Packets + 0 + + + ROUTE_BLACKHOLE + Router In Drop Counters track Route Black Hole Packets + 1 + + + + Feature-enable + enumeration + Feature Enabled/Disabled + + Disabled + Disabled + 0 + + + Enabled + Enabled + 1 + + + + log-dest-file-path-type + string + A string with path to file for logging feature + 2 + 30 + + + acl-feature-name-type + enumeration + + + port-sFlow + SFlow over Port + 0 + + + port-counters-ipv4-ipv6 + Port ipv4/ipv6 counters + 1 + + + control-acl + ACLs for control packet handling + 2 + + + debug-counter-acl + ACLs for Debug Counters + 3 + + + + ingress-acl-stage-type + enumeration + + + disabled + Feature not enabled + 0 + + + IPCL0 + Stage IPCL0 + 1 + + + IPCL1 + Stage IPCL1 + 2 + + + + egress-acl-stage-type + enumeration + + + disabled + Feature not enabled + 0 + + + EPCL0 + Stage EPCL0 + 2 + + + + feature-priority-type + uint32 + Feature priority + 2 + 15 + + + hit-number-type + uint32 + Hit/lookup number + 0 + 3 + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + + + ASIC_Falcon + ASK-Board-F3_2T-128x25G.xml + + + 0 + 0 + 0 + + + 1 + 0 + 1 + + + 2 + 0 + 2 + + + 3 + 0 + 3 + + + 4 + 0 + 4 + + + 5 + 0 + 5 + + + 6 + 0 + 6 + + + 7 + 0 + 7 + + + 8 + 0 + 8 + + + 9 + 0 + 9 + + + 10 + 0 + 10 + + + 11 + 0 + 11 + + + 12 + 0 + 12 + + + 13 + 0 + 13 + + + 14 + 0 + 14 + + + 15 + 0 + 15 + + + 16 + 0 + 16 + + + 17 + 0 + 17 + + + 18 + 0 + 18 + + + 19 + 0 + 19 + + + 20 + 0 + 20 + + + 21 + 0 + 21 + + + 22 + 0 + 22 + + + 23 + 0 + 23 + + + 24 + 0 + 24 + + + 25 + 0 + 25 + + + 26 + 0 + 26 + + + 27 + 0 + 27 + + + 28 + 0 + 28 + + + 29 + 0 + 29 + + + 30 + 0 + 30 + + + 31 + 0 + 31 + + + 32 + 0 + 32 + + + 33 + 0 + 33 + + + 34 + 0 + 34 + + + 35 + 0 + 35 + + + 36 + 0 + 36 + + + 37 + 0 + 37 + + + 38 + 0 + 38 + + + 39 + 0 + 39 + + + 40 + 0 + 40 + + + 41 + 0 + 41 + + + 42 + 0 + 42 + + + 43 + 0 + 43 + + + 44 + 0 + 44 + + + 45 + 0 + 45 + + + 46 + 0 + 46 + + + 47 + 0 + 47 + + + 48 + 0 + 48 + + + 49 + 0 + 49 + + + 50 + 0 + 50 + + + 51 + 0 + 51 + + + 52 + 0 + 52 + + + 53 + 0 + 53 + + + 54 + 0 + 54 + + + 55 + 0 + 55 + + + 56 + 0 + 56 + + + 57 + 0 + 57 + + + 58 + 0 + 58 + + + 59 + 0 + 59 + + + 60 + 0 + 60 + + + 61 + 0 + 64 + + + 62 + 0 + 65 + + + 63 + 0 + 66 + + + 64 + 0 + 67 + + + 65 + 0 + 68 + + + 66 + 0 + 69 + + + 67 + 0 + 70 + + + 68 + 0 + 71 + + + 69 + 0 + 72 + + + 70 + 0 + 73 + + + 71 + 0 + 74 + + + 72 + 0 + 75 + + + 73 + 0 + 76 + + + 74 + 0 + 77 + + + 75 + 0 + 78 + + + 76 + 0 + 79 + + + 77 + 0 + 80 + + + 78 + 0 + 81 + + + 79 + 0 + 82 + + + 80 + 0 + 83 + + + 81 + 0 + 84 + + + 82 + 0 + 85 + + + 83 + 0 + 86 + + + 84 + 0 + 87 + + + 85 + 0 + 88 + + + 86 + 0 + 89 + + + 87 + 0 + 90 + + + 88 + 0 + 91 + + + 89 + 0 + 92 + + + 90 + 0 + 93 + + + 91 + 0 + 94 + + + 92 + 0 + 95 + + + 93 + 0 + 96 + + + 94 + 0 + 97 + + + 95 + 0 + 98 + + + 96 + 0 + 99 + + + 97 + 0 + 100 + + + 98 + 0 + 101 + + + 99 + 0 + 102 + + + 100 + 0 + 103 + + + 101 + 0 + 104 + + + 102 + 0 + 105 + + + 103 + 0 + 106 + + + 104 + 0 + 107 + + + 105 + 0 + 108 + + + 106 + 0 + 109 + + + 107 + 0 + 110 + + + 108 + 0 + 111 + + + 109 + 0 + 112 + + + 110 + 0 + 113 + + + 111 + 0 + 114 + + + 112 + 0 + 115 + + + 113 + 0 + 116 + + + 114 + 0 + 117 + + + 115 + 0 + 118 + + + 116 + 0 + 119 + + + 117 + 0 + 120 + + + 118 + 0 + 121 + + + 119 + 0 + 122 + + + 120 + 0 + 123 + + + 121 + 0 + 124 + + + 122 + 0 + 125 + + + 123 + 0 + 126 + + + 124 + 0 + 127 + + + 125 + 0 + 128 + + + 126 + 0 + 129 + + + 127 + 0 + 130 + + + 128 + 0 + 131 + + + 129 + 0 + 132 + + + + 8 + 0 + 0 + 64 + 8 + 8 + 1024 + 0 + 0 + + + + 0 + + + Enabled + Enabled + + + Enabled + + + + SAI_LOG_SYSLOG + + + control-acl + 3 + + IPCL0 + 1 + + + EPCL0 + 0 + + + + port-sFlow + 4 + + IPCL0 + 0 + + + EPCL0 + 0 + + + + port-counters-ipv4-ipv6 + 5 + + IPCL0 + 3 + + + EPCL0 + 0 + + + + debug-counter-acl + 2 + + IPCL0 + 1 + + + EPCL0 + 0 + + + + \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers.json.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers.json.j2 new file mode 100644 index 000000000000..0b1cb2c541b6 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers.json.j2 @@ -0,0 +1,2 @@ +{%- set default_topo = 't1' %} +{%- include 'buffers_config.j2' %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t0.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..28e30dee8cc3 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t0.j2 @@ -0,0 +1,49 @@ + +{%- set default_cable = '40m' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "ingress" + }, + "ingress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "ingress" + }, + "egress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "egress" + }, + "egress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "egress" + } + }, + "BUFFER_PROFILE": { + "egress_lossless_profile": { + "pool": "egress_pool1", + "size": "0", + "dynamic_th": "1" + }, + "egress_lossy_profile": { + "pool": "egress_pool2", + "size": "0", + "dynamic_th": "1" + }, + "ingress_lossless_profile": { + "pool": "ingress_pool1", + "size": "0", + "dynamic_th": "-3" + }, + "ingress_lossy_profile": { + "pool": "ingress_pool2", + "size": "0", + "dynamic_th": "-3" + } + }, +{%- endmacro %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t1.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..28e30dee8cc3 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/buffers_defaults_t1.j2 @@ -0,0 +1,49 @@ + +{%- set default_cable = '40m' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "ingress" + }, + "ingress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "ingress" + }, + "egress_pool1": { + "mode": "dynamic", + "size": "10500000", + "type": "egress" + }, + "egress_pool2": { + "mode": "dynamic", + "size": "1000000", + "type": "egress" + } + }, + "BUFFER_PROFILE": { + "egress_lossless_profile": { + "pool": "egress_pool1", + "size": "0", + "dynamic_th": "1" + }, + "egress_lossy_profile": { + "pool": "egress_pool2", + "size": "0", + "dynamic_th": "1" + }, + "ingress_lossless_profile": { + "pool": "ingress_pool1", + "size": "0", + "dynamic_th": "-3" + }, + "ingress_lossy_profile": { + "pool": "ingress_pool2", + "size": "0", + "dynamic_th": "-3" + } + }, +{%- endmacro %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/create_only_config_db_buffers.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/create_only_config_db_buffers.json new file mode 100644 index 000000000000..8bea3894c083 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/create_only_config_db_buffers.json @@ -0,0 +1,7 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "create_only_config_db_buffers": "true" + } + } +} \ No newline at end of file diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/hwsku.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/hwsku.json new file mode 100644 index 000000000000..f6745e836052 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/hwsku.json @@ -0,0 +1,204 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet4": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet8": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet12": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet16": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet20": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet24": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet28": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet32": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet36": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet40": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet44": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet48": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet52": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet56": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet60": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet64": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet68": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet72": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet76": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet80": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet84": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet88": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet92": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet96": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet100": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet104": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet108": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet112": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet116": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet120": { + "default_brkout_mode": "2x100G", + "subport": "1", + "autoneg": "on", + "fec": "none" + }, + "Ethernet124": { + "default_brkout_mode": "2x100G", + "subport": "2", + "autoneg": "on", + "fec": "none" + }, + "Ethernet128": { + "default_brkout_mode": "1x10G", + "autoneg": "off" + }, + "Ethernet129": { + "default_brkout_mode": "1x10G", + "autoneg": "off" + } + } +} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/port_config.ini b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/port_config.ini new file mode 100644 index 000000000000..85d256856fb8 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/port_config.ini @@ -0,0 +1,131 @@ +# name lanes alias speed autoneg fec index +Ethernet0 0 Eth1/1 25000 on none 1 +Ethernet1 1 Eth1/2 25000 on none 1 +Ethernet2 2 Eth1/3 25000 on none 1 +Ethernet3 3 Eth1/4 25000 on none 1 +Ethernet4 4 Eth1/5 25000 on none 1 +Ethernet5 5 Eth1/6 25000 on none 1 +Ethernet6 6 Eth1/7 25000 on none 1 +Ethernet7 7 Eth1/8 25000 on none 1 +Ethernet8 8 Eth2/1 25000 on none 2 +Ethernet9 9 Eth2/2 25000 on none 2 +Ethernet10 10 Eth2/3 25000 on none 2 +Ethernet11 11 Eth2/4 25000 on none 2 +Ethernet12 12 Eth2/5 25000 on none 2 +Ethernet13 13 Eth2/6 25000 on none 2 +Ethernet14 14 Eth2/7 25000 on none 2 +Ethernet15 15 Eth2/8 25000 on none 2 +Ethernet16 16 Eth3/1 25000 on none 3 +Ethernet17 17 Eth3/2 25000 on none 3 +Ethernet18 18 Eth3/3 25000 on none 3 +Ethernet19 19 Eth3/4 25000 on none 3 +Ethernet20 20 Eth3/5 25000 on none 3 +Ethernet21 21 Eth3/6 25000 on none 3 +Ethernet22 22 Eth3/7 25000 on none 3 +Ethernet23 23 Eth3/8 25000 on none 3 +Ethernet24 24 Eth4/1 25000 on none 4 +Ethernet25 25 Eth4/2 25000 on none 4 +Ethernet26 26 Eth4/3 25000 on none 4 +Ethernet27 27 Eth4/4 25000 on none 4 +Ethernet28 28 Eth4/5 25000 on none 4 +Ethernet29 29 Eth4/6 25000 on none 4 +Ethernet30 30 Eth4/7 25000 on none 4 +Ethernet31 31 Eth4/8 25000 on none 4 +Ethernet32 32 Eth5/1 25000 on none 5 +Ethernet33 33 Eth5/2 25000 on none 5 +Ethernet34 34 Eth5/3 25000 on none 5 +Ethernet35 35 Eth5/4 25000 on none 5 +Ethernet36 36 Eth5/5 25000 on none 5 +Ethernet37 37 Eth5/6 25000 on none 5 +Ethernet38 38 Eth5/7 25000 on none 5 +Ethernet39 39 Eth5/8 25000 on none 5 +Ethernet40 40 Eth6/1 25000 on none 6 +Ethernet41 41 Eth6/2 25000 on none 6 +Ethernet42 42 Eth6/3 25000 on none 6 +Ethernet43 43 Eth6/4 25000 on none 6 +Ethernet44 44 Eth6/5 25000 on none 6 +Ethernet45 45 Eth6/6 25000 on none 6 +Ethernet46 46 Eth6/7 25000 on none 6 +Ethernet47 47 Eth6/8 25000 on none 6 +Ethernet48 48 Eth7/1 25000 on none 7 +Ethernet49 49 Eth7/2 25000 on none 7 +Ethernet50 50 Eth7/3 25000 on none 7 +Ethernet51 51 Eth7/4 25000 on none 7 +Ethernet52 52 Eth7/5 25000 on none 7 +Ethernet53 53 Eth7/6 25000 on none 7 +Ethernet54 54 Eth7/7 25000 on none 7 +Ethernet55 55 Eth7/8 25000 on none 7 +Ethernet56 56 Eth8/1 25000 on none 8 +Ethernet57 57 Eth8/2 25000 on none 8 +Ethernet58 58 Eth8/3 25000 on none 8 +Ethernet59 59 Eth8/4 25000 on none 8 +Ethernet60 60 Eth8/5 25000 on none 8 +Ethernet61 61 Eth8/6 25000 on none 8 +Ethernet62 62 Eth8/7 25000 on none 8 +Ethernet63 63 Eth8/8 25000 on none 8 +Ethernet64 64 Eth9/1 25000 on none 9 +Ethernet65 65 Eth9/2 25000 on none 9 +Ethernet66 66 Eth9/3 25000 on none 9 +Ethernet67 67 Eth9/4 25000 on none 9 +Ethernet68 68 Eth9/5 25000 on none 9 +Ethernet69 69 Eth9/6 25000 on none 9 +Ethernet70 70 Eth9/7 25000 on none 9 +Ethernet71 71 Eth9/8 25000 on none 9 +Ethernet72 72 Eth10/1 25000 on none 10 +Ethernet73 73 Eth10/2 25000 on none 10 +Ethernet74 74 Eth10/3 25000 on none 10 +Ethernet75 75 Eth10/4 25000 on none 10 +Ethernet76 76 Eth10/5 25000 on none 10 +Ethernet77 77 Eth10/6 25000 on none 10 +Ethernet78 78 Eth10/7 25000 on none 10 +Ethernet79 79 Eth10/8 25000 on none 10 +Ethernet80 80 Eth11/1 25000 on none 11 +Ethernet81 81 Eth11/2 25000 on none 11 +Ethernet82 82 Eth11/3 25000 on none 11 +Ethernet83 83 Eth11/4 25000 on none 11 +Ethernet84 84 Eth11/5 25000 on none 11 +Ethernet85 85 Eth11/6 25000 on none 11 +Ethernet86 86 Eth11/7 25000 on none 11 +Ethernet87 87 Eth11/8 25000 on none 11 +Ethernet88 88 Eth12/1 25000 on none 12 +Ethernet89 89 Eth12/2 25000 on none 12 +Ethernet90 90 Eth12/3 25000 on none 12 +Ethernet91 91 Eth12/4 25000 on none 12 +Ethernet92 92 Eth12/5 25000 on none 12 +Ethernet93 93 Eth12/6 25000 on none 12 +Ethernet94 94 Eth12/7 25000 on none 12 +Ethernet95 95 Eth12/8 25000 on none 12 +Ethernet96 96 Eth13/1 25000 on none 13 +Ethernet97 97 Eth13/2 25000 on none 13 +Ethernet98 98 Eth13/3 25000 on none 13 +Ethernet99 99 Eth13/4 25000 on none 13 +Ethernet100 100 Eth13/5 25000 on none 13 +Ethernet101 101 Eth13/6 25000 on none 13 +Ethernet102 102 Eth13/7 25000 on none 13 +Ethernet103 103 Eth13/8 25000 on none 13 +Ethernet104 104 Eth14/1 25000 on none 14 +Ethernet105 105 Eth14/2 25000 on none 14 +Ethernet106 106 Eth14/3 25000 on none 14 +Ethernet107 107 Eth14/4 25000 on none 14 +Ethernet108 108 Eth14/5 25000 on none 14 +Ethernet109 109 Eth14/6 25000 on none 14 +Ethernet110 110 Eth14/7 25000 on none 14 +Ethernet111 111 Eth14/8 25000 on none 14 +Ethernet112 112 Eth15/1 25000 on none 15 +Ethernet113 113 Eth15/2 25000 on none 15 +Ethernet114 114 Eth15/3 25000 on none 15 +Ethernet115 115 Eth15/4 25000 on none 15 +Ethernet116 116 Eth15/5 25000 on none 15 +Ethernet117 117 Eth15/6 25000 on none 15 +Ethernet118 118 Eth15/7 25000 on none 15 +Ethernet119 119 Eth15/8 25000 on none 15 +Ethernet120 120 Eth16/1 25000 on none 16 +Ethernet121 121 Eth16/2 25000 on none 16 +Ethernet122 122 Eth16/3 25000 on none 16 +Ethernet123 123 Eth16/4 25000 on none 16 +Ethernet124 124 Eth16/5 25000 on none 16 +Ethernet125 125 Eth16/6 25000 on none 16 +Ethernet126 126 Eth16/7 25000 on none 16 +Ethernet127 127 Eth16/8 25000 on none 16 +Ethernet128 128 Eth17 10000 off none 129 +Ethernet129 129 Eth17 10000 off none 130 diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/profile.ini b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/profile.ini new file mode 100644 index 000000000000..c2f77685ad0a --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/profile.ini @@ -0,0 +1 @@ +switchMacAddress=00:01:02:03:04:05 diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/qos.json.j2 b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/qos.json.j2 new file mode 100644 index 000000000000..3e548325ea30 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/qos.json.j2 @@ -0,0 +1 @@ +{%- include 'qos_config.j2' %} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/sai.profile b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/sai.profile new file mode 100644 index 000000000000..2477a839e09e --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/db98cx8522_10cc/sai.profile @@ -0,0 +1,4 @@ +mode=1 +hwId=FC128x25G +switchProfile=/usr/share/sonic/hwsku/SAI-F3_2T-128x25G.xml +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/profile.ini diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/default_sku b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/default_sku new file mode 100644 index 000000000000..a88ea359eef8 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/default_sku @@ -0,0 +1 @@ +db98cx8522_10cc t1 diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform.json new file mode 100644 index 000000000000..205de6cf42f1 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform.json @@ -0,0 +1,146 @@ +{ + "interfaces": { + "Ethernet0": { + "breakout_modes": { + "2x100G": ["Eth1/1", "Eth1/2"], + "8x25G[10G]": ["Eth1/1", "Eth1/2", "Eth1/3", "Eth1/4", "Eth1/5", "Eth1/6", "Eth1/7", "Eth1/8"] + }, + "index": "1,1,1,1,1,1,1,1", + "lanes": "0,1,2,3,4,5,6,7" + }, + "Ethernet8": { + "breakout_modes": { + "2x100G": ["Eth2/1", "Eth2/2"], + "8x50G[10G]": ["Eth2/1", "Eth2/2", "Eth2/3", "Eth2/4", "Eth2/5", "Eth2/6", "Eth2/7", "Eth2/8"] + }, + "index": "2,2,2,2,2,2,2,2", + "lanes": "8,9,10,11,12,13,14,15" + }, + "Ethernet16": { + "breakout_modes": { + "2x100G": ["Eth3/1", "Eth3/2"], + "8x50G[10G]": ["Eth3/1", "Eth3/2", "Eth3/3", "Eth3/4", "Eth3/5", "Eth3/6", "Eth3/7", "Eth3/8"] + }, + "index": "3,3,3,3,3,3,3,3", + "lanes": "16,17,18,19,20,21,22,23" + }, + "Ethernet24": { + "breakout_modes": { + "2x100G": ["Eth4/1", "Eth4/2"], + "8x50G[10G]": ["Eth4/1", "Eth4/2", "Eth4/3", "Eth4/4", "Eth4/5", "Eth4/6", "Eth4/7", "Eth4/8"] + }, + "index": "4,4,4,4,4,4,4,4", + "lanes": "24,25,26,27,28,29,30,31" + }, + "Ethernet32": { + "breakout_modes": { + "2x100G": ["Eth5/1", "Eth5/2"], + "8x50G[10G]": ["Eth5/1", "Eth5/2", "Eth5/3", "Eth5/4", "Eth5/5", "Eth5/6", "Eth5/7", "Eth5/8"] + }, + "index": "5,5,5,5,5,5,5,5", + "lanes": "32,33,34,35,36,37,38,39" + }, + "Ethernet40": { + "breakout_modes": { + "2x100G": ["Eth6/1", "Eth6/2"], + "8x50G[10G]": ["Eth6/1", "Eth6/2", "Eth6/3", "Eth6/4", "Eth6/5", "Eth6/6", "Eth6/7", "Eth6/8"] + }, + "index": "6,6,6,6,6,6,6,6", + "lanes": "40,41,42,43,44,45,46,47" + }, + "Ethernet48": { + "breakout_modes": { + "2x100G": ["Eth7/1", "Eth7/2"], + "8x50G[10G]": ["Eth7/1", "Eth7/2", "Eth7/3", "Eth7/4", "Eth7/5", "Eth7/6", "Eth7/7", "Eth7/8"] + }, + "index": "7,7,7,7,7,7,7,7", + "lanes": "48,49,50,51,52,53,54,55" + }, + "Ethernet56": { + "breakout_modes": { + "2x100G": ["Eth8/1", "Eth8/2"], + "8x50G[10G]": ["Eth8/1", "Eth8/2", "Eth8/3", "Eth8/4", "Eth8/5", "Eth8/6", "Eth8/7", "Eth8/8"] + }, + "index": "8,8,8,8,8,8,8,8", + "lanes": "56,57,58,59,60,61,62,63" + }, + "Ethernet64": { + "breakout_modes": { + "2x100G": ["Eth9/1", "Eth9/2"], + "8x50G[10G]": ["Eth9/1", "Eth9/2", "Eth9/3", "Eth9/4", "Eth9/5", "Eth9/6", "Eth9/7", "Eth9/8"] + }, + "index": "9,9,9,9,9,9,9,9", + "lanes": "64,65,66,67,68,69,70,71" + }, + "Ethernet72": { + "breakout_modes": { + "2x100G": ["Eth10/1", "Eth10/2"], + "8x50G[10G]": ["Eth10/1", "Eth10/2", "Eth10/3", "Eth10/4", "Eth10/5", "Eth10/6", "Eth10/7", "Eth10/8"] + }, + "index": "10,10,10,10,10,10,10,10", + "lanes": "72,73,74,75,76,77,78,79" + }, + "Ethernet80": { + "breakout_modes": { + "2x100G": ["Eth11/1", "Eth11/2"], + "8x50G[10G]": ["Eth11/1", "Eth11/2", "Eth11/3", "Eth11/4", "Eth11/5", "Eth11/6", "Eth11/7", "Eth11/8"] + }, + "index": "11,11,11,11,11,11,11,11", + "lanes": "80,81,82,83,84,85,86,87" + }, + "Ethernet88": { + "breakout_modes": { + "2x100G": ["Eth12/1", "Eth12/2"], + "8x50G[10G]": ["Eth12/1", "Eth12/2", "Eth12/3", "Eth12/4", "Eth12/5", "Eth12/6", "Eth12/7", "Eth12/8"] + }, + "index": "12,12,12,12,12,12,12,12", + "lanes": "88,89,90,91,92,93,94,95" + }, + "Ethernet96": { + "breakout_modes": { + "2x100G": ["Eth13/1", "Eth13/2"], + "8x50G[10G]": ["Eth13/1", "Eth13/2", "Eth13/3", "Eth13/4", "Eth13/5", "Eth13/6", "Eth13/7", "Eth13/8"] + }, + "index": "13,13,13,13,13,13,13,13", + "lanes": "96,97,98,99,100,101,102,103" + }, + "Ethernet104": { + "breakout_modes": { + "2x100G": ["Eth14/1", "Eth14/2"], + "8x50G[10G]": ["Eth14/1", "Eth14/2", "Eth14/3", "Eth14/4", "Eth14/5", "Eth14/6", "Eth14/7", "Eth14/8"] + }, + "index": "14,14,14,14,14,14,14,14", + "lanes": "104,105,106,107,108,109,110,111" + }, + "Ethernet112": { + "breakout_modes": { + "2x100G": ["Eth15/1", "Eth15/2"], + "8x50G[10G]": ["Eth15/1", "Eth15/2", "Eth15/3", "Eth15/4", "Eth15/5", "Eth15/6", "Eth15/7", "Eth15/8"] + }, + "index": "15,15,15,15,15,15,15,15", + "lanes": "112,113,114,115,116,117,118,119" + }, + "Ethernet120": { + "breakout_modes": { + "2x100G": ["Eth16/1", "Eth16/2"], + "8x50G[10G]": ["Eth16/1", "Eth16/2", "Eth16/3", "Eth16/4", "Eth16/5", "Eth16/6", "Eth16/7", "Eth16/8"] + }, + "index": "16,16,16,16,16,16,16,16", + "lanes": "120,121,122,123,124,125,126,127" + }, + "Ethernet128":{ + "breakout_modes": { + "1x10G": ["Eth17"] + }, + "index": "17", + "lanes": "128" + }, + "Ethernet129":{ + "breakout_modes": { + "1x10G": ["Eth18"] + }, + "index": "18", + "lanes": "129" + } + } +} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform_asic b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform_asic new file mode 100644 index 000000000000..a554752878b7 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/platform_asic @@ -0,0 +1 @@ +marvell diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/pmon_daemon_control.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..39deb88be078 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/pmon_daemon_control.json @@ -0,0 +1,8 @@ +{ + "skip_ledd": true, + "skip_pcied": true, + "skip_thermalctld": true, + "skip_psud": true, + "skip_xcvrd": true, + "skip_syseepromd": true +} diff --git a/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/system_health_monitoring_config.json b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/system_health_monitoring_config.json new file mode 100644 index 000000000000..79c17103bf76 --- /dev/null +++ b/device/marvell/x86_64-marvell_db98cx8522_10cc-r0/system_health_monitoring_config.json @@ -0,0 +1,10 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": [ + "asic", + "psu.temperature", + "fan", + "psu" + ], + "user_defined_checkers": [] +} diff --git a/device/marvell/x86_64-marvell_dbmvtx9180-r0/platform_asic b/device/marvell/x86_64-marvell_dbmvtx9180-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/marvell/x86_64-marvell_dbmvtx9180-r0/platform_asic +++ b/device/marvell/x86_64-marvell_dbmvtx9180-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json b/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json index dbc19c9baabf..8ffea7b92f8e 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/pmon_daemon_control.json @@ -2,6 +2,7 @@ "skip_ledd": true, "skip_fancontrol": true, "delay_xcvrd": true, - "skip_xcvrd_cmis_mgr": true + "skip_xcvrd_cmis_mgr": true, + "delay_non_critical_daemon": true } diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json b/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json index d2a798d25fce..c9370bd6d7f4 100644 --- a/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json @@ -653,6 +653,10 @@ "interface": { "Ethernet224": "Ethernet0" }, + "serial-console": { + "device": "ttyUSB0", + "baud-rate": "115200" + }, "rshim_info": "rshim0", "bus_info": "0000:08:00.0" }, @@ -661,6 +665,10 @@ "interface": { "Ethernet232": "Ethernet0" }, + "serial-console": { + "device": "ttyUSB1", + "baud-rate": "115200" + }, "rshim_info": "rshim1", "bus_info": "0000:07:00.0" }, @@ -669,6 +677,10 @@ "interface": { "Ethernet240": "Ethernet0" }, + "serial-console": { + "device": "ttyUSB2", + "baud-rate": "115200" + }, "rshim_info": "rshim2", "bus_info": "0000:01:00.0" }, @@ -677,6 +689,10 @@ "interface": { "Ethernet248": "Ethernet0" }, + "serial-console": { + "device": "ttyUSB3", + "baud-rate": "115200" + }, "rshim_info": "rshim3", "bus_info": "0000:02:00.0" } diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers.json.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers.json.j2 new file mode 120000 index 000000000000..add8bf8bb7c2 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_objects.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_objects.j2 new file mode 100644 index 000000000000..05f6cd29a50c --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_objects.j2 @@ -0,0 +1,310 @@ +{# + SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} + "BUFFER_POOL": { + {% if dynamic_mode is not defined and port_names_inactive|length > 0 -%} + "ingress_zero_pool" : { + "mode": "static", + "type": "ingress", + "size": "0" + }, + {% endif -%} + "ingress_lossless_pool": { + {% if dynamic_mode is not defined -%} + "size": "{{ ingress_lossless_pool_size }}", + "xoff": "{{ ingress_lossless_pool_xoff }}", + {% endif -%} + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "{{ egress_lossless_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + {% if dynamic_mode is not defined -%} + "size": "{{ egress_lossy_pool_size }}", + {% endif -%} + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + {% if dynamic_mode is not defined and port_names_inactive|length > 0 -%} + "ingress_lossy_pg_zero_profile" : { + "pool":"ingress_zero_pool", + "size":"0", + "static_th":"0" + }, + "ingress_lossless_zero_profile" : { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossless_zero_profile" : { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossy_zero_profile" : { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"-8" + }, + {% endif -%} + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, +{%- endmacro %} + +{%- macro generate_profile_lists(port_names_active, port_names_inactive) %} + "BUFFER_PORT_INGRESS_PROFILE_LIST": { +{% for port in port_names_active.split(',') %} + "{{ port }}": { + "profile_list" : "ingress_lossless_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% if port_names_inactive|length > 0 %} +, +{% for port in port_names_inactive.split(',') %} + "{{ port }}": { +{% if dynamic_mode is defined %} + "profile_list" : "ingress_lossless_profile" +{% else %} + "profile_list" : "ingress_lossless_zero_profile" +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { +{% for port in port_names_active.split(',') %} + "{{ port }}": { + "profile_list" : "egress_lossless_profile,egress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% if port_names_inactive|length > 0 %} +, +{% for port in port_names_inactive.split(',') %} + "{{ port }}": { +{% if dynamic_mode is defined %} + "profile_list" : "egress_lossless_profile,egress_lossy_profile" +{% else %} + "profile_list" : "egress_lossless_zero_profile,egress_lossy_zero_profile" +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) %} + "BUFFER_QUEUE": { +{% set q_loop = namespace(last_valid=false) %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }, +{% endif %} +{% endfor %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} + "{{ port }}|0-2": { + "profile" : "q_lossy_profile" + }, +{% endif %} +{% endfor %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% set q_loop.last_valid = true %} +{% else %} +{% set q_loop.last_valid = false %} +{% endif %} +{% endfor %} +{% if port_names_extra_queues|length > 0 %} +{% if q_loop.last_valid %},{% endif %} +{% for port in port_names_extra_queues.split(',') %} + "{{ port }}|0-1": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|2-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|7": { + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% if port_names_inactive|length > 0 %} +, +{% if dynamic_mode is defined %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|0-2": { + "profile" : "q_lossy_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% else %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|3-4": { + "profile" : "egress_lossless_zero_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|0-2": { + "profile" : "egress_lossy_zero_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "egress_lossy_zero_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_queue_buffers(port_names_active, port_names_inactive) %} +{{ generate_queue_buffers_with_extra_lossless_queues(port_names_active, "", port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) %} + "BUFFER_PG": { +{% set pg_loop = namespace(last_valid=false) %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_pgs.split(',') %} +{% if dynamic_mode is defined %} + "{{ port }}|3-4": { + "profile" : "NULL" + }, +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% set pg_loop.last_valid = true %} +{% else %} +{% set pg_loop.last_valid = false %} +{% endif %} +{% endfor %} +{% if port_names_extra_pgs|length > 0 %} +{% if pg_loop.last_valid %},{% endif %} +{% for port in port_names_extra_pgs.split(',') %} +{% if dynamic_mode is defined %} + "{{ port }}|2-4": { + "profile" : "NULL" + }, + "{{ port }}|6": { + "profile" : "NULL" + }, +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% if port_names_inactive|length > 0 %} +{%- for port in port_names_inactive.split(',') %} + {%- if loop.first -%},{%- endif -%} +{% if dynamic_mode is defined %} + "{{ port }}|3-4": { + "profile" : "NULL" + }, +{% endif %} + "{{ port }}|0": { +{% if dynamic_mode is defined %} + "profile" : "ingress_lossy_profile" +{% else %} + "profile" : "ingress_lossy_pg_zero_profile" +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_pg_profiles(port_names_active, port_names_inactive) %} +{{ generate_pg_profiles_with_extra_lossless_pgs(port_names_active, "", port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t0.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..c20859c33f34 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t0.j2 @@ -0,0 +1,48 @@ +{# + SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '40m' %} +{% set ingress_lossless_pool_size = '113722268' %} +{% set ingress_lossless_pool_xoff = '19062784' %} +{% set egress_lossless_pool_size = '158229504' %} +{% set egress_lossy_pool_size = '113722268' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_pgs, port_names_inactive) %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t1.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..94ba1b680915 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_defaults_t1.j2 @@ -0,0 +1,55 @@ +{# + SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '250m' %} +{% set ingress_lossless_pool_size = '113722368' %} +{% set ingress_lossless_pool_xoff = '19062784' %} +{% set egress_lossless_pool_size = '158229504' %} +{% set egress_lossy_pool_size = '113722368' %} + +{%-set ports2cable = { + 'torrouter_server' : '40m', + 'leafrouter_torrouter' : '250m', + 'spinerouter_leafrouter' : '1000m' + } +-%} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_pgs, port_names_inactive) %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_dynamic.json.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_dynamic.json.j2 new file mode 120000 index 000000000000..8c4117c66214 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/buffers_dynamic.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers_dynamic.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/create_only_config_db_buffers.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/create_only_config_db_buffers.json new file mode 100644 index 000000000000..6feb156714fe --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/create_only_config_db_buffers.json @@ -0,0 +1,7 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "create_only_config_db_buffers": "true" + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/media_settings.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/media_settings.json new file mode 120000 index 000000000000..2f4f358b3ba1 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/media_settings.json @@ -0,0 +1 @@ +../Mellanox-SN5600-V256/media_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/optics_si_settings.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/optics_si_settings.json new file mode 120000 index 000000000000..f0e582a4d772 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/optics_si_settings.json @@ -0,0 +1 @@ +../Mellanox-SN5600-V256/optics_si_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pg_profile_lookup.ini b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pg_profile_lookup.ini new file mode 100644 index 000000000000..a87d3445ed35 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pg_profile_lookup.ini @@ -0,0 +1,51 @@ +## +## SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# PG lossless profiles. +# speed cable size xon xoff threshold + 10000 5m 19456 19456 20480 0 + 25000 5m 19456 19456 21504 0 + 40000 5m 19456 19456 24576 0 + 50000 5m 19456 19456 26624 0 + 100000 5m 19456 19456 44032 0 + 200000 5m 19456 19456 50176 0 + 400000 5m 19456 19456 86016 0 + 800000 5m 38912 38912 95232 0 + 10000 40m 19456 19456 20480 0 + 25000 40m 19456 19456 22528 0 + 40000 40m 19456 19456 25600 0 + 50000 40m 19456 19456 28672 0 + 100000 40m 19456 19456 49152 0 + 200000 40m 19456 19456 60416 0 + 400000 40m 19456 19456 104448 0 + 800000 40m 38912 38912 132096 0 + 10000 250m 19456 19456 14336 0 + 25000 250m 19456 19456 20480 0 + 40000 250m 19456 19456 28672 0 + 50000 250m 19456 19456 33792 0 + 100000 250m 19456 19456 68608 0 + 200000 250m 19456 19456 107520 0 + 400000 250m 19456 19456 208896 0 + 800000 250m 38912 38912 349184 0 + 10000 1000m 19456 19456 24576 0 + 25000 1000m 19456 19456 46080 0 + 40000 1000m 19456 19456 68608 0 + 50000 1000m 19456 19456 83968 0 + 100000 1000m 19456 19456 168960 0 + 200000 1000m 19456 19456 308224 0 + 400000 1000m 19456 19456 610304 0 + 800000 1000m 38912 38912 1153024 0 diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pmon_daemon_control.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pmon_daemon_control.json new file mode 100644 index 000000000000..281b96b71cc6 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/pmon_daemon_control.json @@ -0,0 +1,5 @@ +{ + "skip_ledd": true, + "skip_fancontrol": true, + "skip_xcvrd_cmis_mgr": false +} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/port_config.ini b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/port_config.ini new file mode 100644 index 000000000000..2cc6ff80714f --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/port_config.ini @@ -0,0 +1,252 @@ +## +## SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + +# name lanes alias index speed fec autoneg subport +Ethernet0 0 etp1a 1 100000 rs off 1 +Ethernet1 1 etp1b 1 100000 rs off 2 +Ethernet2 2 etp1c 1 100000 rs off 3 +Ethernet3 3 etp1d 1 100000 rs off 4 +Ethernet4 4 etp1e 1 100000 rs off 5 +Ethernet5 5 etp1f 1 100000 rs off 6 +Ethernet6 6 etp1g 1 100000 rs off 7 +Ethernet7 7 etp1h 1 100000 rs off 8 +Ethernet16 16 etp3a 3 100000 rs off 1 +Ethernet17 17 etp3b 3 100000 rs off 2 +Ethernet18 18 etp3c 3 100000 rs off 3 +Ethernet19 19 etp3d 3 100000 rs off 4 +Ethernet20 20 etp3e 3 100000 rs off 5 +Ethernet21 21 etp3f 3 100000 rs off 6 +Ethernet22 22 etp3g 3 100000 rs off 7 +Ethernet23 23 etp3h 3 100000 rs off 8 +Ethernet32 32 etp5a 5 100000 rs off 1 +Ethernet33 33 etp5b 5 100000 rs off 2 +Ethernet34 34 etp5c 5 100000 rs off 3 +Ethernet35 35 etp5d 5 100000 rs off 4 +Ethernet36 36 etp5e 5 100000 rs off 5 +Ethernet37 37 etp5f 5 100000 rs off 6 +Ethernet38 38 etp5g 5 100000 rs off 7 +Ethernet39 39 etp5h 5 100000 rs off 8 +Ethernet48 48 etp7a 7 100000 rs off 1 +Ethernet49 49 etp7b 7 100000 rs off 2 +Ethernet50 50 etp7c 7 100000 rs off 3 +Ethernet51 51 etp7d 7 100000 rs off 4 +Ethernet52 52 etp7e 7 100000 rs off 5 +Ethernet53 53 etp7f 7 100000 rs off 6 +Ethernet54 54 etp7g 7 100000 rs off 7 +Ethernet55 55 etp7h 7 100000 rs off 8 +Ethernet64 64 etp9a 9 100000 rs off 1 +Ethernet65 65 etp9b 9 100000 rs off 2 +Ethernet66 66 etp9c 9 100000 rs off 3 +Ethernet67 67 etp9d 9 100000 rs off 4 +Ethernet68 68 etp9e 9 100000 rs off 5 +Ethernet69 69 etp9f 9 100000 rs off 6 +Ethernet70 70 etp9g 9 100000 rs off 7 +Ethernet71 71 etp9h 9 100000 rs off 8 +Ethernet80 80 etp11a 11 100000 rs off 1 +Ethernet81 81 etp11b 11 100000 rs off 2 +Ethernet82 82 etp11c 11 100000 rs off 3 +Ethernet83 83 etp11d 11 100000 rs off 4 +Ethernet84 84 etp11e 11 100000 rs off 5 +Ethernet85 85 etp11f 11 100000 rs off 6 +Ethernet86 86 etp11g 11 100000 rs off 7 +Ethernet87 87 etp11h 11 100000 rs off 8 +Ethernet96 96,97,98,99 etp13a 13 400000 rs off 1 +Ethernet100 100,101,102,103 etp13b 13 400000 rs off 2 +Ethernet112 112 etp15a 15 100000 rs off 1 +Ethernet113 113 etp15b 15 100000 rs off 2 +Ethernet114 114 etp15c 15 100000 rs off 3 +Ethernet115 115 etp15d 15 100000 rs off 4 +Ethernet116 116 etp15e 15 100000 rs off 5 +Ethernet117 117 etp15f 15 100000 rs off 6 +Ethernet118 118 etp15g 15 100000 rs off 7 +Ethernet119 119 etp15h 15 100000 rs off 8 +Ethernet128 128,129,130,131 etp17a 17 400000 rs off 1 +Ethernet132 132,133,134,135 etp17b 17 400000 rs off 2 +Ethernet144 144 etp19a 19 100000 rs off 1 +Ethernet145 145 etp19b 19 100000 rs off 2 +Ethernet146 146 etp19c 19 100000 rs off 3 +Ethernet147 147 etp19d 19 100000 rs off 4 +Ethernet148 148 etp19e 19 100000 rs off 5 +Ethernet149 149 etp19f 19 100000 rs off 6 +Ethernet150 150 etp19g 19 100000 rs off 7 +Ethernet151 151 etp19h 19 100000 rs off 8 +Ethernet160 160 etp21a 21 100000 rs off 1 +Ethernet161 161 etp21b 21 100000 rs off 2 +Ethernet162 162 etp21c 21 100000 rs off 3 +Ethernet163 163 etp21d 21 100000 rs off 4 +Ethernet164 164 etp21e 21 100000 rs off 5 +Ethernet165 165 etp21f 21 100000 rs off 6 +Ethernet166 166 etp21g 21 100000 rs off 7 +Ethernet167 167 etp21h 21 100000 rs off 8 +Ethernet176 176 etp23a 23 100000 rs off 1 +Ethernet177 177 etp23b 23 100000 rs off 2 +Ethernet178 178 etp23c 23 100000 rs off 3 +Ethernet179 179 etp23d 23 100000 rs off 4 +Ethernet180 180 etp23e 23 100000 rs off 5 +Ethernet181 181 etp23f 23 100000 rs off 6 +Ethernet182 182 etp23g 23 100000 rs off 7 +Ethernet183 183 etp23h 23 100000 rs off 8 +Ethernet192 192 etp25a 25 100000 rs off 1 +Ethernet193 193 etp25b 25 100000 rs off 2 +Ethernet194 194 etp25c 25 100000 rs off 3 +Ethernet195 195 etp25d 25 100000 rs off 4 +Ethernet196 196 etp25e 25 100000 rs off 5 +Ethernet197 197 etp25f 25 100000 rs off 6 +Ethernet198 198 etp25g 25 100000 rs off 7 +Ethernet199 199 etp25h 25 100000 rs off 8 +Ethernet208 208 etp27a 27 100000 rs off 1 +Ethernet209 209 etp27b 27 100000 rs off 2 +Ethernet210 210 etp27c 27 100000 rs off 3 +Ethernet211 211 etp27d 27 100000 rs off 4 +Ethernet212 212 etp27e 27 100000 rs off 5 +Ethernet213 213 etp27f 27 100000 rs off 6 +Ethernet214 214 etp27g 27 100000 rs off 7 +Ethernet215 215 etp27h 27 100000 rs off 8 +Ethernet224 224 etp29a 29 100000 rs off 1 +Ethernet225 225 etp29b 29 100000 rs off 2 +Ethernet226 226 etp29c 29 100000 rs off 3 +Ethernet227 227 etp29d 29 100000 rs off 4 +Ethernet228 228 etp29e 29 100000 rs off 5 +Ethernet229 229 etp29f 29 100000 rs off 6 +Ethernet230 230 etp29g 29 100000 rs off 7 +Ethernet231 231 etp29h 29 100000 rs off 8 +Ethernet240 240 etp31a 31 100000 rs off 1 +Ethernet241 241 etp31b 31 100000 rs off 2 +Ethernet242 242 etp31c 31 100000 rs off 3 +Ethernet243 243 etp31d 31 100000 rs off 4 +Ethernet244 244 etp31e 31 100000 rs off 5 +Ethernet245 245 etp31f 31 100000 rs off 6 +Ethernet246 246 etp31g 31 100000 rs off 7 +Ethernet247 247 etp31h 31 100000 rs off 8 +Ethernet256 256 etp33a 33 100000 rs off 1 +Ethernet257 257 etp33b 33 100000 rs off 2 +Ethernet258 258 etp33c 33 100000 rs off 3 +Ethernet259 259 etp33d 33 100000 rs off 4 +Ethernet260 260 etp33e 33 100000 rs off 5 +Ethernet261 261 etp33f 33 100000 rs off 6 +Ethernet262 262 etp33g 33 100000 rs off 7 +Ethernet263 263 etp33h 33 100000 rs off 8 +Ethernet272 272 etp35a 35 100000 rs off 1 +Ethernet273 273 etp35b 35 100000 rs off 2 +Ethernet274 274 etp35c 35 100000 rs off 3 +Ethernet275 275 etp35d 35 100000 rs off 4 +Ethernet276 276 etp35e 35 100000 rs off 5 +Ethernet277 277 etp35f 35 100000 rs off 6 +Ethernet278 278 etp35g 35 100000 rs off 7 +Ethernet279 279 etp35h 35 100000 rs off 8 +Ethernet288 288 etp37a 37 100000 rs off 1 +Ethernet289 289 etp37b 37 100000 rs off 2 +Ethernet290 290 etp37c 37 100000 rs off 3 +Ethernet291 291 etp37d 37 100000 rs off 4 +Ethernet292 292 etp37e 37 100000 rs off 5 +Ethernet293 293 etp37f 37 100000 rs off 6 +Ethernet294 294 etp37g 37 100000 rs off 7 +Ethernet295 295 etp37h 37 100000 rs off 8 +Ethernet304 304 etp39a 39 100000 rs off 1 +Ethernet305 305 etp39b 39 100000 rs off 2 +Ethernet306 306 etp39c 39 100000 rs off 3 +Ethernet307 307 etp39d 39 100000 rs off 4 +Ethernet308 308 etp39e 39 100000 rs off 5 +Ethernet309 309 etp39f 39 100000 rs off 6 +Ethernet310 310 etp39g 39 100000 rs off 7 +Ethernet311 311 etp39h 39 100000 rs off 8 +Ethernet320 320 etp41a 41 100000 rs off 1 +Ethernet321 321 etp41b 41 100000 rs off 2 +Ethernet322 322 etp41c 41 100000 rs off 3 +Ethernet323 323 etp41d 41 100000 rs off 4 +Ethernet324 324 etp41e 41 100000 rs off 5 +Ethernet325 325 etp41f 41 100000 rs off 6 +Ethernet326 326 etp41g 41 100000 rs off 7 +Ethernet327 327 etp41h 41 100000 rs off 8 +Ethernet336 336 etp43a 43 100000 rs off 1 +Ethernet337 337 etp43b 43 100000 rs off 2 +Ethernet338 338 etp43c 43 100000 rs off 3 +Ethernet339 339 etp43d 43 100000 rs off 4 +Ethernet340 340 etp43e 43 100000 rs off 5 +Ethernet341 341 etp43f 43 100000 rs off 6 +Ethernet342 342 etp43g 43 100000 rs off 7 +Ethernet343 343 etp43h 43 100000 rs off 8 +Ethernet352 352,353,354,355 etp45a 45 400000 rs off 1 +Ethernet356 356,357,358,359 etp45b 45 400000 rs off 2 +Ethernet368 368 etp47a 47 100000 rs off 1 +Ethernet369 369 etp47b 47 100000 rs off 2 +Ethernet370 370 etp47c 47 100000 rs off 3 +Ethernet371 371 etp47d 47 100000 rs off 4 +Ethernet372 372 etp47e 47 100000 rs off 5 +Ethernet373 373 etp47f 47 100000 rs off 6 +Ethernet374 374 etp47g 47 100000 rs off 7 +Ethernet375 375 etp47h 47 100000 rs off 8 +Ethernet384 384,385,386,387 etp49a 49 400000 rs off 1 +Ethernet388 388,389,390,391 etp49b 49 400000 rs off 2 +Ethernet400 400 etp51a 51 100000 rs off 1 +Ethernet401 401 etp51b 51 100000 rs off 2 +Ethernet402 402 etp51c 51 100000 rs off 3 +Ethernet403 403 etp51d 51 100000 rs off 4 +Ethernet404 404 etp51e 51 100000 rs off 5 +Ethernet405 405 etp51f 51 100000 rs off 6 +Ethernet406 406 etp51g 51 100000 rs off 7 +Ethernet407 407 etp51h 51 100000 rs off 8 +Ethernet416 416 etp53a 53 100000 rs off 1 +Ethernet417 417 etp53b 53 100000 rs off 2 +Ethernet418 418 etp53c 53 100000 rs off 3 +Ethernet419 419 etp53d 53 100000 rs off 4 +Ethernet420 420 etp53e 53 100000 rs off 5 +Ethernet421 421 etp53f 53 100000 rs off 6 +Ethernet422 422 etp53g 53 100000 rs off 7 +Ethernet423 423 etp53h 53 100000 rs off 8 +Ethernet432 432 etp55a 55 100000 rs off 1 +Ethernet433 433 etp55b 55 100000 rs off 2 +Ethernet434 434 etp55c 55 100000 rs off 3 +Ethernet435 435 etp55d 55 100000 rs off 4 +Ethernet436 436 etp55e 55 100000 rs off 5 +Ethernet437 437 etp55f 55 100000 rs off 6 +Ethernet438 438 etp55g 55 100000 rs off 7 +Ethernet439 439 etp55h 55 100000 rs off 8 +Ethernet448 448 etp57a 57 100000 rs off 1 +Ethernet449 449 etp57b 57 100000 rs off 2 +Ethernet450 450 etp57c 57 100000 rs off 3 +Ethernet451 451 etp57d 57 100000 rs off 4 +Ethernet452 452 etp57e 57 100000 rs off 5 +Ethernet453 453 etp57f 57 100000 rs off 6 +Ethernet454 454 etp57g 57 100000 rs off 7 +Ethernet455 455 etp57h 57 100000 rs off 8 +Ethernet464 464 etp59a 59 100000 rs off 1 +Ethernet465 465 etp59b 59 100000 rs off 2 +Ethernet466 466 etp59c 59 100000 rs off 3 +Ethernet467 467 etp59d 59 100000 rs off 4 +Ethernet468 468 etp59e 59 100000 rs off 5 +Ethernet469 469 etp59f 59 100000 rs off 6 +Ethernet470 470 etp59g 59 100000 rs off 7 +Ethernet471 471 etp59h 59 100000 rs off 8 +Ethernet480 480 etp61a 61 100000 rs off 1 +Ethernet481 481 etp61b 61 100000 rs off 2 +Ethernet482 482 etp61c 61 100000 rs off 3 +Ethernet483 483 etp61d 61 100000 rs off 4 +Ethernet484 484 etp61e 61 100000 rs off 5 +Ethernet485 485 etp61f 61 100000 rs off 6 +Ethernet486 486 etp61g 61 100000 rs off 7 +Ethernet487 487 etp61h 61 100000 rs off 8 +Ethernet496 496 etp63a 63 100000 rs off 1 +Ethernet497 497 etp63b 63 100000 rs off 2 +Ethernet498 498 etp63c 63 100000 rs off 3 +Ethernet499 499 etp63d 63 100000 rs off 4 +Ethernet500 500 etp63e 63 100000 rs off 5 +Ethernet501 501 etp63f 63 100000 rs off 6 +Ethernet502 502 etp63g 63 100000 rs off 7 +Ethernet503 503 etp63h 63 100000 rs off 8 +Ethernet512 512 etp65 65 10000 rs diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/qos.json.j2 b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/qos.json.j2 new file mode 120000 index 000000000000..eccf286dc879 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/qos.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai.profile b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai.profile new file mode 100644 index 000000000000..271c8cf70fd8 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai.profile @@ -0,0 +1,4 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_5600_256x100g.xml +SAI_INDEPENDENT_MODULE_MODE=1 +SAI_DEFAULT_SWITCHING_MODE_STORE_FORWARD=1 +SAI_NOT_DROP_SIP_DIP_LINK_LOCAL=1 diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai_5600_256x100g.xml b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai_5600_256x100g.xml new file mode 100644 index 000000000000..8a97aefdc615 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/sai_5600_256x100g.xml @@ -0,0 +1,561 @@ + + + + + + + 00:02:03:04:05:00 + + + 0 + + + 65 + + + 1 + + + + + 1 + 8 + 34 + + + 3 + + + 262144 + 8 + + + 5 + 8 + 35 + 3 + 262144 + 8 + + + 9 + 8 + 33 + 3 + 262144 + 8 + + + 13 + 8 + 32 + 3 + 262144 + 8 + + + 17 + 8 + 38 + 3 + 262144 + 8 + + + 21 + 8 + 39 + 3 + 262144 + 8 + + + 25 + 8 + 37 + 3 + 262144 + 8 + + + 29 + 8 + 36 + 3 + 262144 + 8 + + + 33 + 8 + 42 + 3 + 262144 + 8 + + + 37 + 8 + 43 + 3 + 262144 + 8 + + + 41 + 8 + 41 + 3 + 262144 + 8 + + + 45 + 8 + 40 + 3 + 262144 + 8 + + + 49 + 8 + 46 + 3 + 262144 + 8 + + + 53 + 8 + 47 + 3 + 262144 + 8 + + + 57 + 8 + 45 + 3 + 262144 + 8 + + + 61 + 8 + 44 + 3 + 262144 + 8 + + + 65 + 8 + 51 + 3 + 262144 + 8 + + + 69 + 8 + 50 + 3 + 262144 + 8 + + + 73 + 8 + 48 + 3 + 262144 + 8 + + + 77 + 8 + 49 + 3 + 262144 + 8 + + + 81 + 8 + 55 + 3 + 262144 + 8 + + + 85 + 8 + 54 + 3 + 262144 + 8 + + + 89 + 8 + 52 + 3 + 262144 + 8 + + + 93 + 8 + 53 + 3 + 262144 + 8 + + + 97 + 8 + 59 + 3 + 262144 + 8 + + + 101 + 8 + 58 + 3 + 262144 + 8 + + + 105 + 8 + 56 + 3 + 262144 + 8 + + + 109 + 8 + 57 + 3 + 262144 + 8 + + + 113 + 8 + 63 + 3 + 262144 + 8 + + + 117 + 8 + 62 + 3 + 262144 + 8 + + + 121 + 8 + 60 + 3 + 262144 + 8 + + + 125 + 8 + 61 + 3 + 262144 + 8 + + + 129 + 8 + 29 + 3 + 262144 + 8 + + + 133 + 8 + 28 + 3 + 262144 + 8 + + + 137 + 8 + 30 + 3 + 262144 + 8 + + + 141 + 8 + 31 + 3 + 262144 + 8 + + + 145 + 8 + 25 + 3 + 262144 + 8 + + + 149 + 8 + 24 + 3 + 262144 + 8 + + + 153 + 8 + 26 + 3 + 262144 + 8 + + + 157 + 8 + 27 + 3 + 262144 + 8 + + + 161 + 8 + 21 + 3 + 262144 + 8 + + + 165 + 8 + 20 + 3 + 262144 + 8 + + + 169 + 8 + 22 + 3 + 262144 + 8 + + + 173 + 8 + 23 + 3 + 262144 + 8 + + + 177 + 8 + 17 + 3 + 262144 + 8 + + + 181 + 8 + 16 + 3 + 262144 + 8 + + + 185 + 8 + 18 + 3 + 262144 + 8 + + + 189 + 8 + 19 + 3 + 262144 + 8 + + + 193 + 8 + 12 + 3 + 262144 + 8 + + + 197 + 8 + 13 + 3 + 262144 + 8 + + + 201 + 8 + 15 + 3 + 262144 + 8 + + + 205 + 8 + 14 + 3 + 262144 + 8 + + + 209 + 8 + 8 + 3 + 262144 + 8 + + + 213 + 8 + 9 + 3 + 262144 + 8 + + + 217 + 8 + 11 + 3 + 262144 + 8 + + + 221 + 8 + 10 + 3 + 262144 + 8 + + + 225 + 8 + 4 + 3 + 262144 + 8 + + + 229 + 8 + 5 + 3 + 262144 + 8 + + + 233 + 8 + 7 + 3 + 262144 + 8 + + + 237 + 8 + 6 + 3 + 262144 + 8 + + + 241 + 8 + 0 + 3 + 262144 + 8 + + + 245 + 8 + 1 + 3 + 262144 + 8 + + + 249 + 8 + 3 + 3 + 262144 + 8 + + + 253 + 8 + 2 + 3 + 262144 + 8 + + + 257 + 1 + 64 + 0 + 64 + + + + diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/supporting_bulk_counter_groups b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/supporting_bulk_counter_groups new file mode 100644 index 000000000000..178f0575d049 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-C224O8/supporting_bulk_counter_groups @@ -0,0 +1 @@ +QUEUE_WATERMARK_STAT_COUNTER,PG_WATERMARK_STAT_COUNTER,PFC_WD diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json index 6b48c7b70adc..377d4116c10c 100644 --- a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json @@ -2,6 +2,316 @@ "GLOBAL_MEDIA_SETTINGS": { "1-64": { "OSFP-8X-sm_media_interface": { + "speed:100GAUI-1-L": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:100GAUI-1-S": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:200GAUI-2-S": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:200GAUI-2-L": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:200GAUI-4": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "main": { + "lane0": "0x0000003f", + "lane1": "0x0000003f", + "lane2": "0x0000003f", + "lane3": "0x0000003f", + "lane4": "0x0000003f", + "lane5": "0x0000003f", + "lane6": "0x0000003f", + "lane7": "0x0000003f" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x0000003f", + "lane1": "0x0000003f", + "lane2": "0x0000003f", + "lane3": "0x0000003f", + "lane4": "0x0000003f", + "lane5": "0x0000003f", + "lane6": "0x0000003f", + "lane7": "0x0000003f" + } + }, "speed:400GAUI-4-L": { "pre3": { "lane0": "0x00000000", @@ -190,7 +500,7 @@ } }, "OSFP-8X-nm_850_media_interface": { - "speed:800G": { + "speed:800G": { "pre3": { "lane0": "0x00000000", "lane1": "0x00000000", diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/supporting_bulk_counter_groups b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/supporting_bulk_counter_groups new file mode 100644 index 000000000000..178f0575d049 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/supporting_bulk_counter_groups @@ -0,0 +1 @@ +QUEUE_WATERMARK_STAT_COUNTER,PG_WATERMARK_STAT_COUNTER,PFC_WD diff --git a/device/mellanox/x86_64-nvidia_sn5640_simx-r0/pcie.yaml b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/pcie.yaml new file mode 100644 index 000000000000..0c0e1241b16c --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/pcie.yaml @@ -0,0 +1,91 @@ +## +## SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +## Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +## SPDX-License-Identifier: Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + +- bus: '00' + dev: '00' + fn: '0' + id: '1237' + name: 'Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)' +- bus: '00' + dev: '01' + fn: '0' + id: '7000' + name: 'ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]' +- bus: '00' + dev: '01' + fn: '1' + id: '7010' + name: 'IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]' +- bus: '00' + dev: '01' + fn: '2' + id: '7020' + name: 'USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev + 01)' +- bus: '00' + dev: '01' + fn: '3' + id: '7113' + name: 'Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)' +- bus: '00' + dev: '02' + fn: '0' + id: 00b8 + name: 'VGA compatible controller: Cirrus Logic GD 5446' +- bus: '00' + dev: '03' + fn: '0' + id: 100e + name: 'Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller + (rev 03)' +- bus: '00' + dev: '04' + fn: '0' + id: '1002' + name: 'Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon' +- bus: '00' + dev: '05' + fn: '0' + id: '1009' + name: 'Unclassified device [0002]: Red Hat, Inc. Virtio filesystem' +- bus: '00' + dev: '06' + fn: '0' + id: '2922' + name: 'SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA + Controller [AHCI mode] (rev 02)' +- bus: '00' + dev: '07' + fn: '0' + id: '0001' + name: 'PCI bridge: Red Hat, Inc. QEMU PCI-PCI bridge' +- bus: '00' + dev: 0c + fn: '0' + id: '1009' + name: 'Unclassified device [0002]: Red Hat, Inc. Virtio filesystem' +- bus: '00' + dev: 0e + fn: '0' + id: '1001' + name: 'System peripheral: NVIDIA Corporation GK110B [GeForce GTX TITAN Z] (rev 01)' +- bus: '01' + dev: '10' + fn: '0' + id: cf82 + name: 'Ethernet controller: Mellanox Technologies Spectrum-4L' diff --git a/device/mellanox/x86_64-nvidia_sn5640_simx-r0/platform.json b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/platform.json index d866c6a23ec2..755c7e03b629 100644 --- a/device/mellanox/x86_64-nvidia_sn5640_simx-r0/platform.json +++ b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/platform.json @@ -1,6 +1,6 @@ { "chassis": { - "name": "SN5600_SIMX", + "name": "SN5640_SIMX", "components": [ { "name": "ONIE" @@ -634,6 +634,22 @@ "name": "xSFP module 64 Temp" } ] + }, + { + "name": "sfp65", + "thermals": [ + { + "name": "xSFP module 65 Temp" + } + ] + }, + { + "name": "sfp66", + "thermals": [ + { + "name": "xSFP module 66 Temp" + } + ] } ] }, diff --git a/device/mellanox/x86_64-nvidia_sn5640_simx-r0/sensors.conf b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/sensors.conf new file mode 100644 index 000000000000..6ef2195aac57 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5640_simx-r0/sensors.conf @@ -0,0 +1,494 @@ +################################################################################## +# Copyright (c) 2019 - 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Platform specific sensors config for SN5600 +################################################################################## + +# Temperature sensors +chip "mlxsw-i2c-*-48" + label temp1 "Ambient ASIC Temp" + +chip "tmp102-i2c-6-49" + label temp1 "Ambient Fan Side Temp (air intake)" +chip "adt75-i2c-6-49" + label temp1 "Ambient Fan Side Temp (air intake)" +chip "stts751-i2c-6-49" + label temp1 "Ambient Fan Side Temp (air intake)" +chip "tmp102-i2c-7-4a" + label temp1 "Ambient Port Side Temp (air exhaust)" +chip "adt75-i2c-7-4a" + label temp1 "Ambient Port Side Temp (air exhaust)" +chip "stts751-i2c-7-4a" + label temp1 "Ambient Port Side Temp (air exhaust)" +chip "tmp411-i2c-7-4c" + label temp1 "Ambient External Temp" + +# Power controllers +chip "mp2891-i2c-*-62" + label in1 "PMIC-1 PSU 13V5 Rail (in1)" + label in2 "PMIC-1 VDD_M ADJ Rail (out1)" + ignore in3 + label temp1 "PMIC-1 VDD_M ADJ Temp 1" + ignore temp2 + label power1 "PMIC-1 13V5 VDD_M (in)" + label power2 "PMIC-1 VDD_M Rail Pwr (out1)" + ignore power3 + label curr1 "PMIC-1 13V5 VDD_M Rail Curr (in1)" + label curr2 "PMIC-1 VDD_M Rail Curr (out1)" + ignore curr3 + ignore curr4 + ignore curr5 + ignore curr6 + ignore curr7 + ignore curr8 + ignore curr9 + ignore curr10 +chip "xdpe1a2g7-i2c-*-62" + label in1 "PMIC-1 PSU 13V5 Rail (in1)" + label in2 "PMIC-1 VDD_M ADJ Rail (out1)" + ignore in3 + label temp1 "PMIC-1 VDD_M ADJ Temp 1" + ignore temp2 + label power1 "PMIC-1 13V5 VDD_M (in)" + label power2 "PMIC-1 VDD_M Rail Pwr (out1)" + ignore power3 + label curr1 "PMIC-1 13V5 VDD_M Rail Curr (in1)" + label curr2 "PMIC-1 VDD_M Rail Curr (out1)" + ignore curr3 + ignore curr4 + ignore curr5 + ignore curr6 + ignore curr7 + ignore curr8 + ignore curr9 + ignore curr10 + +chip "mp2891-i2c-*-63" + label in1 "PMIC-2 PSU 13V5 Rail (in1)" + label in2 "PMIC-2 VDD_T0 ADJ Rail (out1)" + label in3 "PMIC-2 VDD_T1 ADJ Rail (out2)" + label temp1 "PMIC-2 VDD_T0 ADJ Temp 1" + label temp2 "PMIC-2 VDD_T1 ADJ Temp 2" + label power1 "PMIC-2 13V5 VDD_T0 VDD_T1 (in)" + label power2 "PMIC-2 VDD_T0 Rail Pwr (out1)" + label power3 "PMIC-2 VDD_T1 Rail Pwr (out2)" + label curr1 "PMIC-2 13V5 VDD_T0 VDD_T1 Rail Curr (in1)" + label curr2 "PMIC-2 VDD_T0 Rail Curr (out1)" + label curr3 "PMIC-2 VDD_T1 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-63" + label in1 "PMIC-2 PSU 13V5 Rail (in1)" + label in2 "PMIC-2 VDD_T0 ADJ Rail (out1)" + label in3 "PMIC-2 VDD_T1 ADJ Rail (out2)" + label temp1 "PMIC-2 VDD_T0 ADJ Temp 1" + label temp2 "PMIC-2 VDD_T1 ADJ Temp 2" + label power1 "PMIC-2 13V5 VDD_T0 VDD_T1 (in)" + label power2 "PMIC-2 VDD_T0 Rail Pwr (out1)" + label power3 "PMIC-2 VDD_T1 Rail Pwr (out2)" + label curr1 "PMIC-2 13V5 VDD_T0 VDD_T1 Rail Curr (in1)" + label curr2 "PMIC-2 VDD_T0 Rail Curr (out1)" + label curr3 "PMIC-2 VDD_T1 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-64" + label in1 "PMIC-3 PSU 13V5 Rail (in1)" + label in2 "PMIC-3 VDD_T2 ADJ Rail (out1)" + label in3 "PMIC-3 VDD_T3 ADJ Rail (out2)" + label temp1 "PMIC-3 VDD_T2 ADJ Temp 1" + label temp2 "PMIC-3 VDD_T3 ADJ Temp 2" + label power1 "PMIC-3 13V5 VDD_T2 VDD_T3 (in)" + label power2 "PMIC-3 VDD_T2 Rail Pwr (out1)" + label power3 "PMIC-3 VDD_T3 Rail Pwr (out2)" + label curr1 "PMIC-3 13V5 VDD_T2 VDD_T3 Rail Curr (in1)" + label curr2 "PMIC-3 VDD_T2 Rail Curr (out1)" + label curr3 "PMIC-3 VDD_T3 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-64" + label in1 "PMIC-3 PSU 13V5 Rail (in1)" + label in2 "PMIC-3 VDD_T2 ADJ Rail (out1)" + label in3 "PMIC-3 VDD_T3 ADJ Rail (out2)" + label temp1 "PMIC-3 VDD_T2 ADJ Temp 1" + label temp2 "PMIC-3 VDD_T3 ADJ Temp 2" + label power1 "PMIC-3 13V5 VDD_T2 VDD_T3 (in)" + label power2 "PMIC-3 VDD_T2 Rail Pwr (out1)" + label power3 "PMIC-3 VDD_T3 Rail Pwr (out2)" + label curr1 "PMIC-3 13V5 VDD_T2 VDD_T3 Rail Curr (in1)" + label curr2 "PMIC-3 VDD_T2 Rail Curr (out1)" + label curr3 "PMIC-3 VDD_T3 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-65" + label in1 "PMIC-4 PSU 13V5 Rail (in1)" + label in2 "PMIC-4 VDD_T4 ADJ Rail (out1)" + label in3 "PMIC-4 VDD_T5 ADJ Rail (out2)" + label temp1 "PMIC-4 VDD_T4 ADJ Temp 1" + label temp2 "PMIC-4 VDD_T5 ADJ Temp 2" + label power1 "PMIC-4 13V5 VDD_T4 VDD_T5 (in)" + label power2 "PMIC-4 VDD_T4 Rail Pwr (out1)" + label power3 "PMIC-4 VDD_T5 Rail Pwr (out2)" + label curr1 "PMIC-4 13V5 VDD_T4 VDD_T5 Rail Curr (in1)" + label curr2 "PMIC-4 VDD_T4 Rail Curr (out1)" + label curr3 "PMIC-4 VDD_T5 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-65" + label in1 "PMIC-4 PSU 13V5 Rail (in1)" + label in2 "PMIC-4 VDD_T4 ADJ Rail (out1)" + label in3 "PMIC-4 VDD_T5 ADJ Rail (out2)" + label temp1 "PMIC-4 VDD_T4 ADJ Temp 1" + label temp2 "PMIC-4 VDD_T5 ADJ Temp 2" + label power1 "PMIC-4 13V5 VDD_T4 VDD_T5 (in)" + label power2 "PMIC-4 VDD_T4 Rail Pwr (out1)" + label power3 "PMIC-4 VDD_T5 Rail Pwr (out2)" + label curr1 "PMIC-4 13V5 VDD_T4 VDD_T5 Rail Curr (in1)" + label curr2 "PMIC-4 VDD_T4 Rail Curr (out1)" + label curr3 "PMIC-4 VDD_T5 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-66" + label in1 "PMIC-5 PSU 13V5 Rail (in1)" + label in2 "PMIC-5 VDD_T6 ADJ Rail (out1)" + label in3 "PMIC-5 VDD_T7 ADJ Rail (out2)" + label temp1 "PMIC-5 VDD_T6 ADJ Temp 1" + label temp2 "PMIC-5 VDD_T7 ADJ Temp 2" + label power1 "PMIC-5 13V5 VDD_T6 VDD_T7 (in)" + label power2 "PMIC-5 VDD_T6 Rail Pwr (out1)" + label power3 "PMIC-5 VDD_T7 Rail Pwr (out2)" + label curr1 "PMIC-5 13V5 VDD_T6 VDD_T7 Rail Curr (in1)" + label curr2 "PMIC-5 VDD_T6 Rail Curr (out1)" + label curr3 "PMIC-5 VDD_T7 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-66" + label in1 "PMIC-5 PSU 13V5 Rail (in1)" + label in2 "PMIC-5 VDD_T6 ADJ Rail (out1)" + label in3 "PMIC-5 VDD_T7 ADJ Rail (out2)" + label temp1 "PMIC-5 VDD_T6 ADJ Temp 1" + label temp2 "PMIC-5 VDD_T7 ADJ Temp 2" + label power1 "PMIC-5 13V5 VDD_T6 VDD_T7 (in)" + label power2 "PMIC-5 VDD_T6 Rail Pwr (out1)" + label power3 "PMIC-5 VDD_T7 Rail Pwr (out2)" + label curr1 "PMIC-5 13V5 VDD_T6 VDD_T7 Rail Curr (in1)" + label curr2 "PMIC-5 VDD_T6 Rail Curr (out1)" + label curr3 "PMIC-5 VDD_T7 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-67" + label in1 "PMIC-6 PSU 13V5 Rail (in1)" + label in2 "PMIC-6 DVDD_T0 ADJ Rail (out1)" + label in3 "PMIC-6 DVDD_T1 ADJ Rail (out2)" + label temp1 "PMIC-6 DVDD_T0 ADJ Temp 1" + label temp2 "PMIC-6 DVDD_T1 ADJ Temp 2" + label power1 "PMIC-6 13V5 DVDD_T0 DVDD_T1 (in)" + label power2 "PMIC-6 DVDD_T0 Rail Pwr (out1)" + label power3 "PMIC-6 DVDD_T1 Rail Pwr (out2)" + label curr1 "PMIC-6 13V5 DVDD_T0 DVDD_T1 Rail Curr (in1)" + label curr2 "PMIC-6 DVDD_T0 Rail Curr (out1)" + label curr3 "PMIC-6 DVDD_T1 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-67" + label in1 "PMIC-6 PSU 13V5 Rail (in1)" + label in2 "PMIC-6 DVDD_T0 ADJ Rail (out1)" + label in3 "PMIC-6 DVDD_T1 ADJ Rail (out2)" + label temp1 "PMIC-6 DVDD_T0 ADJ Temp 1" + label temp2 "PMIC-6 DVDD_T1 ADJ Temp 2" + label power1 "PMIC-6 13V5 DVDD_T0 DVDD_T1 (in)" + label power2 "PMIC-6 DVDD_T0 Rail Pwr (out1)" + label power3 "PMIC-6 DVDD_T1 Rail Pwr (out2)" + label curr1 "PMIC-6 13V5 DVDD_T0 DVDD_T1 Rail Curr (in1)" + label curr2 "PMIC-6 DVDD_T0 Rail Curr (out1)" + label curr3 "PMIC-6 DVDD_T1 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-68" + label in1 "PMIC-7 PSU 13V5 Rail (in1)" + label in2 "PMIC-7 DVDD_T2 ADJ Rail (out1)" + label in3 "PMIC-7 DVDD_T3 ADJ Rail (out2)" + label temp1 "PMIC-7 DVDD_T2 ADJ Temp 1" + label temp2 "PMIC-7 DVDD_T3 ADJ Temp 2" + label power1 "PMIC-7 13V5 DVDD_T2 DVDD_T3 (in)" + label power2 "PMIC-7 DVDD_T2 Rail Pwr (out1)" + label power3 "PMIC-7 DVDD_T3 Rail Pwr (out2)" + label curr1 "PMIC-7 13V5 DVDD_T2 DVDD_T3 Rail Curr (in1)" + label curr2 "PMIC-7 DVDD_T2 Rail Curr (out1)" + label curr3 "PMIC-7 DVDD_T3 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-68" + label in1 "PMIC-7 PSU 13V5 Rail (in1)" + label in2 "PMIC-7 DVDD_T2 ADJ Rail (out1)" + label in3 "PMIC-7 DVDD_T3 ADJ Rail (out2)" + label temp1 "PMIC-7 DVDD_T2 ADJ Temp 1" + label temp2 "PMIC-7 DVDD_T3 ADJ Temp 2" + label power1 "PMIC-7 13V5 DVDD_T2 DVDD_T3 (in)" + label power2 "PMIC-7 DVDD_T2 Rail Pwr (out1)" + label power3 "PMIC-7 DVDD_T3 Rail Pwr (out2)" + label curr1 "PMIC-7 13V5 DVDD_T2 DVDD_T3 Rail Curr (in1)" + label curr2 "PMIC-7 DVDD_T2 Rail Curr (out1)" + label curr3 "PMIC-7 DVDD_T3 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-69" + label in1 "PMIC-8 PSU 13V5 Rail (in1)" + label in2 "PMIC-8 DVDD_T4 ADJ Rail (out1)" + label in3 "PMIC-8 DVDD_T5 ADJ Rail (out2)" + label temp1 "PMIC-8 DVDD_T4 ADJ Temp 1" + label temp2 "PMIC-8 DVDD_T5 ADJ Temp 2" + label power1 "PMIC-8 13V5 DVDD_T4 DVDD_T5 (in)" + label power2 "PMIC-8 DVDD_T4 Rail Pwr (out1)" + label power3 "PMIC-8 DVDD_T5 Rail Pwr (out2)" + label curr1 "PMIC-8 13V5 DVDD_T4 DVDD_T5 Rail Curr (in1)" + label curr2 "PMIC-8 DVDD_T4 Rail Curr (out1)" + label curr3 "PMIC-8 DVDD_T5 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-69" + label in1 "PMIC-8 PSU 13V5 Rail (in1)" + label in2 "PMIC-8 DVDD_T4 ADJ Rail (out1)" + label in3 "PMIC-8 DVDD_T5 ADJ Rail (out2)" + label temp1 "PMIC-8 DVDD_T4 ADJ Temp 1" + label temp2 "PMIC-8 DVDD_T5 ADJ Temp 2" + label power1 "PMIC-8 13V5 DVDD_T4 DVDD_T5 (in)" + label power2 "PMIC-8 DVDD_T4 Rail Pwr (out1)" + label power3 "PMIC-8 DVDD_T5 Rail Pwr (out2)" + label curr1 "PMIC-8 13V5 DVDD_T4 DVDD_T5 Rail Curr (in1)" + label curr2 "PMIC-8 DVDD_T4 Rail Curr (out1)" + label curr3 "PMIC-8 DVDD_T5 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-6a" + label in1 "PMIC-9 PSU 13V5 Rail (in1)" + label in2 "PMIC-9 DVDD_T6 ADJ Rail (out1)" + label in3 "PMIC-9 DVDD_T7 ADJ Rail (out2)" + label temp1 "PMIC-9 DVDD_T6 ADJ Temp 1" + label temp2 "PMIC-9 DVDD_T7 ADJ Temp 2" + label power1 "PMIC-9 13V5 DVDD_T6 DVDD_T7 (in)" + label power2 "PMIC-9 DVDD_T6 Rail Pwr (out1)" + label power3 "PMIC-9 DVDD_T7 Rail Pwr (out2)" + label curr1 "PMIC-9 13V5 DVDD_T6 DVDD_T7 Rail Curr (in1)" + label curr2 "PMIC-9 DVDD_T6 Rail Curr (out1)" + label curr3 "PMIC-9 DVDD_T7 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-6a" + label in1 "PMIC-9 PSU 13V5 Rail (in1)" + label in2 "PMIC-9 DVDD_T6 ADJ Rail (out1)" + label in3 "PMIC-9 DVDD_T7 ADJ Rail (out2)" + label temp1 "PMIC-9 DVDD_T6 ADJ Temp 1" + label temp2 "PMIC-9 DVDD_T7 ADJ Temp 2" + label power1 "PMIC-9 13V5 DVDD_T6 DVDD_T7 (in)" + label power2 "PMIC-9 DVDD_T6 Rail Pwr (out1)" + label power3 "PMIC-9 DVDD_T7 Rail Pwr (out2)" + label curr1 "PMIC-9 13V5 DVDD_T6 DVDD_T7 Rail Curr (in1)" + label curr2 "PMIC-9 DVDD_T6 Rail Curr (out1)" + label curr3 "PMIC-9 DVDD_T7 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +chip "mp2891-i2c-*-6c" + label in1 "PMIC-10 PSU 13V5 Rail (in1)" + label in2 "PMIC-10 HVDD_T03 1V2 Rail (out1)" + label in3 "PMIC-10 HVDD_T47 1V2 Rail (out2)" + label temp1 "PMIC-10 HVDD_T03 1V2 Temp 1" + label temp2 "PMIC-10 HVDD_T47 1V2 Temp 2" + label power1 "PMIC-10 13V5 HVDD_T03 HVDD_T47 (in)" + label power2 "PMIC-10 HVDD_T03 Rail Pwr (out1)" + label power3 "PMIC-10 HVDD_T47 Rail Pwr (out2)" + label curr1 "PMIC-10 13V5 HVDD_T03 HVDD_T47 Rail Curr (in1)" + label curr2 "PMIC-10 HVDD_T03 Rail Curr (out1)" + label curr3 "PMIC-10 HVDD_T47 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + ignore curr7 + ignore curr8 + ignore curr9 + ignore curr10 + ignore curr11 +chip "xdpe1a2g7-i2c-*-6c" + label in1 "PMIC-10 PSU 13V5 Rail (in1)" + label in2 "PMIC-10 HVDD_T03 1V2 Rail (out1)" + label in3 "PMIC-10 HVDD_T47 1V2 Rail (out2)" + label temp1 "PMIC-10 HVDD_T03 1V2 Temp 1" + label temp2 "PMIC-10 HVDD_T47 1V2 Temp 2" + label power1 "PMIC-10 13V5 HVDD_T03 HVDD_T47 (in)" + label power2 "PMIC-10 HVDD_T03 Rail Pwr (out1)" + label power3 "PMIC-10 HVDD_T47 Rail Pwr (out2)" + label curr1 "PMIC-10 13V5 HVDD_T03 HVDD_T47 Rail Curr (in1)" + label curr2 "PMIC-10 HVDD_T03 Rail Curr (out1)" + label curr3 "PMIC-10 HVDD_T47 Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + ignore curr7 + ignore curr8 + ignore curr9 + ignore curr10 + ignore curr11 + +chip "mp2891-i2c-*-6e" + label in1 "PMIC-11 PSU 13V5 Rail (in1)" + label in2 "PMIC-11 VDDSCC 0V75 Rail (out1)" + label in3 "PMIC-11 DVDD_M ADJ Rail (out2)" + label temp1 "PMIC-11 VDDSCC 1V2 Temp 1" + label temp2 "PMIC-11 DVDD_M 0V75 Temp 2" + label power1 "PMIC-11 13V5 VDDSCC DVDD_M (in)" + label power2 "PMIC-11 VDDSCC Rail Pwr (out1)" + label power3 "PMIC-11 DVDD_M Rail Pwr (out2)" + label curr1 "PMIC-11 13V5 VDDSCC DVDD_M Rail Curr (in1)" + label curr2 "PMIC-11 VDDSCC Rail Curr (out1)" + label curr3 "PMIC-11 DVDD_M Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 +chip "xdpe1a2g7-i2c-*-6e" + label in1 "PMIC-11 PSU 13V5 Rail (in1)" + label in2 "PMIC-11 VDDSCC 0V75 Rail (out1)" + label in3 "PMIC-11 DVDD_M ADJ Rail (out2)" + label temp1 "PMIC-11 VDDSCC 1V2 Temp 1" + label temp2 "PMIC-11 DVDD_M 0V75 Temp 2" + label power1 "PMIC-11 13V5 VDDSCC DVDD_M (in)" + label power2 "PMIC-11 VDDSCC Rail Pwr (out1)" + label power3 "PMIC-11 DVDD_M Rail Pwr (out2)" + label curr1 "PMIC-11 13V5 VDDSCC DVDD_M Rail Curr (in1)" + label curr2 "PMIC-11 VDDSCC Rail Curr (out1)" + label curr3 "PMIC-11 DVDD_M Rail Curr (out2)" + ignore curr4 + ignore curr5 + ignore curr6 + +# Power supplies +chip "dps460-i2c-*-59" + label in1 "PSU-1(L) 220V Rail (in)" + ignore in2 + label in3 "PSU-1(L) 54V Rail (out)" + ignore fan2 + ignore fan3 + label fan1 "PSU-1(L) Fan 1" + label temp1 "PSU-1(L) Temp 1" + label temp2 "PSU-1(L) Temp 2" + label temp3 "PSU-1(L) Temp 3" + label power1 "PSU-1(L) 220V Rail Pwr (in)" + label power2 "PSU-1(L) 54V Rail Pwr (out)" + label curr1 "PSU-1(L) 220V Rail Curr (in)" + label curr2 "PSU-1(L) 54V Rail Curr (out)" + set power2_cap 0 +chip "dps460-i2c-*-58" + label in1 "PSU-2(R) 220V Rail (in)" + ignore in2 + label in3 "PSU-2(R) 54V Rail (out)" + ignore fan2 + ignore fan3 + label fan1 "PSU-2(R) Fan 1" + label temp1 "PSU-2(R) Temp 1" + label temp2 "PSU-2(R) Temp 2" + label temp3 "PSU-2(R) Temp 3" + label power1 "PSU-2(R) 220V Rail Pwr (in)" + label power2 "PSU-2(R) 54V Rail Pwr (out)" + label curr1 "PSU-2(R) 220V Rail Curr (in)" + label curr2 "PSU-2(R) 54V Rail Curr (out)" + set power2_cap 0 +chip "dps460-i2c-*-5b" + label in1 "PSU-3(R) 220V Rail (in)" + ignore in2 + label in3 "PSU-3(R) 54V Rail (out)" + ignore fan2 + ignore fan3 + label fan1 "PSU-3(R) Fan 1" + label temp1 "PSU-3(R) Temp 1" + label temp2 "PSU-3(R) Temp 2" + label temp3 "PSU-3(R) Temp 3" + label power1 "PSU-3(R) 220V Rail Pwr (in)" + label power2 "PSU-3(R) 54V Rail Pwr (out)" + label curr1 "PSU-3(R) 220V Rail Curr (in)" + label curr2 "PSU-3(R) 54V Rail Curr (out)" + set power2_cap 0 +chip "dps460-i2c-*-5a" + label in1 "PSU-4(R) 220V Rail (in)" + ignore in2 + label in3 "PSU-4(R) 54V Rail (out)" + ignore fan2 + ignore fan3 + label fan1 "PSU-4(R) Fan 1" + label temp1 "PSU-4(R) Temp 1" + label temp2 "PSU-4(R) Temp 2" + label temp3 "PSU-4(R) Temp 3" + label power1 "PSU-4(R) 220V Rail Pwr (in)" + label power2 "PSU-4(R) 54V Rail Pwr (out)" + label curr1 "PSU-4(R) 220V Rail Curr (in)" + label curr2 "PSU-4(R) 54V Rail Curr (out)" + set power2_cap 0 + +# AMD Comex +bus "i2c-68" "i2c-9-mux (chan_id 6)" + chip "mp2855-i2c-*-69" + label in1 "PMIC-12 COMEX (in) VDDCR INPUT VOLT" + label in2 "PMIC-12 COMEX (out) VDDCR_CPU VOLT" + label in3 "PMIC-12 COMEX (out2) VDDCR_SOC VOLT" + label temp1 "PMIC-12 COMEX VDDCR_CPU PHASE TEMP" + label temp2 "PMIC-12 COMEX VDDCR_SOC PHASE TEMP" + label curr1 "PMIC-12 COMEX VDDCR_CPU CURR" + label curr2 "PMIC-12 COMEX VDDCR_SOC CURR" + +bus "i2c-69" "i2c-9-mux (chan_id 6)" + chip "mp2975-i2c-*-6a" + label in1 "PMIC-13 COMEX VDD_MEM INPUT VOLT" + label in2 "PMIC-13 COMEX VDD_MEM OUTPUT VOLT" + label temp1 "PMIC-13 COMEX VDD_MEM PHASE TEMP" + label curr1 "PMIC-13 COMEX VDD_MEM INPUT CURR" + label curr2 "PMIC-13 COMEX VDD_MEM OUTPUT CURR" + ignore curr3 + ignore curr4 + label power1 "PMIC-13 COMEX VDD_MEM INPUT POWER" + label power2 "PMIC-13 COMEX VDD_MEM OUTPUT POWER" + +#bus "i2c-0" "Synopsys DesignWare I2C adapter" +chip "jc42-i2c-*-1a" + label temp1 "SODIMM1 Temp" + +chip "jc42-i2c-*-1b" + label temp1 "SODIMM2 Temp" + +chip "jc42-i2c-*-1e" + label temp1 "SODIMM3 Temp" + +chip "jc42-i2c-*-1f" + label temp1 "SODIMM4 Temp" + +chip "k10temp-pci-*" + label temp1 "CPU PACKAGE TEMP" + label temp2 "CPU DIE0 TEMP" + +chip "nvme-pci-*" + label temp1 "SSD Temp" + ignore temp2 + ignore temp3 + +chip "00000500400-mdio-5" + label temp1 "PHY TEMP" diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/hwsku.json b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/hwsku.json new file mode 100644 index 000000000000..5401dfda99fd --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/hwsku.json @@ -0,0 +1,106 @@ +{ + "interfaces": { + "Ethernet1": { + "default_brkout_mode": "1x400G" + }, + "Ethernet9": { + "default_brkout_mode": "1x400G" + }, + "Ethernet17": { + "default_brkout_mode": "1x400G" + }, + "Ethernet25": { + "default_brkout_mode": "1x400G" + }, + "Ethernet33": { + "default_brkout_mode": "1x400G" + }, + "Ethernet41": { + "default_brkout_mode": "1x400G" + }, + "Ethernet49": { + "default_brkout_mode": "1x400G" + }, + "Ethernet57": { + "default_brkout_mode": "1x400G" + }, + "Ethernet65": { + "default_brkout_mode": "1x400G" + }, + "Ethernet73": { + "default_brkout_mode": "1x400G" + }, + "Ethernet81": { + "default_brkout_mode": "1x400G" + }, + "Ethernet89": { + "default_brkout_mode": "1x400G" + }, + "Ethernet97": { + "default_brkout_mode": "1x400G" + }, + "Ethernet105": { + "default_brkout_mode": "1x400G" + }, + "Ethernet113": { + "default_brkout_mode": "1x400G" + }, + "Ethernet121": { + "default_brkout_mode": "1x400G" + }, + "Ethernet129": { + "default_brkout_mode": "1x400G" + }, + "Ethernet137": { + "default_brkout_mode": "1x400G" + }, + "Ethernet145": { + "default_brkout_mode": "1x400G" + }, + "Ethernet153": { + "default_brkout_mode": "1x400G" + }, + "Ethernet161": { + "default_brkout_mode": "1x400G" + }, + "Ethernet169": { + "default_brkout_mode": "1x400G" + }, + "Ethernet177": { + "default_brkout_mode": "1x400G" + }, + "Ethernet185": { + "default_brkout_mode": "1x400G" + }, + "Ethernet193": { + "default_brkout_mode": "1x400G" + }, + "Ethernet201": { + "default_brkout_mode": "1x400G" + }, + "Ethernet209": { + "default_brkout_mode": "1x400G" + }, + "Ethernet217": { + "default_brkout_mode": "1x400G" + }, + "Ethernet225": { + "default_brkout_mode": "1x400G" + }, + "Ethernet233": { + "default_brkout_mode": "1x400G" + }, + "Ethernet241": { + "default_brkout_mode": "1x400G" + }, + "Ethernet249": { + "default_brkout_mode": "1x400G" + }, + "Ethernet257": { + "default_brkout_mode": "1x10G" + }, + "Ethernet258": { + "default_brkout_mode": "1x10G" + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/port_config.ini b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/port_config.ini new file mode 100644 index 000000000000..8d631e7cb034 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/port_config.ini @@ -0,0 +1,35 @@ +# name lanes alias index speed +Ethernet1 1,2,3,4,5,6,7,8 fourHundredGigE0/1 0 400000 +Ethernet9 9,10,11,12,13,14,15,16 fourHundredGigE0/2 1 400000 +Ethernet17 17,18,19,20,21,22,23,24 fourHundredGigE0/3 2 400000 +Ethernet25 25,26,27,28,29,30,31,32 fourHundredGigE0/4 3 400000 +Ethernet33 33,34,35,36,37,38,39,40 fourHundredGigE0/5 4 400000 +Ethernet41 41,42,43,44,45,46,47,48 fourHundredGigE0/6 5 400000 +Ethernet49 49,50,51,52,53,54,55,56 fourHundredGigE0/7 6 400000 +Ethernet57 57,58,59,60,61,62,63,64 fourHundredGigE0/8 7 400000 +Ethernet65 65,66,67,68,69,70,71,72 fourHundredGigE0/9 8 400000 +Ethernet73 73,74,75,76,77,78,79,80 fourHundredGigE0/10 9 400000 +Ethernet81 81,82,83,84,85,86,87,88 fourHundredGigE0/11 10 400000 +Ethernet89 89,90,91,92,93,94,95,96 fourHundredGigE0/12 11 400000 +Ethernet97 97,98,99,100,101,102,103,104 fourHundredGigE0/13 12 400000 +Ethernet105 105,106,107,108,109,110,111,112 fourHundredGigE0/14 13 400000 +Ethernet113 113,114,115,116,117,118,119,120 fourHundredGigE0/15 14 400000 +Ethernet121 121,122,123,124,125,126,127,128 fourHundredGigE0/16 15 400000 +Ethernet129 129,130,131,132,133,134,135,136 fourHundredGigE0/17 16 400000 +Ethernet137 137,138,139,140,141,142,143,144 fourHundredGigE0/18 17 400000 +Ethernet145 145,146,147,148,149,150,151,152 fourHundredGigE0/19 18 400000 +Ethernet153 153,154,155,156,157,158,159,160 fourHundredGigE0/20 19 400000 +Ethernet161 161,162,163,164,165,166,167,168 fourHundredGigE0/21 20 400000 +Ethernet169 169,170,171,172,173,174,175,176 fourHundredGigE0/22 21 400000 +Ethernet177 177,178,179,180,181,182,183,184 fourHundredGigE0/23 22 400000 +Ethernet185 185,186,187,188,189,190,191,192 fourHundredGigE0/24 23 400000 +Ethernet193 193,194,195,196,197,198,199,200 fourHundredGigE0/25 24 400000 +Ethernet201 201,202,203,204,205,206,207,208 fourHundredGigE0/26 25 400000 +Ethernet209 209,210,211,212,213,214,215,216 fourHundredGigE0/27 26 400000 +Ethernet217 217,218,219,220,221,222,223,224 fourHundredGigE0/28 27 400000 +Ethernet225 225,226,227,228,229,230,231,232 fourHundredGigE0/29 28 400000 +Ethernet233 233,234,235,236,237,238,239,240 fourHundredGigE0/30 29 400000 +Ethernet241 241,242,243,244,245,246,247,248 fourHundredGigE0/31 30 400000 +Ethernet249 249,250,251,252,253,254,255,256 fourHundredGigE0/32 31 400000 +Ethernet257 258 tenGigE0/33 32 10000 +Ethernet258 257 tenGigE0/34 33 10000 \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/sai.profile b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/sai.profile new file mode 100644 index 000000000000..3f83ed12fa57 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th3-m2-w6920-32qc2x-32x400G.config.bcm diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/th3-m2-w6920-32qc2x-32x400G.config.bcm b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/th3-m2-w6920-32qc2x-32x400G.config.bcm new file mode 100644 index 000000000000..2fa4334222ca --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/M2-W6920-32QC2X/th3-m2-w6920-32qc2x-32x400G.config.bcm @@ -0,0 +1,350 @@ +#rate_ext_mdio_divisor=100 +scache_filename=/var/warmboot/wbscache +stable_size=0x55000000 +stable_location=3 +warmboot_knet_shutdown_mode=1 +sai_postinit_cmd_file=/usr/share/sonic/platform/postinit_cmd_file.soc + +pcie_file=/usr/share/sonic/platform/pcie.cint +capi_level=1 +#port_fec=3 +cfg_int_phy_ctrl.0=1 +mmu_port_num_mc_queue=2 +bcm_tunnel_term_compatible_mode=1 +pbmp_xport_xe.0=0x8ffff8ffffcffff8ffff8ffff8ffffcffff9fffe +#serdes_tx_taps_ce=pam4:0:140:0:0:0:0 +ccm_dma_enable=0 +ccmdma_intr_enable=0 +ctr_evict_enable=0 +mem_cache_enable=0 +parity_correction=1 +parity_enable=1 +memlist_enable=1 +reglist_enable=1 +fpem_mem_entries=65536 +pll_bypass=1 +init_all_modules=0 +l3_mem_entries=16384 +l3_alpm_enable=2 +ipv6_lpm_128b_enable=0x1 +l3_max_ecmp_mode=1 +svi_my_station_optimization=1 + +#mgmt +portmap_38=257:10 +portmap_118=258:10 + +portmap_1=1:400 +portmap_5=9:400 +portmap_9=17:400 +portmap_13=25:400 + +portmap_20=33:400 +portmap_24=41:400 +portmap_28=49:400 +portmap_32=57:400 + +portmap_40=65:400 +portmap_44=73:400 +portmap_48=81:400 +portmap_52=89:400 + +portmap_60=97:400 +portmap_64=105:400 +portmap_68=113:400 +portmap_72=121:400 + +portmap_80=129:400 +portmap_84=137:400 +portmap_88=145:400 +portmap_92=153:400 + +portmap_100=161:400 +portmap_104=169:400 +portmap_108=177:400 +portmap_112=185:400 + +portmap_120=193:400 +portmap_124=201:400 +portmap_128=209:400 +portmap_132=217:400 + +portmap_140=225:400 +portmap_144=233:400 +portmap_148=241:400 +portmap_152=249:400 + +phy_chain_rx_lane_map_physical{1.0}=0x67214530 +phy_chain_tx_lane_map_physical{1.0}=0x53762140 +phy_chain_rx_lane_map_physical{9.0}=0x43712650 +phy_chain_tx_lane_map_physical{9.0}=0x56327014 +phy_chain_rx_lane_map_physical{17.0}=0x40357216 +phy_chain_tx_lane_map_physical{17.0}=0x65320147 +phy_chain_rx_lane_map_physical{25.0}=0x50264137 +phy_chain_tx_lane_map_physical{25.0}=0x62107435 +phy_chain_rx_lane_map_physical{33.0}=0x26470153 +phy_chain_tx_lane_map_physical{33.0}=0x45216730 +phy_chain_rx_lane_map_physical{41.0}=0x21743056 +phy_chain_tx_lane_map_physical{41.0}=0x75036124 +phy_chain_rx_lane_map_physical{49.0}=0x25431760 +phy_chain_tx_lane_map_physical{49.0}=0x56320471 +phy_chain_rx_lane_map_physical{57.0}=0x71460235 +phy_chain_tx_lane_map_physical{57.0}=0x72314650 +phy_chain_rx_lane_map_physical{65.0}=0x64317520 +phy_chain_tx_lane_map_physical{65.0}=0x67304512 +phy_chain_rx_lane_map_physical{73.0}=0x15407236 +phy_chain_tx_lane_map_physical{73.0}=0x16245730 +phy_chain_rx_lane_map_physical{81.0}=0x04735261 +phy_chain_tx_lane_map_physical{81.0}=0x27365401 +phy_chain_rx_lane_map_physical{89.0}=0x61450372 +phy_chain_tx_lane_map_physical{89.0}=0x27514630 +phy_chain_rx_lane_map_physical{97.0}=0x05741362 +phy_chain_tx_lane_map_physical{97.0}=0x13624705 +phy_chain_rx_lane_map_physical{105.0}=0x10426735 +phy_chain_tx_lane_map_physical{105.0}=0x70124635 +phy_chain_rx_lane_map_physical{113.0}=0x34072651 +phy_chain_tx_lane_map_physical{113.0}=0x05712463 +phy_chain_rx_lane_map_physical{121.0}=0x34026517 +phy_chain_tx_lane_map_physical{121.0}=0x14052367 +phy_chain_rx_lane_map_physical{129.0}=0x76413205 +phy_chain_tx_lane_map_physical{129.0}=0x41720365 +phy_chain_rx_lane_map_physical{137.0}=0x72530146 +phy_chain_tx_lane_map_physical{137.0}=0x15437026 +phy_chain_rx_lane_map_physical{145.0}=0x02567413 +phy_chain_tx_lane_map_physical{145.0}=0x45217630 +phy_chain_rx_lane_map_physical{153.0}=0x14265370 +phy_chain_tx_lane_map_physical{153.0}=0x75106432 +phy_chain_rx_lane_map_physical{161.0}=0x53017462 +phy_chain_tx_lane_map_physical{161.0}=0x56104732 +phy_chain_rx_lane_map_physical{169.0}=0x50761243 +phy_chain_tx_lane_map_physical{169.0}=0x65237014 +phy_chain_rx_lane_map_physical{177.0}=0x37612450 +phy_chain_tx_lane_map_physical{177.0}=0x07124563 +phy_chain_rx_lane_map_physical{185.0}=0x31476205 +phy_chain_tx_lane_map_physical{185.0}=0x54236710 +phy_chain_rx_lane_map_physical{193.0}=0x52104763 +phy_chain_tx_lane_map_physical{193.0}=0x06137524 +phy_chain_rx_lane_map_physical{201.0}=0x01543762 +phy_chain_tx_lane_map_physical{201.0}=0x76512043 +phy_chain_rx_lane_map_physical{209.0}=0x10526743 +phy_chain_tx_lane_map_physical{209.0}=0x57204613 +phy_chain_rx_lane_map_physical{217.0}=0x30465172 +phy_chain_tx_lane_map_physical{217.0}=0x07315624 +phy_chain_rx_lane_map_physical{225.0}=0x05176324 +phy_chain_tx_lane_map_physical{225.0}=0x46213507 +phy_chain_rx_lane_map_physical{233.0}=0x23506147 +phy_chain_tx_lane_map_physical{233.0}=0x54376102 +phy_chain_rx_lane_map_physical{241.0}=0x34750612 +phy_chain_tx_lane_map_physical{241.0}=0x56214730 +phy_chain_rx_lane_map_physical{249.0}=0x74125603 +phy_chain_tx_lane_map_physical{249.0}=0x21053467 + + +serdes_core_rx_polarity_flip_physical{1}=0x6F +serdes_core_tx_polarity_flip_physical{1}=0xCD +serdes_core_rx_polarity_flip_physical{9}=0x36 +serdes_core_tx_polarity_flip_physical{9}=0x7C +serdes_core_rx_polarity_flip_physical{17}=0x2D +serdes_core_tx_polarity_flip_physical{17}=0xEB +serdes_core_rx_polarity_flip_physical{25}=0x0B +serdes_core_tx_polarity_flip_physical{25}=0xEE +serdes_core_rx_polarity_flip_physical{33}=0xEB +serdes_core_tx_polarity_flip_physical{33}=0x7C +serdes_core_rx_polarity_flip_physical{41}=0x1B +serdes_core_tx_polarity_flip_physical{41}=0x57 +serdes_core_rx_polarity_flip_physical{49}=0xA4 +serdes_core_tx_polarity_flip_physical{49}=0x0 +serdes_core_rx_polarity_flip_physical{57}=0x74 +serdes_core_tx_polarity_flip_physical{57}=0x54 +serdes_core_rx_polarity_flip_physical{65}=0x3C +serdes_core_tx_polarity_flip_physical{65}=0xF4 +serdes_core_rx_polarity_flip_physical{73}=0xC7 +serdes_core_tx_polarity_flip_physical{73}=0x40 +serdes_core_rx_polarity_flip_physical{81}=0xD9 +serdes_core_tx_polarity_flip_physical{81}=0x51 +serdes_core_rx_polarity_flip_physical{89}=0xB6 +serdes_core_tx_polarity_flip_physical{89}=0x9C +serdes_core_rx_polarity_flip_physical{97}=0x80 +serdes_core_tx_polarity_flip_physical{97}=0x84 +serdes_core_rx_polarity_flip_physical{105}=0xE8 +serdes_core_tx_polarity_flip_physical{105}=0x22 +serdes_core_rx_polarity_flip_physical{113}=0xCF +serdes_core_tx_polarity_flip_physical{113}=0xF7 +serdes_core_rx_polarity_flip_physical{121}=0x73 +serdes_core_tx_polarity_flip_physical{121}=0x7B +serdes_core_rx_polarity_flip_physical{129}=0x03 +serdes_core_tx_polarity_flip_physical{129}=0x45 +serdes_core_rx_polarity_flip_physical{137}=0x73 +serdes_core_tx_polarity_flip_physical{137}=0x3D +serdes_core_rx_polarity_flip_physical{145}=0xBD +serdes_core_tx_polarity_flip_physical{145}=0x72 +serdes_core_rx_polarity_flip_physical{153}=0xD2 +serdes_core_tx_polarity_flip_physical{153}=0xAE +serdes_core_rx_polarity_flip_physical{161}=0x58 +serdes_core_tx_polarity_flip_physical{161}=0x0C +serdes_core_rx_polarity_flip_physical{169}=0x75 +serdes_core_tx_polarity_flip_physical{169}=0x13 +serdes_core_rx_polarity_flip_physical{177}=0xAA +serdes_core_tx_polarity_flip_physical{177}=0x4F +serdes_core_rx_polarity_flip_physical{185}=0xA8 +serdes_core_tx_polarity_flip_physical{185}=0x96 +serdes_core_rx_polarity_flip_physical{193}=0x87 +serdes_core_tx_polarity_flip_physical{193}=0x17 +serdes_core_rx_polarity_flip_physical{201}=0x18 +serdes_core_tx_polarity_flip_physical{201}=0x13 +serdes_core_rx_polarity_flip_physical{209}=0x11 +serdes_core_tx_polarity_flip_physical{209}=0xB3 +serdes_core_rx_polarity_flip_physical{217}=0xF2 +serdes_core_tx_polarity_flip_physical{217}=0xB7 +serdes_core_rx_polarity_flip_physical{225}=0x78 +serdes_core_tx_polarity_flip_physical{225}=0xB6 +serdes_core_rx_polarity_flip_physical{233}=0x38 +serdes_core_tx_polarity_flip_physical{233}=0x6E +serdes_core_rx_polarity_flip_physical{241}=0x60 +serdes_core_tx_polarity_flip_physical{241}=0x3C +serdes_core_rx_polarity_flip_physical{249}=0x1A +serdes_core_tx_polarity_flip_physical{249}=0xB1 + +dport_map_port_1=1 +dport_map_port_2=2 +dport_map_port_3=3 +dport_map_port_4=4 +dport_map_port_5=5 +dport_map_port_6=6 +dport_map_port_7=7 +dport_map_port_8=8 +dport_map_port_9=9 +dport_map_port_10=10 +dport_map_port_11=11 +dport_map_port_12=12 +dport_map_port_13=13 +dport_map_port_14=14 +dport_map_port_15=15 +dport_map_port_16=16 +dport_map_port_20=17 +dport_map_port_21=18 +dport_map_port_22=19 +dport_map_port_23=20 +dport_map_port_24=21 +dport_map_port_25=22 +dport_map_port_26=23 +dport_map_port_27=24 +dport_map_port_28=25 +dport_map_port_29=26 +dport_map_port_30=27 +dport_map_port_31=28 +dport_map_port_32=29 +dport_map_port_33=30 +dport_map_port_34=31 +dport_map_port_35=32 +dport_map_port_40=33 +dport_map_port_41=34 +dport_map_port_42=35 +dport_map_port_43=36 +dport_map_port_44=37 +dport_map_port_45=38 +dport_map_port_46=39 +dport_map_port_47=40 +dport_map_port_48=41 +dport_map_port_49=42 +dport_map_port_50=43 +dport_map_port_51=44 +dport_map_port_52=45 +dport_map_port_53=46 +dport_map_port_54=47 +dport_map_port_55=48 +dport_map_port_60=49 +dport_map_port_61=50 +dport_map_port_62=51 +dport_map_port_63=52 +dport_map_port_64=53 +dport_map_port_65=54 +dport_map_port_66=55 +dport_map_port_67=56 +dport_map_port_68=57 +dport_map_port_69=58 +dport_map_port_70=59 +dport_map_port_71=60 +dport_map_port_72=61 +dport_map_port_73=62 +dport_map_port_74=63 +dport_map_port_75=64 +dport_map_port_80=65 +dport_map_port_81=66 +dport_map_port_82=67 +dport_map_port_83=68 +dport_map_port_84=69 +dport_map_port_85=70 +dport_map_port_86=71 +dport_map_port_87=72 +dport_map_port_88=73 +dport_map_port_89=74 +dport_map_port_90=75 +dport_map_port_91=76 +dport_map_port_92=77 +dport_map_port_93=78 +dport_map_port_94=79 +dport_map_port_95=80 +dport_map_port_100=81 +dport_map_port_101=82 +dport_map_port_102=83 +dport_map_port_103=84 +dport_map_port_104=85 +dport_map_port_105=86 +dport_map_port_106=87 +dport_map_port_107=88 +dport_map_port_108=89 +dport_map_port_109=90 +dport_map_port_110=91 +dport_map_port_111=92 +dport_map_port_112=93 +dport_map_port_113=94 +dport_map_port_114=95 +dport_map_port_115=96 +dport_map_port_120=97 +dport_map_port_121=98 +dport_map_port_122=99 +dport_map_port_123=100 +dport_map_port_124=101 +dport_map_port_125=102 +dport_map_port_126=103 +dport_map_port_127=104 +dport_map_port_128=105 +dport_map_port_129=106 +dport_map_port_130=107 +dport_map_port_131=108 +dport_map_port_132=109 +dport_map_port_133=110 +dport_map_port_134=111 +dport_map_port_135=112 +dport_map_port_140=113 +dport_map_port_141=114 +dport_map_port_142=115 +dport_map_port_143=116 +dport_map_port_144=117 +dport_map_port_145=118 +dport_map_port_146=119 +dport_map_port_147=120 +dport_map_port_148=121 +dport_map_port_149=122 +dport_map_port_150=123 +dport_map_port_151=124 +dport_map_port_152=125 +dport_map_port_153=126 +dport_map_port_154=127 +dport_map_port_155=128 + +dport_map_port_118=129 +dport_map_port_38=130 + +#firmware load, use fast load +#load_firmware=0x2 + +core_clock_frequency=1325 +dpr_clock_frequency=1000 +device_clock_frequency=1325 +port_flex_enable=1 + +#RDMA +sai_pfc_defaults_disable=1 +sai_optimized_mmu=1 diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu.cint b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu.cint new file mode 100644 index 000000000000..e286d3cf42a6 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu.cint @@ -0,0 +1,85 @@ +cint_reset(); + +int cint_field_group_create(int unit, bcm_field_group_t grp) +{ + int rv; + + bcm_field_qset_t qset; + bcm_field_aset_t aset; + + BCM_FIELD_QSET_INIT(qset); + BCM_FIELD_QSET_ADD(qset,bcmFieldQualifyDstMac); + BCM_FIELD_QSET_ADD(qset, bcmFieldQualifyStageIngress); + + BCM_FIELD_ASET_INIT(aset); + BCM_FIELD_ASET_ADD(aset, bcmFieldActionCopyToCpu); + + rv = bcm_field_group_create_mode_id(unit, qset, 103, bcmFieldGroupModeAuto, grp); + if (rv != BCM_E_NONE) { + printf("bcm_field_group_create_mode_id failed, rv = %d\r\n", rv); + return -1; + } + printf("cint_field_group_create success!!!, rv = %d\r\n", rv); + + bcm_field_group_dump(unit,grp); + return 0; +} + +int cint_field_entry_create1(int unit, bcm_field_group_t grp,bcm_field_entry_t entry) +{ + int rv; + bcm_mac_t dst_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + bcm_mac_t mac_mask = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + + rv = bcm_field_entry_create_id(unit, grp, entry); + if (rv != BCM_E_NONE) { + printf("bcm_field_entry_create_id failed, rv = %d\r\n", rv); + return -1; + } + + + rv =bcm_field_qualify_DstMac(unit, entry, dst_mac, mac_mask); + if (rv != BCM_E_NONE) { + printf("bcm_field_qualify_DstMac failed,ret = %d\r\n", rv); + bcm_field_entry_destroy(unit, entry); + return -1; + } + + rv = bcm_field_action_add(unit, entry, bcmFieldActionCopyToCpu, 1, 0); + if (rv != BCM_E_NONE) { + printf("bcm_field_action_add failed, rv = %d \r\n", rv); + bcm_field_entry_destroy(unit, entry); + return -1; + } + + rv = bcm_field_action_add(unit, entry, bcmFieldActionDrop, 1, 0); + if (rv != BCM_E_NONE) { + printf("bcm_field_action_add failed, rv = %d \r\n", rv); + bcm_field_entry_destroy(unit, entry); + return -1; + } + + rv = bcm_field_entry_install(unit, entry); + if (rv != BCM_E_NONE) { + printf("bcm_field_entry_install failed,ret = %d\r\n", rv); + bcm_field_entry_destroy(unit, entry); + return -1; + } + + printf("********************* BEGIN ****************************\r\n"); + bcm_field_entry_dump(unit, entry); + printf("*********************** END ****************************\r\n"); + + return 0; +} + +cint_field_group_create(0,5); +cint_field_entry_create1(0,5,2048); + +//bcm_field_entry_destroy(0, 2048); +//bcm_field_group_destroy(0, 5); + + + + + diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu_destroy.cint b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu_destroy.cint new file mode 100644 index 000000000000..33c8b64b83d2 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cpu_destroy.cint @@ -0,0 +1,2 @@ +bcm_field_entry_destroy(0, 2048); +bcm_field_group_destroy(0, 5); \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cust_fru.py b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cust_fru.py new file mode 100644 index 000000000000..940c722ce467 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/cust_fru.py @@ -0,0 +1,135 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import os + + +class CustFruException(Exception): + def __init__(self, message='custfrueerror', code=-100): + err = 'errcode: {0} message:{1}'.format(code, message) + Exception.__init__(self, err) + self.code = code + self.message = message + + +class CustFru(): + MAGIC_HEAD_INFO = 0x7a + + _CUST_MAGIC_OFFSET = 0 + _CUST_MAGIC_LEN = 1 + _CUST_VERSION_OFFSET = 1 + _CUST_VERSION_LEN = 6 + _CUST_CRC_OFFSET = 7 + _CUST_CRC_LEN = 1 + _CUST_PRODUCT_NAME_OFFSET = 10 + _CUST_PRODUCT_NAME_LEN = 17 + _CUST_MANUFACTURER_OFFSET = 27 + _CUST_MANUFACTURER_LEN = 7 + _CUST_SERIAL_NUMBER_OFFSET = 34 + _CUST_SERIAL_NUMBER_LEN = 25 + _CUST_INPUT_TYPE_OFFSET = 78 + _CUST_INPUT_TYPE_LEN = 2 + _CUST_INPUT_OFFSET = 86 + _CUST_INPUT_LEN = 15 + _CUST_OUTPUT_OFFSET = 108 + _CUST_OUTPUT_LEN = 11 + _CUST_POWER_OFFSET = 200 + _CUST_POWER_LEN = 10 + _CUST_MANUFACTURER_DATE_OFFSET = 210 + _CUST_MANUFACTURER_DATE_LEN = 3 + + def __init__(self): + self.magic = "" + self.version = "" + self.crc = "" + self.product_name = "" + self.manufacturer = "" + self.serial_number = "" + self.input_type = "" + self.input = "" + self.output = "" + self.power = "" + self.manufacturer_date = "" + + def checksum(self, v): + result = 0 + for item in v: + result += ord(item) + return (result & 0xff) + + def decode(self, e2): + # header + e2_index = 0 + head = ord(e2[0]) + if head != self.MAGIC_HEAD_INFO: + raise CustFruException("Customization fru eeprom head info error, head:0x%x" % head, -10) + self.magic = "0x%02x" % self.MAGIC_HEAD_INFO + + # version + version = "%s" % (e2[self._CUST_VERSION_OFFSET:self._CUST_VERSION_OFFSET + self._CUST_VERSION_LEN]) + self.version = version.replace("\xff", "").strip() + + # crc + crc_calc = self.checksum(e2[0:self._CUST_CRC_OFFSET]) + if crc_calc != ord(e2[self._CUST_CRC_OFFSET]): + raise CustFruException("Customization fru eeprom crc check error, calc: 0x%x, read: 0x%x" % (crc_calc, ord(e2[self._CUST_CRC_OFFSET])), -10) + self.crc = crc_calc + + # Product Name + product_name = "%s" % (e2[self._CUST_PRODUCT_NAME_OFFSET:self._CUST_PRODUCT_NAME_OFFSET + self._CUST_PRODUCT_NAME_LEN]) + self.product_name = product_name.replace("\xff", "").strip() + + # manufacturer + manufacturer = "%s" % (e2[self._CUST_MANUFACTURER_OFFSET:self._CUST_MANUFACTURER_OFFSET + self._CUST_MANUFACTURER_LEN]) + self.manufacturer = manufacturer.strip() + + # serial_number + serial_number = "%s" % (e2[self._CUST_SERIAL_NUMBER_OFFSET:self._CUST_SERIAL_NUMBER_OFFSET + self._CUST_SERIAL_NUMBER_LEN]) + self.serial_number = serial_number.strip() + + # input_type + input_type = "%s" % (e2[self._CUST_INPUT_TYPE_OFFSET:self._CUST_INPUT_TYPE_OFFSET + self._CUST_INPUT_TYPE_LEN]) + self.input_type = input_type.strip() + + # input + input = "%s" % (e2[self._CUST_INPUT_OFFSET:self._CUST_INPUT_OFFSET + self._CUST_INPUT_LEN]) + self.input = input.strip() + + # output + output = "%s" % (e2[self._CUST_OUTPUT_OFFSET:self._CUST_OUTPUT_OFFSET + self._CUST_OUTPUT_LEN]) + self.output = output.strip() + + # power + power = "%s" % (e2[self._CUST_POWER_OFFSET:self._CUST_POWER_OFFSET + self._CUST_POWER_LEN]) + self.power = power.replace("\xff", "").strip() + + # manufacturer_date + manufacturer_year = ord(e2[self._CUST_MANUFACTURER_DATE_OFFSET]) + 2000 + manufacturer_month = ord(e2[self._CUST_MANUFACTURER_DATE_OFFSET + 1]) + manufacturer_day = ord(e2[self._CUST_MANUFACTURER_DATE_OFFSET + 2]) + self.manufacturer_date = "%04d-%02d-%02d" % (manufacturer_year, manufacturer_month, manufacturer_day) + + return + + + def __str__(self): + formatstr = "Version : %s \n" \ + "Product Name : %s \n" \ + "Manufacturer : %s \n" \ + "Serial Number : %s \n" \ + "AC/DC Power Module : %s \n" \ + "INPUT : %s \n" \ + "OUTPUT : %s \n" \ + "POWER : %s \n" \ + "Manufacturer Date : %s \n" + str_tmp = formatstr % (self.version, + self.product_name, + self.manufacturer, + self.serial_number, + self.input_type, + self.input, + self.output, + self.power, + self.manufacturer_date) + return str_tmp.replace("\x00","") + diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/custom_led.bin b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/custom_led.bin new file mode 100644 index 000000000000..ef5163140274 Binary files /dev/null and b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/custom_led.bin differ diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/default_sku b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/default_sku new file mode 100644 index 000000000000..b756112ae670 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/default_sku @@ -0,0 +1 @@ +M2-W6920-32QC2X l2 diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev.xml b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev.xml new file mode 100644 index 000000000000..665fb3342357 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev.xml @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev_exhaust.xml b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev_exhaust.xml new file mode 100644 index 000000000000..2a4708da7a92 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/dev_exhaust.xml @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/fru.py b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/fru.py new file mode 100644 index 000000000000..f95164e03601 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/fru.py @@ -0,0 +1,961 @@ +#!/usr/bin/python3 +import collections +from datetime import datetime, timedelta +from bitarray import bitarray + + +__DEBUG__ = "N" + + +class FruException(Exception): + def __init__(self, message='fruerror', code=-100): + err = 'errcode: {0} message:{1}'.format(code, message) + Exception.__init__(self, err) + self.code = code + self.message = message + + +def e_print(err): + print("ERROR: " + err) + + +def d_print(debug_info): + if __DEBUG__ == "Y": + print(debug_info) + + +class FruUtil(): + @staticmethod + def decodeLength(value): + a = bitarray(8) + a.setall(True) + a[0:1] = 0 + a[1:2] = 0 + x = ord(a.tobytes()) + return x & ord(value) + + @staticmethod + def minToData(): + starttime = datetime(1996, 1, 1, 0, 0, 0) + endtime = datetime.now() + seconds = (endtime - starttime).total_seconds() + mins = seconds // 60 + m = int(round(mins)) + return m + + @staticmethod + def getTimeFormat(): + return datetime.now().strftime('%Y-%m-%d') + + @staticmethod + def getTypeLength(value): + if value is None or len(value) == 0: + return 0 + a = bitarray(8) + a.setall(False) + a[0:1] = 1 + a[1:2] = 1 + x = ord(a.tobytes()) + return x | len(value) + + @staticmethod + def checksum(b): + result = 0 + for item in b: + result += ord(item) + return (0x100 - (result & 0xff)) & 0xff + + +class BaseArea(object): + SUGGESTED_SIZE_COMMON_HEADER = 8 + SUGGESTED_SIZE_INTERNAL_USE_AREA = 72 + SUGGESTED_SIZE_CHASSIS_INFO_AREA = 32 + SUGGESTED_SIZE_BOARD_INFO_AREA = 80 + SUGGESTED_SIZE_PRODUCT_INFO_AREA = 80 + + INITVALUE = b'\x00' + resultvalue = INITVALUE * 256 + COMMON_HEAD_VERSION = b'\x01' + __childList = None + + def __init__(self, name="", size=0, offset=0): + self.__childList = [] + self._offset = offset + self.name = name + self._size = size + self._isPresent = False + self._data = b'\x00' * size + + @property + def childList(self): + return self.__childList + + @childList.setter + def childList(self, value): + self.__childList = value + + @property + def offset(self): + return self._offset + + @offset.setter + def offset(self, value): + self._offset = value + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + self._size = value + + @property + def data(self): + return self._data + + @data.setter + def data(self, value): + self._data = value + + @property + def isPresent(self): + return self._isPresent + + @isPresent.setter + def isPresent(self, value): + self._isPresent = value + + +class InternalUseArea(BaseArea): + pass + + +class ChassisInfoArea(BaseArea): + pass + + +class BoardInfoArea(BaseArea): + _boardTime = None + _fields = None + _mfg_date = None + areaversion = None + _boardversion = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "mfg_date : %s \n" \ + "boardManufacturer : %s \n" \ + "boardProductName : %s \n" \ + "boardSerialNumber : %s \n" \ + "boardPartNumber : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.boardversion), self.size, + self.language, self.getMfgRealData(), + self.boardManufacturer, self.boardProductName, + self.boardSerialNumber, self.boardPartNumber, + self.fruFileId) + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "boardextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["boardversion"] = ord(self.boardversion) + dic["boardlength"] = self.size + dic["boardlanguage"] = self.language + dic["boardmfg_date"] = self.getMfgRealData() + dic["boardManufacturer"] = self.boardManufacturer + dic["boardProductName"] = self.boardProductName + dic["boardSerialNumber"] = self.boardSerialNumber + dic["boardPartNumber"] = self.boardPartNumber + dic["boardfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] + index += 1 + d_print("decode length :%d class size:%d" % + ((ord(self.data[index]) * 8), self.size)) + index += 2 + + timetmp = self.data[index: index + 3] + self.mfg_date = ord(timetmp[0]) | ( + ord(timetmp[1]) << 8) | (ord(timetmp[2]) << 16) + d_print("decode getMfgRealData :%s" % self.getMfgRealData()) + index += 3 + + templen = FruUtil.decodeLength(self.data[index]) + self.boardManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardManufacturer:%s" % self.boardManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardProductName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardProductName:%s" % self.boardProductName) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardSerialNumber:%s" % self.boardSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardPartNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardPartNumber:%s" % self.boardPartNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if self.data[index] != chr(0xc1): + templen = FruUtil.decodeLength(self.data[index]) + tmpval = self.data[index + 1: index + templen + 1] + setattr(self, valtmp, tmpval) + index += templen + 1 + d_print("decode boardextra%d:%s" % (i, tmpval)) + else: + break + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("boardInfoArea version:%x" % ord(self.boardversion)) + d_print("boardInfoArea length:%d" % self.size) + d_print("boardInfoArea language:%x" % self.language) + self.mfg_date = FruUtil.minToData() + d_print("boardInfoArea mfg_date:%x" % self.mfg_date) + + self.data = chr(ord(self.boardversion)) + \ + chr(self.size // 8) + chr(self.language) + + self.data += chr(self.mfg_date & 0xFF) + self.data += chr((self.mfg_date >> 8) & 0xFF) + self.data += chr((self.mfg_date >> 16) & 0xFF) + + d_print("boardInfoArea boardManufacturer:%s" % self.boardManufacturer) + typelength = FruUtil.getTypeLength(self.boardManufacturer) + self.data += chr(typelength) + self.data += self.boardManufacturer + + d_print("boardInfoArea boardProductName:%s" % self.boardProductName) + self.data += chr(FruUtil.getTypeLength(self.boardProductName)) + self.data += self.boardProductName + + d_print("boardInfoArea boardSerialNumber:%s" % self.boardSerialNumber) + self.data += chr(FruUtil.getTypeLength(self.boardSerialNumber)) + self.data += self.boardSerialNumber + + d_print("boardInfoArea boardPartNumber:%s" % self.boardPartNumber) + self.data += chr(FruUtil.getTypeLength(self.boardPartNumber)) + self.data += self.boardPartNumber + + d_print("boardInfoArea fruFileId:%s" % self.fruFileId) + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea boardextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + d_print("self data:%d" % len(self.data)) + d_print("self size:%d" % self.size) + d_print("adjust size:%d" % (self.size - len(self.data) - 1)) + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + + # checksum + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + def getMfgRealData(self): + starttime = datetime(1996, 1, 1, 0, 0, 0) + mactime = starttime + timedelta(minutes=self.mfg_date) + return mactime + + @property + def language(self): + self._language = 25 + return self._language + + @property + def mfg_date(self): + return self._mfg_date + + @mfg_date.setter + def mfg_date(self, val): + self._mfg_date = val + + @property + def boardversion(self): + self._boardversion = self.COMMON_HEAD_VERSION + return self._boardversion + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, val): + self._FRUFileID = val + + @property + def boardPartNumber(self): + return self._boardPartNumber + + @boardPartNumber.setter + def boardPartNumber(self, val): + self._boardPartNumber = val + + @property + def boardSerialNumber(self): + return self._boardSerialNumber + + @boardSerialNumber.setter + def boardSerialNumber(self, val): + self._boardSerialNumber = val + + @property + def boardProductName(self): + return self._boradProductName + + @boardProductName.setter + def boardProductName(self, val): + self._boradProductName = val + + @property + def boardManufacturer(self): + return self._boardManufacturer + + @boardManufacturer.setter + def boardManufacturer(self, val): + self._boardManufacturer = val + + @property + def boardTime(self): + return self._boardTime + + @boardTime.setter + def boardTime(self, val): + self._boardTime = val + + @property + def fields(self): + return self._fields + + @fields.setter + def fields(self, val): + self._fields = val + + +class ProductInfoArea(BaseArea): + _productManufacturer = None + _productAssetTag = None + _FRUFileID = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "productManufacturer : %s \n" \ + "productName : %s \n" \ + "productPartModelName: %s \n" \ + "productVersion : %s \n" \ + "productSerialNumber : %s \n" \ + "productAssetTag : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.areaversion), self.size, + self.language, self.productManufacturer, + self.productName, self.productPartModelName, + self.productVersion, self.productSerialNumber, + self.productAssetTag, self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "productextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["productversion"] = ord(self.areaversion) + dic["productlength"] = self.size + dic["productlanguage"] = self.language + dic["productManufacturer"] = self.productManufacturer + dic["productName"] = self.productName + dic["productPartModelName"] = self.productPartModelName + dic["productVersion"] = int(self.productVersion, 16) + dic["productSerialNumber"] = self.productSerialNumber + dic["productAssetTag"] = self.productAssetTag + dic["productfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] # 0 + index += 1 + d_print("decode length %d" % (ord(self.data[index]) * 8)) + d_print("class size %d" % self.size) + index += 2 + + templen = FruUtil.decodeLength(self.data[index]) + self.productManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productManufacturer:%s" % self.productManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.productName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productName:%s" % self.productName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productPartModelName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productPartModelName:%s" % self.productPartModelName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productVersion = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productVersion:%s" % self.productVersion) + + templen = FruUtil.decodeLength(self.data[index]) + self.productSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productSerialNumber:%s" % self.productSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.productAssetTag = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productAssetTag:%s" % self.productAssetTag) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if self.data[index] != chr(0xc1) and index < self.size - 1: + templen = FruUtil.decodeLength(self.data[index]) + if templen == 0: + break + tmpval = self.data[index + 1: index + templen + 1] + d_print("decode boardextra%d:%s" % (i, tmpval)) + setattr(self, valtmp, tmpval) + index += templen + 1 + else: + break + + @property + def productVersion(self): + return self._productVersion + + @productVersion.setter + def productVersion(self, name): + self._productVersion = name + + @property + def areaversion(self): + self._areaversion = self.COMMON_HEAD_VERSION + return self._areaversion + + @areaversion.setter + def areaversion(self, name): + self._areaversion = name + + @property + def language(self): + self._language = 25 + return self._language + + @property + def productManufacturer(self): + return self._productManufacturer + + @productManufacturer.setter + def productManufacturer(self, name): + self._productManufacturer = name + + @property + def productName(self): + return self._productName + + @productName.setter + def productName(self, name): + self._productName = name + + @property + def productPartModelName(self): + return self._productPartModelName + + @productPartModelName.setter + def productPartModelName(self, name): + self._productPartModelName = name + + @property + def productSerialNumber(self): + return self._productSerialNumber + + @productSerialNumber.setter + def productSerialNumber(self, name): + self._productSerialNumber = name + + @property + def productAssetTag(self): + return self._productAssetTag + + @productAssetTag.setter + def productAssetTag(self, name): + self._productAssetTag = name + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, name): + self._FRUFileID = name + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("product version:%x" % ord(self.areaversion)) + d_print("product length:%d" % self.size) + d_print("product language:%x" % self.language) + self.data = chr(ord(self.areaversion)) + \ + chr(self.size // 8) + chr(self.language) + + typelength = FruUtil.getTypeLength(self.productManufacturer) + self.data += chr(typelength) + self.data += self.productManufacturer + + self.data += chr(FruUtil.getTypeLength(self.productName)) + self.data += self.productName + + self.data += chr(FruUtil.getTypeLength(self.productPartModelName)) + self.data += self.productPartModelName + + self.data += chr(FruUtil.getTypeLength(self.productVersion)) + self.data += self.productVersion + + self.data += chr(FruUtil.getTypeLength(self.productSerialNumber)) + self.data += self.productSerialNumber + + self.data += chr(FruUtil.getTypeLength(self.productAssetTag)) + if self.productAssetTag is not None: + self.data += self.productAssetTag + + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea productextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + d_print("self.data:%d" % len(self.data)) + d_print("self.size:%d" % self.size) + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + +class MultiRecordArea(BaseArea): + pass + + +class Field(object): + + def __init__(self, fieldType="ASCII", fieldData=""): + self.fieldData = fieldData + self.fieldType = fieldType + + @property + def fieldType(self): + return self.fieldType + + @property + def fieldData(self): + return self.fieldData + + +class ipmifru(BaseArea): + _BoardInfoArea = None + _ProductInfoArea = None + _InternalUseArea = None + _ChassisInfoArea = None + _multiRecordArea = None + _productinfoAreaOffset = BaseArea.INITVALUE + _boardInfoAreaOffset = BaseArea.INITVALUE + _internalUserAreaOffset = BaseArea.INITVALUE + _chassicInfoAreaOffset = BaseArea.INITVALUE + _multiRecordAreaOffset = BaseArea.INITVALUE + _bindata = None + _bodybin = None + _version = BaseArea.COMMON_HEAD_VERSION + _zeroCheckSum = None + _frusize = 256 + + def __str__(self): + tmpstr = "" + if self.boardInfoArea.isPresent: + tmpstr += "\nboardinfoarea: \n" + tmpstr += self.boardInfoArea.__str__() + if self.productInfoArea.isPresent: + tmpstr += "\nproductinfoarea: \n" + tmpstr += self.productInfoArea.__str__() + return tmpstr + + def decodeBin(self, eeprom): + commonHead = eeprom[0:8] + d_print("decode version %x" % ord(commonHead[0])) + if ord(self.COMMON_HEAD_VERSION) != ord(commonHead[0]): + raise FruException("HEAD VERSION error,not Fru format!", -10) + if FruUtil.checksum(commonHead[0:7]) != ord(commonHead[7]): + strtemp = "check header checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(commonHead[0:7]), ord(commonHead[7])) + raise FruException(strtemp, -3) + if ord(commonHead[1]) != ord(self.INITVALUE): + d_print("Internal Use Area is present") + self.internalUseArea = InternalUseArea( + name="Internal Use Area", size=self.SUGGESTED_SIZE_INTERNAL_USE_AREA) + self.internalUseArea.isPresent = True + self.internalUserAreaOffset = ord(commonHead[1]) + self.internalUseArea.data = eeprom[self.internalUserAreaOffset * 8: ( + self.internalUserAreaOffset * 8 + self.internalUseArea.size)] + if ord(commonHead[2]) != ord(self.INITVALUE): + d_print("Chassis Info Area is present") + self.chassisInfoArea = ChassisInfoArea( + name="Chassis Info Area", size=self.SUGGESTED_SIZE_CHASSIS_INFO_AREA) + self.chassisInfoArea.isPresent = True + self.chassicInfoAreaOffset = ord(commonHead[2]) + self.chassisInfoArea.data = eeprom[self.chassicInfoAreaOffset * 8: ( + self.chassicInfoAreaOffset * 8 + self.chassisInfoArea.size)] + if ord(commonHead[3]) != ord(self.INITVALUE): + self.boardInfoArea = BoardInfoArea( + name="Board Info Area", size=self.SUGGESTED_SIZE_BOARD_INFO_AREA) + self.boardInfoArea.isPresent = True + self.boardInfoAreaOffset = ord(commonHead[3]) + self.boardInfoArea.size = ord( + eeprom[self.boardInfoAreaOffset * 8 + 1]) * 8 + d_print("Board Info Area is present size:%d" % + (self.boardInfoArea.size)) + self.boardInfoArea.data = eeprom[self.boardInfoAreaOffset * 8: ( + self.boardInfoAreaOffset * 8 + self.boardInfoArea.size)] + if FruUtil.checksum(self.boardInfoArea.data[:-1]) != ord(self.boardInfoArea.data[-1:]): + strtmp = "check boardInfoArea checksum error[cal:%02x data:%02x]" % \ + (FruUtil.checksum( + self.boardInfoArea.data[:-1]), ord(self.boardInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.boardInfoArea.decodedata() + if ord(commonHead[4]) != ord(self.INITVALUE): + d_print("Product Info Area is present") + self.productInfoArea = ProductInfoArea( + name="Product Info Area ", size=self.SUGGESTED_SIZE_PRODUCT_INFO_AREA) + self.productInfoArea.isPresent = True + self.productinfoAreaOffset = ord(commonHead[4]) + d_print("length offset value: %02x" % + ord(eeprom[self.productinfoAreaOffset * 8 + 1])) + self.productInfoArea.size = ord( + eeprom[self.productinfoAreaOffset * 8 + 1]) * 8 + d_print("Product Info Area is present size:%d" % + (self.productInfoArea.size)) + + self.productInfoArea.data = eeprom[self.productinfoAreaOffset * 8: ( + self.productinfoAreaOffset * 8 + self.productInfoArea.size)] + if FruUtil.checksum(self.productInfoArea.data[:-1]) != ord(self.productInfoArea.data[-1:]): + strtmp = "check productInfoArea checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(self.productInfoArea.data[:-1]), ord(self.productInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.productInfoArea.decodedata() + if ord(commonHead[5]) != ord(self.INITVALUE): + self.multiRecordArea = MultiRecordArea( + name="MultiRecord record Area ") + d_print("MultiRecord record present") + self.multiRecordArea.isPresent = True + self.multiRecordAreaOffset = ord(commonHead[5]) + self.multiRecordArea.data = eeprom[self.multiRecordAreaOffset * 8: ( + self.multiRecordAreaOffset * 8 + self.multiRecordArea.size)] + + def initDefault(self): + self.version = self.COMMON_HEAD_VERSION + self.internalUserAreaOffset = self.INITVALUE + self.chassicInfoAreaOffset = self.INITVALUE + self.boardInfoAreaOffset = self.INITVALUE + self.productinfoAreaOffset = self.INITVALUE + self.multiRecordAreaOffset = self.INITVALUE + self.zeroCheckSum = self.INITVALUE + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + self.productInfoArea = None + self.internalUseArea = None + self.boardInfoArea = None + self.chassisInfoArea = None + self.multiRecordArea = None + # self.recalcute() + + @property + def version(self): + return self._version + + @version.setter + def version(self, name): + self._version = name + + @property + def internalUserAreaOffset(self): + return self._internalUserAreaOffset + + @internalUserAreaOffset.setter + def internalUserAreaOffset(self, obj): + self._internalUserAreaOffset = obj + + @property + def chassicInfoAreaOffset(self): + return self._chassicInfoAreaOffset + + @chassicInfoAreaOffset.setter + def chassicInfoAreaOffset(self, obj): + self._chassicInfoAreaOffset = obj + + @property + def productinfoAreaOffset(self): + return self._productinfoAreaOffset + + @productinfoAreaOffset.setter + def productinfoAreaOffset(self, obj): + self._productinfoAreaOffset = obj + + @property + def boardInfoAreaOffset(self): + return self._boardInfoAreaOffset + + @boardInfoAreaOffset.setter + def boardInfoAreaOffset(self, obj): + self._boardInfoAreaOffset = obj + + @property + def multiRecordAreaOffset(self): + return self._multiRecordAreaOffset + + @multiRecordAreaOffset.setter + def multiRecordAreaOffset(self, obj): + self._multiRecordAreaOffset = obj + + @property + def zeroCheckSum(self): + return self._zeroCheckSum + + @zeroCheckSum.setter + def zeroCheckSum(self, obj): + self._zeroCheckSum = obj + + @property + def productInfoArea(self): + return self._ProductInfoArea + + @productInfoArea.setter + def productInfoArea(self, obj): + self._ProductInfoArea = obj + + @property + def internalUseArea(self): + return self._InternalUseArea + + @internalUseArea.setter + def internalUseArea(self, obj): + self.internalUseArea = obj + + @property + def boardInfoArea(self): + return self._BoardInfoArea + + @boardInfoArea.setter + def boardInfoArea(self, obj): + self._BoardInfoArea = obj + + @property + def chassisInfoArea(self): + return self._ChassisInfoArea + + @chassisInfoArea.setter + def chassisInfoArea(self, obj): + self._ChassisInfoArea = obj + + @property + def multiRecordArea(self): + return self._multiRecordArea + + @multiRecordArea.setter + def multiRecordArea(self, obj): + self._multiRecordArea = obj + + @property + def bindata(self): + return self._bindata + + @bindata.setter + def bindata(self, obj): + self._bindata = obj + + @property + def bodybin(self): + return self._bodybin + + @bodybin.setter + def bodybin(self, obj): + self._bodybin = obj + + def recalcuteCommonHead(self): + self.bindata = "" + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + d_print("common Header %d" % self.offset) + d_print("fru eeprom size %d" % self._frusize) + if self.internalUseArea is not None and self.internalUseArea.isPresent: + self.internalUserAreaOffset = self.offset // 8 + self.offset += self.internalUseArea.size + d_print("internalUseArea is present offset:%d" % self.offset) + + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + self.chassicInfoAreaOffset = self.offset // 8 + self.offset += self.chassisInfoArea.size + d_print("chassisInfoArea is present offset:%d" % self.offset) + + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + self.boardInfoAreaOffset = self.offset // 8 + self.offset += self.boardInfoArea.size + d_print("boardInfoArea is present offset:%d" % self.offset) + d_print("boardInfoArea is present size:%d" % + self.boardInfoArea.size) + + if self.productInfoArea is not None and self.productInfoArea.isPresent: + self.productinfoAreaOffset = self.offset // 8 + self.offset += self.productInfoArea.size + d_print("productInfoArea is present offset:%d" % self.offset) + + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + self.multiRecordAreaOffset = self.offset // 8 + d_print("multiRecordArea is present offset:%d" % self.offset) + + if self.internalUserAreaOffset == self.INITVALUE: + self.internalUserAreaOffset = 0 + if self.productinfoAreaOffset == self.INITVALUE: + self.productinfoAreaOffset = 0 + if self.chassicInfoAreaOffset == self.INITVALUE: + self.chassicInfoAreaOffset = 0 + if self.boardInfoAreaOffset == self.INITVALUE: + self.boardInfoAreaOffset = 0 + if self.multiRecordAreaOffset == self.INITVALUE: + self.multiRecordAreaOffset = 0 + + self.zeroCheckSum = (0x100 - ord(self.version) - self.internalUserAreaOffset - self.chassicInfoAreaOffset - self.productinfoAreaOffset + - self.boardInfoAreaOffset - self.multiRecordAreaOffset) & 0xff + d_print("zerochecksum:%x" % self.zeroCheckSum) + self.data = "" + self.data += chr(self.version[0]) + chr(self.internalUserAreaOffset) + chr(self.chassicInfoAreaOffset) + chr( + self.boardInfoAreaOffset) + chr(self.productinfoAreaOffset) + chr(self.multiRecordAreaOffset) + chr(self.INITVALUE[0]) + chr(self.zeroCheckSum) + + self.bindata = self.data + self.bodybin + totallen = len(self.bindata) + d_print("totallen %d" % totallen) + if totallen < self._frusize: + self.bindata = self.bindata.ljust(self._frusize, chr(self.INITVALUE[0])) + else: + raise FruException('bin data more than %d' % self._frusize, -2) + + def recalcutebin(self): + self.bodybin = "" + if self.internalUseArea is not None and self.internalUseArea.isPresent: + d_print("internalUseArea present") + self.bodybin += self.internalUseArea.data + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + d_print("chassisInfoArea present") + self.bodybin += self.chassisInfoArea.data + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + d_print("boardInfoArea present") + self.boardInfoArea.recalcute() + self.bodybin += self.boardInfoArea.data + if self.productInfoArea is not None and self.productInfoArea.isPresent: + d_print("productInfoAreapresent") + self.productInfoArea.recalcute() + self.bodybin += self.productInfoArea.data + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + d_print("multiRecordArea present") + self.bodybin += self.productInfoArea.data + + def recalcute(self, fru_eeprom_size=256): + self._frusize = fru_eeprom_size + self.recalcutebin() + self.recalcuteCommonHead() + + def setValue(self, area, field, value): + tmp_area = getattr(self, area, None) + if tmp_area is not None: + tmp_area.fruSetValue(field, value) diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/installer.conf b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/installer.conf new file mode 100644 index 000000000000..60549859fca5 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/installer.conf @@ -0,0 +1,4 @@ +CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="intel_idle.max_cstate=0 idle=poll intel_iommu=on iommu=pt modprobe.blacklist=i2c_ismt,i2c_i801,r8169,r8168,intel_spi_pci,sdhci_pci" +CONSOLE_PORT=0xf060 +CONSOLE_DEV=0 \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/media_settings.json b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/media_settings.json new file mode 100644 index 000000000000..865acd01a595 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/media_settings.json @@ -0,0 +1,2078 @@ +{ + "PORT_MEDIA_SETTINGS": { + "32": { + "Default": { + "pre1": { + "lane0": "0x00000000" + }, + "main": { + "lane0": "0x00000030" + }, + "post1": { + "lane0": "0x00000005" + } + } + }, + "33": { + "Default": { + "pre1": { + "lane0": "0x00000000" + }, + "main": { + "lane0": "0x00000034" + }, + "post1": { + "lane0": "0x00000008" + } + } + }, + "0": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "1": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x00000078", + "lane2": "0x0000008C", + "lane3": "0x00000088", + "lane4": "0x0000008C", + "lane5": "0x00000084", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "2": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xffffffe8", + "lane1": "0xffffffe8", + "lane2": "0xffffffe8", + "lane3": "0xffffffe8", + "lane4": "0xffffffe8", + "lane5": "0xffffffe8", + "lane6": "0xffffffe8", + "lane7": "0xffffffe8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "3": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000084", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "4": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "5": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000078", + "lane4": "0x00000074", + "lane5": "0x00000078", + "lane6": "0x00000088", + "lane7": "0x0000007C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "6": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x0000008C", + "lane2": "0x00000078", + "lane3": "0x00000074", + "lane4": "0x0000007C", + "lane5": "0x0000007C", + "lane6": "0x0000007C", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "7": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "8": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000078", + "lane4": "0x00000078", + "lane5": "0x00000074", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "9": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000078", + "lane4": "0x00000078", + "lane5": "0x00000078", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "10": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x0000007C", + "lane2": "0x0000007C", + "lane3": "0x00000078", + "lane4": "0x00000078", + "lane5": "0x0000007C", + "lane6": "0x0000007C", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "11": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000078", + "lane4": "0x0000007C", + "lane5": "0x0000007C", + "lane6": "0x0000007C", + "lane7": "0x00000074" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "12": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff8", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x0000007C", + "lane2": "0x00000088", + "lane3": "0x0000007C", + "lane4": "0x00000078", + "lane5": "0x00000078", + "lane6": "0x00000080", + "lane7": "0x00000080" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff0", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "13": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000078", + "lane2": "0x00000080", + "lane3": "0x00000080", + "lane4": "0x0000007C", + "lane5": "0x00000074", + "lane6": "0x00000074", + "lane7": "0x0000007C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "14": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "15": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000074", + "lane1": "0x00000078", + "lane2": "0x00000084", + "lane3": "0x00000080", + "lane4": "0x00000084", + "lane5": "0x00000078", + "lane6": "0x00000078", + "lane7": "0x00000084" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "16": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000078", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "17": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x00000078", + "lane2": "0x0000007C", + "lane3": "0x0000007C", + "lane4": "0x00000078", + "lane5": "0x00000074", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "18": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x00000080", + "lane2": "0x00000078", + "lane3": "0x0000007C", + "lane4": "0x0000007C", + "lane5": "0x00000078", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "19": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000074", + "lane3": "0x00000084", + "lane4": "0x00000084", + "lane5": "0x00000078", + "lane6": "0x00000084", + "lane7": "0x00000084" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "20": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000074", + "lane4": "0x0000007C", + "lane5": "0x00000084", + "lane6": "0x00000084", + "lane7": "0x00000074" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "21": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000074", + "lane4": "0x00000078", + "lane5": "0x00000078", + "lane6": "0x00000078", + "lane7": "0x00000074" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "22": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x00000074", + "lane2": "0x0000007C", + "lane3": "0x00000078", + "lane4": "0x0000007C", + "lane5": "0x00000078", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "23": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000074", + "lane2": "0x0000007C", + "lane3": "0x00000078", + "lane4": "0x00000078", + "lane5": "0x00000074", + "lane6": "0x00000074", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "24": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x0000007C", + "lane2": "0x00000078", + "lane3": "0x00000074", + "lane4": "0x00000078", + "lane5": "0x00000074", + "lane6": "0x00000078", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "25": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000078", + "lane2": "0x00000078", + "lane3": "0x00000080", + "lane4": "0x00000078", + "lane5": "0x00000074", + "lane6": "0x0000007C", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "26": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000078", + "lane4": "0x00000074", + "lane5": "0x00000078", + "lane6": "0x00000088", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "27": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x0000007C", + "lane3": "0x00000074", + "lane4": "0x00000084", + "lane5": "0x0000007C", + "lane6": "0x0000008C", + "lane7": "0x00000084" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "28": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff8", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff0", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "29": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xffffffec", + "lane1": "0xffffffec", + "lane2": "0xffffffec", + "lane3": "0xffffffec", + "lane4": "0xffffffec", + "lane5": "0xffffffec", + "lane6": "0xffffffec", + "lane7": "0xffffffec" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "30": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000078", + "lane1": "0x00000074", + "lane2": "0x0000008C", + "lane3": "0x0000007C", + "lane4": "0x0000007C", + "lane5": "0x00000078", + "lane6": "0x00000090", + "lane7": "0x00000078" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "31": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000088", + "lane3": "0x00000084", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/monitor.py b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/monitor.py new file mode 100644 index 000000000000..37ed2168e611 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/monitor.py @@ -0,0 +1,457 @@ +#!/usr/bin/python3 +# * onboard temperature sensors +# * FAN trays +# * PSU +# +import os +import re +from lxml import etree as ET +import glob +import json +from decimal import Decimal +from fru import ipmifru +from cust_fru import CustFru + + +MAILBOX_DIR = "/sys/bus/i2c/devices/" +BOARD_ID_PATH = "/sys/module/platform_common/parameters/dfd_my_type" +BOARD_AIRFLOW_PATH = "/etc/sonic/.airflow" + + +CONFIG_NAME = "dev.xml" + + +def byteTostr(val): + strtmp = '' + for value in val: + strtmp += chr(value) + return strtmp + + +def typeTostr(val): + if isinstance(val, bytes): + strtmp = byteTostr(val) + return strtmp + return val + + +def get_board_id(): + if not os.path.exists(BOARD_ID_PATH): + return "NA" + with open(BOARD_ID_PATH) as fd: + id_str = fd.read().strip() + return "0x%x" % (int(id_str, 10)) + + +def getboardairflow(): + if not os.path.exists(BOARD_AIRFLOW_PATH): + return "NA" + with open(BOARD_AIRFLOW_PATH) as fd: + airflow_str = fd.read().strip() + data = json.loads(airflow_str) + airflow = data.get("board", "NA") + return airflow + + +boardid = get_board_id() +boardairflow = getboardairflow() + + +DEV_XML_FILE_LIST = [ + "dev_" + boardid + "_" + boardairflow + ".xml", + "dev_" + boardid + ".xml", + "dev_" + boardairflow + ".xml", +] + + +def dev_file_read(path, offset, read_len): + retval = "ERR" + val_list = [] + msg = "" + ret = "" + fd = -1 + + if not os.path.exists(path): + return False, "%s %s not found" % (retval, path) + + try: + fd = os.open(path, os.O_RDONLY) + os.lseek(fd, offset, os.SEEK_SET) + ret = os.read(fd, read_len) + for item in ret: + val_list.append(item) + except Exception as e: + msg = str(e) + return False, "%s %s" % (retval, msg) + finally: + if fd > 0: + os.close(fd) + return True, val_list + + +def getPMCreg(location): + retval = 'ERR' + if not os.path.isfile(location): + return "%s %s notfound" % (retval, location) + try: + with open(location, 'r') as fd: + retval = fd.read() + except Exception as error: + return "ERR %s" % str(error) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +# Get a mailbox register +def get_pmc_register(reg_name): + retval = 'ERR' + mb_reg_file = reg_name + filepath = glob.glob(mb_reg_file) + if len(filepath) == 0: + return "%s %s notfound" % (retval, mb_reg_file) + mb_reg_file = filepath[0] + if not os.path.isfile(mb_reg_file): + # print mb_reg_file, 'not found !' + return "%s %s notfound" % (retval, mb_reg_file) + try: + with open(mb_reg_file, 'rb') as fd: + retval = fd.read() + retval = typeTostr(retval) + except Exception as error: + retval = "%s %s read failed, msg: %s" % (retval, mb_reg_file, str(error)) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +class checktype(): + def __init__(self, test1): + self.test1 = test1 + + @staticmethod + def getValue(location, bit, data_type, coefficient=1, addend=0): + try: + value_t = get_pmc_register(location) + if value_t.startswith("ERR") or value_t.startswith("NA"): + return value_t + if data_type == 1: + return float('%.1f' % ((float(value_t) / 1000) + addend)) + if data_type == 2: + return float('%.1f' % (float(value_t) / 100)) + if data_type == 3: + psu_status = int(value_t, 16) + return (psu_status & (1 << bit)) >> bit + if data_type == 4: + return int(value_t, 10) + if data_type == 5: + return float('%.1f' % (float(value_t) / 1000 / 1000)) + if data_type == 6: + return Decimal(float(value_t) * coefficient / 1000).quantize(Decimal('0.000')) + return value_t + except Exception as e: + value_t = "ERR %s" % str(e) + return value_t + + # fanFRU + @staticmethod + def decodeBinByValue(retval): + fru = ipmifru() + fru.decodeBin(retval) + return fru + + @staticmethod + def getfruValue(prob_t, root, val): + try: + ret, binval_bytes = dev_file_read(val, 0, 256) + if ret is False: + return binval_bytes + binval = byteTostr(binval_bytes) + fanpro = {} + ret = checktype.decodeBinByValue(binval) + fanpro['fan_type'] = ret.productInfoArea.productName + fanpro['hw_version'] = ret.productInfoArea.productVersion + fanpro['sn'] = ret.productInfoArea.productSerialNumber + fan_display_name_dict = status.getDecodValue(root, "fan_display_name") + fan_name = fanpro['fan_type'].strip() + if len(fan_display_name_dict) == 0: + return fanpro + if fan_name not in fan_display_name_dict: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR fan name: %s not support" % fan_name) + else: + fanpro['fan_type'] = fan_display_name_dict[fan_name] + return fanpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getslotfruValue(val): + try: + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + slotpro = {} + ret = checktype.decodeBinByValue(binval) + slotpro['slot_type'] = ret.boardInfoArea.boardProductName + slotpro['hw_version'] = ret.boardInfoArea.boardextra1 + slotpro['sn'] = ret.boardInfoArea.boardSerialNumber + return slotpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getpsufruValue(prob_t, root, val): + try: + psu_match = False + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + psupro = {} + ret = checktype.decodeBinByValue(binval) + psupro['type1'] = ret.productInfoArea.productPartModelName + psupro['sn'] = ret.productInfoArea.productSerialNumber + psupro['hw_version'] = ret.productInfoArea.productVersion + psu_dict = status.getDecodValue(root, "psutype") + psupro['type1'] = psupro['type1'].strip() + if len(psu_dict) == 0: + return psupro + for psu_name, display_name in psu_dict.items(): + if psu_name.strip() == psupro['type1']: + psupro['type1'] = display_name + psu_match = True + break + if psu_match is not True: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % psupro['type1']) + return psupro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getpsucustfruValue(prob_t, root, val): + try: + psu_match = False + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + psupro = {} + custfru = CustFru() + custfru.decode(binval) + psupro['type1'] = custfru.product_name.strip() + psupro['sn'] = custfru.serial_number.strip().replace(chr(0), "") + psupro['hw_version'] = custfru.version.strip() + psu_dict = status.getDecodValue(root, "psutype") + psupro['type1'] = psupro['type1'].strip() + if len(psu_dict) == 0: + return psupro + for psu_name, display_name in psu_dict.items(): + if psu_name.strip() == psupro['type1']: + psupro['type1'] = display_name + psu_match = True + break + if psu_match is not True: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % psupro['type1']) + return psupro + except Exception as error: + return "ERR " + str(error) + + +class status(): + def __init__(self, productname): + self.productname = productname + + @staticmethod + def getETroot(filename): + tree = ET.parse(filename) + root = tree.getroot() + return root + + @staticmethod + def getDecodValue(collection, decode): + decodes = collection.find('decode') + testdecode = decodes.find(decode) + test = {} + if testdecode is None: + return test + for neighbor in testdecode.iter('code'): + test[neighbor.attrib["key"]] = neighbor.attrib["value"] + return test + + @staticmethod + def getfileValue(location): + return checktype.getValue(location, " ", " ") + + @staticmethod + def getETValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + prob_t = {} + prob_t.update(neighbor.attrib) + prob_t['errcode'] = 0 + prob_t['errmsg'] = '' + for pros in neighbor.iter("property"): + ret = dict(list(neighbor.attrib.items()) + list(pros.attrib.items())) + if ret.get('e2type') == 'fru' and ret.get("name") == "fru": + fruval = checktype.getfruValue(prob_t, root, ret["location"]) + if isinstance(fruval, str) and fruval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = fruval + break + prob_t.update(fruval) + continue + + if ret.get("name") == "psu" and ret.get('e2type') == 'fru': + psuval = checktype.getpsufruValue(prob_t, root, ret["location"]) + if isinstance(psuval, str) and psuval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = psuval + break + prob_t.update(psuval) + continue + + if ret.get("name") == "psu" and ret.get('e2type') == 'custfru': + psuval = checktype.getpsucustfruValue(prob_t, root, ret["location"]) + if isinstance(psuval, str) and psuval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = psuval + break + prob_t.update(psuval) + continue + + if ret.get("gettype") == "config": + prob_t[ret["name"]] = ret["value"] + continue + + if 'type' not in ret.keys(): + val = "0" + else: + val = ret["type"] + if 'bit' not in ret.keys(): + bit = "0" + else: + bit = ret["bit"] + if 'coefficient' not in ret.keys(): + coefficient = 1 + else: + coefficient = float(ret["coefficient"]) + if 'addend' not in ret.keys(): + addend = 0 + else: + addend = float(ret["addend"]) + + s = checktype.getValue(ret["location"], int(bit), int(val), coefficient, addend) + if isinstance(s, str) and s.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = s + break + if 'default' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + prob_t['errmsg'] = rt[str(s)] + if str(s) != ret["default"]: + prob_t['errcode'] = -1 + break + else: + if 'decode' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + if (ret['decode'] == "psutype" and s.replace("\x00", "").rstrip() not in rt): + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % + (s.replace("\x00", "").rstrip())) + else: + s = rt[str(s).replace("\x00", "").rstrip()] + name = ret["name"] + prob_t[name] = str(s) + a.append(prob_t) + + @staticmethod + def getCPUValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + location = neighbor.attrib["location"] + + filepath = glob.glob(location) + if len(filepath) == 0: + return + location = filepath[0] + L = [] + for dirpath, dirnames, filenames in os.walk(location): + for file in filenames: + if file.endswith("_input"): + b = re.findall(r'temp(\d+)_input', file) + idx = int(b[0]) + L.append(idx) + L = sorted(L) + for idx in L: + prob_t = {} + prob_t["name"] = getPMCreg("%s/temp%d_label" % (location, idx)) + prob_t["temp"] = float(getPMCreg("%s/temp%d_input" % (location, idx))) / 1000 + prob_t["alarm"] = float(getPMCreg("%s/temp%d_crit_alarm" % (location, idx))) / 1000 + prob_t["crit"] = float(getPMCreg("%s/temp%d_crit" % (location, idx))) / 1000 + prob_t["max"] = float(getPMCreg("%s/temp%d_max" % (location, idx))) / 1000 + a.append(prob_t) + + @staticmethod + def getFileName(): + fpath = os.path.dirname(os.path.realpath(__file__)) + for file in DEV_XML_FILE_LIST: + xml = fpath + "/" + file + if os.path.exists(xml): + return xml + return fpath + "/" + CONFIG_NAME + + @staticmethod + def checkFan(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "fan" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getTemp(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "temp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getPsu(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "psu" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getCustPsu(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "custpsu" + status.getETValue(ret, _filename, _tagname) + + + @staticmethod + def getcputemp(ret): + _filename = status.getFileName() + _tagname = "cpus" + status.getCPUValue(ret, _filename, _tagname) + + @staticmethod + def getDcdc(ret): + _filename = status.getFileName() + _tagname = "dcdc" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmactemp(ret): + _filename = status.getFileName() + _tagname = "mactemp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmacpower(ret): + _filename = status.getFileName() + _tagname = "macpower" + status.getETValue(ret, _filename, _tagname) diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pcie.yaml b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pcie.yaml new file mode 100644 index 000000000000..e419f4032579 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pcie.yaml @@ -0,0 +1,159 @@ +- bus: '00' + dev: '00' + fn: '0' + id: '1980' + name: 'Host bridge: Intel Corporation Atom Processor C3000 Series System Agent (rev + 11)' +- bus: '00' + dev: '04' + fn: '0' + id: 19a1 + name: 'Host bridge: Intel Corporation Atom Processor C3000 Series Error Registers + (rev 11)' +- bus: '00' + dev: '05' + fn: '0' + id: 19a2 + name: 'Generic system peripheral [0807]: Intel Corporation Atom Processor C3000 + Series Root Complex Event Collector (rev 11)' +- bus: '00' + dev: '06' + fn: '0' + id: 19a3 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series Integrated QAT + Root Port (rev 11)' +- bus: '00' + dev: 09 + fn: '0' + id: 19a4 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #0 (rev 11)' +- bus: '00' + dev: 0b + fn: '0' + id: 19a6 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #2 (rev 11)' +- bus: '00' + dev: 0e + fn: '0' + id: 19a8 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #4 (rev 11)' +- bus: '00' + dev: '10' + fn: '0' + id: 19aa + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series PCI Express Root + Port #6 (rev 11)' +- bus: '00' + dev: '12' + fn: '0' + id: 19ac + name: 'System peripheral: Intel Corporation Atom Processor C3000 Series SMBus Contoller + - Host (rev 11)' +- bus: '00' + dev: '14' + fn: '0' + id: 19c2 + name: 'SATA controller: Intel Corporation Atom Processor C3000 Series SATA Controller + 1 (rev 11)' +- bus: '00' + dev: '15' + fn: '0' + id: 19d0 + name: 'USB controller: Intel Corporation Atom Processor C3000 Series USB 3.0 xHCI + Controller (rev 11)' +- bus: '00' + dev: '17' + fn: '0' + id: 19d2 + name: 'PCI bridge: Intel Corporation Atom Processor C3000 Series Integrated LAN + Root Port #1 (rev 11)' +- bus: '00' + dev: '18' + fn: '0' + id: 19d3 + name: 'Communication controller: Intel Corporation Atom Processor C3000 Series ME + HECI 1 (rev 11)' +- bus: '00' + dev: 1a + fn: '0' + id: 19d8 + name: 'Serial controller: Intel Corporation Atom Processor C3000 Series HSUART Controller + (rev 11)' +- bus: '00' + dev: 1a + fn: '1' + id: 19d8 + name: 'Serial controller: Intel Corporation Atom Processor C3000 Series HSUART Controller + (rev 11)' +- bus: '00' + dev: 1a + fn: '2' + id: 19d8 + name: 'Serial controller: Intel Corporation Atom Processor C3000 Series HSUART Controller + (rev 11)' +- bus: '00' + dev: 1c + fn: '0' + id: 19db + name: 'SD Host controller: Intel Corporation Device 19db (rev 11)' +- bus: '00' + dev: 1f + fn: '0' + id: 19dc + name: 'ISA bridge: Intel Corporation Atom Processor C3000 Series LPC or eSPI (rev + 11)' +- bus: '00' + dev: 1f + fn: '1' + id: 19dd + name: 'Memory controller: Intel Corporation Atom Processor C3000 Series Primary + to Side Band (P2SB) Bridge (rev 11)' +- bus: '00' + dev: 1f + fn: '2' + id: 19de + name: 'Memory controller: Intel Corporation Atom Processor C3000 Series Power Management + Controller (rev 11)' +- bus: '00' + dev: 1f + fn: '4' + id: 19df + name: 'SMBus: Intel Corporation Atom Processor C3000 Series SMBus controller (rev + 11)' +- bus: '00' + dev: 1f + fn: '5' + id: 19e0 + name: 'Serial bus controller [0c80]: Intel Corporation Atom Processor C3000 Series + SPI Controller (rev 11)' +- bus: '01' + dev: '00' + fn: '0' + id: 19e2 + name: 'Co-processor: Intel Corporation Atom Processor C3000 Series QuickAssist Technology + (rev 11)' +- bus: '02' + dev: '00' + fn: '0' + id: b980 + name: 'Ethernet controller: Broadcom Inc. and subsidiaries Device b980 (rev 11)' +- bus: '04' + dev: '00' + fn: '0' + id: '7011' + name: 'Memory controller: Xilinx Corporation Device 7011' +- bus: '07' + dev: '00' + fn: '0' + id: 15c6 + name: 'Ethernet controller: Intel Corporation Ethernet Connection X553 1GbE (rev + 11)' +- bus: '07' + dev: '00' + fn: '1' + id: 15c6 + name: 'Ethernet controller: Intel Corporation Ethernet Connection X553 1GbE (rev + 11)' diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform.json b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform.json new file mode 100644 index 000000000000..3d426398748e --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform.json @@ -0,0 +1,501 @@ +{ + "chassis": { + "name": "M2-W6920-32QC2X", + "thermal_manager": false, + "status_led": { + "controllable": false, + "colors": ["green", "blinking_green", "amber", "blinking_amber"] + }, + "components": [ + { + "name": "CPU_CPLD" + }, + { + "name": "MAC_CPLD" + }, + { + "name": "FAN_CPLD" + }, + { + "name": "BASE_CPLD" + }, + { + "name": "BIOS" + } + ], + "fans": [ + { + "name": "Fantray1_1", + "speed": { + "controllable": true, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray2_1", + "speed": { + "controllable": true, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + } + ], + "fan_drawers":[ + { + "name": "Fantray1", + "num_fans" : 1, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "FanTray1_1", + "speed": { + "controllable": true, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray2", + "num_fans" : 1, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "FanTray2_1", + "speed": { + "controllable": true, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "psus": [ + { + "name": "Psu1", + "voltage": false, + "current": false, + "power": false, + "max_power": false, + "voltage_high_threshold": false, + "voltage_low_threshold": false, + "temperature": false, + "fans_target_speed": false, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU1_FAN1", + "speed": { + "controllable": false, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Psu2", + "voltage": false, + "current": false, + "power": false, + "max_power": false, + "voltage_high_threshold": false, + "voltage_low_threshold": false, + "temperature": false, + "fans_target_speed": false, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU2_FAN1", + "speed": { + "controllable": false, + "minimum": 40, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "thermals": [ + { + "name": "ASIC_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "CPU_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "INLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "OUTLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + } + ], + "modules": [], + "sfps": [] + }, + "interfaces": { + "Ethernet1": { + "index": "0,0,0,0,0,0,0,0", + "lanes": "1,2,3,4,5,6,7,8", + "breakout_modes": { + "1x400G": ["Eth1"], + "2x200G[100G]": ["Eth1/1", "Eth1/2"], + "4x100G": ["Eth1/1", "Eth1/2","Eth1/3", "Eth1/4"] + } + }, + "Ethernet9": { + "index": "1,1,1,1,1,1,1,1", + "lanes": "9,10,11,12,13,14,15,16", + "breakout_modes": { + "1x400G": ["Eth2"], + "2x200G[100G]": ["Eth2/1", "Eth2/2"], + "4x100G": ["Eth2/1", "Eth2/2","Eth2/3", "Eth2/4"] + } + }, + "Ethernet17": { + "index": "2,2,2,2,2,2,2,2", + "lanes": "17,18,19,20,21,22,23,24", + "breakout_modes": { + "1x400G": ["Eth3"], + "2x200G[100G]": ["Eth3/1", "Eth3/2"], + "4x100G": ["Eth3/1", "Eth3/2","Eth3/3", "Eth3/4"] + } + }, + "Ethernet25": { + "index": "3,3,3,3,3,3,3,3", + "lanes": "25,26,27,28,29,30,31,32", + "breakout_modes": { + "1x400G": ["Eth4"], + "2x200G[100G]": ["Eth4/1", "Eth4/2"], + "4x100G": ["Eth4/1", "Eth4/2","Eth4/3", "Eth4/4"] + } + }, + "Ethernet33": { + "index": "4,4,4,4,4,4,4,4", + "lanes": "33,34,35,36,37,38,39,40", + "breakout_modes": { + "1x400G": ["Eth5"], + "2x200G[100G]": ["Eth5/1", "Eth5/2"], + "4x100G": ["Eth5/1", "Eth5/2","Eth5/3", "Eth5/4"] + } + }, + "Ethernet41": { + "index": "5,5,5,5,5,5,5,5", + "lanes": "41,42,43,44,45,46,47,48", + "breakout_modes": { + "1x400G": ["Eth6"], + "2x200G[100G]": ["Eth6/1", "Eth6/2"], + "4x100G": ["Eth6/1", "Eth6/2","Eth6/3", "Eth6/4"] + } + }, + "Ethernet49": { + "index": "6,6,6,6,6,6,6,6", + "lanes": "49,50,51,52,53,54,55,56", + "breakout_modes": { + "1x400G": ["Eth7"], + "2x200G[100G]": ["Eth7/1", "Eth7/2"], + "4x100G": ["Eth7/1", "Eth7/2","Eth7/3", "Eth7/4"] + } + }, + "Ethernet57": { + "index": "7,7,7,7,7,7,7,7", + "lanes": "57,58,59,60,61,62,63,64", + "breakout_modes": { + "1x400G": ["Eth8"], + "2x200G[100G]": ["Eth8/1", "Eth8/2"], + "4x100G": ["Eth8/1", "Eth8/2","Eth8/3", "Eth8/4"] + } + }, + "Ethernet65": { + "index": "8,8,8,8,8,8,8,8", + "lanes": "65,66,67,68,69,70,71,72", + "breakout_modes": { + "1x400G": ["Eth9"], + "2x200G[100G]": ["Eth9/1", "Eth9/2"], + "4x100G": ["Eth9/1", "Eth9/2","Eth9/3", "Eth9/4"] + } + }, + "Ethernet73": { + "index": "9,9,9,9,9,9,9,9", + "lanes": "73,74,75,76,77,78,79,80", + "breakout_modes": { + "1x400G": ["Eth10"], + "2x200G[100G]": ["Eth10/1", "Eth10/2"], + "4x100G": ["Eth10/1", "Eth10/2","Eth10/3", "Eth10/4"] + } + }, + "Ethernet81": { + "index": "10,10,10,10,10,10,10,10", + "lanes": "81,82,83,84,85,86,87,88", + "breakout_modes": { + "1x400G": ["Eth11"], + "2x200G[100G]": ["Eth11/1", "Eth11/2"], + "4x100G": ["Eth11/1", "Eth11/2","Eth11/3", "Eth11/4"] + } + }, + "Ethernet89": { + "index": "11,11,11,11,11,11,11,11", + "lanes": "89,90,91,92,93,94,95,96", + "breakout_modes": { + "1x400G": ["Eth12"], + "2x200G[100G]": ["Eth12/1", "Eth12/2"], + "4x100G": ["Eth12/1", "Eth12/2","Eth12/3", "Eth12/4"] + } + }, + "Ethernet97": { + "index": "12,12,12,12,12,12,12,12", + "lanes": "97,98,99,100,101,102,103,104", + "breakout_modes": { + "1x400G": ["Eth13"], + "2x200G[100G]": ["Eth13/1", "Eth13/2"], + "4x100G": ["Eth13/1", "Eth13/2","Eth13/3", "Eth13/4"] + } + }, + "Ethernet105": { + "index": "13,13,13,13,13,13,13,13", + "lanes": "105,106,107,108,109,110,111,112", + "breakout_modes": { + "1x400G": ["Eth14"], + "2x200G[100G]": ["Eth14/1", "Eth14/2"], + "4x100G": ["Eth14/1", "Eth14/2","Eth14/3", "Eth14/4"] + } + }, + "Ethernet113": { + "index": "14,14,14,14,14,14,14,14", + "lanes": "113,114,115,116,117,118,119,120", + "breakout_modes": { + "1x400G": ["Eth15"], + "2x200G[100G]": ["Eth15/1", "Eth15/2"], + "4x100G": ["Eth15/1", "Eth15/2","Eth15/3", "Eth15/4"] + } + }, + "Ethernet121": { + "index": "15,15,15,15,15,15,15,15", + "lanes": "121,122,123,124,125,126,127,128", + "breakout_modes": { + "1x400G": ["Eth16"], + "2x200G[100G]": ["Eth16/1", "Eth16/2"], + "4x100G": ["Eth16/1", "Eth16/2","Eth16/3", "Eth16/4"] + } + }, + "Ethernet129": { + "index": "16,16,16,16,16,16,16,16", + "lanes": "129,130,131,132,133,134,135,136", + "breakout_modes": { + "1x400G": ["Eth17"], + "2x200G[100G]": ["Eth17/1", "Eth17/2"], + "4x100G": ["Eth17/1", "Eth17/2","Eth17/3", "Eth17/4"] + } + }, + "Ethernet137": { + "index": "17,17,17,17,17,17,17,17", + "lanes": "137,138,139,140,141,142,143,144", + "breakout_modes": { + "1x400G": ["Eth18"], + "2x200G[100G]": ["Eth18/1", "Eth18/2"], + "4x100G": ["Eth18/1", "Eth18/2","Eth18/3", "Eth18/4"] + } + }, + "Ethernet145": { + "index": "18,18,18,18,18,18,18,18", + "lanes": "145,146,147,148,149,150,151,152", + "breakout_modes": { + "1x400G": ["Eth19"], + "2x200G[100G]": ["Eth19/1", "Eth19/2"], + "4x100G": ["Eth19/1", "Eth19/2","Eth19/3", "Eth19/4"] + } + }, + "Ethernet153": { + "index": "19,19,19,19,19,19,19,19", + "lanes": "153,154,155,156,157,158,159,160", + "breakout_modes": { + "1x400G": ["Eth20"], + "2x200G[100G]": ["Eth20/1", "Eth20/2"], + "4x100G": ["Eth20/1", "Eth20/2","Eth20/3", "Eth20/4"] + } + }, + "Ethernet161": { + "index": "20,20,20,20,20,20,20,20", + "lanes": "161,162,163,164,165,166,167,168", + "breakout_modes": { + "1x400G": ["Eth21"], + "2x200G[100G]": ["Eth21/1", "Eth21/2"], + "4x100G": ["Eth21/1", "Eth21/2","Eth21/3", "Eth21/4"] + } + }, + "Ethernet169": { + "index": "21,21,21,21,21,21,21,21", + "lanes": "169,170,171,172,173,174,175,176", + "breakout_modes": { + "1x400G": ["Eth22"], + "2x200G[100G]": ["Eth22/1", "Eth22/2"], + "4x100G": ["Eth22/1", "Eth22/2","Eth22/3", "Eth22/4"] + } + }, + "Ethernet177": { + "index": "22,22,22,22,22,22,22,22", + "lanes": "177,178,179,180,181,182,183,184", + "breakout_modes": { + "1x400G": ["Eth23"], + "2x200G[100G]": ["Eth23/1", "Eth23/2"], + "4x100G": ["Eth23/1", "Eth23/2","Eth23/3", "Eth23/4"] + } + }, + "Ethernet185": { + "index": "23,23,23,23,23,23,23,23", + "lanes": "185,186,187,188,189,190,191,192", + "breakout_modes": { + "1x400G": ["Eth24"], + "2x200G[100G]": ["Eth24/1", "Eth24/2"], + "4x100G": ["Eth24/1", "Eth24/2","Eth24/3", "Eth24/4"] + } + }, + "Ethernet193": { + "index": "24,24,24,24,24,24,24,24", + "lanes": "193,194,195,196,197,198,199,200", + "breakout_modes": { + "1x400G": ["Eth25"], + "2x200G[100G]": ["Eth25/1", "Eth25/2"], + "4x100G": ["Eth25/1", "Eth25/2","Eth25/3", "Eth25/4"] + } + }, + "Ethernet201": { + "index": "25,25,25,25,25,25,25,25", + "lanes": "201,202,203,204,205,206,207,208", + "breakout_modes": { + "1x400G": ["Eth26"], + "2x200G[100G]": ["Eth26/1", "Eth26/2"], + "4x100G": ["Eth26/1", "Eth26/2","Eth26/3", "Eth26/4"] + } + }, + "Ethernet209": { + "index": "26,26,26,26,26,26,26,26", + "lanes": "209,210,211,212,213,214,215,216", + "breakout_modes": { + "1x400G": ["Eth27"], + "2x200G[100G]": ["Eth27/1", "Eth27/2"], + "4x100G": ["Eth27/1", "Eth27/2","Eth27/3", "Eth27/4"] + } + }, + "Ethernet217": { + "index": "27,27,27,27,27,27,27,27", + "lanes": "217,218,219,220,221,222,223,224", + "breakout_modes": { + "1x400G": ["Eth28"], + "2x200G[100G]": ["Eth28/1", "Eth28/2"], + "4x100G": ["Eth28/1", "Eth28/2","Eth28/3", "Eth28/4"] + } + }, + "Ethernet225": { + "index": "28,28,28,28,28,28,28,28", + "lanes": "225,226,227,228,229,230,231,232", + "breakout_modes": { + "1x400G": ["Eth29"], + "2x200G[100G]": ["Eth29/1", "Eth29/2"], + "4x100G": ["Eth29/1", "Eth29/2","Eth29/3", "Eth29/4"] + } + }, + "Ethernet233": { + "index": "29,29,29,29,29,29,29,29", + "lanes": "233,234,235,236,237,238,239,240", + "breakout_modes": { + "1x400G": ["Eth30"], + "2x200G[100G]": ["Eth30/1", "Eth30/2"], + "4x100G": ["Eth30/1", "Eth30/2","Eth30/3", "Eth30/4"] + } + }, + "Ethernet241": { + "index": "30,30,30,30,30,30,30,30", + "lanes": "241,242,243,244,245,246,247,248", + "breakout_modes": { + "1x400G": ["Eth31"], + "2x200G[100G]": ["Eth31/1", "Eth31/2"], + "4x100G": ["Eth31/1", "Eth31/2","Eth31/3", "Eth31/4"] + } + }, + "Ethernet249": { + "index": "31,31,31,31,31,31,31,31", + "lanes": "249,250,251,252,253,254,255,256", + "breakout_modes": { + "1x400G": ["Eth32"], + "2x200G[100G]": ["Eth32/1", "Eth32/2"], + "4x100G": ["Eth32/1", "Eth32/2","Eth32/3", "Eth32/4"] + } + }, + "Ethernet257": { + "index": "32", + "lanes": "258", + "breakout_modes": { + "1x10G": ["Eth33"] + } + }, + "Ethernet258": { + "index": "33", + "lanes": "257", + "breakout_modes": { + "1x10G": ["Eth34"] + } + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_asic b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_asic new file mode 100644 index 000000000000..960467652765 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_asic @@ -0,0 +1 @@ +broadcom diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_components.json b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_components.json new file mode 100644 index 000000000000..eb08e2563dea --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_components.json @@ -0,0 +1,16 @@ +{ + "chassis": { + "M2-W6920-32QC2X": { + "component": { + "CPU_CPLD": { }, + "CTRL_CPLD": { }, + "MAC_CPLDA": { }, + "MAC_CPLDB": { }, + "FAN_CPLD": { }, + "MAC_FPGA": { }, + "BIOS": { } + } + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_env.conf b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_env.conf new file mode 100644 index 000000000000..283e1c0ce710 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/platform_env.conf @@ -0,0 +1 @@ +usemsi=1 diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/sfputil.py b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/sfputil.py new file mode 100644 index 000000000000..60d7298a6627 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/sfputil.py @@ -0,0 +1,313 @@ +# sfputil.py +# +# Platform-specific SFP transceiver interface for SONiC +# + +try: + import time + import subprocess + import re + import os + import threading + import traceback + 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 = 0 + PORT_END = 33 + PORTS_IN_BLOCK = 34 + + EEPROM_OFFSET = 63 + SFP_DEVICE_TYPE = "optoe2" + QSFP_DEVICE_TYPE = "optoe1" + QSFPDD_DEVICE_TYPE = "optoe3" + I2C_MAX_ATTEMPT = 3 + + _port_to_eeprom_mapping = {} + port_to_i2cbus_mapping ={} + + sfp_ports_list = [] + qsfp_ports_list = [] + osfp_ports_list = [] + + @property + def port_start(self): + return self.PORT_START + + @property + def port_end(self): + return self.PORT_END + + @property + def qsfp_ports(self): + return self.qsfp_ports_list + + @property + def osfp_ports(self): + return self.osfp_ports_list + + @property + def port_to_eeprom_mapping(self): + return self._port_to_eeprom_mapping + + def __init__(self): + self.sfp_ports_list = [] + self.qsfp_ports_list = [] + self.osfp_ports_list = [] + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + self.port_to_i2cbus_mapping[x] = (x + self.EEPROM_OFFSET) + + self.port_to_i2cbus_mapping[0] = 65 + self.port_to_i2cbus_mapping[1] = 66 + self.port_to_i2cbus_mapping[2] = 63 + self.port_to_i2cbus_mapping[3] = 64 + self.port_to_i2cbus_mapping[28] = 93 + self.port_to_i2cbus_mapping[29] = 94 + self.port_to_i2cbus_mapping[30] = 91 + self.port_to_i2cbus_mapping[31] = 92 + self.port_to_i2cbus_mapping[32] = 96 + self.port_to_i2cbus_mapping[33] = 95 + + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + ret, sfp_type = self._get_sfp_type(x) + if (ret == True): + if sfp_type == "qsfp_dd": + self.osfp_ports_list.append(x) + elif sfp_type == "qsfp": + self.qsfp_ports_list.append(x) + elif sfp_type == "sfp": + self.sfp_ports_list.append(x) + SfpUtilBase.__init__(self) + + def _sfp_read_file_path(self, file_path, offset, num_bytes): + attempts = 0 + while attempts < self.I2C_MAX_ATTEMPT: + try: + file_path.seek(offset) + read_buf = file_path.read(num_bytes) + except: + attempts += 1 + time.sleep(0.05) + else: + return True, read_buf + return False, None + + def _sfp_eeprom_present(self, sysfs_sfp_i2c_client_eeprompath, offset): + """Tries to read the eeprom file to determine if the + device/sfp is present or not. If sfp present, the read returns + valid bytes. If not, read returns error 'Connection timed out""" + + if not os.path.exists(sysfs_sfp_i2c_client_eeprompath): + return False + else: + with open(sysfs_sfp_i2c_client_eeprompath, "rb", buffering=0) as sysfsfile: + rv, buf = self._sfp_read_file_path(sysfsfile, offset, 1) + return rv + + def _add_new_sfp_device(self, sysfs_sfp_i2c_adapter_path, devaddr, devtype): + try: + sysfs_nd_path = "%s/new_device" % sysfs_sfp_i2c_adapter_path + + # Write device address to new_device file + nd_file = open(sysfs_nd_path, "w") + nd_str = "%s %s" % (devtype, hex(devaddr)) + nd_file.write(nd_str) + nd_file.close() + + except Exception as err: + print("Error writing to new device file: %s" % str(err)) + return 1 + else: + return 0 + + def _get_port_eeprom_path(self, port_num, devid): + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + if port_num in self.port_to_eeprom_mapping.keys(): + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[port_num] + else: + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + i2c_adapter_id = self._get_port_i2c_adapter_id(port_num) + if i2c_adapter_id is None: + print("Error getting i2c bus num") + return None + + # Get i2c virtual bus path for the sfp + sysfs_sfp_i2c_adapter_path = "%s/i2c-%s" % (sysfs_i2c_adapter_base_path, + str(i2c_adapter_id)) + + # If i2c bus for port does not exist + if not os.path.exists(sysfs_sfp_i2c_adapter_path): + print("Could not find i2c bus %s. Driver not loaded?" % sysfs_sfp_i2c_adapter_path) + return None + + sysfs_sfp_i2c_client_path = "%s/%s-00%s" % (sysfs_sfp_i2c_adapter_path, + str(i2c_adapter_id), + hex(devid)[-2:]) + + # If sfp device is not present on bus, Add it + if not os.path.exists(sysfs_sfp_i2c_client_path): + if port_num in self.qsfp_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DEVICE_TYPE) + elif port_num in self.osfp_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFPDD_DEVICE_TYPE) + else: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.SFP_DEVICE_TYPE) + if ret != 0: + print("Error adding sfp device") + return None + + sysfs_sfp_i2c_client_eeprom_path = "%s/eeprom" % sysfs_sfp_i2c_client_path + + return sysfs_sfp_i2c_client_eeprom_path + + def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes): + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + rv, raw = self._sfp_read_file_path(sysfsfile_eeprom, offset, num_bytes) + if rv == False: + return None + + try: + for n in range(0, num_bytes): + if isinstance(raw[n], str): + eeprom_raw[n] = hex(ord(raw[n]))[2:].zfill(2) + elif isinstance(raw[n], int): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + except Exception as e: + return None + + return eeprom_raw + + def get_eeprom_dom_raw(self, port_num): + if port_num in self.qsfp_ports: + # QSFP DOM EEPROM is also at addr 0x50 and thus also stored in eeprom_ifraw + return None + else: + # Read dom eeprom at addr 0x51 + return self._read_eeprom_devid(port_num, self.IDENTITY_EEPROM_ADDR, 256) + + 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 + cmd = "cat /sys/wb_plat/sff/sff{}/present".format(str(port_num+1)) + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + return False + if output == "1": + return True + return False + + def get_low_power_mode(self, port_num): + # Check for invalid port_num + + return True + + def set_low_power_mode(self, port_num, lpmode): + # Check for invalid port_num + + return True + + def reset(self, port_num): + # Check for invalid port_num + if port_num < self.port_start or port_num > self.port_end: + return False + + return True + + def get_transceiver_change_event(self): + return False, {} + + def _get_sfp_type(self, port_num): + try: + if self.get_presence(port_num) == False: + return False, None + + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, 0, 1) + if (eeprom_raw[0] == '1e' or eeprom_raw[0] == '18'): + return True, "qsfp_dd" + elif (eeprom_raw[0] == '11' or eeprom_raw[0] == '0D'): + return True, "qsfp" + elif (eeprom_raw[0] == '03'): + return True, "sfp" + except Exception as e: + print(traceback.format_exc()) + + return False, None + + def twos_comp(self, num, bits): + try: + if ((num & (1 << (bits - 1))) != 0): + num = num - (1 << bits) + return num + except Exception: + return 0 + + def get_highest_temperature(self): + offset = 0 + hightest_temperature = -9999 + + presence_flag = False + read_eeprom_flag = False + temperature_valid_flag = False + + for port in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(port) == False: + continue + + presence_flag = True + + if port in self.osfp_ports: + offset = 14 + elif port in self.qsfp_ports: + offset = 22 + else: + offset = 96 + + eeprom_path = self._get_port_eeprom_path(port, 0x50) + try: + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + read_eeprom_flag = True + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, offset, 2) + msb = int(eeprom_raw[0], 16) + lsb = int(eeprom_raw[1], 16) + + result = (msb << 8) | (lsb & 0xff) + result = self.twos_comp(result, 16) + result = float(result / 256.0) + if -50 <= result <= 200: + temperature_valid_flag = True + if hightest_temperature < result: + hightest_temperature = result + except Exception as e: + ##print(traceback.format_exc()) + pass + + # all port not presence + if presence_flag == False: + hightest_temperature = -10000 + + # all port read eeprom fail + elif read_eeprom_flag == False: + hightest_temperature = -9999 + + # all port temperature invalid + elif read_eeprom_flag == True and temperature_valid_flag == False: + hightest_temperature = -10000 + + hightest_temperature = round(hightest_temperature, 2) + + return hightest_temperature \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/ssd_util.py b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/ssd_util.py new file mode 100644 index 000000000000..e8cf2e1a7cbc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/plugins/ssd_util.py @@ -0,0 +1,318 @@ +# +# ssd_util.py +# +# Generic implementation of the SSD health API +# SSD models supported: +# - InnoDisk +# - StorFly +# - Virtium + +try: + import re + import os + import subprocess + from sonic_platform_base.sonic_storage.storage_base import StorageBase +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + +SMARTCTL = "smartctl {} -a" +INNODISK = "iSmart -d {}" +VIRTIUM = "SmartCmd -m {}" +DISK_LIST_CMD = "fdisk -l -o Device" +DISK_FREE_CMD = "df -h" +MOUNT_CMD = "mount" + +NOT_AVAILABLE = "N/A" +PE_CYCLE = 3000 +FAIL_PERCENT = 95 + +# Set Vendor Specific IDs +INNODISK_HEALTH_ID = 169 +INNODISK_TEMPERATURE_ID = 194 + +class SsdUtil(StorageBase): + """ + Generic implementation of the SSD health API + """ + model = NOT_AVAILABLE + serial = NOT_AVAILABLE + firmware = NOT_AVAILABLE + temperature = NOT_AVAILABLE + health = NOT_AVAILABLE + remaining_life = NOT_AVAILABLE + sata_rate = NOT_AVAILABLE + ssd_info = NOT_AVAILABLE + vendor_ssd_info = NOT_AVAILABLE + + def __init__(self, diskdev): + self.vendor_ssd_utility = { + "Generic" : { "utility" : SMARTCTL, "parser" : self.parse_generic_ssd_info }, + "InnoDisk" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "M.2" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "StorFly" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info }, + "Virtium" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info } + } + + """ + The dict model_attr keys relate the vendors + LITEON : "ER2-GD","AF2MA31DTDLT" + Intel : "SSDSCKKB" + SMI : "SM619GXC" + samsung: "MZNLH" + ADATA : "IM2S3134N" + """ + self.model_attr = { + "ER2-GD" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "AF2MA31DTDLT" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "SSDSCK" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n233\s+(.+?)\n" }, + "SM619GXC" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n169\s+(.+?)\n" }, + "MZNLH" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n245\s+(.+?)\n" }, + "IM2S3134N" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n231\s+(.+?)\n" }, + "MTFDDAV240TCB-1AR1ZABAA" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" } + } + + self.key_list = list(self.model_attr.keys()) + self.attr_info_rule = "[\s\S]*SMART Attributes Data Structure revision number: 1|SMART Error Log Version[\s\S]*" + self.dev = diskdev + # Generic part + self.fetch_generic_ssd_info(diskdev) + self.parse_generic_ssd_info() + self.fetch_vendor_ssd_info(diskdev, "Generic") + + # Known vendor part + if self.model: + model_short = self.model.split()[0] + if model_short in self.vendor_ssd_utility: + self.fetch_vendor_ssd_info(diskdev, model_short) + self.parse_vendor_ssd_info(model_short) + else: + # No handler registered for this disk model + pass + else: + # Failed to get disk model + self.model = "Unknown" + + def _execute_shell(self, cmd): + process = subprocess.Popen(cmd.split(), universal_newlines=True, stdout=subprocess.PIPE) + output, error = process.communicate() + exit_code = process.returncode + if exit_code: + return None + return output + + def _parse_re(self, pattern, buffer): + res_list = re.findall(pattern, str(buffer)) + return res_list[0] if res_list else NOT_AVAILABLE + + def fetch_generic_ssd_info(self, diskdev): + self.ssd_info = self._execute_shell(self.vendor_ssd_utility["Generic"]["utility"].format(diskdev)) + + # Health and temperature values may be overwritten with vendor specific data + def parse_generic_ssd_info(self): + if "nvme" in self.dev: + self.model = self._parse_re('Model Number:\s*(.+?)\n', self.ssd_info) + + health_raw = self._parse_re('Percentage Used\s*(.+?)\n', self.ssd_info) + if health_raw == NOT_AVAILABLE: + self.health = NOT_AVAILABLE + else: + health_raw = health_raw.split()[-1] + self.health = 100 - float(health_raw.strip('%')) + + temp_raw = self._parse_re('Temperature\s*(.+?)\n', self.ssd_info) + if temp_raw == NOT_AVAILABLE: + self.temperature = NOT_AVAILABLE + else: + temp_raw = temp_raw.split()[-2] + self.temperature = float(temp_raw) + else: + self.model = self._parse_re('Device Model:\s*(.+?)\n', self.ssd_info) + model_key = "" + for key in self.key_list: + if re.search(key, self.model): + model_key = key + break + if model_key != "": + self.remaining_life = self._parse_re(self.model_attr[model_key]["remainingLife"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[2] + self.temperature = self._parse_re(self.model_attr[model_key]["temperature"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[8] + self.health = self.remaining_life + # Get the LITEON ssd health value by (PE CYCLE - AVG ERASE CYCLE )/(PE CYCLE) + if model_key in ["ER2-GD", "AF2MA31DTDLT"]: + avg_erase = int(self._parse_re('\n173\s+(.+?)\n' ,re.sub(self.attr_info_rule,"",self.ssd_info)).split()[-1]) + self.health = int(round((PE_CYCLE - avg_erase)/PE_CYCLE*100,0)) + if self.remaining_life != NOT_AVAILABLE and int(self.remaining_life) < FAIL_PERCENT: + self.remaining_life = "Fail" + self.sata_rate = self._parse_re('SATA Version is:.*current: (.+?)\)\n', self.ssd_info) + self.serial = self._parse_re('Serial Number:\s*(.+?)\n', self.ssd_info) + self.firmware = self._parse_re('Firmware Version:\s*(.+?)\n', self.ssd_info) + + def parse_innodisk_info(self): + if self.vendor_ssd_info: + self.health = self._parse_re('Health:\s*(.+?)%', self.vendor_ssd_info) + self.temperature = self._parse_re('Temperature\s*\[\s*(.+?)\]', self.vendor_ssd_info) + else: + if self.health == NOT_AVAILABLE: + health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + self.health = health_raw.split()[-1] + if self.temperature == NOT_AVAILABLE: + temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + self.temperature = temp_raw.split()[-6] + + def parse_virtium_info(self): + if self.vendor_ssd_info: + self.temperature = self._parse_re('Temperature_Celsius\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + nand_endurance = self._parse_re('NAND_Endurance\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + avg_erase_count = self._parse_re('Average_Erase_Count\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + try: + self.health = 100 - (float(avg_erase_count) * 100 / float(nand_endurance)) + except (ValueError, ZeroDivisionError): + # Invalid avg_erase_count or nand_endurance. + pass + + def fetch_vendor_ssd_info(self, diskdev, model): + self.vendor_ssd_info = self._execute_shell(self.vendor_ssd_utility[model]["utility"].format(diskdev)) + + def parse_vendor_ssd_info(self, model): + self.vendor_ssd_utility[model]["parser"]() + + def check_readonly2(self, partition, filesystem): + # parse mount cmd output info + mount_info = self._execute_shell(MOUNT_CMD) + for line in mount_info.split('\n'): + column_list = line.split() + if line == '': + continue + if column_list[0] == partition and column_list[2] == filesystem: + if column_list[5].split(',')[0][1:] == "ro": + return partition + else: + return NOT_AVAILABLE + return NOT_AVAILABLE + + def check_readonly(self, partition, filesystem): + ret = os.access(filesystem, os.W_OK) + if ret == False: + return partition + else: + return NOT_AVAILABLE + + def get_health(self): + """ + Retrieves current disk health in percentages + + Returns: + A float number of current ssd health + e.g. 83.5 + """ + if self.health == 'N/A': + return "NA" + else: + return float(self.health) + + def get_temperature(self): + """ + Retrieves current disk temperature in Celsius + + Returns: + A float number of current temperature in Celsius + e.g. 40.1 + """ + if self.temperature == 'N/A': + return 'NA' + else: + return float(self.temperature) + + def get_model(self): + """ + Retrieves model for the given disk device + + Returns: + A string holding disk model as provided by the manufacturer + """ + return self.model + + def get_firmware(self): + """ + Retrieves firmware version for the given disk device + + Returns: + A string holding disk firmware version as provided by the manufacturer + """ + return self.firmware + + def get_serial(self): + """ + Retrieves serial number for the given disk device + + Returns: + A string holding disk serial number as provided by the manufacturer + """ + return self.serial + def get_sata_rate(self): + """ + Retrieves SATA rate for the given disk device + Returns: + A string holding current SATA rate as provided by the manufacturer + """ + return self.sata_rate + def get_remaining_life(self): + """ + Retrieves remaining life for the given disk device + Returns: + A string holding disk remaining life as provided by the manufacturer + """ + return self.remaining_life + def get_vendor_output(self): + """ + Retrieves vendor specific data for the given disk device + + Returns: + A string holding some vendor specific disk information + """ + return self.vendor_ssd_info + + def parse_id_number(self, id): + return self._parse_re('{}\s*(.+?)\n'.format(id), self.ssd_info) + + def get_readonly_partition(self): + """ + Check the partition mount filesystem is readonly status,then output the result. + Returns: + The readonly partition list + """ + + ro_partition_list = [] + partition_list = [] + + # parse fdisk cmd output info + disk_info = self._execute_shell(DISK_LIST_CMD) + begin_flag = False + for line in disk_info.split('\n'): + if line == "Device": + begin_flag = True + continue + if begin_flag: + if line != "": + partition_list.append(line) + else: + break + + # parse df cmd output info + disk_free = self._execute_shell(DISK_FREE_CMD) + disk_dict = {} + line_num = 0 + for line in disk_free.split('\n'): + line_num = line_num + 1 + if line_num == 1 or line == "": + continue + column_list = line.split() + disk_dict[column_list[0]] = column_list[5] + + # get partition which is readonly + for partition in partition_list: + if partition in disk_dict: + ret = self.check_readonly(partition, disk_dict[partition]) + if (ret != NOT_AVAILABLE): + ro_partition_list.append(ret) + + return ro_partition_list diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pmon_daemon_control.json b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..94592fa8cebc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/pmon_daemon_control.json @@ -0,0 +1,3 @@ +{ + "skip_ledd": true +} diff --git a/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/postinit_cmd_file.soc b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/postinit_cmd_file.soc new file mode 100644 index 000000000000..fb86ee0a8e85 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/postinit_cmd_file.soc @@ -0,0 +1,5 @@ +m0 load 0 0x3800 /usr/share/sonic/platform/custom_led.bin +led auto on +led start +linkscan SwPortBitMap=cd,xe + diff --git a/platform/innovium/platform.conf b/device/micas/x86_64-micas_m2-w6920-32qc2x-r0/system_health_monitoring_config.json old mode 100755 new mode 100644 similarity index 100% rename from platform/innovium/platform.conf rename to device/micas/x86_64-micas_m2-w6920-32qc2x-r0/system_health_monitoring_config.json diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/hwsku.json b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/hwsku.json new file mode 100644 index 000000000000..b958c147ecc7 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/hwsku.json @@ -0,0 +1,197 @@ +{ + "interfaces": { + "Ethernet1": { + "default_brkout_mode": "1x400G" + }, + "Ethernet9": { + "default_brkout_mode": "1x400G" + }, + "Ethernet17": { + "default_brkout_mode": "1x400G" + }, + "Ethernet25": { + "default_brkout_mode": "1x400G" + }, + "Ethernet33": { + "default_brkout_mode": "1x400G" + }, + "Ethernet41": { + "default_brkout_mode": "1x400G" + }, + "Ethernet49": { + "default_brkout_mode": "1x400G" + }, + "Ethernet57": { + "default_brkout_mode": "1x400G" + }, + "Ethernet65": { + "default_brkout_mode": "1x400G" + }, + "Ethernet73": { + "default_brkout_mode": "1x400G" + }, + "Ethernet81": { + "default_brkout_mode": "1x400G" + }, + "Ethernet89": { + "default_brkout_mode": "1x400G" + }, + "Ethernet97": { + "default_brkout_mode": "1x400G" + }, + "Ethernet105": { + "default_brkout_mode": "1x400G" + }, + "Ethernet113": { + "default_brkout_mode": "1x400G" + }, + "Ethernet121": { + "default_brkout_mode": "1x400G" + }, + "Ethernet129": { + "default_brkout_mode": "1x400G" + }, + "Ethernet137": { + "default_brkout_mode": "1x400G" + }, + "Ethernet145": { + "default_brkout_mode": "1x400G" + }, + "Ethernet153": { + "default_brkout_mode": "1x400G" + }, + "Ethernet161": { + "default_brkout_mode": "1x400G" + }, + "Ethernet169": { + "default_brkout_mode": "1x400G" + }, + "Ethernet177": { + "default_brkout_mode": "1x400G" + }, + "Ethernet185": { + "default_brkout_mode": "1x400G" + }, + "Ethernet193": { + "default_brkout_mode": "1x400G" + }, + "Ethernet201": { + "default_brkout_mode": "1x400G" + }, + "Ethernet209": { + "default_brkout_mode": "1x400G" + }, + "Ethernet217": { + "default_brkout_mode": "1x400G" + }, + "Ethernet225": { + "default_brkout_mode": "1x400G" + }, + "Ethernet233": { + "default_brkout_mode": "1x400G" + }, + "Ethernet241": { + "default_brkout_mode": "1x400G" + }, + "Ethernet249": { + "default_brkout_mode": "1x400G" + }, + "Ethernet257": { + "default_brkout_mode": "1x400G" + }, + "Ethernet265": { + "default_brkout_mode": "1x400G" + }, + "Ethernet273": { + "default_brkout_mode": "1x400G" + }, + "Ethernet281": { + "default_brkout_mode": "1x400G" + }, + "Ethernet289": { + "default_brkout_mode": "1x400G" + }, + "Ethernet297": { + "default_brkout_mode": "1x400G" + }, + "Ethernet305": { + "default_brkout_mode": "1x400G" + }, + "Ethernet313": { + "default_brkout_mode": "1x400G" + }, + "Ethernet321": { + "default_brkout_mode": "1x400G" + }, + "Ethernet329": { + "default_brkout_mode": "1x400G" + }, + "Ethernet337": { + "default_brkout_mode": "1x400G" + }, + "Ethernet345": { + "default_brkout_mode": "1x400G" + }, + "Ethernet353": { + "default_brkout_mode": "1x400G" + }, + "Ethernet361": { + "default_brkout_mode": "1x400G" + }, + "Ethernet369": { + "default_brkout_mode": "1x400G" + }, + "Ethernet377": { + "default_brkout_mode": "1x400G" + }, + "Ethernet385": { + "default_brkout_mode": "1x400G" + }, + "Ethernet393": { + "default_brkout_mode": "1x400G" + }, + "Ethernet401": { + "default_brkout_mode": "1x400G" + }, + "Ethernet409": { + "default_brkout_mode": "1x400G" + }, + "Ethernet417": { + "default_brkout_mode": "1x400G" + }, + "Ethernet425": { + "default_brkout_mode": "1x400G" + }, + "Ethernet433": { + "default_brkout_mode": "1x400G" + }, + "Ethernet441": { + "default_brkout_mode": "1x400G" + }, + "Ethernet449": { + "default_brkout_mode": "1x400G" + }, + "Ethernet457": { + "default_brkout_mode": "1x400G" + }, + "Ethernet465": { + "default_brkout_mode": "1x400G" + }, + "Ethernet473": { + "default_brkout_mode": "1x400G" + }, + "Ethernet481": { + "default_brkout_mode": "1x400G" + }, + "Ethernet489": { + "default_brkout_mode": "1x400G" + }, + "Ethernet497": { + "default_brkout_mode": "1x400G" + }, + "Ethernet505": { + "default_brkout_mode": "1x400G" + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/port_config.ini b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/port_config.ini new file mode 100644 index 000000000000..d6bdd4bf54dc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/port_config.ini @@ -0,0 +1,65 @@ +# name lanes alias index speed +Ethernet1 65,66,67,68,69,70,71,72 fourHundredGigE0/1 0 400000 +Ethernet9 69,70,71,72,73,74,75,76 fourHundredGigE0/2 1 400000 +Ethernet17 25,26,27,28,29,30,31,32 fourHundredGigE0/3 2 400000 +Ethernet25 21,22,23,24,25,26,27,28 fourHundredGigE0/4 3 400000 +Ethernet33 73,74,75,76,77,78,79,80 fourHundredGigE0/5 4 400000 +Ethernet41 77,78,79,80,81,82,83,84 fourHundredGigE0/6 5 400000 +Ethernet49 33,34,35,36,37,38,39,40 fourHundredGigE0/7 6 400000 +Ethernet57 29,30,31,32,33,34,35,36 fourHundredGigE0/8 7 400000 +Ethernet65 81,82,83,84,85,86,87,88 fourHundredGigE0/9 8 400000 +Ethernet73 85,86,87,88,89,90,91,92 fourHundredGigE0/10 9 400000 +Ethernet81 41,42,43,44,45,46,47,48 fourHundredGigE0/11 10 400000 +Ethernet89 37,38,39,40,41,42,43,44 fourHundredGigE0/12 11 400000 +Ethernet97 89,90,91,92,93,94,95,96 fourHundredGigE0/13 12 400000 +Ethernet105 93,94,95,96,97,98,99,100 fourHundredGigE0/14 13 400000 +Ethernet113 49,50,51,52,53,54,55,56 fourHundredGigE0/15 14 400000 +Ethernet121 45,46,47,48,49,50,51,52 fourHundredGigE0/16 15 400000 +Ethernet129 97,98,99,100,101,102,103,104 fourHundredGigE0/17 16 400000 +Ethernet137 101,102,103,104,105,106,107,108 fourHundredGigE0/18 17 400000 +Ethernet145 57,58,59,60,61,62,63,64 fourHundredGigE0/19 18 400000 +Ethernet153 53,54,55,56,57,58,59,60 fourHundredGigE0/20 19 400000 +Ethernet161 105,106,107,108,109,110,111,112 fourHundredGigE0/21 20 400000 +Ethernet169 109,110,111,112,113,114,115,116 fourHundredGigE0/22 21 400000 +Ethernet177 17,18,19,20,21,22,23,24 fourHundredGigE0/23 22 400000 +Ethernet185 61,62,63,64,65,66,67,68 fourHundredGigE0/24 23 400000 +Ethernet193 113,114,115,116,117,118,119,120 fourHundredGigE0/25 24 400000 +Ethernet201 117,118,119,120,121,122,123,124 fourHundredGigE0/26 25 400000 +Ethernet209 9,10,11,12,13,14,15,16 fourHundredGigE0/27 26 400000 +Ethernet217 13,14,15,16,17,18,19,20 fourHundredGigE0/28 27 400000 +Ethernet225 121,122,123,124,125,126,127,128 fourHundredGigE0/29 28 400000 +Ethernet233 125,126,127,128,129,130,131,132 fourHundredGigE0/30 29 400000 +Ethernet241 1,2,3,4,5,6,7,8 fourHundredGigE0/31 30 400000 +Ethernet249 5,6,7,8,9,10,11,12 fourHundredGigE0/32 31 400000 +Ethernet257 133,134,135,136,137,138,139,140 fourHundredGigE0/33 32 400000 +Ethernet265 129,130,131,132,133,134,135,136 fourHundredGigE0/34 33 400000 +Ethernet273 249,250,251,252,253,254,255,256 fourHundredGigE0/35 34 400000 +Ethernet281 253,254,255,256,257,258,259,260 fourHundredGigE0/36 35 400000 +Ethernet289 141,142,143,144,145,146,147,148 fourHundredGigE0/37 36 400000 +Ethernet297 137,138,139,140,141,142,143,144 fourHundredGigE0/38 37 400000 +Ethernet305 241,242,243,244,245,246,247,248 fourHundredGigE0/39 38 400000 +Ethernet313 245,246,247,248,249,250,251,252 fourHundredGigE0/40 39 400000 +Ethernet321 149,150,151,152,153,154,155,156 fourHundredGigE0/41 40 400000 +Ethernet329 145,146,147,148,149,150,151,152 fourHundredGigE0/42 41 400000 +Ethernet337 237,238,239,240,241,242,243,244 fourHundredGigE0/43 42 400000 +Ethernet345 197,198,199,200,201,202,203,204 fourHundredGigE0/44 43 400000 +Ethernet353 157,158,159,160,161,162,163,164 fourHundredGigE0/45 44 400000 +Ethernet361 153,154,155,156,157,158,159,160 fourHundredGigE0/46 45 400000 +Ethernet369 193,194,195,196,197,198,199,200 fourHundredGigE0/47 46 400000 +Ethernet377 205,206,207,208,209,210,211,212 fourHundredGigE0/48 47 400000 +Ethernet385 165,166,167,168,169,170,171,172 fourHundredGigE0/49 48 400000 +Ethernet393 161,162,163,164,165,166,167,168 fourHundredGigE0/50 49 400000 +Ethernet401 201,202,203,204,205,206,207,208 fourHundredGigE0/51 50 400000 +Ethernet409 213,214,215,216,217,218,219,220 fourHundredGigE0/52 51 400000 +Ethernet417 173,174,175,176,177,178,179,180 fourHundredGigE0/53 52 400000 +Ethernet425 169,170,171,172,173,174,175,176 fourHundredGigE0/54 53 400000 +Ethernet433 209,210,211,212,213,214,215,216 fourHundredGigE0/55 54 400000 +Ethernet441 221,222,223,224,225,226,227,228 fourHundredGigE0/56 55 400000 +Ethernet449 181,182,183,184,185,186,187,188 fourHundredGigE0/57 56 400000 +Ethernet457 177,178,179,180,181,182,183,184 fourHundredGigE0/58 57 400000 +Ethernet465 217,218,219,220,221,222,223,224 fourHundredGigE0/59 58 400000 +Ethernet473 229,230,231,232,233,234,235,236 fourHundredGigE0/60 59 400000 +Ethernet481 189,190,191,192,193,194,195,196 fourHundredGigE0/61 60 400000 +Ethernet489 185,186,187,188,189,190,191,192 fourHundredGigE0/62 61 400000 +Ethernet497 225,226,227,228,229,230,231,232 fourHundredGigE0/63 62 400000 +Ethernet505 233,234,235,236,237,238,239,240 fourHundredGigE0/64 63 400000 diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/sai.profile b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/sai.profile new file mode 100644 index 000000000000..f5e660abcfd1 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th4-m2-w6930-64qc-64x400G.config.yml \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/th4-m2-w6930-64qc-64x400G.config.yml b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/th4-m2-w6930-64qc-64x400G.config.yml new file mode 100644 index 000000000000..d2b24e2cb1a4 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/M2-W6930-64QC/th4-m2-w6930-64qc-64x400G.config.yml @@ -0,0 +1,12951 @@ +--- +bcm_device: + 0: + global: + bcm_tunnel_term_compatible_mode: 1 + vlan_flooding_l2mc_num_reserved: 2048 + l3_alpm_template: 2 + l3_alpm2_bnk_threshold: 100 + svi_my_station_optimization: 1 + sai_nbr_bcast_ifp_optimized: 2 + uft_mode: 1 + l3_enable: 1 + l2_hitbit_enable: 0 + pktio_mode: 1 + warmboot_knet_shutdown_mode: 1 + sai_pfc_defaults_disable: 1 + sai_optimized_mmu: 1 + sai_postinit_cmd_file: /usr/share/sonic/platform/postinit_cmd_file.soc + sai_port_pmap_phy_lanes: 1 +... + +--- +device: + 0: + FP_CONFIG: + #FP_ING_OPERMODE: PIPE_UNIQUE + FP_ING_OPERMODE: GLOBAL_PIPE_AWARE +... + +--- +bcm_device: + 0: + port: + 68: + dport_map_port: 1 + 69: + dport_map_port: 2 + 70: + dport_map_port: 3 + 71: + dport_map_port: 4 + 72: + dport_map_port: 5 + 73: + dport_map_port: 6 + 74: + dport_map_port: 7 + 75: + dport_map_port: 8 + 25: + dport_map_port: 9 + 26: + dport_map_port: 10 + 27: + dport_map_port: 11 + 28: + dport_map_port: 12 + 21: + dport_map_port: 13 + 22: + dport_map_port: 14 + 23: + dport_map_port: 15 + 24: + dport_map_port: 16 + 76: + dport_map_port: 17 + 77: + dport_map_port: 18 + 78: + dport_map_port: 19 + 79: + dport_map_port: 20 + 80: + dport_map_port: 21 + 81: + dport_map_port: 22 + 82: + dport_map_port: 23 + 83: + dport_map_port: 24 + 34: + dport_map_port: 25 + 35: + dport_map_port: 26 + 36: + dport_map_port: 27 + 37: + dport_map_port: 28 + 29: + dport_map_port: 29 + 30: + dport_map_port: 30 + 31: + dport_map_port: 31 + 32: + dport_map_port: 32 + 85: + dport_map_port: 33 + 86: + dport_map_port: 34 + 87: + dport_map_port: 35 + 88: + dport_map_port: 36 + 89: + dport_map_port: 37 + 90: + dport_map_port: 38 + 91: + dport_map_port: 39 + 92: + dport_map_port: 40 + 42: + dport_map_port: 41 + 43: + dport_map_port: 42 + 44: + dport_map_port: 43 + 45: + dport_map_port: 44 + 38: + dport_map_port: 45 + 39: + dport_map_port: 46 + 40: + dport_map_port: 47 + 41: + dport_map_port: 48 + 93: + dport_map_port: 49 + 94: + dport_map_port: 50 + 95: + dport_map_port: 51 + 96: + dport_map_port: 52 + 97: + dport_map_port: 53 + 98: + dport_map_port: 54 + 99: + dport_map_port: 55 + 100: + dport_map_port: 56 + 51: + dport_map_port: 57 + 52: + dport_map_port: 58 + 53: + dport_map_port: 59 + 54: + dport_map_port: 60 + 46: + dport_map_port: 61 + 47: + dport_map_port: 62 + 48: + dport_map_port: 63 + 49: + dport_map_port: 64 + 102: + dport_map_port: 65 + 103: + dport_map_port: 66 + 104: + dport_map_port: 67 + 105: + dport_map_port: 68 + 106: + dport_map_port: 69 + 107: + dport_map_port: 70 + 108: + dport_map_port: 71 + 109: + dport_map_port: 72 + 59: + dport_map_port: 73 + 60: + dport_map_port: 74 + 61: + dport_map_port: 75 + 62: + dport_map_port: 76 + 55: + dport_map_port: 77 + 56: + dport_map_port: 78 + 57: + dport_map_port: 79 + 58: + dport_map_port: 80 + 110: + dport_map_port: 81 + 111: + dport_map_port: 82 + 112: + dport_map_port: 83 + 113: + dport_map_port: 84 + 114: + dport_map_port: 85 + 115: + dport_map_port: 86 + 116: + dport_map_port: 87 + 117: + dport_map_port: 88 + 17: + dport_map_port: 89 + 18: + dport_map_port: 90 + 19: + dport_map_port: 91 + 20: + dport_map_port: 92 + 63: + dport_map_port: 93 + 64: + dport_map_port: 94 + 65: + dport_map_port: 95 + 66: + dport_map_port: 96 + 119: + dport_map_port: 97 + 120: + dport_map_port: 98 + 121: + dport_map_port: 99 + 122: + dport_map_port: 100 + 123: + dport_map_port: 101 + 124: + dport_map_port: 102 + 125: + dport_map_port: 103 + 126: + dport_map_port: 104 + 9: + dport_map_port: 105 + 10: + dport_map_port: 106 + 11: + dport_map_port: 107 + 12: + dport_map_port: 108 + 13: + dport_map_port: 109 + 14: + dport_map_port: 110 + 15: + dport_map_port: 111 + 16: + dport_map_port: 112 + 127: + dport_map_port: 113 + 128: + dport_map_port: 114 + 129: + dport_map_port: 115 + 130: + dport_map_port: 116 + 131: + dport_map_port: 117 + 132: + dport_map_port: 118 + 133: + dport_map_port: 119 + 134: + dport_map_port: 120 + 1: + dport_map_port: 121 + 2: + dport_map_port: 122 + 3: + dport_map_port: 123 + 4: + dport_map_port: 124 + 5: + dport_map_port: 125 + 6: + dport_map_port: 126 + 7: + dport_map_port: 127 + 8: + dport_map_port: 128 + 140: + dport_map_port: 129 + 141: + dport_map_port: 130 + 142: + dport_map_port: 131 + 143: + dport_map_port: 132 + 136: + dport_map_port: 133 + 137: + dport_map_port: 134 + 138: + dport_map_port: 135 + 139: + dport_map_port: 136 + 263: + dport_map_port: 137 + 264: + dport_map_port: 138 + 265: + dport_map_port: 139 + 266: + dport_map_port: 140 + 267: + dport_map_port: 141 + 268: + dport_map_port: 142 + 269: + dport_map_port: 143 + 270: + dport_map_port: 144 + 148: + dport_map_port: 145 + 149: + dport_map_port: 146 + 150: + dport_map_port: 147 + 151: + dport_map_port: 148 + 144: + dport_map_port: 149 + 145: + dport_map_port: 150 + 146: + dport_map_port: 151 + 147: + dport_map_port: 152 + 255: + dport_map_port: 153 + 256: + dport_map_port: 154 + 257: + dport_map_port: 155 + 258: + dport_map_port: 156 + 259: + dport_map_port: 157 + 260: + dport_map_port: 158 + 261: + dport_map_port: 159 + 262: + dport_map_port: 160 + 157: + dport_map_port: 161 + 158: + dport_map_port: 162 + 159: + dport_map_port: 163 + 160: + dport_map_port: 164 + 153: + dport_map_port: 165 + 154: + dport_map_port: 166 + 155: + dport_map_port: 167 + 156: + dport_map_port: 168 + 250: + dport_map_port: 169 + 251: + dport_map_port: 170 + 252: + dport_map_port: 171 + 253: + dport_map_port: 172 + 208: + dport_map_port: 173 + 209: + dport_map_port: 174 + 210: + dport_map_port: 175 + 211: + dport_map_port: 176 + 165: + dport_map_port: 177 + 166: + dport_map_port: 178 + 167: + dport_map_port: 179 + 168: + dport_map_port: 180 + 161: + dport_map_port: 181 + 162: + dport_map_port: 182 + 163: + dport_map_port: 183 + 164: + dport_map_port: 184 + 204: + dport_map_port: 185 + 205: + dport_map_port: 186 + 206: + dport_map_port: 187 + 207: + dport_map_port: 188 + 216: + dport_map_port: 189 + 217: + dport_map_port: 190 + 218: + dport_map_port: 191 + 219: + dport_map_port: 192 + 174: + dport_map_port: 193 + 175: + dport_map_port: 194 + 176: + dport_map_port: 195 + 177: + dport_map_port: 196 + 170: + dport_map_port: 197 + 171: + dport_map_port: 198 + 172: + dport_map_port: 199 + 173: + dport_map_port: 200 + 212: + dport_map_port: 201 + 213: + dport_map_port: 202 + 214: + dport_map_port: 203 + 215: + dport_map_port: 204 + 225: + dport_map_port: 205 + 226: + dport_map_port: 206 + 227: + dport_map_port: 207 + 228: + dport_map_port: 208 + 182: + dport_map_port: 209 + 183: + dport_map_port: 210 + 184: + dport_map_port: 211 + 185: + dport_map_port: 212 + 178: + dport_map_port: 213 + 179: + dport_map_port: 214 + 180: + dport_map_port: 215 + 181: + dport_map_port: 216 + 221: + dport_map_port: 217 + 222: + dport_map_port: 218 + 223: + dport_map_port: 219 + 224: + dport_map_port: 220 + 233: + dport_map_port: 221 + 234: + dport_map_port: 222 + 235: + dport_map_port: 223 + 236: + dport_map_port: 224 + 191: + dport_map_port: 225 + 192: + dport_map_port: 226 + 193: + dport_map_port: 227 + 194: + dport_map_port: 228 + 187: + dport_map_port: 229 + 188: + dport_map_port: 230 + 189: + dport_map_port: 231 + 190: + dport_map_port: 232 + 229: + dport_map_port: 233 + 230: + dport_map_port: 234 + 231: + dport_map_port: 235 + 232: + dport_map_port: 236 + 242: + dport_map_port: 237 + 243: + dport_map_port: 238 + 244: + dport_map_port: 239 + 245: + dport_map_port: 240 + 199: + dport_map_port: 241 + 200: + dport_map_port: 242 + 201: + dport_map_port: 243 + 202: + dport_map_port: 244 + 195: + dport_map_port: 245 + 196: + dport_map_port: 246 + 197: + dport_map_port: 247 + 198: + dport_map_port: 248 + 238: + dport_map_port: 249 + 239: + dport_map_port: 250 + 240: + dport_map_port: 251 + 241: + dport_map_port: 252 + 246: + dport_map_port: 253 + 247: + dport_map_port: 254 + 248: + dport_map_port: 255 + 249: + dport_map_port: 256 +... + +--- +device: + 0: + PORT_CONFIG: + PORT_SYSTEM_PROFILE_OPERMODE_PIPEUNIQUE: 1 + PC_PM_CORE: + ? + PC_PM_ID: 1 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x65214703 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x02463175 + RX_POLARITY_FLIP: 0xc8 + + ? + PC_PM_ID: 2 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13472065 + TX_POLARITY_FLIP: 0x4c + RX_LANE_MAP: 0x13572064 + RX_POLARITY_FLIP: 0xc8 + + ? + PC_PM_ID: 3 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x65214703 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x02463175 + RX_POLARITY_FLIP: 0xc8 + + ? + PC_PM_ID: 4 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57036421 + TX_POLARITY_FLIP: 0x4c + RX_LANE_MAP: 0x20641357 + RX_POLARITY_FLIP: 0x37 + + ? + PC_PM_ID: 5 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16524307 + TX_POLARITY_FLIP: 0x1b + RX_LANE_MAP: 0x03425617 + RX_POLARITY_FLIP: 0x62 + + ? + PC_PM_ID: 6 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x12437560 + TX_POLARITY_FLIP: 0x32 + RX_LANE_MAP: 0x05243617 + RX_POLARITY_FLIP: 0x37 + + ? + PC_PM_ID: 7 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56204731 + TX_POLARITY_FLIP: 0xaa + RX_LANE_MAP: 0x31642075 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 8 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23740165 + TX_POLARITY_FLIP: 0xb3 + RX_LANE_MAP: 0x46135702 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 9 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56204731 + TX_POLARITY_FLIP: 0xbb + RX_LANE_MAP: 0x31642075 + RX_POLARITY_FLIP: 0xae + + ? + PC_PM_ID: 10 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23740165 + TX_POLARITY_FLIP: 0xae + RX_LANE_MAP: 0x26135704 + RX_POLARITY_FLIP: 0xbf + + ? + PC_PM_ID: 11 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56204731 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x31624075 + RX_POLARITY_FLIP: 0xbf + + ? + PC_PM_ID: 12 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23740165 + TX_POLARITY_FLIP: 0xa2 + RX_LANE_MAP: 0x46135702 + RX_POLARITY_FLIP: 0xae + + ? + PC_PM_ID: 13 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56204731 + TX_POLARITY_FLIP: 0xaa + RX_LANE_MAP: 0x31652074 + RX_POLARITY_FLIP: 0x26 + ? + PC_PM_ID: 14 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23740165 + TX_POLARITY_FLIP: 0xb3 + RX_LANE_MAP: 0x56234701 + RX_POLARITY_FLIP: 0x26 + ? + PC_PM_ID: 15 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x54260137 + TX_POLARITY_FLIP: 0x40 + RX_LANE_MAP: 0x56234701 + RX_POLARITY_FLIP: 0x8e + + ? + PC_PM_ID: 16 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23740165 + TX_POLARITY_FLIP: 0x8f + RX_LANE_MAP: 0x43265107 + RX_POLARITY_FLIP: 0x40 + ? + PC_PM_ID: 17 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50742361 + TX_POLARITY_FLIP: 0xbb + RX_LANE_MAP: 0x43207651 + RX_POLARITY_FLIP: 0x1b + ? + PC_PM_ID: 18 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76241530 + TX_POLARITY_FLIP: 0x8e + RX_LANE_MAP: 0x21364075 + RX_POLARITY_FLIP: 0xb + ? + PC_PM_ID: 19 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50742361 + TX_POLARITY_FLIP: 0x6a + RX_LANE_MAP: 0x62317540 + RX_POLARITY_FLIP: 0xf9 + + ? + PC_PM_ID: 20 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76241530 + TX_POLARITY_FLIP: 0xa2 + RX_LANE_MAP: 0x53471026 + RX_POLARITY_FLIP: 0xf3 + + ? + PC_PM_ID: 21 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50742361 + TX_POLARITY_FLIP: 0xfa + RX_LANE_MAP: 0x43206751 + RX_POLARITY_FLIP: 0x7b + + ? + PC_PM_ID: 22 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76241530 + TX_POLARITY_FLIP: 0x9a + RX_LANE_MAP: 0x12364075 + RX_POLARITY_FLIP: 0x12 + + ? + PC_PM_ID: 23 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50742361 + TX_POLARITY_FLIP: 0xbb + RX_LANE_MAP: 0x62317540 + RX_POLARITY_FLIP: 0x9f + + ? + PC_PM_ID: 24 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76241530 + TX_POLARITY_FLIP: 0x2b + RX_LANE_MAP: 0x53471026 + RX_POLARITY_FLIP: 0xb1 + + ? + PC_PM_ID: 25 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x27045361 + TX_POLARITY_FLIP: 0xa + RX_LANE_MAP: 0x43206751 + RX_POLARITY_FLIP: 0xf9 + + ? + PC_PM_ID: 26 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76241530 + TX_POLARITY_FLIP: 0x87 + RX_LANE_MAP: 0x21564073 + RX_POLARITY_FLIP: 0xbb + + ? + PC_PM_ID: 27 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50742361 + TX_POLARITY_FLIP: 0xb2 + RX_LANE_MAP: 0x62317540 + RX_POLARITY_FLIP: 0xff + + ? + PC_PM_ID: 28 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76142503 + TX_POLARITY_FLIP: 0xb1 + RX_LANE_MAP: 0x53472016 + RX_POLARITY_FLIP: 0x11 + + ? + PC_PM_ID: 29 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x63742051 + TX_POLARITY_FLIP: 0xd4 + RX_LANE_MAP: 0x70214653 + RX_POLARITY_FLIP: 0x99 + + ? + PC_PM_ID: 30 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x02536174 + TX_POLARITY_FLIP: 0x93 + RX_LANE_MAP: 0x54730612 + RX_POLARITY_FLIP: 0x4d + + ? + PC_PM_ID: 31 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x27306415 + TX_POLARITY_FLIP: 0xd4 + RX_LANE_MAP: 0x61205347 + RX_POLARITY_FLIP: 0xc2 + + ? + PC_PM_ID: 32 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x02536174 + TX_POLARITY_FLIP: 0x93 + RX_LANE_MAP: 0x27014653 + RX_POLARITY_FLIP: 0xac + ? + PC_PM_ID: 33 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46172530 + TX_POLARITY_FLIP: 0x17 + RX_LANE_MAP: 0x01265347 + RX_POLARITY_FLIP: 0x4d + + ? + PC_PM_ID: 34 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x63742051 + TX_POLARITY_FLIP: 0xd4 + RX_LANE_MAP: 0x16472035 + RX_POLARITY_FLIP: 0x66 + + ? + PC_PM_ID: 35 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56172430 + TX_POLARITY_FLIP: 0x36 + RX_LANE_MAP: 0x23541706 + RX_POLARITY_FLIP: 0x6c + + ? + PC_PM_ID: 36 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x27306415 + TX_POLARITY_FLIP: 0xd4 + RX_LANE_MAP: 0x07463521 + RX_POLARITY_FLIP: 0x39 + + ? + PC_PM_ID: 37 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14760325 + TX_POLARITY_FLIP: 0x9e + RX_LANE_MAP: 0x47531620 + RX_POLARITY_FLIP: 0xab + + ? + PC_PM_ID: 38 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0xfa + RX_LANE_MAP: 0x25460137 + RX_POLARITY_FLIP: 0xde + + ? + PC_PM_ID: 39 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x24563017 + TX_POLARITY_FLIP: 0xd3 + RX_LANE_MAP: 0x35217640 + RX_POLARITY_FLIP: 0x91 + + ? + PC_PM_ID: 40 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0xbb + RX_LANE_MAP: 0x04571326 + RX_POLARITY_FLIP: 0x9f + + ? + PC_PM_ID: 41 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x21743065 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x47532610 + RX_POLARITY_FLIP: 0x2b + + ? + PC_PM_ID: 42 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0x22 + RX_LANE_MAP: 0x25460137 + RX_POLARITY_FLIP: 0x56 + + ? + PC_PM_ID: 43 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23714065 + TX_POLARITY_FLIP: 0x87 + RX_LANE_MAP: 0x35127640 + RX_POLARITY_FLIP: 0x33 + + ? + PC_PM_ID: 44 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0xfa + RX_LANE_MAP: 0x04571326 + RX_POLARITY_FLIP: 0xff + + ? + PC_PM_ID: 45 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23714065 + TX_POLARITY_FLIP: 0x3f + RX_LANE_MAP: 0x47532610 + RX_POLARITY_FLIP: 0x33 + + ? + PC_PM_ID: 46 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0xf3 + RX_LANE_MAP: 0x25460137 + RX_POLARITY_FLIP: 0xb4 + + ? + PC_PM_ID: 47 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23714065 + TX_POLARITY_FLIP: 0x8e + RX_LANE_MAP: 0x35217640 + RX_POLARITY_FLIP: 0x71 + + ? + PC_PM_ID: 48 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x05217634 + TX_POLARITY_FLIP: 0x6a + RX_LANE_MAP: 0x03561427 + RX_POLARITY_FLIP: 0xf9 + + ? + PC_PM_ID: 49 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13540267 + TX_POLARITY_FLIP: 0x2b + RX_LANE_MAP: 0x10753264 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 50 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14706235 + TX_POLARITY_FLIP: 0x62 + RX_LANE_MAP: 0x56234701 + RX_POLARITY_FLIP: 0x8f + + ? + PC_PM_ID: 51 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13740265 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x56234701 + RX_POLARITY_FLIP: 0x62 + + ? + PC_PM_ID: 52 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56204731 + TX_POLARITY_FLIP: 0xab + RX_LANE_MAP: 0x31652074 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 53 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13740265 + TX_POLARITY_FLIP: 0x22 + RX_LANE_MAP: 0x46135702 + RX_POLARITY_FLIP: 0xae + + ? + PC_PM_ID: 54 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76204531 + TX_POLARITY_FLIP: 0xb3 + RX_LANE_MAP: 0x31624075 + RX_POLARITY_FLIP: 0xbf + + ? + PC_PM_ID: 55 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13740265 + TX_POLARITY_FLIP: 0xaa + RX_LANE_MAP: 0x26135704 + RX_POLARITY_FLIP: 0xbf + + ? + PC_PM_ID: 56 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76204531 + TX_POLARITY_FLIP: 0xbf + RX_LANE_MAP: 0x31642075 + RX_POLARITY_FLIP: 0xae + + ? + PC_PM_ID: 57 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x13740265 + TX_POLARITY_FLIP: 0x33 + RX_LANE_MAP: 0x46135702 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 58 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76204531 + TX_POLARITY_FLIP: 0xae + RX_LANE_MAP: 0x31642075 + RX_POLARITY_FLIP: 0x26 + + ? + PC_PM_ID: 59 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46237015 + TX_POLARITY_FLIP: 0xad + RX_LANE_MAP: 0x71634250 + RX_POLARITY_FLIP: 0x37 + + ? + PC_PM_ID: 60 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x20347561 + TX_POLARITY_FLIP: 0x27 + RX_LANE_MAP: 0x04625137 + RX_POLARITY_FLIP: 0x9d + + ? + PC_PM_ID: 61 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x56127430 + TX_POLARITY_FLIP: 0xcc + RX_LANE_MAP: 0x21650347 + RX_POLARITY_FLIP: 0x37 + + ? + PC_PM_ID: 62 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x64305712 + TX_POLARITY_FLIP: 0xb3 + RX_LANE_MAP: 0x03472165 + RX_POLARITY_FLIP: 0xc8 + + ? + PC_PM_ID: 63 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x12563074 + TX_POLARITY_FLIP: 0xcc + RX_LANE_MAP: 0x12563074 + RX_POLARITY_FLIP: 0xc8 + + ? + PC_PM_ID: 64 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x64305712 + TX_POLARITY_FLIP: 0xb3 + RX_LANE_MAP: 0x03472165 + RX_POLARITY_FLIP: 0xc8 + +... + +--- +device: + 0: + PC_PORT_PHYS_MAP: + ? + PORT_ID: 1 + : + PC_PHYS_PORT_ID: 1 + ? + PORT_ID: 5 + : + PC_PHYS_PORT_ID: 5 + ? + PORT_ID: 9 + : + PC_PHYS_PORT_ID: 9 + ? + PORT_ID: 13 + : + PC_PHYS_PORT_ID: 13 + ? + PORT_ID: 17 + : + PC_PHYS_PORT_ID: 17 + ? + PORT_ID: 21 + : + PC_PHYS_PORT_ID: 21 + ? + PORT_ID: 25 + : + PC_PHYS_PORT_ID: 25 + ? + PORT_ID: 29 + : + PC_PHYS_PORT_ID: 29 + ? + PORT_ID: 34 + : + PC_PHYS_PORT_ID: 33 + ? + PORT_ID: 38 + : + PC_PHYS_PORT_ID: 37 + ? + PORT_ID: 42 + : + PC_PHYS_PORT_ID: 41 + ? + PORT_ID: 46 + : + PC_PHYS_PORT_ID: 45 + ? + PORT_ID: 51 + : + PC_PHYS_PORT_ID: 49 + ? + PORT_ID: 55 + : + PC_PHYS_PORT_ID: 53 + ? + PORT_ID: 59 + : + PC_PHYS_PORT_ID: 57 + ? + PORT_ID: 63 + : + PC_PHYS_PORT_ID: 61 + ? + PORT_ID: 68 + : + PC_PHYS_PORT_ID: 65 + ? + PORT_ID: 72 + : + PC_PHYS_PORT_ID: 69 + ? + PORT_ID: 76 + : + PC_PHYS_PORT_ID: 73 + ? + PORT_ID: 80 + : + PC_PHYS_PORT_ID: 77 + ? + PORT_ID: 85 + : + PC_PHYS_PORT_ID: 81 + ? + PORT_ID: 89 + : + PC_PHYS_PORT_ID: 85 + ? + PORT_ID: 93 + : + PC_PHYS_PORT_ID: 89 + ? + PORT_ID: 97 + : + PC_PHYS_PORT_ID: 93 + ? + PORT_ID: 102 + : + PC_PHYS_PORT_ID: 97 + ? + PORT_ID: 106 + : + PC_PHYS_PORT_ID: 101 + ? + PORT_ID: 110 + : + PC_PHYS_PORT_ID: 105 + ? + PORT_ID: 114 + : + PC_PHYS_PORT_ID: 109 + ? + PORT_ID: 119 + : + PC_PHYS_PORT_ID: 113 + ? + PORT_ID: 123 + : + PC_PHYS_PORT_ID: 117 + ? + PORT_ID: 127 + : + PC_PHYS_PORT_ID: 121 + ? + PORT_ID: 131 + : + PC_PHYS_PORT_ID: 125 + ? + PORT_ID: 136 + : + PC_PHYS_PORT_ID: 129 + ? + PORT_ID: 140 + : + PC_PHYS_PORT_ID: 133 + ? + PORT_ID: 144 + : + PC_PHYS_PORT_ID: 137 + ? + PORT_ID: 148 + : + PC_PHYS_PORT_ID: 141 + ? + PORT_ID: 153 + : + PC_PHYS_PORT_ID: 145 + ? + PORT_ID: 157 + : + PC_PHYS_PORT_ID: 149 + ? + PORT_ID: 161 + : + PC_PHYS_PORT_ID: 153 + ? + PORT_ID: 165 + : + PC_PHYS_PORT_ID: 157 + ? + PORT_ID: 170 + : + PC_PHYS_PORT_ID: 161 + ? + PORT_ID: 174 + : + PC_PHYS_PORT_ID: 165 + ? + PORT_ID: 178 + : + PC_PHYS_PORT_ID: 169 + ? + PORT_ID: 182 + : + PC_PHYS_PORT_ID: 173 + ? + PORT_ID: 187 + : + PC_PHYS_PORT_ID: 177 + ? + PORT_ID: 191 + : + PC_PHYS_PORT_ID: 181 + ? + PORT_ID: 195 + : + PC_PHYS_PORT_ID: 185 + ? + PORT_ID: 199 + : + PC_PHYS_PORT_ID: 189 + ? + PORT_ID: 204 + : + PC_PHYS_PORT_ID: 193 + ? + PORT_ID: 208 + : + PC_PHYS_PORT_ID: 197 + ? + PORT_ID: 212 + : + PC_PHYS_PORT_ID: 201 + ? + PORT_ID: 216 + : + PC_PHYS_PORT_ID: 205 + ? + PORT_ID: 221 + : + PC_PHYS_PORT_ID: 209 + ? + PORT_ID: 225 + : + PC_PHYS_PORT_ID: 213 + ? + PORT_ID: 229 + : + PC_PHYS_PORT_ID: 217 + ? + PORT_ID: 233 + : + PC_PHYS_PORT_ID: 221 + ? + PORT_ID: 238 + : + PC_PHYS_PORT_ID: 225 + ? + PORT_ID: 242 + : + PC_PHYS_PORT_ID: 229 + ? + PORT_ID: 246 + : + PC_PHYS_PORT_ID: 233 + ? + PORT_ID: 250 + : + PC_PHYS_PORT_ID: 237 + ? + PORT_ID: 255 + : + PC_PHYS_PORT_ID: 241 + ? + PORT_ID: 259 + : + PC_PHYS_PORT_ID: 245 + ? + PORT_ID: 263 + : + PC_PHYS_PORT_ID: 249 + ? + PORT_ID: 267 + : + PC_PHYS_PORT_ID: 253 +... + +--- +device: + 0: + PC_PORT: + ? + PORT_ID: [1, 5, 9, 13, + 17, 21, 25, 29, + 34, 38, 42, 46, + 51, 55, 59, 63, + 68, 72, 76, 80, + 85, 89, 93, 97, + 102, 106, 110, 114, + 119, 123, 127, 131, + 136, 140, 144, 148, + 153, 157, 161, 165, + 170, 174, 178, 182, + 187, 191, 195, 199, + 204, 208, 212, 216, + 221, 225, 229, 233, + 238, 242, 246, 250, + 255, 259, 263, 267] + : + ENABLE: 0 + SPEED: 400000 + NUM_LANES: 8 + FEC_MODE: PC_FEC_RS544_2XN + MAX_FRAME_SIZE: 9416 + LINK_TRAINING: 0 +... + +--- +device: + 0: + TM_SCHEDULER_CONFIG: + NUM_MC_Q: NUM_MC_Q_4 + +... + + +--- +device: + 0: + PC_TX_TAPS: + ? + PORT_ID: 68 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 68 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 72 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 25 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 25 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 25 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 21 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 21 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 21 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 76 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 76 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 80 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 34 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 34 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 34 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 34 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 34 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 34 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 34 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 34 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 29 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 29 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 85 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 85 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 89 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 42 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 42 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 42 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 42 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 42 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 42 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 42 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 42 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 38 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 38 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 38 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 38 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 38 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 38 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 38 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 38 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 93 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 93 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 97 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 51 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 51 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 51 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 46 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 46 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 102 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 102 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 14 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 106 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 59 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 2 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 2 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 59 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 59 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 55 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 55 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 55 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 110 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 114 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 17 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 17 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 17 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 17 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 17 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 17 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 17 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 17 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 63 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 63 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 63 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 63 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 63 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 63 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 63 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 63 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 119 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 119 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 123 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 9 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 9 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 9 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 9 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 9 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 9 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 9 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 20 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 9 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 13 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 13 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 6 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 13 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 127 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 127 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 131 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 1 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 1 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 1 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 20 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 5 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 5 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 140 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 140 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 136 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 263 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 263 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 267 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 267 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 267 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 267 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 267 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 267 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 267 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 267 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 148 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 144 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 6 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 6 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 255 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 10 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 259 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 259 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 259 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 259 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 259 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 259 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 259 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 259 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 134 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 157 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 157 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 153 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 250 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 250 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 250 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 250 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 250 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 250 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 132 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 250 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 2 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 250 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 208 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 165 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 165 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 161 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 204 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 0 + TX_POST_SIGN: 0 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 204 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 216 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 216 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 174 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 174 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 170 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 212 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 212 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 212 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 212 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 212 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 212 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 212 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 212 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 225 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 225 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 182 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 182 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 182 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 178 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 178 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 221 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 221 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 221 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 221 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 221 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 221 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 221 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 221 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 233 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 191 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 187 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 187 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 187 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 187 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 187 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 187 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 187 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 12 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 187 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 144 + TX_POST: 2 + TX_POST_SIGN: 1 + TX_POST2: 0 + TX_POST2_SIGN: 0 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 4 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 229 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 229 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 229 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 242 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 242 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 8 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 242 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 199 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 199 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 195 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 195 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 195 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 195 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 195 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 195 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 195 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 195 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 16 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 0 + TX_POST3_SIGN: 0 + TX_PRE: 8 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 12 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 238 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 238 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 238 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 246 + LANE_INDEX: [0] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 246 + LANE_INDEX: [1] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 246 + LANE_INDEX: [2] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 246 + LANE_INDEX: [3] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 140 + TX_POST: 4 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 246 + LANE_INDEX: [4] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 246 + LANE_INDEX: [5] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 + ? + PORT_ID: 246 + LANE_INDEX: [6] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 136 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 2 + ? + PORT_ID: 246 + LANE_INDEX: [7] + : + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TX_POST_AUTO: 0 + TX_MAIN_AUTO: 0 + TX_PRE_AUTO: 0 + TX_PRE2_AUTO: 0 + TX_POST2_AUTO: 0 + TX_POST3_AUTO: 0 + TX_AMP_AUTO: 0 + TX_MAIN: 138 + TX_POST: 8 + TX_POST_SIGN: 1 + TX_POST2: 4 + TX_POST2_SIGN: 1 + TX_POST3: 4 + TX_POST3_SIGN: 1 + TX_PRE: 16 + TX_PRE_SIGN: 1 + TX_PRE2: 0 +... diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/custom_led.bin b/device/micas/x86_64-micas_m2-w6930-64qc-r0/custom_led.bin new file mode 100644 index 000000000000..70920dd922cf Binary files /dev/null and b/device/micas/x86_64-micas_m2-w6930-64qc-r0/custom_led.bin differ diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/default_sku b/device/micas/x86_64-micas_m2-w6930-64qc-r0/default_sku new file mode 100644 index 000000000000..1adddd2977c0 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/default_sku @@ -0,0 +1 @@ +M2-W6930-64QC l2 diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/dev.xml b/device/micas/x86_64-micas_m2-w6930-64qc-r0/dev.xml new file mode 100644 index 000000000000..5b1654e2bb90 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/dev.xml @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/fru.py b/device/micas/x86_64-micas_m2-w6930-64qc-r0/fru.py new file mode 100644 index 000000000000..f95164e03601 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/fru.py @@ -0,0 +1,961 @@ +#!/usr/bin/python3 +import collections +from datetime import datetime, timedelta +from bitarray import bitarray + + +__DEBUG__ = "N" + + +class FruException(Exception): + def __init__(self, message='fruerror', code=-100): + err = 'errcode: {0} message:{1}'.format(code, message) + Exception.__init__(self, err) + self.code = code + self.message = message + + +def e_print(err): + print("ERROR: " + err) + + +def d_print(debug_info): + if __DEBUG__ == "Y": + print(debug_info) + + +class FruUtil(): + @staticmethod + def decodeLength(value): + a = bitarray(8) + a.setall(True) + a[0:1] = 0 + a[1:2] = 0 + x = ord(a.tobytes()) + return x & ord(value) + + @staticmethod + def minToData(): + starttime = datetime(1996, 1, 1, 0, 0, 0) + endtime = datetime.now() + seconds = (endtime - starttime).total_seconds() + mins = seconds // 60 + m = int(round(mins)) + return m + + @staticmethod + def getTimeFormat(): + return datetime.now().strftime('%Y-%m-%d') + + @staticmethod + def getTypeLength(value): + if value is None or len(value) == 0: + return 0 + a = bitarray(8) + a.setall(False) + a[0:1] = 1 + a[1:2] = 1 + x = ord(a.tobytes()) + return x | len(value) + + @staticmethod + def checksum(b): + result = 0 + for item in b: + result += ord(item) + return (0x100 - (result & 0xff)) & 0xff + + +class BaseArea(object): + SUGGESTED_SIZE_COMMON_HEADER = 8 + SUGGESTED_SIZE_INTERNAL_USE_AREA = 72 + SUGGESTED_SIZE_CHASSIS_INFO_AREA = 32 + SUGGESTED_SIZE_BOARD_INFO_AREA = 80 + SUGGESTED_SIZE_PRODUCT_INFO_AREA = 80 + + INITVALUE = b'\x00' + resultvalue = INITVALUE * 256 + COMMON_HEAD_VERSION = b'\x01' + __childList = None + + def __init__(self, name="", size=0, offset=0): + self.__childList = [] + self._offset = offset + self.name = name + self._size = size + self._isPresent = False + self._data = b'\x00' * size + + @property + def childList(self): + return self.__childList + + @childList.setter + def childList(self, value): + self.__childList = value + + @property + def offset(self): + return self._offset + + @offset.setter + def offset(self, value): + self._offset = value + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + self._size = value + + @property + def data(self): + return self._data + + @data.setter + def data(self, value): + self._data = value + + @property + def isPresent(self): + return self._isPresent + + @isPresent.setter + def isPresent(self, value): + self._isPresent = value + + +class InternalUseArea(BaseArea): + pass + + +class ChassisInfoArea(BaseArea): + pass + + +class BoardInfoArea(BaseArea): + _boardTime = None + _fields = None + _mfg_date = None + areaversion = None + _boardversion = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "mfg_date : %s \n" \ + "boardManufacturer : %s \n" \ + "boardProductName : %s \n" \ + "boardSerialNumber : %s \n" \ + "boardPartNumber : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.boardversion), self.size, + self.language, self.getMfgRealData(), + self.boardManufacturer, self.boardProductName, + self.boardSerialNumber, self.boardPartNumber, + self.fruFileId) + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "boardextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["boardversion"] = ord(self.boardversion) + dic["boardlength"] = self.size + dic["boardlanguage"] = self.language + dic["boardmfg_date"] = self.getMfgRealData() + dic["boardManufacturer"] = self.boardManufacturer + dic["boardProductName"] = self.boardProductName + dic["boardSerialNumber"] = self.boardSerialNumber + dic["boardPartNumber"] = self.boardPartNumber + dic["boardfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] + index += 1 + d_print("decode length :%d class size:%d" % + ((ord(self.data[index]) * 8), self.size)) + index += 2 + + timetmp = self.data[index: index + 3] + self.mfg_date = ord(timetmp[0]) | ( + ord(timetmp[1]) << 8) | (ord(timetmp[2]) << 16) + d_print("decode getMfgRealData :%s" % self.getMfgRealData()) + index += 3 + + templen = FruUtil.decodeLength(self.data[index]) + self.boardManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardManufacturer:%s" % self.boardManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardProductName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardProductName:%s" % self.boardProductName) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardSerialNumber:%s" % self.boardSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardPartNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardPartNumber:%s" % self.boardPartNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if self.data[index] != chr(0xc1): + templen = FruUtil.decodeLength(self.data[index]) + tmpval = self.data[index + 1: index + templen + 1] + setattr(self, valtmp, tmpval) + index += templen + 1 + d_print("decode boardextra%d:%s" % (i, tmpval)) + else: + break + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("boardInfoArea version:%x" % ord(self.boardversion)) + d_print("boardInfoArea length:%d" % self.size) + d_print("boardInfoArea language:%x" % self.language) + self.mfg_date = FruUtil.minToData() + d_print("boardInfoArea mfg_date:%x" % self.mfg_date) + + self.data = chr(ord(self.boardversion)) + \ + chr(self.size // 8) + chr(self.language) + + self.data += chr(self.mfg_date & 0xFF) + self.data += chr((self.mfg_date >> 8) & 0xFF) + self.data += chr((self.mfg_date >> 16) & 0xFF) + + d_print("boardInfoArea boardManufacturer:%s" % self.boardManufacturer) + typelength = FruUtil.getTypeLength(self.boardManufacturer) + self.data += chr(typelength) + self.data += self.boardManufacturer + + d_print("boardInfoArea boardProductName:%s" % self.boardProductName) + self.data += chr(FruUtil.getTypeLength(self.boardProductName)) + self.data += self.boardProductName + + d_print("boardInfoArea boardSerialNumber:%s" % self.boardSerialNumber) + self.data += chr(FruUtil.getTypeLength(self.boardSerialNumber)) + self.data += self.boardSerialNumber + + d_print("boardInfoArea boardPartNumber:%s" % self.boardPartNumber) + self.data += chr(FruUtil.getTypeLength(self.boardPartNumber)) + self.data += self.boardPartNumber + + d_print("boardInfoArea fruFileId:%s" % self.fruFileId) + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea boardextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + d_print("self data:%d" % len(self.data)) + d_print("self size:%d" % self.size) + d_print("adjust size:%d" % (self.size - len(self.data) - 1)) + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + + # checksum + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + def getMfgRealData(self): + starttime = datetime(1996, 1, 1, 0, 0, 0) + mactime = starttime + timedelta(minutes=self.mfg_date) + return mactime + + @property + def language(self): + self._language = 25 + return self._language + + @property + def mfg_date(self): + return self._mfg_date + + @mfg_date.setter + def mfg_date(self, val): + self._mfg_date = val + + @property + def boardversion(self): + self._boardversion = self.COMMON_HEAD_VERSION + return self._boardversion + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, val): + self._FRUFileID = val + + @property + def boardPartNumber(self): + return self._boardPartNumber + + @boardPartNumber.setter + def boardPartNumber(self, val): + self._boardPartNumber = val + + @property + def boardSerialNumber(self): + return self._boardSerialNumber + + @boardSerialNumber.setter + def boardSerialNumber(self, val): + self._boardSerialNumber = val + + @property + def boardProductName(self): + return self._boradProductName + + @boardProductName.setter + def boardProductName(self, val): + self._boradProductName = val + + @property + def boardManufacturer(self): + return self._boardManufacturer + + @boardManufacturer.setter + def boardManufacturer(self, val): + self._boardManufacturer = val + + @property + def boardTime(self): + return self._boardTime + + @boardTime.setter + def boardTime(self, val): + self._boardTime = val + + @property + def fields(self): + return self._fields + + @fields.setter + def fields(self, val): + self._fields = val + + +class ProductInfoArea(BaseArea): + _productManufacturer = None + _productAssetTag = None + _FRUFileID = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "productManufacturer : %s \n" \ + "productName : %s \n" \ + "productPartModelName: %s \n" \ + "productVersion : %s \n" \ + "productSerialNumber : %s \n" \ + "productAssetTag : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.areaversion), self.size, + self.language, self.productManufacturer, + self.productName, self.productPartModelName, + self.productVersion, self.productSerialNumber, + self.productAssetTag, self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "productextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["productversion"] = ord(self.areaversion) + dic["productlength"] = self.size + dic["productlanguage"] = self.language + dic["productManufacturer"] = self.productManufacturer + dic["productName"] = self.productName + dic["productPartModelName"] = self.productPartModelName + dic["productVersion"] = int(self.productVersion, 16) + dic["productSerialNumber"] = self.productSerialNumber + dic["productAssetTag"] = self.productAssetTag + dic["productfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] # 0 + index += 1 + d_print("decode length %d" % (ord(self.data[index]) * 8)) + d_print("class size %d" % self.size) + index += 2 + + templen = FruUtil.decodeLength(self.data[index]) + self.productManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productManufacturer:%s" % self.productManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.productName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productName:%s" % self.productName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productPartModelName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productPartModelName:%s" % self.productPartModelName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productVersion = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productVersion:%s" % self.productVersion) + + templen = FruUtil.decodeLength(self.data[index]) + self.productSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productSerialNumber:%s" % self.productSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.productAssetTag = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productAssetTag:%s" % self.productAssetTag) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if self.data[index] != chr(0xc1) and index < self.size - 1: + templen = FruUtil.decodeLength(self.data[index]) + if templen == 0: + break + tmpval = self.data[index + 1: index + templen + 1] + d_print("decode boardextra%d:%s" % (i, tmpval)) + setattr(self, valtmp, tmpval) + index += templen + 1 + else: + break + + @property + def productVersion(self): + return self._productVersion + + @productVersion.setter + def productVersion(self, name): + self._productVersion = name + + @property + def areaversion(self): + self._areaversion = self.COMMON_HEAD_VERSION + return self._areaversion + + @areaversion.setter + def areaversion(self, name): + self._areaversion = name + + @property + def language(self): + self._language = 25 + return self._language + + @property + def productManufacturer(self): + return self._productManufacturer + + @productManufacturer.setter + def productManufacturer(self, name): + self._productManufacturer = name + + @property + def productName(self): + return self._productName + + @productName.setter + def productName(self, name): + self._productName = name + + @property + def productPartModelName(self): + return self._productPartModelName + + @productPartModelName.setter + def productPartModelName(self, name): + self._productPartModelName = name + + @property + def productSerialNumber(self): + return self._productSerialNumber + + @productSerialNumber.setter + def productSerialNumber(self, name): + self._productSerialNumber = name + + @property + def productAssetTag(self): + return self._productAssetTag + + @productAssetTag.setter + def productAssetTag(self, name): + self._productAssetTag = name + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, name): + self._FRUFileID = name + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("product version:%x" % ord(self.areaversion)) + d_print("product length:%d" % self.size) + d_print("product language:%x" % self.language) + self.data = chr(ord(self.areaversion)) + \ + chr(self.size // 8) + chr(self.language) + + typelength = FruUtil.getTypeLength(self.productManufacturer) + self.data += chr(typelength) + self.data += self.productManufacturer + + self.data += chr(FruUtil.getTypeLength(self.productName)) + self.data += self.productName + + self.data += chr(FruUtil.getTypeLength(self.productPartModelName)) + self.data += self.productPartModelName + + self.data += chr(FruUtil.getTypeLength(self.productVersion)) + self.data += self.productVersion + + self.data += chr(FruUtil.getTypeLength(self.productSerialNumber)) + self.data += self.productSerialNumber + + self.data += chr(FruUtil.getTypeLength(self.productAssetTag)) + if self.productAssetTag is not None: + self.data += self.productAssetTag + + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea productextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + d_print("self.data:%d" % len(self.data)) + d_print("self.size:%d" % self.size) + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + +class MultiRecordArea(BaseArea): + pass + + +class Field(object): + + def __init__(self, fieldType="ASCII", fieldData=""): + self.fieldData = fieldData + self.fieldType = fieldType + + @property + def fieldType(self): + return self.fieldType + + @property + def fieldData(self): + return self.fieldData + + +class ipmifru(BaseArea): + _BoardInfoArea = None + _ProductInfoArea = None + _InternalUseArea = None + _ChassisInfoArea = None + _multiRecordArea = None + _productinfoAreaOffset = BaseArea.INITVALUE + _boardInfoAreaOffset = BaseArea.INITVALUE + _internalUserAreaOffset = BaseArea.INITVALUE + _chassicInfoAreaOffset = BaseArea.INITVALUE + _multiRecordAreaOffset = BaseArea.INITVALUE + _bindata = None + _bodybin = None + _version = BaseArea.COMMON_HEAD_VERSION + _zeroCheckSum = None + _frusize = 256 + + def __str__(self): + tmpstr = "" + if self.boardInfoArea.isPresent: + tmpstr += "\nboardinfoarea: \n" + tmpstr += self.boardInfoArea.__str__() + if self.productInfoArea.isPresent: + tmpstr += "\nproductinfoarea: \n" + tmpstr += self.productInfoArea.__str__() + return tmpstr + + def decodeBin(self, eeprom): + commonHead = eeprom[0:8] + d_print("decode version %x" % ord(commonHead[0])) + if ord(self.COMMON_HEAD_VERSION) != ord(commonHead[0]): + raise FruException("HEAD VERSION error,not Fru format!", -10) + if FruUtil.checksum(commonHead[0:7]) != ord(commonHead[7]): + strtemp = "check header checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(commonHead[0:7]), ord(commonHead[7])) + raise FruException(strtemp, -3) + if ord(commonHead[1]) != ord(self.INITVALUE): + d_print("Internal Use Area is present") + self.internalUseArea = InternalUseArea( + name="Internal Use Area", size=self.SUGGESTED_SIZE_INTERNAL_USE_AREA) + self.internalUseArea.isPresent = True + self.internalUserAreaOffset = ord(commonHead[1]) + self.internalUseArea.data = eeprom[self.internalUserAreaOffset * 8: ( + self.internalUserAreaOffset * 8 + self.internalUseArea.size)] + if ord(commonHead[2]) != ord(self.INITVALUE): + d_print("Chassis Info Area is present") + self.chassisInfoArea = ChassisInfoArea( + name="Chassis Info Area", size=self.SUGGESTED_SIZE_CHASSIS_INFO_AREA) + self.chassisInfoArea.isPresent = True + self.chassicInfoAreaOffset = ord(commonHead[2]) + self.chassisInfoArea.data = eeprom[self.chassicInfoAreaOffset * 8: ( + self.chassicInfoAreaOffset * 8 + self.chassisInfoArea.size)] + if ord(commonHead[3]) != ord(self.INITVALUE): + self.boardInfoArea = BoardInfoArea( + name="Board Info Area", size=self.SUGGESTED_SIZE_BOARD_INFO_AREA) + self.boardInfoArea.isPresent = True + self.boardInfoAreaOffset = ord(commonHead[3]) + self.boardInfoArea.size = ord( + eeprom[self.boardInfoAreaOffset * 8 + 1]) * 8 + d_print("Board Info Area is present size:%d" % + (self.boardInfoArea.size)) + self.boardInfoArea.data = eeprom[self.boardInfoAreaOffset * 8: ( + self.boardInfoAreaOffset * 8 + self.boardInfoArea.size)] + if FruUtil.checksum(self.boardInfoArea.data[:-1]) != ord(self.boardInfoArea.data[-1:]): + strtmp = "check boardInfoArea checksum error[cal:%02x data:%02x]" % \ + (FruUtil.checksum( + self.boardInfoArea.data[:-1]), ord(self.boardInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.boardInfoArea.decodedata() + if ord(commonHead[4]) != ord(self.INITVALUE): + d_print("Product Info Area is present") + self.productInfoArea = ProductInfoArea( + name="Product Info Area ", size=self.SUGGESTED_SIZE_PRODUCT_INFO_AREA) + self.productInfoArea.isPresent = True + self.productinfoAreaOffset = ord(commonHead[4]) + d_print("length offset value: %02x" % + ord(eeprom[self.productinfoAreaOffset * 8 + 1])) + self.productInfoArea.size = ord( + eeprom[self.productinfoAreaOffset * 8 + 1]) * 8 + d_print("Product Info Area is present size:%d" % + (self.productInfoArea.size)) + + self.productInfoArea.data = eeprom[self.productinfoAreaOffset * 8: ( + self.productinfoAreaOffset * 8 + self.productInfoArea.size)] + if FruUtil.checksum(self.productInfoArea.data[:-1]) != ord(self.productInfoArea.data[-1:]): + strtmp = "check productInfoArea checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(self.productInfoArea.data[:-1]), ord(self.productInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.productInfoArea.decodedata() + if ord(commonHead[5]) != ord(self.INITVALUE): + self.multiRecordArea = MultiRecordArea( + name="MultiRecord record Area ") + d_print("MultiRecord record present") + self.multiRecordArea.isPresent = True + self.multiRecordAreaOffset = ord(commonHead[5]) + self.multiRecordArea.data = eeprom[self.multiRecordAreaOffset * 8: ( + self.multiRecordAreaOffset * 8 + self.multiRecordArea.size)] + + def initDefault(self): + self.version = self.COMMON_HEAD_VERSION + self.internalUserAreaOffset = self.INITVALUE + self.chassicInfoAreaOffset = self.INITVALUE + self.boardInfoAreaOffset = self.INITVALUE + self.productinfoAreaOffset = self.INITVALUE + self.multiRecordAreaOffset = self.INITVALUE + self.zeroCheckSum = self.INITVALUE + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + self.productInfoArea = None + self.internalUseArea = None + self.boardInfoArea = None + self.chassisInfoArea = None + self.multiRecordArea = None + # self.recalcute() + + @property + def version(self): + return self._version + + @version.setter + def version(self, name): + self._version = name + + @property + def internalUserAreaOffset(self): + return self._internalUserAreaOffset + + @internalUserAreaOffset.setter + def internalUserAreaOffset(self, obj): + self._internalUserAreaOffset = obj + + @property + def chassicInfoAreaOffset(self): + return self._chassicInfoAreaOffset + + @chassicInfoAreaOffset.setter + def chassicInfoAreaOffset(self, obj): + self._chassicInfoAreaOffset = obj + + @property + def productinfoAreaOffset(self): + return self._productinfoAreaOffset + + @productinfoAreaOffset.setter + def productinfoAreaOffset(self, obj): + self._productinfoAreaOffset = obj + + @property + def boardInfoAreaOffset(self): + return self._boardInfoAreaOffset + + @boardInfoAreaOffset.setter + def boardInfoAreaOffset(self, obj): + self._boardInfoAreaOffset = obj + + @property + def multiRecordAreaOffset(self): + return self._multiRecordAreaOffset + + @multiRecordAreaOffset.setter + def multiRecordAreaOffset(self, obj): + self._multiRecordAreaOffset = obj + + @property + def zeroCheckSum(self): + return self._zeroCheckSum + + @zeroCheckSum.setter + def zeroCheckSum(self, obj): + self._zeroCheckSum = obj + + @property + def productInfoArea(self): + return self._ProductInfoArea + + @productInfoArea.setter + def productInfoArea(self, obj): + self._ProductInfoArea = obj + + @property + def internalUseArea(self): + return self._InternalUseArea + + @internalUseArea.setter + def internalUseArea(self, obj): + self.internalUseArea = obj + + @property + def boardInfoArea(self): + return self._BoardInfoArea + + @boardInfoArea.setter + def boardInfoArea(self, obj): + self._BoardInfoArea = obj + + @property + def chassisInfoArea(self): + return self._ChassisInfoArea + + @chassisInfoArea.setter + def chassisInfoArea(self, obj): + self._ChassisInfoArea = obj + + @property + def multiRecordArea(self): + return self._multiRecordArea + + @multiRecordArea.setter + def multiRecordArea(self, obj): + self._multiRecordArea = obj + + @property + def bindata(self): + return self._bindata + + @bindata.setter + def bindata(self, obj): + self._bindata = obj + + @property + def bodybin(self): + return self._bodybin + + @bodybin.setter + def bodybin(self, obj): + self._bodybin = obj + + def recalcuteCommonHead(self): + self.bindata = "" + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + d_print("common Header %d" % self.offset) + d_print("fru eeprom size %d" % self._frusize) + if self.internalUseArea is not None and self.internalUseArea.isPresent: + self.internalUserAreaOffset = self.offset // 8 + self.offset += self.internalUseArea.size + d_print("internalUseArea is present offset:%d" % self.offset) + + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + self.chassicInfoAreaOffset = self.offset // 8 + self.offset += self.chassisInfoArea.size + d_print("chassisInfoArea is present offset:%d" % self.offset) + + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + self.boardInfoAreaOffset = self.offset // 8 + self.offset += self.boardInfoArea.size + d_print("boardInfoArea is present offset:%d" % self.offset) + d_print("boardInfoArea is present size:%d" % + self.boardInfoArea.size) + + if self.productInfoArea is not None and self.productInfoArea.isPresent: + self.productinfoAreaOffset = self.offset // 8 + self.offset += self.productInfoArea.size + d_print("productInfoArea is present offset:%d" % self.offset) + + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + self.multiRecordAreaOffset = self.offset // 8 + d_print("multiRecordArea is present offset:%d" % self.offset) + + if self.internalUserAreaOffset == self.INITVALUE: + self.internalUserAreaOffset = 0 + if self.productinfoAreaOffset == self.INITVALUE: + self.productinfoAreaOffset = 0 + if self.chassicInfoAreaOffset == self.INITVALUE: + self.chassicInfoAreaOffset = 0 + if self.boardInfoAreaOffset == self.INITVALUE: + self.boardInfoAreaOffset = 0 + if self.multiRecordAreaOffset == self.INITVALUE: + self.multiRecordAreaOffset = 0 + + self.zeroCheckSum = (0x100 - ord(self.version) - self.internalUserAreaOffset - self.chassicInfoAreaOffset - self.productinfoAreaOffset + - self.boardInfoAreaOffset - self.multiRecordAreaOffset) & 0xff + d_print("zerochecksum:%x" % self.zeroCheckSum) + self.data = "" + self.data += chr(self.version[0]) + chr(self.internalUserAreaOffset) + chr(self.chassicInfoAreaOffset) + chr( + self.boardInfoAreaOffset) + chr(self.productinfoAreaOffset) + chr(self.multiRecordAreaOffset) + chr(self.INITVALUE[0]) + chr(self.zeroCheckSum) + + self.bindata = self.data + self.bodybin + totallen = len(self.bindata) + d_print("totallen %d" % totallen) + if totallen < self._frusize: + self.bindata = self.bindata.ljust(self._frusize, chr(self.INITVALUE[0])) + else: + raise FruException('bin data more than %d' % self._frusize, -2) + + def recalcutebin(self): + self.bodybin = "" + if self.internalUseArea is not None and self.internalUseArea.isPresent: + d_print("internalUseArea present") + self.bodybin += self.internalUseArea.data + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + d_print("chassisInfoArea present") + self.bodybin += self.chassisInfoArea.data + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + d_print("boardInfoArea present") + self.boardInfoArea.recalcute() + self.bodybin += self.boardInfoArea.data + if self.productInfoArea is not None and self.productInfoArea.isPresent: + d_print("productInfoAreapresent") + self.productInfoArea.recalcute() + self.bodybin += self.productInfoArea.data + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + d_print("multiRecordArea present") + self.bodybin += self.productInfoArea.data + + def recalcute(self, fru_eeprom_size=256): + self._frusize = fru_eeprom_size + self.recalcutebin() + self.recalcuteCommonHead() + + def setValue(self, area, field, value): + tmp_area = getattr(self, area, None) + if tmp_area is not None: + tmp_area.fruSetValue(field, value) diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/installer.conf b/device/micas/x86_64-micas_m2-w6930-64qc-r0/installer.conf new file mode 100644 index 000000000000..7a9fec8cc99c --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/installer.conf @@ -0,0 +1,2 @@ +CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="intel_idle.max_cstate=0 idle=poll" \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/media_settings.json b/device/micas/x86_64-micas_m2-w6930-64qc-r0/media_settings.json new file mode 100644 index 000000000000..ae086bd70d54 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/media_settings.json @@ -0,0 +1,4100 @@ +{ + "PORT_MEDIA_SETTINGS": { + "0": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "1": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "2": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000000", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000084", + "lane5": "0x00000084", + "lane6": "0x00000084", + "lane7": "0x00000084" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff4", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "3": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x0000008C", + "lane2": "0x00000088", + "lane3": "0x0000008C", + "lane4": "0x00000084", + "lane5": "0x00000088", + "lane6": "0x00000084", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffff8", + "lane3": "0xfffffffc", + "lane4": "0xfffffff4", + "lane5": "0xfffffff8", + "lane6": "0xfffffff4", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "4": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "5": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "6": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x00000088", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff6", + "lane5": "0xfffffff6", + "lane6": "0xfffffff8", + "lane7": "0xfffffff6" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "7": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff6", + "lane5": "0xfffffff6", + "lane6": "0xfffffff6", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "8": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "9": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "10": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x00000088", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x00000088", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "11": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x0000008C", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x0000008A", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "12": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff4", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "13": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "14": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "15": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x0000008C", + "lane2": "0x0000008A", + "lane3": "0x0000008A", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "16": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "17": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff2", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffff4", + "lane2": "0xfffffffe", + "lane3": "0xfffffffc", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "18": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff0", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffc", + "lane5": "0xfffffff8", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "19": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008A", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "20": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "21": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "22": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x0000008C", + "lane7": "0x0000008A" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff8", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "23": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x0000008C", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "24": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "25": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "26": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff0", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xffffffec", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffffc", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "27": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffffa", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "28": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "29": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "30": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "31": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xffffffec", + "lane5": "0xfffffff0", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000084", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "32": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "33": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "34": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "35": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "36": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "37": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x00000090", + "lane1": "0x00000090", + "lane2": "0x00000090", + "lane3": "0x00000090", + "lane4": "0x00000090", + "lane5": "0x00000090", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffffe", + "lane1": "0xfffffffe", + "lane2": "0xfffffffe", + "lane3": "0xfffffffe", + "lane4": "0xfffffffe", + "lane5": "0xfffffffe", + "lane6": "0xfffffffe", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "38": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x0000008A", + "lane1": "0x00000088", + "lane2": "0x0000008A", + "lane3": "0x00000088", + "lane4": "0x0000008A", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffa", + "lane1": "0xfffffff8", + "lane2": "0xfffffffa", + "lane3": "0xfffffff6", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff6" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "39": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000084", + "lane3": "0x00000084", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000086" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "40": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "41": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "42": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000002", + "lane6": "0x00000000", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000088", + "lane4": "0x00000084", + "lane5": "0x00000084", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffe", + "lane7": "0xfffffffc" + } + } + }, + "43": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "44": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "45": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "46": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0x00000000", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "47": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x00000088", + "lane4": "0x0000008A", + "lane5": "0x0000008A", + "lane6": "0x0000008A", + "lane7": "0x0000008A" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffff8", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "48": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "49": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff4", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "50": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000000", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x00000088", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x0000008C", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "51": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008A", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008A", + "lane7": "0x0000008A" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "52": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000002", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff4" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "53": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000002", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000090", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff4", + "lane2": "0xfffffff4", + "lane3": "0xfffffff4", + "lane4": "0xfffffffc", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "54": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008A", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "55": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008A", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008A" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "56": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff4", + "lane5": "0xfffffff4", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "57": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000002", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff4", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x0000008C", + "lane6": "0x00000090", + "lane7": "0x00000090" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff4", + "lane7": "0xfffffffe" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "58": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000000", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x00000088", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffff8", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "59": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000000", + "lane2": "0x00000002", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff4", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x0000008C", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffffc", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffff8", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "60": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "61": { + "Default": { + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000002", + "lane5": "0x00000002", + "lane6": "0x00000002", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008C", + "lane2": "0x0000008C", + "lane3": "0x0000008C", + "lane4": "0x0000008C", + "lane5": "0x0000008C", + "lane6": "0x0000008C", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "62": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000002", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000002", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xfffffff4", + "lane1": "0xfffffff4", + "lane2": "0xfffffff0", + "lane3": "0xfffffff4", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0xfffffff8", + "lane1": "0xfffffff8", + "lane2": "0xfffffff8", + "lane3": "0xfffffff8", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + }, + "63": { + "Default": { + "pre2": { + "lane0": "0x00000002", + "lane1": "0x00000000", + "lane2": "0x00000002", + "lane3": "0x00000002", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000002", + "lane7": "0x00000000" + }, + "pre1": { + "lane0": "0xfffffff0", + "lane1": "0xfffffff0", + "lane2": "0xfffffff0", + "lane3": "0xfffffff0", + "lane4": "0xfffffff0", + "lane5": "0xfffffff0", + "lane6": "0xfffffff0", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x0000008C", + "lane1": "0x0000008A", + "lane2": "0x00000088", + "lane3": "0x0000008C", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008A" + }, + "post1": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffff8", + "lane3": "0xfffffffc", + "lane4": "0xfffffff8", + "lane5": "0xfffffff8", + "lane6": "0xfffffff8", + "lane7": "0xfffffff8" + }, + "post2": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + }, + "post3": { + "lane0": "0xfffffffc", + "lane1": "0xfffffffc", + "lane2": "0xfffffffc", + "lane3": "0xfffffffc", + "lane4": "0xfffffffc", + "lane5": "0xfffffffc", + "lane6": "0xfffffffc", + "lane7": "0xfffffffc" + } + } + } + } +} \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/monitor.py b/device/micas/x86_64-micas_m2-w6930-64qc-r0/monitor.py new file mode 100644 index 000000000000..5fc287892e50 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/monitor.py @@ -0,0 +1,402 @@ +#!/usr/bin/python3 +# * onboard temperature sensors +# * FAN trays +# * PSU +# +import os +from lxml import etree as ET +import glob +import json +from decimal import Decimal +from fru import ipmifru + + +MAILBOX_DIR = "/sys/bus/i2c/devices/" +BOARD_ID_PATH = "/sys/module/platform_common/parameters/dfd_my_type" +BOARD_AIRFLOW_PATH = "/etc/sonic/.airflow" + + +CONFIG_NAME = "dev.xml" + + +def byteTostr(val): + strtmp = '' + for value in val: + strtmp += chr(value) + return strtmp + + +def typeTostr(val): + if isinstance(val, bytes): + strtmp = byteTostr(val) + return strtmp + return val + + +def get_board_id(): + if not os.path.exists(BOARD_ID_PATH): + return "NA" + with open(BOARD_ID_PATH) as fd: + id_str = fd.read().strip() + return "0x%x" % (int(id_str, 10)) + + +def getboardairflow(): + if not os.path.exists(BOARD_AIRFLOW_PATH): + return "NA" + with open(BOARD_AIRFLOW_PATH) as fd: + airflow_str = fd.read().strip() + data = json.loads(airflow_str) + airflow = data.get("board", "NA") + return airflow + + +boardid = get_board_id() +boardairflow = getboardairflow() + + +DEV_XML_FILE_LIST = [ + "dev_" + boardid + "_" + boardairflow + ".xml", + "dev_" + boardid + ".xml", + "dev_" + boardairflow + ".xml", +] + + +def dev_file_read(path, offset, read_len): + retval = "ERR" + val_list = [] + msg = "" + ret = "" + fd = -1 + + if not os.path.exists(path): + return False, "%s %s not found" % (retval, path) + + try: + fd = os.open(path, os.O_RDONLY) + os.lseek(fd, offset, os.SEEK_SET) + ret = os.read(fd, read_len) + for item in ret: + val_list.append(item) + except Exception as e: + msg = str(e) + return False, "%s %s" % (retval, msg) + finally: + if fd > 0: + os.close(fd) + return True, val_list + + +def getPMCreg(location): + retval = 'ERR' + if not os.path.isfile(location): + return "%s %s notfound" % (retval, location) + try: + with open(location, 'r') as fd: + retval = fd.read() + except Exception as error: + return "ERR %s" % str(error) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +# Get a mailbox register +def get_pmc_register(reg_name): + retval = 'ERR' + mb_reg_file = reg_name + filepath = glob.glob(mb_reg_file) + if len(filepath) == 0: + return "%s %s notfound" % (retval, mb_reg_file) + mb_reg_file = filepath[0] + if not os.path.isfile(mb_reg_file): + # print mb_reg_file, 'not found !' + return "%s %s notfound" % (retval, mb_reg_file) + try: + with open(mb_reg_file, 'rb') as fd: + retval = fd.read() + retval = typeTostr(retval) + except Exception as error: + retval = "%s %s read failed, msg: %s" % (retval, mb_reg_file, str(error)) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +class checktype(): + def __init__(self, test1): + self.test1 = test1 + + @staticmethod + def getValue(location, bit, data_type, coefficient=1, addend=0): + try: + value_t = get_pmc_register(location) + if value_t.startswith("ERR") or value_t.startswith("NA"): + return value_t + if data_type == 1: + return float('%.1f' % ((float(value_t) / 1000) + addend)) + if data_type == 2: + return float('%.1f' % (float(value_t) / 100)) + if data_type == 3: + psu_status = int(value_t, 16) + return (psu_status & (1 << bit)) >> bit + if data_type == 4: + return int(value_t, 10) + if data_type == 5: + return float('%.1f' % (float(value_t) / 1000 / 1000)) + if data_type == 6: + return Decimal(float(value_t) * coefficient / 1000).quantize(Decimal('0.000')) + return value_t + except Exception as e: + value_t = "ERR %s" % str(e) + return value_t + + # fanFRU + @staticmethod + def decodeBinByValue(retval): + fru = ipmifru() + fru.decodeBin(retval) + return fru + + @staticmethod + def getfruValue(prob_t, root, val): + try: + ret, binval_bytes = dev_file_read(val, 0, 256) + if ret is False: + return binval_bytes + binval = byteTostr(binval_bytes) + fanpro = {} + ret = checktype.decodeBinByValue(binval) + fanpro['fan_type'] = ret.productInfoArea.productName + fanpro['hw_version'] = ret.productInfoArea.productVersion + fanpro['sn'] = ret.productInfoArea.productSerialNumber + fan_display_name_dict = status.getDecodValue(root, "fan_display_name") + fan_name = fanpro['fan_type'].strip() + if len(fan_display_name_dict) == 0: + return fanpro + if fan_name not in fan_display_name_dict: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR fan name: %s not support" % fan_name) + else: + fanpro['fan_type'] = fan_display_name_dict[fan_name] + return fanpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getslotfruValue(val): + try: + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + slotpro = {} + ret = checktype.decodeBinByValue(binval) + slotpro['slot_type'] = ret.boardInfoArea.boardProductName + slotpro['hw_version'] = ret.boardInfoArea.boardextra1 + slotpro['sn'] = ret.boardInfoArea.boardSerialNumber + return slotpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getpsufruValue(prob_t, root, val): + try: + psu_match = False + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + psupro = {} + ret = checktype.decodeBinByValue(binval) + psupro['type1'] = ret.productInfoArea.productPartModelName + psupro['sn'] = ret.productInfoArea.productSerialNumber + psupro['hw_version'] = ret.productInfoArea.productVersion + psu_dict = status.getDecodValue(root, "psutype") + psupro['type1'] = psupro['type1'].strip() + if len(psu_dict) == 0: + return psupro + for psu_name, display_name in psu_dict.items(): + if psu_name.strip() == psupro['type1']: + psupro['type1'] = display_name + psu_match = True + break + if psu_match is not True: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % psupro['type1']) + return psupro + except Exception as error: + return "ERR " + str(error) + + +class status(): + def __init__(self, productname): + self.productname = productname + + @staticmethod + def getETroot(filename): + tree = ET.parse(filename) + root = tree.getroot() + return root + + @staticmethod + def getDecodValue(collection, decode): + decodes = collection.find('decode') + testdecode = decodes.find(decode) + test = {} + if testdecode is None: + return test + for neighbor in testdecode.iter('code'): + test[neighbor.attrib["key"]] = neighbor.attrib["value"] + return test + + @staticmethod + def getfileValue(location): + return checktype.getValue(location, " ", " ") + + @staticmethod + def getETValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + prob_t = {} + prob_t.update(neighbor.attrib) + prob_t['errcode'] = 0 + prob_t['errmsg'] = '' + for pros in neighbor.iter("property"): + ret = dict(list(neighbor.attrib.items()) + list(pros.attrib.items())) + if ret.get('e2type') == 'fru' and ret.get("name") == "fru": + fruval = checktype.getfruValue(prob_t, root, ret["location"]) + if isinstance(fruval, str) and fruval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = fruval + break + prob_t.update(fruval) + continue + + if ret.get("name") == "psu" and ret.get('e2type') == 'fru': + psuval = checktype.getpsufruValue(prob_t, root, ret["location"]) + if isinstance(psuval, str) and psuval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = psuval + break + prob_t.update(psuval) + continue + + if ret.get("gettype") == "config": + prob_t[ret["name"]] = ret["value"] + continue + + if 'type' not in ret.keys(): + val = "0" + else: + val = ret["type"] + if 'bit' not in ret.keys(): + bit = "0" + else: + bit = ret["bit"] + if 'coefficient' not in ret.keys(): + coefficient = 1 + else: + coefficient = float(ret["coefficient"]) + if 'addend' not in ret.keys(): + addend = 0 + else: + addend = float(ret["addend"]) + + s = checktype.getValue(ret["location"], int(bit), int(val), coefficient, addend) + if isinstance(s, str) and s.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = s + break + if 'default' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + prob_t['errmsg'] = rt[str(s)] + if str(s) != ret["default"]: + prob_t['errcode'] = -1 + break + else: + if 'decode' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + if (ret['decode'] == "psutype" and s.replace("\x00", "").rstrip() not in rt): + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % + (s.replace("\x00", "").rstrip())) + else: + s = rt[str(s).replace("\x00", "").rstrip()] + name = ret["name"] + prob_t[name] = str(s) + a.append(prob_t) + + @staticmethod + def getCPUValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + location = neighbor.attrib["location"] + L = [] + for dirpath, dirnames, filenames in os.walk(location): + for file in filenames: + if file.endswith("input"): + L.append(os.path.join(dirpath, file)) + L = sorted(L, reverse=False) + for i in range(len(L)): + prob_t = {} + prob_t["name"] = getPMCreg("%s/temp%d_label" % (location, i + 1)) + prob_t["temp"] = float(getPMCreg("%s/temp%d_input" % (location, i + 1))) / 1000 + prob_t["alarm"] = float(getPMCreg("%s/temp%d_crit_alarm" % (location, i + 1))) / 1000 + prob_t["crit"] = float(getPMCreg("%s/temp%d_crit" % (location, i + 1))) / 1000 + prob_t["max"] = float(getPMCreg("%s/temp%d_max" % (location, i + 1))) / 1000 + a.append(prob_t) + + @staticmethod + def getFileName(): + fpath = os.path.dirname(os.path.realpath(__file__)) + for file in DEV_XML_FILE_LIST: + xml = fpath + "/" + file + if os.path.exists(xml): + return xml + return fpath + "/" + CONFIG_NAME + + @staticmethod + def checkFan(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "fan" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getTemp(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "temp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getPsu(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "psu" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getcputemp(ret): + _filename = status.getFileName() + _tagname = "cpus" + status.getCPUValue(ret, _filename, _tagname) + + @staticmethod + def getDcdc(ret): + _filename = status.getFileName() + _tagname = "dcdc" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmactemp(ret): + _filename = status.getFileName() + _tagname = "mactemp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmacpower(ret): + _filename = status.getFileName() + _tagname = "macpower" + status.getETValue(ret, _filename, _tagname) diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/pcie.yaml b/device/micas/x86_64-micas_m2-w6930-64qc-r0/pcie.yaml new file mode 100644 index 000000000000..1c3911a2cd62 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/pcie.yaml @@ -0,0 +1,582 @@ +- bus: '00' + dev: '00' + fn: '0' + id: 6f00 + name: 'Host bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2 + (rev 05)' +- bus: '00' + dev: '01' + fn: '0' + id: 6f02 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 1 (rev 05)' +- bus: '00' + dev: '01' + fn: '1' + id: 6f03 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 1 (rev 05)' +- bus: '00' + dev: '02' + fn: '0' + id: 6f04 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 2 (rev 05)' +- bus: '00' + dev: '02' + fn: '2' + id: 6f06 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 2 (rev 05)' +- bus: '00' + dev: '02' + fn: '3' + id: 6f07 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 2 (rev 05)' +- bus: '00' + dev: '03' + fn: '0' + id: 6f08 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 3 (rev 05)' +- bus: '00' + dev: '03' + fn: '1' + id: 6f09 + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 3 (rev 05)' +- bus: '00' + dev: '03' + fn: '2' + id: 6f0a + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 3 (rev 05)' +- bus: '00' + dev: '03' + fn: '3' + id: 6f0b + name: 'PCI bridge: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI + Express Root Port 3 (rev 05)' +- bus: '00' + dev: '04' + fn: '0' + id: 6f20 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 0 (rev 05)' +- bus: '00' + dev: '04' + fn: '1' + id: 6f21 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 1 (rev 05)' +- bus: '00' + dev: '04' + fn: '2' + id: 6f22 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 2 (rev 05)' +- bus: '00' + dev: '04' + fn: '3' + id: 6f23 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 3 (rev 05)' +- bus: '00' + dev: '04' + fn: '4' + id: 6f24 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 4 (rev 05)' +- bus: '00' + dev: '04' + fn: '5' + id: 6f25 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 5 (rev 05)' +- bus: '00' + dev: '04' + fn: '6' + id: 6f26 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 6 (rev 05)' +- bus: '00' + dev: '04' + fn: '7' + id: 6f27 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Crystal Beach DMA Channel 7 (rev 05)' +- bus: '00' + dev: '05' + fn: '0' + id: 6f28 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Map/VTd_Misc/System Management (rev 05)' +- bus: '00' + dev: '05' + fn: '1' + id: 6f29 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Hot Plug (rev 05)' +- bus: '00' + dev: '05' + fn: '2' + id: 6f2a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO RAS/Control Status/Global Errors (rev 05)' +- bus: '00' + dev: '05' + fn: '4' + id: 6f2c + name: 'PIC: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D I/O APIC (rev + 05)' +- bus: '00' + dev: '05' + fn: '6' + id: 6f39 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IO Performance Monitoring (rev 05)' +- bus: '00' + dev: '06' + fn: '0' + id: 6f10 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '1' + id: 6f11 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '2' + id: 6f12 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '3' + id: 6f13 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '4' + id: 6f14 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '5' + id: 6f15 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '6' + id: 6f16 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '06' + fn: '7' + id: 6f17 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '07' + fn: '0' + id: 6f18 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '07' + fn: '1' + id: 6f19 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '07' + fn: '2' + id: 6f1a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '07' + fn: '3' + id: 6f1b + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '07' + fn: '4' + id: 6f1c + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D IIO Debug (rev 05)' +- bus: '00' + dev: '14' + fn: '0' + id: 8c31 + name: 'USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB + xHCI (rev 05)' +- bus: '00' + dev: '16' + fn: '0' + id: 8c3a + name: 'Communication controller: Intel Corporation 8 Series/C220 Series Chipset + Family MEI Controller #1 (rev 04)' +- bus: '00' + dev: '16' + fn: '1' + id: 8c3b + name: 'Communication controller: Intel Corporation 8 Series/C220 Series Chipset + Family MEI Controller #2 (rev 04)' +- bus: '00' + dev: 1d + fn: '0' + id: 8c26 + name: 'USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB + EHCI #1 (rev 05)' +- bus: '00' + dev: 1f + fn: '0' + id: 8c54 + name: 'ISA bridge: Intel Corporation C224 Series Chipset Family Server Standard + SKU LPC Controller (rev 05)' +- bus: '00' + dev: 1f + fn: '2' + id: 8c02 + name: 'SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port + SATA Controller 1 [AHCI mode] (rev 05)' +- bus: '00' + dev: 1f + fn: '3' + id: 8c22 + name: 'SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller + (rev 05)' +- bus: '04' + dev: '00' + fn: '0' + id: 15ab + name: 'Ethernet controller: Intel Corporation Ethernet Connection X552 10 GbE Backplane' +- bus: '04' + dev: '00' + fn: '1' + id: 15ab + name: 'Ethernet controller: Intel Corporation Ethernet Connection X552 10 GbE Backplane' +- bus: '05' + dev: '00' + fn: '0' + id: 15ab + name: 'Ethernet controller: Intel Corporation Ethernet Connection X552 10 GbE Backplane' +- bus: '05' + dev: '00' + fn: '1' + id: 15ab + name: 'Ethernet controller: Intel Corporation Ethernet Connection X552 10 GbE Backplane' +- bus: '06' + dev: '00' + fn: '0' + id: b990 + name: 'Ethernet controller: Broadcom Inc. and subsidiaries BCM56990 Switch ASIC + (rev 11)' +- bus: '07' + dev: '00' + fn: '0' + id: '1537' + name: 'Ethernet controller: Intel Corporation I210 Gigabit Backplane Connection + (rev 03)' +- bus: 08 + dev: '00' + fn: '0' + id: '7011' + name: 'Memory controller: Xilinx Corporation Device 7011' +- bus: ff + dev: 0b + fn: '0' + id: 6f81 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 05)' +- bus: ff + dev: 0b + fn: '1' + id: 6f36 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 05)' +- bus: ff + dev: 0b + fn: '2' + id: 6f37 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link 0/1 (rev 05)' +- bus: ff + dev: 0b + fn: '3' + id: 6f76 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R3 QPI Link Debug (rev 05)' +- bus: ff + dev: 0c + fn: '0' + id: 6fe0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0c + fn: '1' + id: 6fe1 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0c + fn: '2' + id: 6fe2 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0c + fn: '3' + id: 6fe3 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0f + fn: '0' + id: 6ff8 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0f + fn: '4' + id: 6ffc + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0f + fn: '5' + id: 6ffd + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: 0f + fn: '6' + id: 6ffe + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Caching Agent (rev 05)' +- bus: ff + dev: '10' + fn: '0' + id: 6f1d + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R2PCIe Agent (rev 05)' +- bus: ff + dev: '10' + fn: '1' + id: 6f34 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D R2PCIe Agent (rev 05)' +- bus: ff + dev: '10' + fn: '5' + id: 6f1e + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 05)' +- bus: ff + dev: '10' + fn: '6' + id: 6f7d + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 05)' +- bus: ff + dev: '10' + fn: '7' + id: 6f1f + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Ubox (rev 05)' +- bus: ff + dev: '12' + fn: '0' + id: 6fa0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Home Agent 0 (rev 05)' +- bus: ff + dev: '12' + fn: '1' + id: 6f30 + name: 'Performance counters: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Home Agent 0 (rev 05)' +- bus: ff + dev: '12' + fn: '2' + id: 6f70 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Home Agent 0 Debug (rev 05)' +- bus: ff + dev: '13' + fn: '0' + id: 6fa8 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Target Address/Thermal/RAS (rev 05)' +- bus: ff + dev: '13' + fn: '1' + id: 6f71 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Target Address/Thermal/RAS (rev 05)' +- bus: ff + dev: '13' + fn: '2' + id: 6faa + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 05)' +- bus: ff + dev: '13' + fn: '3' + id: 6fab + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 05)' +- bus: ff + dev: '13' + fn: '4' + id: 6fac + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 05)' +- bus: ff + dev: '13' + fn: '5' + id: 6fad + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel Target Address Decoder (rev 05)' +- bus: ff + dev: '13' + fn: '6' + id: 6fae + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Broadcast (rev 05)' +- bus: ff + dev: '13' + fn: '7' + id: 6faf + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Global Broadcast (rev 05)' +- bus: ff + dev: '14' + fn: '0' + id: 6fb0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 0 Thermal Control (rev 05)' +- bus: ff + dev: '14' + fn: '1' + id: 6fb1 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 1 Thermal Control (rev 05)' +- bus: ff + dev: '14' + fn: '2' + id: 6fb2 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 0 Error (rev 05)' +- bus: ff + dev: '14' + fn: '3' + id: 6fb3 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 1 Error (rev 05)' +- bus: ff + dev: '14' + fn: '4' + id: 6fbc + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 05)' +- bus: ff + dev: '14' + fn: '5' + id: 6fbd + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 05)' +- bus: ff + dev: '14' + fn: '6' + id: 6fbe + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 05)' +- bus: ff + dev: '14' + fn: '7' + id: 6fbf + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D DDRIO Channel 0/1 Interface (rev 05)' +- bus: ff + dev: '15' + fn: '0' + id: 6fb4 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 2 Thermal Control (rev 05)' +- bus: ff + dev: '15' + fn: '1' + id: 6fb5 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 3 Thermal Control (rev 05)' +- bus: ff + dev: '15' + fn: '2' + id: 6fb6 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 2 Error (rev 05)' +- bus: ff + dev: '15' + fn: '3' + id: 6fb7 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Memory Controller 0 - Channel 3 Error (rev 05)' +- bus: ff + dev: 1e + fn: '0' + id: 6f98 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1e + fn: '1' + id: 6f99 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1e + fn: '2' + id: 6f9a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1e + fn: '3' + id: 6fc0 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1e + fn: '4' + id: 6f9c + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1e + fn: '7' + id: 6f9f + name: 'System peripheral: Intel Corporation Device 6f9f (rev 05)' +- bus: ff + dev: 1f + fn: '0' + id: 6f88 + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' +- bus: ff + dev: 1f + fn: '2' + id: 6f8a + name: 'System peripheral: Intel Corporation Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon + D Power Control Unit (rev 05)' diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform.json b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform.json new file mode 100644 index 000000000000..208b81383eca --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform.json @@ -0,0 +1,2036 @@ +{ + "chassis": { + "name": "M2-W6930-64QC", + "thermal_manager": false, + "status_led": { + "controllable": false, + "colors": [ + "green", + "blinking_green", + "amber", + "blinking_amber" + ] + }, + "components": [ + { + "name": "CPU_CPLD" + }, + { + "name": "CONNECT_CPLD" + }, + { + "name": "MAC_CPLDA" + }, + { + "name": "MAC_CPLDB" + }, + { + "name": "PORT_CPLDA" + }, + { + "name": "PORT_CPLDB" + }, + { + "name": "FAN_CPLDA" + }, + { + "name": "FAN_CPLDB" + }, + { + "name": "MAC_FPGA" + }, + { + "name": "PORT_FPGA" + }, + { + "name": "BIOS" + } + ], + "fans": [ + { + "name": "Fantray1_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray1_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray2_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray2_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray3_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray3_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray4_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray4_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray5_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray5_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray6_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray6_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray7_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray7_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray8_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + }, + { + "name": "Fantray8_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": [ + "off", + "red", + "amber", + "green" + ] + } + } + ], + "fan_drawers": [ + { + "name": "Fantray1", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray1_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray1_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray2", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray2_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray2_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray3", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray3_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray3_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray4", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray4_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray4_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray5", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray5_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray5_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray6", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray6_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray6_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray7", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray7_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray7_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray8", + "num_fans": 2, + "status_led": { + "controllable": false, + "colors": [ + "amber", + "green", + "off" + ] + }, + "fans": [ + { + "name": "Fantray8_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray8_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "psus": [ + { + "name": "Psu1", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU1_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Psu2", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU2_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Psu3", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU3_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Psu4", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU4_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "thermals": [ + { + "name": "BOARD_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "CPU_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "INLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "OUTLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "ASIC_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU1_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU2_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU3_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU4_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + } + ], + "modules": [], + "sfps": [] + }, + "interfaces": { + "Ethernet1": { + "index": "0,0,0,0,0,0,0,0", + "lanes": "65,66,67,68", + "breakout_modes": { + "1x400G": [ + "Eth1" + ], + "4x100G": [ + "Eth1/1", + "Eth1/2", + "Eth1/3", + "Eth1/4" + ], + "2x200G": [ + "Eth1/1", + "Eth1/2" + ] + } + }, + "Ethernet9": { + "index": "1,1,1,1,1,1,1,1", + "lanes": "69,70,71,72", + "breakout_modes": { + "1x400G": [ + "Eth2" + ], + "4x100G": [ + "Eth2/1", + "Eth2/2", + "Eth2/3", + "Eth2/4" + ], + "2x200G": [ + "Eth2/1", + "Eth2/2" + ] + } + }, + "Ethernet17": { + "index": "2,2,2,2,2,2,2,2", + "lanes": "25,26,27,28", + "breakout_modes": { + "1x400G": [ + "Eth3" + ], + "4x100G": [ + "Eth3/1", + "Eth3/2", + "Eth3/3", + "Eth3/4" + ], + "2x200G": [ + "Eth3/1", + "Eth3/2" + ] + } + }, + "Ethernet25": { + "index": "3,3,3,3,3,3,3,3", + "lanes": "21,22,23,24", + "breakout_modes": { + "1x400G": [ + "Eth4" + ], + "4x100G": [ + "Eth4/1", + "Eth4/2", + "Eth4/3", + "Eth4/4" + ], + "2x200G": [ + "Eth4/1", + "Eth4/2" + ] + } + }, + "Ethernet33": { + "index": "4,4,4,4,4,4,4,4", + "lanes": "73,74,75,76", + "breakout_modes": { + "1x400G": [ + "Eth5" + ], + "4x100G": [ + "Eth5/1", + "Eth5/2", + "Eth5/3", + "Eth5/4" + ], + "2x200G": [ + "Eth5/1", + "Eth5/2" + ] + } + }, + "Ethernet41": { + "index": "5,5,5,5,5,5,5,5", + "lanes": "77,78,79,80", + "breakout_modes": { + "1x400G": [ + "Eth6" + ], + "4x100G": [ + "Eth6/1", + "Eth6/2", + "Eth6/3", + "Eth6/4" + ], + "2x200G": [ + "Eth6/1", + "Eth6/2" + ] + } + }, + "Ethernet49": { + "index": "6,6,6,6,6,6,6,6", + "lanes": "33,34,35,36", + "breakout_modes": { + "1x400G": [ + "Eth7" + ], + "4x100G": [ + "Eth7/1", + "Eth7/2", + "Eth7/3", + "Eth7/4" + ], + "2x200G": [ + "Eth7/1", + "Eth7/2" + ] + } + }, + "Ethernet57": { + "index": "7,7,7,7,7,7,7,7", + "lanes": "29,30,31,32", + "breakout_modes": { + "1x400G": [ + "Eth8" + ], + "4x100G": [ + "Eth8/1", + "Eth8/2", + "Eth8/3", + "Eth8/4" + ], + "2x200G": [ + "Eth8/1", + "Eth8/2" + ] + } + }, + "Ethernet65": { + "index": "8,8,8,8,8,8,8,8", + "lanes": "81,82,83,84", + "breakout_modes": { + "1x400G": [ + "Eth9" + ], + "4x100G": [ + "Eth9/1", + "Eth9/2", + "Eth9/3", + "Eth9/4" + ], + "2x200G": [ + "Eth9/1", + "Eth9/2" + ] + } + }, + "Ethernet73": { + "index": "9,9,9,9,9,9,9,9", + "lanes": "85,86,87,88", + "breakout_modes": { + "1x400G": [ + "Eth10" + ], + "4x100G": [ + "Eth10/1", + "Eth10/2", + "Eth10/3", + "Eth10/4" + ], + "2x200G": [ + "Eth10/1", + "Eth10/2" + ] + } + }, + "Ethernet81": { + "index": "10,10,10,10,10,10,10,10", + "lanes": "41,42,43,44", + "breakout_modes": { + "1x400G": [ + "Eth11" + ], + "4x100G": [ + "Eth11/1", + "Eth11/2", + "Eth11/3", + "Eth11/4" + ], + "2x200G": [ + "Eth11/1", + "Eth11/2" + ] + } + }, + "Ethernet89": { + "index": "11,11,11,11,11,11,11,11", + "lanes": "37,38,39,40", + "breakout_modes": { + "1x400G": [ + "Eth12" + ], + "4x100G": [ + "Eth12/1", + "Eth12/2", + "Eth12/3", + "Eth12/4" + ], + "2x200G": [ + "Eth12/1", + "Eth12/2" + ] + } + }, + "Ethernet97": { + "index": "12,12,12,12,12,12,12,12", + "lanes": "89,90,91,92", + "breakout_modes": { + "1x400G": [ + "Eth13" + ], + "4x100G": [ + "Eth13/1", + "Eth13/2", + "Eth13/3", + "Eth13/4" + ], + "2x200G": [ + "Eth13/1", + "Eth13/2" + ] + } + }, + "Ethernet105": { + "index": "13,13,13,13,13,13,13,13", + "lanes": "93,94,95,96", + "breakout_modes": { + "1x400G": [ + "Eth14" + ], + "4x100G": [ + "Eth14/1", + "Eth14/2", + "Eth14/3", + "Eth14/4" + ], + "2x200G": [ + "Eth14/1", + "Eth14/2" + ] + } + }, + "Ethernet113": { + "index": "14,14,14,14,14,14,14,14", + "lanes": "49,50,51,52", + "breakout_modes": { + "1x400G": [ + "Eth15" + ], + "4x100G": [ + "Eth15/1", + "Eth15/2", + "Eth15/3", + "Eth15/4" + ], + "2x200G": [ + "Eth15/1", + "Eth15/2" + ] + } + }, + "Ethernet121": { + "index": "15,15,15,15,15,15,15,15", + "lanes": "45,46,47,48", + "breakout_modes": { + "1x400G": [ + "Eth16" + ], + "4x100G": [ + "Eth16/1", + "Eth16/2", + "Eth16/3", + "Eth16/4" + ], + "2x200G": [ + "Eth16/1", + "Eth16/2" + ] + } + }, + "Ethernet129": { + "index": "16,16,16,16,16,16,16,16", + "lanes": "97,98,99,100", + "breakout_modes": { + "1x400G": [ + "Eth17" + ], + "4x100G": [ + "Eth17/1", + "Eth17/2", + "Eth17/3", + "Eth17/4" + ], + "2x200G": [ + "Eth17/1", + "Eth17/2" + ] + } + }, + "Ethernet137": { + "index": "17,17,17,17,17,17,17,17", + "lanes": "101,102,103,104", + "breakout_modes": { + "1x400G": [ + "Eth18" + ], + "4x100G": [ + "Eth18/1", + "Eth18/2", + "Eth18/3", + "Eth18/4" + ], + "2x200G": [ + "Eth18/1", + "Eth18/2" + ] + } + }, + "Ethernet145": { + "index": "18,18,18,18,18,18,18,18", + "lanes": "57,58,59,60", + "breakout_modes": { + "1x400G": [ + "Eth19" + ], + "4x100G": [ + "Eth19/1", + "Eth19/2", + "Eth19/3", + "Eth19/4" + ], + "2x200G": [ + "Eth19/1", + "Eth19/2" + ] + } + }, + "Ethernet153": { + "index": "19,19,19,19,19,19,19,19", + "lanes": "53,54,55,56", + "breakout_modes": { + "1x400G": [ + "Eth20" + ], + "4x100G": [ + "Eth20/1", + "Eth20/2", + "Eth20/3", + "Eth20/4" + ], + "2x200G": [ + "Eth20/1", + "Eth20/2" + ] + } + }, + "Ethernet161": { + "index": "20,20,20,20,20,20,20,20", + "lanes": "105,106,107,108", + "breakout_modes": { + "1x400G": [ + "Eth21" + ], + "4x100G": [ + "Eth21/1", + "Eth21/2", + "Eth21/3", + "Eth21/4" + ], + "2x200G": [ + "Eth21/1", + "Eth21/2" + ] + } + }, + "Ethernet169": { + "index": "21,21,21,21,21,21,21,21", + "lanes": "109,110,111,112", + "breakout_modes": { + "1x400G": [ + "Eth22" + ], + "4x100G": [ + "Eth22/1", + "Eth22/2", + "Eth22/3", + "Eth22/4" + ], + "2x200G": [ + "Eth22/1", + "Eth22/2" + ] + } + }, + "Ethernet177": { + "index": "22,22,22,22,22,22,22,22", + "lanes": "17,18,19,20", + "breakout_modes": { + "1x400G": [ + "Eth23" + ], + "4x100G": [ + "Eth23/1", + "Eth23/2", + "Eth23/3", + "Eth23/4" + ], + "2x200G": [ + "Eth23/1", + "Eth23/2" + ] + } + }, + "Ethernet185": { + "index": "23,23,23,23,23,23,23,23", + "lanes": "61,62,63,64", + "breakout_modes": { + "1x400G": [ + "Eth24" + ], + "4x100G": [ + "Eth24/1", + "Eth24/2", + "Eth24/3", + "Eth24/4" + ], + "2x200G": [ + "Eth24/1", + "Eth24/2" + ] + } + }, + "Ethernet193": { + "index": "24,24,24,24,24,24,24,24", + "lanes": "113,114,115,116", + "breakout_modes": { + "1x400G": [ + "Eth25" + ], + "4x100G": [ + "Eth25/1", + "Eth25/2", + "Eth25/3", + "Eth25/4" + ], + "2x200G": [ + "Eth25/1", + "Eth25/2" + ] + } + }, + "Ethernet201": { + "index": "25,25,25,25,25,25,25,25", + "lanes": "117,118,119,120", + "breakout_modes": { + "1x400G": [ + "Eth26" + ], + "4x100G": [ + "Eth26/1", + "Eth26/2", + "Eth26/3", + "Eth26/4" + ], + "2x200G": [ + "Eth26/1", + "Eth26/2" + ] + } + }, + "Ethernet209": { + "index": "26,26,26,26,26,26,26,26", + "lanes": "9,10,11,12", + "breakout_modes": { + "1x400G": [ + "Eth27" + ], + "4x100G": [ + "Eth27/1", + "Eth27/2", + "Eth27/3", + "Eth27/4" + ], + "2x200G": [ + "Eth27/1", + "Eth27/2" + ] + } + }, + "Ethernet217": { + "index": "27,27,27,27,27,27,27,27", + "lanes": "13,14,15,16", + "breakout_modes": { + "1x400G": [ + "Eth28" + ], + "4x100G": [ + "Eth28/1", + "Eth28/2", + "Eth28/3", + "Eth28/4" + ], + "2x200G": [ + "Eth28/1", + "Eth28/2" + ] + } + }, + "Ethernet225": { + "index": "28,28,28,28,28,28,28,28", + "lanes": "121,122,123,124", + "breakout_modes": { + "1x400G": [ + "Eth29" + ], + "4x100G": [ + "Eth29/1", + "Eth29/2", + "Eth29/3", + "Eth29/4" + ], + "2x200G": [ + "Eth29/1", + "Eth29/2" + ] + } + }, + "Ethernet233": { + "index": "29,29,29,29,29,29,29,29", + "lanes": "125,126,127,128", + "breakout_modes": { + "1x400G": [ + "Eth30" + ], + "4x100G": [ + "Eth30/1", + "Eth30/2", + "Eth30/3", + "Eth30/4" + ], + "2x200G": [ + "Eth30/1", + "Eth30/2" + ] + } + }, + "Ethernet241": { + "index": "30,30,30,30,30,30,30,30", + "lanes": "1,2,3,4", + "breakout_modes": { + "1x400G": [ + "Eth31" + ], + "4x100G": [ + "Eth31/1", + "Eth31/2", + "Eth31/3", + "Eth31/4" + ], + "2x200G": [ + "Eth31/1", + "Eth31/2" + ] + } + }, + "Ethernet249": { + "index": "31,31,31,31,31,31,31,31", + "lanes": "5,6,7,8", + "breakout_modes": { + "1x400G": [ + "Eth32" + ], + "4x100G": [ + "Eth32/1", + "Eth32/2", + "Eth32/3", + "Eth32/4" + ], + "2x200G": [ + "Eth32/1", + "Eth32/2" + ] + } + }, + "Ethernet257": { + "index": "32,32,32,32,32,32,32,32", + "lanes": "133,134,135,136", + "breakout_modes": { + "1x400G": [ + "Eth33" + ], + "4x100G": [ + "Eth33/1", + "Eth33/2", + "Eth33/3", + "Eth33/4" + ], + "2x200G": [ + "Eth33/1", + "Eth33/2" + ] + } + }, + "Ethernet265": { + "index": "33,33,33,33,33,33,33,33", + "lanes": "129,130,131,132", + "breakout_modes": { + "1x400G": [ + "Eth34" + ], + "4x100G": [ + "Eth34/1", + "Eth34/2", + "Eth34/3", + "Eth34/4" + ], + "2x200G": [ + "Eth34/1", + "Eth34/2" + ] + } + }, + "Ethernet273": { + "index": "34,34,34,34,34,34,34,34", + "lanes": "249,250,251,252", + "breakout_modes": { + "1x400G": [ + "Eth35" + ], + "4x100G": [ + "Eth35/1", + "Eth35/2", + "Eth35/3", + "Eth35/4" + ], + "2x200G": [ + "Eth35/1", + "Eth35/2" + ] + } + }, + "Ethernet281": { + "index": "35,35,35,35,35,35,35,35", + "lanes": "253,254,255,256", + "breakout_modes": { + "1x400G": [ + "Eth36" + ], + "4x100G": [ + "Eth36/1", + "Eth36/2", + "Eth36/3", + "Eth36/4" + ], + "2x200G": [ + "Eth36/1", + "Eth36/2" + ] + } + }, + "Ethernet289": { + "index": "36,36,36,36,36,36,36,36", + "lanes": "141,142,143,144", + "breakout_modes": { + "1x400G": [ + "Eth37" + ], + "4x100G": [ + "Eth37/1", + "Eth37/2", + "Eth37/3", + "Eth37/4" + ], + "2x200G": [ + "Eth37/1", + "Eth37/2" + ] + } + }, + "Ethernet297": { + "index": "37,37,37,37,37,37,37,37", + "lanes": "137,138,139,140", + "breakout_modes": { + "1x400G": [ + "Eth38" + ], + "4x100G": [ + "Eth38/1", + "Eth38/2", + "Eth38/3", + "Eth38/4" + ], + "2x200G": [ + "Eth38/1", + "Eth38/2" + ] + } + }, + "Ethernet305": { + "index": "38,38,38,38,38,38,38,38", + "lanes": "241,242,243,244", + "breakout_modes": { + "1x400G": [ + "Eth39" + ], + "4x100G": [ + "Eth39/1", + "Eth39/2", + "Eth39/3", + "Eth39/4" + ], + "2x200G": [ + "Eth39/1", + "Eth39/2" + ] + } + }, + "Ethernet313": { + "index": "39,39,39,39,39,39,39,39", + "lanes": "245,246,247,248", + "breakout_modes": { + "1x400G": [ + "Eth40" + ], + "4x100G": [ + "Eth40/1", + "Eth40/2", + "Eth40/3", + "Eth40/4" + ], + "2x200G": [ + "Eth40/1", + "Eth40/2" + ] + } + }, + "Ethernet321": { + "index": "40,40,40,40,40,40,40,40", + "lanes": "149,150,151,152", + "breakout_modes": { + "1x400G": [ + "Eth41" + ], + "4x100G": [ + "Eth41/1", + "Eth41/2", + "Eth41/3", + "Eth41/4" + ], + "2x200G": [ + "Eth41/1", + "Eth41/2" + ] + } + }, + "Ethernet329": { + "index": "41,41,41,41,41,41,41,41", + "lanes": "145,146,147,148", + "breakout_modes": { + "1x400G": [ + "Eth42" + ], + "4x100G": [ + "Eth42/1", + "Eth42/2", + "Eth42/3", + "Eth42/4" + ], + "2x200G": [ + "Eth42/1", + "Eth42/2" + ] + } + }, + "Ethernet337": { + "index": "42,42,42,42,42,42,42,42", + "lanes": "237,238,239,240", + "breakout_modes": { + "1x400G": [ + "Eth43" + ], + "4x100G": [ + "Eth43/1", + "Eth43/2", + "Eth43/3", + "Eth43/4" + ], + "2x200G": [ + "Eth43/1", + "Eth43/2" + ] + } + }, + "Ethernet345": { + "index": "43,43,43,43,43,43,43,43", + "lanes": "197,198,199,200", + "breakout_modes": { + "1x400G": [ + "Eth44" + ], + "4x100G": [ + "Eth44/1", + "Eth44/2", + "Eth44/3", + "Eth44/4" + ], + "2x200G": [ + "Eth44/1", + "Eth44/2" + ] + } + }, + "Ethernet353": { + "index": "44,44,44,44,44,44,44,44", + "lanes": "157,158,159,160", + "breakout_modes": { + "1x400G": [ + "Eth45" + ], + "4x100G": [ + "Eth45/1", + "Eth45/2", + "Eth45/3", + "Eth45/4" + ], + "2x200G": [ + "Eth45/1", + "Eth45/2" + ] + } + }, + "Ethernet361": { + "index": "45,45,45,45,45,45,45,45", + "lanes": "153,154,155,156", + "breakout_modes": { + "1x400G": [ + "Eth46" + ], + "4x100G": [ + "Eth46/1", + "Eth46/2", + "Eth46/3", + "Eth46/4" + ], + "2x200G": [ + "Eth46/1", + "Eth46/2" + ] + } + }, + "Ethernet369": { + "index": "46,46,46,46,46,46,46,46", + "lanes": "193,194,195,196", + "breakout_modes": { + "1x400G": [ + "Eth47" + ], + "4x100G": [ + "Eth47/1", + "Eth47/2", + "Eth47/3", + "Eth47/4" + ], + "2x200G": [ + "Eth47/1", + "Eth47/2" + ] + } + }, + "Ethernet377": { + "index": "47,47,47,47,47,47,47,47", + "lanes": "205,206,207,208", + "breakout_modes": { + "1x400G": [ + "Eth48" + ], + "4x100G": [ + "Eth48/1", + "Eth48/2", + "Eth48/3", + "Eth48/4" + ], + "2x200G": [ + "Eth48/1", + "Eth48/2" + ] + } + }, + "Ethernet385": { + "index": "48,48,48,48,48,48,48,48", + "lanes": "165,166,167,168", + "breakout_modes": { + "1x400G": [ + "Eth49" + ], + "4x100G": [ + "Eth49/1", + "Eth49/2", + "Eth49/3", + "Eth49/4" + ], + "2x200G": [ + "Eth49/1", + "Eth49/2" + ] + } + }, + "Ethernet393": { + "index": "49,49,49,49,49,49,49,49", + "lanes": "161,162,163,164", + "breakout_modes": { + "1x400G": [ + "Eth50" + ], + "4x100G": [ + "Eth50/1", + "Eth50/2", + "Eth50/3", + "Eth50/4" + ], + "2x200G": [ + "Eth50/1", + "Eth50/2" + ] + } + }, + "Ethernet401": { + "index": "50,50,50,50,50,50,50,50", + "lanes": "201,202,203,204", + "breakout_modes": { + "1x400G": [ + "Eth51" + ], + "4x100G": [ + "Eth51/1", + "Eth51/2", + "Eth51/3", + "Eth51/4" + ], + "2x200G": [ + "Eth51/1", + "Eth51/2" + ] + } + }, + "Ethernet409": { + "index": "51,51,51,51,51,51,51,51", + "lanes": "213,214,215,216", + "breakout_modes": { + "1x400G": [ + "Eth52" + ], + "4x100G": [ + "Eth52/1", + "Eth52/2", + "Eth52/3", + "Eth52/4" + ], + "2x200G": [ + "Eth52/1", + "Eth52/2" + ] + } + }, + "Ethernet417": { + "index": "52,52,52,52,52,52,52,52", + "lanes": "173,174,175,176", + "breakout_modes": { + "1x400G": [ + "Eth53" + ], + "4x100G": [ + "Eth53/1", + "Eth53/2", + "Eth53/3", + "Eth53/4" + ], + "2x200G": [ + "Eth53/1", + "Eth53/2" + ] + } + }, + "Ethernet425": { + "index": "53,53,53,53,53,53,53,53", + "lanes": "169,170,171,172", + "breakout_modes": { + "1x400G": [ + "Eth54" + ], + "4x100G": [ + "Eth54/1", + "Eth54/2", + "Eth54/3", + "Eth54/4" + ], + "2x200G": [ + "Eth54/1", + "Eth54/2" + ] + } + }, + "Ethernet433": { + "index": "54,54,54,54,54,54,54,54", + "lanes": "209,210,211,212", + "breakout_modes": { + "1x400G": [ + "Eth55" + ], + "4x100G": [ + "Eth55/1", + "Eth55/2", + "Eth55/3", + "Eth55/4" + ], + "2x200G": [ + "Eth55/1", + "Eth55/2" + ] + } + }, + "Ethernet441": { + "index": "55,55,55,55,55,55,55,55", + "lanes": "221,222,223,224", + "breakout_modes": { + "1x400G": [ + "Eth56" + ], + "4x100G": [ + "Eth56/1", + "Eth56/2", + "Eth56/3", + "Eth56/4" + ], + "2x200G": [ + "Eth56/1", + "Eth56/2" + ] + } + }, + "Ethernet449": { + "index": "56,56,56,56,56,56,56,56", + "lanes": "181,182,183,184", + "breakout_modes": { + "1x400G": [ + "Eth57" + ], + "4x100G": [ + "Eth57/1", + "Eth57/2", + "Eth57/3", + "Eth57/4" + ], + "2x200G": [ + "Eth57/1", + "Eth57/2" + ] + } + }, + "Ethernet457": { + "index": "57,57,57,57,57,57,57,57", + "lanes": "177,178,179,180", + "breakout_modes": { + "1x400G": [ + "Eth58" + ], + "4x100G": [ + "Eth58/1", + "Eth58/2", + "Eth58/3", + "Eth58/4" + ], + "2x200G": [ + "Eth58/1", + "Eth58/2" + ] + } + }, + "Ethernet465": { + "index": "58,58,58,58,58,58,58,58", + "lanes": "217,218,219,220", + "breakout_modes": { + "1x400G": [ + "Eth59" + ], + "4x100G": [ + "Eth59/1", + "Eth59/2", + "Eth59/3", + "Eth59/4" + ], + "2x200G": [ + "Eth59/1", + "Eth59/2" + ] + } + }, + "Ethernet473": { + "index": "59,59,59,59,59,59,59,59", + "lanes": "229,230,231,232", + "breakout_modes": { + "1x400G": [ + "Eth60" + ], + "4x100G": [ + "Eth60/1", + "Eth60/2", + "Eth60/3", + "Eth60/4" + ], + "2x200G": [ + "Eth60/1", + "Eth60/2" + ] + } + }, + "Ethernet481": { + "index": "60,60,60,60,60,60,60,60", + "lanes": "189,190,191,192", + "breakout_modes": { + "1x400G": [ + "Eth61" + ], + "4x100G": [ + "Eth61/1", + "Eth61/2", + "Eth61/3", + "Eth61/4" + ], + "2x200G": [ + "Eth61/1", + "Eth61/2" + ] + } + }, + "Ethernet489": { + "index": "61,61,61,61,61,61,61,61", + "lanes": "185,186,187,188", + "breakout_modes": { + "1x400G": [ + "Eth62" + ], + "4x100G": [ + "Eth62/1", + "Eth62/2", + "Eth62/3", + "Eth62/4" + ], + "2x200G": [ + "Eth62/1", + "Eth62/2" + ] + } + }, + "Ethernet497": { + "index": "62,62,62,62,62,62,62,62", + "lanes": "225,226,227,228", + "breakout_modes": { + "1x400G": [ + "Eth63" + ], + "4x100G": [ + "Eth63/1", + "Eth63/2", + "Eth63/3", + "Eth63/4" + ], + "2x200G": [ + "Eth63/1", + "Eth63/2" + ] + } + }, + "Ethernet505": { + "index": "63,63,63,63,63,63,63,63", + "lanes": "233,234,235,236", + "breakout_modes": { + "1x400G": [ + "Eth64" + ], + "4x100G": [ + "Eth64/1", + "Eth64/2", + "Eth64/3", + "Eth64/4" + ], + "2x200G": [ + "Eth64/1", + "Eth64/2" + ] + } + } + } +} \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_asic b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_asic new file mode 100644 index 000000000000..960467652765 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_asic @@ -0,0 +1 @@ +broadcom diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_components.json b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_components.json new file mode 100644 index 000000000000..221114c461b9 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_components.json @@ -0,0 +1,20 @@ +{ + "chassis": { + "M2-W6930-64QC": { + "component": { + "CPU_CPLD": { }, + "CONNECT_CPLD": { }, + "FAN_CPLDA": { }, + "FAN_CPLDB": { }, + "MAC_CPLDA": { }, + "MAC_CPLDB": { }, + "PORT_CPLDA": { }, + "PORT_CPLDB": { }, + "MAC_FPGA": { }, + "PORT_FPGA": { }, + "BIOS": { } + } + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_env.conf b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_env.conf new file mode 100644 index 000000000000..fc119184d5c1 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/platform_env.conf @@ -0,0 +1,2 @@ +is_ltsw_chip=1 +SYNCD_SHM_SIZE=1g diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/sfputil.py b/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/sfputil.py new file mode 100644 index 000000000000..f52a788085e9 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/sfputil.py @@ -0,0 +1,363 @@ +# sfputil.py +# +# Platform-specific SFP transceiver interface for SONiC +# + +try: + import time + import re + import os + import threading + import traceback + import subprocess + from ctypes import create_string_buffer + from sonic_sfp.sfputilbase import SfpUtilBase + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom +except ImportError as e: + raise ImportError("%s - required module not found" % str(e)) + +class SfpUtil(SfpUtilBase): + """Platform-specific SfpUtil class""" + + PORT_START = 0 + PORT_END = 63 + PORTS_IN_BLOCK = 64 + + EEPROM_OFFSET = 133 + SFP_DEVICE_TYPE = "optoe2" + QSFP_DEVICE_TYPE = "optoe1" + QSFP_DD_DEVICE_TYPE = "optoe3" + I2C_MAX_ATTEMPT = 3 + + OPTOE_TYPE1 = 1 + OPTOE_TYPE2 = 2 + OPTOE_TYPE3 = 3 + + SFP_STATUS_INSERTED = '1' + SFP_STATUS_REMOVED = '0' + + _port_to_eeprom_mapping = {} + port_to_i2cbus_mapping ={} + port_dict = {} + + qsfp_ports_list = [] + qsfp_dd_ports_list = [] + + @property + def port_start(self): + return self.PORT_START + + @property + def port_end(self): + return self.PORT_END + + @property + def qsfp_ports(self): + return self.qsfp_ports_list + + @property + def qsfp_dd_ports(self): + return self.qsfp_dd_ports_list + + @property + def port_to_eeprom_mapping(self): + return self._port_to_eeprom_mapping + + def __init__(self): + self.qsfp_ports_list = [] + self.qsfp_dd_ports_list = [] + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + self.port_to_i2cbus_mapping[x] = (x + self.EEPROM_OFFSET) + if self.get_presence(x): + self.port_dict[x] = self.SFP_STATUS_INSERTED + else: + self.port_dict[x] = self.SFP_STATUS_REMOVED + + if (self.check_is_qsfpdd(x)): + self.qsfp_dd_ports_list.append(x) + self.check_optoe_type(x, self.OPTOE_TYPE3) + else: + self.qsfp_ports_list.append(x) + self.check_optoe_type(x, self.OPTOE_TYPE1) + SfpUtilBase.__init__(self) + + def _sfp_read_file_path(self, file_path, offset, num_bytes): + attempts = 0 + while attempts < self.I2C_MAX_ATTEMPT: + try: + file_path.seek(offset) + read_buf = file_path.read(num_bytes) + except: + attempts += 1 + time.sleep(0.05) + else: + return True, read_buf + return False, None + + def _sfp_eeprom_present(self, sysfs_sfp_i2c_client_eeprompath, offset): + """Tries to read the eeprom file to determine if the + device/sfp is present or not. If sfp present, the read returns + valid bytes. If not, read returns error 'Connection timed out""" + + if not os.path.exists(sysfs_sfp_i2c_client_eeprompath): + return False + else: + with open(sysfs_sfp_i2c_client_eeprompath, "rb", buffering=0) as sysfsfile: + rv, buf = self._sfp_read_file_path(sysfsfile, offset, 1) + return rv + + def _add_new_sfp_device(self, sysfs_sfp_i2c_adapter_path, devaddr, devtype): + try: + sysfs_nd_path = "%s/new_device" % sysfs_sfp_i2c_adapter_path + + # Write device address to new_device file + nd_file = open(sysfs_nd_path, "w") + nd_str = "%s %s" % (devtype, hex(devaddr)) + nd_file.write(nd_str) + nd_file.close() + + except Exception as err: + print("Error writing to new device file: %s" % str(err)) + return 1 + else: + return 0 + + def _get_port_eeprom_path(self, port_num, devid): + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + if port_num in self.port_to_eeprom_mapping.keys(): + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[port_num] + else: + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + i2c_adapter_id = self._get_port_i2c_adapter_id(port_num) + if i2c_adapter_id is None: + print("Error getting i2c bus num") + return None + + # Get i2c virtual bus path for the sfp + sysfs_sfp_i2c_adapter_path = "%s/i2c-%s" % (sysfs_i2c_adapter_base_path, + str(i2c_adapter_id)) + + # If i2c bus for port does not exist + if not os.path.exists(sysfs_sfp_i2c_adapter_path): + print("Could not find i2c bus %s. Driver not loaded?" % sysfs_sfp_i2c_adapter_path) + return None + + sysfs_sfp_i2c_client_path = "%s/%s-00%s" % (sysfs_sfp_i2c_adapter_path, + str(i2c_adapter_id), + hex(devid)[-2:]) + + # If sfp device is not present on bus, Add it + if not os.path.exists(sysfs_sfp_i2c_client_path): + if port_num in self.qsfp_dd_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DD_DEVICE_TYPE) + elif port_num in self.qsfp_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DEVICE_TYPE) + else: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.SFP_DEVICE_TYPE) + if ret != 0: + print("Error adding sfp device") + return None + + sysfs_sfp_i2c_client_eeprom_path = "%s/eeprom" % sysfs_sfp_i2c_client_path + + return sysfs_sfp_i2c_client_eeprom_path + + def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes): + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + rv, raw = self._sfp_read_file_path(sysfsfile_eeprom, offset, num_bytes) + if rv == False: + return None + + try: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + except: + return None + + return eeprom_raw + + def get_eeprom_dom_raw(self, port_num): + if port_num in self.qsfp_ports: + # QSFP DOM EEPROM is also at addr 0x50 and thus also stored in eeprom_ifraw + return None + else: + # Read dom eeprom at addr 0x51 + return self._read_eeprom_devid(port_num, self.IDENTITY_EEPROM_ADDR, 256) + + 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 + cmd = "cat /sys/wb_plat/sff/sff{}/present".format(str(port_num+1)) + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + return False + if output == "1": + return True + return False + + def check_is_qsfpdd(self, port_num): + try: + if self.get_presence(port_num) == False: + return False + + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, 0, 1) + # according to sff-8024 A0h Byte 0 is '1e' or '18' means the transceiver is qsfpdd + if (eeprom_raw[0] == '1e' or eeprom_raw[0] == '18'): + return True + except Exception as e: + print(traceback.format_exc()) + + return False + + def check_optoe_type(self, port_num, optoe_type): + if self.get_presence(port_num) == False: + return True + try: + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + dev_class_path = '/sys/bus/i2c/devices/i2c-{0}/{0}-0050/dev_class' + i2c_path = dev_class_path.format(str(self.port_to_i2cbus_mapping[port_num])) + cmd = "cat " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + if int(output) != optoe_type: + cmd = "echo " + str(optoe_type) + " > " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + return True + + except Exception as e: + print(traceback.format_exc()) + return False + + def get_low_power_mode(self, port_num): + # Check for invalid port_num + + return True + + def set_low_power_mode(self, port_num, lpmode): + # Check for invalid port_num + + return True + + def reset(self, port_num): + # Check for invalid port_num + if port_num < self.port_start or port_num > self.port_end: + return False + + return True + + def get_transceiver_change_event(self, timeout=0): + + start_time = time.time() + current_port_dict = {} + forever = False + + if timeout == 0: + forever = True + elif timeout > 0: + timeout = timeout / float(1000) # Convert to secs + else: + print ("get_transceiver_change_event:Invalid timeout value", timeout) + return False, {} + + end_time = start_time + timeout + if start_time > end_time: + print ('get_transceiver_change_event:' \ + 'time wrap / invalid timeout value', timeout) + + return False, {} # Time wrap or possibly incorrect timeout + + while timeout >= 0: + # Check for OIR events and return updated port_dict + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(x): + current_port_dict[x] = self.SFP_STATUS_INSERTED + else: + current_port_dict[x] = self.SFP_STATUS_REMOVED + if (current_port_dict == self.port_dict): + if forever: + time.sleep(1) + else: + timeout = end_time - time.time() + if timeout >= 1: + time.sleep(1) # We poll at 1 second granularity + else: + if timeout > 0: + time.sleep(timeout) + return True, {} + else: + # Update reg value + self.port_dict = current_port_dict + return True, self.port_dict + print ("get_transceiver_change_event: Should not reach here.") + return False, {} + + def get_highest_temperature(self): + offset = 0 + hightest_temperature = -9999 + + presence_flag = False + read_eeprom_flag = False + temperature_valid_flag = False + + for port in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(port) == False: + continue + + presence_flag = True + + if port in self.qsfp_dd_ports: + offset = 14 + elif port in self.qsfp_ports: + offset = 22 + else: + offset = 96 + + eeprom_path = self._get_port_eeprom_path(port, 0x50) + try: + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + read_eeprom_flag = True + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, offset, 2) + if len(eeprom_raw) != 0: + msb = int(eeprom_raw[0], 16) + lsb = int(eeprom_raw[1], 16) + + result = (msb << 8) | (lsb & 0xff) + result = float(result / 256.0) + if -50 <= result <= 200: + temperature_valid_flag = True + if hightest_temperature < result: + hightest_temperature = result + except Exception as e: + pass + + # all port not presence + if presence_flag == False: + hightest_temperature = -10000 + + # all port read eeprom fail + elif read_eeprom_flag == False: + hightest_temperature = -9999 + + # all port temperature invalid + elif read_eeprom_flag == True and temperature_valid_flag == False: + hightest_temperature = -10000 + + hightest_temperature = round(hightest_temperature, 2) + + return hightest_temperature diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/ssd_util.py b/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/ssd_util.py new file mode 100644 index 000000000000..e8cf2e1a7cbc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/plugins/ssd_util.py @@ -0,0 +1,318 @@ +# +# ssd_util.py +# +# Generic implementation of the SSD health API +# SSD models supported: +# - InnoDisk +# - StorFly +# - Virtium + +try: + import re + import os + import subprocess + from sonic_platform_base.sonic_storage.storage_base import StorageBase +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + +SMARTCTL = "smartctl {} -a" +INNODISK = "iSmart -d {}" +VIRTIUM = "SmartCmd -m {}" +DISK_LIST_CMD = "fdisk -l -o Device" +DISK_FREE_CMD = "df -h" +MOUNT_CMD = "mount" + +NOT_AVAILABLE = "N/A" +PE_CYCLE = 3000 +FAIL_PERCENT = 95 + +# Set Vendor Specific IDs +INNODISK_HEALTH_ID = 169 +INNODISK_TEMPERATURE_ID = 194 + +class SsdUtil(StorageBase): + """ + Generic implementation of the SSD health API + """ + model = NOT_AVAILABLE + serial = NOT_AVAILABLE + firmware = NOT_AVAILABLE + temperature = NOT_AVAILABLE + health = NOT_AVAILABLE + remaining_life = NOT_AVAILABLE + sata_rate = NOT_AVAILABLE + ssd_info = NOT_AVAILABLE + vendor_ssd_info = NOT_AVAILABLE + + def __init__(self, diskdev): + self.vendor_ssd_utility = { + "Generic" : { "utility" : SMARTCTL, "parser" : self.parse_generic_ssd_info }, + "InnoDisk" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "M.2" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "StorFly" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info }, + "Virtium" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info } + } + + """ + The dict model_attr keys relate the vendors + LITEON : "ER2-GD","AF2MA31DTDLT" + Intel : "SSDSCKKB" + SMI : "SM619GXC" + samsung: "MZNLH" + ADATA : "IM2S3134N" + """ + self.model_attr = { + "ER2-GD" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "AF2MA31DTDLT" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "SSDSCK" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n233\s+(.+?)\n" }, + "SM619GXC" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n169\s+(.+?)\n" }, + "MZNLH" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n245\s+(.+?)\n" }, + "IM2S3134N" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n231\s+(.+?)\n" }, + "MTFDDAV240TCB-1AR1ZABAA" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" } + } + + self.key_list = list(self.model_attr.keys()) + self.attr_info_rule = "[\s\S]*SMART Attributes Data Structure revision number: 1|SMART Error Log Version[\s\S]*" + self.dev = diskdev + # Generic part + self.fetch_generic_ssd_info(diskdev) + self.parse_generic_ssd_info() + self.fetch_vendor_ssd_info(diskdev, "Generic") + + # Known vendor part + if self.model: + model_short = self.model.split()[0] + if model_short in self.vendor_ssd_utility: + self.fetch_vendor_ssd_info(diskdev, model_short) + self.parse_vendor_ssd_info(model_short) + else: + # No handler registered for this disk model + pass + else: + # Failed to get disk model + self.model = "Unknown" + + def _execute_shell(self, cmd): + process = subprocess.Popen(cmd.split(), universal_newlines=True, stdout=subprocess.PIPE) + output, error = process.communicate() + exit_code = process.returncode + if exit_code: + return None + return output + + def _parse_re(self, pattern, buffer): + res_list = re.findall(pattern, str(buffer)) + return res_list[0] if res_list else NOT_AVAILABLE + + def fetch_generic_ssd_info(self, diskdev): + self.ssd_info = self._execute_shell(self.vendor_ssd_utility["Generic"]["utility"].format(diskdev)) + + # Health and temperature values may be overwritten with vendor specific data + def parse_generic_ssd_info(self): + if "nvme" in self.dev: + self.model = self._parse_re('Model Number:\s*(.+?)\n', self.ssd_info) + + health_raw = self._parse_re('Percentage Used\s*(.+?)\n', self.ssd_info) + if health_raw == NOT_AVAILABLE: + self.health = NOT_AVAILABLE + else: + health_raw = health_raw.split()[-1] + self.health = 100 - float(health_raw.strip('%')) + + temp_raw = self._parse_re('Temperature\s*(.+?)\n', self.ssd_info) + if temp_raw == NOT_AVAILABLE: + self.temperature = NOT_AVAILABLE + else: + temp_raw = temp_raw.split()[-2] + self.temperature = float(temp_raw) + else: + self.model = self._parse_re('Device Model:\s*(.+?)\n', self.ssd_info) + model_key = "" + for key in self.key_list: + if re.search(key, self.model): + model_key = key + break + if model_key != "": + self.remaining_life = self._parse_re(self.model_attr[model_key]["remainingLife"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[2] + self.temperature = self._parse_re(self.model_attr[model_key]["temperature"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[8] + self.health = self.remaining_life + # Get the LITEON ssd health value by (PE CYCLE - AVG ERASE CYCLE )/(PE CYCLE) + if model_key in ["ER2-GD", "AF2MA31DTDLT"]: + avg_erase = int(self._parse_re('\n173\s+(.+?)\n' ,re.sub(self.attr_info_rule,"",self.ssd_info)).split()[-1]) + self.health = int(round((PE_CYCLE - avg_erase)/PE_CYCLE*100,0)) + if self.remaining_life != NOT_AVAILABLE and int(self.remaining_life) < FAIL_PERCENT: + self.remaining_life = "Fail" + self.sata_rate = self._parse_re('SATA Version is:.*current: (.+?)\)\n', self.ssd_info) + self.serial = self._parse_re('Serial Number:\s*(.+?)\n', self.ssd_info) + self.firmware = self._parse_re('Firmware Version:\s*(.+?)\n', self.ssd_info) + + def parse_innodisk_info(self): + if self.vendor_ssd_info: + self.health = self._parse_re('Health:\s*(.+?)%', self.vendor_ssd_info) + self.temperature = self._parse_re('Temperature\s*\[\s*(.+?)\]', self.vendor_ssd_info) + else: + if self.health == NOT_AVAILABLE: + health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + self.health = health_raw.split()[-1] + if self.temperature == NOT_AVAILABLE: + temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + self.temperature = temp_raw.split()[-6] + + def parse_virtium_info(self): + if self.vendor_ssd_info: + self.temperature = self._parse_re('Temperature_Celsius\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + nand_endurance = self._parse_re('NAND_Endurance\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + avg_erase_count = self._parse_re('Average_Erase_Count\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + try: + self.health = 100 - (float(avg_erase_count) * 100 / float(nand_endurance)) + except (ValueError, ZeroDivisionError): + # Invalid avg_erase_count or nand_endurance. + pass + + def fetch_vendor_ssd_info(self, diskdev, model): + self.vendor_ssd_info = self._execute_shell(self.vendor_ssd_utility[model]["utility"].format(diskdev)) + + def parse_vendor_ssd_info(self, model): + self.vendor_ssd_utility[model]["parser"]() + + def check_readonly2(self, partition, filesystem): + # parse mount cmd output info + mount_info = self._execute_shell(MOUNT_CMD) + for line in mount_info.split('\n'): + column_list = line.split() + if line == '': + continue + if column_list[0] == partition and column_list[2] == filesystem: + if column_list[5].split(',')[0][1:] == "ro": + return partition + else: + return NOT_AVAILABLE + return NOT_AVAILABLE + + def check_readonly(self, partition, filesystem): + ret = os.access(filesystem, os.W_OK) + if ret == False: + return partition + else: + return NOT_AVAILABLE + + def get_health(self): + """ + Retrieves current disk health in percentages + + Returns: + A float number of current ssd health + e.g. 83.5 + """ + if self.health == 'N/A': + return "NA" + else: + return float(self.health) + + def get_temperature(self): + """ + Retrieves current disk temperature in Celsius + + Returns: + A float number of current temperature in Celsius + e.g. 40.1 + """ + if self.temperature == 'N/A': + return 'NA' + else: + return float(self.temperature) + + def get_model(self): + """ + Retrieves model for the given disk device + + Returns: + A string holding disk model as provided by the manufacturer + """ + return self.model + + def get_firmware(self): + """ + Retrieves firmware version for the given disk device + + Returns: + A string holding disk firmware version as provided by the manufacturer + """ + return self.firmware + + def get_serial(self): + """ + Retrieves serial number for the given disk device + + Returns: + A string holding disk serial number as provided by the manufacturer + """ + return self.serial + def get_sata_rate(self): + """ + Retrieves SATA rate for the given disk device + Returns: + A string holding current SATA rate as provided by the manufacturer + """ + return self.sata_rate + def get_remaining_life(self): + """ + Retrieves remaining life for the given disk device + Returns: + A string holding disk remaining life as provided by the manufacturer + """ + return self.remaining_life + def get_vendor_output(self): + """ + Retrieves vendor specific data for the given disk device + + Returns: + A string holding some vendor specific disk information + """ + return self.vendor_ssd_info + + def parse_id_number(self, id): + return self._parse_re('{}\s*(.+?)\n'.format(id), self.ssd_info) + + def get_readonly_partition(self): + """ + Check the partition mount filesystem is readonly status,then output the result. + Returns: + The readonly partition list + """ + + ro_partition_list = [] + partition_list = [] + + # parse fdisk cmd output info + disk_info = self._execute_shell(DISK_LIST_CMD) + begin_flag = False + for line in disk_info.split('\n'): + if line == "Device": + begin_flag = True + continue + if begin_flag: + if line != "": + partition_list.append(line) + else: + break + + # parse df cmd output info + disk_free = self._execute_shell(DISK_FREE_CMD) + disk_dict = {} + line_num = 0 + for line in disk_free.split('\n'): + line_num = line_num + 1 + if line_num == 1 or line == "": + continue + column_list = line.split() + disk_dict[column_list[0]] = column_list[5] + + # get partition which is readonly + for partition in partition_list: + if partition in disk_dict: + ret = self.check_readonly(partition, disk_dict[partition]) + if (ret != NOT_AVAILABLE): + ro_partition_list.append(ret) + + return ro_partition_list diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/pmon_daemon_control.json b/device/micas/x86_64-micas_m2-w6930-64qc-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..94592fa8cebc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/pmon_daemon_control.json @@ -0,0 +1,3 @@ +{ + "skip_ledd": true +} diff --git a/device/micas/x86_64-micas_m2-w6930-64qc-r0/postinit_cmd_file.soc b/device/micas/x86_64-micas_m2-w6930-64qc-r0/postinit_cmd_file.soc new file mode 100644 index 000000000000..fa28dafe16cb --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6930-64qc-r0/postinit_cmd_file.soc @@ -0,0 +1,4 @@ +led load /usr/share/sonic/platform/custom_led.bin +led auto on +led start +linkscan SwPortBitMap=xe,ce,cd \ No newline at end of file diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/__init__.py b/device/micas/x86_64-micas_m2-w6930-64qc-r0/system_health_monitoring_config.json old mode 100644 new mode 100755 similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/__init__.py rename to device/micas/x86_64-micas_m2-w6930-64qc-r0/system_health_monitoring_config.json diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/hwsku.json b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/hwsku.json new file mode 100644 index 000000000000..bb061f71ec60 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/hwsku.json @@ -0,0 +1,388 @@ +{ + "interfaces": { + "Ethernet1": { + "default_brkout_mode": "1x400G" + }, + "Ethernet5": { + "default_brkout_mode": "1x400G" + }, + "Ethernet9": { + "default_brkout_mode": "1x400G" + }, + "Ethernet13": { + "default_brkout_mode": "1x400G" + }, + "Ethernet17": { + "default_brkout_mode": "1x400G" + }, + "Ethernet21": { + "default_brkout_mode": "1x400G" + }, + "Ethernet25": { + "default_brkout_mode": "1x400G" + }, + "Ethernet29": { + "default_brkout_mode": "1x400G" + }, + "Ethernet33": { + "default_brkout_mode": "1x400G" + }, + "Ethernet37": { + "default_brkout_mode": "1x400G" + }, + "Ethernet41": { + "default_brkout_mode": "1x400G" + }, + "Ethernet45": { + "default_brkout_mode": "1x400G" + }, + "Ethernet49": { + "default_brkout_mode": "1x400G" + }, + "Ethernet53": { + "default_brkout_mode": "1x400G" + }, + "Ethernet57": { + "default_brkout_mode": "1x400G" + }, + "Ethernet61": { + "default_brkout_mode": "1x400G" + }, + "Ethernet65": { + "default_brkout_mode": "1x400G" + }, + "Ethernet69": { + "default_brkout_mode": "1x400G" + }, + "Ethernet73": { + "default_brkout_mode": "1x400G" + }, + "Ethernet77": { + "default_brkout_mode": "1x400G" + }, + "Ethernet81": { + "default_brkout_mode": "1x400G" + }, + "Ethernet85": { + "default_brkout_mode": "1x400G" + }, + "Ethernet89": { + "default_brkout_mode": "1x400G" + }, + "Ethernet93": { + "default_brkout_mode": "1x400G" + }, + "Ethernet97": { + "default_brkout_mode": "1x400G" + }, + "Ethernet101": { + "default_brkout_mode": "1x400G" + }, + "Ethernet105": { + "default_brkout_mode": "1x400G" + }, + "Ethernet109": { + "default_brkout_mode": "1x400G" + }, + "Ethernet113": { + "default_brkout_mode": "1x400G" + }, + "Ethernet117": { + "default_brkout_mode": "1x400G" + }, + "Ethernet121": { + "default_brkout_mode": "1x400G" + }, + "Ethernet125": { + "default_brkout_mode": "1x400G" + }, + "Ethernet129": { + "default_brkout_mode": "1x400G" + }, + "Ethernet133": { + "default_brkout_mode": "1x400G" + }, + "Ethernet137": { + "default_brkout_mode": "1x400G" + }, + "Ethernet141": { + "default_brkout_mode": "1x400G" + }, + "Ethernet145": { + "default_brkout_mode": "1x400G" + }, + "Ethernet149": { + "default_brkout_mode": "1x400G" + }, + "Ethernet153": { + "default_brkout_mode": "1x400G" + }, + "Ethernet157": { + "default_brkout_mode": "1x400G" + }, + "Ethernet161": { + "default_brkout_mode": "1x400G" + }, + "Ethernet165": { + "default_brkout_mode": "1x400G" + }, + "Ethernet169": { + "default_brkout_mode": "1x400G" + }, + "Ethernet173": { + "default_brkout_mode": "1x400G" + }, + "Ethernet177": { + "default_brkout_mode": "1x400G" + }, + "Ethernet181": { + "default_brkout_mode": "1x400G" + }, + "Ethernet185": { + "default_brkout_mode": "1x400G" + }, + "Ethernet189": { + "default_brkout_mode": "1x400G" + }, + "Ethernet193": { + "default_brkout_mode": "1x400G" + }, + "Ethernet197": { + "default_brkout_mode": "1x400G" + }, + "Ethernet201": { + "default_brkout_mode": "1x400G" + }, + "Ethernet205": { + "default_brkout_mode": "1x400G" + }, + "Ethernet209": { + "default_brkout_mode": "1x400G" + }, + "Ethernet213": { + "default_brkout_mode": "1x400G" + }, + "Ethernet217": { + "default_brkout_mode": "1x400G" + }, + "Ethernet221": { + "default_brkout_mode": "1x400G" + }, + "Ethernet225": { + "default_brkout_mode": "1x400G" + }, + "Ethernet229": { + "default_brkout_mode": "1x400G" + }, + "Ethernet233": { + "default_brkout_mode": "1x400G" + }, + "Ethernet237": { + "default_brkout_mode": "1x400G" + }, + "Ethernet241": { + "default_brkout_mode": "1x400G" + }, + "Ethernet245": { + "default_brkout_mode": "1x400G" + }, + "Ethernet249": { + "default_brkout_mode": "1x400G" + }, + "Ethernet253": { + "default_brkout_mode": "1x400G" + }, + "Ethernet257": { + "default_brkout_mode": "1x400G" + }, + "Ethernet261": { + "default_brkout_mode": "1x400G" + }, + "Ethernet265": { + "default_brkout_mode": "1x400G" + }, + "Ethernet269": { + "default_brkout_mode": "1x400G" + }, + "Ethernet273": { + "default_brkout_mode": "1x400G" + }, + "Ethernet277": { + "default_brkout_mode": "1x400G" + }, + "Ethernet281": { + "default_brkout_mode": "1x400G" + }, + "Ethernet285": { + "default_brkout_mode": "1x400G" + }, + "Ethernet289": { + "default_brkout_mode": "1x400G" + }, + "Ethernet293": { + "default_brkout_mode": "1x400G" + }, + "Ethernet297": { + "default_brkout_mode": "1x400G" + }, + "Ethernet301": { + "default_brkout_mode": "1x400G" + }, + "Ethernet305": { + "default_brkout_mode": "1x400G" + }, + "Ethernet309": { + "default_brkout_mode": "1x400G" + }, + "Ethernet313": { + "default_brkout_mode": "1x400G" + }, + "Ethernet317": { + "default_brkout_mode": "1x400G" + }, + "Ethernet321": { + "default_brkout_mode": "1x400G" + }, + "Ethernet325": { + "default_brkout_mode": "1x400G" + }, + "Ethernet329": { + "default_brkout_mode": "1x400G" + }, + "Ethernet333": { + "default_brkout_mode": "1x400G" + }, + "Ethernet337": { + "default_brkout_mode": "1x400G" + }, + "Ethernet341": { + "default_brkout_mode": "1x400G" + }, + "Ethernet345": { + "default_brkout_mode": "1x400G" + }, + "Ethernet349": { + "default_brkout_mode": "1x400G" + }, + "Ethernet353": { + "default_brkout_mode": "1x400G" + }, + "Ethernet357": { + "default_brkout_mode": "1x400G" + }, + "Ethernet361": { + "default_brkout_mode": "1x400G" + }, + "Ethernet365": { + "default_brkout_mode": "1x400G" + }, + "Ethernet369": { + "default_brkout_mode": "1x400G" + }, + "Ethernet373": { + "default_brkout_mode": "1x400G" + }, + "Ethernet377": { + "default_brkout_mode": "1x400G" + }, + "Ethernet381": { + "default_brkout_mode": "1x400G" + }, + "Ethernet385": { + "default_brkout_mode": "1x400G" + }, + "Ethernet389": { + "default_brkout_mode": "1x400G" + }, + "Ethernet393": { + "default_brkout_mode": "1x400G" + }, + "Ethernet397": { + "default_brkout_mode": "1x400G" + }, + "Ethernet401": { + "default_brkout_mode": "1x400G" + }, + "Ethernet405": { + "default_brkout_mode": "1x400G" + }, + "Ethernet409": { + "default_brkout_mode": "1x400G" + }, + "Ethernet413": { + "default_brkout_mode": "1x400G" + }, + "Ethernet417": { + "default_brkout_mode": "1x400G" + }, + "Ethernet421": { + "default_brkout_mode": "1x400G" + }, + "Ethernet425": { + "default_brkout_mode": "1x400G" + }, + "Ethernet429": { + "default_brkout_mode": "1x400G" + }, + "Ethernet433": { + "default_brkout_mode": "1x400G" + }, + "Ethernet437": { + "default_brkout_mode": "1x400G" + }, + "Ethernet441": { + "default_brkout_mode": "1x400G" + }, + "Ethernet445": { + "default_brkout_mode": "1x400G" + }, + "Ethernet449": { + "default_brkout_mode": "1x400G" + }, + "Ethernet453": { + "default_brkout_mode": "1x400G" + }, + "Ethernet457": { + "default_brkout_mode": "1x400G" + }, + "Ethernet461": { + "default_brkout_mode": "1x400G" + }, + "Ethernet465": { + "default_brkout_mode": "1x400G" + }, + "Ethernet469": { + "default_brkout_mode": "1x400G" + }, + "Ethernet473": { + "default_brkout_mode": "1x400G" + }, + "Ethernet477": { + "default_brkout_mode": "1x400G" + }, + "Ethernet481": { + "default_brkout_mode": "1x400G" + }, + "Ethernet485": { + "default_brkout_mode": "1x400G" + }, + "Ethernet489": { + "default_brkout_mode": "1x400G" + }, + "Ethernet493": { + "default_brkout_mode": "1x400G" + }, + "Ethernet497": { + "default_brkout_mode": "1x400G" + }, + "Ethernet501": { + "default_brkout_mode": "1x400G" + }, + "Ethernet505": { + "default_brkout_mode": "1x400G" + }, + "Ethernet509": { + "default_brkout_mode": "1x400G" + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/port_config.ini b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/port_config.ini new file mode 100644 index 000000000000..b54cae009e49 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/port_config.ini @@ -0,0 +1,129 @@ +# name lanes alias index speed +Ethernet1 17,18,19,20 fourhundredGigE0/1 0 400000 +Ethernet5 21,22,23,24 fourhundredGigE0/2 1 400000 +Ethernet9 25,26,27,28 fourhundredGigE0/3 2 400000 +Ethernet13 29,30,31,32 fourhundredGigE0/4 3 400000 +Ethernet17 129,130,131,132 fourhundredGigE0/5 4 400000 +Ethernet21 133,134,135,136 fourhundredGigE0/6 5 400000 +Ethernet25 41,42,43,44 fourhundredGigE0/7 6 400000 +Ethernet29 45,46,47,48 fourhundredGigE0/8 7 400000 +Ethernet33 57,58,59,60 fourhundredGigE0/9 8 400000 +Ethernet37 61,62,63,64 fourhundredGigE0/10 9 400000 +Ethernet41 145,146,147,148 fourhundredGigE0/11 10 400000 +Ethernet45 149,150,151,152 fourhundredGigE0/12 11 400000 +Ethernet49 137,138,139,140 fourhundredGigE0/13 12 400000 +Ethernet53 141,142,143,144 fourhundredGigE0/14 13 400000 +Ethernet57 33,34,35,36 fourhundredGigE0/15 14 400000 +Ethernet61 37,38,39,40 fourhundredGigE0/16 15 400000 +Ethernet65 161,162,163,164 fourhundredGigE0/17 16 400000 +Ethernet69 165,166,167,168 fourhundredGigE0/18 17 400000 +Ethernet73 153,154,155,156 fourhundredGigE0/19 18 400000 +Ethernet77 157,158,159,160 fourhundredGigE0/20 19 400000 +Ethernet81 49,50,51,52 fourhundredGigE0/21 20 400000 +Ethernet85 53,54,55,56 fourhundredGigE0/22 21 400000 +Ethernet89 177,178,179,180 fourhundredGigE0/23 22 400000 +Ethernet93 181,182,183,184 fourhundredGigE0/24 23 400000 +Ethernet97 169,170,171,172 fourhundredGigE0/25 24 400000 +Ethernet101 173,174,175,176 fourhundredGigE0/26 25 400000 +Ethernet105 65,66,67,68 fourhundredGigE0/27 26 400000 +Ethernet109 69,70,71,72 fourhundredGigE0/28 27 400000 +Ethernet113 209,210,211,212 fourhundredGigE0/29 28 400000 +Ethernet117 213,214,215,216 fourhundredGigE0/30 29 400000 +Ethernet121 185,186,187,188 fourhundredGigE0/31 30 400000 +Ethernet125 189,190,191,192 fourhundredGigE0/32 31 400000 +Ethernet129 81,82,83,84 fourhundredGigE0/33 32 400000 +Ethernet133 85,86,87,88 fourhundredGigE0/34 33 400000 +Ethernet137 193,194,195,196 fourhundredGigE0/35 34 400000 +Ethernet141 197,198,199,200 fourhundredGigE0/36 35 400000 +Ethernet145 201,202,203,204 fourhundredGigE0/37 36 400000 +Ethernet149 205,206,207,208 fourhundredGigE0/38 37 400000 +Ethernet153 97,98,99,100 fourhundredGigE0/39 38 400000 +Ethernet157 101,102,103,104 fourhundredGigE0/40 39 400000 +Ethernet161 121,122,123,124 fourhundredGigE0/41 40 400000 +Ethernet165 125,126,127,128 fourhundredGigE0/42 41 400000 +Ethernet169 217,218,219,220 fourhundredGigE0/43 42 400000 +Ethernet173 221,222,223,224 fourhundredGigE0/44 43 400000 +Ethernet177 113,114,115,116 fourhundredGigE0/45 44 400000 +Ethernet181 117,118,119,120 fourhundredGigE0/46 45 400000 +Ethernet185 105,106,107,108 fourhundredGigE0/47 46 400000 +Ethernet189 109,110,111,112 fourhundredGigE0/48 47 400000 +Ethernet193 225,226,227,228 fourhundredGigE0/49 48 400000 +Ethernet197 229,230,231,232 fourhundredGigE0/50 49 400000 +Ethernet201 233,234,235,236 fourhundredGigE0/51 50 400000 +Ethernet205 237,238,239,240 fourhundredGigE0/52 51 400000 +Ethernet209 89,90,91,92 fourhundredGigE0/53 52 400000 +Ethernet213 93,94,95,96 fourhundredGigE0/54 53 400000 +Ethernet217 241,242,243,244 fourhundredGigE0/55 54 400000 +Ethernet221 245,246,247,248 fourhundredGigE0/56 55 400000 +Ethernet225 249,250,251,252 fourhundredGigE0/57 56 400000 +Ethernet229 253,254,255,256 fourhundredGigE0/58 57 400000 +Ethernet233 73,74,75,76 fourhundredGigE0/59 58 400000 +Ethernet237 77,78,79,80 fourhundredGigE0/60 59 400000 +Ethernet241 257,258,259,260 fourhundredGigE0/61 60 400000 +Ethernet245 261,262,263,264 fourhundredGigE0/62 61 400000 +Ethernet249 265,266,267,268 fourhundredGigE0/63 62 400000 +Ethernet253 269,270,271,272 fourhundredGigE0/64 63 400000 +Ethernet257 433,434,435,436 fourhundredGigE0/65 64 400000 +Ethernet261 437,438,439,440 fourhundredGigE0/66 65 400000 +Ethernet265 273,274,275,276 fourhundredGigE0/67 66 400000 +Ethernet269 277,278,279,280 fourhundredGigE0/68 67 400000 +Ethernet273 281,282,283,284 fourhundredGigE0/69 68 400000 +Ethernet277 285,286,287,288 fourhundredGigE0/70 69 400000 +Ethernet281 417,418,419,420 fourhundredGigE0/71 70 400000 +Ethernet285 421,422,423,424 fourhundredGigE0/72 71 400000 +Ethernet289 393,394,395,396 fourhundredGigE0/73 72 400000 +Ethernet293 397,398,399,400 fourhundredGigE0/74 73 400000 +Ethernet297 289,290,291,292 fourhundredGigE0/75 74 400000 +Ethernet301 293,294,295,296 fourhundredGigE0/76 75 400000 +Ethernet305 401,402,403,404 fourhundredGigE0/77 76 400000 +Ethernet309 405,406,407,408 fourhundredGigE0/78 77 400000 +Ethernet313 409,410,411,412 fourhundredGigE0/79 78 400000 +Ethernet317 413,414,415,416 fourhundredGigE0/80 79 400000 +Ethernet321 305,306,307,308 fourhundredGigE0/81 80 400000 +Ethernet325 309,310,311,312 fourhundredGigE0/82 81 400000 +Ethernet329 385,386,387,388 fourhundredGigE0/83 82 400000 +Ethernet333 389,390,391,392 fourhundredGigE0/84 83 400000 +Ethernet337 425,426,427,428 fourhundredGigE0/85 84 400000 +Ethernet341 429,430,431,432 fourhundredGigE0/86 85 400000 +Ethernet345 321,322,323,324 fourhundredGigE0/87 86 400000 +Ethernet349 325,326,327,328 fourhundredGigE0/88 87 400000 +Ethernet353 313,314,315,316 fourhundredGigE0/89 88 400000 +Ethernet357 317,318,319,320 fourhundredGigE0/90 89 400000 +Ethernet361 441,442,443,444 fourhundredGigE0/91 90 400000 +Ethernet365 445,446,447,448 fourhundredGigE0/92 91 400000 +Ethernet369 337,338,339,340 fourhundredGigE0/93 92 400000 +Ethernet373 341,342,343,344 fourhundredGigE0/94 93 400000 +Ethernet377 297,298,299,300 fourhundredGigE0/95 94 400000 +Ethernet381 301,302,303,304 fourhundredGigE0/96 95 400000 +Ethernet385 457,458,459,460 fourhundredGigE0/97 96 400000 +Ethernet389 461,462,463,464 fourhundredGigE0/98 97 400000 +Ethernet393 353,354,355,356 fourhundredGigE0/99 98 400000 +Ethernet397 357,358,359,360 fourhundredGigE0/100 99 400000 +Ethernet401 329,330,331,332 fourhundredGigE0/101 100 400000 +Ethernet405 333,334,335,336 fourhundredGigE0/102 101 400000 +Ethernet409 473,474,475,476 fourhundredGigE0/103 102 400000 +Ethernet413 477,478,479,480 fourhundredGigE0/104 103 400000 +Ethernet417 369,370,371,372 fourhundredGigE0/105 104 400000 +Ethernet421 373,374,375,376 fourhundredGigE0/106 105 400000 +Ethernet425 345,346,347,348 fourhundredGigE0/107 106 400000 +Ethernet429 349,350,351,352 fourhundredGigE0/108 107 400000 +Ethernet433 449,450,451,452 fourhundredGigE0/109 108 400000 +Ethernet437 453,454,455,456 fourhundredGigE0/110 109 400000 +Ethernet441 465,466,467,468 fourhundredGigE0/111 110 400000 +Ethernet445 469,470,471,472 fourhundredGigE0/112 111 400000 +Ethernet449 361,362,363,364 fourhundredGigE0/113 112 400000 +Ethernet453 365,366,367,368 fourhundredGigE0/114 113 400000 +Ethernet457 489,490,491,492 fourhundredGigE0/115 114 400000 +Ethernet461 493,494,495,496 fourhundredGigE0/116 115 400000 +Ethernet465 481,482,483,484 fourhundredGigE0/117 116 400000 +Ethernet469 485,486,487,488 fourhundredGigE0/118 117 400000 +Ethernet473 377,378,379,380 fourhundredGigE0/119 118 400000 +Ethernet477 381,382,383,384 fourhundredGigE0/120 119 400000 +Ethernet481 505,506,507,508 fourhundredGigE0/121 120 400000 +Ethernet485 509,510,511,512 fourhundredGigE0/122 121 400000 +Ethernet489 497,498,499,500 fourhundredGigE0/123 122 400000 +Ethernet493 501,502,503,504 fourhundredGigE0/124 123 400000 +Ethernet497 9,10,11,12 fourhundredGigE0/125 124 400000 +Ethernet501 13,14,15,16 fourhundredGigE0/126 125 400000 +Ethernet505 1,2,3,4 fourhundredGigE0/127 126 400000 +Ethernet509 5,6,7,8 fourhundredGigE0/128 127 400000 diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/sai.profile b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/sai.profile new file mode 100644 index 000000000000..7bb477ebfafb --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th5-m2-w6940-128qc-128x400g-config.yml \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/th5-m2-w6940-128qc-128x400g-config.yml b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/th5-m2-w6940-128qc-128x400g-config.yml new file mode 100644 index 000000000000..cba00ec82fc7 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/M2-W6940-128QC/th5-m2-w6940-128qc-128x400g-config.yml @@ -0,0 +1,16226 @@ +--- +device: + 0: + DEVICE_CONFIG: + AUTOLOAD_BOARD_SETTINGS: 0 +... +--- +device: + 0: + PC_PM_CORE: + ? + PC_PM_ID: 1 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46205173 + RX_LANE_MAP: 0x46205173 + TX_POLARITY_FLIP: 0xf + RX_POLARITY_FLIP: 0x2 + ? + PC_PM_ID: 2 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37152046 + RX_LANE_MAP: 0x37152046 + TX_POLARITY_FLIP: 0xc9 + RX_POLARITY_FLIP: 0x1e + ? + PC_PM_ID: 3 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x26043157 + RX_LANE_MAP: 0x26043157 + TX_POLARITY_FLIP: 0xf0 + RX_POLARITY_FLIP: 0xd7 + ? + PC_PM_ID: 4 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57314062 + RX_LANE_MAP: 0x57314062 + TX_POLARITY_FLIP: 0x9c + RX_POLARITY_FLIP: 0xe1 + ? + PC_PM_ID: 5 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x47315062 + RX_LANE_MAP: 0x47315062 + TX_POLARITY_FLIP: 0x8d + RX_POLARITY_FLIP: 0x37 + ? + PC_PM_ID: 6 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x25371046 + RX_LANE_MAP: 0x25371046 + TX_POLARITY_FLIP: 0x4a + RX_POLARITY_FLIP: 0xca + ? + PC_PM_ID: 7 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46107352 + RX_LANE_MAP: 0x46107352 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x4f + ? + PC_PM_ID: 8 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46103572 + RX_LANE_MAP: 0x10462537 + TX_POLARITY_FLIP: 0x49 + RX_POLARITY_FLIP: 0x43 + ? + PC_PM_ID: 9 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46107352 + RX_LANE_MAP: 0x46107352 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x4f + ? + PC_PM_ID: 10 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x10462375 + RX_LANE_MAP: 0x10462375 + TX_POLARITY_FLIP: 0xe1 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 11 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46107352 + RX_LANE_MAP: 0x46107352 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x4f + ? + PC_PM_ID: 12 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x10462375 + RX_LANE_MAP: 0x10462375 + TX_POLARITY_FLIP: 0xe1 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 13 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46107352 + RX_LANE_MAP: 0x46107352 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x5f + ? + PC_PM_ID: 14 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x10462375 + RX_LANE_MAP: 0x10462375 + TX_POLARITY_FLIP: 0xe1 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 15 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46107352 + RX_LANE_MAP: 0x46107352 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x4f + ? + PC_PM_ID: 16 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x10462375 + RX_LANE_MAP: 0x10462375 + TX_POLARITY_FLIP: 0xe1 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 17 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x01463257 + RX_LANE_MAP: 0x01463257 + TX_POLARITY_FLIP: 0xcb + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 18 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x52734601 + RX_LANE_MAP: 0x52734601 + TX_POLARITY_FLIP: 0xb3 + RX_POLARITY_FLIP: 0x6e + ? + PC_PM_ID: 19 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x01463257 + RX_LANE_MAP: 0x01463257 + TX_POLARITY_FLIP: 0xcb + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 20 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x52734601 + RX_LANE_MAP: 0x52734601 + TX_POLARITY_FLIP: 0xb3 + RX_POLARITY_FLIP: 0x6e + ? + PC_PM_ID: 21 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x01463257 + RX_LANE_MAP: 0x01463257 + TX_POLARITY_FLIP: 0xcb + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 22 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x52734601 + RX_LANE_MAP: 0x52734601 + TX_POLARITY_FLIP: 0xb3 + RX_POLARITY_FLIP: 0x6e + ? + PC_PM_ID: 23 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x01463257 + RX_LANE_MAP: 0x01463257 + TX_POLARITY_FLIP: 0xcb + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 24 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x52734601 + RX_LANE_MAP: 0x52734601 + TX_POLARITY_FLIP: 0xb3 + RX_POLARITY_FLIP: 0x6e + ? + PC_PM_ID: 25 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x46015732 + RX_LANE_MAP: 0x46015732 + TX_POLARITY_FLIP: 0x3e + RX_POLARITY_FLIP: 0xf3 + ? + PC_PM_ID: 26 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x52734601 + RX_LANE_MAP: 0x52734601 + TX_POLARITY_FLIP: 0xb3 + RX_POLARITY_FLIP: 0x6e + ? + PC_PM_ID: 27 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324601 + RX_LANE_MAP: 0x57324601 + TX_POLARITY_FLIP: 0xe1 + RX_POLARITY_FLIP: 0x7f + ? + PC_PM_ID: 28 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41507632 + RX_LANE_MAP: 0x41507632 + TX_POLARITY_FLIP: 0x8d + RX_POLARITY_FLIP: 0xcf + ? + PC_PM_ID: 29 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x51734620 + RX_LANE_MAP: 0x51734620 + TX_POLARITY_FLIP: 0xc9 + RX_POLARITY_FLIP: 0xd1 + ? + PC_PM_ID: 30 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x20463715 + RX_LANE_MAP: 0x20463715 + TX_POLARITY_FLIP: 0xff + RX_POLARITY_FLIP: 0x72 + ? + PC_PM_ID: 31 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x51734620 + RX_LANE_MAP: 0x51734620 + TX_POLARITY_FLIP: 0xc9 + RX_POLARITY_FLIP: 0x51 + ? + PC_PM_ID: 32 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x20463715 + RX_LANE_MAP: 0x20463715 + TX_POLARITY_FLIP: 0xff + RX_POLARITY_FLIP: 0x72 + ? + PC_PM_ID: 33 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x26043157 + RX_LANE_MAP: 0x26043157 + TX_POLARITY_FLIP: 0xff + RX_POLARITY_FLIP: 0x7 + ? + PC_PM_ID: 34 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57314062 + RX_LANE_MAP: 0x57314062 + TX_POLARITY_FLIP: 0x9c + RX_POLARITY_FLIP: 0x81 + ? + PC_PM_ID: 35 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x26043157 + RX_LANE_MAP: 0x26043157 + TX_POLARITY_FLIP: 0xff + RX_POLARITY_FLIP: 0xa7 + ? + PC_PM_ID: 36 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57314062 + RX_LANE_MAP: 0x57314062 + TX_POLARITY_FLIP: 0x9c + RX_POLARITY_FLIP: 0x81 + ? + PC_PM_ID: 37 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x45017263 + RX_LANE_MAP: 0x45017263 + TX_POLARITY_FLIP: 0x8e + RX_POLARITY_FLIP: 0x9e + ? + PC_PM_ID: 38 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x01463257 + RX_LANE_MAP: 0x01463257 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x43 + ? + PC_PM_ID: 39 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324160 + RX_LANE_MAP: 0x57324160 + TX_POLARITY_FLIP: 0xe5 + RX_POLARITY_FLIP: 0x7b + ? + PC_PM_ID: 40 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x32570146 + RX_LANE_MAP: 0x32570146 + TX_POLARITY_FLIP: 0x43 + RX_POLARITY_FLIP: 0x30 + ? + PC_PM_ID: 41 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324160 + RX_LANE_MAP: 0x57324160 + TX_POLARITY_FLIP: 0xe5 + RX_POLARITY_FLIP: 0x7b + ? + PC_PM_ID: 42 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324601 + RX_LANE_MAP: 0x57324601 + TX_POLARITY_FLIP: 0x1c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 43 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324160 + RX_LANE_MAP: 0x57324160 + TX_POLARITY_FLIP: 0xe5 + RX_POLARITY_FLIP: 0x7b + ? + PC_PM_ID: 44 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324601 + RX_LANE_MAP: 0x57324601 + TX_POLARITY_FLIP: 0x1c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 45 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324160 + RX_LANE_MAP: 0x57324160 + TX_POLARITY_FLIP: 0xe5 + RX_POLARITY_FLIP: 0x7b + ? + PC_PM_ID: 46 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324601 + RX_LANE_MAP: 0x57324601 + TX_POLARITY_FLIP: 0x1c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 47 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324160 + RX_LANE_MAP: 0x57324160 + TX_POLARITY_FLIP: 0xe5 + RX_POLARITY_FLIP: 0x7b + ? + PC_PM_ID: 48 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x57324601 + RX_LANE_MAP: 0x57324601 + TX_POLARITY_FLIP: 0x1c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 49 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x75234610 + RX_LANE_MAP: 0x75234610 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 50 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x40617523 + RX_LANE_MAP: 0x40617523 + TX_POLARITY_FLIP: 0x2b + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 51 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x75234610 + RX_LANE_MAP: 0x75234610 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 52 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x40617523 + RX_LANE_MAP: 0x40617523 + TX_POLARITY_FLIP: 0x2b + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 53 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x75234610 + RX_LANE_MAP: 0x75234610 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 54 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x40617523 + RX_LANE_MAP: 0x40617523 + TX_POLARITY_FLIP: 0x2b + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 55 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x75234610 + RX_LANE_MAP: 0x75234610 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 56 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x40617523 + RX_LANE_MAP: 0x40617523 + TX_POLARITY_FLIP: 0x2b + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 57 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73524610 + RX_LANE_MAP: 0x73524610 + TX_POLARITY_FLIP: 0xd4 + RX_POLARITY_FLIP: 0xed + ? + PC_PM_ID: 58 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x40617523 + RX_LANE_MAP: 0x40617523 + TX_POLARITY_FLIP: 0x2b + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 59 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x23751604 + RX_LANE_MAP: 0x23751604 + TX_POLARITY_FLIP: 0x19 + RX_POLARITY_FLIP: 0x99 + ? + PC_PM_ID: 60 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41735620 + RX_LANE_MAP: 0x41735620 + TX_POLARITY_FLIP: 0x8b + RX_POLARITY_FLIP: 0xc + ? + PC_PM_ID: 61 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x20463715 + RX_LANE_MAP: 0x20463715 + TX_POLARITY_FLIP: 0x9c + RX_POLARITY_FLIP: 0xe1 + ? + PC_PM_ID: 62 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x51734620 + RX_LANE_MAP: 0x51734620 + TX_POLARITY_FLIP: 0xf0 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 63 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x20463715 + RX_LANE_MAP: 0x20463715 + TX_POLARITY_FLIP: 0x9c + RX_POLARITY_FLIP: 0xe9 + ? + PC_PM_ID: 64 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x51734620 + RX_LANE_MAP: 0x51734620 + TX_POLARITY_FLIP: 0xf0 + RX_POLARITY_FLIP: 0x20 +... + +--- +device: + 0: + PC_PORT_PHYS_MAP: + ? + # CPU port + PORT_ID: 0 + : + PC_PHYS_PORT_ID: 0 + ? + PORT_ID: 1 + : + PC_PHYS_PORT_ID: 1 + ? + PORT_ID: 3 + : + PC_PHYS_PORT_ID: 5 + ? + PORT_ID: 5 + : + PC_PHYS_PORT_ID: 9 + ? + PORT_ID: 7 + : + PC_PHYS_PORT_ID: 13 + ? + PORT_ID: 11 + : + PC_PHYS_PORT_ID: 17 + ? + PORT_ID: 13 + : + PC_PHYS_PORT_ID: 21 + ? + PORT_ID: 15 + : + PC_PHYS_PORT_ID: 25 + ? + PORT_ID: 17 + : + PC_PHYS_PORT_ID: 29 + ? + PORT_ID: 22 + : + PC_PHYS_PORT_ID: 33 + ? + PORT_ID: 24 + : + PC_PHYS_PORT_ID: 37 + ? + PORT_ID: 26 + : + PC_PHYS_PORT_ID: 41 + ? + PORT_ID: 28 + : + PC_PHYS_PORT_ID: 45 + ? + PORT_ID: 33 + : + PC_PHYS_PORT_ID: 49 + ? + PORT_ID: 35 + : + PC_PHYS_PORT_ID: 53 + ? + PORT_ID: 37 + : + PC_PHYS_PORT_ID: 57 + ? + PORT_ID: 39 + : + PC_PHYS_PORT_ID: 61 + ? + PORT_ID: 44 + : + PC_PHYS_PORT_ID: 65 + ? + PORT_ID: 46 + : + PC_PHYS_PORT_ID: 69 + ? + PORT_ID: 48 + : + PC_PHYS_PORT_ID: 73 + ? + PORT_ID: 50 + : + PC_PHYS_PORT_ID: 77 + ? + PORT_ID: 55 + : + PC_PHYS_PORT_ID: 81 + ? + PORT_ID: 57 + : + PC_PHYS_PORT_ID: 85 + ? + PORT_ID: 59 + : + PC_PHYS_PORT_ID: 89 + ? + PORT_ID: 61 + : + PC_PHYS_PORT_ID: 93 + ? + PORT_ID: 66 + : + PC_PHYS_PORT_ID: 97 + ? + PORT_ID: 68 + : + PC_PHYS_PORT_ID: 101 + ? + PORT_ID: 70 + : + PC_PHYS_PORT_ID: 105 + ? + PORT_ID: 72 + : + PC_PHYS_PORT_ID: 109 + ? + PORT_ID: 77 + : + PC_PHYS_PORT_ID: 113 + ? + PORT_ID: 79 + : + PC_PHYS_PORT_ID: 117 + ? + PORT_ID: 81 + : + PC_PHYS_PORT_ID: 121 + ? + PORT_ID: 83 + : + PC_PHYS_PORT_ID: 125 + ? + PORT_ID: 88 + : + PC_PHYS_PORT_ID: 129 + ? + PORT_ID: 90 + : + PC_PHYS_PORT_ID: 133 + ? + PORT_ID: 92 + : + PC_PHYS_PORT_ID: 137 + ? + PORT_ID: 94 + : + PC_PHYS_PORT_ID: 141 + ? + PORT_ID: 99 + : + PC_PHYS_PORT_ID: 145 + ? + PORT_ID: 101 + : + PC_PHYS_PORT_ID: 149 + ? + PORT_ID: 103 + : + PC_PHYS_PORT_ID: 153 + ? + PORT_ID: 105 + : + PC_PHYS_PORT_ID: 157 + ? + PORT_ID: 110 + : + PC_PHYS_PORT_ID: 161 + ? + PORT_ID: 112 + : + PC_PHYS_PORT_ID: 165 + ? + PORT_ID: 114 + : + PC_PHYS_PORT_ID: 169 + ? + PORT_ID: 116 + : + PC_PHYS_PORT_ID: 173 + ? + PORT_ID: 121 + : + PC_PHYS_PORT_ID: 177 + ? + PORT_ID: 123 + : + PC_PHYS_PORT_ID: 181 + ? + PORT_ID: 125 + : + PC_PHYS_PORT_ID: 185 + ? + PORT_ID: 127 + : + PC_PHYS_PORT_ID: 189 + ? + PORT_ID: 132 + : + PC_PHYS_PORT_ID: 193 + ? + PORT_ID: 134 + : + PC_PHYS_PORT_ID: 197 + ? + PORT_ID: 136 + : + PC_PHYS_PORT_ID: 201 + ? + PORT_ID: 138 + : + PC_PHYS_PORT_ID: 205 + ? + PORT_ID: 143 + : + PC_PHYS_PORT_ID: 209 + ? + PORT_ID: 145 + : + PC_PHYS_PORT_ID: 213 + ? + PORT_ID: 147 + : + PC_PHYS_PORT_ID: 217 + ? + PORT_ID: 149 + : + PC_PHYS_PORT_ID: 221 + ? + PORT_ID: 154 + : + PC_PHYS_PORT_ID: 225 + ? + PORT_ID: 156 + : + PC_PHYS_PORT_ID: 229 + ? + PORT_ID: 158 + : + PC_PHYS_PORT_ID: 233 + ? + PORT_ID: 160 + : + PC_PHYS_PORT_ID: 237 + ? + PORT_ID: 165 + : + PC_PHYS_PORT_ID: 241 + ? + PORT_ID: 167 + : + PC_PHYS_PORT_ID: 245 + ? + PORT_ID: 169 + : + PC_PHYS_PORT_ID: 249 + ? + PORT_ID: 171 + : + PC_PHYS_PORT_ID: 253 + ? + PORT_ID: 176 + : + PC_PHYS_PORT_ID: 257 + ? + PORT_ID: 178 + : + PC_PHYS_PORT_ID: 261 + ? + PORT_ID: 180 + : + PC_PHYS_PORT_ID: 265 + ? + PORT_ID: 182 + : + PC_PHYS_PORT_ID: 269 + ? + PORT_ID: 187 + : + PC_PHYS_PORT_ID: 273 + ? + PORT_ID: 189 + : + PC_PHYS_PORT_ID: 277 + ? + PORT_ID: 191 + : + PC_PHYS_PORT_ID: 281 + ? + PORT_ID: 193 + : + PC_PHYS_PORT_ID: 285 + ? + PORT_ID: 198 + : + PC_PHYS_PORT_ID: 289 + ? + PORT_ID: 200 + : + PC_PHYS_PORT_ID: 293 + ? + PORT_ID: 202 + : + PC_PHYS_PORT_ID: 297 + ? + PORT_ID: 204 + : + PC_PHYS_PORT_ID: 301 + ? + PORT_ID: 209 + : + PC_PHYS_PORT_ID: 305 + ? + PORT_ID: 211 + : + PC_PHYS_PORT_ID: 309 + ? + PORT_ID: 213 + : + PC_PHYS_PORT_ID: 313 + ? + PORT_ID: 215 + : + PC_PHYS_PORT_ID: 317 + ? + PORT_ID: 220 + : + PC_PHYS_PORT_ID: 321 + ? + PORT_ID: 222 + : + PC_PHYS_PORT_ID: 325 + ? + PORT_ID: 224 + : + PC_PHYS_PORT_ID: 329 + ? + PORT_ID: 226 + : + PC_PHYS_PORT_ID: 333 + ? + PORT_ID: 231 + : + PC_PHYS_PORT_ID: 337 + ? + PORT_ID: 233 + : + PC_PHYS_PORT_ID: 341 + ? + PORT_ID: 235 + : + PC_PHYS_PORT_ID: 345 + ? + PORT_ID: 237 + : + PC_PHYS_PORT_ID: 349 + ? + PORT_ID: 242 + : + PC_PHYS_PORT_ID: 353 + ? + PORT_ID: 244 + : + PC_PHYS_PORT_ID: 357 + ? + PORT_ID: 246 + : + PC_PHYS_PORT_ID: 361 + ? + PORT_ID: 248 + : + PC_PHYS_PORT_ID: 365 + ? + PORT_ID: 253 + : + PC_PHYS_PORT_ID: 369 + ? + PORT_ID: 255 + : + PC_PHYS_PORT_ID: 373 + ? + PORT_ID: 257 + : + PC_PHYS_PORT_ID: 377 + ? + PORT_ID: 259 + : + PC_PHYS_PORT_ID: 381 + ? + PORT_ID: 264 + : + PC_PHYS_PORT_ID: 385 + ? + PORT_ID: 266 + : + PC_PHYS_PORT_ID: 389 + ? + PORT_ID: 268 + : + PC_PHYS_PORT_ID: 393 + ? + PORT_ID: 270 + : + PC_PHYS_PORT_ID: 397 + ? + PORT_ID: 275 + : + PC_PHYS_PORT_ID: 401 + ? + PORT_ID: 277 + : + PC_PHYS_PORT_ID: 405 + ? + PORT_ID: 279 + : + PC_PHYS_PORT_ID: 409 + ? + PORT_ID: 281 + : + PC_PHYS_PORT_ID: 413 + ? + PORT_ID: 286 + : + PC_PHYS_PORT_ID: 417 + ? + PORT_ID: 288 + : + PC_PHYS_PORT_ID: 421 + ? + PORT_ID: 290 + : + PC_PHYS_PORT_ID: 425 + ? + PORT_ID: 292 + : + PC_PHYS_PORT_ID: 429 + ? + PORT_ID: 297 + : + PC_PHYS_PORT_ID: 433 + ? + PORT_ID: 299 + : + PC_PHYS_PORT_ID: 437 + ? + PORT_ID: 301 + : + PC_PHYS_PORT_ID: 441 + ? + PORT_ID: 303 + : + PC_PHYS_PORT_ID: 445 + ? + PORT_ID: 308 + : + PC_PHYS_PORT_ID: 449 + ? + PORT_ID: 310 + : + PC_PHYS_PORT_ID: 453 + ? + PORT_ID: 312 + : + PC_PHYS_PORT_ID: 457 + ? + PORT_ID: 314 + : + PC_PHYS_PORT_ID: 461 + ? + PORT_ID: 319 + : + PC_PHYS_PORT_ID: 465 + ? + PORT_ID: 321 + : + PC_PHYS_PORT_ID: 469 + ? + PORT_ID: 323 + : + PC_PHYS_PORT_ID: 473 + ? + PORT_ID: 325 + : + PC_PHYS_PORT_ID: 477 + ? + PORT_ID: 330 + : + PC_PHYS_PORT_ID: 481 + ? + PORT_ID: 332 + : + PC_PHYS_PORT_ID: 485 + ? + PORT_ID: 334 + : + PC_PHYS_PORT_ID: 489 + ? + PORT_ID: 336 + : + PC_PHYS_PORT_ID: 493 + ? + PORT_ID: 341 + : + PC_PHYS_PORT_ID: 497 + ? + PORT_ID: 343 + : + PC_PHYS_PORT_ID: 501 + ? + PORT_ID: 345 + : + PC_PHYS_PORT_ID: 505 + ? + PORT_ID: 347 + : + PC_PHYS_PORT_ID: 509 +... + +--- +device: + 0: + PC_PORT: + ? + PORT_ID: 0 + : + ENABLE: 1 + SPEED: 10000 + NUM_LANES: 1 + ? + PORT_ID: [1, 3, 5, 7, 11, 13, 15, 17, 22, 24, 26, 28, 33, 35, 37, 39, 44, 46, 48, 50, 55, 57, 59, 61, 66, 68, 70, 72, 77, 79, 81, 83, 88, 90, 92, 94, 99, 101, 103, 105, 110, 112, 114, 116, 121, 123, 125, 127, 132, 134, 136, 138, 143, 145, 147, 149, 154, 156, 158, 160, 165, 167, 169, 171, 176, 178, 180, 182, 187, 189, 191, 193, 198, 200, 202, 204, 209, 211, 213, 215, 220, 222, 224, 226, 231, 233, 235, 237, 242, 244, 246, 248, 253, 255, 257, 259, 264, 266, 268, 270, 275, 277, 279, 281, 286, 288, 290, 292, 297, 299, 301, 303, 308, 310, 312, 314, 319, 321, 323, 325, 330, 332, 334, 336, 341, 343, 345, 347] + : + ENABLE: 1 + SPEED: 400000 + NUM_LANES: 4 + FEC_MODE: PC_FEC_RS544_2XN + LINK_TRAINING: 0 + MAX_FRAME_SIZE: 9416 +... + +--- +device: + 0: + PC_PMD_FIRMWARE: + ? + PORT_ID: [1, 3, 5, 7, 11, 13, 15, 17, 22, 24, 26, 28, 33, 35, 37, 39, 44, 46, 48, 50, 55, 57, 59, 61, 66, 68, 70, 72, 77, 79, 81, 83, 88, 90, 92, 94, 99, 101, 103, 105, 110, 112, 114, 116, 121, 123, 125, 127, 132, 134, 136, 138, 143, 145, 147, 149, 154, 156, 158, 160, 165, 167, 169, 171, 176, 178, 180, 182, 187, 189, 191, 193, 198, 200, 202, 204, 209, 211, 213, 215, 220, 222, 224, 226, 231, 233, 235, 237, 242, 244, 246, 248, 253, 255, 257, 259, 264, 266, 268, 270, 275, 277, 279, 281, 286, 288, 290, 292, 297, 299, 301, 303, 308, 310, 312, 314, 319, 321, 323, 325, 330, 332, 334, 336, 341, 343, 345, 347] + : + MEDIUM_TYPE_AUTO: 0 + MEDIUM_TYPE: PC_PHY_MEDIUM_BACKPLANE +... + +--- +device: + 0: + TM_SCHEDULER_CONFIG: + NUM_MC_Q: NUM_MC_Q_4 +... +--- +device: + 0: + FP_CONFIG: + FP_ING_OPERMODE: GLOBAL_PIPE_AWARE +... +--- +bcm_device: + 0: + global: + bcm_tunnel_term_compatible_mode: 1 + vlan_flooding_l2mc_num_reserved: 2048 + l3_alpm_template: 2 + l3_alpm2_bnk_threshold: 100 + uft_mode: 1 + l3_enable: 1 + l2_hitbit_enable: 0 + pktio_mode: 1 + sai_pfc_defaults_disable: 1 + sai_optimized_mmu: 1 + sai_postinit_cmd_file: /usr/share/sonic/platform/postinit_cmd_file.soc +... + +--- +bcm_device: + 0: + port: + "*": + encap_mode: IEEE + dport_map_enable: 1 + 11: + dport_map_port: 1 + 12: + dport_map_port: 2 + 13: + dport_map_port: 3 + 14: + dport_map_port: 4 + 15: + dport_map_port: 5 + 16: + dport_map_port: 6 + 17: + dport_map_port: 7 + 18: + dport_map_port: 8 + 88: + dport_map_port: 9 + 89: + dport_map_port: 10 + 90: + dport_map_port: 11 + 91: + dport_map_port: 12 + 26: + dport_map_port: 13 + 27: + dport_map_port: 14 + 28: + dport_map_port: 15 + 29: + dport_map_port: 16 + 37: + dport_map_port: 17 + 38: + dport_map_port: 18 + 39: + dport_map_port: 19 + 40: + dport_map_port: 20 + 99: + dport_map_port: 21 + 100: + dport_map_port: 22 + 101: + dport_map_port: 23 + 102: + dport_map_port: 24 + 92: + dport_map_port: 25 + 93: + dport_map_port: 26 + 94: + dport_map_port: 27 + 95: + dport_map_port: 28 + 22: + dport_map_port: 29 + 23: + dport_map_port: 30 + 24: + dport_map_port: 31 + 25: + dport_map_port: 32 + 110: + dport_map_port: 33 + 111: + dport_map_port: 34 + 112: + dport_map_port: 35 + 113: + dport_map_port: 36 + 103: + dport_map_port: 37 + 104: + dport_map_port: 38 + 105: + dport_map_port: 39 + 106: + dport_map_port: 40 + 33: + dport_map_port: 41 + 34: + dport_map_port: 42 + 35: + dport_map_port: 43 + 36: + dport_map_port: 44 + 121: + dport_map_port: 45 + 122: + dport_map_port: 46 + 123: + dport_map_port: 47 + 124: + dport_map_port: 48 + 114: + dport_map_port: 49 + 115: + dport_map_port: 50 + 116: + dport_map_port: 51 + 117: + dport_map_port: 52 + 44: + dport_map_port: 53 + 45: + dport_map_port: 54 + 46: + dport_map_port: 55 + 47: + dport_map_port: 56 + 143: + dport_map_port: 57 + 144: + dport_map_port: 58 + 145: + dport_map_port: 59 + 146: + dport_map_port: 60 + 125: + dport_map_port: 61 + 126: + dport_map_port: 62 + 127: + dport_map_port: 63 + 128: + dport_map_port: 64 + 55: + dport_map_port: 65 + 56: + dport_map_port: 66 + 57: + dport_map_port: 67 + 58: + dport_map_port: 68 + 132: + dport_map_port: 69 + 133: + dport_map_port: 70 + 134: + dport_map_port: 71 + 135: + dport_map_port: 72 + 136: + dport_map_port: 73 + 137: + dport_map_port: 74 + 138: + dport_map_port: 75 + 139: + dport_map_port: 76 + 66: + dport_map_port: 77 + 67: + dport_map_port: 78 + 68: + dport_map_port: 79 + 69: + dport_map_port: 80 + 81: + dport_map_port: 81 + 82: + dport_map_port: 82 + 83: + dport_map_port: 83 + 84: + dport_map_port: 84 + 147: + dport_map_port: 85 + 148: + dport_map_port: 86 + 149: + dport_map_port: 87 + 150: + dport_map_port: 88 + 77: + dport_map_port: 89 + 78: + dport_map_port: 90 + 79: + dport_map_port: 91 + 80: + dport_map_port: 92 + 70: + dport_map_port: 93 + 71: + dport_map_port: 94 + 72: + dport_map_port: 95 + 73: + dport_map_port: 96 + 154: + dport_map_port: 97 + 155: + dport_map_port: 98 + 156: + dport_map_port: 99 + 157: + dport_map_port: 100 + 158: + dport_map_port: 101 + 159: + dport_map_port: 102 + 160: + dport_map_port: 103 + 161: + dport_map_port: 104 + 59: + dport_map_port: 105 + 60: + dport_map_port: 106 + 61: + dport_map_port: 107 + 62: + dport_map_port: 108 + 165: + dport_map_port: 109 + 166: + dport_map_port: 110 + 167: + dport_map_port: 111 + 168: + dport_map_port: 112 + 169: + dport_map_port: 113 + 170: + dport_map_port: 114 + 171: + dport_map_port: 115 + 172: + dport_map_port: 116 + 48: + dport_map_port: 117 + 49: + dport_map_port: 118 + 50: + dport_map_port: 119 + 51: + dport_map_port: 120 + 176: + dport_map_port: 121 + 177: + dport_map_port: 122 + 178: + dport_map_port: 123 + 179: + dport_map_port: 124 + 180: + dport_map_port: 125 + 181: + dport_map_port: 126 + 182: + dport_map_port: 127 + 183: + dport_map_port: 128 + 297: + dport_map_port: 129 + 298: + dport_map_port: 130 + 299: + dport_map_port: 131 + 300: + dport_map_port: 132 + 187: + dport_map_port: 133 + 188: + dport_map_port: 134 + 189: + dport_map_port: 135 + 190: + dport_map_port: 136 + 191: + dport_map_port: 137 + 192: + dport_map_port: 138 + 193: + dport_map_port: 139 + 194: + dport_map_port: 140 + 286: + dport_map_port: 141 + 287: + dport_map_port: 142 + 288: + dport_map_port: 143 + 289: + dport_map_port: 144 + 268: + dport_map_port: 145 + 269: + dport_map_port: 146 + 270: + dport_map_port: 147 + 271: + dport_map_port: 148 + 198: + dport_map_port: 149 + 199: + dport_map_port: 150 + 200: + dport_map_port: 151 + 201: + dport_map_port: 152 + 275: + dport_map_port: 153 + 276: + dport_map_port: 154 + 277: + dport_map_port: 155 + 278: + dport_map_port: 156 + 279: + dport_map_port: 157 + 280: + dport_map_port: 158 + 281: + dport_map_port: 159 + 282: + dport_map_port: 160 + 209: + dport_map_port: 161 + 210: + dport_map_port: 162 + 211: + dport_map_port: 163 + 212: + dport_map_port: 164 + 264: + dport_map_port: 165 + 265: + dport_map_port: 166 + 266: + dport_map_port: 167 + 267: + dport_map_port: 168 + 290: + dport_map_port: 169 + 291: + dport_map_port: 170 + 292: + dport_map_port: 171 + 293: + dport_map_port: 172 + 220: + dport_map_port: 173 + 221: + dport_map_port: 174 + 222: + dport_map_port: 175 + 223: + dport_map_port: 176 + 213: + dport_map_port: 177 + 214: + dport_map_port: 178 + 215: + dport_map_port: 179 + 216: + dport_map_port: 180 + 301: + dport_map_port: 181 + 302: + dport_map_port: 182 + 303: + dport_map_port: 183 + 304: + dport_map_port: 184 + 231: + dport_map_port: 185 + 232: + dport_map_port: 186 + 233: + dport_map_port: 187 + 234: + dport_map_port: 188 + 202: + dport_map_port: 189 + 203: + dport_map_port: 190 + 204: + dport_map_port: 191 + 205: + dport_map_port: 192 + 312: + dport_map_port: 193 + 313: + dport_map_port: 194 + 314: + dport_map_port: 195 + 315: + dport_map_port: 196 + 242: + dport_map_port: 197 + 243: + dport_map_port: 198 + 244: + dport_map_port: 199 + 245: + dport_map_port: 200 + 224: + dport_map_port: 201 + 225: + dport_map_port: 202 + 226: + dport_map_port: 203 + 227: + dport_map_port: 204 + 323: + dport_map_port: 205 + 324: + dport_map_port: 206 + 325: + dport_map_port: 207 + 326: + dport_map_port: 208 + 253: + dport_map_port: 209 + 254: + dport_map_port: 210 + 255: + dport_map_port: 211 + 256: + dport_map_port: 212 + 235: + dport_map_port: 213 + 236: + dport_map_port: 214 + 237: + dport_map_port: 215 + 238: + dport_map_port: 216 + 308: + dport_map_port: 217 + 309: + dport_map_port: 218 + 310: + dport_map_port: 219 + 311: + dport_map_port: 220 + 319: + dport_map_port: 221 + 320: + dport_map_port: 222 + 321: + dport_map_port: 223 + 322: + dport_map_port: 224 + 246: + dport_map_port: 225 + 247: + dport_map_port: 226 + 248: + dport_map_port: 227 + 249: + dport_map_port: 228 + 334: + dport_map_port: 229 + 335: + dport_map_port: 230 + 336: + dport_map_port: 231 + 337: + dport_map_port: 232 + 330: + dport_map_port: 233 + 331: + dport_map_port: 234 + 332: + dport_map_port: 235 + 333: + dport_map_port: 236 + 257: + dport_map_port: 237 + 258: + dport_map_port: 238 + 259: + dport_map_port: 239 + 260: + dport_map_port: 240 + 345: + dport_map_port: 241 + 346: + dport_map_port: 242 + 347: + dport_map_port: 243 + 348: + dport_map_port: 244 + 341: + dport_map_port: 245 + 342: + dport_map_port: 246 + 343: + dport_map_port: 247 + 344: + dport_map_port: 248 + 5: + dport_map_port: 249 + 6: + dport_map_port: 250 + 7: + dport_map_port: 251 + 8: + dport_map_port: 252 + 1: + dport_map_port: 253 + 2: + dport_map_port: 254 + 3: + dport_map_port: 255 + 4: + dport_map_port: 256 +... + +--- +device: + 0: + PC_TX_TAPS: + ? + PORT_ID: 88 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 124 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 90 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 90 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 90 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 90 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 101 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 101 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 101 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 101 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 112 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 112 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 112 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 112 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 123 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 123 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 123 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 123 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 145 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 145 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 145 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 145 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 134 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 134 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 134 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 134 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 83 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 83 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 83 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 83 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 72 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 72 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 72 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 72 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 61 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 61 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 61 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 61 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 50 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 50 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 50 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 50 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 299 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 299 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 299 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 299 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 288 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 288 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 288 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 288 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 6 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 277 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 277 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 277 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 277 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 266 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 266 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 266 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 266 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 215 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 215 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 215 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 215 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 204 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 204 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 204 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 204 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 226 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 226 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 226 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 226 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 237 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 237 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 237 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 237 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 248 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 248 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 248 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 248 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 259 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 259 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 259 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 259 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 13 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 13 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 13 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 13 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 17 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 17 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 17 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 17 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 28 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 28 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 28 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 28 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 39 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 39 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 39 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 39 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 94 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 94 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 94 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 94 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 24 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 24 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 24 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 24 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 105 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 105 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 105 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 105 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 35 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 35 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 35 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 35 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 116 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 116 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 116 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 116 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 46 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 46 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 46 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 46 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 127 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 127 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 127 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 127 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 57 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 57 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 57 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 57 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 138 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 138 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 138 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 138 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 68 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 68 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 68 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 68 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 149 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 149 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 149 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 149 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 79 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 79 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 79 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 79 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 156 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 156 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 156 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 156 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 160 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 160 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 160 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 160 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 167 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 167 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 167 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 167 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 171 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 171 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 171 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 171 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 178 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 178 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 178 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 178 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 182 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 182 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 182 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 182 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 189 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 189 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 189 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 189 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 193 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 193 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 193 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 193 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 270 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 270 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 270 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 270 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 200 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 200 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 200 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 200 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 281 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 281 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 281 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 281 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 211 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 211 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 211 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 211 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 292 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 292 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 292 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 292 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 222 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 222 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 222 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 222 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 303 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 303 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 303 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 303 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 233 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 233 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 233 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 233 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 314 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 314 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 314 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 314 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 244 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 244 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 244 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 244 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 325 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 325 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 325 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 325 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 255 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 255 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 255 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 255 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 310 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 310 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 310 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 310 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 321 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 321 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 321 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 321 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 336 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 336 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 336 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 336 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 332 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 332 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 332 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 332 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 347 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 347 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 347 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 347 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 343 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 343 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 343 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 343 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 7 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 7 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 7 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 7 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 3 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 3 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 3 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 + ? + PORT_ID: 3 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 36 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 128 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_POST3_SIGN: 0 + TX_POST3_AUTO: 0 + TX_POST3: 0 +... diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/custom_led.bin b/device/micas/x86_64-micas_m2-w6940-128qc-r0/custom_led.bin new file mode 100644 index 000000000000..c6bb453fff80 Binary files /dev/null and b/device/micas/x86_64-micas_m2-w6940-128qc-r0/custom_led.bin differ diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/default_sku b/device/micas/x86_64-micas_m2-w6940-128qc-r0/default_sku new file mode 100644 index 000000000000..cfa928b0da06 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/default_sku @@ -0,0 +1 @@ +M2-W6940-128QC l2 diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/dev.xml b/device/micas/x86_64-micas_m2-w6940-128qc-r0/dev.xml new file mode 100644 index 000000000000..b5267e84b154 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/dev.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/fru.py b/device/micas/x86_64-micas_m2-w6940-128qc-r0/fru.py new file mode 100755 index 000000000000..f95164e03601 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/fru.py @@ -0,0 +1,961 @@ +#!/usr/bin/python3 +import collections +from datetime import datetime, timedelta +from bitarray import bitarray + + +__DEBUG__ = "N" + + +class FruException(Exception): + def __init__(self, message='fruerror', code=-100): + err = 'errcode: {0} message:{1}'.format(code, message) + Exception.__init__(self, err) + self.code = code + self.message = message + + +def e_print(err): + print("ERROR: " + err) + + +def d_print(debug_info): + if __DEBUG__ == "Y": + print(debug_info) + + +class FruUtil(): + @staticmethod + def decodeLength(value): + a = bitarray(8) + a.setall(True) + a[0:1] = 0 + a[1:2] = 0 + x = ord(a.tobytes()) + return x & ord(value) + + @staticmethod + def minToData(): + starttime = datetime(1996, 1, 1, 0, 0, 0) + endtime = datetime.now() + seconds = (endtime - starttime).total_seconds() + mins = seconds // 60 + m = int(round(mins)) + return m + + @staticmethod + def getTimeFormat(): + return datetime.now().strftime('%Y-%m-%d') + + @staticmethod + def getTypeLength(value): + if value is None or len(value) == 0: + return 0 + a = bitarray(8) + a.setall(False) + a[0:1] = 1 + a[1:2] = 1 + x = ord(a.tobytes()) + return x | len(value) + + @staticmethod + def checksum(b): + result = 0 + for item in b: + result += ord(item) + return (0x100 - (result & 0xff)) & 0xff + + +class BaseArea(object): + SUGGESTED_SIZE_COMMON_HEADER = 8 + SUGGESTED_SIZE_INTERNAL_USE_AREA = 72 + SUGGESTED_SIZE_CHASSIS_INFO_AREA = 32 + SUGGESTED_SIZE_BOARD_INFO_AREA = 80 + SUGGESTED_SIZE_PRODUCT_INFO_AREA = 80 + + INITVALUE = b'\x00' + resultvalue = INITVALUE * 256 + COMMON_HEAD_VERSION = b'\x01' + __childList = None + + def __init__(self, name="", size=0, offset=0): + self.__childList = [] + self._offset = offset + self.name = name + self._size = size + self._isPresent = False + self._data = b'\x00' * size + + @property + def childList(self): + return self.__childList + + @childList.setter + def childList(self, value): + self.__childList = value + + @property + def offset(self): + return self._offset + + @offset.setter + def offset(self, value): + self._offset = value + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + self._size = value + + @property + def data(self): + return self._data + + @data.setter + def data(self, value): + self._data = value + + @property + def isPresent(self): + return self._isPresent + + @isPresent.setter + def isPresent(self, value): + self._isPresent = value + + +class InternalUseArea(BaseArea): + pass + + +class ChassisInfoArea(BaseArea): + pass + + +class BoardInfoArea(BaseArea): + _boardTime = None + _fields = None + _mfg_date = None + areaversion = None + _boardversion = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "mfg_date : %s \n" \ + "boardManufacturer : %s \n" \ + "boardProductName : %s \n" \ + "boardSerialNumber : %s \n" \ + "boardPartNumber : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.boardversion), self.size, + self.language, self.getMfgRealData(), + self.boardManufacturer, self.boardProductName, + self.boardSerialNumber, self.boardPartNumber, + self.fruFileId) + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "boardextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["boardversion"] = ord(self.boardversion) + dic["boardlength"] = self.size + dic["boardlanguage"] = self.language + dic["boardmfg_date"] = self.getMfgRealData() + dic["boardManufacturer"] = self.boardManufacturer + dic["boardProductName"] = self.boardProductName + dic["boardSerialNumber"] = self.boardSerialNumber + dic["boardPartNumber"] = self.boardPartNumber + dic["boardfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] + index += 1 + d_print("decode length :%d class size:%d" % + ((ord(self.data[index]) * 8), self.size)) + index += 2 + + timetmp = self.data[index: index + 3] + self.mfg_date = ord(timetmp[0]) | ( + ord(timetmp[1]) << 8) | (ord(timetmp[2]) << 16) + d_print("decode getMfgRealData :%s" % self.getMfgRealData()) + index += 3 + + templen = FruUtil.decodeLength(self.data[index]) + self.boardManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardManufacturer:%s" % self.boardManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardProductName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardProductName:%s" % self.boardProductName) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardSerialNumber:%s" % self.boardSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardPartNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardPartNumber:%s" % self.boardPartNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if self.data[index] != chr(0xc1): + templen = FruUtil.decodeLength(self.data[index]) + tmpval = self.data[index + 1: index + templen + 1] + setattr(self, valtmp, tmpval) + index += templen + 1 + d_print("decode boardextra%d:%s" % (i, tmpval)) + else: + break + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("boardInfoArea version:%x" % ord(self.boardversion)) + d_print("boardInfoArea length:%d" % self.size) + d_print("boardInfoArea language:%x" % self.language) + self.mfg_date = FruUtil.minToData() + d_print("boardInfoArea mfg_date:%x" % self.mfg_date) + + self.data = chr(ord(self.boardversion)) + \ + chr(self.size // 8) + chr(self.language) + + self.data += chr(self.mfg_date & 0xFF) + self.data += chr((self.mfg_date >> 8) & 0xFF) + self.data += chr((self.mfg_date >> 16) & 0xFF) + + d_print("boardInfoArea boardManufacturer:%s" % self.boardManufacturer) + typelength = FruUtil.getTypeLength(self.boardManufacturer) + self.data += chr(typelength) + self.data += self.boardManufacturer + + d_print("boardInfoArea boardProductName:%s" % self.boardProductName) + self.data += chr(FruUtil.getTypeLength(self.boardProductName)) + self.data += self.boardProductName + + d_print("boardInfoArea boardSerialNumber:%s" % self.boardSerialNumber) + self.data += chr(FruUtil.getTypeLength(self.boardSerialNumber)) + self.data += self.boardSerialNumber + + d_print("boardInfoArea boardPartNumber:%s" % self.boardPartNumber) + self.data += chr(FruUtil.getTypeLength(self.boardPartNumber)) + self.data += self.boardPartNumber + + d_print("boardInfoArea fruFileId:%s" % self.fruFileId) + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea boardextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + d_print("self data:%d" % len(self.data)) + d_print("self size:%d" % self.size) + d_print("adjust size:%d" % (self.size - len(self.data) - 1)) + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + + # checksum + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + def getMfgRealData(self): + starttime = datetime(1996, 1, 1, 0, 0, 0) + mactime = starttime + timedelta(minutes=self.mfg_date) + return mactime + + @property + def language(self): + self._language = 25 + return self._language + + @property + def mfg_date(self): + return self._mfg_date + + @mfg_date.setter + def mfg_date(self, val): + self._mfg_date = val + + @property + def boardversion(self): + self._boardversion = self.COMMON_HEAD_VERSION + return self._boardversion + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, val): + self._FRUFileID = val + + @property + def boardPartNumber(self): + return self._boardPartNumber + + @boardPartNumber.setter + def boardPartNumber(self, val): + self._boardPartNumber = val + + @property + def boardSerialNumber(self): + return self._boardSerialNumber + + @boardSerialNumber.setter + def boardSerialNumber(self, val): + self._boardSerialNumber = val + + @property + def boardProductName(self): + return self._boradProductName + + @boardProductName.setter + def boardProductName(self, val): + self._boradProductName = val + + @property + def boardManufacturer(self): + return self._boardManufacturer + + @boardManufacturer.setter + def boardManufacturer(self, val): + self._boardManufacturer = val + + @property + def boardTime(self): + return self._boardTime + + @boardTime.setter + def boardTime(self, val): + self._boardTime = val + + @property + def fields(self): + return self._fields + + @fields.setter + def fields(self, val): + self._fields = val + + +class ProductInfoArea(BaseArea): + _productManufacturer = None + _productAssetTag = None + _FRUFileID = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "productManufacturer : %s \n" \ + "productName : %s \n" \ + "productPartModelName: %s \n" \ + "productVersion : %s \n" \ + "productSerialNumber : %s \n" \ + "productAssetTag : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.areaversion), self.size, + self.language, self.productManufacturer, + self.productName, self.productPartModelName, + self.productVersion, self.productSerialNumber, + self.productAssetTag, self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "productextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["productversion"] = ord(self.areaversion) + dic["productlength"] = self.size + dic["productlanguage"] = self.language + dic["productManufacturer"] = self.productManufacturer + dic["productName"] = self.productName + dic["productPartModelName"] = self.productPartModelName + dic["productVersion"] = int(self.productVersion, 16) + dic["productSerialNumber"] = self.productSerialNumber + dic["productAssetTag"] = self.productAssetTag + dic["productfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] # 0 + index += 1 + d_print("decode length %d" % (ord(self.data[index]) * 8)) + d_print("class size %d" % self.size) + index += 2 + + templen = FruUtil.decodeLength(self.data[index]) + self.productManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productManufacturer:%s" % self.productManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.productName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productName:%s" % self.productName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productPartModelName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productPartModelName:%s" % self.productPartModelName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productVersion = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productVersion:%s" % self.productVersion) + + templen = FruUtil.decodeLength(self.data[index]) + self.productSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productSerialNumber:%s" % self.productSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.productAssetTag = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productAssetTag:%s" % self.productAssetTag) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if self.data[index] != chr(0xc1) and index < self.size - 1: + templen = FruUtil.decodeLength(self.data[index]) + if templen == 0: + break + tmpval = self.data[index + 1: index + templen + 1] + d_print("decode boardextra%d:%s" % (i, tmpval)) + setattr(self, valtmp, tmpval) + index += templen + 1 + else: + break + + @property + def productVersion(self): + return self._productVersion + + @productVersion.setter + def productVersion(self, name): + self._productVersion = name + + @property + def areaversion(self): + self._areaversion = self.COMMON_HEAD_VERSION + return self._areaversion + + @areaversion.setter + def areaversion(self, name): + self._areaversion = name + + @property + def language(self): + self._language = 25 + return self._language + + @property + def productManufacturer(self): + return self._productManufacturer + + @productManufacturer.setter + def productManufacturer(self, name): + self._productManufacturer = name + + @property + def productName(self): + return self._productName + + @productName.setter + def productName(self, name): + self._productName = name + + @property + def productPartModelName(self): + return self._productPartModelName + + @productPartModelName.setter + def productPartModelName(self, name): + self._productPartModelName = name + + @property + def productSerialNumber(self): + return self._productSerialNumber + + @productSerialNumber.setter + def productSerialNumber(self, name): + self._productSerialNumber = name + + @property + def productAssetTag(self): + return self._productAssetTag + + @productAssetTag.setter + def productAssetTag(self, name): + self._productAssetTag = name + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, name): + self._FRUFileID = name + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("product version:%x" % ord(self.areaversion)) + d_print("product length:%d" % self.size) + d_print("product language:%x" % self.language) + self.data = chr(ord(self.areaversion)) + \ + chr(self.size // 8) + chr(self.language) + + typelength = FruUtil.getTypeLength(self.productManufacturer) + self.data += chr(typelength) + self.data += self.productManufacturer + + self.data += chr(FruUtil.getTypeLength(self.productName)) + self.data += self.productName + + self.data += chr(FruUtil.getTypeLength(self.productPartModelName)) + self.data += self.productPartModelName + + self.data += chr(FruUtil.getTypeLength(self.productVersion)) + self.data += self.productVersion + + self.data += chr(FruUtil.getTypeLength(self.productSerialNumber)) + self.data += self.productSerialNumber + + self.data += chr(FruUtil.getTypeLength(self.productAssetTag)) + if self.productAssetTag is not None: + self.data += self.productAssetTag + + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea productextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + d_print("self.data:%d" % len(self.data)) + d_print("self.size:%d" % self.size) + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + +class MultiRecordArea(BaseArea): + pass + + +class Field(object): + + def __init__(self, fieldType="ASCII", fieldData=""): + self.fieldData = fieldData + self.fieldType = fieldType + + @property + def fieldType(self): + return self.fieldType + + @property + def fieldData(self): + return self.fieldData + + +class ipmifru(BaseArea): + _BoardInfoArea = None + _ProductInfoArea = None + _InternalUseArea = None + _ChassisInfoArea = None + _multiRecordArea = None + _productinfoAreaOffset = BaseArea.INITVALUE + _boardInfoAreaOffset = BaseArea.INITVALUE + _internalUserAreaOffset = BaseArea.INITVALUE + _chassicInfoAreaOffset = BaseArea.INITVALUE + _multiRecordAreaOffset = BaseArea.INITVALUE + _bindata = None + _bodybin = None + _version = BaseArea.COMMON_HEAD_VERSION + _zeroCheckSum = None + _frusize = 256 + + def __str__(self): + tmpstr = "" + if self.boardInfoArea.isPresent: + tmpstr += "\nboardinfoarea: \n" + tmpstr += self.boardInfoArea.__str__() + if self.productInfoArea.isPresent: + tmpstr += "\nproductinfoarea: \n" + tmpstr += self.productInfoArea.__str__() + return tmpstr + + def decodeBin(self, eeprom): + commonHead = eeprom[0:8] + d_print("decode version %x" % ord(commonHead[0])) + if ord(self.COMMON_HEAD_VERSION) != ord(commonHead[0]): + raise FruException("HEAD VERSION error,not Fru format!", -10) + if FruUtil.checksum(commonHead[0:7]) != ord(commonHead[7]): + strtemp = "check header checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(commonHead[0:7]), ord(commonHead[7])) + raise FruException(strtemp, -3) + if ord(commonHead[1]) != ord(self.INITVALUE): + d_print("Internal Use Area is present") + self.internalUseArea = InternalUseArea( + name="Internal Use Area", size=self.SUGGESTED_SIZE_INTERNAL_USE_AREA) + self.internalUseArea.isPresent = True + self.internalUserAreaOffset = ord(commonHead[1]) + self.internalUseArea.data = eeprom[self.internalUserAreaOffset * 8: ( + self.internalUserAreaOffset * 8 + self.internalUseArea.size)] + if ord(commonHead[2]) != ord(self.INITVALUE): + d_print("Chassis Info Area is present") + self.chassisInfoArea = ChassisInfoArea( + name="Chassis Info Area", size=self.SUGGESTED_SIZE_CHASSIS_INFO_AREA) + self.chassisInfoArea.isPresent = True + self.chassicInfoAreaOffset = ord(commonHead[2]) + self.chassisInfoArea.data = eeprom[self.chassicInfoAreaOffset * 8: ( + self.chassicInfoAreaOffset * 8 + self.chassisInfoArea.size)] + if ord(commonHead[3]) != ord(self.INITVALUE): + self.boardInfoArea = BoardInfoArea( + name="Board Info Area", size=self.SUGGESTED_SIZE_BOARD_INFO_AREA) + self.boardInfoArea.isPresent = True + self.boardInfoAreaOffset = ord(commonHead[3]) + self.boardInfoArea.size = ord( + eeprom[self.boardInfoAreaOffset * 8 + 1]) * 8 + d_print("Board Info Area is present size:%d" % + (self.boardInfoArea.size)) + self.boardInfoArea.data = eeprom[self.boardInfoAreaOffset * 8: ( + self.boardInfoAreaOffset * 8 + self.boardInfoArea.size)] + if FruUtil.checksum(self.boardInfoArea.data[:-1]) != ord(self.boardInfoArea.data[-1:]): + strtmp = "check boardInfoArea checksum error[cal:%02x data:%02x]" % \ + (FruUtil.checksum( + self.boardInfoArea.data[:-1]), ord(self.boardInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.boardInfoArea.decodedata() + if ord(commonHead[4]) != ord(self.INITVALUE): + d_print("Product Info Area is present") + self.productInfoArea = ProductInfoArea( + name="Product Info Area ", size=self.SUGGESTED_SIZE_PRODUCT_INFO_AREA) + self.productInfoArea.isPresent = True + self.productinfoAreaOffset = ord(commonHead[4]) + d_print("length offset value: %02x" % + ord(eeprom[self.productinfoAreaOffset * 8 + 1])) + self.productInfoArea.size = ord( + eeprom[self.productinfoAreaOffset * 8 + 1]) * 8 + d_print("Product Info Area is present size:%d" % + (self.productInfoArea.size)) + + self.productInfoArea.data = eeprom[self.productinfoAreaOffset * 8: ( + self.productinfoAreaOffset * 8 + self.productInfoArea.size)] + if FruUtil.checksum(self.productInfoArea.data[:-1]) != ord(self.productInfoArea.data[-1:]): + strtmp = "check productInfoArea checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(self.productInfoArea.data[:-1]), ord(self.productInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.productInfoArea.decodedata() + if ord(commonHead[5]) != ord(self.INITVALUE): + self.multiRecordArea = MultiRecordArea( + name="MultiRecord record Area ") + d_print("MultiRecord record present") + self.multiRecordArea.isPresent = True + self.multiRecordAreaOffset = ord(commonHead[5]) + self.multiRecordArea.data = eeprom[self.multiRecordAreaOffset * 8: ( + self.multiRecordAreaOffset * 8 + self.multiRecordArea.size)] + + def initDefault(self): + self.version = self.COMMON_HEAD_VERSION + self.internalUserAreaOffset = self.INITVALUE + self.chassicInfoAreaOffset = self.INITVALUE + self.boardInfoAreaOffset = self.INITVALUE + self.productinfoAreaOffset = self.INITVALUE + self.multiRecordAreaOffset = self.INITVALUE + self.zeroCheckSum = self.INITVALUE + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + self.productInfoArea = None + self.internalUseArea = None + self.boardInfoArea = None + self.chassisInfoArea = None + self.multiRecordArea = None + # self.recalcute() + + @property + def version(self): + return self._version + + @version.setter + def version(self, name): + self._version = name + + @property + def internalUserAreaOffset(self): + return self._internalUserAreaOffset + + @internalUserAreaOffset.setter + def internalUserAreaOffset(self, obj): + self._internalUserAreaOffset = obj + + @property + def chassicInfoAreaOffset(self): + return self._chassicInfoAreaOffset + + @chassicInfoAreaOffset.setter + def chassicInfoAreaOffset(self, obj): + self._chassicInfoAreaOffset = obj + + @property + def productinfoAreaOffset(self): + return self._productinfoAreaOffset + + @productinfoAreaOffset.setter + def productinfoAreaOffset(self, obj): + self._productinfoAreaOffset = obj + + @property + def boardInfoAreaOffset(self): + return self._boardInfoAreaOffset + + @boardInfoAreaOffset.setter + def boardInfoAreaOffset(self, obj): + self._boardInfoAreaOffset = obj + + @property + def multiRecordAreaOffset(self): + return self._multiRecordAreaOffset + + @multiRecordAreaOffset.setter + def multiRecordAreaOffset(self, obj): + self._multiRecordAreaOffset = obj + + @property + def zeroCheckSum(self): + return self._zeroCheckSum + + @zeroCheckSum.setter + def zeroCheckSum(self, obj): + self._zeroCheckSum = obj + + @property + def productInfoArea(self): + return self._ProductInfoArea + + @productInfoArea.setter + def productInfoArea(self, obj): + self._ProductInfoArea = obj + + @property + def internalUseArea(self): + return self._InternalUseArea + + @internalUseArea.setter + def internalUseArea(self, obj): + self.internalUseArea = obj + + @property + def boardInfoArea(self): + return self._BoardInfoArea + + @boardInfoArea.setter + def boardInfoArea(self, obj): + self._BoardInfoArea = obj + + @property + def chassisInfoArea(self): + return self._ChassisInfoArea + + @chassisInfoArea.setter + def chassisInfoArea(self, obj): + self._ChassisInfoArea = obj + + @property + def multiRecordArea(self): + return self._multiRecordArea + + @multiRecordArea.setter + def multiRecordArea(self, obj): + self._multiRecordArea = obj + + @property + def bindata(self): + return self._bindata + + @bindata.setter + def bindata(self, obj): + self._bindata = obj + + @property + def bodybin(self): + return self._bodybin + + @bodybin.setter + def bodybin(self, obj): + self._bodybin = obj + + def recalcuteCommonHead(self): + self.bindata = "" + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + d_print("common Header %d" % self.offset) + d_print("fru eeprom size %d" % self._frusize) + if self.internalUseArea is not None and self.internalUseArea.isPresent: + self.internalUserAreaOffset = self.offset // 8 + self.offset += self.internalUseArea.size + d_print("internalUseArea is present offset:%d" % self.offset) + + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + self.chassicInfoAreaOffset = self.offset // 8 + self.offset += self.chassisInfoArea.size + d_print("chassisInfoArea is present offset:%d" % self.offset) + + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + self.boardInfoAreaOffset = self.offset // 8 + self.offset += self.boardInfoArea.size + d_print("boardInfoArea is present offset:%d" % self.offset) + d_print("boardInfoArea is present size:%d" % + self.boardInfoArea.size) + + if self.productInfoArea is not None and self.productInfoArea.isPresent: + self.productinfoAreaOffset = self.offset // 8 + self.offset += self.productInfoArea.size + d_print("productInfoArea is present offset:%d" % self.offset) + + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + self.multiRecordAreaOffset = self.offset // 8 + d_print("multiRecordArea is present offset:%d" % self.offset) + + if self.internalUserAreaOffset == self.INITVALUE: + self.internalUserAreaOffset = 0 + if self.productinfoAreaOffset == self.INITVALUE: + self.productinfoAreaOffset = 0 + if self.chassicInfoAreaOffset == self.INITVALUE: + self.chassicInfoAreaOffset = 0 + if self.boardInfoAreaOffset == self.INITVALUE: + self.boardInfoAreaOffset = 0 + if self.multiRecordAreaOffset == self.INITVALUE: + self.multiRecordAreaOffset = 0 + + self.zeroCheckSum = (0x100 - ord(self.version) - self.internalUserAreaOffset - self.chassicInfoAreaOffset - self.productinfoAreaOffset + - self.boardInfoAreaOffset - self.multiRecordAreaOffset) & 0xff + d_print("zerochecksum:%x" % self.zeroCheckSum) + self.data = "" + self.data += chr(self.version[0]) + chr(self.internalUserAreaOffset) + chr(self.chassicInfoAreaOffset) + chr( + self.boardInfoAreaOffset) + chr(self.productinfoAreaOffset) + chr(self.multiRecordAreaOffset) + chr(self.INITVALUE[0]) + chr(self.zeroCheckSum) + + self.bindata = self.data + self.bodybin + totallen = len(self.bindata) + d_print("totallen %d" % totallen) + if totallen < self._frusize: + self.bindata = self.bindata.ljust(self._frusize, chr(self.INITVALUE[0])) + else: + raise FruException('bin data more than %d' % self._frusize, -2) + + def recalcutebin(self): + self.bodybin = "" + if self.internalUseArea is not None and self.internalUseArea.isPresent: + d_print("internalUseArea present") + self.bodybin += self.internalUseArea.data + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + d_print("chassisInfoArea present") + self.bodybin += self.chassisInfoArea.data + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + d_print("boardInfoArea present") + self.boardInfoArea.recalcute() + self.bodybin += self.boardInfoArea.data + if self.productInfoArea is not None and self.productInfoArea.isPresent: + d_print("productInfoAreapresent") + self.productInfoArea.recalcute() + self.bodybin += self.productInfoArea.data + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + d_print("multiRecordArea present") + self.bodybin += self.productInfoArea.data + + def recalcute(self, fru_eeprom_size=256): + self._frusize = fru_eeprom_size + self.recalcutebin() + self.recalcuteCommonHead() + + def setValue(self, area, field, value): + tmp_area = getattr(self, area, None) + if tmp_area is not None: + tmp_area.fruSetValue(field, value) diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/installer.conf b/device/micas/x86_64-micas_m2-w6940-128qc-r0/installer.conf new file mode 100644 index 000000000000..7dfbba766f34 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/installer.conf @@ -0,0 +1,4 @@ +CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="intel_idle.max_cstate=0 idle=poll intel_iommu=on iommu=pt modprobe.blacklist=r8168,r8169,ice,mei_me,i2c_i801,i2c_ismt" +CONSOLE_PORT=0x5060 +CONSOLE_DEV=0 diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/media_settings.json b/device/micas/x86_64-micas_m2-w6940-128qc-r0/media_settings.json new file mode 100644 index 000000000000..567e84e9c7e0 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/media_settings.json @@ -0,0 +1,5118 @@ +{ + "PORT_MEDIA_SETTINGS": { + "0": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "1": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "2": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffdc", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "3": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffdc", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "4": { + "Default": { + "pre2": { + "lane0": "0x00000006", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x0000007C", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "5": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "6": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "7": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffdc", + "lane2": "0xffffffe0", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "8": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "9": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "10": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "11": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "12": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "13": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "14": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffdc", + "lane2": "0xffffffe0", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "15": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffdc", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "16": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000006" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "17": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "18": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "19": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "20": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "21": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "22": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "23": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "24": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "25": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "26": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "27": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "28": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "29": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "30": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "31": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "32": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "33": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "34": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "35": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "36": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "37": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "38": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "39": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "40": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000006", + "lane2": "0x00000004", + "lane3": "0x00000006" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000080", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "41": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "42": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "43": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "44": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "45": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "46": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "47": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "48": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "49": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "50": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "51": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "52": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "53": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "54": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "55": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "56": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "57": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "58": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "59": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "60": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "61": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "62": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "63": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "64": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "65": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "66": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "67": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "68": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "69": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "70": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000006" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "71": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "72": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "73": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "74": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "75": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "76": { + "Default": { + "pre2": { + "lane0": "0x00000006", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "77": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "78": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "79": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "80": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "81": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "82": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "83": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "84": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "85": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "86": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "87": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "88": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "89": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "90": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "91": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "92": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "93": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "94": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "95": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "96": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "97": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "98": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "99": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "100": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "101": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "102": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "103": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "104": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "105": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "106": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "107": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "108": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "109": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "110": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "111": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "112": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "113": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "114": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "115": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "116": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "117": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "118": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "119": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe0", + "lane2": "0xffffffe0", + "lane3": "0xffffffe0" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000084", + "lane2": "0x00000084", + "lane3": "0x00000084" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "120": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "121": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "122": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "123": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "124": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "125": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "126": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc", + "lane3": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080", + "lane3": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + }, + "127": { + "Default": { + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffdc", + "lane1": "0xffffffdc", + "lane2": "0xffffffdc" + }, + "main": { + "lane0": "0x00000080", + "lane1": "0x00000080", + "lane2": "0x00000080" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000" + }, + "post3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000" + } + } + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/monitor.py b/device/micas/x86_64-micas_m2-w6940-128qc-r0/monitor.py new file mode 100755 index 000000000000..44b05bbcfe83 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/monitor.py @@ -0,0 +1,410 @@ +#!/usr/bin/python3 +# * onboard temperature sensors +# * FAN trays +# * PSU +# +import os +import re +from lxml import etree as ET +import glob +import json +from decimal import Decimal +from fru import ipmifru + + +MAILBOX_DIR = "/sys/bus/i2c/devices/" +BOARD_ID_PATH = "/sys/module/platform_common/parameters/dfd_my_type" +BOARD_AIRFLOW_PATH = "/etc/sonic/.airflow" + + +CONFIG_NAME = "dev.xml" + + +def byteTostr(val): + strtmp = '' + for value in val: + strtmp += chr(value) + return strtmp + + +def typeTostr(val): + if isinstance(val, bytes): + strtmp = byteTostr(val) + return strtmp + return val + + +def get_board_id(): + if not os.path.exists(BOARD_ID_PATH): + return "NA" + with open(BOARD_ID_PATH) as fd: + id_str = fd.read().strip() + return "0x%x" % (int(id_str, 10)) + + +def getboardairflow(): + if not os.path.exists(BOARD_AIRFLOW_PATH): + return "NA" + with open(BOARD_AIRFLOW_PATH) as fd: + airflow_str = fd.read().strip() + data = json.loads(airflow_str) + airflow = data.get("board", "NA") + return airflow + + +boardid = get_board_id() +boardairflow = getboardairflow() + + +DEV_XML_FILE_LIST = [ + "dev_" + boardid + "_" + boardairflow + ".xml", + "dev_" + boardid + ".xml", + "dev_" + boardairflow + ".xml", +] + + +def dev_file_read(path, offset, read_len): + retval = "ERR" + val_list = [] + msg = "" + ret = "" + fd = -1 + + if not os.path.exists(path): + return False, "%s %s not found" % (retval, path) + + try: + fd = os.open(path, os.O_RDONLY) + os.lseek(fd, offset, os.SEEK_SET) + ret = os.read(fd, read_len) + for item in ret: + val_list.append(item) + except Exception as e: + msg = str(e) + return False, "%s %s" % (retval, msg) + finally: + if fd > 0: + os.close(fd) + return True, val_list + + +def getPMCreg(location): + retval = 'ERR' + if not os.path.isfile(location): + return "%s %s notfound" % (retval, location) + try: + with open(location, 'r') as fd: + retval = fd.read() + except Exception as error: + return "ERR %s" % str(error) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +# Get a mailbox register +def get_pmc_register(reg_name): + retval = 'ERR' + mb_reg_file = reg_name + filepath = glob.glob(mb_reg_file) + if len(filepath) == 0: + return "%s %s notfound" % (retval, mb_reg_file) + mb_reg_file = filepath[0] + if not os.path.isfile(mb_reg_file): + # print mb_reg_file, 'not found !' + return "%s %s notfound" % (retval, mb_reg_file) + try: + with open(mb_reg_file, 'rb') as fd: + retval = fd.read() + retval = typeTostr(retval) + except Exception as error: + retval = "%s %s read failed, msg: %s" % (retval, mb_reg_file, str(error)) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +class checktype(): + def __init__(self, test1): + self.test1 = test1 + + @staticmethod + def getValue(location, bit, data_type, coefficient=1, addend=0): + try: + value_t = get_pmc_register(location) + if value_t.startswith("ERR") or value_t.startswith("NA"): + return value_t + if data_type == 1: + return float('%.1f' % ((float(value_t) / 1000) + addend)) + if data_type == 2: + return float('%.1f' % (float(value_t) / 100)) + if data_type == 3: + psu_status = int(value_t, 16) + return (psu_status & (1 << bit)) >> bit + if data_type == 4: + return int(value_t, 10) + if data_type == 5: + return float('%.1f' % (float(value_t) / 1000 / 1000)) + if data_type == 6: + return Decimal(float(value_t) * coefficient / 1000).quantize(Decimal('0.000')) + return value_t + except Exception as e: + value_t = "ERR %s" % str(e) + return value_t + + # fanFRU + @staticmethod + def decodeBinByValue(retval): + fru = ipmifru() + fru.decodeBin(retval) + return fru + + @staticmethod + def getfruValue(prob_t, root, val): + try: + ret, binval_bytes = dev_file_read(val, 0, 256) + if ret is False: + return binval_bytes + binval = byteTostr(binval_bytes) + fanpro = {} + ret = checktype.decodeBinByValue(binval) + fanpro['fan_type'] = ret.productInfoArea.productName + fanpro['hw_version'] = ret.productInfoArea.productVersion + fanpro['sn'] = ret.productInfoArea.productSerialNumber + fan_display_name_dict = status.getDecodValue(root, "fan_display_name") + fan_name = fanpro['fan_type'].strip() + if len(fan_display_name_dict) == 0: + return fanpro + if fan_name not in fan_display_name_dict: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR fan name: %s not support" % fan_name) + else: + fanpro['fan_type'] = fan_display_name_dict[fan_name] + return fanpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getslotfruValue(val): + try: + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + slotpro = {} + ret = checktype.decodeBinByValue(binval) + slotpro['slot_type'] = ret.boardInfoArea.boardProductName + slotpro['hw_version'] = ret.boardInfoArea.boardextra1 + slotpro['sn'] = ret.boardInfoArea.boardSerialNumber + return slotpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getpsufruValue(prob_t, root, val): + try: + psu_match = False + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + psupro = {} + ret = checktype.decodeBinByValue(binval) + psupro['type1'] = ret.productInfoArea.productPartModelName + psupro['sn'] = ret.productInfoArea.productSerialNumber + psupro['hw_version'] = ret.productInfoArea.productVersion + psu_dict = status.getDecodValue(root, "psutype") + psupro['type1'] = psupro['type1'].strip() + if len(psu_dict) == 0: + return psupro + for psu_name, display_name in psu_dict.items(): + if psu_name.strip() == psupro['type1']: + psupro['type1'] = display_name + psu_match = True + break + if psu_match is not True: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % psupro['type1']) + return psupro + except Exception as error: + return "ERR " + str(error) + + +class status(): + def __init__(self, productname): + self.productname = productname + + @staticmethod + def getETroot(filename): + tree = ET.parse(filename) + root = tree.getroot() + return root + + @staticmethod + def getDecodValue(collection, decode): + decodes = collection.find('decode') + testdecode = decodes.find(decode) + test = {} + if testdecode is None: + return test + for neighbor in testdecode.iter('code'): + test[neighbor.attrib["key"]] = neighbor.attrib["value"] + return test + + @staticmethod + def getfileValue(location): + return checktype.getValue(location, " ", " ") + + @staticmethod + def getETValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + prob_t = {} + prob_t.update(neighbor.attrib) + prob_t['errcode'] = 0 + prob_t['errmsg'] = '' + for pros in neighbor.iter("property"): + ret = dict(list(neighbor.attrib.items()) + list(pros.attrib.items())) + if ret.get('e2type') == 'fru' and ret.get("name") == "fru": + fruval = checktype.getfruValue(prob_t, root, ret["location"]) + if isinstance(fruval, str) and fruval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = fruval + break + prob_t.update(fruval) + continue + + if ret.get("name") == "psu" and ret.get('e2type') == 'fru': + psuval = checktype.getpsufruValue(prob_t, root, ret["location"]) + if isinstance(psuval, str) and psuval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = psuval + break + prob_t.update(psuval) + continue + + if ret.get("gettype") == "config": + prob_t[ret["name"]] = ret["value"] + continue + + if 'type' not in ret.keys(): + val = "0" + else: + val = ret["type"] + if 'bit' not in ret.keys(): + bit = "0" + else: + bit = ret["bit"] + if 'coefficient' not in ret.keys(): + coefficient = 1 + else: + coefficient = float(ret["coefficient"]) + if 'addend' not in ret.keys(): + addend = 0 + else: + addend = float(ret["addend"]) + + s = checktype.getValue(ret["location"], int(bit), int(val), coefficient, addend) + if isinstance(s, str) and s.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = s + break + if 'default' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + prob_t['errmsg'] = rt[str(s)] + if str(s) != ret["default"]: + prob_t['errcode'] = -1 + break + else: + if 'decode' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + if (ret['decode'] == "psutype" and s.replace("\x00", "").rstrip() not in rt): + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % + (s.replace("\x00", "").rstrip())) + else: + s = rt[str(s).replace("\x00", "").rstrip()] + name = ret["name"] + prob_t[name] = str(s) + a.append(prob_t) + + @staticmethod + def getCPUValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + location = neighbor.attrib["location"] + + filepath = glob.glob(location) + if len(filepath) == 0: + return + location = filepath[0] + L = [] + for dirpath, dirnames, filenames in os.walk(location): + for file in filenames: + if file.endswith("_input"): + b = re.findall(r'temp(\d+)_input', file) + idx = int(b[0]) + L.append(idx) + L = sorted(L) + for idx in L: + prob_t = {} + prob_t["name"] = getPMCreg("%s/temp%d_label" % (location, idx)) + prob_t["temp"] = float(getPMCreg("%s/temp%d_input" % (location, idx))) / 1000 + prob_t["alarm"] = float(getPMCreg("%s/temp%d_crit_alarm" % (location, idx))) / 1000 + prob_t["crit"] = float(getPMCreg("%s/temp%d_crit" % (location, idx))) / 1000 + prob_t["max"] = float(getPMCreg("%s/temp%d_max" % (location, idx))) / 1000 + a.append(prob_t) + + @staticmethod + def getFileName(): + fpath = os.path.dirname(os.path.realpath(__file__)) + for file in DEV_XML_FILE_LIST: + xml = fpath + "/" + file + if os.path.exists(xml): + return xml + return fpath + "/" + CONFIG_NAME + + @staticmethod + def checkFan(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "fan" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getTemp(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "temp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getPsu(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "psu" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getcputemp(ret): + _filename = status.getFileName() + _tagname = "cpus" + status.getCPUValue(ret, _filename, _tagname) + + @staticmethod + def getDcdc(ret): + _filename = status.getFileName() + _tagname = "dcdc" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmactemp(ret): + _filename = status.getFileName() + _tagname = "mactemp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmacpower(ret): + _filename = status.getFileName() + _tagname = "macpower" + status.getETValue(ret, _filename, _tagname) diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/pcie.yaml b/device/micas/x86_64-micas_m2-w6940-128qc-r0/pcie.yaml new file mode 100644 index 000000000000..94f5320cb10a --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/pcie.yaml @@ -0,0 +1,443 @@ +- bus: '00' + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: '00' + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: '00' + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: '00' + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: '00' + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: '00' + dev: '01' + fn: '0' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '1' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '2' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '3' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '4' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '5' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '6' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '7' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '02' + fn: '0' + id: 09a6 + name: 'System peripheral: Intel Corporation Device 09a6' +- bus: '00' + dev: '02' + fn: '1' + id: 09a7 + name: 'System peripheral: Intel Corporation Device 09a7' +- bus: '00' + dev: '02' + fn: '4' + id: '3456' + name: 'Non-Essential Instrumentation [1300]: Intel Corporation Device 3456 (rev + 01)' +- bus: '00' + dev: '06' + fn: '0' + id: 18da + name: 'PCI bridge: Intel Corporation Device 18da (rev 11)' +- bus: '00' + dev: 0e + fn: '0' + id: 18f2 + name: 'SATA controller: Intel Corporation Device 18f2 (rev 11)' +- bus: '00' + dev: 0f + fn: '0' + id: 18ac + name: 'System peripheral: Intel Corporation Device 18ac (rev 11)' +- bus: '00' + dev: '10' + fn: '0' + id: 18a8 + name: 'PCI bridge: Intel Corporation Device 18a8 (rev 11)' +- bus: '00' + dev: '12' + fn: '0' + id: 18aa + name: 'PCI bridge: Intel Corporation Device 18aa (rev 11)' +- bus: '00' + dev: '14' + fn: '0' + id: 18ad + name: 'PCI bridge: Intel Corporation Device 18ad (rev 11)' +- bus: '00' + dev: '18' + fn: '0' + id: 18d3 + name: 'Communication controller: Intel Corporation Device 18d3 (rev 11)' +- bus: '00' + dev: '18' + fn: '1' + id: 18d4 + name: 'Communication controller: Intel Corporation Device 18d4 (rev 11)' +- bus: '00' + dev: '18' + fn: '4' + id: 18d6 + name: 'Communication controller: Intel Corporation Device 18d6 (rev 11)' +- bus: '00' + dev: 1a + fn: '0' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '1' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '2' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '3' + id: 18d9 + name: 'Unassigned class [ff00]: Intel Corporation Device 18d9 (rev 11)' +- bus: '00' + dev: 1c + fn: '0' + id: 18db + name: 'SD Host controller: Intel Corporation Device 18db (rev 11)' +- bus: '00' + dev: 1d + fn: '0' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: '00' + dev: 1e + fn: '0' + id: 18d0 + name: 'USB controller: Intel Corporation Device 18d0 (rev 11)' +- bus: '00' + dev: 1f + fn: '0' + id: 18dc + name: 'ISA bridge: Intel Corporation Device 18dc (rev 11)' +- bus: '00' + dev: 1f + fn: '4' + id: 18df + name: 'SMBus: Intel Corporation Device 18df (rev 11)' +- bus: '00' + dev: 1f + fn: '5' + id: 18e0 + name: 'Serial bus controller [0c80]: Intel Corporation Device 18e0 (rev 11)' +- bus: '00' + dev: 1f + fn: '7' + id: 18e1 + name: 'Non-Essential Instrumentation [1300]: Intel Corporation Device 18e1 (rev + 11)' +- bus: '01' + dev: '00' + fn: '0' + id: 18ee + name: 'Co-processor: Intel Corporation Device 18ee (rev 11)' +- bus: '02' + dev: '00' + fn: '0' + id: f900 + name: 'Ethernet controller: Broadcom Inc. and subsidiaries Device f900 (rev 11)' +- bus: '03' + dev: '00' + fn: '0' + id: '5220' + name: 'SMBus: Device 1ded:5220' +- bus: '04' + dev: '00' + fn: '0' + id: '8168' + name: 'Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI + Express Gigabit Ethernet Controller (rev 15)' +- bus: '14' + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: '14' + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: '14' + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: '14' + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: '14' + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: f3 + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: f3 + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: f3 + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: f3 + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: f3 + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: f3 + dev: '04' + fn: '0' + id: 18d1 + name: 'PCI bridge: Intel Corporation Device 18d1' +- bus: f4 + dev: '00' + fn: '0' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '1' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '2' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '3' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '4' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: fe + dev: '00' + fn: '0' + id: '3450' + name: 'System peripheral: Intel Corporation Device 3450' +- bus: fe + dev: '00' + fn: '1' + id: '3451' + name: 'System peripheral: Intel Corporation Device 3451' +- bus: fe + dev: '00' + fn: '2' + id: '3452' + name: 'System peripheral: Intel Corporation Device 3452' +- bus: fe + dev: '00' + fn: '3' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: fe + dev: '00' + fn: '5' + id: '3455' + name: 'System peripheral: Intel Corporation Device 3455' +- bus: fe + dev: 0b + fn: '0' + id: '3448' + name: 'System peripheral: Intel Corporation Device 3448' +- bus: fe + dev: 0b + fn: '1' + id: '3448' + name: 'System peripheral: Intel Corporation Device 3448' +- bus: fe + dev: 0b + fn: '2' + id: 344b + name: 'System peripheral: Intel Corporation Device 344b' +- bus: fe + dev: 0c + fn: '0' + id: 344a + name: 'Performance counters: Intel Corporation Device 344a' +- bus: fe + dev: 1a + fn: '0' + id: '2880' + name: 'Performance counters: Intel Corporation Device 2880' +- bus: ff + dev: '00' + fn: '0' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '1' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '2' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '3' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '4' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '5' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: 0a + fn: '0' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '1' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '2' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '3' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '4' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '5' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 1d + fn: '0' + id: 344f + name: 'System peripheral: Intel Corporation Device 344f' +- bus: ff + dev: 1d + fn: '1' + id: '3457' + name: 'System peripheral: Intel Corporation Device 3457' +- bus: ff + dev: 1e + fn: '0' + id: '3458' + name: 'System peripheral: Intel Corporation Device 3458 (rev 01)' +- bus: ff + dev: 1e + fn: '1' + id: '3459' + name: 'System peripheral: Intel Corporation Device 3459 (rev 01)' +- bus: ff + dev: 1e + fn: '2' + id: 345a + name: 'System peripheral: Intel Corporation Device 345a (rev 01)' +- bus: ff + dev: 1e + fn: '3' + id: 345b + name: 'System peripheral: Intel Corporation Device 345b (rev 01)' +- bus: ff + dev: 1e + fn: '4' + id: 345c + name: 'System peripheral: Intel Corporation Device 345c (rev 01)' +- bus: ff + dev: 1e + fn: '5' + id: 345d + name: 'System peripheral: Intel Corporation Device 345d (rev 01)' +- bus: ff + dev: 1e + fn: '6' + id: 345e + name: 'System peripheral: Intel Corporation Device 345e (rev 01)' +- bus: ff + dev: 1e + fn: '7' + id: 345f + name: 'System peripheral: Intel Corporation Device 345f (rev 01)' diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform.json b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform.json new file mode 100644 index 000000000000..a0ceb34e9fb4 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform.json @@ -0,0 +1,1668 @@ +{ + "interfaces": { + "Ethernet1": { + "index": "0,0,0,0", + "lanes": "17,18,19,20", + "breakout_modes": { + "1x400G": [ + "Eth1" + ], + "2x200G[100G]": [ + "Eth1/1", + "Eth1/2" + ] + } + }, + "Ethernet5": { + "index": "1,1,1,1", + "lanes": "21,22,23,24", + "breakout_modes": { + "1x400G": [ + "Eth2" + ], + "2x200G[100G]": [ + "Eth2/1", + "Eth2/2" + ] + } + }, + "Ethernet9": { + "index": "2,2,2,2", + "lanes": "25,26,27,28", + "breakout_modes": { + "1x400G": [ + "Eth3" + ], + "2x200G[100G]": [ + "Eth3/1", + "Eth3/2" + ] + } + }, + "Ethernet13": { + "index": "3,3,3,3", + "lanes": "29,30,31,32", + "breakout_modes": { + "1x400G": [ + "Eth4" + ], + "2x200G[100G]": [ + "Eth4/1", + "Eth4/2" + ] + } + }, + "Ethernet17": { + "index": "4,4,4,4", + "lanes": "129,130,131,132", + "breakout_modes": { + "1x400G": [ + "Eth5" + ], + "2x200G[100G]": [ + "Eth5/1", + "Eth5/2" + ] + } + }, + "Ethernet21": { + "index": "5,5,5,5", + "lanes": "133,134,135,136", + "breakout_modes": { + "1x400G": [ + "Eth6" + ], + "2x200G[100G]": [ + "Eth6/1", + "Eth6/2" + ] + } + }, + "Ethernet25": { + "index": "6,6,6,6", + "lanes": "41,42,43,44", + "breakout_modes": { + "1x400G": [ + "Eth7" + ], + "2x200G[100G]": [ + "Eth7/1", + "Eth7/2" + ] + } + }, + "Ethernet29": { + "index": "7,7,7,7", + "lanes": "45,46,47,48", + "breakout_modes": { + "1x400G": [ + "Eth8" + ], + "2x200G[100G]": [ + "Eth8/1", + "Eth8/2" + ] + } + }, + "Ethernet33": { + "index": "8,8,8,8", + "lanes": "57,58,59,60", + "breakout_modes": { + "1x400G": [ + "Eth9" + ], + "2x200G[100G]": [ + "Eth9/1", + "Eth9/2" + ] + } + }, + "Ethernet37": { + "index": "9,9,9,9", + "lanes": "61,62,63,64", + "breakout_modes": { + "1x400G": [ + "Eth10" + ], + "2x200G[100G]": [ + "Eth10/1", + "Eth10/2" + ] + } + }, + "Ethernet41": { + "index": "10,10,10,10", + "lanes": "145,146,147,148", + "breakout_modes": { + "1x400G": [ + "Eth11" + ], + "2x200G[100G]": [ + "Eth11/1", + "Eth11/2" + ] + } + }, + "Ethernet45": { + "index": "11,11,11,11", + "lanes": "149,150,151,152", + "breakout_modes": { + "1x400G": [ + "Eth12" + ], + "2x200G[100G]": [ + "Eth12/1", + "Eth12/2" + ] + } + }, + "Ethernet49": { + "index": "12,12,12,12", + "lanes": "137,138,139,140", + "breakout_modes": { + "1x400G": [ + "Eth13" + ], + "2x200G[100G]": [ + "Eth13/1", + "Eth13/2" + ] + } + }, + "Ethernet53": { + "index": "13,13,13,13", + "lanes": "141,142,143,144", + "breakout_modes": { + "1x400G": [ + "Eth14" + ], + "2x200G[100G]": [ + "Eth14/1", + "Eth14/2" + ] + } + }, + "Ethernet57": { + "index": "14,14,14,14", + "lanes": "33,34,35,36", + "breakout_modes": { + "1x400G": [ + "Eth15" + ], + "2x200G[100G]": [ + "Eth15/1", + "Eth15/2" + ] + } + }, + "Ethernet61": { + "index": "15,15,15,15", + "lanes": "37,38,39,40", + "breakout_modes": { + "1x400G": [ + "Eth16" + ], + "2x200G[100G]": [ + "Eth16/1", + "Eth16/2" + ] + } + }, + "Ethernet65": { + "index": "16,16,16,16", + "lanes": "161,162,163,164", + "breakout_modes": { + "1x400G": [ + "Eth17" + ], + "2x200G[100G]": [ + "Eth17/1", + "Eth17/2" + ] + } + }, + "Ethernet69": { + "index": "17,17,17,17", + "lanes": "165,166,167,168", + "breakout_modes": { + "1x400G": [ + "Eth18" + ], + "2x200G[100G]": [ + "Eth18/1", + "Eth18/2" + ] + } + }, + "Ethernet73": { + "index": "18,18,18,18", + "lanes": "153,154,155,156", + "breakout_modes": { + "1x400G": [ + "Eth19" + ], + "2x200G[100G]": [ + "Eth19/1", + "Eth19/2" + ] + } + }, + "Ethernet77": { + "index": "19,19,19,19", + "lanes": "157,158,159,160", + "breakout_modes": { + "1x400G": [ + "Eth20" + ], + "2x200G[100G]": [ + "Eth20/1", + "Eth20/2" + ] + } + }, + "Ethernet81": { + "index": "20,20,20,20", + "lanes": "49,50,51,52", + "breakout_modes": { + "1x400G": [ + "Eth21" + ], + "2x200G[100G]": [ + "Eth21/1", + "Eth21/2" + ] + } + }, + "Ethernet85": { + "index": "21,21,21,21", + "lanes": "53,54,55,56", + "breakout_modes": { + "1x400G": [ + "Eth22" + ], + "2x200G[100G]": [ + "Eth22/1", + "Eth22/2" + ] + } + }, + "Ethernet89": { + "index": "22,22,22,22", + "lanes": "177,178,179,180", + "breakout_modes": { + "1x400G": [ + "Eth23" + ], + "2x200G[100G]": [ + "Eth23/1", + "Eth23/2" + ] + } + }, + "Ethernet93": { + "index": "23,23,23,23", + "lanes": "181,182,183,184", + "breakout_modes": { + "1x400G": [ + "Eth24" + ], + "2x200G[100G]": [ + "Eth24/1", + "Eth24/2" + ] + } + }, + "Ethernet97": { + "index": "24,24,24,24", + "lanes": "169,170,171,172", + "breakout_modes": { + "1x400G": [ + "Eth25" + ], + "2x200G[100G]": [ + "Eth25/1", + "Eth25/2" + ] + } + }, + "Ethernet101": { + "index": "25,25,25,25", + "lanes": "173,174,175,176", + "breakout_modes": { + "1x400G": [ + "Eth26" + ], + "2x200G[100G]": [ + "Eth26/1", + "Eth26/2" + ] + } + }, + "Ethernet105": { + "index": "26,26,26,26", + "lanes": "65,66,67,68", + "breakout_modes": { + "1x400G": [ + "Eth27" + ], + "2x200G[100G]": [ + "Eth27/1", + "Eth27/2" + ] + } + }, + "Ethernet109": { + "index": "27,27,27,27", + "lanes": "69,70,71,72", + "breakout_modes": { + "1x400G": [ + "Eth28" + ], + "2x200G[100G]": [ + "Eth28/1", + "Eth28/2" + ] + } + }, + "Ethernet113": { + "index": "28,28,28,28", + "lanes": "209,210,211,212", + "breakout_modes": { + "1x400G": [ + "Eth29" + ], + "2x200G[100G]": [ + "Eth29/1", + "Eth29/2" + ] + } + }, + "Ethernet117": { + "index": "29,29,29,29", + "lanes": "213,214,215,216", + "breakout_modes": { + "1x400G": [ + "Eth30" + ], + "2x200G[100G]": [ + "Eth30/1", + "Eth30/2" + ] + } + }, + "Ethernet121": { + "index": "30,30,30,30", + "lanes": "185,186,187,188", + "breakout_modes": { + "1x400G": [ + "Eth31" + ], + "2x200G[100G]": [ + "Eth31/1", + "Eth31/2" + ] + } + }, + "Ethernet125": { + "index": "31,31,31,31", + "lanes": "189,190,191,192", + "breakout_modes": { + "1x400G": [ + "Eth32" + ], + "2x200G[100G]": [ + "Eth32/1", + "Eth32/2" + ] + } + }, + "Ethernet129": { + "index": "32,32,32,32", + "lanes": "81,82,83,84", + "breakout_modes": { + "1x400G": [ + "Eth33" + ], + "2x200G[100G]": [ + "Eth33/1", + "Eth33/2" + ] + } + }, + "Ethernet133": { + "index": "33,33,33,33", + "lanes": "85,86,87,88", + "breakout_modes": { + "1x400G": [ + "Eth34" + ], + "2x200G[100G]": [ + "Eth34/1", + "Eth34/2" + ] + } + }, + "Ethernet137": { + "index": "34,34,34,34", + "lanes": "193,194,195,196", + "breakout_modes": { + "1x400G": [ + "Eth35" + ], + "2x200G[100G]": [ + "Eth35/1", + "Eth35/2" + ] + } + }, + "Ethernet141": { + "index": "35,35,35,35", + "lanes": "197,198,199,200", + "breakout_modes": { + "1x400G": [ + "Eth36" + ], + "2x200G[100G]": [ + "Eth36/1", + "Eth36/2" + ] + } + }, + "Ethernet145": { + "index": "36,36,36,36", + "lanes": "201,202,203,204", + "breakout_modes": { + "1x400G": [ + "Eth37" + ], + "2x200G[100G]": [ + "Eth37/1", + "Eth37/2" + ] + } + }, + "Ethernet149": { + "index": "37,37,37,37", + "lanes": "205,206,207,208", + "breakout_modes": { + "1x400G": [ + "Eth38" + ], + "2x200G[100G]": [ + "Eth38/1", + "Eth38/2" + ] + } + }, + "Ethernet153": { + "index": "38,38,38,38", + "lanes": "97,98,99,100", + "breakout_modes": { + "1x400G": [ + "Eth39" + ], + "2x200G[100G]": [ + "Eth39/1", + "Eth39/2" + ] + } + }, + "Ethernet157": { + "index": "39,39,39,39", + "lanes": "101,102,103,104", + "breakout_modes": { + "1x400G": [ + "Eth40" + ], + "2x200G[100G]": [ + "Eth40/1", + "Eth40/2" + ] + } + }, + "Ethernet161": { + "index": "40,40,40,40", + "lanes": "121,122,123,124", + "breakout_modes": { + "1x400G": [ + "Eth41" + ], + "2x200G[100G]": [ + "Eth41/1", + "Eth41/2" + ] + } + }, + "Ethernet165": { + "index": "41,41,41,41", + "lanes": "125,126,127,128", + "breakout_modes": { + "1x400G": [ + "Eth42" + ], + "2x200G[100G]": [ + "Eth42/1", + "Eth42/2" + ] + } + }, + "Ethernet169": { + "index": "42,42,42,42", + "lanes": "217,218,219,220", + "breakout_modes": { + "1x400G": [ + "Eth43" + ], + "2x200G[100G]": [ + "Eth43/1", + "Eth43/2" + ] + } + }, + "Ethernet173": { + "index": "43,43,43,43", + "lanes": "221,222,223,224", + "breakout_modes": { + "1x400G": [ + "Eth44" + ], + "2x200G[100G]": [ + "Eth44/1", + "Eth44/2" + ] + } + }, + "Ethernet177": { + "index": "44,44,44,44", + "lanes": "113,114,115,116", + "breakout_modes": { + "1x400G": [ + "Eth45" + ], + "2x200G[100G]": [ + "Eth45/1", + "Eth45/2" + ] + } + }, + "Ethernet181": { + "index": "45,45,45,45", + "lanes": "117,118,119,120", + "breakout_modes": { + "1x400G": [ + "Eth46" + ], + "2x200G[100G]": [ + "Eth46/1", + "Eth46/2" + ] + } + }, + "Ethernet185": { + "index": "46,46,46,46", + "lanes": "105,106,107,108", + "breakout_modes": { + "1x400G": [ + "Eth47" + ], + "2x200G[100G]": [ + "Eth47/1", + "Eth47/2" + ] + } + }, + "Ethernet189": { + "index": "47,47,47,47", + "lanes": "109,110,111,112", + "breakout_modes": { + "1x400G": [ + "Eth48" + ], + "2x200G[100G]": [ + "Eth48/1", + "Eth48/2" + ] + } + }, + "Ethernet193": { + "index": "48,48,48,48", + "lanes": "225,226,227,228", + "breakout_modes": { + "1x400G": [ + "Eth49" + ], + "2x200G[100G]": [ + "Eth49/1", + "Eth49/2" + ] + } + }, + "Ethernet197": { + "index": "49,49,49,49", + "lanes": "229,230,231,232", + "breakout_modes": { + "1x400G": [ + "Eth50" + ], + "2x200G[100G]": [ + "Eth50/1", + "Eth50/2" + ] + } + }, + "Ethernet201": { + "index": "50,50,50,50", + "lanes": "233,234,235,236", + "breakout_modes": { + "1x400G": [ + "Eth51" + ], + "2x200G[100G]": [ + "Eth51/1", + "Eth51/2" + ] + } + }, + "Ethernet205": { + "index": "51,51,51,51", + "lanes": "237,238,239,240", + "breakout_modes": { + "1x400G": [ + "Eth52" + ], + "2x200G[100G]": [ + "Eth52/1", + "Eth52/2" + ] + } + }, + "Ethernet209": { + "index": "52,52,52,52", + "lanes": "89,90,91,92", + "breakout_modes": { + "1x400G": [ + "Eth53" + ], + "2x200G[100G]": [ + "Eth53/1", + "Eth53/2" + ] + } + }, + "Ethernet213": { + "index": "53,53,53,53", + "lanes": "93,94,95,96", + "breakout_modes": { + "1x400G": [ + "Eth54" + ], + "2x200G[100G]": [ + "Eth54/1", + "Eth54/2" + ] + } + }, + "Ethernet217": { + "index": "54,54,54,54", + "lanes": "241,242,243,244", + "breakout_modes": { + "1x400G": [ + "Eth55" + ], + "2x200G[100G]": [ + "Eth55/1", + "Eth55/2" + ] + } + }, + "Ethernet221": { + "index": "55,55,55,55", + "lanes": "245,246,247,248", + "breakout_modes": { + "1x400G": [ + "Eth56" + ], + "2x200G[100G]": [ + "Eth56/1", + "Eth56/2" + ] + } + }, + "Ethernet225": { + "index": "56,56,56,56", + "lanes": "249,250,251,252", + "breakout_modes": { + "1x400G": [ + "Eth57" + ], + "2x200G[100G]": [ + "Eth57/1", + "Eth57/2" + ] + } + }, + "Ethernet229": { + "index": "57,57,57,57", + "lanes": "253,254,255,256", + "breakout_modes": { + "1x400G": [ + "Eth58" + ], + "2x200G[100G]": [ + "Eth58/1", + "Eth58/2" + ] + } + }, + "Ethernet233": { + "index": "58,58,58,58", + "lanes": "73,74,75,76", + "breakout_modes": { + "1x400G": [ + "Eth59" + ], + "2x200G[100G]": [ + "Eth59/1", + "Eth59/2" + ] + } + }, + "Ethernet237": { + "index": "59,59,59,59", + "lanes": "77,78,79,80", + "breakout_modes": { + "1x400G": [ + "Eth60" + ], + "2x200G[100G]": [ + "Eth60/1", + "Eth60/2" + ] + } + }, + "Ethernet241": { + "index": "60,60,60,60", + "lanes": "257,258,259,260", + "breakout_modes": { + "1x400G": [ + "Eth61" + ], + "2x200G[100G]": [ + "Eth61/1", + "Eth61/2" + ] + } + }, + "Ethernet245": { + "index": "61,61,61,61", + "lanes": "261,262,263,264", + "breakout_modes": { + "1x400G": [ + "Eth62" + ], + "2x200G[100G]": [ + "Eth62/1", + "Eth62/2" + ] + } + }, + "Ethernet249": { + "index": "62,62,62,62", + "lanes": "265,266,267,268", + "breakout_modes": { + "1x400G": [ + "Eth63" + ], + "2x200G[100G]": [ + "Eth63/1", + "Eth63/2" + ] + } + }, + "Ethernet253": { + "index": "63,63,63,63", + "lanes": "269,270,271,272", + "breakout_modes": { + "1x400G": [ + "Eth64" + ], + "2x200G[100G]": [ + "Eth64/1", + "Eth64/2" + ] + } + }, + "Ethernet257": { + "index": "64,64,64,64", + "lanes": "433,434,435,436", + "breakout_modes": { + "1x400G": [ + "Eth65" + ], + "2x200G[100G]": [ + "Eth65/1", + "Eth65/2" + ] + } + }, + "Ethernet261": { + "index": "65,65,65,65", + "lanes": "437,438,439,440", + "breakout_modes": { + "1x400G": [ + "Eth66" + ], + "2x200G[100G]": [ + "Eth66/1", + "Eth66/2" + ] + } + }, + "Ethernet265": { + "index": "66,66,66,66", + "lanes": "273,274,275,276", + "breakout_modes": { + "1x400G": [ + "Eth67" + ], + "2x200G[100G]": [ + "Eth67/1", + "Eth67/2" + ] + } + }, + "Ethernet269": { + "index": "67,67,67,67", + "lanes": "277,278,279,280", + "breakout_modes": { + "1x400G": [ + "Eth68" + ], + "2x200G[100G]": [ + "Eth68/1", + "Eth68/2" + ] + } + }, + "Ethernet273": { + "index": "68,68,68,68", + "lanes": "281,282,283,284", + "breakout_modes": { + "1x400G": [ + "Eth69" + ], + "2x200G[100G]": [ + "Eth69/1", + "Eth69/2" + ] + } + }, + "Ethernet277": { + "index": "69,69,69,69", + "lanes": "285,286,287,288", + "breakout_modes": { + "1x400G": [ + "Eth70" + ], + "2x200G[100G]": [ + "Eth70/1", + "Eth70/2" + ] + } + }, + "Ethernet281": { + "index": "70,70,70,70", + "lanes": "417,418,419,420", + "breakout_modes": { + "1x400G": [ + "Eth71" + ], + "2x200G[100G]": [ + "Eth71/1", + "Eth71/2" + ] + } + }, + "Ethernet285": { + "index": "71,71,71,71", + "lanes": "421,422,423,424", + "breakout_modes": { + "1x400G": [ + "Eth72" + ], + "2x200G[100G]": [ + "Eth72/1", + "Eth72/2" + ] + } + }, + "Ethernet289": { + "index": "72,72,72,72", + "lanes": "393,394,395,396", + "breakout_modes": { + "1x400G": [ + "Eth73" + ], + "2x200G[100G]": [ + "Eth73/1", + "Eth73/2" + ] + } + }, + "Ethernet293": { + "index": "73,73,73,73", + "lanes": "397,398,399,400", + "breakout_modes": { + "1x400G": [ + "Eth74" + ], + "2x200G[100G]": [ + "Eth74/1", + "Eth74/2" + ] + } + }, + "Ethernet297": { + "index": "74,74,74,74", + "lanes": "289,290,291,292", + "breakout_modes": { + "1x400G": [ + "Eth75" + ], + "2x200G[100G]": [ + "Eth75/1", + "Eth75/2" + ] + } + }, + "Ethernet301": { + "index": "75,75,75,75", + "lanes": "293,294,295,296", + "breakout_modes": { + "1x400G": [ + "Eth76" + ], + "2x200G[100G]": [ + "Eth76/1", + "Eth76/2" + ] + } + }, + "Ethernet305": { + "index": "76,76,76,76", + "lanes": "401,402,403,404", + "breakout_modes": { + "1x400G": [ + "Eth77" + ], + "2x200G[100G]": [ + "Eth77/1", + "Eth77/2" + ] + } + }, + "Ethernet309": { + "index": "77,77,77,77", + "lanes": "405,406,407,408", + "breakout_modes": { + "1x400G": [ + "Eth78" + ], + "2x200G[100G]": [ + "Eth78/1", + "Eth78/2" + ] + } + }, + "Ethernet313": { + "index": "78,78,78,78", + "lanes": "409,410,411,412", + "breakout_modes": { + "1x400G": [ + "Eth79" + ], + "2x200G[100G]": [ + "Eth79/1", + "Eth79/2" + ] + } + }, + "Ethernet317": { + "index": "79,79,79,79", + "lanes": "413,414,415,416", + "breakout_modes": { + "1x400G": [ + "Eth80" + ], + "2x200G[100G]": [ + "Eth80/1", + "Eth80/2" + ] + } + }, + "Ethernet321": { + "index": "80,80,80,80", + "lanes": "305,306,307,308", + "breakout_modes": { + "1x400G": [ + "Eth81" + ], + "2x200G[100G]": [ + "Eth81/1", + "Eth81/2" + ] + } + }, + "Ethernet325": { + "index": "81,81,81,81", + "lanes": "309,310,311,312", + "breakout_modes": { + "1x400G": [ + "Eth82" + ], + "2x200G[100G]": [ + "Eth82/1", + "Eth82/2" + ] + } + }, + "Ethernet329": { + "index": "82,82,82,82", + "lanes": "385,386,387,388", + "breakout_modes": { + "1x400G": [ + "Eth83" + ], + "2x200G[100G]": [ + "Eth83/1", + "Eth83/2" + ] + } + }, + "Ethernet333": { + "index": "83,83,83,83", + "lanes": "389,390,391,392", + "breakout_modes": { + "1x400G": [ + "Eth84" + ], + "2x200G[100G]": [ + "Eth84/1", + "Eth84/2" + ] + } + }, + "Ethernet337": { + "index": "84,84,84,84", + "lanes": "425,426,427,428", + "breakout_modes": { + "1x400G": [ + "Eth85" + ], + "2x200G[100G]": [ + "Eth85/1", + "Eth85/2" + ] + } + }, + "Ethernet341": { + "index": "85,85,85,85", + "lanes": "429,430,431,432", + "breakout_modes": { + "1x400G": [ + "Eth86" + ], + "2x200G[100G]": [ + "Eth86/1", + "Eth86/2" + ] + } + }, + "Ethernet345": { + "index": "86,86,86,86", + "lanes": "321,322,323,324", + "breakout_modes": { + "1x400G": [ + "Eth87" + ], + "2x200G[100G]": [ + "Eth87/1", + "Eth87/2" + ] + } + }, + "Ethernet349": { + "index": "87,87,87,87", + "lanes": "325,326,327,328", + "breakout_modes": { + "1x400G": [ + "Eth88" + ], + "2x200G[100G]": [ + "Eth88/1", + "Eth88/2" + ] + } + }, + "Ethernet353": { + "index": "88,88,88,88", + "lanes": "313,314,315,316", + "breakout_modes": { + "1x400G": [ + "Eth89" + ], + "2x200G[100G]": [ + "Eth89/1", + "Eth89/2" + ] + } + }, + "Ethernet357": { + "index": "89,89,89,89", + "lanes": "317,318,319,320", + "breakout_modes": { + "1x400G": [ + "Eth90" + ], + "2x200G[100G]": [ + "Eth90/1", + "Eth90/2" + ] + } + }, + "Ethernet361": { + "index": "90,90,90,90", + "lanes": "441,442,443,444", + "breakout_modes": { + "1x400G": [ + "Eth91" + ], + "2x200G[100G]": [ + "Eth91/1", + "Eth91/2" + ] + } + }, + "Ethernet365": { + "index": "91,91,91,91", + "lanes": "445,446,447,448", + "breakout_modes": { + "1x400G": [ + "Eth92" + ], + "2x200G[100G]": [ + "Eth92/1", + "Eth92/2" + ] + } + }, + "Ethernet369": { + "index": "92,92,92,92", + "lanes": "337,338,339,340", + "breakout_modes": { + "1x400G": [ + "Eth93" + ], + "2x200G[100G]": [ + "Eth93/1", + "Eth93/2" + ] + } + }, + "Ethernet373": { + "index": "93,93,93,93", + "lanes": "341,342,343,344", + "breakout_modes": { + "1x400G": [ + "Eth94" + ], + "2x200G[100G]": [ + "Eth94/1", + "Eth94/2" + ] + } + }, + "Ethernet377": { + "index": "94,94,94,94", + "lanes": "297,298,299,300", + "breakout_modes": { + "1x400G": [ + "Eth95" + ], + "2x200G[100G]": [ + "Eth95/1", + "Eth95/2" + ] + } + }, + "Ethernet381": { + "index": "95,95,95,95", + "lanes": "301,302,303,304", + "breakout_modes": { + "1x400G": [ + "Eth96" + ], + "2x200G[100G]": [ + "Eth96/1", + "Eth96/2" + ] + } + }, + "Ethernet385": { + "index": "96,96,96,96", + "lanes": "457,458,459,460", + "breakout_modes": { + "1x400G": [ + "Eth97" + ], + "2x200G[100G]": [ + "Eth97/1", + "Eth97/2" + ] + } + }, + "Ethernet389": { + "index": "97,97,97,97", + "lanes": "461,462,463,464", + "breakout_modes": { + "1x400G": [ + "Eth98" + ], + "2x200G[100G]": [ + "Eth98/1", + "Eth98/2" + ] + } + }, + "Ethernet393": { + "index": "98,98,98,98", + "lanes": "353,354,355,356", + "breakout_modes": { + "1x400G": [ + "Eth99" + ], + "2x200G[100G]": [ + "Eth99/1", + "Eth99/2" + ] + } + }, + "Ethernet397": { + "index": "99,99,99,99", + "lanes": "357,358,359,360", + "breakout_modes": { + "1x400G": [ + "Eth100" + ], + "2x200G[100G]": [ + "Eth100/1", + "Eth100/2" + ] + } + }, + "Ethernet401": { + "index": "100,100,100,100", + "lanes": "329,330,331,332", + "breakout_modes": { + "1x400G": [ + "Eth101" + ], + "2x200G[100G]": [ + "Eth101/1", + "Eth101/2" + ] + } + }, + "Ethernet405": { + "index": "101,101,101,101", + "lanes": "333,334,335,336", + "breakout_modes": { + "1x400G": [ + "Eth102" + ], + "2x200G[100G]": [ + "Eth102/1", + "Eth102/2" + ] + } + }, + "Ethernet409": { + "index": "102,102,102,102", + "lanes": "473,474,475,476", + "breakout_modes": { + "1x400G": [ + "Eth103" + ], + "2x200G[100G]": [ + "Eth103/1", + "Eth103/2" + ] + } + }, + "Ethernet413": { + "index": "103,103,103,103", + "lanes": "477,478,479,480", + "breakout_modes": { + "1x400G": [ + "Eth104" + ], + "2x200G[100G]": [ + "Eth104/1", + "Eth104/2" + ] + } + }, + "Ethernet417": { + "index": "104,104,104,104", + "lanes": "369,370,371,372", + "breakout_modes": { + "1x400G": [ + "Eth105" + ], + "2x200G[100G]": [ + "Eth105/1", + "Eth105/2" + ] + } + }, + "Ethernet421": { + "index": "105,105,105,105", + "lanes": "373,374,375,376", + "breakout_modes": { + "1x400G": [ + "Eth106" + ], + "2x200G[100G]": [ + "Eth106/1", + "Eth106/2" + ] + } + }, + "Ethernet425": { + "index": "106,106,106,106", + "lanes": "345,346,347,348", + "breakout_modes": { + "1x400G": [ + "Eth107" + ], + "2x200G[100G]": [ + "Eth107/1", + "Eth107/2" + ] + } + }, + "Ethernet429": { + "index": "107,107,107,107", + "lanes": "349,350,351,352", + "breakout_modes": { + "1x400G": [ + "Eth108" + ], + "2x200G[100G]": [ + "Eth108/1", + "Eth108/2" + ] + } + }, + "Ethernet433": { + "index": "108,108,108,108", + "lanes": "449,450,451,452", + "breakout_modes": { + "1x400G": [ + "Eth109" + ], + "2x200G[100G]": [ + "Eth109/1", + "Eth109/2" + ] + } + }, + "Ethernet437": { + "index": "109,109,109,109", + "lanes": "453,454,455,456", + "breakout_modes": { + "1x400G": [ + "Eth110" + ], + "2x200G[100G]": [ + "Eth110/1", + "Eth110/2" + ] + } + }, + "Ethernet441": { + "index": "110,110,110,110", + "lanes": "465,466,467,468", + "breakout_modes": { + "1x400G": [ + "Eth111" + ], + "2x200G[100G]": [ + "Eth111/1", + "Eth111/2" + ] + } + }, + "Ethernet445": { + "index": "111,111,111,111", + "lanes": "469,470,471,472", + "breakout_modes": { + "1x400G": [ + "Eth112" + ], + "2x200G[100G]": [ + "Eth112/1", + "Eth112/2" + ] + } + }, + "Ethernet449": { + "index": "112,112,112,112", + "lanes": "361,362,363,364", + "breakout_modes": { + "1x400G": [ + "Eth113" + ], + "2x200G[100G]": [ + "Eth113/1", + "Eth113/2" + ] + } + }, + "Ethernet453": { + "index": "113,113,113,113", + "lanes": "365,366,367,368", + "breakout_modes": { + "1x400G": [ + "Eth114" + ], + "2x200G[100G]": [ + "Eth114/1", + "Eth114/2" + ] + } + }, + "Ethernet457": { + "index": "114,114,114,114", + "lanes": "489,490,491,492", + "breakout_modes": { + "1x400G": [ + "Eth115" + ], + "2x200G[100G]": [ + "Eth115/1", + "Eth115/2" + ] + } + }, + "Ethernet461": { + "index": "115,115,115,115", + "lanes": "493,494,495,496", + "breakout_modes": { + "1x400G": [ + "Eth116" + ], + "2x200G[100G]": [ + "Eth116/1", + "Eth116/2" + ] + } + }, + "Ethernet465": { + "index": "116,116,116,116", + "lanes": "481,482,483,484", + "breakout_modes": { + "1x400G": [ + "Eth117" + ], + "2x200G[100G]": [ + "Eth117/1", + "Eth117/2" + ] + } + }, + "Ethernet469": { + "index": "117,117,117,117", + "lanes": "485,486,487,488", + "breakout_modes": { + "1x400G": [ + "Eth118" + ], + "2x200G[100G]": [ + "Eth118/1", + "Eth118/2" + ] + } + }, + "Ethernet473": { + "index": "118,118,118,118", + "lanes": "377,378,379,380", + "breakout_modes": { + "1x400G": [ + "Eth119" + ], + "2x200G[100G]": [ + "Eth119/1", + "Eth119/2" + ] + } + }, + "Ethernet477": { + "index": "119,119,119,119", + "lanes": "381,382,383,384", + "breakout_modes": { + "1x400G": [ + "Eth120" + ], + "2x200G[100G]": [ + "Eth120/1", + "Eth120/2" + ] + } + }, + "Ethernet481": { + "index": "120,120,120,120", + "lanes": "505,506,507,508", + "breakout_modes": { + "1x400G": [ + "Eth121" + ], + "2x200G[100G]": [ + "Eth121/1", + "Eth121/2" + ] + } + }, + "Ethernet485": { + "index": "121,121,121,121", + "lanes": "509,510,511,512", + "breakout_modes": { + "1x400G": [ + "Eth122" + ], + "2x200G[100G]": [ + "Eth122/1", + "Eth122/2" + ] + } + }, + "Ethernet489": { + "index": "122,122,122,122", + "lanes": "497,498,499,500", + "breakout_modes": { + "1x400G": [ + "Eth123" + ], + "2x200G[100G]": [ + "Eth123/1", + "Eth123/2" + ] + } + }, + "Ethernet493": { + "index": "123,123,123,123", + "lanes": "501,502,503,504", + "breakout_modes": { + "1x400G": [ + "Eth124" + ], + "2x200G[100G]": [ + "Eth124/1", + "Eth124/2" + ] + } + }, + "Ethernet497": { + "index": "124,124,124,124", + "lanes": "9,10,11,12", + "breakout_modes": { + "1x400G": [ + "Eth125" + ], + "2x200G[100G]": [ + "Eth125/1", + "Eth125/2" + ] + } + }, + "Ethernet501": { + "index": "125,125,125,125", + "lanes": "13,14,15,16", + "breakout_modes": { + "1x400G": [ + "Eth126" + ], + "2x200G[100G]": [ + "Eth126/1", + "Eth126/2" + ] + } + }, + "Ethernet505": { + "index": "126,126,126,126", + "lanes": "1,2,3,4", + "breakout_modes": { + "1x400G": [ + "Eth127" + ], + "2x200G[100G]": [ + "Eth127/1", + "Eth127/2" + ] + } + }, + "Ethernet509": { + "index": "127,127,127,127", + "lanes": "5,6,7,8", + "breakout_modes": { + "1x400G": [ + "Eth128" + ], + "2x200G[100G]": [ + "Eth128/1", + "Eth128/2" + ] + } + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_asic b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_asic new file mode 100644 index 000000000000..960467652765 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_asic @@ -0,0 +1 @@ +broadcom diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_components.json b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_components.json new file mode 100644 index 000000000000..fa52c3a1bbb9 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_components.json @@ -0,0 +1,20 @@ +{ + "chassis": { + "M2-W6940-128QC": { + "component": { + "BASE_CPLD": { }, + "FAN_CPLD": { }, + "CPU_CPLD": { }, + "MISC_CPLD": { }, + "MAC_CPLDA": { }, + "MAC_CPLDB": { }, + "LC_CPLD": { }, + "MAC FPGA": { }, + "BIOS": { }, + "BMC": { }, + "ALTBMC": { } + } + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_env.conf b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_env.conf new file mode 100644 index 000000000000..fc119184d5c1 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/platform_env.conf @@ -0,0 +1,2 @@ +is_ltsw_chip=1 +SYNCD_SHM_SIZE=1g diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/sfputil.py b/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/sfputil.py new file mode 100644 index 000000000000..e3d6bb82e069 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/sfputil.py @@ -0,0 +1,363 @@ +# sfputil.py +# +# Platform-specific SFP transceiver interface for SONiC +# + +try: + import time + import re + import os + import threading + import traceback + import subprocess + from ctypes import create_string_buffer + from sonic_sfp.sfputilbase import SfpUtilBase + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom +except ImportError as e: + raise ImportError("%s - required module not found" % str(e)) + +class SfpUtil(SfpUtilBase): + """Platform-specific SfpUtil class""" + + PORT_START = 0 + PORT_END = 127 + PORTS_IN_BLOCK = 128 + + EEPROM_OFFSET = 25 + SFP_DEVICE_TYPE = "optoe2" + QSFP_DEVICE_TYPE = "optoe1" + QSFP_DD_DEVICE_TYPE = "optoe3" + I2C_MAX_ATTEMPT = 3 + + OPTOE_TYPE1 = 1 + OPTOE_TYPE2 = 2 + OPTOE_TYPE3 = 3 + + SFP_STATUS_INSERTED = '1' + SFP_STATUS_REMOVED = '0' + + _port_to_eeprom_mapping = {} + port_to_i2cbus_mapping ={} + port_dict = {} + + qsfp_ports_list = [] + qsfp_dd_ports_list = [] + + @property + def port_start(self): + return self.PORT_START + + @property + def port_end(self): + return self.PORT_END + + @property + def qsfp_ports(self): + return self.qsfp_ports_list + + @property + def qsfp_dd_ports(self): + return self.qsfp_dd_ports_list + + @property + def port_to_eeprom_mapping(self): + return self._port_to_eeprom_mapping + + def __init__(self): + self.qsfp_ports_list = [] + self.qsfp_dd_ports_list = [] + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + self.port_to_i2cbus_mapping[x] = (x + self.EEPROM_OFFSET) + if self.get_presence(x): + self.port_dict[x] = self.SFP_STATUS_INSERTED + else: + self.port_dict[x] = self.SFP_STATUS_REMOVED + + if (self.check_is_qsfpdd(x)): + self.qsfp_dd_ports_list.append(x) + self.check_optoe_type(x, self.OPTOE_TYPE3) + else: + self.qsfp_ports_list.append(x) + self.check_optoe_type(x, self.OPTOE_TYPE1) + SfpUtilBase.__init__(self) + + def _sfp_read_file_path(self, file_path, offset, num_bytes): + attempts = 0 + while attempts < self.I2C_MAX_ATTEMPT: + try: + file_path.seek(offset) + read_buf = file_path.read(num_bytes) + except: + attempts += 1 + time.sleep(0.05) + else: + return True, read_buf + return False, None + + def _sfp_eeprom_present(self, sysfs_sfp_i2c_client_eeprompath, offset): + """Tries to read the eeprom file to determine if the + device/sfp is present or not. If sfp present, the read returns + valid bytes. If not, read returns error 'Connection timed out""" + + if not os.path.exists(sysfs_sfp_i2c_client_eeprompath): + return False + else: + with open(sysfs_sfp_i2c_client_eeprompath, "rb", buffering=0) as sysfsfile: + rv, buf = self._sfp_read_file_path(sysfsfile, offset, 1) + return rv + + def _add_new_sfp_device(self, sysfs_sfp_i2c_adapter_path, devaddr, devtype): + try: + sysfs_nd_path = "%s/new_device" % sysfs_sfp_i2c_adapter_path + + # Write device address to new_device file + nd_file = open(sysfs_nd_path, "w") + nd_str = "%s %s" % (devtype, hex(devaddr)) + nd_file.write(nd_str) + nd_file.close() + + except Exception as err: + print("Error writing to new device file: %s" % str(err)) + return 1 + else: + return 0 + + def _get_port_eeprom_path(self, port_num, devid): + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + if port_num in self.port_to_eeprom_mapping.keys(): + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[port_num] + else: + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + i2c_adapter_id = self._get_port_i2c_adapter_id(port_num) + if i2c_adapter_id is None: + print("Error getting i2c bus num") + return None + + # Get i2c virtual bus path for the sfp + sysfs_sfp_i2c_adapter_path = "%s/i2c-%s" % (sysfs_i2c_adapter_base_path, + str(i2c_adapter_id)) + + # If i2c bus for port does not exist + if not os.path.exists(sysfs_sfp_i2c_adapter_path): + print("Could not find i2c bus %s. Driver not loaded?" % sysfs_sfp_i2c_adapter_path) + return None + + sysfs_sfp_i2c_client_path = "%s/%s-00%s" % (sysfs_sfp_i2c_adapter_path, + str(i2c_adapter_id), + hex(devid)[-2:]) + + # If sfp device is not present on bus, Add it + if not os.path.exists(sysfs_sfp_i2c_client_path): + if port_num in self.qsfp_dd_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DD_DEVICE_TYPE) + elif port_num in self.qsfp_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DEVICE_TYPE) + else: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.SFP_DEVICE_TYPE) + if ret != 0: + print("Error adding sfp device") + return None + + sysfs_sfp_i2c_client_eeprom_path = "%s/eeprom" % sysfs_sfp_i2c_client_path + + return sysfs_sfp_i2c_client_eeprom_path + + def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes): + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + rv, raw = self._sfp_read_file_path(sysfsfile_eeprom, offset, num_bytes) + if rv == False: + return None + + try: + for n in range(0, num_bytes): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + except: + return None + + return eeprom_raw + + def get_eeprom_dom_raw(self, port_num): + if port_num in self.qsfp_ports: + # QSFP DOM EEPROM is also at addr 0x50 and thus also stored in eeprom_ifraw + return None + else: + # Read dom eeprom at addr 0x51 + return self._read_eeprom_devid(port_num, self.IDENTITY_EEPROM_ADDR, 256) + + 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 + cmd = "cat /sys/wb_plat/sff/sff{}/present".format(str(port_num+1)) + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + return False + if output == "1": + return True + return False + + def check_is_qsfpdd(self, port_num): + try: + if self.get_presence(port_num) == False: + return False + + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, 0, 1) + # according to sff-8024 A0h Byte 0 is '1e' or '18' means the transceiver is qsfpdd + if (eeprom_raw[0] == '1e' or eeprom_raw[0] == '18'): + return True + except Exception as e: + print(traceback.format_exc()) + + return False + + def check_optoe_type(self, port_num, optoe_type): + if self.get_presence(port_num) == False: + return True + try: + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + dev_class_path = '/sys/bus/i2c/devices/i2c-{0}/{0}-0050/dev_class' + i2c_path = dev_class_path.format(str(self.port_to_i2cbus_mapping[port_num])) + cmd = "cat " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + if int(output) != optoe_type: + cmd = "echo " + str(optoe_type) + " > " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + return True + + except Exception as e: + print(traceback.format_exc()) + return False + + def get_low_power_mode(self, port_num): + # Check for invalid port_num + + return True + + def set_low_power_mode(self, port_num, lpmode): + # Check for invalid port_num + + return True + + def reset(self, port_num): + # Check for invalid port_num + if port_num < self.port_start or port_num > self.port_end: + return False + + return True + + def get_transceiver_change_event(self, timeout=0): + + start_time = time.time() + current_port_dict = {} + forever = False + + if timeout == 0: + forever = True + elif timeout > 0: + timeout = timeout / float(1000) # Convert to secs + else: + print ("get_transceiver_change_event:Invalid timeout value", timeout) + return False, {} + + end_time = start_time + timeout + if start_time > end_time: + print ('get_transceiver_change_event:' \ + 'time wrap / invalid timeout value', timeout) + + return False, {} # Time wrap or possibly incorrect timeout + + while timeout >= 0: + # Check for OIR events and return updated port_dict + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(x): + current_port_dict[x] = self.SFP_STATUS_INSERTED + else: + current_port_dict[x] = self.SFP_STATUS_REMOVED + if (current_port_dict == self.port_dict): + if forever: + time.sleep(1) + else: + timeout = end_time - time.time() + if timeout >= 1: + time.sleep(1) # We poll at 1 second granularity + else: + if timeout > 0: + time.sleep(timeout) + return True, {} + else: + # Update reg value + self.port_dict = current_port_dict + return True, self.port_dict + print ("get_transceiver_change_event: Should not reach here.") + return False, {} + + def get_highest_temperature(self): + offset = 0 + hightest_temperature = -9999 + + presence_flag = False + read_eeprom_flag = False + temperature_valid_flag = False + + for port in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(port) == False: + continue + + presence_flag = True + + if port in self.qsfp_dd_ports: + offset = 14 + elif port in self.qsfp_ports: + offset = 22 + else: + offset = 96 + + eeprom_path = self._get_port_eeprom_path(port, 0x50) + try: + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + read_eeprom_flag = True + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, offset, 2) + if len(eeprom_raw) != 0: + msb = int(eeprom_raw[0], 16) + lsb = int(eeprom_raw[1], 16) + + result = (msb << 8) | (lsb & 0xff) + result = float(result / 256.0) + if -50 <= result <= 200: + temperature_valid_flag = True + if hightest_temperature < result: + hightest_temperature = result + except Exception as e: + pass + + # all port not presence + if presence_flag == False: + hightest_temperature = -10000 + + # all port read eeprom fail + elif read_eeprom_flag == False: + hightest_temperature = -9999 + + # all port temperature invalid + elif read_eeprom_flag == True and temperature_valid_flag == False: + hightest_temperature = -10000 + + hightest_temperature = round(hightest_temperature, 2) + + return hightest_temperature diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/ssd_util.py b/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/ssd_util.py new file mode 100755 index 000000000000..e8cf2e1a7cbc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/plugins/ssd_util.py @@ -0,0 +1,318 @@ +# +# ssd_util.py +# +# Generic implementation of the SSD health API +# SSD models supported: +# - InnoDisk +# - StorFly +# - Virtium + +try: + import re + import os + import subprocess + from sonic_platform_base.sonic_storage.storage_base import StorageBase +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + +SMARTCTL = "smartctl {} -a" +INNODISK = "iSmart -d {}" +VIRTIUM = "SmartCmd -m {}" +DISK_LIST_CMD = "fdisk -l -o Device" +DISK_FREE_CMD = "df -h" +MOUNT_CMD = "mount" + +NOT_AVAILABLE = "N/A" +PE_CYCLE = 3000 +FAIL_PERCENT = 95 + +# Set Vendor Specific IDs +INNODISK_HEALTH_ID = 169 +INNODISK_TEMPERATURE_ID = 194 + +class SsdUtil(StorageBase): + """ + Generic implementation of the SSD health API + """ + model = NOT_AVAILABLE + serial = NOT_AVAILABLE + firmware = NOT_AVAILABLE + temperature = NOT_AVAILABLE + health = NOT_AVAILABLE + remaining_life = NOT_AVAILABLE + sata_rate = NOT_AVAILABLE + ssd_info = NOT_AVAILABLE + vendor_ssd_info = NOT_AVAILABLE + + def __init__(self, diskdev): + self.vendor_ssd_utility = { + "Generic" : { "utility" : SMARTCTL, "parser" : self.parse_generic_ssd_info }, + "InnoDisk" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "M.2" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "StorFly" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info }, + "Virtium" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info } + } + + """ + The dict model_attr keys relate the vendors + LITEON : "ER2-GD","AF2MA31DTDLT" + Intel : "SSDSCKKB" + SMI : "SM619GXC" + samsung: "MZNLH" + ADATA : "IM2S3134N" + """ + self.model_attr = { + "ER2-GD" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "AF2MA31DTDLT" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "SSDSCK" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n233\s+(.+?)\n" }, + "SM619GXC" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n169\s+(.+?)\n" }, + "MZNLH" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n245\s+(.+?)\n" }, + "IM2S3134N" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n231\s+(.+?)\n" }, + "MTFDDAV240TCB-1AR1ZABAA" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" } + } + + self.key_list = list(self.model_attr.keys()) + self.attr_info_rule = "[\s\S]*SMART Attributes Data Structure revision number: 1|SMART Error Log Version[\s\S]*" + self.dev = diskdev + # Generic part + self.fetch_generic_ssd_info(diskdev) + self.parse_generic_ssd_info() + self.fetch_vendor_ssd_info(diskdev, "Generic") + + # Known vendor part + if self.model: + model_short = self.model.split()[0] + if model_short in self.vendor_ssd_utility: + self.fetch_vendor_ssd_info(diskdev, model_short) + self.parse_vendor_ssd_info(model_short) + else: + # No handler registered for this disk model + pass + else: + # Failed to get disk model + self.model = "Unknown" + + def _execute_shell(self, cmd): + process = subprocess.Popen(cmd.split(), universal_newlines=True, stdout=subprocess.PIPE) + output, error = process.communicate() + exit_code = process.returncode + if exit_code: + return None + return output + + def _parse_re(self, pattern, buffer): + res_list = re.findall(pattern, str(buffer)) + return res_list[0] if res_list else NOT_AVAILABLE + + def fetch_generic_ssd_info(self, diskdev): + self.ssd_info = self._execute_shell(self.vendor_ssd_utility["Generic"]["utility"].format(diskdev)) + + # Health and temperature values may be overwritten with vendor specific data + def parse_generic_ssd_info(self): + if "nvme" in self.dev: + self.model = self._parse_re('Model Number:\s*(.+?)\n', self.ssd_info) + + health_raw = self._parse_re('Percentage Used\s*(.+?)\n', self.ssd_info) + if health_raw == NOT_AVAILABLE: + self.health = NOT_AVAILABLE + else: + health_raw = health_raw.split()[-1] + self.health = 100 - float(health_raw.strip('%')) + + temp_raw = self._parse_re('Temperature\s*(.+?)\n', self.ssd_info) + if temp_raw == NOT_AVAILABLE: + self.temperature = NOT_AVAILABLE + else: + temp_raw = temp_raw.split()[-2] + self.temperature = float(temp_raw) + else: + self.model = self._parse_re('Device Model:\s*(.+?)\n', self.ssd_info) + model_key = "" + for key in self.key_list: + if re.search(key, self.model): + model_key = key + break + if model_key != "": + self.remaining_life = self._parse_re(self.model_attr[model_key]["remainingLife"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[2] + self.temperature = self._parse_re(self.model_attr[model_key]["temperature"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[8] + self.health = self.remaining_life + # Get the LITEON ssd health value by (PE CYCLE - AVG ERASE CYCLE )/(PE CYCLE) + if model_key in ["ER2-GD", "AF2MA31DTDLT"]: + avg_erase = int(self._parse_re('\n173\s+(.+?)\n' ,re.sub(self.attr_info_rule,"",self.ssd_info)).split()[-1]) + self.health = int(round((PE_CYCLE - avg_erase)/PE_CYCLE*100,0)) + if self.remaining_life != NOT_AVAILABLE and int(self.remaining_life) < FAIL_PERCENT: + self.remaining_life = "Fail" + self.sata_rate = self._parse_re('SATA Version is:.*current: (.+?)\)\n', self.ssd_info) + self.serial = self._parse_re('Serial Number:\s*(.+?)\n', self.ssd_info) + self.firmware = self._parse_re('Firmware Version:\s*(.+?)\n', self.ssd_info) + + def parse_innodisk_info(self): + if self.vendor_ssd_info: + self.health = self._parse_re('Health:\s*(.+?)%', self.vendor_ssd_info) + self.temperature = self._parse_re('Temperature\s*\[\s*(.+?)\]', self.vendor_ssd_info) + else: + if self.health == NOT_AVAILABLE: + health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + self.health = health_raw.split()[-1] + if self.temperature == NOT_AVAILABLE: + temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + self.temperature = temp_raw.split()[-6] + + def parse_virtium_info(self): + if self.vendor_ssd_info: + self.temperature = self._parse_re('Temperature_Celsius\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + nand_endurance = self._parse_re('NAND_Endurance\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + avg_erase_count = self._parse_re('Average_Erase_Count\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + try: + self.health = 100 - (float(avg_erase_count) * 100 / float(nand_endurance)) + except (ValueError, ZeroDivisionError): + # Invalid avg_erase_count or nand_endurance. + pass + + def fetch_vendor_ssd_info(self, diskdev, model): + self.vendor_ssd_info = self._execute_shell(self.vendor_ssd_utility[model]["utility"].format(diskdev)) + + def parse_vendor_ssd_info(self, model): + self.vendor_ssd_utility[model]["parser"]() + + def check_readonly2(self, partition, filesystem): + # parse mount cmd output info + mount_info = self._execute_shell(MOUNT_CMD) + for line in mount_info.split('\n'): + column_list = line.split() + if line == '': + continue + if column_list[0] == partition and column_list[2] == filesystem: + if column_list[5].split(',')[0][1:] == "ro": + return partition + else: + return NOT_AVAILABLE + return NOT_AVAILABLE + + def check_readonly(self, partition, filesystem): + ret = os.access(filesystem, os.W_OK) + if ret == False: + return partition + else: + return NOT_AVAILABLE + + def get_health(self): + """ + Retrieves current disk health in percentages + + Returns: + A float number of current ssd health + e.g. 83.5 + """ + if self.health == 'N/A': + return "NA" + else: + return float(self.health) + + def get_temperature(self): + """ + Retrieves current disk temperature in Celsius + + Returns: + A float number of current temperature in Celsius + e.g. 40.1 + """ + if self.temperature == 'N/A': + return 'NA' + else: + return float(self.temperature) + + def get_model(self): + """ + Retrieves model for the given disk device + + Returns: + A string holding disk model as provided by the manufacturer + """ + return self.model + + def get_firmware(self): + """ + Retrieves firmware version for the given disk device + + Returns: + A string holding disk firmware version as provided by the manufacturer + """ + return self.firmware + + def get_serial(self): + """ + Retrieves serial number for the given disk device + + Returns: + A string holding disk serial number as provided by the manufacturer + """ + return self.serial + def get_sata_rate(self): + """ + Retrieves SATA rate for the given disk device + Returns: + A string holding current SATA rate as provided by the manufacturer + """ + return self.sata_rate + def get_remaining_life(self): + """ + Retrieves remaining life for the given disk device + Returns: + A string holding disk remaining life as provided by the manufacturer + """ + return self.remaining_life + def get_vendor_output(self): + """ + Retrieves vendor specific data for the given disk device + + Returns: + A string holding some vendor specific disk information + """ + return self.vendor_ssd_info + + def parse_id_number(self, id): + return self._parse_re('{}\s*(.+?)\n'.format(id), self.ssd_info) + + def get_readonly_partition(self): + """ + Check the partition mount filesystem is readonly status,then output the result. + Returns: + The readonly partition list + """ + + ro_partition_list = [] + partition_list = [] + + # parse fdisk cmd output info + disk_info = self._execute_shell(DISK_LIST_CMD) + begin_flag = False + for line in disk_info.split('\n'): + if line == "Device": + begin_flag = True + continue + if begin_flag: + if line != "": + partition_list.append(line) + else: + break + + # parse df cmd output info + disk_free = self._execute_shell(DISK_FREE_CMD) + disk_dict = {} + line_num = 0 + for line in disk_free.split('\n'): + line_num = line_num + 1 + if line_num == 1 or line == "": + continue + column_list = line.split() + disk_dict[column_list[0]] = column_list[5] + + # get partition which is readonly + for partition in partition_list: + if partition in disk_dict: + ret = self.check_readonly(partition, disk_dict[partition]) + if (ret != NOT_AVAILABLE): + ro_partition_list.append(ret) + + return ro_partition_list diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/pmon_daemon_control.json b/device/micas/x86_64-micas_m2-w6940-128qc-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..94592fa8cebc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/pmon_daemon_control.json @@ -0,0 +1,3 @@ +{ + "skip_ledd": true +} diff --git a/device/micas/x86_64-micas_m2-w6940-128qc-r0/postinit_cmd_file.soc b/device/micas/x86_64-micas_m2-w6940-128qc-r0/postinit_cmd_file.soc new file mode 100644 index 000000000000..01d06fc34fc7 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-128qc-r0/postinit_cmd_file.soc @@ -0,0 +1,4 @@ +led load /usr/share/sonic/platform/custom_led.bin +led auto on +led start +linkscan SwPortBitMap=xe,ce,cd diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/classes/__init__.py b/device/micas/x86_64-micas_m2-w6940-128qc-r0/system_health_monitoring_config.json similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/classes/__init__.py rename to device/micas/x86_64-micas_m2-w6940-128qc-r0/system_health_monitoring_config.json diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/hwsku.json b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/hwsku.json new file mode 100644 index 000000000000..56d71ff48119 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/hwsku.json @@ -0,0 +1,203 @@ +{ + "interfaces": { + "Ethernet1": { + "default_brkout_mode": "1x800G" + }, + "Ethernet9": { + "default_brkout_mode": "1x800G" + }, + "Ethernet17": { + "default_brkout_mode": "1x800G" + }, + "Ethernet25": { + "default_brkout_mode": "1x800G" + }, + "Ethernet33": { + "default_brkout_mode": "1x800G" + }, + "Ethernet41": { + "default_brkout_mode": "1x800G" + }, + "Ethernet49": { + "default_brkout_mode": "1x800G" + }, + "Ethernet57": { + "default_brkout_mode": "1x800G" + }, + "Ethernet65": { + "default_brkout_mode": "1x800G" + }, + "Ethernet73": { + "default_brkout_mode": "1x800G" + }, + "Ethernet81": { + "default_brkout_mode": "1x800G" + }, + "Ethernet89": { + "default_brkout_mode": "1x800G" + }, + "Ethernet97": { + "default_brkout_mode": "1x800G" + }, + "Ethernet105": { + "default_brkout_mode": "1x800G" + }, + "Ethernet113": { + "default_brkout_mode": "1x800G" + }, + "Ethernet121": { + "default_brkout_mode": "1x800G" + }, + "Ethernet129": { + "default_brkout_mode": "1x800G" + }, + "Ethernet137": { + "default_brkout_mode": "1x800G" + }, + "Ethernet145": { + "default_brkout_mode": "1x800G" + }, + "Ethernet153": { + "default_brkout_mode": "1x800G" + }, + "Ethernet161": { + "default_brkout_mode": "1x800G" + }, + "Ethernet169": { + "default_brkout_mode": "1x800G" + }, + "Ethernet177": { + "default_brkout_mode": "1x800G" + }, + "Ethernet185": { + "default_brkout_mode": "1x800G" + }, + "Ethernet193": { + "default_brkout_mode": "1x800G" + }, + "Ethernet201": { + "default_brkout_mode": "1x800G" + }, + "Ethernet209": { + "default_brkout_mode": "1x800G" + }, + "Ethernet217": { + "default_brkout_mode": "1x800G" + }, + "Ethernet225": { + "default_brkout_mode": "1x800G" + }, + "Ethernet233": { + "default_brkout_mode": "1x800G" + }, + "Ethernet241": { + "default_brkout_mode": "1x800G" + }, + "Ethernet249": { + "default_brkout_mode": "1x800G" + }, + "Ethernet257": { + "default_brkout_mode": "1x800G" + }, + "Ethernet265": { + "default_brkout_mode": "1x800G" + }, + "Ethernet273": { + "default_brkout_mode": "1x800G" + }, + "Ethernet281": { + "default_brkout_mode": "1x800G" + }, + "Ethernet289": { + "default_brkout_mode": "1x800G" + }, + "Ethernet297": { + "default_brkout_mode": "1x800G" + }, + "Ethernet305": { + "default_brkout_mode": "1x800G" + }, + "Ethernet313": { + "default_brkout_mode": "1x800G" + }, + "Ethernet321": { + "default_brkout_mode": "1x800G" + }, + "Ethernet329": { + "default_brkout_mode": "1x800G" + }, + "Ethernet337": { + "default_brkout_mode": "1x800G" + }, + "Ethernet345": { + "default_brkout_mode": "1x800G" + }, + "Ethernet353": { + "default_brkout_mode": "1x800G" + }, + "Ethernet361": { + "default_brkout_mode": "1x800G" + }, + "Ethernet369": { + "default_brkout_mode": "1x800G" + }, + "Ethernet377": { + "default_brkout_mode": "1x800G" + }, + "Ethernet385": { + "default_brkout_mode": "1x800G" + }, + "Ethernet393": { + "default_brkout_mode": "1x800G" + }, + "Ethernet401": { + "default_brkout_mode": "1x800G" + }, + "Ethernet409": { + "default_brkout_mode": "1x800G" + }, + "Ethernet417": { + "default_brkout_mode": "1x800G" + }, + "Ethernet425": { + "default_brkout_mode": "1x800G" + }, + "Ethernet433": { + "default_brkout_mode": "1x800G" + }, + "Ethernet441": { + "default_brkout_mode": "1x800G" + }, + "Ethernet449": { + "default_brkout_mode": "1x800G" + }, + "Ethernet457": { + "default_brkout_mode": "1x800G" + }, + "Ethernet465": { + "default_brkout_mode": "1x800G" + }, + "Ethernet473": { + "default_brkout_mode": "1x800G" + }, + "Ethernet481": { + "default_brkout_mode": "1x800G" + }, + "Ethernet489": { + "default_brkout_mode": "1x800G" + }, + "Ethernet497": { + "default_brkout_mode": "1x800G" + }, + "Ethernet505": { + "default_brkout_mode": "1x800G" + }, + "Ethernet513": { + "default_brkout_mode": "1x25G" + }, + "Ethernet515": { + "default_brkout_mode": "1x25G" + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/port_config.ini b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/port_config.ini new file mode 100644 index 000000000000..02e760ad87bb --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/port_config.ini @@ -0,0 +1,67 @@ +# name lanes alias index speed +Ethernet1 41,42,43,44,45,46,47,48 eightHundredGigE0/1 0 800000 +Ethernet9 33,34,35,36,37,38,39,40 eightHundredGigE0/2 1 800000 +Ethernet17 57,58,59,60,61,62,63,64 eightHundredGigE0/3 2 800000 +Ethernet25 49,50,51,52,53,54,55,56 eightHundredGigE0/4 3 800000 +Ethernet33 73,74,75,76,77,78,79,80 eightHundredGigE0/5 4 800000 +Ethernet41 65,66,67,68,69,70,71,72 eightHundredGigE0/6 5 800000 +Ethernet49 89,90,91,92,93,94,95,96 eightHundredGigE0/7 6 800000 +Ethernet57 81,82,83,84,85,86,87,88 eightHundredGigE0/8 7 800000 +Ethernet65 105,106,107,108,109,110,111,112 eightHundredGigE0/9 8 800000 +Ethernet73 97,98,99,100,101,102,103,104 eightHundredGigE0/10 9 800000 +Ethernet81 121,122,123,124,125,126,127,128 eightHundredGigE0/11 10 800000 +Ethernet89 113,114,115,116,117,118,119,120 eightHundredGigE0/12 11 800000 +Ethernet97 137,138,139,140,141,142,143,144 eightHundredGigE0/13 12 800000 +Ethernet105 129,130,131,132,133,134,135,136 eightHundredGigE0/14 13 800000 +Ethernet113 153,154,155,156,157,158,159,160 eightHundredGigE0/15 14 800000 +Ethernet121 145,146,147,148,149,150,151,152 eightHundredGigE0/16 15 800000 +Ethernet129 169,170,171,172,173,174,175,176 eightHundredGigE0/17 16 800000 +Ethernet137 161,162,163,164,165,166,167,168 eightHundredGigE0/18 17 800000 +Ethernet145 185,186,187,188,189,190,191,192 eightHundredGigE0/19 18 800000 +Ethernet153 177,178,179,180,181,182,183,184 eightHundredGigE0/20 19 800000 +Ethernet161 201,202,203,204,205,206,207,208 eightHundredGigE0/21 20 800000 +Ethernet169 193,194,195,196,197,198,199,200 eightHundredGigE0/22 21 800000 +Ethernet177 217,218,219,220,221,222,223,224 eightHundredGigE0/23 22 800000 +Ethernet185 209,210,211,212,213,214,215,216 eightHundredGigE0/24 23 800000 +Ethernet193 1,2,3,4,5,6,7,8 eightHundredGigE0/25 24 800000 +Ethernet201 9,10,11,12,13,14,15,16 eightHundredGigE0/26 25 800000 +Ethernet209 17,18,19,20,21,22,23,24 eightHundredGigE0/27 26 800000 +Ethernet217 25,26,27,28,29,30,31,32 eightHundredGigE0/28 27 800000 +Ethernet225 249,250,251,252,253,254,255,256 eightHundredGigE0/29 28 800000 +Ethernet233 241,242,243,244,245,246,247,248 eightHundredGigE0/30 29 800000 +Ethernet241 233,234,235,236,237,238,239,240 eightHundredGigE0/31 30 800000 +Ethernet249 225,226,227,228,229,230,231,232 eightHundredGigE0/32 31 800000 +Ethernet257 257,258,259,260,261,262,263,264 eightHundredGigE0/33 32 800000 +Ethernet265 265,266,267,268,269,270,271,272 eightHundredGigE0/34 33 800000 +Ethernet273 273,274,275,276,277,278,279,280 eightHundredGigE0/35 34 800000 +Ethernet281 281,282,283,284,285,286,287,288 eightHundredGigE0/36 35 800000 +Ethernet289 505,506,507,508,509,510,511,512 eightHundredGigE0/37 36 800000 +Ethernet297 497,498,499,500,501,502,503,504 eightHundredGigE0/38 37 800000 +Ethernet305 489,490,491,492,493,494,495,496 eightHundredGigE0/39 38 800000 +Ethernet313 481,482,483,484,485,486,487,488 eightHundredGigE0/40 39 800000 +Ethernet321 297,298,299,300,301,302,303,304 eightHundredGigE0/41 40 800000 +Ethernet329 289,290,291,292,293,294,295,296 eightHundredGigE0/42 41 800000 +Ethernet337 313,314,315,316,317,318,319,320 eightHundredGigE0/43 42 800000 +Ethernet345 305,306,307,308,309,310,311,312 eightHundredGigE0/44 43 800000 +Ethernet353 329,330,331,332,333,334,335,336 eightHundredGigE0/45 44 800000 +Ethernet361 321,322,323,324,325,326,327,328 eightHundredGigE0/46 45 800000 +Ethernet369 345,346,347,348,349,350,351,352 eightHundredGigE0/47 46 800000 +Ethernet377 337,338,339,340,341,342,343,344 eightHundredGigE0/48 47 800000 +Ethernet385 361,362,363,364,365,366,367,368 eightHundredGigE0/49 48 800000 +Ethernet393 353,354,355,356,357,358,359,360 eightHundredGigE0/50 49 800000 +Ethernet401 377,378,379,380,381,382,383,384 eightHundredGigE0/51 50 800000 +Ethernet409 369,370,371,372,373,374,375,376 eightHundredGigE0/52 51 800000 +Ethernet417 393,394,395,396,397,398,399,400 eightHundredGigE0/53 52 800000 +Ethernet425 385,386,387,388,389,390,391,392 eightHundredGigE0/54 53 800000 +Ethernet433 409,410,411,412,413,414,415,416 eightHundredGigE0/55 54 800000 +Ethernet441 401,402,403,404,405,406,407,408 eightHundredGigE0/56 55 800000 +Ethernet449 425,426,427,428,429,430,431,432 eightHundredGigE0/57 56 800000 +Ethernet457 417,418,419,420,421,422,423,424 eightHundredGigE0/58 57 800000 +Ethernet465 441,442,443,444,445,446,447,448 eightHundredGigE0/59 58 800000 +Ethernet473 433,434,435,436,437,438,439,440 eightHundredGigE0/60 59 800000 +Ethernet481 457,458,459,460,461,462,463,464 eightHundredGigE0/61 60 800000 +Ethernet489 449,450,451,452,453,454,455,456 eightHundredGigE0/62 61 800000 +Ethernet497 473,474,475,476,477,478,479,480 eightHundredGigE0/63 62 800000 +Ethernet505 465,466,467,468,469,470,471,472 eightHundredGigE0/64 63 800000 +Ethernet513 513 twentyfiveGigE0/65 64 25000 +Ethernet515 515 twentyfiveGigE0/66 65 25000 diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/sai.profile b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/sai.profile new file mode 100644 index 000000000000..ad2e534f2e58 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/th5-m2-w6940-64oc-64x800G.config.yml diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/th5-m2-w6940-64oc-64x800G.config.yml b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/th5-m2-w6940-64oc-64x800G.config.yml new file mode 100644 index 000000000000..33f2781d7b97 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/M2-W6940-64OC/th5-m2-w6940-64oc-64x800G.config.yml @@ -0,0 +1,14985 @@ +--- +device: + 0: + DEVICE_CONFIG: + AUTOLOAD_BOARD_SETTINGS: 0 +... +--- +device: + 0: + DEVICE_CONFIG: + AUTOLOAD_BOARD_SETTINGS: 0 +... +--- +device: + 0: + PC_PM_CORE: + ? + PC_PM_ID: 1 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x02714356 + RX_LANE_MAP: 0x27506431 + TX_POLARITY_FLIP: 0x59 + RX_POLARITY_FLIP: 0x76 + ? + PC_PM_ID: 2 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x27360514 + RX_LANE_MAP: 0x46731520 + TX_POLARITY_FLIP: 0x8d + RX_POLARITY_FLIP: 0xd5 + ? + PC_PM_ID: 3 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x50234716 + RX_LANE_MAP: 0x31642750 + TX_POLARITY_FLIP: 0x5a + RX_POLARITY_FLIP: 0x0b + ? + PC_PM_ID: 4 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17250436 + RX_LANE_MAP: 0x30764215 + TX_POLARITY_FLIP: 0xf5 + RX_POLARITY_FLIP: 0xbc + ? + PC_PM_ID: 5 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x60427153 + RX_LANE_MAP: 0x15370426 + TX_POLARITY_FLIP: 0x16 + RX_POLARITY_FLIP: 0xb0 + ? + PC_PM_ID: 6 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73524016 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0xb0 + RX_POLARITY_FLIP: 0xa0 + ? + PC_PM_ID: 7 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0xd2 + RX_POLARITY_FLIP: 0x0b + ? + PC_PM_ID: 8 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0x52 + RX_POLARITY_FLIP: 0x0a + ? + PC_PM_ID: 9 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x63250471 + RX_LANE_MAP: 0x63427150 + TX_POLARITY_FLIP: 0x3a + RX_POLARITY_FLIP: 0x51 + ? + PC_PM_ID: 10 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73524016 + RX_LANE_MAP: 0x63427150 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x50 + ? + PC_PM_ID: 11 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0xd2 + RX_POLARITY_FLIP: 0x0b + ? + PC_PM_ID: 12 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0x52 + RX_POLARITY_FLIP: 0x0a + ? + PC_PM_ID: 13 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x63250471 + RX_LANE_MAP: 0x63427150 + TX_POLARITY_FLIP: 0x3a + RX_POLARITY_FLIP: 0x51 + ? + PC_PM_ID: 14 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73524016 + RX_LANE_MAP: 0x63427150 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0x50 + ? + PC_PM_ID: 15 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0xd2 + RX_POLARITY_FLIP: 0x0b + ? + PC_PM_ID: 16 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16042537 + RX_LANE_MAP: 0x05172436 + TX_POLARITY_FLIP: 0x52 + RX_POLARITY_FLIP: 0x0a + ? + PC_PM_ID: 17 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17526034 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0xc1 + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 18 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250641 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0x43 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 19 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14605273 + RX_LANE_MAP: 0x70516243 + TX_POLARITY_FLIP: 0x3d + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 20 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41605273 + RX_LANE_MAP: 0x70516243 + TX_POLARITY_FLIP: 0xbd + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 21 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17250634 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0xc1 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 22 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250641 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0x43 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 23 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14605273 + RX_LANE_MAP: 0x70516243 + TX_POLARITY_FLIP: 0x3f + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 24 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41605273 + RX_LANE_MAP: 0x70516243 + TX_POLARITY_FLIP: 0xb4 + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 25 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17526034 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0xc1 + RX_POLARITY_FLIP: 0xb7 + ? + PC_PM_ID: 26 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250641 + RX_LANE_MAP: 0x34261507 + TX_POLARITY_FLIP: 0x43 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 27 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14305267 + RX_LANE_MAP: 0x70516243 + TX_POLARITY_FLIP: 0x0e + RX_POLARITY_FLIP: 0xa9 + ? + PC_PM_ID: 28 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x72634150 + RX_LANE_MAP: 0x27340516 + TX_POLARITY_FLIP: 0x11 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 29 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x31647025 + RX_LANE_MAP: 0x64531072 + TX_POLARITY_FLIP: 0xab + RX_POLARITY_FLIP: 0xaf + ? + PC_PM_ID: 30 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x15602743 + RX_LANE_MAP: 0x52137604 + TX_POLARITY_FLIP: 0x46 + RX_POLARITY_FLIP: 0xe7 + ? + PC_PM_ID: 31 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73564012 + RX_LANE_MAP: 0x34107625 + TX_POLARITY_FLIP: 0x9f + RX_POLARITY_FLIP: 0x69 + ? + PC_PM_ID: 32 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76243501 + RX_LANE_MAP: 0x35162470 + TX_POLARITY_FLIP: 0xa6 + RX_POLARITY_FLIP: 0xc8 + ? + PC_PM_ID: 33 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x07546321 + RX_LANE_MAP: 0x25176430 + TX_POLARITY_FLIP: 0x65 + RX_POLARITY_FLIP: 0x9e + ? + PC_PM_ID: 34 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37164250 + RX_LANE_MAP: 0x75032614 + TX_POLARITY_FLIP: 0x32 + RX_POLARITY_FLIP: 0x3e + ? + PC_PM_ID: 35 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73402516 + RX_LANE_MAP: 0x60347215 + TX_POLARITY_FLIP: 0x7a + RX_POLARITY_FLIP: 0xd9 + ? + PC_PM_ID: 36 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x71345062 + RX_LANE_MAP: 0x42173056 + TX_POLARITY_FLIP: 0xa1 + RX_POLARITY_FLIP: 0x60 + ? + PC_PM_ID: 37 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x70416352 + RX_LANE_MAP: 0x16053427 + TX_POLARITY_FLIP: 0x18 + RX_POLARITY_FLIP: 0xa8 + ? + PC_PM_ID: 38 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73526014 + RX_LANE_MAP: 0x43625170 + TX_POLARITY_FLIP: 0x78 + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 39 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0xc3 + RX_POLARITY_FLIP: 0x98 + ? + PC_PM_ID: 40 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0x41 + RX_POLARITY_FLIP: 0x89 + ? + PC_PM_ID: 41 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x43526071 + RX_LANE_MAP: 0x43625170 + TX_POLARITY_FLIP: 0x7c + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 42 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73526014 + RX_LANE_MAP: 0x43625170 + TX_POLARITY_FLIP: 0x7c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 43 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0xc1 + RX_POLARITY_FLIP: 0x56 + ? + PC_PM_ID: 44 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0x41 + RX_POLARITY_FLIP: 0x01 + ? + PC_PM_ID: 45 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x43526071 + RX_LANE_MAP: 0x43625170 + TX_POLARITY_FLIP: 0xfe + RX_POLARITY_FLIP: 0x94 + ? + PC_PM_ID: 46 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x73526014 + RX_LANE_MAP: 0x43625170 + TX_POLARITY_FLIP: 0x7c + RX_POLARITY_FLIP: 0x95 + ? + PC_PM_ID: 47 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x41062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0xc1 + RX_POLARITY_FLIP: 0x56 + ? + PC_PM_ID: 48 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x14062537 + RX_LANE_MAP: 0x07152634 + TX_POLARITY_FLIP: 0x41 + RX_POLARITY_FLIP: 0x01 + ? + PC_PM_ID: 49 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x67524031 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x8b + RX_POLARITY_FLIP: 0x5e + ? + PC_PM_ID: 50 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250461 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x87 + RX_POLARITY_FLIP: 0x5f + ? + PC_PM_ID: 51 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16405273 + RX_LANE_MAP: 0x50714263 + TX_POLARITY_FLIP: 0x1e + RX_POLARITY_FLIP: 0xcb + ? + PC_PM_ID: 52 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61405273 + RX_LANE_MAP: 0x50714263 + TX_POLARITY_FLIP: 0x9e + RX_POLARITY_FLIP: 0xda + ? + PC_PM_ID: 53 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17524036 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x8b + RX_POLARITY_FLIP: 0x5e + ? + PC_PM_ID: 54 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250461 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x87 + RX_POLARITY_FLIP: 0x5f + ? + PC_PM_ID: 55 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x16405273 + RX_LANE_MAP: 0x50714263 + TX_POLARITY_FLIP: 0x1e + RX_POLARITY_FLIP: 0xcb + ? + PC_PM_ID: 56 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61405273 + RX_LANE_MAP: 0x50714263 + TX_POLARITY_FLIP: 0x9e + RX_POLARITY_FLIP: 0xda + ? + PC_PM_ID: 57 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x17250436 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x4d + RX_POLARITY_FLIP: 0x5f + ? + PC_PM_ID: 58 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37250461 + RX_LANE_MAP: 0x36241705 + TX_POLARITY_FLIP: 0x87 + RX_POLARITY_FLIP: 0x5f + ? + PC_PM_ID: 59 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x61405273 + RX_LANE_MAP: 0x50314267 + TX_POLARITY_FLIP: 0x0e + RX_POLARITY_FLIP: 0xc7 + ? + PC_PM_ID: 60 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x37146250 + RX_LANE_MAP: 0x35062714 + TX_POLARITY_FLIP: 0xfe + RX_POLARITY_FLIP: 0xd3 + ? + PC_PM_ID: 61 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x27165304 + RX_LANE_MAP: 0x75340126 + TX_POLARITY_FLIP: 0x62 + RX_POLARITY_FLIP: 0x45 + ? + PC_PM_ID: 62 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x10527634 + RX_LANE_MAP: 0x53702614 + TX_POLARITY_FLIP: 0xa0 + RX_POLARITY_FLIP: 0x89 + ? + PC_PM_ID: 63 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x04561237 + RX_LANE_MAP: 0x05643217 + TX_POLARITY_FLIP: 0x31 + RX_POLARITY_FLIP: 0xf0 + ? + PC_PM_ID: 64 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x76540123 + RX_LANE_MAP: 0x13056472 + TX_POLARITY_FLIP: 0xe8 + RX_POLARITY_FLIP: 0x5d + ? + PC_PM_ID: 65 + CORE_INDEX: 0 + : + TX_LANE_MAP_AUTO: 0 + RX_LANE_MAP_AUTO: 0 + TX_POLARITY_FLIP_AUTO: 0 + RX_POLARITY_FLIP_AUTO: 0 + TX_LANE_MAP: 0x3012 + TX_POLARITY_FLIP: 0 + RX_LANE_MAP: 0x3012 + RX_POLARITY_FLIP: 0 +... + +--- +device: + 0: + PC_PORT_PHYS_MAP: + ? + # CPU port + PORT_ID: 0 + : + PC_PHYS_PORT_ID: 0 + ? + PORT_ID: 1 + : + PC_PHYS_PORT_ID: 1 + ? + PORT_ID: 5 + : + PC_PHYS_PORT_ID: 9 + ? + PORT_ID: 11 + : + PC_PHYS_PORT_ID: 17 + ? + PORT_ID: 15 + : + PC_PHYS_PORT_ID: 25 + ? + PORT_ID: 22 + : + PC_PHYS_PORT_ID: 33 + ? + PORT_ID: 26 + : + PC_PHYS_PORT_ID: 41 + ? + PORT_ID: 33 + : + PC_PHYS_PORT_ID: 49 + ? + PORT_ID: 37 + : + PC_PHYS_PORT_ID: 57 + ? + PORT_ID: 44 + : + PC_PHYS_PORT_ID: 65 + ? + PORT_ID: 48 + : + PC_PHYS_PORT_ID: 73 + ? + PORT_ID: 55 + : + PC_PHYS_PORT_ID: 81 + ? + PORT_ID: 59 + : + PC_PHYS_PORT_ID: 89 + ? + PORT_ID: 66 + : + PC_PHYS_PORT_ID: 97 + ? + PORT_ID: 70 + : + PC_PHYS_PORT_ID: 105 + ? + PORT_ID: 77 + : + PC_PHYS_PORT_ID: 113 + ? + PORT_ID: 81 + : + PC_PHYS_PORT_ID: 121 + ? + PORT_ID: 88 + : + PC_PHYS_PORT_ID: 129 + ? + PORT_ID: 92 + : + PC_PHYS_PORT_ID: 137 + ? + PORT_ID: 99 + : + PC_PHYS_PORT_ID: 145 + ? + PORT_ID: 103 + : + PC_PHYS_PORT_ID: 153 + ? + PORT_ID: 110 + : + PC_PHYS_PORT_ID: 161 + ? + PORT_ID: 114 + : + PC_PHYS_PORT_ID: 169 + ? + PORT_ID: 121 + : + PC_PHYS_PORT_ID: 177 + ? + PORT_ID: 125 + : + PC_PHYS_PORT_ID: 185 + ? + PORT_ID: 132 + : + PC_PHYS_PORT_ID: 193 + ? + PORT_ID: 136 + : + PC_PHYS_PORT_ID: 201 + ? + PORT_ID: 143 + : + PC_PHYS_PORT_ID: 209 + ? + PORT_ID: 147 + : + PC_PHYS_PORT_ID: 217 + ? + PORT_ID: 154 + : + PC_PHYS_PORT_ID: 225 + ? + PORT_ID: 158 + : + PC_PHYS_PORT_ID: 233 + ? + PORT_ID: 165 + : + PC_PHYS_PORT_ID: 241 + ? + PORT_ID: 169 + : + PC_PHYS_PORT_ID: 249 + ? + PORT_ID: 176 + : + PC_PHYS_PORT_ID: 257 + ? + PORT_ID: 180 + : + PC_PHYS_PORT_ID: 265 + ? + PORT_ID: 187 + : + PC_PHYS_PORT_ID: 273 + ? + PORT_ID: 191 + : + PC_PHYS_PORT_ID: 281 + ? + PORT_ID: 198 + : + PC_PHYS_PORT_ID: 289 + ? + PORT_ID: 202 + : + PC_PHYS_PORT_ID: 297 + ? + PORT_ID: 209 + : + PC_PHYS_PORT_ID: 305 + ? + PORT_ID: 213 + : + PC_PHYS_PORT_ID: 313 + ? + PORT_ID: 220 + : + PC_PHYS_PORT_ID: 321 + ? + PORT_ID: 224 + : + PC_PHYS_PORT_ID: 329 + ? + PORT_ID: 231 + : + PC_PHYS_PORT_ID: 337 + ? + PORT_ID: 235 + : + PC_PHYS_PORT_ID: 345 + ? + PORT_ID: 242 + : + PC_PHYS_PORT_ID: 353 + ? + PORT_ID: 246 + : + PC_PHYS_PORT_ID: 361 + ? + PORT_ID: 253 + : + PC_PHYS_PORT_ID: 369 + ? + PORT_ID: 257 + : + PC_PHYS_PORT_ID: 377 + ? + PORT_ID: 264 + : + PC_PHYS_PORT_ID: 385 + ? + PORT_ID: 268 + : + PC_PHYS_PORT_ID: 393 + ? + PORT_ID: 275 + : + PC_PHYS_PORT_ID: 401 + ? + PORT_ID: 279 + : + PC_PHYS_PORT_ID: 409 + ? + PORT_ID: 286 + : + PC_PHYS_PORT_ID: 417 + ? + PORT_ID: 290 + : + PC_PHYS_PORT_ID: 425 + ? + PORT_ID: 297 + : + PC_PHYS_PORT_ID: 433 + ? + PORT_ID: 301 + : + PC_PHYS_PORT_ID: 441 + ? + PORT_ID: 308 + : + PC_PHYS_PORT_ID: 449 + ? + PORT_ID: 312 + : + PC_PHYS_PORT_ID: 457 + ? + PORT_ID: 319 + : + PC_PHYS_PORT_ID: 465 + ? + PORT_ID: 323 + : + PC_PHYS_PORT_ID: 473 + ? + PORT_ID: 330 + : + PC_PHYS_PORT_ID: 481 + ? + PORT_ID: 334 + : + PC_PHYS_PORT_ID: 489 + ? + PORT_ID: 341 + : + PC_PHYS_PORT_ID: 497 + ? + PORT_ID: 345 + : + PC_PHYS_PORT_ID: 505 + ? + PORT_ID: 76 + : + PC_PHYS_PORT_ID: 513 + ? + PORT_ID: 274 + : + PC_PHYS_PORT_ID: 515 +... + +--- +device: + 0: + PC_PORT: + ? + PORT_ID: 0 + : + ENABLE: 1 + SPEED: 10000 + NUM_LANES: 1 + ? + PORT_ID: [1, 5, 11, 15, 22, 26, 33, 37, 44, 48, 55, 59, 66, 70, 77, 81, 88, 92, 99, 103, 110, 114, 121, 125, 132, 136, 143, 147, 154, 158, 165, 169, 176, 180, 187, 191, 198, 202, 209, 213, 220, 224, 231, 235, 242, 246, 253, 257, 264, 268, 275, 279, 286, 290, 297, 301, 308, 312, 319, 323, 330, 334, 341, 345] + : + ENABLE: 0 + SPEED: 800000 + NUM_LANES: 8 + FEC_MODE: PC_FEC_RS544_2XN + LINK_TRAINING: 0 + MAX_FRAME_SIZE: 9416 + ? + PORT_ID: [76, 274] + : + ENABLE: 0 + SPEED: 25000 + NUM_LANES: 1 + MAX_FRAME_SIZE: 9416 +... + +--- +device: + 0: + PC_PMD_FIRMWARE: + ? + PORT_ID: [1, 5, 11, 15, 22, 26, 33, 37, 44, 48, 55, 59, 66, 70, 77, 81, 88, 92, 99, 103, 110, 114, 121, 125, 132, 136, 143, 147, 154, 158, 165, 169, 176, 180, 187, 191, 198, 202, 209, 213, 220, 224, 231, 235, 242, 246, 253, 257, 264, 268, 275, 279, 286, 290, 297, 301, 308, 312, 319, 323, 330, 334, 341, 345] + : + MEDIUM_TYPE_AUTO: 0 + MEDIUM_TYPE: PC_PHY_MEDIUM_BACKPLANE +... + +--- +device: + 0: + TM_SCHEDULER_CONFIG: + NUM_MC_Q: NUM_MC_Q_4 +... + +--- +device: + 0: + FP_CONFIG: + FP_ING_OPERMODE: GLOBAL_PIPE_AWARE +... + +--- +bcm_device: + 0: + global: + bcm_tunnel_term_compatible_mode: 1 + vlan_flooding_l2mc_num_reserved: 2048 + l3_alpm_template: 2 + l3_alpm2_bnk_threshold: 100 + uft_mode: 1 + l3_enable: 1 + l2_hitbit_enable: 0 + pktio_mode: 1 + sai_pfc_defaults_disable: 1 + sai_optimized_mmu: 1 + sai_postinit_cmd_file: /usr/share/sonic/platform/postinit_cmd_file.soc +... + +--- +bcm_device: + 0: + port: + "*": + encap_mode: IEEE + dport_map_enable: 1 + 26: + dport_map_port: 1 + 27: + dport_map_port: 2 + 28: + dport_map_port: 3 + 29: + dport_map_port: 4 + 22: + dport_map_port: 5 + 23: + dport_map_port: 6 + 24: + dport_map_port: 7 + 25: + dport_map_port: 8 + 37: + dport_map_port: 9 + 38: + dport_map_port: 10 + 39: + dport_map_port: 11 + 40: + dport_map_port: 12 + 33: + dport_map_port: 13 + 34: + dport_map_port: 14 + 35: + dport_map_port: 15 + 36: + dport_map_port: 16 + 48: + dport_map_port: 17 + 49: + dport_map_port: 18 + 50: + dport_map_port: 19 + 51: + dport_map_port: 20 + 44: + dport_map_port: 21 + 45: + dport_map_port: 22 + 46: + dport_map_port: 23 + 47: + dport_map_port: 24 + 59: + dport_map_port: 25 + 60: + dport_map_port: 26 + 61: + dport_map_port: 27 + 62: + dport_map_port: 28 + 55: + dport_map_port: 29 + 56: + dport_map_port: 30 + 57: + dport_map_port: 31 + 58: + dport_map_port: 32 + 70: + dport_map_port: 33 + 71: + dport_map_port: 34 + 72: + dport_map_port: 35 + 73: + dport_map_port: 36 + 66: + dport_map_port: 37 + 67: + dport_map_port: 38 + 68: + dport_map_port: 39 + 69: + dport_map_port: 40 + 81: + dport_map_port: 41 + 82: + dport_map_port: 42 + 83: + dport_map_port: 43 + 84: + dport_map_port: 44 + 77: + dport_map_port: 45 + 78: + dport_map_port: 46 + 79: + dport_map_port: 47 + 80: + dport_map_port: 48 + 92: + dport_map_port: 49 + 93: + dport_map_port: 50 + 94: + dport_map_port: 51 + 95: + dport_map_port: 52 + 88: + dport_map_port: 53 + 89: + dport_map_port: 54 + 90: + dport_map_port: 55 + 91: + dport_map_port: 56 + 103: + dport_map_port: 57 + 104: + dport_map_port: 58 + 105: + dport_map_port: 59 + 106: + dport_map_port: 60 + 99: + dport_map_port: 61 + 100: + dport_map_port: 62 + 101: + dport_map_port: 63 + 102: + dport_map_port: 64 + 114: + dport_map_port: 65 + 115: + dport_map_port: 66 + 116: + dport_map_port: 67 + 117: + dport_map_port: 68 + 110: + dport_map_port: 69 + 111: + dport_map_port: 70 + 112: + dport_map_port: 71 + 113: + dport_map_port: 72 + 125: + dport_map_port: 73 + 126: + dport_map_port: 74 + 127: + dport_map_port: 75 + 128: + dport_map_port: 76 + 121: + dport_map_port: 77 + 122: + dport_map_port: 78 + 123: + dport_map_port: 79 + 124: + dport_map_port: 80 + 136: + dport_map_port: 81 + 137: + dport_map_port: 82 + 138: + dport_map_port: 83 + 139: + dport_map_port: 84 + 132: + dport_map_port: 85 + 133: + dport_map_port: 86 + 134: + dport_map_port: 87 + 135: + dport_map_port: 88 + 147: + dport_map_port: 89 + 148: + dport_map_port: 90 + 149: + dport_map_port: 91 + 150: + dport_map_port: 92 + 143: + dport_map_port: 93 + 144: + dport_map_port: 94 + 145: + dport_map_port: 95 + 146: + dport_map_port: 96 + 1: + dport_map_port: 97 + 2: + dport_map_port: 98 + 3: + dport_map_port: 99 + 4: + dport_map_port: 100 + 5: + dport_map_port: 101 + 6: + dport_map_port: 102 + 7: + dport_map_port: 103 + 8: + dport_map_port: 104 + 11: + dport_map_port: 105 + 12: + dport_map_port: 106 + 13: + dport_map_port: 107 + 14: + dport_map_port: 108 + 15: + dport_map_port: 109 + 16: + dport_map_port: 110 + 17: + dport_map_port: 111 + 18: + dport_map_port: 112 + 169: + dport_map_port: 113 + 170: + dport_map_port: 114 + 171: + dport_map_port: 115 + 172: + dport_map_port: 116 + 165: + dport_map_port: 117 + 166: + dport_map_port: 118 + 167: + dport_map_port: 119 + 168: + dport_map_port: 120 + 158: + dport_map_port: 121 + 159: + dport_map_port: 122 + 160: + dport_map_port: 123 + 161: + dport_map_port: 124 + 154: + dport_map_port: 125 + 155: + dport_map_port: 126 + 156: + dport_map_port: 127 + 157: + dport_map_port: 128 + 176: + dport_map_port: 129 + 177: + dport_map_port: 130 + 178: + dport_map_port: 131 + 179: + dport_map_port: 132 + 180: + dport_map_port: 133 + 181: + dport_map_port: 134 + 182: + dport_map_port: 135 + 183: + dport_map_port: 136 + 187: + dport_map_port: 137 + 188: + dport_map_port: 138 + 189: + dport_map_port: 139 + 190: + dport_map_port: 140 + 191: + dport_map_port: 141 + 192: + dport_map_port: 142 + 193: + dport_map_port: 143 + 194: + dport_map_port: 144 + 345: + dport_map_port: 145 + 346: + dport_map_port: 146 + 347: + dport_map_port: 147 + 348: + dport_map_port: 148 + 341: + dport_map_port: 149 + 342: + dport_map_port: 150 + 343: + dport_map_port: 151 + 344: + dport_map_port: 152 + 334: + dport_map_port: 153 + 335: + dport_map_port: 154 + 336: + dport_map_port: 155 + 337: + dport_map_port: 156 + 330: + dport_map_port: 157 + 331: + dport_map_port: 158 + 332: + dport_map_port: 159 + 333: + dport_map_port: 160 + 202: + dport_map_port: 161 + 203: + dport_map_port: 162 + 204: + dport_map_port: 163 + 205: + dport_map_port: 164 + 198: + dport_map_port: 165 + 199: + dport_map_port: 166 + 200: + dport_map_port: 167 + 201: + dport_map_port: 168 + 213: + dport_map_port: 169 + 214: + dport_map_port: 170 + 215: + dport_map_port: 171 + 216: + dport_map_port: 172 + 209: + dport_map_port: 173 + 210: + dport_map_port: 174 + 211: + dport_map_port: 175 + 212: + dport_map_port: 176 + 224: + dport_map_port: 177 + 225: + dport_map_port: 178 + 226: + dport_map_port: 179 + 227: + dport_map_port: 180 + 220: + dport_map_port: 181 + 221: + dport_map_port: 182 + 222: + dport_map_port: 183 + 223: + dport_map_port: 184 + 235: + dport_map_port: 185 + 236: + dport_map_port: 186 + 237: + dport_map_port: 187 + 238: + dport_map_port: 188 + 231: + dport_map_port: 189 + 232: + dport_map_port: 190 + 233: + dport_map_port: 191 + 234: + dport_map_port: 192 + 246: + dport_map_port: 193 + 247: + dport_map_port: 194 + 248: + dport_map_port: 195 + 249: + dport_map_port: 196 + 242: + dport_map_port: 197 + 243: + dport_map_port: 198 + 244: + dport_map_port: 199 + 245: + dport_map_port: 200 + 257: + dport_map_port: 201 + 258: + dport_map_port: 202 + 259: + dport_map_port: 203 + 260: + dport_map_port: 204 + 253: + dport_map_port: 205 + 254: + dport_map_port: 206 + 255: + dport_map_port: 207 + 256: + dport_map_port: 208 + 268: + dport_map_port: 209 + 269: + dport_map_port: 210 + 270: + dport_map_port: 211 + 271: + dport_map_port: 212 + 264: + dport_map_port: 213 + 265: + dport_map_port: 214 + 266: + dport_map_port: 215 + 267: + dport_map_port: 216 + 279: + dport_map_port: 217 + 280: + dport_map_port: 218 + 281: + dport_map_port: 219 + 282: + dport_map_port: 220 + 275: + dport_map_port: 221 + 276: + dport_map_port: 222 + 277: + dport_map_port: 223 + 278: + dport_map_port: 224 + 290: + dport_map_port: 225 + 291: + dport_map_port: 226 + 292: + dport_map_port: 227 + 293: + dport_map_port: 228 + 286: + dport_map_port: 229 + 287: + dport_map_port: 230 + 288: + dport_map_port: 231 + 289: + dport_map_port: 232 + 301: + dport_map_port: 233 + 302: + dport_map_port: 234 + 303: + dport_map_port: 235 + 304: + dport_map_port: 236 + 297: + dport_map_port: 237 + 298: + dport_map_port: 238 + 299: + dport_map_port: 239 + 300: + dport_map_port: 240 + 312: + dport_map_port: 241 + 313: + dport_map_port: 242 + 314: + dport_map_port: 243 + 315: + dport_map_port: 244 + 308: + dport_map_port: 245 + 309: + dport_map_port: 246 + 310: + dport_map_port: 247 + 311: + dport_map_port: 248 + 323: + dport_map_port: 249 + 324: + dport_map_port: 250 + 325: + dport_map_port: 251 + 326: + dport_map_port: 252 + 319: + dport_map_port: 253 + 320: + dport_map_port: 254 + 321: + dport_map_port: 255 + 322: + dport_map_port: 256 + 76: + dport_map_port: 257 + 274: + dport_map_port: 258 +... + +--- +device: + 0: + PC_TX_TAPS: + ? + PORT_ID: 26 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 26 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 22 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 37 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 33 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 48 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 44 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 59 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 55 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 70 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 66 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 81 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 77 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 92 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 88 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 103 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 99 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 114 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 110 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 125 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 121 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 136 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 132 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 147 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 143 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 1 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 5 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 11 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 15 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 169 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 16 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 140 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 2 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 165 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 16 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 140 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 2 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 158 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 154 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 176 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 180 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 187 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 191 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 345 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 24 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 140 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 341 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 334 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 330 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 202 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 198 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 213 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 209 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 224 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 220 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 235 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 231 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 246 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 242 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 257 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 253 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 268 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 264 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 279 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 275 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 290 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 286 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 301 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 297 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 32 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 132 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 312 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 308 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 323 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 0 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 1 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 2 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 3 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 4 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 5 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 6 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 + ? + PORT_ID: 319 + LANE_INDEX: 7 + : + TX_SIG_MODE_AUTO: 0 + TX_SIG_MODE: PC_SIG_MODE_PAM4 + TXFIR_TAP_MODE_AUTO: 0 + TXFIR_TAP_MODE: PC_TXFIR_PAM4_TAPS_6 + TX_PRE_SIGN: 1 + TX_PRE_AUTO: 0 + TX_PRE: 28 + TX_MAIN_SIGN: 0 + TX_MAIN_AUTO: 0 + TX_MAIN: 136 + TX_POST_SIGN: 0 + TX_POST_AUTO: 0 + TX_POST: 0 + TX_PRE2_SIGN: 0 + TX_PRE2_AUTO: 0 + TX_PRE2: 4 + TX_POST2_SIGN: 0 + TX_POST2_AUTO: 0 + TX_POST2: 0 + TX_PRE3_SIGN: 0 + TX_PRE3_AUTO: 0 + TX_PRE3: 0 +... diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/custom_led.bin b/device/micas/x86_64-micas_m2-w6940-64oc-r0/custom_led.bin new file mode 100644 index 000000000000..04807432077f Binary files /dev/null and b/device/micas/x86_64-micas_m2-w6940-64oc-r0/custom_led.bin differ diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/default_sku b/device/micas/x86_64-micas_m2-w6940-64oc-r0/default_sku new file mode 100644 index 000000000000..76806884effd --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/default_sku @@ -0,0 +1 @@ +M2-W6940-64OC l2 \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/dev.xml b/device/micas/x86_64-micas_m2-w6940-64oc-r0/dev.xml new file mode 100644 index 000000000000..99d4cec634e4 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/dev.xml @@ -0,0 +1,1153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/fru.py b/device/micas/x86_64-micas_m2-w6940-64oc-r0/fru.py new file mode 100644 index 000000000000..f95164e03601 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/fru.py @@ -0,0 +1,961 @@ +#!/usr/bin/python3 +import collections +from datetime import datetime, timedelta +from bitarray import bitarray + + +__DEBUG__ = "N" + + +class FruException(Exception): + def __init__(self, message='fruerror', code=-100): + err = 'errcode: {0} message:{1}'.format(code, message) + Exception.__init__(self, err) + self.code = code + self.message = message + + +def e_print(err): + print("ERROR: " + err) + + +def d_print(debug_info): + if __DEBUG__ == "Y": + print(debug_info) + + +class FruUtil(): + @staticmethod + def decodeLength(value): + a = bitarray(8) + a.setall(True) + a[0:1] = 0 + a[1:2] = 0 + x = ord(a.tobytes()) + return x & ord(value) + + @staticmethod + def minToData(): + starttime = datetime(1996, 1, 1, 0, 0, 0) + endtime = datetime.now() + seconds = (endtime - starttime).total_seconds() + mins = seconds // 60 + m = int(round(mins)) + return m + + @staticmethod + def getTimeFormat(): + return datetime.now().strftime('%Y-%m-%d') + + @staticmethod + def getTypeLength(value): + if value is None or len(value) == 0: + return 0 + a = bitarray(8) + a.setall(False) + a[0:1] = 1 + a[1:2] = 1 + x = ord(a.tobytes()) + return x | len(value) + + @staticmethod + def checksum(b): + result = 0 + for item in b: + result += ord(item) + return (0x100 - (result & 0xff)) & 0xff + + +class BaseArea(object): + SUGGESTED_SIZE_COMMON_HEADER = 8 + SUGGESTED_SIZE_INTERNAL_USE_AREA = 72 + SUGGESTED_SIZE_CHASSIS_INFO_AREA = 32 + SUGGESTED_SIZE_BOARD_INFO_AREA = 80 + SUGGESTED_SIZE_PRODUCT_INFO_AREA = 80 + + INITVALUE = b'\x00' + resultvalue = INITVALUE * 256 + COMMON_HEAD_VERSION = b'\x01' + __childList = None + + def __init__(self, name="", size=0, offset=0): + self.__childList = [] + self._offset = offset + self.name = name + self._size = size + self._isPresent = False + self._data = b'\x00' * size + + @property + def childList(self): + return self.__childList + + @childList.setter + def childList(self, value): + self.__childList = value + + @property + def offset(self): + return self._offset + + @offset.setter + def offset(self, value): + self._offset = value + + @property + def size(self): + return self._size + + @size.setter + def size(self, value): + self._size = value + + @property + def data(self): + return self._data + + @data.setter + def data(self, value): + self._data = value + + @property + def isPresent(self): + return self._isPresent + + @isPresent.setter + def isPresent(self, value): + self._isPresent = value + + +class InternalUseArea(BaseArea): + pass + + +class ChassisInfoArea(BaseArea): + pass + + +class BoardInfoArea(BaseArea): + _boardTime = None + _fields = None + _mfg_date = None + areaversion = None + _boardversion = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "mfg_date : %s \n" \ + "boardManufacturer : %s \n" \ + "boardProductName : %s \n" \ + "boardSerialNumber : %s \n" \ + "boardPartNumber : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.boardversion), self.size, + self.language, self.getMfgRealData(), + self.boardManufacturer, self.boardProductName, + self.boardSerialNumber, self.boardPartNumber, + self.fruFileId) + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "boardextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["boardversion"] = ord(self.boardversion) + dic["boardlength"] = self.size + dic["boardlanguage"] = self.language + dic["boardmfg_date"] = self.getMfgRealData() + dic["boardManufacturer"] = self.boardManufacturer + dic["boardProductName"] = self.boardProductName + dic["boardSerialNumber"] = self.boardSerialNumber + dic["boardPartNumber"] = self.boardPartNumber + dic["boardfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] + index += 1 + d_print("decode length :%d class size:%d" % + ((ord(self.data[index]) * 8), self.size)) + index += 2 + + timetmp = self.data[index: index + 3] + self.mfg_date = ord(timetmp[0]) | ( + ord(timetmp[1]) << 8) | (ord(timetmp[2]) << 16) + d_print("decode getMfgRealData :%s" % self.getMfgRealData()) + index += 3 + + templen = FruUtil.decodeLength(self.data[index]) + self.boardManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardManufacturer:%s" % self.boardManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardProductName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardProductName:%s" % self.boardProductName) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardSerialNumber:%s" % self.boardSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.boardPartNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode boardPartNumber:%s" % self.boardPartNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if self.data[index] != chr(0xc1): + templen = FruUtil.decodeLength(self.data[index]) + tmpval = self.data[index + 1: index + templen + 1] + setattr(self, valtmp, tmpval) + index += templen + 1 + d_print("decode boardextra%d:%s" % (i, tmpval)) + else: + break + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("boardInfoArea version:%x" % ord(self.boardversion)) + d_print("boardInfoArea length:%d" % self.size) + d_print("boardInfoArea language:%x" % self.language) + self.mfg_date = FruUtil.minToData() + d_print("boardInfoArea mfg_date:%x" % self.mfg_date) + + self.data = chr(ord(self.boardversion)) + \ + chr(self.size // 8) + chr(self.language) + + self.data += chr(self.mfg_date & 0xFF) + self.data += chr((self.mfg_date >> 8) & 0xFF) + self.data += chr((self.mfg_date >> 16) & 0xFF) + + d_print("boardInfoArea boardManufacturer:%s" % self.boardManufacturer) + typelength = FruUtil.getTypeLength(self.boardManufacturer) + self.data += chr(typelength) + self.data += self.boardManufacturer + + d_print("boardInfoArea boardProductName:%s" % self.boardProductName) + self.data += chr(FruUtil.getTypeLength(self.boardProductName)) + self.data += self.boardProductName + + d_print("boardInfoArea boardSerialNumber:%s" % self.boardSerialNumber) + self.data += chr(FruUtil.getTypeLength(self.boardSerialNumber)) + self.data += self.boardSerialNumber + + d_print("boardInfoArea boardPartNumber:%s" % self.boardPartNumber) + self.data += chr(FruUtil.getTypeLength(self.boardPartNumber)) + self.data += self.boardPartNumber + + d_print("boardInfoArea fruFileId:%s" % self.fruFileId) + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "boardextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea boardextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + d_print("self data:%d" % len(self.data)) + d_print("self size:%d" % self.size) + d_print("adjust size:%d" % (self.size - len(self.data) - 1)) + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + + # checksum + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + def getMfgRealData(self): + starttime = datetime(1996, 1, 1, 0, 0, 0) + mactime = starttime + timedelta(minutes=self.mfg_date) + return mactime + + @property + def language(self): + self._language = 25 + return self._language + + @property + def mfg_date(self): + return self._mfg_date + + @mfg_date.setter + def mfg_date(self, val): + self._mfg_date = val + + @property + def boardversion(self): + self._boardversion = self.COMMON_HEAD_VERSION + return self._boardversion + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, val): + self._FRUFileID = val + + @property + def boardPartNumber(self): + return self._boardPartNumber + + @boardPartNumber.setter + def boardPartNumber(self, val): + self._boardPartNumber = val + + @property + def boardSerialNumber(self): + return self._boardSerialNumber + + @boardSerialNumber.setter + def boardSerialNumber(self, val): + self._boardSerialNumber = val + + @property + def boardProductName(self): + return self._boradProductName + + @boardProductName.setter + def boardProductName(self, val): + self._boradProductName = val + + @property + def boardManufacturer(self): + return self._boardManufacturer + + @boardManufacturer.setter + def boardManufacturer(self, val): + self._boardManufacturer = val + + @property + def boardTime(self): + return self._boardTime + + @boardTime.setter + def boardTime(self, val): + self._boardTime = val + + @property + def fields(self): + return self._fields + + @fields.setter + def fields(self, val): + self._fields = val + + +class ProductInfoArea(BaseArea): + _productManufacturer = None + _productAssetTag = None + _FRUFileID = None + _language = None + + def __str__(self): + formatstr = "version : %x\n" \ + "length : %d \n" \ + "language : %x \n" \ + "productManufacturer : %s \n" \ + "productName : %s \n" \ + "productPartModelName: %s \n" \ + "productVersion : %s \n" \ + "productSerialNumber : %s \n" \ + "productAssetTag : %s \n" \ + "fruFileId : %s \n" + + tmpstr = formatstr % (ord(self.areaversion), self.size, + self.language, self.productManufacturer, + self.productName, self.productPartModelName, + self.productVersion, self.productSerialNumber, + self.productAssetTag, self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + tmpstr += "productextra%d : %s \n" % (i, valtmpval) + else: + break + + return tmpstr + + def todict(self): + dic = collections.OrderedDict() + dic["productversion"] = ord(self.areaversion) + dic["productlength"] = self.size + dic["productlanguage"] = self.language + dic["productManufacturer"] = self.productManufacturer + dic["productName"] = self.productName + dic["productPartModelName"] = self.productPartModelName + dic["productVersion"] = int(self.productVersion, 16) + dic["productSerialNumber"] = self.productSerialNumber + dic["productAssetTag"] = self.productAssetTag + dic["productfruFileId"] = self.fruFileId + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + dic[valtmp] = valtmpval + else: + break + return dic + + def decodedata(self): + index = 0 + self.areaversion = self.data[index] # 0 + index += 1 + d_print("decode length %d" % (ord(self.data[index]) * 8)) + d_print("class size %d" % self.size) + index += 2 + + templen = FruUtil.decodeLength(self.data[index]) + self.productManufacturer = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productManufacturer:%s" % self.productManufacturer) + + templen = FruUtil.decodeLength(self.data[index]) + self.productName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productName:%s" % self.productName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productPartModelName = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productPartModelName:%s" % self.productPartModelName) + + templen = FruUtil.decodeLength(self.data[index]) + self.productVersion = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productVersion:%s" % self.productVersion) + + templen = FruUtil.decodeLength(self.data[index]) + self.productSerialNumber = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productSerialNumber:%s" % self.productSerialNumber) + + templen = FruUtil.decodeLength(self.data[index]) + self.productAssetTag = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode productAssetTag:%s" % self.productAssetTag) + + templen = FruUtil.decodeLength(self.data[index]) + self.fruFileId = self.data[index + 1: index + templen + 1] + index += templen + 1 + d_print("decode fruFileId:%s" % self.fruFileId) + + for i in range(1, 11): + valtmp = "productextra%d" % i + if self.data[index] != chr(0xc1) and index < self.size - 1: + templen = FruUtil.decodeLength(self.data[index]) + if templen == 0: + break + tmpval = self.data[index + 1: index + templen + 1] + d_print("decode boardextra%d:%s" % (i, tmpval)) + setattr(self, valtmp, tmpval) + index += templen + 1 + else: + break + + @property + def productVersion(self): + return self._productVersion + + @productVersion.setter + def productVersion(self, name): + self._productVersion = name + + @property + def areaversion(self): + self._areaversion = self.COMMON_HEAD_VERSION + return self._areaversion + + @areaversion.setter + def areaversion(self, name): + self._areaversion = name + + @property + def language(self): + self._language = 25 + return self._language + + @property + def productManufacturer(self): + return self._productManufacturer + + @productManufacturer.setter + def productManufacturer(self, name): + self._productManufacturer = name + + @property + def productName(self): + return self._productName + + @productName.setter + def productName(self, name): + self._productName = name + + @property + def productPartModelName(self): + return self._productPartModelName + + @productPartModelName.setter + def productPartModelName(self, name): + self._productPartModelName = name + + @property + def productSerialNumber(self): + return self._productSerialNumber + + @productSerialNumber.setter + def productSerialNumber(self, name): + self._productSerialNumber = name + + @property + def productAssetTag(self): + return self._productAssetTag + + @productAssetTag.setter + def productAssetTag(self, name): + self._productAssetTag = name + + @property + def fruFileId(self): + return self._FRUFileID + + @fruFileId.setter + def fruFileId(self, name): + self._FRUFileID = name + + def fruSetValue(self, field, value): + tmp_field = getattr(self, field, None) + if tmp_field is not None: + setattr(self, field, value) + + def recalcute(self): + d_print("product version:%x" % ord(self.areaversion)) + d_print("product length:%d" % self.size) + d_print("product language:%x" % self.language) + self.data = chr(ord(self.areaversion)) + \ + chr(self.size // 8) + chr(self.language) + + typelength = FruUtil.getTypeLength(self.productManufacturer) + self.data += chr(typelength) + self.data += self.productManufacturer + + self.data += chr(FruUtil.getTypeLength(self.productName)) + self.data += self.productName + + self.data += chr(FruUtil.getTypeLength(self.productPartModelName)) + self.data += self.productPartModelName + + self.data += chr(FruUtil.getTypeLength(self.productVersion)) + self.data += self.productVersion + + self.data += chr(FruUtil.getTypeLength(self.productSerialNumber)) + self.data += self.productSerialNumber + + self.data += chr(FruUtil.getTypeLength(self.productAssetTag)) + if self.productAssetTag is not None: + self.data += self.productAssetTag + + self.data += chr(FruUtil.getTypeLength(self.fruFileId)) + self.data += self.fruFileId + + for i in range(1, 11): + valtmp = "productextra%d" % i + if hasattr(self, valtmp): + valtmpval = getattr(self, valtmp) + d_print("boardInfoArea productextra%d:%s" % (i, valtmpval)) + self.data += chr(FruUtil.getTypeLength(valtmpval)) + if valtmpval is not None: + self.data += valtmpval + else: + break + + self.data += chr(0xc1) + if len(self.data) > (self.size - 1): + incr = (len(self.data) - self.size) // 8 + 1 + self.size += incr * 8 + d_print("self.data:%d" % len(self.data)) + d_print("self.size:%d" % self.size) + + self.data = self.data[0:1] + chr(self.size // 8) + self.data[2:] + self.data = self.data.ljust((self.size - 1), chr(self.INITVALUE[0])) + checksum = FruUtil.checksum(self.data) + d_print("board info checksum:%x" % checksum) + self.data += chr(checksum) + + +class MultiRecordArea(BaseArea): + pass + + +class Field(object): + + def __init__(self, fieldType="ASCII", fieldData=""): + self.fieldData = fieldData + self.fieldType = fieldType + + @property + def fieldType(self): + return self.fieldType + + @property + def fieldData(self): + return self.fieldData + + +class ipmifru(BaseArea): + _BoardInfoArea = None + _ProductInfoArea = None + _InternalUseArea = None + _ChassisInfoArea = None + _multiRecordArea = None + _productinfoAreaOffset = BaseArea.INITVALUE + _boardInfoAreaOffset = BaseArea.INITVALUE + _internalUserAreaOffset = BaseArea.INITVALUE + _chassicInfoAreaOffset = BaseArea.INITVALUE + _multiRecordAreaOffset = BaseArea.INITVALUE + _bindata = None + _bodybin = None + _version = BaseArea.COMMON_HEAD_VERSION + _zeroCheckSum = None + _frusize = 256 + + def __str__(self): + tmpstr = "" + if self.boardInfoArea.isPresent: + tmpstr += "\nboardinfoarea: \n" + tmpstr += self.boardInfoArea.__str__() + if self.productInfoArea.isPresent: + tmpstr += "\nproductinfoarea: \n" + tmpstr += self.productInfoArea.__str__() + return tmpstr + + def decodeBin(self, eeprom): + commonHead = eeprom[0:8] + d_print("decode version %x" % ord(commonHead[0])) + if ord(self.COMMON_HEAD_VERSION) != ord(commonHead[0]): + raise FruException("HEAD VERSION error,not Fru format!", -10) + if FruUtil.checksum(commonHead[0:7]) != ord(commonHead[7]): + strtemp = "check header checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(commonHead[0:7]), ord(commonHead[7])) + raise FruException(strtemp, -3) + if ord(commonHead[1]) != ord(self.INITVALUE): + d_print("Internal Use Area is present") + self.internalUseArea = InternalUseArea( + name="Internal Use Area", size=self.SUGGESTED_SIZE_INTERNAL_USE_AREA) + self.internalUseArea.isPresent = True + self.internalUserAreaOffset = ord(commonHead[1]) + self.internalUseArea.data = eeprom[self.internalUserAreaOffset * 8: ( + self.internalUserAreaOffset * 8 + self.internalUseArea.size)] + if ord(commonHead[2]) != ord(self.INITVALUE): + d_print("Chassis Info Area is present") + self.chassisInfoArea = ChassisInfoArea( + name="Chassis Info Area", size=self.SUGGESTED_SIZE_CHASSIS_INFO_AREA) + self.chassisInfoArea.isPresent = True + self.chassicInfoAreaOffset = ord(commonHead[2]) + self.chassisInfoArea.data = eeprom[self.chassicInfoAreaOffset * 8: ( + self.chassicInfoAreaOffset * 8 + self.chassisInfoArea.size)] + if ord(commonHead[3]) != ord(self.INITVALUE): + self.boardInfoArea = BoardInfoArea( + name="Board Info Area", size=self.SUGGESTED_SIZE_BOARD_INFO_AREA) + self.boardInfoArea.isPresent = True + self.boardInfoAreaOffset = ord(commonHead[3]) + self.boardInfoArea.size = ord( + eeprom[self.boardInfoAreaOffset * 8 + 1]) * 8 + d_print("Board Info Area is present size:%d" % + (self.boardInfoArea.size)) + self.boardInfoArea.data = eeprom[self.boardInfoAreaOffset * 8: ( + self.boardInfoAreaOffset * 8 + self.boardInfoArea.size)] + if FruUtil.checksum(self.boardInfoArea.data[:-1]) != ord(self.boardInfoArea.data[-1:]): + strtmp = "check boardInfoArea checksum error[cal:%02x data:%02x]" % \ + (FruUtil.checksum( + self.boardInfoArea.data[:-1]), ord(self.boardInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.boardInfoArea.decodedata() + if ord(commonHead[4]) != ord(self.INITVALUE): + d_print("Product Info Area is present") + self.productInfoArea = ProductInfoArea( + name="Product Info Area ", size=self.SUGGESTED_SIZE_PRODUCT_INFO_AREA) + self.productInfoArea.isPresent = True + self.productinfoAreaOffset = ord(commonHead[4]) + d_print("length offset value: %02x" % + ord(eeprom[self.productinfoAreaOffset * 8 + 1])) + self.productInfoArea.size = ord( + eeprom[self.productinfoAreaOffset * 8 + 1]) * 8 + d_print("Product Info Area is present size:%d" % + (self.productInfoArea.size)) + + self.productInfoArea.data = eeprom[self.productinfoAreaOffset * 8: ( + self.productinfoAreaOffset * 8 + self.productInfoArea.size)] + if FruUtil.checksum(self.productInfoArea.data[:-1]) != ord(self.productInfoArea.data[-1:]): + strtmp = "check productInfoArea checksum error [cal:%02x data:%02x]" % ( + FruUtil.checksum(self.productInfoArea.data[:-1]), ord(self.productInfoArea.data[-1:])) + raise FruException(strtmp, -3) + self.productInfoArea.decodedata() + if ord(commonHead[5]) != ord(self.INITVALUE): + self.multiRecordArea = MultiRecordArea( + name="MultiRecord record Area ") + d_print("MultiRecord record present") + self.multiRecordArea.isPresent = True + self.multiRecordAreaOffset = ord(commonHead[5]) + self.multiRecordArea.data = eeprom[self.multiRecordAreaOffset * 8: ( + self.multiRecordAreaOffset * 8 + self.multiRecordArea.size)] + + def initDefault(self): + self.version = self.COMMON_HEAD_VERSION + self.internalUserAreaOffset = self.INITVALUE + self.chassicInfoAreaOffset = self.INITVALUE + self.boardInfoAreaOffset = self.INITVALUE + self.productinfoAreaOffset = self.INITVALUE + self.multiRecordAreaOffset = self.INITVALUE + self.zeroCheckSum = self.INITVALUE + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + self.productInfoArea = None + self.internalUseArea = None + self.boardInfoArea = None + self.chassisInfoArea = None + self.multiRecordArea = None + # self.recalcute() + + @property + def version(self): + return self._version + + @version.setter + def version(self, name): + self._version = name + + @property + def internalUserAreaOffset(self): + return self._internalUserAreaOffset + + @internalUserAreaOffset.setter + def internalUserAreaOffset(self, obj): + self._internalUserAreaOffset = obj + + @property + def chassicInfoAreaOffset(self): + return self._chassicInfoAreaOffset + + @chassicInfoAreaOffset.setter + def chassicInfoAreaOffset(self, obj): + self._chassicInfoAreaOffset = obj + + @property + def productinfoAreaOffset(self): + return self._productinfoAreaOffset + + @productinfoAreaOffset.setter + def productinfoAreaOffset(self, obj): + self._productinfoAreaOffset = obj + + @property + def boardInfoAreaOffset(self): + return self._boardInfoAreaOffset + + @boardInfoAreaOffset.setter + def boardInfoAreaOffset(self, obj): + self._boardInfoAreaOffset = obj + + @property + def multiRecordAreaOffset(self): + return self._multiRecordAreaOffset + + @multiRecordAreaOffset.setter + def multiRecordAreaOffset(self, obj): + self._multiRecordAreaOffset = obj + + @property + def zeroCheckSum(self): + return self._zeroCheckSum + + @zeroCheckSum.setter + def zeroCheckSum(self, obj): + self._zeroCheckSum = obj + + @property + def productInfoArea(self): + return self._ProductInfoArea + + @productInfoArea.setter + def productInfoArea(self, obj): + self._ProductInfoArea = obj + + @property + def internalUseArea(self): + return self._InternalUseArea + + @internalUseArea.setter + def internalUseArea(self, obj): + self.internalUseArea = obj + + @property + def boardInfoArea(self): + return self._BoardInfoArea + + @boardInfoArea.setter + def boardInfoArea(self, obj): + self._BoardInfoArea = obj + + @property + def chassisInfoArea(self): + return self._ChassisInfoArea + + @chassisInfoArea.setter + def chassisInfoArea(self, obj): + self._ChassisInfoArea = obj + + @property + def multiRecordArea(self): + return self._multiRecordArea + + @multiRecordArea.setter + def multiRecordArea(self, obj): + self._multiRecordArea = obj + + @property + def bindata(self): + return self._bindata + + @bindata.setter + def bindata(self, obj): + self._bindata = obj + + @property + def bodybin(self): + return self._bodybin + + @bodybin.setter + def bodybin(self, obj): + self._bodybin = obj + + def recalcuteCommonHead(self): + self.bindata = "" + self.offset = self.SUGGESTED_SIZE_COMMON_HEADER + d_print("common Header %d" % self.offset) + d_print("fru eeprom size %d" % self._frusize) + if self.internalUseArea is not None and self.internalUseArea.isPresent: + self.internalUserAreaOffset = self.offset // 8 + self.offset += self.internalUseArea.size + d_print("internalUseArea is present offset:%d" % self.offset) + + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + self.chassicInfoAreaOffset = self.offset // 8 + self.offset += self.chassisInfoArea.size + d_print("chassisInfoArea is present offset:%d" % self.offset) + + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + self.boardInfoAreaOffset = self.offset // 8 + self.offset += self.boardInfoArea.size + d_print("boardInfoArea is present offset:%d" % self.offset) + d_print("boardInfoArea is present size:%d" % + self.boardInfoArea.size) + + if self.productInfoArea is not None and self.productInfoArea.isPresent: + self.productinfoAreaOffset = self.offset // 8 + self.offset += self.productInfoArea.size + d_print("productInfoArea is present offset:%d" % self.offset) + + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + self.multiRecordAreaOffset = self.offset // 8 + d_print("multiRecordArea is present offset:%d" % self.offset) + + if self.internalUserAreaOffset == self.INITVALUE: + self.internalUserAreaOffset = 0 + if self.productinfoAreaOffset == self.INITVALUE: + self.productinfoAreaOffset = 0 + if self.chassicInfoAreaOffset == self.INITVALUE: + self.chassicInfoAreaOffset = 0 + if self.boardInfoAreaOffset == self.INITVALUE: + self.boardInfoAreaOffset = 0 + if self.multiRecordAreaOffset == self.INITVALUE: + self.multiRecordAreaOffset = 0 + + self.zeroCheckSum = (0x100 - ord(self.version) - self.internalUserAreaOffset - self.chassicInfoAreaOffset - self.productinfoAreaOffset + - self.boardInfoAreaOffset - self.multiRecordAreaOffset) & 0xff + d_print("zerochecksum:%x" % self.zeroCheckSum) + self.data = "" + self.data += chr(self.version[0]) + chr(self.internalUserAreaOffset) + chr(self.chassicInfoAreaOffset) + chr( + self.boardInfoAreaOffset) + chr(self.productinfoAreaOffset) + chr(self.multiRecordAreaOffset) + chr(self.INITVALUE[0]) + chr(self.zeroCheckSum) + + self.bindata = self.data + self.bodybin + totallen = len(self.bindata) + d_print("totallen %d" % totallen) + if totallen < self._frusize: + self.bindata = self.bindata.ljust(self._frusize, chr(self.INITVALUE[0])) + else: + raise FruException('bin data more than %d' % self._frusize, -2) + + def recalcutebin(self): + self.bodybin = "" + if self.internalUseArea is not None and self.internalUseArea.isPresent: + d_print("internalUseArea present") + self.bodybin += self.internalUseArea.data + if self.chassisInfoArea is not None and self.chassisInfoArea.isPresent: + d_print("chassisInfoArea present") + self.bodybin += self.chassisInfoArea.data + if self.boardInfoArea is not None and self.boardInfoArea.isPresent: + d_print("boardInfoArea present") + self.boardInfoArea.recalcute() + self.bodybin += self.boardInfoArea.data + if self.productInfoArea is not None and self.productInfoArea.isPresent: + d_print("productInfoAreapresent") + self.productInfoArea.recalcute() + self.bodybin += self.productInfoArea.data + if self.multiRecordArea is not None and self.multiRecordArea.isPresent: + d_print("multiRecordArea present") + self.bodybin += self.productInfoArea.data + + def recalcute(self, fru_eeprom_size=256): + self._frusize = fru_eeprom_size + self.recalcutebin() + self.recalcuteCommonHead() + + def setValue(self, area, field, value): + tmp_area = getattr(self, area, None) + if tmp_area is not None: + tmp_area.fruSetValue(field, value) diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/installer.conf b/device/micas/x86_64-micas_m2-w6940-64oc-r0/installer.conf new file mode 100644 index 000000000000..deb97654ad43 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/installer.conf @@ -0,0 +1,4 @@ +CONSOLE_SPEED=115200 +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="intel_idle.max_cstate=0 idle=poll intel_iommu=on iommu=pt modprobe.blacklist=ice,mei_me,i2c_i801,i2c_ismt,iTCO_wdt" +CONSOLE_PORT=0x5060 +CONSOLE_DEV=0 \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/led_proc_init.soc b/device/micas/x86_64-micas_m2-w6940-64oc-r0/led_proc_init.soc new file mode 100644 index 000000000000..5124ab75ab92 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/led_proc_init.soc @@ -0,0 +1,2 @@ +led load /usr/share/sonic/platform/custom_led.bin + diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/media_settings.json b/device/micas/x86_64-micas_m2-w6940-64oc-r0/media_settings.json new file mode 100644 index 000000000000..d609404c2e73 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/media_settings.json @@ -0,0 +1,4100 @@ +{ + "PORT_MEDIA_SETTINGS": { + "0": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe0", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000084", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "1": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "2": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "3": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "4": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "5": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "6": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "7": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "8": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "9": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "10": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "11": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "12": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "13": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "14": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "15": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "16": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "17": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "18": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "19": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "20": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe0", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000084", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "21": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe0", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000084", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "22": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "23": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "24": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "25": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe0", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000084", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "26": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "27": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe0", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000084", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "28": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "29": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000002" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xfffffff0" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x0000008C" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "30": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "31": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "32": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "33": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "34": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "35": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "36": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "37": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe0", + "lane4": "0xffffffe8", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000084", + "lane4": "0x0000008C", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "38": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe0", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000084", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "39": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "40": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "41": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "42": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "43": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "44": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "45": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "46": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "47": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "48": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "49": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "50": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "51": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "52": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "53": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "54": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "55": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "56": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "57": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "58": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe0", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000084", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "59": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "60": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe0", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000084", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "61": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "62": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + }, + "63": { + "Default": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000004", + "lane1": "0x00000004", + "lane2": "0x00000004", + "lane3": "0x00000004", + "lane4": "0x00000004", + "lane5": "0x00000004", + "lane6": "0x00000004", + "lane7": "0x00000004" + }, + "pre1": { + "lane0": "0xffffffe4", + "lane1": "0xffffffe4", + "lane2": "0xffffffe4", + "lane3": "0xffffffe4", + "lane4": "0xffffffe4", + "lane5": "0xffffffe4", + "lane6": "0xffffffe4", + "lane7": "0xffffffe4" + }, + "main": { + "lane0": "0x00000088", + "lane1": "0x00000088", + "lane2": "0x00000088", + "lane3": "0x00000088", + "lane4": "0x00000088", + "lane5": "0x00000088", + "lane6": "0x00000088", + "lane7": "0x00000088" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "post2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + } + } + } + } +} diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/monitor.py b/device/micas/x86_64-micas_m2-w6940-64oc-r0/monitor.py new file mode 100644 index 000000000000..5fc287892e50 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/monitor.py @@ -0,0 +1,402 @@ +#!/usr/bin/python3 +# * onboard temperature sensors +# * FAN trays +# * PSU +# +import os +from lxml import etree as ET +import glob +import json +from decimal import Decimal +from fru import ipmifru + + +MAILBOX_DIR = "/sys/bus/i2c/devices/" +BOARD_ID_PATH = "/sys/module/platform_common/parameters/dfd_my_type" +BOARD_AIRFLOW_PATH = "/etc/sonic/.airflow" + + +CONFIG_NAME = "dev.xml" + + +def byteTostr(val): + strtmp = '' + for value in val: + strtmp += chr(value) + return strtmp + + +def typeTostr(val): + if isinstance(val, bytes): + strtmp = byteTostr(val) + return strtmp + return val + + +def get_board_id(): + if not os.path.exists(BOARD_ID_PATH): + return "NA" + with open(BOARD_ID_PATH) as fd: + id_str = fd.read().strip() + return "0x%x" % (int(id_str, 10)) + + +def getboardairflow(): + if not os.path.exists(BOARD_AIRFLOW_PATH): + return "NA" + with open(BOARD_AIRFLOW_PATH) as fd: + airflow_str = fd.read().strip() + data = json.loads(airflow_str) + airflow = data.get("board", "NA") + return airflow + + +boardid = get_board_id() +boardairflow = getboardairflow() + + +DEV_XML_FILE_LIST = [ + "dev_" + boardid + "_" + boardairflow + ".xml", + "dev_" + boardid + ".xml", + "dev_" + boardairflow + ".xml", +] + + +def dev_file_read(path, offset, read_len): + retval = "ERR" + val_list = [] + msg = "" + ret = "" + fd = -1 + + if not os.path.exists(path): + return False, "%s %s not found" % (retval, path) + + try: + fd = os.open(path, os.O_RDONLY) + os.lseek(fd, offset, os.SEEK_SET) + ret = os.read(fd, read_len) + for item in ret: + val_list.append(item) + except Exception as e: + msg = str(e) + return False, "%s %s" % (retval, msg) + finally: + if fd > 0: + os.close(fd) + return True, val_list + + +def getPMCreg(location): + retval = 'ERR' + if not os.path.isfile(location): + return "%s %s notfound" % (retval, location) + try: + with open(location, 'r') as fd: + retval = fd.read() + except Exception as error: + return "ERR %s" % str(error) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +# Get a mailbox register +def get_pmc_register(reg_name): + retval = 'ERR' + mb_reg_file = reg_name + filepath = glob.glob(mb_reg_file) + if len(filepath) == 0: + return "%s %s notfound" % (retval, mb_reg_file) + mb_reg_file = filepath[0] + if not os.path.isfile(mb_reg_file): + # print mb_reg_file, 'not found !' + return "%s %s notfound" % (retval, mb_reg_file) + try: + with open(mb_reg_file, 'rb') as fd: + retval = fd.read() + retval = typeTostr(retval) + except Exception as error: + retval = "%s %s read failed, msg: %s" % (retval, mb_reg_file, str(error)) + + retval = retval.rstrip('\r\n') + retval = retval.lstrip(" ") + return retval + + +class checktype(): + def __init__(self, test1): + self.test1 = test1 + + @staticmethod + def getValue(location, bit, data_type, coefficient=1, addend=0): + try: + value_t = get_pmc_register(location) + if value_t.startswith("ERR") or value_t.startswith("NA"): + return value_t + if data_type == 1: + return float('%.1f' % ((float(value_t) / 1000) + addend)) + if data_type == 2: + return float('%.1f' % (float(value_t) / 100)) + if data_type == 3: + psu_status = int(value_t, 16) + return (psu_status & (1 << bit)) >> bit + if data_type == 4: + return int(value_t, 10) + if data_type == 5: + return float('%.1f' % (float(value_t) / 1000 / 1000)) + if data_type == 6: + return Decimal(float(value_t) * coefficient / 1000).quantize(Decimal('0.000')) + return value_t + except Exception as e: + value_t = "ERR %s" % str(e) + return value_t + + # fanFRU + @staticmethod + def decodeBinByValue(retval): + fru = ipmifru() + fru.decodeBin(retval) + return fru + + @staticmethod + def getfruValue(prob_t, root, val): + try: + ret, binval_bytes = dev_file_read(val, 0, 256) + if ret is False: + return binval_bytes + binval = byteTostr(binval_bytes) + fanpro = {} + ret = checktype.decodeBinByValue(binval) + fanpro['fan_type'] = ret.productInfoArea.productName + fanpro['hw_version'] = ret.productInfoArea.productVersion + fanpro['sn'] = ret.productInfoArea.productSerialNumber + fan_display_name_dict = status.getDecodValue(root, "fan_display_name") + fan_name = fanpro['fan_type'].strip() + if len(fan_display_name_dict) == 0: + return fanpro + if fan_name not in fan_display_name_dict: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR fan name: %s not support" % fan_name) + else: + fanpro['fan_type'] = fan_display_name_dict[fan_name] + return fanpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getslotfruValue(val): + try: + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + slotpro = {} + ret = checktype.decodeBinByValue(binval) + slotpro['slot_type'] = ret.boardInfoArea.boardProductName + slotpro['hw_version'] = ret.boardInfoArea.boardextra1 + slotpro['sn'] = ret.boardInfoArea.boardSerialNumber + return slotpro + except Exception as error: + return "ERR " + str(error) + + @staticmethod + def getpsufruValue(prob_t, root, val): + try: + psu_match = False + binval = checktype.getValue(val, 0, 0) + if binval.startswith("ERR"): + return binval + psupro = {} + ret = checktype.decodeBinByValue(binval) + psupro['type1'] = ret.productInfoArea.productPartModelName + psupro['sn'] = ret.productInfoArea.productSerialNumber + psupro['hw_version'] = ret.productInfoArea.productVersion + psu_dict = status.getDecodValue(root, "psutype") + psupro['type1'] = psupro['type1'].strip() + if len(psu_dict) == 0: + return psupro + for psu_name, display_name in psu_dict.items(): + if psu_name.strip() == psupro['type1']: + psupro['type1'] = display_name + psu_match = True + break + if psu_match is not True: + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % psupro['type1']) + return psupro + except Exception as error: + return "ERR " + str(error) + + +class status(): + def __init__(self, productname): + self.productname = productname + + @staticmethod + def getETroot(filename): + tree = ET.parse(filename) + root = tree.getroot() + return root + + @staticmethod + def getDecodValue(collection, decode): + decodes = collection.find('decode') + testdecode = decodes.find(decode) + test = {} + if testdecode is None: + return test + for neighbor in testdecode.iter('code'): + test[neighbor.attrib["key"]] = neighbor.attrib["value"] + return test + + @staticmethod + def getfileValue(location): + return checktype.getValue(location, " ", " ") + + @staticmethod + def getETValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + prob_t = {} + prob_t.update(neighbor.attrib) + prob_t['errcode'] = 0 + prob_t['errmsg'] = '' + for pros in neighbor.iter("property"): + ret = dict(list(neighbor.attrib.items()) + list(pros.attrib.items())) + if ret.get('e2type') == 'fru' and ret.get("name") == "fru": + fruval = checktype.getfruValue(prob_t, root, ret["location"]) + if isinstance(fruval, str) and fruval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = fruval + break + prob_t.update(fruval) + continue + + if ret.get("name") == "psu" and ret.get('e2type') == 'fru': + psuval = checktype.getpsufruValue(prob_t, root, ret["location"]) + if isinstance(psuval, str) and psuval.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = psuval + break + prob_t.update(psuval) + continue + + if ret.get("gettype") == "config": + prob_t[ret["name"]] = ret["value"] + continue + + if 'type' not in ret.keys(): + val = "0" + else: + val = ret["type"] + if 'bit' not in ret.keys(): + bit = "0" + else: + bit = ret["bit"] + if 'coefficient' not in ret.keys(): + coefficient = 1 + else: + coefficient = float(ret["coefficient"]) + if 'addend' not in ret.keys(): + addend = 0 + else: + addend = float(ret["addend"]) + + s = checktype.getValue(ret["location"], int(bit), int(val), coefficient, addend) + if isinstance(s, str) and s.startswith("ERR"): + prob_t['errcode'] = -1 + prob_t['errmsg'] = s + break + if 'default' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + prob_t['errmsg'] = rt[str(s)] + if str(s) != ret["default"]: + prob_t['errcode'] = -1 + break + else: + if 'decode' in ret.keys(): + rt = status.getDecodValue(root, ret['decode']) + if (ret['decode'] == "psutype" and s.replace("\x00", "").rstrip() not in rt): + prob_t['errcode'] = -1 + prob_t['errmsg'] = '%s' % ("ERR psu name: %s not support" % + (s.replace("\x00", "").rstrip())) + else: + s = rt[str(s).replace("\x00", "").rstrip()] + name = ret["name"] + prob_t[name] = str(s) + a.append(prob_t) + + @staticmethod + def getCPUValue(a, filename, tagname): + root = status.getETroot(filename) + for neighbor in root.iter(tagname): + location = neighbor.attrib["location"] + L = [] + for dirpath, dirnames, filenames in os.walk(location): + for file in filenames: + if file.endswith("input"): + L.append(os.path.join(dirpath, file)) + L = sorted(L, reverse=False) + for i in range(len(L)): + prob_t = {} + prob_t["name"] = getPMCreg("%s/temp%d_label" % (location, i + 1)) + prob_t["temp"] = float(getPMCreg("%s/temp%d_input" % (location, i + 1))) / 1000 + prob_t["alarm"] = float(getPMCreg("%s/temp%d_crit_alarm" % (location, i + 1))) / 1000 + prob_t["crit"] = float(getPMCreg("%s/temp%d_crit" % (location, i + 1))) / 1000 + prob_t["max"] = float(getPMCreg("%s/temp%d_max" % (location, i + 1))) / 1000 + a.append(prob_t) + + @staticmethod + def getFileName(): + fpath = os.path.dirname(os.path.realpath(__file__)) + for file in DEV_XML_FILE_LIST: + xml = fpath + "/" + file + if os.path.exists(xml): + return xml + return fpath + "/" + CONFIG_NAME + + @staticmethod + def checkFan(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "fan" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getTemp(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "temp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getPsu(ret): + _filename = status.getFileName() + # _filename = "/usr/local/bin/" + status.getFileName() + _tagname = "psu" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getcputemp(ret): + _filename = status.getFileName() + _tagname = "cpus" + status.getCPUValue(ret, _filename, _tagname) + + @staticmethod + def getDcdc(ret): + _filename = status.getFileName() + _tagname = "dcdc" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmactemp(ret): + _filename = status.getFileName() + _tagname = "mactemp" + status.getETValue(ret, _filename, _tagname) + + @staticmethod + def getmacpower(ret): + _filename = status.getFileName() + _tagname = "macpower" + status.getETValue(ret, _filename, _tagname) diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/pcie.yaml b/device/micas/x86_64-micas_m2-w6940-64oc-r0/pcie.yaml new file mode 100644 index 000000000000..cce5d873a802 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/pcie.yaml @@ -0,0 +1,478 @@ +- bus: '00' + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: '00' + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: '00' + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: '00' + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: '00' + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: '00' + dev: '01' + fn: '0' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '1' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '2' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '3' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '4' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '5' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '6' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '01' + fn: '7' + id: '0b00' + name: 'System peripheral: Intel Corporation Device 0b00' +- bus: '00' + dev: '02' + fn: '0' + id: 09a6 + name: 'System peripheral: Intel Corporation Device 09a6' +- bus: '00' + dev: '02' + fn: '1' + id: 09a7 + name: 'System peripheral: Intel Corporation Device 09a7' +- bus: '00' + dev: '02' + fn: '4' + id: '3456' + name: 'Non-Essential Instrumentation [1300]: Intel Corporation Device 3456 (rev + 01)' +- bus: '00' + dev: '06' + fn: '0' + id: 18da + name: 'PCI bridge: Intel Corporation Device 18da (rev 11)' +- bus: '00' + dev: 09 + fn: '0' + id: 18a4 + name: 'PCI bridge: Intel Corporation Device 18a4 (rev 11)' +- bus: '00' + dev: 0b + fn: '0' + id: 18a6 + name: 'PCI bridge: Intel Corporation Device 18a6 (rev 11)' +- bus: '00' + dev: 0e + fn: '0' + id: 18f2 + name: 'SATA controller: Intel Corporation Device 18f2 (rev 11)' +- bus: '00' + dev: 0f + fn: '0' + id: 18ac + name: 'System peripheral: Intel Corporation Device 18ac (rev 11)' +- bus: '00' + dev: '10' + fn: '0' + id: 18a8 + name: 'PCI bridge: Intel Corporation Device 18a8 (rev 11)' +- bus: '00' + dev: '11' + fn: '0' + id: 18a9 + name: 'PCI bridge: Intel Corporation Device 18a9 (rev 11)' +- bus: '00' + dev: '12' + fn: '0' + id: 18aa + name: 'PCI bridge: Intel Corporation Device 18aa (rev 11)' +- bus: '00' + dev: '13' + fn: '0' + id: 18ab + name: 'PCI bridge: Intel Corporation Device 18ab (rev 11)' +- bus: '00' + dev: '14' + fn: '0' + id: 18ad + name: 'PCI bridge: Intel Corporation Device 18ad (rev 11)' +- bus: '00' + dev: '15' + fn: '0' + id: 18ae + name: 'PCI bridge: Intel Corporation Device 18ae (rev 11)' +- bus: '00' + dev: '18' + fn: '0' + id: 18d3 + name: 'Communication controller: Intel Corporation Device 18d3 (rev 11)' +- bus: '00' + dev: '18' + fn: '1' + id: 18d4 + name: 'Communication controller: Intel Corporation Device 18d4 (rev 11)' +- bus: '00' + dev: '18' + fn: '4' + id: 18d6 + name: 'Communication controller: Intel Corporation Device 18d6 (rev 11)' +- bus: '00' + dev: 1a + fn: '0' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '1' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '2' + id: 18d8 + name: 'Serial controller: Intel Corporation Device 18d8 (rev 11)' +- bus: '00' + dev: 1a + fn: '3' + id: 18d9 + name: 'Unassigned class [ff00]: Intel Corporation Device 18d9 (rev 11)' +- bus: '00' + dev: 1d + fn: '0' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: '00' + dev: 1e + fn: '0' + id: 18d0 + name: 'USB controller: Intel Corporation Device 18d0 (rev 11)' +- bus: '00' + dev: 1f + fn: '0' + id: 18dc + name: 'ISA bridge: Intel Corporation Device 18dc (rev 11)' +- bus: '00' + dev: 1f + fn: '4' + id: 18df + name: 'SMBus: Intel Corporation Device 18df (rev 11)' +- bus: '00' + dev: 1f + fn: '5' + id: 18e0 + name: 'Serial bus controller [0c80]: Intel Corporation Device 18e0 (rev 11)' +- bus: '00' + dev: 1f + fn: '7' + id: 18e1 + name: 'Non-Essential Instrumentation [1300]: Intel Corporation Device 18e1 (rev + 11)' +- bus: '01' + dev: '00' + fn: '0' + id: 18ee + name: 'Co-processor: Intel Corporation Device 18ee (rev 11)' +- bus: '06' + dev: '00' + fn: '0' + id: '7011' + name: 'Memory controller: Xilinx Corporation Device 7011' +- bus: 08 + dev: '00' + fn: '0' + id: '1533' + name: 'Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev + 03)' +- bus: '14' + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: '14' + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: '14' + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: '14' + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: '14' + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: '14' + dev: '02' + fn: '0' + id: 347a + name: 'PCI bridge: Intel Corporation Device 347a (rev 06)' +- bus: '14' + dev: '03' + fn: '0' + id: 347b + name: 'PCI bridge: Intel Corporation Device 347b (rev 06)' +- bus: '14' + dev: '04' + fn: '0' + id: 347c + name: 'PCI bridge: Intel Corporation Device 347c (rev 06)' +- bus: '14' + dev: '05' + fn: '0' + id: 347d + name: 'PCI bridge: Intel Corporation Device 347d (rev 06)' +- bus: '15' + dev: '00' + fn: '0' + id: f900 + name: 'Ethernet controller: Broadcom Inc. and subsidiaries Device f900 (rev 11)' +- bus: f3 + dev: '00' + fn: '0' + id: 09a2 + name: 'System peripheral: Intel Corporation Device 09a2 (rev 04)' +- bus: f3 + dev: '00' + fn: '1' + id: 09a4 + name: 'System peripheral: Intel Corporation Device 09a4 (rev 04)' +- bus: f3 + dev: '00' + fn: '2' + id: 09a3 + name: 'System peripheral: Intel Corporation Device 09a3 (rev 04)' +- bus: f3 + dev: '00' + fn: '3' + id: 09a5 + name: 'System peripheral: Intel Corporation Device 09a5 (rev 04)' +- bus: f3 + dev: '00' + fn: '4' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: f3 + dev: '04' + fn: '0' + id: 18d1 + name: 'PCI bridge: Intel Corporation Device 18d1' +- bus: f4 + dev: '00' + fn: '0' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '1' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '2' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: f4 + dev: '00' + fn: '3' + id: 124c + name: 'Ethernet controller: Intel Corporation Ethernet Connection E823-L for backplane' +- bus: fe + dev: '00' + fn: '0' + id: '3450' + name: 'System peripheral: Intel Corporation Device 3450' +- bus: fe + dev: '00' + fn: '1' + id: '3451' + name: 'System peripheral: Intel Corporation Device 3451' +- bus: fe + dev: '00' + fn: '2' + id: '3452' + name: 'System peripheral: Intel Corporation Device 3452' +- bus: fe + dev: '00' + fn: '3' + id: 0998 + name: 'Host bridge: Intel Corporation Device 0998' +- bus: fe + dev: '00' + fn: '5' + id: '3455' + name: 'System peripheral: Intel Corporation Device 3455' +- bus: fe + dev: 0b + fn: '0' + id: '3448' + name: 'System peripheral: Intel Corporation Device 3448' +- bus: fe + dev: 0b + fn: '1' + id: '3448' + name: 'System peripheral: Intel Corporation Device 3448' +- bus: fe + dev: 0b + fn: '2' + id: 344b + name: 'System peripheral: Intel Corporation Device 344b' +- bus: fe + dev: 0c + fn: '0' + id: 344a + name: 'Performance counters: Intel Corporation Device 344a' +- bus: fe + dev: 1a + fn: '0' + id: '2880' + name: 'Performance counters: Intel Corporation Device 2880' +- bus: ff + dev: '00' + fn: '0' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '1' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '2' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '3' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '4' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: '00' + fn: '5' + id: 344c + name: 'System peripheral: Intel Corporation Device 344c' +- bus: ff + dev: 0a + fn: '0' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '1' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '2' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '3' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '4' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 0a + fn: '5' + id: 344d + name: 'System peripheral: Intel Corporation Device 344d' +- bus: ff + dev: 1d + fn: '0' + id: 344f + name: 'System peripheral: Intel Corporation Device 344f' +- bus: ff + dev: 1d + fn: '1' + id: '3457' + name: 'System peripheral: Intel Corporation Device 3457' +- bus: ff + dev: 1e + fn: '0' + id: '3458' + name: 'System peripheral: Intel Corporation Device 3458 (rev 01)' +- bus: ff + dev: 1e + fn: '1' + id: '3459' + name: 'System peripheral: Intel Corporation Device 3459 (rev 01)' +- bus: ff + dev: 1e + fn: '2' + id: 345a + name: 'System peripheral: Intel Corporation Device 345a (rev 01)' +- bus: ff + dev: 1e + fn: '3' + id: 345b + name: 'System peripheral: Intel Corporation Device 345b (rev 01)' +- bus: ff + dev: 1e + fn: '4' + id: 345c + name: 'System peripheral: Intel Corporation Device 345c (rev 01)' +- bus: ff + dev: 1e + fn: '5' + id: 345d + name: 'System peripheral: Intel Corporation Device 345d (rev 01)' +- bus: ff + dev: 1e + fn: '6' + id: 345e + name: 'System peripheral: Intel Corporation Device 345e (rev 01)' +- bus: ff + dev: 1e + fn: '7' + id: 345f + name: 'System peripheral: Intel Corporation Device 345f (rev 01)' diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform.json b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform.json new file mode 100644 index 000000000000..154b1abe6ffc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform.json @@ -0,0 +1,1653 @@ +{ + "chassis": { + "name": "M2-W6940-64OC", + "thermal_manager": false, + "status_led": { + "controllable": false, + "colors": ["green", "blinking_green", "amber", "blinking_amber"] + }, + "components": [ + { + "name": "CPU_CPLD" + }, + { + "name": "CONNECT_CPLD" + }, + { + "name": "MAC_CPLDA" + }, + { + "name": "MAC_CPLDB" + }, + { + "name": "MAC_CPLDC" + }, + { + "name": "FAN_CPLD" + }, + { + "name": "MGMT_CPLD" + }, + { + "name": "MAC_FPGA" + }, + { + "name": "BIOS" + } + ], + "fans": [ + { + "name": "Fantray1_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray1_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray2_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray2_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray3_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray3_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray4_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + }, + { + "name": "Fantray4_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false, + "colors": ["off", "red", "amber", "green"] + } + } + ], + "fan_drawers":[ + { + "name": "Fantray1", + "num_fans" : 2, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "Fantray1_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray1_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray2", + "num_fans" : 2, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "Fantray2_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray2_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray3", + "num_fans" : 2, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "Fantray3_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray3_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Fantray4", + "num_fans" : 2, + "status_led": { + "controllable": false, + "colors": ["amber", "green", "off"] + }, + "fans": [ + { + "name": "Fantray4_1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + }, + { + "name": "Fantray4_2", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "psus": [ + { + "name": "Psu1", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU1_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + }, + { + "name": "Psu2", + "voltage": true, + "current": true, + "power": true, + "max_power": false, + "voltage_high_threshold": true, + "voltage_low_threshold": true, + "temperature": true, + "fans_target_speed": true, + "status_led": { + "controllable": false + }, + "fans": [ + { + "name": "PSU2_FAN1", + "speed": { + "controllable": true, + "minimum": 50, + "maximum": 100 + }, + "status_led": { + "available": false + } + } + ] + } + ], + "thermals": [ + { + "name": "BOARD_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "CPU_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "INLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "OUTLET_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "ASIC_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU1_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU2_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU3_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + }, + { + "name": "PSU4_TEMP", + "controllable": false, + "low-crit-threshold": true, + "high-crit-threshold": true, + "low-threshold": true, + "high-threshold": true, + "minimum-recorded": true, + "maximum-recorded": true + } + ], + "modules": [], + "sfps": [] + }, + "interfaces": { + "Ethernet1": { + "index": "0,0,0,0,0,0,0,0", + "lanes": "41,42,43,44,45,46,47,48", + "breakout_modes": { + "1x800G": [ + "Eth1" + ], + "2x400G": [ + "Eth1/1", + "Eth1/2" + ], + "4x200G": [ + "Eth1/1", + "Eth1/2", + "Eth1/3", + "Eth1/4" + ] + } + }, + "Ethernet9": { + "index": "1,1,1,1,1,1,1,1", + "lanes": "33,34,35,36,37,38,39,40", + "breakout_modes": { + "1x800G": [ + "Eth2" + ], + "2x400G": [ + "Eth2/1", + "Eth2/2" + ], + "4x200G": [ + "Eth2/1", + "Eth2/2", + "Eth2/3", + "Eth2/4" + ] + } + }, + "Ethernet17": { + "index": "2,2,2,2,2,2,2,2", + "lanes": "57,58,59,60,61,62,63,64", + "breakout_modes": { + "1x800G": [ + "Eth3" + ], + "2x400G": [ + "Eth3/1", + "Eth3/2" + ], + "4x200G": [ + "Eth3/1", + "Eth3/2", + "Eth3/3", + "Eth3/4" + ] + } + }, + "Ethernet25": { + "index": "3,3,3,3,3,3,3,3", + "lanes": "49,50,51,52,53,54,55,56", + "breakout_modes": { + "1x800G": [ + "Eth4" + ], + "2x400G": [ + "Eth4/1", + "Eth4/2" + ], + "4x200G": [ + "Eth4/1", + "Eth4/2", + "Eth4/3", + "Eth4/4" + ] + } + }, + "Ethernet33": { + "index": "4,4,4,4,4,4,4,4", + "lanes": "73,74,75,76,77,78,79,80", + "breakout_modes": { + "1x800G": [ + "Eth5" + ], + "2x400G": [ + "Eth5/1", + "Eth5/2" + ], + "4x200G": [ + "Eth5/1", + "Eth5/2", + "Eth5/3", + "Eth5/4" + ] + } + }, + "Ethernet41": { + "index": "5,5,5,5,5,5,5,5", + "lanes": "65,66,67,68,69,70,71,72", + "breakout_modes": { + "1x800G": [ + "Eth6" + ], + "2x400G": [ + "Eth6/1", + "Eth6/2" + ], + "4x200G": [ + "Eth6/1", + "Eth6/2", + "Eth6/3", + "Eth6/4" + ] + } + }, + "Ethernet49": { + "index": "6,6,6,6,6,6,6,6", + "lanes": "89,90,91,92,93,94,95,96", + "breakout_modes": { + "1x800G": [ + "Eth7" + ], + "2x400G": [ + "Eth7/1", + "Eth7/2" + ], + "4x200G": [ + "Eth7/1", + "Eth7/2", + "Eth7/3", + "Eth7/4" + ] + } + }, + "Ethernet57": { + "index": "7,7,7,7,7,7,7,7", + "lanes": "81,82,83,84,85,86,87,88", + "breakout_modes": { + "1x800G": [ + "Eth8" + ], + "2x400G": [ + "Eth8/1", + "Eth8/2" + ], + "4x200G": [ + "Eth8/1", + "Eth8/2", + "Eth8/3", + "Eth8/4" + ] + } + }, + "Ethernet65": { + "index": "8,8,8,8,8,8,8,8", + "lanes": "105,106,107,108,109,110,111,112", + "breakout_modes": { + "1x800G": [ + "Eth9" + ], + "2x400G": [ + "Eth9/1", + "Eth9/2" + ], + "4x200G": [ + "Eth9/1", + "Eth9/2", + "Eth9/3", + "Eth9/4" + ] + } + }, + "Ethernet73": { + "index": "9,9,9,9,9,9,9,9", + "lanes": "97,98,99,100,101,102,103,104", + "breakout_modes": { + "1x800G": [ + "Eth10" + ], + "2x400G": [ + "Eth10/1", + "Eth10/2" + ], + "4x200G": [ + "Eth10/1", + "Eth10/2", + "Eth10/3", + "Eth10/4" + ] + } + }, + "Ethernet81": { + "index": "10,10,10,10,10,10,10,10", + "lanes": "121,122,123,124,125,126,127,128", + "breakout_modes": { + "1x800G": [ + "Eth11" + ], + "2x400G": [ + "Eth11/1", + "Eth11/2" + ], + "4x200G": [ + "Eth11/1", + "Eth11/2", + "Eth11/3", + "Eth11/4" + ] + } + }, + "Ethernet89": { + "index": "11,11,11,11,11,11,11,11", + "lanes": "113,114,115,116,117,118,119,120", + "breakout_modes": { + "1x800G": [ + "Eth12" + ], + "2x400G": [ + "Eth12/1", + "Eth12/2" + ], + "4x200G": [ + "Eth12/1", + "Eth12/2", + "Eth12/3", + "Eth12/4" + ] + } + }, + "Ethernet97": { + "index": "12,12,12,12,12,12,12,12", + "lanes": "137,138,139,140,141,142,143,144", + "breakout_modes": { + "1x800G": [ + "Eth13" + ], + "2x400G": [ + "Eth13/1", + "Eth13/2" + ], + "4x200G": [ + "Eth13/1", + "Eth13/2", + "Eth13/3", + "Eth13/4" + ] + } + }, + "Ethernet105": { + "index": "13,13,13,13,13,13,13,13", + "lanes": "129,130,131,132,133,134,135,136", + "breakout_modes": { + "1x800G": [ + "Eth14" + ], + "2x400G": [ + "Eth14/1", + "Eth14/2" + ], + "4x200G": [ + "Eth14/1", + "Eth14/2", + "Eth14/3", + "Eth14/4" + ] + } + }, + "Ethernet113": { + "index": "14,14,14,14,14,14,14,14", + "lanes": "153,154,155,156,157,158,159,160", + "breakout_modes": { + "1x800G": [ + "Eth15" + ], + "2x400G": [ + "Eth15/1", + "Eth15/2" + ], + "4x200G": [ + "Eth15/1", + "Eth15/2", + "Eth15/3", + "Eth15/4" + ] + } + }, + "Ethernet121": { + "index": "15,15,15,15,15,15,15,15", + "lanes": "145,146,147,148,149,150,151,152", + "breakout_modes": { + "1x800G": [ + "Eth16" + ], + "2x400G": [ + "Eth16/1", + "Eth16/2" + ], + "4x200G": [ + "Eth16/1", + "Eth16/2", + "Eth16/3", + "Eth16/4" + ] + } + }, + "Ethernet129": { + "index": "16,16,16,16,16,16,16,16", + "lanes": "169,170,171,172,173,174,175,176", + "breakout_modes": { + "1x800G": [ + "Eth17" + ], + "2x400G": [ + "Eth17/1", + "Eth17/2" + ], + "4x200G": [ + "Eth17/1", + "Eth17/2", + "Eth17/3", + "Eth17/4" + ] + } + }, + "Ethernet137": { + "index": "17,17,17,17,17,17,17,17", + "lanes": "161,162,163,164,165,166,167,168", + "breakout_modes": { + "1x800G": [ + "Eth18" + ], + "2x400G": [ + "Eth18/1", + "Eth18/2" + ], + "4x200G": [ + "Eth18/1", + "Eth18/2", + "Eth18/3", + "Eth18/4" + ] + } + }, + "Ethernet145": { + "index": "18,18,18,18,18,18,18,18", + "lanes": "185,186,187,188,189,190,191,192", + "breakout_modes": { + "1x800G": [ + "Eth19" + ], + "2x400G": [ + "Eth19/1", + "Eth19/2" + ], + "4x200G": [ + "Eth19/1", + "Eth19/2", + "Eth19/3", + "Eth19/4" + ] + } + }, + "Ethernet153": { + "index": "19,19,19,19,19,19,19,19", + "lanes": "177,178,179,180,181,182,183,184", + "breakout_modes": { + "1x800G": [ + "Eth20" + ], + "2x400G": [ + "Eth20/1", + "Eth20/2" + ], + "4x200G": [ + "Eth20/1", + "Eth20/2", + "Eth20/3", + "Eth20/4" + ] + } + }, + "Ethernet161": { + "index": "20,20,20,20,20,20,20,20", + "lanes": "201,202,203,204,205,206,207,208", + "breakout_modes": { + "1x800G": [ + "Eth21" + ], + "2x400G": [ + "Eth21/1", + "Eth21/2" + ], + "4x200G": [ + "Eth21/1", + "Eth21/2", + "Eth21/3", + "Eth21/4" + ] + } + }, + "Ethernet169": { + "index": "21,21,21,21,21,21,21,21", + "lanes": "193,194,195,196,197,198,199,200", + "breakout_modes": { + "1x800G": [ + "Eth22" + ], + "2x400G": [ + "Eth22/1", + "Eth22/2" + ], + "4x200G": [ + "Eth22/1", + "Eth22/2", + "Eth22/3", + "Eth22/4" + ] + } + }, + "Ethernet177": { + "index": "22,22,22,22,22,22,22,22", + "lanes": "217,218,219,220,221,222,223,224", + "breakout_modes": { + "1x800G": [ + "Eth23" + ], + "2x400G": [ + "Eth23/1", + "Eth23/2" + ], + "4x200G": [ + "Eth23/1", + "Eth23/2", + "Eth23/3", + "Eth23/4" + ] + } + }, + "Ethernet185": { + "index": "23,23,23,23,23,23,23,23", + "lanes": "209,210,211,212,213,214,215,216", + "breakout_modes": { + "1x800G": [ + "Eth24" + ], + "2x400G": [ + "Eth24/1", + "Eth24/2" + ], + "4x200G": [ + "Eth24/1", + "Eth24/2", + "Eth24/3", + "Eth24/4" + ] + } + }, + "Ethernet193": { + "index": "24,24,24,24,24,24,24,24", + "lanes": "1,2,3,4,5,6,7,8", + "breakout_modes": { + "1x800G": [ + "Eth25" + ], + "2x400G": [ + "Eth25/1", + "Eth25/2" + ], + "4x200G": [ + "Eth25/1", + "Eth25/2", + "Eth25/3", + "Eth25/4" + ] + } + }, + "Ethernet201": { + "index": "25,25,25,25,25,25,25,25", + "lanes": "9,10,11,12,13,14,15,16", + "breakout_modes": { + "1x800G": [ + "Eth26" + ], + "2x400G": [ + "Eth26/1", + "Eth26/2" + ], + "4x200G": [ + "Eth26/1", + "Eth26/2", + "Eth26/3", + "Eth26/4" + ] + } + }, + "Ethernet209": { + "index": "26,26,26,26,26,26,26,26", + "lanes": "17,18,19,20,21,22,23,24", + "breakout_modes": { + "1x800G": [ + "Eth27" + ], + "2x400G": [ + "Eth27/1", + "Eth27/2" + ], + "4x200G": [ + "Eth27/1", + "Eth27/2", + "Eth27/3", + "Eth27/4" + ] + } + }, + "Ethernet217": { + "index": "27,27,27,27,27,27,27,27", + "lanes": "25,26,27,28,29,30,31,32", + "breakout_modes": { + "1x800G": [ + "Eth28" + ], + "2x400G": [ + "Eth28/1", + "Eth28/2" + ], + "4x200G": [ + "Eth28/1", + "Eth28/2", + "Eth28/3", + "Eth28/4" + ] + } + }, + "Ethernet225": { + "index": "28,28,28,28,28,28,28,28", + "lanes": "249,250,251,252,253,254,255,256", + "breakout_modes": { + "1x800G": [ + "Eth29" + ], + "2x400G": [ + "Eth29/1", + "Eth29/2" + ], + "4x200G": [ + "Eth29/1", + "Eth29/2", + "Eth29/3", + "Eth29/4" + ] + } + }, + "Ethernet233": { + "index": "29,29,29,29,29,29,29,29", + "lanes": "241,242,243,244,245,246,247,248", + "breakout_modes": { + "1x800G": [ + "Eth30" + ], + "2x400G": [ + "Eth30/1", + "Eth30/2" + ], + "4x200G": [ + "Eth30/1", + "Eth30/2", + "Eth30/3", + "Eth30/4" + ] + } + }, + "Ethernet241": { + "index": "30,30,30,30,30,30,30,30", + "lanes": "233,234,235,236,237,238,239,240", + "breakout_modes": { + "1x800G": [ + "Eth31" + ], + "2x400G": [ + "Eth31/1", + "Eth31/2" + ], + "4x200G": [ + "Eth31/1", + "Eth31/2", + "Eth31/3", + "Eth31/4" + ] + } + }, + "Ethernet249": { + "index": "31,31,31,31,31,31,31,31", + "lanes": "225,226,227,228,229,230,231,232", + "breakout_modes": { + "1x800G": [ + "Eth32" + ], + "2x400G": [ + "Eth32/1", + "Eth32/2" + ], + "4x200G": [ + "Eth32/1", + "Eth32/2", + "Eth32/3", + "Eth32/4" + ] + } + }, + "Ethernet257": { + "index": "32,32,32,32,32,32,32,32", + "lanes": "257,258,259,260,261,262,263,264", + "breakout_modes": { + "1x800G": [ + "Eth33" + ], + "2x400G": [ + "Eth33/1", + "Eth33/2" + ], + "4x200G": [ + "Eth33/1", + "Eth33/2", + "Eth33/3", + "Eth33/4" + ] + } + }, + "Ethernet265": { + "index": "33,33,33,33,33,33,33,33", + "lanes": "265,266,267,268,269,270,271,272", + "breakout_modes": { + "1x800G": [ + "Eth34" + ], + "2x400G": [ + "Eth34/1", + "Eth34/2" + ], + "4x200G": [ + "Eth34/1", + "Eth34/2", + "Eth34/3", + "Eth34/4" + ] + } + }, + "Ethernet273": { + "index": "34,34,34,34,34,34,34,34", + "lanes": "273,274,275,276,277,278,279,280", + "breakout_modes": { + "1x800G": [ + "Eth35" + ], + "2x400G": [ + "Eth35/1", + "Eth35/2" + ], + "4x200G": [ + "Eth35/1", + "Eth35/2", + "Eth35/3", + "Eth35/4" + ] + } + }, + "Ethernet281": { + "index": "35,35,35,35,35,35,35,35", + "lanes": "281,282,283,284,285,286,287,288", + "breakout_modes": { + "1x800G": [ + "Eth36" + ], + "2x400G": [ + "Eth36/1", + "Eth36/2" + ], + "4x200G": [ + "Eth36/1", + "Eth36/2", + "Eth36/3", + "Eth36/4" + ] + } + }, + "Ethernet289": { + "index": "36,36,36,36,36,36,36,36", + "lanes": "505,506,507,508,509,510,511,512", + "breakout_modes": { + "1x800G": [ + "Eth37" + ], + "2x400G": [ + "Eth37/1", + "Eth37/2" + ], + "4x200G": [ + "Eth37/1", + "Eth37/2", + "Eth37/3", + "Eth37/4" + ] + } + }, + "Ethernet297": { + "index": "37,37,37,37,37,37,37,37", + "lanes": "497,498,499,500,501,502,503,504", + "breakout_modes": { + "1x800G": [ + "Eth38" + ], + "2x400G": [ + "Eth38/1", + "Eth38/2" + ], + "4x200G": [ + "Eth38/1", + "Eth38/2", + "Eth38/3", + "Eth38/4" + ] + } + }, + "Ethernet305": { + "index": "38,38,38,38,38,38,38,38", + "lanes": "489,490,491,492,493,494,495,496", + "breakout_modes": { + "1x800G": [ + "Eth39" + ], + "2x400G": [ + "Eth39/1", + "Eth39/2" + ], + "4x200G": [ + "Eth39/1", + "Eth39/2", + "Eth39/3", + "Eth39/4" + ] + } + }, + "Ethernet313": { + "index": "39,39,39,39,39,39,39,39", + "lanes": "481,482,483,484,485,486,487,488", + "breakout_modes": { + "1x800G": [ + "Eth40" + ], + "2x400G": [ + "Eth40/1", + "Eth40/2" + ], + "4x200G": [ + "Eth40/1", + "Eth40/2", + "Eth40/3", + "Eth40/4" + ] + } + }, + "Ethernet321": { + "index": "40,40,40,40,40,40,40,40", + "lanes": "297,298,299,300,301,302,303,304", + "breakout_modes": { + "1x800G": [ + "Eth41" + ], + "2x400G": [ + "Eth41/1", + "Eth41/2" + ], + "4x200G": [ + "Eth41/1", + "Eth41/2", + "Eth41/3", + "Eth41/4" + ] + } + }, + "Ethernet329": { + "index": "41,41,41,41,41,41,41,41", + "lanes": "289,290,291,292,293,294,295,296", + "breakout_modes": { + "1x800G": [ + "Eth42" + ], + "2x400G": [ + "Eth42/1", + "Eth42/2" + ], + "4x200G": [ + "Eth42/1", + "Eth42/2", + "Eth42/3", + "Eth42/4" + ] + } + }, + "Ethernet337": { + "index": "42,42,42,42,42,42,42,42", + "lanes": "313,314,315,316,317,318,319,320", + "breakout_modes": { + "1x800G": [ + "Eth43" + ], + "2x400G": [ + "Eth43/1", + "Eth43/2" + ], + "4x200G": [ + "Eth43/1", + "Eth43/2", + "Eth43/3", + "Eth43/4" + ] + } + }, + "Ethernet345": { + "index": "43,43,43,43,43,43,43,43", + "lanes": "305,306,307,308,309,310,311,312", + "breakout_modes": { + "1x800G": [ + "Eth44" + ], + "2x400G": [ + "Eth44/1", + "Eth44/2" + ], + "4x200G": [ + "Eth44/1", + "Eth44/2", + "Eth44/3", + "Eth44/4" + ] + } + }, + "Ethernet353": { + "index": "44,44,44,44,44,44,44,44", + "lanes": "329,330,331,332,333,334,335,336", + "breakout_modes": { + "1x800G": [ + "Eth45" + ], + "2x400G": [ + "Eth45/1", + "Eth45/2" + ], + "4x200G": [ + "Eth45/1", + "Eth45/2", + "Eth45/3", + "Eth45/4" + ] + } + }, + "Ethernet361": { + "index": "45,45,45,45,45,45,45,45", + "lanes": "321,322,323,324,325,326,327,328", + "breakout_modes": { + "1x800G": [ + "Eth46" + ], + "2x400G": [ + "Eth46/1", + "Eth46/2" + ], + "4x200G": [ + "Eth46/1", + "Eth46/2", + "Eth46/3", + "Eth46/4" + ] + } + }, + "Ethernet369": { + "index": "46,46,46,46,46,46,46,46", + "lanes": "345,346,347,348,349,350,351,352", + "breakout_modes": { + "1x800G": [ + "Eth47" + ], + "2x400G": [ + "Eth47/1", + "Eth47/2" + ], + "4x200G": [ + "Eth47/1", + "Eth47/2", + "Eth47/3", + "Eth47/4" + ] + } + }, + "Ethernet377": { + "index": "47,47,47,47,47,47,47,47", + "lanes": "337,338,339,340,341,342,343,344", + "breakout_modes": { + "1x800G": [ + "Eth48" + ], + "2x400G": [ + "Eth48/1", + "Eth48/2" + ], + "4x200G": [ + "Eth48/1", + "Eth48/2", + "Eth48/3", + "Eth48/4" + ] + } + }, + "Ethernet385": { + "index": "48,48,48,48,48,48,48,48", + "lanes": "361,362,363,364,365,366,367,368", + "breakout_modes": { + "1x800G": [ + "Eth49" + ], + "2x400G": [ + "Eth49/1", + "Eth49/2" + ], + "4x200G": [ + "Eth49/1", + "Eth49/2", + "Eth49/3", + "Eth49/4" + ] + } + }, + "Ethernet393": { + "index": "49,49,49,49,49,49,49,49", + "lanes": "353,354,355,356,357,358,359,360", + "breakout_modes": { + "1x800G": [ + "Eth50" + ], + "2x400G": [ + "Eth50/1", + "Eth50/2" + ], + "4x200G": [ + "Eth50/1", + "Eth50/2", + "Eth50/3", + "Eth50/4" + ] + } + }, + "Ethernet401": { + "index": "50,50,50,50,50,50,50,50", + "lanes": "377,378,379,380,381,382,383,384", + "breakout_modes": { + "1x800G": [ + "Eth51" + ], + "2x400G": [ + "Eth51/1", + "Eth51/2" + ], + "4x200G": [ + "Eth51/1", + "Eth51/2", + "Eth51/3", + "Eth51/4" + ] + } + }, + "Ethernet409": { + "index": "51,51,51,51,51,51,51,51", + "lanes": "369,370,371,372,373,374,375,376", + "breakout_modes": { + "1x800G": [ + "Eth52" + ], + "2x400G": [ + "Eth52/1", + "Eth52/2" + ], + "4x200G": [ + "Eth52/1", + "Eth52/2", + "Eth52/3", + "Eth52/4" + ] + } + }, + "Ethernet417": { + "index": "52,52,52,52,52,52,52,52", + "lanes": "393,394,395,396,397,398,399,400", + "breakout_modes": { + "1x800G": [ + "Eth53" + ], + "2x400G": [ + "Eth53/1", + "Eth53/2" + ], + "4x200G": [ + "Eth53/1", + "Eth53/2", + "Eth53/3", + "Eth53/4" + ] + } + }, + "Ethernet425": { + "index": "53,53,53,53,53,53,53,53", + "lanes": "385,386,387,388,389,390,391,392", + "breakout_modes": { + "1x800G": [ + "Eth54" + ], + "2x400G": [ + "Eth54/1", + "Eth54/2" + ], + "4x200G": [ + "Eth54/1", + "Eth54/2", + "Eth54/3", + "Eth54/4" + ] + } + }, + "Ethernet433": { + "index": "54,54,54,54,54,54,54,54", + "lanes": "409,410,411,412,413,414,415,416", + "breakout_modes": { + "1x800G": [ + "Eth55" + ], + "2x400G": [ + "Eth55/1", + "Eth55/2" + ], + "4x200G": [ + "Eth55/1", + "Eth55/2", + "Eth55/3", + "Eth55/4" + ] + } + }, + "Ethernet441": { + "index": "55,55,55,55,55,55,55,55", + "lanes": "401,402,403,404,405,406,407,408", + "breakout_modes": { + "1x800G": [ + "Eth56" + ], + "2x400G": [ + "Eth56/1", + "Eth56/2" + ], + "4x200G": [ + "Eth56/1", + "Eth56/2", + "Eth56/3", + "Eth56/4" + ] + } + }, + "Ethernet449": { + "index": "56,56,56,56,56,56,56,56", + "lanes": "425,426,427,428,429,430,431,432", + "breakout_modes": { + "1x800G": [ + "Eth57" + ], + "2x400G": [ + "Eth57/1", + "Eth57/2" + ], + "4x200G": [ + "Eth57/1", + "Eth57/2", + "Eth57/3", + "Eth57/4" + ] + } + }, + "Ethernet457": { + "index": "57,57,57,57,57,57,57,57", + "lanes": "417,418,419,420,421,422,423,424", + "breakout_modes": { + "1x800G": [ + "Eth58" + ], + "2x400G": [ + "Eth58/1", + "Eth58/2" + ], + "4x200G": [ + "Eth58/1", + "Eth58/2", + "Eth58/3", + "Eth58/4" + ] + } + }, + "Ethernet465": { + "index": "58,58,58,58,58,58,58,58", + "lanes": "441,442,443,444,445,446,447,448", + "breakout_modes": { + "1x800G": [ + "Eth59" + ], + "2x400G": [ + "Eth59/1", + "Eth59/2" + ], + "4x200G": [ + "Eth59/1", + "Eth59/2", + "Eth59/3", + "Eth59/4" + ] + } + }, + "Ethernet473": { + "index": "59,59,59,59,59,59,59,59", + "lanes": "433,434,435,436,437,438,439,440", + "breakout_modes": { + "1x800G": [ + "Eth60" + ], + "2x400G": [ + "Eth60/1", + "Eth60/2" + ], + "4x200G": [ + "Eth60/1", + "Eth60/2", + "Eth60/3", + "Eth60/4" + ] + } + }, + "Ethernet481": { + "index": "60,60,60,60,60,60,60,60", + "lanes": "457,458,459,460,461,462,463,464", + "breakout_modes": { + "1x800G": [ + "Eth61" + ], + "2x400G": [ + "Eth61/1", + "Eth61/2" + ], + "4x200G": [ + "Eth61/1", + "Eth61/2", + "Eth61/3", + "Eth61/4" + ] + } + }, + "Ethernet489": { + "index": "61,61,61,61,61,61,61,61", + "lanes": "449,450,451,452,453,454,455,456", + "breakout_modes": { + "1x800G": [ + "Eth62" + ], + "2x400G": [ + "Eth62/1", + "Eth62/2" + ], + "4x200G": [ + "Eth62/1", + "Eth62/2", + "Eth62/3", + "Eth62/4" + ] + } + }, + "Ethernet497": { + "index": "62,62,62,62,62,62,62,62", + "lanes": "473,474,475,476,477,478,479,480", + "breakout_modes": { + "1x800G": [ + "Eth63" + ], + "2x400G": [ + "Eth63/1", + "Eth63/2" + ], + "4x200G": [ + "Eth63/1", + "Eth63/2", + "Eth63/3", + "Eth63/4" + ] + } + }, + "Ethernet505": { + "index": "63,63,63,63,63,63,63,63", + "lanes": "465,466,467,468,469,470,471,472", + "breakout_modes": { + "1x800G": [ + "Eth64" + ], + "2x400G": [ + "Eth64/1", + "Eth64/2" + ], + "4x200G": [ + "Eth64/1", + "Eth64/2", + "Eth64/3", + "Eth64/4" + ] + } + }, + "Ethernet513": { + "index": "64", + "lanes": "513", + "breakout_modes": { + "1x25G": [ + "Eth65" + ] + } + }, + "Ethernet515": { + "index": "65", + "lanes": "515", + "breakout_modes": { + "1x25G": [ + "Eth66" + ] + } + } + } +} \ No newline at end of file diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_asic b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_asic new file mode 100644 index 000000000000..960467652765 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_asic @@ -0,0 +1 @@ +broadcom diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_components.json b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_components.json new file mode 100644 index 000000000000..fa01608f8972 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_components.json @@ -0,0 +1,18 @@ +{ + "chassis": { + "M2-W6940-64OC": { + "component": { + "CPU_CPLD": { }, + "CONNECT_CPLD": { }, + "MAC_CPLDA": { }, + "MAC_CPLDB": { }, + "MAC_CPLDC": { }, + "MGMT_CPLD": { }, + "FAN_CPLD": { }, + "MAC_FPGA": { }, + "BIOS": { } + } + } + } +} + diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_env.conf b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_env.conf new file mode 100644 index 000000000000..fc119184d5c1 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/platform_env.conf @@ -0,0 +1,2 @@ +is_ltsw_chip=1 +SYNCD_SHM_SIZE=1g diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/sfputil.py b/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/sfputil.py new file mode 100644 index 000000000000..c26bc0c53f61 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/sfputil.py @@ -0,0 +1,376 @@ +# sfputil.py +# +# Platform-specific SFP transceiver interface for SONiC +# + +try: + import time + import os + import traceback + import subprocess + from ctypes import create_string_buffer + from sonic_sfp.sfputilbase import SfpUtilBase + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom +except ImportError as e: + raise ImportError("%s - required module not found" % str(e)) + +class SfpUtil(SfpUtilBase): + """Platform-specific SfpUtil class""" + + PORT_START = 0 + PORT_END = 65 + PORTS_IN_BLOCK = 66 + + EEPROM_OFFSET = 106 + SFP_DEVICE_TYPE = "optoe2" + QSFP_DEVICE_TYPE = "optoe1" + QSFP_DD_DEVICE_TYPE = "optoe3" + I2C_MAX_ATTEMPT = 3 + + OPTOE_TYPE1 = 1 + OPTOE_TYPE2 = 2 + OPTOE_TYPE3 = 3 + + SFP_STATUS_INSERTED = '1' + SFP_STATUS_REMOVED = '0' + + _port_to_eeprom_mapping = {} + port_to_i2cbus_mapping ={} + port_dict = {} + + qsfp_ports_list = [] + qsfp_dd_ports_list = [] + + @property + def port_start(self): + return self.PORT_START + + @property + def port_end(self): + return self.PORT_END + + @property + def qsfp_ports(self): + return self.qsfp_ports_list + + @property + def qsfp_dd_ports(self): + return self.qsfp_dd_ports_list + + @property + def port_to_eeprom_mapping(self): + return self._port_to_eeprom_mapping + + def __init__(self): + for x in range(self.PORT_START, self.PORTS_IN_BLOCK-2): + self.port_to_i2cbus_mapping[x] = (x + self.EEPROM_OFFSET) + self.port_to_i2cbus_mapping[64] = 59 + self.port_to_i2cbus_mapping[65] = 60 + self.update_ports_list() + + SfpUtilBase.__init__(self) + + def _sfp_read_file_path(self, file_path, offset, num_bytes): + attempts = 0 + while attempts < self.I2C_MAX_ATTEMPT: + try: + file_path.seek(offset) + read_buf = file_path.read(num_bytes) + except: + attempts += 1 + time.sleep(0.05) + else: + return True, read_buf + return False, None + + def _sfp_eeprom_present(self, sysfs_sfp_i2c_client_eeprompath, offset): + """Tries to read the eeprom file to determine if the + device/sfp is present or not. If sfp present, the read returns + valid bytes. If not, read returns error 'Connection timed out""" + + if not os.path.exists(sysfs_sfp_i2c_client_eeprompath): + return False + else: + with open(sysfs_sfp_i2c_client_eeprompath, "rb", buffering=0) as sysfsfile: + rv, buf = self._sfp_read_file_path(sysfsfile, offset, 1) + return rv + + def _add_new_sfp_device(self, sysfs_sfp_i2c_adapter_path, devaddr, devtype): + try: + sysfs_nd_path = "%s/new_device" % sysfs_sfp_i2c_adapter_path + + # Write device address to new_device file + nd_file = open(sysfs_nd_path, "w") + nd_str = "%s %s" % (devtype, hex(devaddr)) + nd_file.write(nd_str) + nd_file.close() + + except Exception as err: + print("Error writing to new device file: %s" % str(err)) + return 1 + else: + return 0 + + def _get_port_eeprom_path(self, port_num, devid): + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + if port_num in self.port_to_eeprom_mapping.keys(): + sysfs_sfp_i2c_client_eeprom_path = self.port_to_eeprom_mapping[port_num] + else: + sysfs_i2c_adapter_base_path = "/sys/class/i2c-adapter" + + i2c_adapter_id = self._get_port_i2c_adapter_id(port_num) + if i2c_adapter_id is None: + print("Error getting i2c bus num") + return None + + # Get i2c virtual bus path for the sfp + sysfs_sfp_i2c_adapter_path = "%s/i2c-%s" % (sysfs_i2c_adapter_base_path, + str(i2c_adapter_id)) + + # If i2c bus for port does not exist + if not os.path.exists(sysfs_sfp_i2c_adapter_path): + print("Could not find i2c bus %s. Driver not loaded?" % sysfs_sfp_i2c_adapter_path) + return None + + sysfs_sfp_i2c_client_path = "%s/%s-00%s" % (sysfs_sfp_i2c_adapter_path, + str(i2c_adapter_id), + hex(devid)[-2:]) + + # If sfp device is not present on bus, Add it + if not os.path.exists(sysfs_sfp_i2c_client_path): + if port_num in self.qsfp_dd_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DD_DEVICE_TYPE) + elif port_num in self.qsfp_ports: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.QSFP_DEVICE_TYPE) + else: + ret = self._add_new_sfp_device( + sysfs_sfp_i2c_adapter_path, devid, self.SFP_DEVICE_TYPE) + if ret != 0: + print("Error adding sfp device") + return None + + sysfs_sfp_i2c_client_eeprom_path = "%s/eeprom" % sysfs_sfp_i2c_client_path + + return sysfs_sfp_i2c_client_eeprom_path + + def _read_eeprom_specific_bytes(self, sysfsfile_eeprom, offset, num_bytes): + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append("0x00") + + rv, raw = self._sfp_read_file_path(sysfsfile_eeprom, offset, num_bytes) + if rv == False: + return None + + try: + if len(raw) == 0: + return None + for n in range(0, num_bytes): + eeprom_raw[n] = hex(raw[n])[2:].zfill(2) + except: + return None + + return eeprom_raw + + def get_eeprom_dom_raw(self, port_num): + if port_num in self.qsfp_ports: + # QSFP DOM EEPROM is also at addr 0x50 and thus also stored in eeprom_ifraw + return None + else: + # Read dom eeprom at addr 0x51 + return self._read_eeprom_devid(port_num, self.IDENTITY_EEPROM_ADDR, 256) + + 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 + cmd = "cat /sys/s3ip/transceiver/eth{}/present".format(str(port_num + 1)) + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + return False + if output == "1": + return True + return False + + def check_is_qsfpdd(self, port_num): + try: + if self.get_presence(port_num) == False: + return False + + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, 0, 1) + if eeprom_raw is None: + return False + # according to sff-8024 A0h Byte 0 is '1e','18' or '19' means the transceiver is qsfpdd, + if (eeprom_raw[0] == '1e' or eeprom_raw[0] == '18' or eeprom_raw[0] == '19'): + return True + except Exception as e: + print(traceback.format_exc()) + + return False + + def check_optoe_type(self, port_num, optoe_type): + if self.get_presence(port_num) == False: + return True + try: + eeprom_path = self._get_port_eeprom_path(port_num, 0x50) + dev_class_path = '/sys/bus/i2c/devices/i2c-{0}/{0}-0050/dev_class' + i2c_path = dev_class_path.format(str(self.port_to_i2cbus_mapping[port_num])) + cmd = "cat " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + if int(output) != optoe_type: + cmd = "echo " + str(optoe_type) + " > " + i2c_path + ret, output = subprocess.getstatusoutput(cmd) + if ret != 0: + print("cmd: %s execution fail, output:%s" % (cmd, output)) + return False + return True + + except Exception as e: + print(traceback.format_exc()) + return False + + def update_ports_list(self): + self.qsfp_ports_list = [] + self.qsfp_dd_ports_list = [] + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + if (self.check_is_qsfpdd(x)): + self.qsfp_dd_ports_list.append(x) + else: + self.qsfp_ports_list.append(x) + + def get_low_power_mode(self, port_num): + # Check for invalid port_num + + return True + + def set_low_power_mode(self, port_num, lpmode): + # Check for invalid port_num + + return True + + def reset(self, port_num): + # Check for invalid port_num + if port_num < self.port_start or port_num > self.port_end: + return False + + return True + + def get_transceiver_change_event(self, timeout=0): + + start_time = time.time() + current_port_dict = {} + forever = False + + if timeout == 0: + forever = True + elif timeout > 0: + timeout = timeout / float(1000) # Convert to secs + else: + print ("get_transceiver_change_event:Invalid timeout value", timeout) + return False, {} + + end_time = start_time + timeout + if start_time > end_time: + print ('get_transceiver_change_event:' \ + 'time wrap / invalid timeout value', timeout) + + return False, {} # Time wrap or possibly incorrect timeout + + while timeout >= 0: + # Check for OIR events and return updated port_dict + for x in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(x): + current_port_dict[x] = self.SFP_STATUS_INSERTED + else: + current_port_dict[x] = self.SFP_STATUS_REMOVED + if (current_port_dict == self.port_dict): + if forever: + time.sleep(1) + else: + timeout = end_time - time.time() + if timeout >= 1: + time.sleep(1) # We poll at 1 second granularity + else: + if timeout > 0: + time.sleep(timeout) + self.update_ports_list() + return True, {} + else: + # Update reg value + self.update_ports_list() + self.port_dict = current_port_dict + return True, self.port_dict + print ("get_transceiver_change_event: Should not reach here.") + return False, {} + + def _twos_comp(self, num, bits): + try: + if ((num & (1 << (bits - 1))) != 0): + num = num - (1 << bits) + return num + except: + return 0 + + def get_highest_temperature(self): + offset = 0 + hightest_temperature = -9999 + + presence_flag = False + read_eeprom_flag = False + temperature_valid_flag = False + + for port in range(self.PORT_START, self.PORTS_IN_BLOCK): + if self.get_presence(port) == False: + continue + + presence_flag = True + + if port in self.qsfp_dd_ports: + offset = 14 + elif port in self.qsfp_ports: + offset = 22 + else: + offset = 96 + + eeprom_path = self._get_port_eeprom_path(port, 0x50) + try: + with open(eeprom_path, mode="rb", buffering=0) as eeprom: + read_eeprom_flag = True + eeprom_raw = self._read_eeprom_specific_bytes(eeprom, offset, 2) + if len(eeprom_raw) != 0: + msb = int(eeprom_raw[0], 16) + lsb = int(eeprom_raw[1], 16) + + result = (msb << 8) | (lsb & 0xff) + result = self._twos_comp(result, 16) + result = float(result / 256.0) + if -50 <= result <= 200: + temperature_valid_flag = True + if hightest_temperature < result: + hightest_temperature = result + except Exception as e: + pass + + # all port not presence + if presence_flag == False: + hightest_temperature = -10000 + + # all port read eeprom fail + elif read_eeprom_flag == False: + hightest_temperature = -9999 + + # all port temperature invalid + elif read_eeprom_flag == True and temperature_valid_flag == False: + hightest_temperature = -10000 + + hightest_temperature = round(hightest_temperature, 2) + + return hightest_temperature diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/ssd_util.py b/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/ssd_util.py new file mode 100644 index 000000000000..e8cf2e1a7cbc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/plugins/ssd_util.py @@ -0,0 +1,318 @@ +# +# ssd_util.py +# +# Generic implementation of the SSD health API +# SSD models supported: +# - InnoDisk +# - StorFly +# - Virtium + +try: + import re + import os + import subprocess + from sonic_platform_base.sonic_storage.storage_base import StorageBase +except ImportError as e: + raise ImportError (str(e) + "- required module not found") + +SMARTCTL = "smartctl {} -a" +INNODISK = "iSmart -d {}" +VIRTIUM = "SmartCmd -m {}" +DISK_LIST_CMD = "fdisk -l -o Device" +DISK_FREE_CMD = "df -h" +MOUNT_CMD = "mount" + +NOT_AVAILABLE = "N/A" +PE_CYCLE = 3000 +FAIL_PERCENT = 95 + +# Set Vendor Specific IDs +INNODISK_HEALTH_ID = 169 +INNODISK_TEMPERATURE_ID = 194 + +class SsdUtil(StorageBase): + """ + Generic implementation of the SSD health API + """ + model = NOT_AVAILABLE + serial = NOT_AVAILABLE + firmware = NOT_AVAILABLE + temperature = NOT_AVAILABLE + health = NOT_AVAILABLE + remaining_life = NOT_AVAILABLE + sata_rate = NOT_AVAILABLE + ssd_info = NOT_AVAILABLE + vendor_ssd_info = NOT_AVAILABLE + + def __init__(self, diskdev): + self.vendor_ssd_utility = { + "Generic" : { "utility" : SMARTCTL, "parser" : self.parse_generic_ssd_info }, + "InnoDisk" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "M.2" : { "utility" : INNODISK, "parser" : self.parse_innodisk_info }, + "StorFly" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info }, + "Virtium" : { "utility" : VIRTIUM, "parser" : self.parse_virtium_info } + } + + """ + The dict model_attr keys relate the vendors + LITEON : "ER2-GD","AF2MA31DTDLT" + Intel : "SSDSCKKB" + SMI : "SM619GXC" + samsung: "MZNLH" + ADATA : "IM2S3134N" + """ + self.model_attr = { + "ER2-GD" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "AF2MA31DTDLT" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" }, + "SSDSCK" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n233\s+(.+?)\n" }, + "SM619GXC" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n169\s+(.+?)\n" }, + "MZNLH" : { "temperature" : "\n190\s+(.+?)\n", "remainingLife" : "\n245\s+(.+?)\n" }, + "IM2S3134N" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n231\s+(.+?)\n" }, + "MTFDDAV240TCB-1AR1ZABAA" : { "temperature" : "\n194\s+(.+?)\n", "remainingLife" : "\n202\s+(.+?)\n" } + } + + self.key_list = list(self.model_attr.keys()) + self.attr_info_rule = "[\s\S]*SMART Attributes Data Structure revision number: 1|SMART Error Log Version[\s\S]*" + self.dev = diskdev + # Generic part + self.fetch_generic_ssd_info(diskdev) + self.parse_generic_ssd_info() + self.fetch_vendor_ssd_info(diskdev, "Generic") + + # Known vendor part + if self.model: + model_short = self.model.split()[0] + if model_short in self.vendor_ssd_utility: + self.fetch_vendor_ssd_info(diskdev, model_short) + self.parse_vendor_ssd_info(model_short) + else: + # No handler registered for this disk model + pass + else: + # Failed to get disk model + self.model = "Unknown" + + def _execute_shell(self, cmd): + process = subprocess.Popen(cmd.split(), universal_newlines=True, stdout=subprocess.PIPE) + output, error = process.communicate() + exit_code = process.returncode + if exit_code: + return None + return output + + def _parse_re(self, pattern, buffer): + res_list = re.findall(pattern, str(buffer)) + return res_list[0] if res_list else NOT_AVAILABLE + + def fetch_generic_ssd_info(self, diskdev): + self.ssd_info = self._execute_shell(self.vendor_ssd_utility["Generic"]["utility"].format(diskdev)) + + # Health and temperature values may be overwritten with vendor specific data + def parse_generic_ssd_info(self): + if "nvme" in self.dev: + self.model = self._parse_re('Model Number:\s*(.+?)\n', self.ssd_info) + + health_raw = self._parse_re('Percentage Used\s*(.+?)\n', self.ssd_info) + if health_raw == NOT_AVAILABLE: + self.health = NOT_AVAILABLE + else: + health_raw = health_raw.split()[-1] + self.health = 100 - float(health_raw.strip('%')) + + temp_raw = self._parse_re('Temperature\s*(.+?)\n', self.ssd_info) + if temp_raw == NOT_AVAILABLE: + self.temperature = NOT_AVAILABLE + else: + temp_raw = temp_raw.split()[-2] + self.temperature = float(temp_raw) + else: + self.model = self._parse_re('Device Model:\s*(.+?)\n', self.ssd_info) + model_key = "" + for key in self.key_list: + if re.search(key, self.model): + model_key = key + break + if model_key != "": + self.remaining_life = self._parse_re(self.model_attr[model_key]["remainingLife"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[2] + self.temperature = self._parse_re(self.model_attr[model_key]["temperature"], re.sub(self.attr_info_rule,"",self.ssd_info)).split()[8] + self.health = self.remaining_life + # Get the LITEON ssd health value by (PE CYCLE - AVG ERASE CYCLE )/(PE CYCLE) + if model_key in ["ER2-GD", "AF2MA31DTDLT"]: + avg_erase = int(self._parse_re('\n173\s+(.+?)\n' ,re.sub(self.attr_info_rule,"",self.ssd_info)).split()[-1]) + self.health = int(round((PE_CYCLE - avg_erase)/PE_CYCLE*100,0)) + if self.remaining_life != NOT_AVAILABLE and int(self.remaining_life) < FAIL_PERCENT: + self.remaining_life = "Fail" + self.sata_rate = self._parse_re('SATA Version is:.*current: (.+?)\)\n', self.ssd_info) + self.serial = self._parse_re('Serial Number:\s*(.+?)\n', self.ssd_info) + self.firmware = self._parse_re('Firmware Version:\s*(.+?)\n', self.ssd_info) + + def parse_innodisk_info(self): + if self.vendor_ssd_info: + self.health = self._parse_re('Health:\s*(.+?)%', self.vendor_ssd_info) + self.temperature = self._parse_re('Temperature\s*\[\s*(.+?)\]', self.vendor_ssd_info) + else: + if self.health == NOT_AVAILABLE: + health_raw = self.parse_id_number(INNODISK_HEALTH_ID) + self.health = health_raw.split()[-1] + if self.temperature == NOT_AVAILABLE: + temp_raw = self.parse_id_number(INNODISK_TEMPERATURE_ID) + self.temperature = temp_raw.split()[-6] + + def parse_virtium_info(self): + if self.vendor_ssd_info: + self.temperature = self._parse_re('Temperature_Celsius\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + nand_endurance = self._parse_re('NAND_Endurance\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + avg_erase_count = self._parse_re('Average_Erase_Count\s*\d*\s*(\d+?)\s+', self.vendor_ssd_info) + try: + self.health = 100 - (float(avg_erase_count) * 100 / float(nand_endurance)) + except (ValueError, ZeroDivisionError): + # Invalid avg_erase_count or nand_endurance. + pass + + def fetch_vendor_ssd_info(self, diskdev, model): + self.vendor_ssd_info = self._execute_shell(self.vendor_ssd_utility[model]["utility"].format(diskdev)) + + def parse_vendor_ssd_info(self, model): + self.vendor_ssd_utility[model]["parser"]() + + def check_readonly2(self, partition, filesystem): + # parse mount cmd output info + mount_info = self._execute_shell(MOUNT_CMD) + for line in mount_info.split('\n'): + column_list = line.split() + if line == '': + continue + if column_list[0] == partition and column_list[2] == filesystem: + if column_list[5].split(',')[0][1:] == "ro": + return partition + else: + return NOT_AVAILABLE + return NOT_AVAILABLE + + def check_readonly(self, partition, filesystem): + ret = os.access(filesystem, os.W_OK) + if ret == False: + return partition + else: + return NOT_AVAILABLE + + def get_health(self): + """ + Retrieves current disk health in percentages + + Returns: + A float number of current ssd health + e.g. 83.5 + """ + if self.health == 'N/A': + return "NA" + else: + return float(self.health) + + def get_temperature(self): + """ + Retrieves current disk temperature in Celsius + + Returns: + A float number of current temperature in Celsius + e.g. 40.1 + """ + if self.temperature == 'N/A': + return 'NA' + else: + return float(self.temperature) + + def get_model(self): + """ + Retrieves model for the given disk device + + Returns: + A string holding disk model as provided by the manufacturer + """ + return self.model + + def get_firmware(self): + """ + Retrieves firmware version for the given disk device + + Returns: + A string holding disk firmware version as provided by the manufacturer + """ + return self.firmware + + def get_serial(self): + """ + Retrieves serial number for the given disk device + + Returns: + A string holding disk serial number as provided by the manufacturer + """ + return self.serial + def get_sata_rate(self): + """ + Retrieves SATA rate for the given disk device + Returns: + A string holding current SATA rate as provided by the manufacturer + """ + return self.sata_rate + def get_remaining_life(self): + """ + Retrieves remaining life for the given disk device + Returns: + A string holding disk remaining life as provided by the manufacturer + """ + return self.remaining_life + def get_vendor_output(self): + """ + Retrieves vendor specific data for the given disk device + + Returns: + A string holding some vendor specific disk information + """ + return self.vendor_ssd_info + + def parse_id_number(self, id): + return self._parse_re('{}\s*(.+?)\n'.format(id), self.ssd_info) + + def get_readonly_partition(self): + """ + Check the partition mount filesystem is readonly status,then output the result. + Returns: + The readonly partition list + """ + + ro_partition_list = [] + partition_list = [] + + # parse fdisk cmd output info + disk_info = self._execute_shell(DISK_LIST_CMD) + begin_flag = False + for line in disk_info.split('\n'): + if line == "Device": + begin_flag = True + continue + if begin_flag: + if line != "": + partition_list.append(line) + else: + break + + # parse df cmd output info + disk_free = self._execute_shell(DISK_FREE_CMD) + disk_dict = {} + line_num = 0 + for line in disk_free.split('\n'): + line_num = line_num + 1 + if line_num == 1 or line == "": + continue + column_list = line.split() + disk_dict[column_list[0]] = column_list[5] + + # get partition which is readonly + for partition in partition_list: + if partition in disk_dict: + ret = self.check_readonly(partition, disk_dict[partition]) + if (ret != NOT_AVAILABLE): + ro_partition_list.append(ret) + + return ro_partition_list diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/pmon_daemon_control.json b/device/micas/x86_64-micas_m2-w6940-64oc-r0/pmon_daemon_control.json new file mode 100644 index 000000000000..94592fa8cebc --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/pmon_daemon_control.json @@ -0,0 +1,3 @@ +{ + "skip_ledd": true +} diff --git a/device/micas/x86_64-micas_m2-w6940-64oc-r0/postinit_cmd_file.soc b/device/micas/x86_64-micas_m2-w6940-64oc-r0/postinit_cmd_file.soc new file mode 100644 index 000000000000..0f7f6bfea0c5 --- /dev/null +++ b/device/micas/x86_64-micas_m2-w6940-64oc-r0/postinit_cmd_file.soc @@ -0,0 +1,4 @@ +led load /usr/share/sonic/platform/custom_led.bin +led auto on +led start +linkscan SwPortBitMap=xe,ce,cd,d3c \ No newline at end of file diff --git a/src/libnl3/debian/patches/series b/device/micas/x86_64-micas_m2-w6940-64oc-r0/system_health_monitoring_config.json old mode 100644 new mode 100755 similarity index 100% rename from src/libnl3/debian/patches/series rename to device/micas/x86_64-micas_m2-w6940-64oc-r0/system_health_monitoring_config.json diff --git a/device/netberg/x86_64-netberg_aurora_715-r0/platform_asic b/device/netberg/x86_64-netberg_aurora_715-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/netberg/x86_64-netberg_aurora_715-r0/platform_asic +++ b/device/netberg/x86_64-netberg_aurora_715-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.md5 b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.md5 index d38f07fac66d..118ea62d5a49 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.md5 +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.md5 @@ -1 +1 @@ -f3d3345bef9c6ac4eea19c6170e92970 \ No newline at end of file +7333f3669bbbd18bcc3890028d7afb39 \ No newline at end of file diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.xml b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.xml index 6f615816bf42..580801234732 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.xml +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-Board-AC5X-xb.xml @@ -1,5 +1,5 @@ - + @@ -148,96 +148,40 @@ No Phy 0 - - alaska-88E1543 - Specifies PHY identifier 88E1543, used for Combo ports. - 1 - - - alaska-88E1545 - Specifies PHY identifier 88E1545, used for Copper GE with MAC on PHY support. - 2 - alaska-88E1680 Specifies PHY identifier 88E1680, used for Copper with speeds of 10M/100M/1G. - 3 - - - alaska-88E151X - Specifies PHY identifier 88E151X, used for Copper (HW supports combo and fiber). - 4 - - - alaska-88E3140 - Specifies PHY identifier 88E3140, used for Copper with speeds of 100M/1G/10G. -Uses with FW SolarFlare next generation. - 5 - - - alaska-88E3240 - Specifies PHY identifier 88E3240, used for Copper with speeds of 100M/1G/10G. -Uses with FW, SolarFlare next generation. - 6 - - - alaska-88E3680 - Specifies PHY identifier 88E3680, used for Octal Copper 100M. - 7 - - - alaska-88E3220 - Specifies PHY identifier 88E3220, used for Combo port with speeds of 100M/1G/10G. -Uses FW, SolarFlare next generation. - 8 - - - alaska-88E1680L - Specifies PHY identifier 88E1680L, used for Copper with speeds of 10M/100M/1G. - 9 - - - alaska-88E33X0 - Specifies PHY identifier 88E33X0, used for MGIG Combo. - 10 - - - alaska-88E1548 - Specifies PHY identifier 88E1548, used for Fiber GE. - 11 - - - alaska-88E20X0 - Specifies PHY identifier 88E20X0, used for Copper with speeds of 10M/100M/1G/2.5G/5G. - 12 - - - alaska-88E1512 - Specifies PHY identifier 88E1512, used for Copper with speeds of 10M/100M/1G. - 13 - - - alaska-88E2180 - Specifies PHY identifier 88E2180, used for Copper with speeds of 10M/100M/1G/2.5G/5G. - 14 + 1 alaska-88E1780 Specifies PHY identifier 88E1780, Integrated Octal 10/100/1000 Mbps Energy Efficient Ethernet Transceiver - 15 + 2 alaska-88E2540 Specifies PHY identifier 88E2540, 4 ports 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver with IEEE 1588v2 PTP Support - 16 + 3 alaska-88E2580 - Specifies PHY identifier 88E12580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver + Specifies PHY identifier 88E2580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver with IEEE 1588v2 PTP Support - 17 + 4 + + + alaska-88E2780 + Specifies PHY identifier 88E2780, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 5 + + + alaska-MVCUE1786 + Specifies PHY identifier alaska V MV-CUE 1786, Octal 100/1000BASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 6 @@ -699,6 +643,20 @@ lowercase characters. 2 + + mpp-num-type + uint8 + Specifies the MPP pin number. + 0 + 63 + + + mpp-select-type + uint8 + Specifies the MPP pin value. + 0 + 15 + ASIC_AC5X AC5X-xb diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.md5 b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.md5 index 1d7a5566018a..40176ed8e3f3 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.md5 +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.md5 @@ -1 +1 @@ -4ad719e69b522db7ee969da2894cb04a \ No newline at end of file +1f97e3150eec3a7ee6f56f51f9229db3 \ No newline at end of file diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.xml b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.xml index 7789d25115e7..9e377e9cfb1e 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.xml +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-L1-AC5X-xb.xml @@ -1,7 +1,27 @@ - + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + interface-mode-type enumeration @@ -479,6 +499,26 @@ 5 + + phy-serdes-type + enumeration + Phy Serdes Type + + NA + No serdes + 0 + + + COMPHY + COMPHY + 1 + + + COMPHY_C28G + COMPHY_C28G + 2 + + port-interconnect-profile-type enumeration @@ -500,6 +540,7 @@ + ASIC_AC5X 1000MR1 @@ -549,6 +590,7 @@ 0 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -566,11 +608,18 @@ peak 1 + + true + 0 + 25 + 0 + 1 COMPHY_C28G + NA profile_default 1000MR1 false @@ -578,6 +627,7 @@ 2 COMPHY_C28G + NA profile_default 1000MR1 false @@ -585,6 +635,7 @@ 3 COMPHY_C28G + NA profile_default 1000MR1 false @@ -592,6 +643,7 @@ 4 COMPHY_C28G + NA profile_default 1000MR1 false @@ -599,6 +651,7 @@ 5 COMPHY_C28G + NA profile_default 1000MR1 false @@ -606,6 +659,7 @@ 6 COMPHY_C28G + NA profile_default 1000MR1 false @@ -613,6 +667,7 @@ 7 COMPHY_C28G + NA profile_default 1000MR1 false @@ -620,6 +675,7 @@ 8 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -637,11 +693,18 @@ peak 5 + + true + 0 + 24 + 0 + 9 COMPHY_C28G + NA profile_default 1000MR1 false @@ -649,6 +712,7 @@ 10 COMPHY_C28G + NA profile_default 1000MR1 false @@ -656,6 +720,7 @@ 11 COMPHY_C28G + NA profile_default 1000MR1 false @@ -663,6 +728,7 @@ 12 COMPHY_C28G + NA profile_default 1000MR1 false @@ -670,6 +736,7 @@ 13 COMPHY_C28G + NA profile_default 1000MR1 false @@ -677,6 +744,7 @@ 14 COMPHY_C28G + NA profile_default 1000MR1 false @@ -684,6 +752,7 @@ 15 COMPHY_C28G + NA profile_default 1000MR1 false @@ -691,6 +760,7 @@ 16 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -708,11 +778,18 @@ peak 9 + + true + 0 + 24 + 0 + 17 COMPHY_C28G + NA profile_default 1000MR1 false @@ -720,6 +797,7 @@ 18 COMPHY_C28G + NA profile_default 1000MR1 false @@ -727,6 +805,7 @@ 19 COMPHY_C28G + NA profile_default 1000MR1 false @@ -734,6 +813,7 @@ 20 COMPHY_C28G + NA profile_default 1000MR1 false @@ -741,6 +821,7 @@ 21 COMPHY_C28G + NA profile_default 1000MR1 false @@ -748,6 +829,7 @@ 22 COMPHY_C28G + NA profile_default 1000MR1 false @@ -755,6 +837,7 @@ 23 COMPHY_C28G + NA profile_default 1000MR1 false @@ -762,6 +845,7 @@ 24 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -779,11 +863,18 @@ peak 10 + + true + 0 + 24 + 0 + 25 COMPHY_C28G + NA profile_default 1000MR1 false @@ -791,6 +882,7 @@ 26 COMPHY_C28G + NA profile_default 1000MR1 false @@ -798,6 +890,7 @@ 27 COMPHY_C28G + NA profile_default 1000MR1 false @@ -805,6 +898,7 @@ 28 COMPHY_C28G + NA profile_default 1000MR1 false @@ -812,6 +906,7 @@ 29 COMPHY_C28G + NA profile_default 1000MR1 false @@ -819,6 +914,7 @@ 30 COMPHY_C28G + NA profile_default 1000MR1 false @@ -826,6 +922,7 @@ 31 COMPHY_C28G + NA profile_default 1000MR1 false @@ -833,6 +930,7 @@ 32 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -850,11 +948,18 @@ peak 14 + + true + 0 + 23 + 0 + 33 COMPHY_C28G + NA profile_default 1000MR1 false @@ -862,6 +967,7 @@ 34 COMPHY_C28G + NA profile_default 1000MR1 false @@ -869,6 +975,7 @@ 35 COMPHY_C28G + NA profile_default 1000MR1 false @@ -876,6 +983,7 @@ 36 COMPHY_C28G + NA profile_default 1000MR1 false @@ -883,6 +991,7 @@ 37 COMPHY_C28G + NA profile_default 1000MR1 false @@ -890,6 +999,7 @@ 38 COMPHY_C28G + NA profile_default 1000MR1 false @@ -897,6 +1007,7 @@ 39 COMPHY_C28G + NA profile_default 1000MR1 false @@ -904,6 +1015,7 @@ 40 COMPHY_C28G + COMPHY profile_default 1000MR1 false @@ -921,11 +1033,18 @@ peak 11 + + true + 0 + 23 + 0 + 41 COMPHY_C28G + NA profile_default 1000MR1 false @@ -933,6 +1052,7 @@ 42 COMPHY_C28G + NA profile_default 1000MR1 false @@ -940,6 +1060,7 @@ 43 COMPHY_C28G + NA profile_default 1000MR1 false @@ -947,6 +1068,7 @@ 44 COMPHY_C28G + NA profile_default 1000MR1 false @@ -954,6 +1076,7 @@ 45 COMPHY_C28G + NA profile_default 1000MR1 false @@ -961,6 +1084,7 @@ 46 COMPHY_C28G + NA profile_default 1000MR1 false @@ -968,6 +1092,7 @@ 47 COMPHY_C28G + NA profile_default 1000MR1 false @@ -975,6 +1100,7 @@ 48 COMPHY_C28G + NA profile_default 10GR1 false @@ -997,6 +1123,7 @@ 49 COMPHY_C28G + NA profile_default 10GR1 false @@ -1019,6 +1146,7 @@ 50 COMPHY_C28G + NA profile_default 10GR1 false @@ -1041,6 +1169,7 @@ 51 COMPHY_C28G + NA profile_default 10GR1 false diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.md5 b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.md5 index 5c1c480ebb3e..fc68f9ae33ba 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.md5 +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.md5 @@ -1 +1 @@ -7ca6eaf67da8ee4c5b2a4f480db8919f \ No newline at end of file +306e882317520250db0161d1cf4c8a3b \ No newline at end of file diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.xml b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.xml index 13b344d6b964..f15449bd5e26 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.xml +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/ASK-PP-AC5X-xb.xml @@ -1,5 +1,5 @@ - + diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.md5 b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.md5 index 7d2cfc524b98..3d57599d00fc 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.md5 +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.md5 @@ -1 +1 @@ -751d5fb74a0861240aa86afad8ad13ef \ No newline at end of file +05614f693742dfda5c7140c186516f0c \ No newline at end of file diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.xml b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.xml index 91246fc35848..be2b470f78cc 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.xml +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/Nokia-7215-A1/SAI-AC5X-xb.xml @@ -1,5 +1,5 @@ - + @@ -444,6 +444,10 @@ 0 ROUTE_BLACKHOLE + + Disabled + Disabled + SAI_LOG_SYSLOG diff --git a/device/nokia/arm64-nokia_ixs7215_52xb-r0/platform.json b/device/nokia/arm64-nokia_ixs7215_52xb-r0/platform.json index 89a7a3e9ddf8..16e104341cdf 100644 --- a/device/nokia/arm64-nokia_ixs7215_52xb-r0/platform.json +++ b/device/nokia/arm64-nokia_ixs7215_52xb-r0/platform.json @@ -275,5 +275,9 @@ } ] }, - "interfaces": {} + "interfaces": {}, + "asic_sensors": { + "poll_interval": "10", + "poll_admin_status": "enable" + } } diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.md5 b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.md5 index 5422b86a598d..06fdcf8c4669 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.md5 +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.md5 @@ -1 +1 @@ -d7069397e7466efe2bd6cf4a952b56db \ No newline at end of file +7b9a2fb849b5bd8caa70e2e7cc5aca02 \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.xml b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.xml index efb1432c65de..ee9245c49aa8 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.xml +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-Board-M0-48x1G-4x10G.xml @@ -1,5 +1,5 @@ - + @@ -148,96 +148,34 @@ No Phy 0 - - alaska-88E1543 - Specifies PHY identifier 88E1543, used for Combo ports. - 1 - - - alaska-88E1545 - Specifies PHY identifier 88E1545, used for Copper GE with MAC on PHY support. - 2 - alaska-88E1680 Specifies PHY identifier 88E1680, used for Copper with speeds of 10M/100M/1G. - 3 - - - alaska-88E151X - Specifies PHY identifier 88E151X, used for Copper (HW supports combo and fiber). - 4 - - - alaska-88E3140 - Specifies PHY identifier 88E3140, used for Copper with speeds of 100M/1G/10G. -Uses with FW SolarFlare next generation. - 5 - - - alaska-88E3240 - Specifies PHY identifier 88E3240, used for Copper with speeds of 100M/1G/10G. -Uses with FW, SolarFlare next generation. - 6 - - - alaska-88E3680 - Specifies PHY identifier 88E3680, used for Octal Copper 100M. - 7 - - - alaska-88E3220 - Specifies PHY identifier 88E3220, used for Combo port with speeds of 100M/1G/10G. -Uses FW, SolarFlare next generation. - 8 - - - alaska-88E1680L - Specifies PHY identifier 88E1680L, used for Copper with speeds of 10M/100M/1G. - 9 - - - alaska-88E33X0 - Specifies PHY identifier 88E33X0, used for MGIG Combo. - 10 - - - alaska-88E1548 - Specifies PHY identifier 88E1548, used for Fiber GE. - 11 - - - alaska-88E20X0 - Specifies PHY identifier 88E20X0, used for Copper with speeds of 10M/100M/1G/2.5G/5G. - 12 - - - alaska-88E1512 - Specifies PHY identifier 88E1512, used for Copper with speeds of 10M/100M/1G. - 13 - - - alaska-88E2180 - Specifies PHY identifier 88E2180, used for Copper with speeds of 10M/100M/1G/2.5G/5G. - 14 + 1 alaska-88E1780 Specifies PHY identifier 88E1780, Integrated Octal 10/100/1000 Mbps Energy Efficient Ethernet Transceiver - 15 + 2 alaska-88E2540 Specifies PHY identifier 88E2540, 4 ports 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver with IEEE 1588v2 PTP Support - 16 + 3 alaska-88E2580 - Specifies PHY identifier 88E12580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver + Specifies PHY identifier 88E2580, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver with IEEE 1588v2 PTP Support - 17 + 4 + + + alaska-88E2780 + Specifies PHY identifier 88E2780, Octal 10/100/1000/2.5G/5GBASE-T Ethernet Transceiver +with IEEE 1588v2 PTP Support + 5 @@ -699,6 +637,20 @@ lowercase characters. 2 + + mpp-num-type + uint8 + Specifies the MPP pin number. + 0 + 63 + + + mpp-select-type + uint8 + Specifies the MPP pin value. + 0 + 15 + ASIC_AC3X M0-48x1G-4x10G diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.md5 b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.md5 index a232c8381527..ad15b12a8670 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.md5 +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.md5 @@ -1 +1 @@ -bf932ba262c96acdfe677bd5078a21d7 \ No newline at end of file +feeec405a324a0c99f1078bfad4ca512 \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.xml b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.xml index f1cc5989dddb..4dd22e0b3cdc 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.xml +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D0-48x1G-4x10G.xml @@ -1,7 +1,27 @@ - + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + interface-mode-type enumeration @@ -479,6 +499,26 @@ 5 + + phy-serdes-type + enumeration + Phy Serdes Type + + NA + No serdes + 0 + + + COMPHY + COMPHY + 1 + + + COMPHY_C28G + COMPHY_C28G + 2 + + port-interconnect-profile-type enumeration @@ -500,6 +540,7 @@ + ASIC_AC3X 1000MR1 diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.md5 b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.md5 index 2e3f0e0342dd..74bca52a8a86 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.md5 +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.md5 @@ -1 +1 @@ -bb2f27ac93e33103554948dee6f3a1f1 \ No newline at end of file +07f3a60faed5eda425dec39f7198aaaa \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.xml b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.xml index 30c2712f2a37..adaa9ebc0b70 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.xml +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-L1-M0-D1-48x1G-4x10G.xml @@ -1,7 +1,27 @@ - + + + asic-type + enumeration + ASIC Type + + ASIC_AC3X + AC3X + 0 + + + ASIC_AC5X + AC5X + 1 + + + ASIC_Falcon + FALCON + 2 + + interface-mode-type enumeration @@ -479,6 +499,26 @@ 5 + + phy-serdes-type + enumeration + Phy Serdes Type + + NA + No serdes + 0 + + + COMPHY + COMPHY + 1 + + + COMPHY_C28G + COMPHY_C28G + 2 + + port-interconnect-profile-type enumeration @@ -500,6 +540,7 @@ + ASIC_AC3X 1000MR1 diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.md5 b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.md5 index 410763693907..4e2aeb92348d 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.md5 +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.md5 @@ -1 +1 @@ -411f788b1a253e5ad2e0e9026d0bb1aa \ No newline at end of file +da1aa11a8d24bf8e2d3eae6fb57958a9 \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.xml b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.xml index fe782eb5ce97..05996a7be9d9 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.xml +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/ASK-PP-M0-48x1G-4x10G.xml @@ -1,5 +1,5 @@ - + diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.md5 b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.md5 index 97def7a90484..1b371a8aceeb 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.md5 +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.md5 @@ -1 +1 @@ -e56672c96f9a00b3652bdbe8a4ec4a23 \ No newline at end of file +70389c5db569f7a77c09393a4df21603 \ No newline at end of file diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.xml b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.xml index 43dde6b94705..686612b88db2 100644 --- a/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.xml +++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/Nokia-7215/SAI-M0-48x1G-4x10G.xml @@ -1,5 +1,5 @@ - + diff --git a/device/nokia/x86_64-nokia_ixr7220_h4-r0/platform.json b/device/nokia/x86_64-nokia_ixr7220_h4-r0/platform.json index 29e11388382c..4c0acf7eb890 100644 --- a/device/nokia/x86_64-nokia_ixr7220_h4-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7220_h4-r0/platform.json @@ -495,5 +495,9 @@ } ] }, - "interfaces": {} + "interfaces": {}, + "asic_sensors": { + "poll_interval": "10", + "poll_admin_status": "enable" + } } diff --git a/device/nokia/x86_64-nokia_ixr7220_h4_32d-r0/platform.json b/device/nokia/x86_64-nokia_ixr7220_h4_32d-r0/platform.json index b40c5fe9498d..99562f3deb5a 100644 --- a/device/nokia/x86_64-nokia_ixr7220_h4_32d-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7220_h4_32d-r0/platform.json @@ -447,5 +447,10 @@ } ] }, - "interfaces": {} + "interfaces": {}, + + "asic_sensors": { + "poll_interval": "10", + "poll_admin_status": "enable" + } } diff --git a/device/nokia/x86_64-nokia_ixr7220_h5_64d-r0/platform.json b/device/nokia/x86_64-nokia_ixr7220_h5_64d-r0/platform.json index 63f55d3eb01a..b330c66ff380 100644 --- a/device/nokia/x86_64-nokia_ixr7220_h5_64d-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7220_h5_64d-r0/platform.json @@ -460,5 +460,9 @@ } ] }, - "interfaces": {} + "interfaces": {}, + "asic_sensors": { + "poll_interval": "10", + "poll_admin_status": "enable" + } } diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm index 6f07539f976c..010367478088 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -1267,6 +1267,7 @@ polled_irq_delay.BCM8885X=5 polled_irq_mode.BCM8885X=0 port_fec_fabric.BCM8885X=7 bcm_stat_interval.BCM8885X=1000000 +bcm_linkscan_interval=500000 port_init_cl72_256=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm index a1419db8fd64..034b80def8ed 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/jr2cp-nokia-18x100g-4x25g-config.bcm @@ -1267,6 +1267,7 @@ polled_irq_delay.BCM8885X=5 polled_irq_mode.BCM8885X=0 port_fec_fabric.BCM8885X=7 bcm_stat_interval.BCM8885X=1000000 +bcm_linkscan_interval=500000 port_init_cl72_1=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm index fa5849f4549f..2c241bcfff4a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/jr2cp-nokia-18x400g-config.bcm @@ -1268,6 +1268,7 @@ polled_irq_delay.BCM8885X=5 polled_irq_mode.BCM8885X=0 port_fec_fabric.BCM8885X=7 bcm_stat_interval.BCM8885X=1000000 +bcm_linkscan_interval=500000 port_init_cl72_1=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm index ccb87e9ad0e9..1ec4a9074523 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/jr2cp-nokia-18x400g-config.bcm @@ -1268,6 +1268,7 @@ polled_irq_delay.BCM8885X=5 polled_irq_mode.BCM8885X=0 port_fec_fabric.BCM8885X=7 bcm_stat_interval.BCM8885X=1000000 +bcm_linkscan_interval=500000 port_init_cl72_1=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json index ab881c4ccfdd..4d34218672e9 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/platform.json @@ -275,5 +275,9 @@ } ] }, - "interfaces": {} + "interfaces": {}, + "asic_sensors": { + "poll_interval": "10", + "poll_admin_status": "enable" + } } diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm index 12a0b532fd84..c9036f36c9ec 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/0/config-ramon-1-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=1 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm index 59106ba59387..8c0517292d4a 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/1/config-ramon-1-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=2 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm index a481d75a94bf..dc5a99c09533 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/10/config-ramon-6-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=11 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm index 2c315e84ac4c..12f59db6b93d 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/11/config-ramon-6-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=12 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm index 581b5d76a914..e7769dbe80af 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/12/config-ramon-7-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=13 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm index 364690e7ae40..276b576485a6 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/13/config-ramon-7-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=14 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm index d12d791c83e2..bd35d4a44eac 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/14/config-ramon-8-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=15 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm index 86d9af38e0b2..140d21415fff 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/15/config-ramon-8-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=16 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm index 0c4b5403bf51..fbcfc7a8ed07 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/2/config-ramon-2-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=3 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm index 1617c40e6ca2..8c485dffa120 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/3/config-ramon-2-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=4 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm index f905a66b2e97..7d73ac75aeec 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/4/config-ramon-3-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=5 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm index f25c8b10d2a8..95d9b4117409 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/5/config-ramon-3-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=6 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm index 5a824fcde8aa..ddbe158e4d5c 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/6/config-ramon-4-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=7 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm index d27ebd282729..26595b410621 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/7/config-ramon-4-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=8 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm index cb8307452b6a..a845cc4cb0f1 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/8/config-ramon-5-0.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=9 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm index 184d1136033e..953da5cc9245 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/Nokia-IXR7250E-SUP-10/9/config-ramon-5-1.bcm @@ -2,7 +2,8 @@ appl_enable_intr_init.BCM8879X=0 appl_param_module_id.BCM8879X=10 sai_postinit_cmd_file=/usr/share/sonic/hwsku/sai_postinit_cmd.soc -bcm_stat_interval.BCM8879X=5000000 +bcm_stat_interval.BCM8879X=15000000 +bcm_linkscan_interval=500000 bist_enable.BCM8879X=0 core_clock_speed_khz.BCM8879X=1000000 custom_feature_access_only.BCM8879X=0 diff --git a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf index 220e262f68e8..1ee5a0239d63 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf +++ b/device/nokia/x86_64-nokia_ixr7250e_sup-r0/chassisdb.conf @@ -1,4 +1,4 @@ start_chassis_db=1 chassis_db_address=10.6.0.100 lag_id_start=1 -lag_id_end=1024 +lag_id_end=1023 diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json index ef069d2e13de..f65c8d4a8cfa 100644 --- a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json @@ -3,5 +3,6 @@ "skip_psud": true, "skip_fancontrol": true, "skip_chassisd": false, - "skip_ycabled": true + "skip_ycabled": true, + "skip_xcvrd": true } diff --git a/device/supermicro/x86_64-supermicro_sse_t7132s-r0/platform_asic b/device/supermicro/x86_64-supermicro_sse_t7132s-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/supermicro/x86_64-supermicro_sse_t7132s-r0/platform_asic +++ b/device/supermicro/x86_64-supermicro_sse_t7132s-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/wistron/x86_64-wistron_6512_32r-r0/platform_asic b/device/wistron/x86_64-wistron_6512_32r-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/wistron/x86_64-wistron_6512_32r-r0/platform_asic +++ b/device/wistron/x86_64-wistron_6512_32r-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/device/wistron/x86_64-wistron_sw_to3200k-r0/platform_asic b/device/wistron/x86_64-wistron_sw_to3200k-r0/platform_asic index 84083a7415d9..a657472d7ad2 100644 --- a/device/wistron/x86_64-wistron_sw_to3200k-r0/platform_asic +++ b/device/wistron/x86_64-wistron_sw_to3200k-r0/platform_asic @@ -1 +1 @@ -innovium +marvell-teralynx diff --git a/dockers/docker-database/Dockerfile.j2 b/dockers/docker-database/Dockerfile.j2 index 6f39d0ac5f58..d9ba01360b30 100644 --- a/dockers/docker-database/Dockerfile.j2 +++ b/dockers/docker-database/Dockerfile.j2 @@ -48,5 +48,6 @@ COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["files/sysctl-net.conf", "/etc/sysctl.d/"] COPY ["files/update_chassisdb_config", "/usr/local/bin/"] COPY ["flush_unused_database", "/usr/local/bin/"] +COPY ["multi_database_config.json.j2", "/usr/share/sonic/templates/"] ENTRYPOINT ["/usr/local/bin/docker-database-init.sh"] diff --git a/dockers/docker-database/critical_processes.j2 b/dockers/docker-database/critical_processes.j2 index 1f524132e938..5bf4dbce47c6 100644 --- a/dockers/docker-database/critical_processes.j2 +++ b/dockers/docker-database/critical_processes.j2 @@ -1,5 +1,5 @@ -{% if INSTANCES %} -{% for redis_inst, redis_items in INSTANCES.items() %} +{% if INSTANCES -%} +{% for redis_inst, redis_items in INSTANCES.items() -%} program:{{ redis_inst }} -{%- endfor %} -{%- endif %} +{% endfor -%} +{% endif -%} diff --git a/dockers/docker-database/database_config.json.j2 b/dockers/docker-database/database_config.json.j2 index f37b64ee9665..b97589d3733d 100644 --- a/dockers/docker-database/database_config.json.j2 +++ b/dockers/docker-database/database_config.json.j2 @@ -23,13 +23,17 @@ "unix_socket_path": "", "persistence_for_warm_boot" : "yes" } -{% endif %}, +{% endif %} +{% if DATABASE_TYPE is defined and DATABASE_TYPE == "dpudb" %} +{% else %} + , "redis_bmp":{ "hostname" : "{{HOST_IP}}", "port" : {{BMP_DB_PORT}}, "unix_socket_path" : "/var/run/redis{{DEV}}/redis_bmp.sock", "persistence_for_warm_boot" : "yes" } +{% endif %} }, "DATABASES" : { "APPL_DB" : { @@ -135,12 +139,14 @@ "separator": ":", "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %} } -{% endif %}, - "BMP_STATE_DB" : { +{% else %} + , + "BMP_STATE_DB" : { "id" : 20, "separator": "|", "instance" : "redis_bmp" } +{% endif %} }, "VERSION" : "1.0" } diff --git a/dockers/docker-database/docker-database-init.sh b/dockers/docker-database/docker-database-init.sh index c50add1a7698..076e06396447 100755 --- a/dockers/docker-database/docker-database-init.sh +++ b/dockers/docker-database/docker-database-init.sh @@ -50,7 +50,11 @@ mkdir -p /etc/supervisor/conf.d/ if [ -f /etc/sonic/database_config$NAMESPACE_ID.json ]; then cp /etc/sonic/database_config$NAMESPACE_ID.json $REDIS_DIR/sonic-db/database_config.json else - HOST_IP=$host_ip REDIS_PORT=$redis_port DATABASE_TYPE=$DATABASE_TYPE BMP_DB_PORT=$BMP_DB_PORT j2 /usr/share/sonic/templates/database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json + if [ -f /etc/sonic/enable_multidb ]; then + HOST_IP=$host_ip REDIS_PORT=$redis_port DATABASE_TYPE=$DATABASE_TYPE BMP_DB_PORT=$BMP_DB_PORT j2 /usr/share/sonic/templates/multi_database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json + else + HOST_IP=$host_ip REDIS_PORT=$redis_port DATABASE_TYPE=$DATABASE_TYPE BMP_DB_PORT=$BMP_DB_PORT j2 /usr/share/sonic/templates/database_config.json.j2 > $REDIS_DIR/sonic-db/database_config.json + fi fi # on VoQ system, we only publish redis_chassis instance and CHASSIS_APP_DB when @@ -125,6 +129,8 @@ do else echo -n > /var/lib/$inst/dump.rdb fi + # the Redis process is operating under the 'redis' user in supervisord and make redis user own /var/lib/$inst inside db container. + chown -R redis:redis /var/lib/$inst done TZ=$(cat /etc/timezone) diff --git a/dockers/docker-database/multi_database_config.json.j2 b/dockers/docker-database/multi_database_config.json.j2 new file mode 100644 index 000000000000..26ddb006b83d --- /dev/null +++ b/dockers/docker-database/multi_database_config.json.j2 @@ -0,0 +1,192 @@ +{% set include_remote_db = (REMOTE_DB_IP is defined and REMOTE_DB_PORT is defined) %} +{ + "INSTANCES": { + "redis":{ + "hostname" : "{{HOST_IP}}", + "port" : {{REDIS_PORT}}, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis.sock", + "persistence_for_warm_boot" : "yes" + {% if DATABASE_TYPE is defined and DATABASE_TYPE != "" %} + ,"database_type": "{{DATABASE_TYPE}}" + {% endif %} + }, + "redis1": { + "hostname" : "{{HOST_IP}}", + "port" : 6378, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis1.sock", + "persistence_for_warm_boot" : "yes" + {% if DATABASE_TYPE is defined and DATABASE_TYPE != "" %} + ,"database_type": "{{DATABASE_TYPE}}" + {% endif %} + }, + "redis2": { + "hostname" : "{{HOST_IP}}", + "port" : 6377, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis2.sock", + "persistence_for_warm_boot" : "yes" + {% if DATABASE_TYPE is defined and DATABASE_TYPE != "" %} + ,"database_type": "{{DATABASE_TYPE}}" + {% endif %} + }, + "redis3": { + "hostname" : "{{HOST_IP}}", + "port" : 6376, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis3.sock", + "persistence_for_warm_boot" : "yes" + {% if DATABASE_TYPE is defined and DATABASE_TYPE != "" %} + ,"database_type": "{{DATABASE_TYPE}}" + {% endif %} + }, + "redis4": { + "hostname" : "{{HOST_IP}}", + "port" : 6375, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis4.sock", + "persistence_for_warm_boot" : "yes" + {% if DATABASE_TYPE is defined and DATABASE_TYPE != "" %} + ,"database_type": "{{DATABASE_TYPE}}" + {% endif %} + }, + "redis_chassis":{ + "hostname" : "redis_chassis.server", + "port": 6380, + "unix_socket_path": "/var/run/redis-chassis/redis_chassis.sock", + "persistence_for_warm_boot" : "yes" + } +{% if include_remote_db %} + ,"remote_redis":{ + "hostname" : "{{REMOTE_DB_IP}}", + "port" : {{REMOTE_DB_PORT}}, + "unix_socket_path": "", + "persistence_for_warm_boot" : "yes" + } +{% endif %}, + "redis_bmp":{ + "hostname" : "{{HOST_IP}}", + "port" : {{BMP_DB_PORT}}, + "unix_socket_path" : "/var/run/redis{{DEV}}/redis_bmp.sock", + "persistence_for_warm_boot" : "yes" + } + }, + "DATABASES" : { + "APPL_DB": { + "id": 0, + "separator": ":", + "instance": "redis1" + }, + "ASIC_DB": { + "id": 1, + "separator": ":", + "instance": "redis2" + }, + "COUNTERS_DB": { + "id": 2, + "separator": ":", + "instance": "redis3" + }, + "LOGLEVEL_DB": { + "id": 3, + "separator": ":", + "instance": "redis" + }, + "CONFIG_DB": { + "id": 4, + "separator": "|", + "instance": "redis" + }, + "PFC_WD_DB": { + "id": 5, + "separator": ":", + "instance": "redis3" + }, + "FLEX_COUNTER_DB": { + "id": 5, + "separator": ":", + "instance": "redis3" + }, + "STATE_DB": { + "id": 6, + "separator": "|", + "instance": "redis" + }, + "SNMP_OVERLAY_DB": { + "id": 7, + "separator": "|", + "instance": "redis" + }, + "SYSMON_DB": { + "id": 10, + "separator": "|", + "instance": "redis" + }, + "BMC_DB": { + "id": 12, + "separator": ":", + "instance": "redis4" + }, + "RESTAPI_DB": { + "id": 8, + "separator": "|", + "instance": "redis" + }, + "GB_ASIC_DB": { + "id": 9, + "separator": ":", + "instance": "redis" + }, + "GB_COUNTERS_DB": { + "id": 10, + "separator": ":", + "instance": "redis" + }, + "GB_FLEX_COUNTER_DB": { + "id": 11, + "separator": ":", + "instance": "redis" + }, + "APPL_STATE_DB": { + "id": 14, + "separator": ":", + "instance": "redis" + }, + "CHASSIS_APP_DB" : { + "id" : 12, + "separator": "|", + "instance" : "redis_chassis" + }, + "CHASSIS_STATE_DB" : { + "id" : 13, + "separator": "|", + "instance" : "redis_chassis" + } +{% if DATABASE_TYPE is defined and DATABASE_TYPE == "dpudb" %} + , + "DPU_APPL_DB" : { + "id" : 15, + "separator": ":", + "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %}, + "format": "proto" + }, + "DPU_APPL_STATE_DB" : { + "id" : 16, + "separator": "|", + "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %} + }, + "DPU_STATE_DB" : { + "id" : 17, + "separator": "|", + "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %} + }, + "DPU_COUNTERS_DB" : { + "id" : 18, + "separator": ":", + "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %} + } +{% endif %}, + "BMP_STATE_DB" : { + "id" : 20, + "separator": "|", + "instance" : "redis_bmp" + } + }, + "VERSION" : "1.0" +} diff --git a/dockers/docker-dhcp-relay/Dockerfile.j2 b/dockers/docker-dhcp-relay/Dockerfile.j2 index e7b70a954ce2..5b0dc82c314b 100644 --- a/dockers/docker-dhcp-relay/Dockerfile.j2 +++ b/dockers/docker-dhcp-relay/Dockerfile.j2 @@ -50,11 +50,14 @@ COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["critical_processes", "/etc/supervisor"] COPY ["cli", "/cli/"] -RUN mkdir -p /usr/share/sonic/templates/rsyslog_plugin - -# Copy rsyslog plugin configuration file and regexes to docker -COPY ["dhcp_relay_regex.json", "/etc/rsyslog.d/"] -COPY ["events_info.json", "/usr/share/sonic/templates/rsyslog_plugin/"] -COPY ["files/rsyslog_plugin.conf.j2", "/usr/share/sonic/templates/rsyslog_plugin/"] +{% if include_system_eventd == "y" and build_reduce_image_size != "y" %} +# Copy regex json and rsyslog_plugin.conf file into rsyslog.d +COPY ["*.json", "/etc/rsyslog.d/"] +COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"] +# Create dhcp_relay_regex.conf +RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/dhcp_relay_events.conf +RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2 +RUN rm -f /etc/rsyslog.d/events_info.json +{% endif %} ENTRYPOINT ["/usr/bin/docker_init.sh"] diff --git a/dockers/docker-dhcp-relay/docker_init.sh b/dockers/docker-dhcp-relay/docker_init.sh index 94e2ddff0622..1ff0e936ff68 100755 --- a/dockers/docker-dhcp-relay/docker_init.sh +++ b/dockers/docker-dhcp-relay/docker_init.sh @@ -21,7 +21,4 @@ chmod +x /usr/bin/wait_for_intf.sh # The docker container should start this script as PID 1, so now that supervisord is # properly configured, we exec /usr/local/bin/supervisord so that it runs as PID 1 for the # duration of the container's lifetime -export EVENTD_STATE=$(sonic-db-cli -s CONFIG_DB HGET 'FEATURE|eventd' 'state') -j2 -f json --import-env=ENVIRONMENT /usr/share/sonic/templates/rsyslog_plugin/rsyslog_plugin.conf.j2 /usr/share/sonic/templates/rsyslog_plugin/events_info.json > /etc/rsyslog.d/dhcp_relay_events.conf - exec /usr/local/bin/supervisord diff --git a/dockers/docker-fpm-frr/Dockerfile.j2 b/dockers/docker-fpm-frr/Dockerfile.j2 index e39ffdadf4cc..98c4593811f7 100644 --- a/dockers/docker-fpm-frr/Dockerfile.j2 +++ b/dockers/docker-fpm-frr/Dockerfile.j2 @@ -59,11 +59,12 @@ RUN chmod a+x /usr/bin/TSA && \ chmod a+x /usr/bin/TSC && \ chmod a+x /usr/bin/zsocket.sh -RUN mkdir -p /usr/share/sonic/templates/rsyslog_plugin - -# Copy rsyslog plugin configuration file and regexes to docker -COPY ["bgp_regex.json", "/etc/rsyslog.d/"] -COPY ["events_info.json", "/usr/share/sonic/templates/rsyslog_plugin/"] -COPY ["files/rsyslog_plugin.conf.j2", "/usr/share/sonic/templates/rsyslog_plugin/"] +{% if include_system_eventd == "y" and build_reduce_image_size != "y" %} +COPY ["*.json", "/etc/rsyslog.d/"] +COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"] +RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/bgp_events.conf +RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2 +RUN rm -f /etc/rsyslog.d/events_info.json +{% endif %} ENTRYPOINT ["/usr/bin/docker_init.sh"] diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh index fbbcee8bd66c..662a78b5adcf 100755 --- a/dockers/docker-fpm-frr/docker_init.sh +++ b/dockers/docker-fpm-frr/docker_init.sh @@ -112,7 +112,4 @@ TZ=$(cat /etc/timezone) rm -rf /etc/localtime ln -sf /usr/share/zoneinfo/$TZ /etc/localtime -export EVENTD_STATE=$(sonic-db-cli -s CONFIG_DB HGET 'FEATURE|eventd' 'state') -j2 -f json --import-env=ENVIRONMENT /usr/share/sonic/templates/rsyslog_plugin/rsyslog_plugin.conf.j2 /usr/share/sonic/templates/rsyslog_plugin/events_info.json > /etc/rsyslog.d/bgp_events.conf - exec /usr/local/bin/supervisord diff --git a/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 index da6358a00ca6..db11d662a3af 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 @@ -88,6 +88,19 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }} bgp graceful-restart select-defer-time {{ constants.bgp.graceful_restart.select_defer_time | default(45) }} {% endif %} ! +{# set bmp info #} +{% if (FEATURE is defined) and ('bmp' in FEATURE) and ('state' in FEATURE['bmp']) and (FEATURE['bmp']['state'] == 'enabled') %} +! + bmp mirror buffer-limit 4294967214 +! + bmp targets sonic-bmp + bmp stats interval 1000 + bmp monitor ipv4 unicast pre-policy + bmp monitor ipv6 unicast pre-policy + bmp connect 127.0.0.1 port 5000 min-retry 1000 max-retry 2000 +! +! +{% endif %} {# set router-id #} {% if DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' or DEVICE_METADATA['localhost']['switch_type'] == 'voq' or DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %} {% if 'bgp_router_id' in DEVICE_METADATA['localhost'] %} diff --git a/dockers/docker-fpm-frr/frr/bgpd/bgpd.spine_chassis_frontend_router.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/bgpd.spine_chassis_frontend_router.conf.j2 index 94dacbc3af78..2df0cd4a4270 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/bgpd.spine_chassis_frontend_router.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/bgpd.spine_chassis_frontend_router.conf.j2 @@ -49,7 +49,7 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }} vrf {{ vnet_name }} address-family ipv4 unicast neighbor {{ neighbor_addr }} activate neighbor {{ neighbor_addr }} soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family {% endif %} address-family l2vpn evpn diff --git a/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 index d2d2be87e7f3..0e5c7aed3a32 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/templates/internal/peer-group.conf.j2 @@ -5,6 +5,7 @@ neighbor INTERNAL_PEER_V6 peer-group {% if CONFIG_DB__DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %} neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 ttl-security hops 1 {% endif %} address-family ipv4 {% if CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %} @@ -15,10 +16,10 @@ neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family {% if CONFIG_DB__DEVICE_METADATA['localhost']['switch_type'] == 'chassis-packet' %} neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 ttl-security hops 1 {% endif %} address-family ipv6 {% if CONFIG_DB__DEVICE_METADATA['localhost']['sub_role'] == 'BackEnd' %} @@ -29,7 +30,6 @@ neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/dockers/docker-fpm-frr/frr/supervisord/critical_processes.j2 b/dockers/docker-fpm-frr/frr/supervisord/critical_processes.j2 index 69f4e8e6931e..eea54fcfd55f 100644 --- a/dockers/docker-fpm-frr/frr/supervisord/critical_processes.j2 +++ b/dockers/docker-fpm-frr/frr/supervisord/critical_processes.j2 @@ -6,6 +6,7 @@ program:fpmsyncd program:bfdd program:ospfd program:pimd +program:pathd program:frrcfgd {%- else %} program:bgpcfgd diff --git a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 index 15aa2ed55110..113289af3b78 100644 --- a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 +++ b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 @@ -29,6 +29,17 @@ stdout_logfile=syslog stderr_logfile=syslog dependent_startup=true +[program:mgmtd] +command=/usr/lib/frr/mgmtd -A 127.0.0.1 +priority=4 +autostart=false +autorestart=true +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=rsyslogd:running + [program:zebra] command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_sonic -M snmp --asic-offload=notify_on_offload priority=4 @@ -77,7 +88,11 @@ dependent_startup_wait_for=zebra:running {% endif %} [program:bgpd] +{% if FEATURE is defined and FEATURE.bmp is defined and FEATURE.bmp.state is defined and FEATURE.bmp.state == "enabled" %} +command=/usr/lib/frr/bgpd -A 127.0.0.1 -M snmp -M bmp +{% else %} command=/usr/lib/frr/bgpd -A 127.0.0.1 -M snmp +{% endif %} priority=5 stopsignal=KILL autostart=false @@ -193,3 +208,17 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=bgpd:running {% endif %} + +{% if DEVICE_METADATA.localhost.frr_mgmt_framework_config is defined and DEVICE_METADATA.localhost.frr_mgmt_framework_config == "true" %} +[program:pathd] +command=/usr/lib/frr/pathd -A 127.0.0.1 +priority=5 +stopsignal=KILL +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=zebra:running +{% endif %} diff --git a/dockers/docker-iccpd/Dockerfile.j2 b/dockers/docker-iccpd/Dockerfile.j2 index 72d2d3d20883..78f2648847ce 100644 --- a/dockers/docker-iccpd/Dockerfile.j2 +++ b/dockers/docker-iccpd/Dockerfile.j2 @@ -7,7 +7,7 @@ ARG docker_container_name ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install -y ebtables + apt-get install -y iptables COPY \ {% for deb in docker_iccpd_debs.split(' ') -%} diff --git a/dockers/docker-macsec/cli/show/plugins/show_macsec.py b/dockers/docker-macsec/cli/show/plugins/show_macsec.py index f8a1265b07e9..a1c58cd34bb1 100644 --- a/dockers/docker-macsec/cli/show/plugins/show_macsec.py +++ b/dockers/docker-macsec/cli/show/plugins/show_macsec.py @@ -63,7 +63,7 @@ def dump_str(self, cache = None) -> str: counters = copy.deepcopy(self.counters) if cache: for k, v in counters.items(): - if k in cache.counters: + if k in cache.counters and k.startswith("SAI_MACSEC_SA_STAT"): counters[k] = int(counters[k]) - int(cache.counters[k]) counters = sorted(counters.items(), key=lambda x: x[0]) buffer += tabulate(meta + counters) diff --git a/dockers/docker-orchagent/Dockerfile.j2 b/dockers/docker-orchagent/Dockerfile.j2 index b3a7e49c3254..fb90b4f09c22 100755 --- a/dockers/docker-orchagent/Dockerfile.j2 +++ b/dockers/docker-orchagent/Dockerfile.j2 @@ -80,11 +80,14 @@ RUN sonic-cfggen -a "{\"ENABLE_ASAN\":\"{{ENABLE_ASAN}}\"}" -t /usr/share/sonic/ RUN rm -f /usr/share/sonic/templates/docker-init.j2 RUN chmod 755 /usr/bin/docker-init.sh -RUN mkdir -p /usr/share/sonic/templates/rsyslog_plugin - -# Copy rsyslog plugin configuration file and regexes to docker -COPY ["swss_regex.json", "/etc/rsyslog.d/"] -COPY ["events_info.json", "/usr/share/sonic/templates/rsyslog_plugin/"] -COPY ["files/rsyslog_plugin.conf.j2", "/usr/share/sonic/templates/rsyslog_plugin/"] +{% if include_system_eventd == "y" and build_reduce_image_size != "y" %} +# Copy all regex json files and rsyslog_plugin.conf to rsyslog.d +COPY ["*.json", "/etc/rsyslog.d/"] +COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"] +# Create swss rsyslog_plugin conf file +RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/swss_events.conf +RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2 +RUN rm -f /etc/rsyslog.d/events_info.json +{% endif %} ENTRYPOINT ["/usr/bin/docker-init.sh"] diff --git a/dockers/docker-orchagent/docker-init.j2 b/dockers/docker-orchagent/docker-init.j2 index 143c9bd5229f..af37252a7a71 100755 --- a/dockers/docker-orchagent/docker-init.j2 +++ b/dockers/docker-orchagent/docker-init.j2 @@ -3,7 +3,7 @@ mkdir -p /etc/swss/config.d/ mkdir -p /etc/supervisor/ mkdir -p /etc/supervisor/conf.d/ - +mkdir -p /dev/shm/supervisor/ CFGGEN_PARAMS=" \ -d \ @@ -74,7 +74,4 @@ TZ=$(cat /etc/timezone) rm -rf /etc/localtime ln -sf /usr/share/zoneinfo/$TZ /etc/localtime -export EVENTD_STATE=$(sonic-db-cli -s CONFIG_DB HGET 'FEATURE|eventd' 'state') -j2 -f json --import-env=ENVIRONMENT /usr/share/sonic/templates/rsyslog_plugin/rsyslog_plugin.conf.j2 /usr/share/sonic/templates/rsyslog_plugin/events_info.json > /etc/rsyslog.d/swss_events.conf - exec /usr/local/bin/supervisord diff --git a/dockers/docker-orchagent/enable_counters.py b/dockers/docker-orchagent/enable_counters.py index 5867787e0aa7..9569284bc74a 100755 --- a/dockers/docker-orchagent/enable_counters.py +++ b/dockers/docker-orchagent/enable_counters.py @@ -18,9 +18,6 @@ def enable_counter_group(db, name): info = {} info['FLEX_COUNTER_STATUS'] = 'enable' db.mod_entry("FLEX_COUNTER_TABLE", name, info) - else: - entry_info.update({"FLEX_COUNTER_DELAY_STATUS":"false"}) - db.mod_entry("FLEX_COUNTER_TABLE", name, entry_info) def enable_rates(): # set the default interval for rates diff --git a/dockers/docker-orchagent/orchagent.sh b/dockers/docker-orchagent/orchagent.sh index 256def591807..4889597dd703 100755 --- a/dockers/docker-orchagent/orchagent.sh +++ b/dockers/docker-orchagent/orchagent.sh @@ -63,7 +63,7 @@ elif [ "$platform" == "vs" ]; then ORCHAGENT_ARGS+="-m $MAC_ADDRESS" elif [ "$platform" == "mellanox" ]; then ORCHAGENT_ARGS+="" -elif [ "$platform" == "innovium" ]; then +elif [ "$platform" == "marvell-teralynx" ]; then ORCHAGENT_ARGS+="-m $MAC_ADDRESS" elif [ "$platform" == "nvidia-bluefield" ]; then ORCHAGENT_ARGS+="-m $MAC_ADDRESS" diff --git a/dockers/docker-pde/syncd_init_common.sh b/dockers/docker-pde/syncd_init_common.sh index 0212f842329a..7a28d7208f01 100755 --- a/dockers/docker-pde/syncd_init_common.sh +++ b/dockers/docker-pde/syncd_init_common.sh @@ -207,11 +207,11 @@ config_syncd_vs() CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" } -config_syncd_innovium() +config_syncd_marvell_teralynx() { CMD_ARGS+=" -p $HWSKU_DIR/sai.profile" ulimit -s 65536 - export II_ROOT="/var/log/invm" + export II_ROOT="/var/log/mrvl_teralynx" export II_APPEND_LOG=1 mkdir -p $II_ROOT } @@ -236,8 +236,8 @@ config_syncd() config_syncd_nephos elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then config_syncd_vs - elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then - config_syncd_innovium + elif [ "$SONIC_ASIC_TYPE" == "marvell-teralynx" ]; then + config_syncd_marvell_teralynx else echo "Unknown ASIC type $SONIC_ASIC_TYPE" exit 1 diff --git a/dockers/docker-platform-monitor/delay.py b/dockers/docker-platform-monitor/delay.py new file mode 100644 index 000000000000..986412b25038 --- /dev/null +++ b/dockers/docker-platform-monitor/delay.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 + +# This file serves as a monitor for advanced reboot. +# Once it exits, the delayed daemon will initiate. + +from swsscommon.swsscommon import RestartWaiter +RestartWaiter.waitAdvancedBootDone() diff --git a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 index b023a8f2b0e7..fd2d07296379 100644 --- a/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 +++ b/dockers/docker-platform-monitor/docker-pmon.supervisord.conf.j2 @@ -28,6 +28,16 @@ stdout_logfile=syslog stderr_logfile=syslog dependent_startup=true + +{% if delay_non_critical_daemon %} +[program:delay] +command=python3 /usr/bin/delay.py +autostart=false +autorestart=false +startsecs=0 +dependent_startup=true +{% endif %} + {% if not skip_chassisd and (IS_MODULAR_CHASSIS == 1 or is_smartswitch) %} [program:chassisd] command=/usr/local/bin/chassisd @@ -64,7 +74,7 @@ stdout_logfile=syslog stderr_logfile=syslog startsecs=0 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if not skip_fancontrol and HAVE_FANCONTROL_CONF == 1 %} @@ -151,7 +161,7 @@ stdout_logfile=syslog stderr_logfile=syslog startsecs=10 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if not skip_syseepromd %} @@ -164,7 +174,7 @@ stdout_logfile=syslog stderr_logfile=syslog startsecs=10 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if not skip_thermalctld %} @@ -178,7 +188,7 @@ stderr_logfile=syslog startsecs=10 startretries=50 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if not skip_pcied %} @@ -191,7 +201,7 @@ stdout_logfile=syslog stderr_logfile=syslog startsecs=10 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if include_sensormond %} @@ -204,7 +214,7 @@ stdout_logfile=syslog stderr_logfile=syslog startsecs=10 dependent_startup=true -dependent_startup_wait_for=rsyslogd:running +dependent_startup_wait_for=rsyslogd:running {% if delay_non_critical_daemon %}delay:exited{% endif %} {% endif %} {% if not skip_stormond %} diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2 index 5148dd1125f1..8dbc1a2ce89e 100644 --- a/dockers/docker-ptf/Dockerfile.j2 +++ b/dockers/docker-ptf/Dockerfile.j2 @@ -52,6 +52,11 @@ RUN apt-get update \ libboost-atomic1.71.0 \ {% else %} libboost-atomic1.74.0 \ + flex \ + bison \ + tcpd \ + libwrap0 \ + libwrap0-dev \ {% endif %} less \ git \ @@ -73,8 +78,6 @@ RUN apt-get update \ python3-scapy \ python3-six \ libpcap-dev \ -# TODO check if tacacs+ is required by tests -# tacacs+ has been dropped from bullseye {% if PTF_ENV_PY_VER == "mixed" %} tacacs+ \ {% endif %} @@ -168,6 +171,16 @@ RUN rm -rf /debs \ && cd /opt \ && wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py +{% if PTF_ENV_PY_VER == "py3" %} +RUN git clone https://github.com/facebook/tac_plus \ + && cd tac_plus \ + && cd tacacs-F4.0.4.28 \ + && ./configure \ + && make install \ + && ln -s /usr/local/sbin/tac_plus /usr/sbin/tac_plus \ + && ln -s /usr/local/bin/tac_pwd /usr/sbin/tac_pwd +{% endif %} + {% if PTF_ENV_PY_VER == "mixed" %} RUN python3 -m venv --system-site-packages env-python3 # Activating a virtualenv. The virtualenv automatically works for RUN, ENV and CMD. diff --git a/dockers/docker-sonic-bmp/Dockerfile.j2 b/dockers/docker-sonic-bmp/Dockerfile.j2 new file mode 100755 index 000000000000..2e79001dbf92 --- /dev/null +++ b/dockers/docker-sonic-bmp/Dockerfile.j2 @@ -0,0 +1,50 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} +FROM docker-config-engine-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} + +ARG docker_container_name +ARG image_version + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +# Pass the image_version to container +ENV IMAGE_VERSION=$image_version + +RUN apt-get update + +{% if docker_sonic_bmp_debs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("debs/", docker_sonic_bmp_debs.split(' '), "/debs/") }} + +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_sonic_bmp_debs.split(' ')) }} +{%- endif %} + +{% if docker_sonic_bmp_whls.strip() %} +# Copy locally-built Python wheel dependencies +{{ copy_files("python-wheels/", docker_sonic_bmp_whls.split(' '), "/python-wheels/") }} + +# Install locally-built Python wheel dependencies +{{ install_python_wheels(docker_sonic_bmp_whls.split(' ')) }} +{% endif %} + +RUN apt-get clean -y && \ + apt-get autoclean - && \ + apt-get autoremove -y && \ + rm -rf /debs && \ + mkdir -p /etc/bmp + +COPY ["bmp.sh", "/usr/bin/"] +COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] +COPY ["critical_processes", "/etc/supervisor/"] + +RUN chmod +x /usr/bin/bmp.sh +RUN touch /var/log/openbmpd.log + +RUN apt-get clean -y && \ + apt-get autoclean -y && \ + apt-get autoremove -y && \ + rm -rf /debs + +ENTRYPOINT ["/usr/local/bin/supervisord"] \ No newline at end of file diff --git a/dockers/docker-sonic-bmp/base_image_files/monit_bmp b/dockers/docker-sonic-bmp/base_image_files/monit_bmp new file mode 100644 index 000000000000..353a716455d9 --- /dev/null +++ b/dockers/docker-sonic-bmp/base_image_files/monit_bmp @@ -0,0 +1,5 @@ +############################################################################### +## Monit configuration for bmp container +############################################################################### +check program container_memory_bmp with path "/usr/bin/memory_checker bmp 419430400" + if status == 3 for 10 times within 20 cycles then exec "/usr/bin/docker exec bmp supervisorctl restart openbmpd" diff --git a/dockers/docker-sonic-bmp/bmp.sh b/dockers/docker-sonic-bmp/bmp.sh new file mode 100644 index 000000000000..eb3d186fb548 --- /dev/null +++ b/dockers/docker-sonic-bmp/bmp.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + + +if [ "${RUNTIME_OWNER}" == "" ]; then + RUNTIME_OWNER="kube" +fi + +CTR_SCRIPT="/usr/share/sonic/scripts/container_startup.py" +if test -f ${CTR_SCRIPT} +then + ${CTR_SCRIPT} -f bmp -o ${RUNTIME_OWNER} -v ${IMAGE_VERSION} +fi + diff --git a/dockers/docker-sonic-bmp/critical_processes b/dockers/docker-sonic-bmp/critical_processes new file mode 100644 index 000000000000..10621f0de87f --- /dev/null +++ b/dockers/docker-sonic-bmp/critical_processes @@ -0,0 +1,3 @@ +group:sonic-bmp +program:openbmpd +program:bmpcfgd \ No newline at end of file diff --git a/dockers/docker-sonic-bmp/supervisord.conf b/dockers/docker-sonic-bmp/supervisord.conf new file mode 100644 index 000000000000..7a751c7cfce1 --- /dev/null +++ b/dockers/docker-sonic-bmp/supervisord.conf @@ -0,0 +1,61 @@ +[supervisord] +logfile_maxbytes=1MB +logfile_backups=2 +nodaemon=true + +[eventlistener:dependent-startup] +command=python3 -m supervisord_dependent_startup +autostart=true +autorestart=unexpected +startretries=0 +exitcodes=0,3 +events=PROCESS_STATE +buffer_size=1024 + +[eventlistener:supervisor-proc-exit-listener] +command=/usr/bin/supervisor-proc-exit-listener --container-name bmp +events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING +autostart=true +autorestart=false +buffer_size=1024 + +[program:rsyslogd] +command=/usr/sbin/rsyslogd -n -iNONE +priority=1 +autostart=false +autorestart=true +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true + +[program:bmp] +command=/usr/bin/bmp.sh +priority=2 +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=rsyslogd:running + +[group:sonic-bmp] +programs=openbmpd,bmpcfgd + +[program:bmpcfgd] +command=python3 /usr/local/bin/bmpcfgd +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true + +[program:openbmpd] +command=/usr/bin/openbmpd -f -l /var/log/openbmpd.log -c /etc/bmp/openbmpd.conf +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true diff --git a/dockers/docker-sonic-gnmi/gnmi-native.sh b/dockers/docker-sonic-gnmi/gnmi-native.sh index b9241dca1d6a..8dae895d89df 100755 --- a/dockers/docker-sonic-gnmi/gnmi-native.sh +++ b/dockers/docker-sonic-gnmi/gnmi-native.sh @@ -17,6 +17,10 @@ X509=$(echo $TELEMETRY_VARS | jq -r '.x509') GNMI=$(echo $TELEMETRY_VARS | jq -r '.gnmi') CERTS=$(echo $TELEMETRY_VARS | jq -r '.certs') +# Enable GRPC GO LOG +export GRPC_GO_LOG_VERBOSITY_LEVEL=99 +export GRPC_GO_LOG_SEVERITY_LEVEL=info + TELEMETRY_ARGS=" -logtostderr" export CVL_SCHEMA_PATH=/usr/sbin/schema @@ -72,6 +76,18 @@ else TELEMETRY_ARGS+=" -v=2" fi +if [ -nz "$GNMI" ]; then + ENABLE_CRL=$(echo $GNMI | jq -r '.enable_crl') + if [ $ENABLE_CRL == "true" ]; then + TELEMETRY_ARGS+=" --enable_crl" + fi + + CRL_EXPIRE_DURATION=$(echo $GNMI | jq -r '.crl_expire_duration') + if [ -n $CRL_EXPIRE_DURATION ]; then + TELEMETRY_ARGS+=" --crl_expire_duration $CRL_EXPIRE_DURATION" + fi +fi + # Enable ZMQ for SmartSwitch LOCALHOST_SUBTYPE=`sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "subtype"` if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" ]]; then diff --git a/dockers/docker-sonic-telemetry/telemetry.sh b/dockers/docker-sonic-telemetry/telemetry.sh index d1c9216d4195..2428922b57f6 100755 --- a/dockers/docker-sonic-telemetry/telemetry.sh +++ b/dockers/docker-sonic-telemetry/telemetry.sh @@ -17,6 +17,9 @@ X509=$(echo $TELEMETRY_VARS | jq -r '.x509') GNMI=$(echo $TELEMETRY_VARS | jq -r '.gnmi') CERTS=$(echo $TELEMETRY_VARS | jq -r '.certs') +export GRPC_GO_LOG_VERBOSITY_LEVEL=99 +export GRPC_GO_LOG_SEVERITY_LEVEL=info + TELEMETRY_ARGS=" -logtostderr" export CVL_SCHEMA_PATH=/usr/sbin/schema export GOTRACEBACK=crash @@ -74,6 +77,18 @@ else TELEMETRY_ARGS+=" -v=2" fi +if [ -nz "$GNMI" ]; then + ENABLE_CRL=$(echo $GNMI | jq -r '.enable_crl') + if [ $ENABLE_CRL == "true" ]; then + TELEMETRY_ARGS+=" --enable_crl" + fi + + CRL_EXPIRE_DURATION=$(echo $GNMI | jq -r '.crl_expire_duration') + if [ -n $CRL_EXPIRE_DURATION ]; then + TELEMETRY_ARGS+=" --crl_expire_duration $CRL_EXPIRE_DURATION" + fi +fi + # gNMI save-on-set behavior is disabled by default. # Save-on-set can be turned on by setting the "TELEMETRY|gnmi|save_on_set" # to "true". diff --git a/files/build_templates/bmp.service.j2 b/files/build_templates/bmp.service.j2 new file mode 100644 index 000000000000..72ab295d04d5 --- /dev/null +++ b/files/build_templates/bmp.service.j2 @@ -0,0 +1,16 @@ +[Unit] +Description=BMP container +Requires=database.service +After=database.service +Before=ntp-config.service +BindsTo=sonic.target +After=sonic.target +StartLimitIntervalSec=1200 +StartLimitBurst=3 + +[Service] +User={{ sonicadmin_user }} +ExecStartPre=/usr/local/bin/{{docker_container_name}}.sh start +ExecStart=/usr/local/bin/{{docker_container_name}}.sh wait +ExecStop=/usr/local/bin/{{docker_container_name}}.sh stop +RestartSec=30 diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index 9787bec1bd68..8ad98b89c1c6 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -302,7 +302,7 @@ def "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } {% endif %} diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 67add27cea53..3a7159d9e4ff 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -73,6 +73,9 @@ function getBootType() *SONIC_BOOT_TYPE=fastfast*) TYPE='fastfast' ;; + *SONIC_BOOT_TYPE=express*) + TYPE='express' + ;; *SONIC_BOOT_TYPE=fast*|*fast-reboot*) TYPE='fast' ;; @@ -87,7 +90,7 @@ function preStartAction() {%- if docker_container_name == "database" %} WARM_DIR=/host/warmboot if [ "$DATABASE_TYPE" != "chassisdb" ]; then - if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast" || "$BOOT_TYPE" == "fast") && -f $WARM_DIR/dump.rdb ]]; then + if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast" || "$BOOT_TYPE" == "express" || "$BOOT_TYPE" == "fast") && -f $WARM_DIR/dump.rdb ]]; then # Load redis content from /host/warmboot/dump.rdb docker cp $WARM_DIR/dump.rdb database$DEV:/var/lib/redis/dump.rdb else @@ -121,6 +124,12 @@ function setPlatformLagIdBoundaries() { docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_START" "$lag_id_start" docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB SET "SYSTEM_LAG_ID_END" "$lag_id_end" + docker exec -i ${DOCKERNAME} $SONIC_DB_CLI CHASSIS_APP_DB EVAL " + local start_id = tonumber(ARGV[1]) + local end_id = tonumber(ARGV[2]) + for id = start_id,end_id do + redis.call('rpush','SYSTEM_LAG_IDS_FREE_LIST', tostring(id)) + end" 0 $lag_id_start $lag_id_end } function waitForAllInstanceDatabaseConfigJsonFilesReady() { @@ -229,7 +238,7 @@ function postStartAction() sleep 1; done - if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast" || "$BOOT_TYPE" == "fast") && -f $WARM_DIR/dump.rdb ]]; then + if [[ ("$BOOT_TYPE" == "warm" || "$BOOT_TYPE" == "fastfast" || "$BOOT_TYPE" == "express" || "$BOOT_TYPE" == "fast") && -f $WARM_DIR/dump.rdb ]]; then # retain the dump file from last boot for debugging purposes mv $WARM_DIR/dump.rdb $WARM_DIR/dump.rdb.old else @@ -286,6 +295,8 @@ function postStartAction() fi # Add redis UDS to the redis group and give read/write access to the group + REDIS_BMP_SOCK="/var/run/redis/redis_bmp.sock" + chgrp -f redis $REDIS_BMP_SOCK && chmod -f 0760 $REDIS_BMP_SOCK REDIS_SOCK="/var/run/redis${DEV}/redis.sock" else until [[ ($(docker exec -i ${DOCKERNAME} pgrep -x -c supervisord) -gt 0) && @@ -297,9 +308,7 @@ function postStartAction() fi REDIS_SOCK="/var/run/redis-chassis/redis_chassis.sock" fi - REDIS_BMP_SOCK="/var/run/redis/redis_bmp.sock" chgrp -f redis $REDIS_SOCK && chmod -f 0760 $REDIS_SOCK - chgrp -f redis $REDIS_BMP_SOCK && chmod -f 0760 $REDIS_BMP_SOCK {%- elif docker_container_name == "swss" %} # Wait until swss container state is Running until [[ ($(docker inspect -f {{"'{{.State.Running}}'"}} swss$DEV) == "true") ]]; do @@ -330,11 +339,6 @@ function postStartAction() docker cp $PSENSOR pmon:/usr/bin/ fi fi -{%- elif docker_container_name == "eventd" %} - export EVENTD_STATE=$(sonic-db-cli -s CONFIG_DB HGET 'FEATURE|eventd' 'state') - j2 -f json --import-env=ENVIRONMENT /usr/share/sonic/templates/rsyslog_plugin/rsyslog_plugin.conf.j2 /usr/share/sonic/templates/rsyslog_plugin/events_info.json > /etc/rsyslog.d/host_events.conf - j2 -f json --import-env=ENVIRONMENT /usr/share/sonic/templates/rsyslog_plugin/rsyslog_plugin.conf.j2 /usr/share/sonic/templates/rsyslog_plugin/syncd_events_info.json > /etc/rsyslog.d/syncd_events.conf - systemctl restart rsyslog {%- else %} : # nothing {%- endif %} @@ -438,6 +442,10 @@ start() { if [ -f "$CREATE_ONLY_CONFIG_DB_BUFFERS_JSON" ]; then $SONIC_DB_CLI CONFIG_DB HSET 'DEVICE_METADATA|localhost' create_only_config_db_buffers true fi + SUPPORTING_BULK_COUNTER_GROUPS="$HWSKU_FOLDER/supporting_bulk_counter_groups" + if [ -f "$SUPPORTING_BULK_COUNTER_GROUPS" ]; then + $SONIC_DB_CLI CONFIG_DB HSET 'DEVICE_METADATA|localhost' supporting_bulk_counter_groups@ $(cat $SUPPORTING_BULK_COUNTER_GROUPS) + fi fi {%- endif %} @@ -625,6 +633,7 @@ start() { {%- endif %} -e RUNTIME_OWNER=local \ --uts=host \{# W/A: this should be set per-docker, for those dockers which really need host's UTS namespace #} + --tmpfs /var/log/supervisor:rw \ {%- if install_debug_image == "y" %} -v /src:/src:ro -v /debug:/debug:rw \ {%- endif %} diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index 622087a5521d..1d1c1817b49d 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -24,7 +24,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "enable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" }, "PORT": { diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index bf5007471a48..70ebf9e238ef 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -77,7 +77,7 @@ {% endif %} {%- endfor %} -{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot', 'marvell'] -%} +{%- set pfc_to_pg_map_supported_asics = ['mellanox', 'barefoot'] -%} {%- set backend_device_types = ['BackEndToRRouter', 'BackEndLeafRouter'] -%} {%- set apollo_resource_types = ['DL-NPU-Apollo'] -%} diff --git a/files/build_templates/rsyslog_plugin.conf.j2 b/files/build_templates/rsyslog_plugin.conf.j2 index f69e58cf4313..56ec0f71d3f1 100644 --- a/files/build_templates/rsyslog_plugin.conf.j2 +++ b/files/build_templates/rsyslog_plugin.conf.j2 @@ -1,6 +1,7 @@ ## rsyslog-plugin for streaming telemetry via gnmi -{% if ENVIRONMENT['EVENTD_STATE'] == "enabled" %} + + template(name="prog_msg" type="list") { property(name="msg") constant(value="\n") @@ -15,4 +16,3 @@ if re_match($programname, "{{ proc.name }}") then { template="prog_msg") } {% endfor %} -{% endif %} diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 891a9afdc06b..2217859dd827 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -104,6 +104,11 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-nettools_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f sudo setcap 'cap_net_raw=+ep' $FILESYSTEM_ROOT/usr/bin/wol +# This is needed for moving monit logs, state and logrotate status to tmpfs +sudo bash -c "echo \"d /dev/shm/monit/ 0755 root root\" > $FILESYSTEM_ROOT/etc/tmpfiles.d/tmpfs-monit.conf" +sudo bash -c "echo \"d /dev/shm/logrotate/ 0755 root root\" > $FILESYSTEM_ROOT/etc/tmpfiles.d/tmpfs-logrotate.conf" + + # Install a patched version of ifupdown2 (and its dependencies via 'apt-get -y install -f') sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/ifupdown2_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f @@ -358,16 +363,13 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-db-cli_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f -{% if include_system_eventd == "y" %} +{% if include_system_eventd == "y" and build_reduce_image_size != "y" %} # Install sonic-rsyslog-plugin sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-rsyslog-plugin_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f # Generate host conf for rsyslog_plugin -sudo mkdir -p $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/rsyslog_plugin -sudo cp $BUILD_TEMPLATES/rsyslog_plugin.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/rsyslog_plugin/ -sudo cp $BUILD_TEMPLATES/events_info.json $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/rsyslog_plugin/ -sudo cp $BUILD_TEMPLATES/syncd_events_info.json $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/rsyslog_plugin/ +j2 -f json $BUILD_TEMPLATES/rsyslog_plugin.conf.j2 $BUILD_TEMPLATES/events_info.json | sudo tee $FILESYSTEM_ROOT_ETC/rsyslog.d/host_events.conf sudo cp $BUILD_TEMPLATES/monit_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ sudo cp $BUILD_TEMPLATES/sshd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ sudo cp $BUILD_TEMPLATES/systemd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ @@ -376,7 +378,11 @@ sudo cp $BUILD_TEMPLATES/dockerd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ sudo cp $BUILD_TEMPLATES/seu_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ sudo cp $BUILD_TEMPLATES/zebra_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ sudo cp $BUILD_TEMPLATES/bgpd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ + + +j2 -f json $BUILD_TEMPLATES/rsyslog_plugin.conf.j2 $BUILD_TEMPLATES/syncd_events_info.json | sudo tee $FILESYSTEM_ROOT_ETC/rsyslog.d/syncd_events.conf sudo cp $BUILD_TEMPLATES/syncd_regex.json $FILESYSTEM_ROOT_ETC/rsyslog.d/ + {% endif %} # Install custom-built monit package and SONiC configuration files @@ -1019,6 +1025,7 @@ sudo LANG=C cp $SCRIPTS_DIR/database.sh $FILESYSTEM_ROOT/usr/local/bin/database. sudo LANG=C cp $SCRIPTS_DIR/snmp.sh $FILESYSTEM_ROOT/usr/local/bin/snmp.sh sudo LANG=C cp $SCRIPTS_DIR/telemetry.sh $FILESYSTEM_ROOT/usr/local/bin/telemetry.sh sudo LANG=C cp $SCRIPTS_DIR/gnmi.sh $FILESYSTEM_ROOT/usr/local/bin/gnmi.sh +sudo LANG=C cp $SCRIPTS_DIR/bmp.sh $FILESYSTEM_ROOT/usr/local/bin/bmp.sh sudo LANG=C cp $SCRIPTS_DIR/mgmt-framework.sh $FILESYSTEM_ROOT/usr/local/bin/mgmt-framework.sh sudo LANG=C cp $SCRIPTS_DIR/asic_status.sh $FILESYSTEM_ROOT/usr/local/bin/asic_status.sh sudo LANG=C cp $SCRIPTS_DIR/asic_status.py $FILESYSTEM_ROOT/usr/local/bin/asic_status.py @@ -1136,7 +1143,12 @@ sudo cp {{platform_api_py3_wheel_path}} $FILESYSTEM_ROOT/$SONIC_PLATFORM_PY3_WHE sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install $SONIC_PLATFORM_PY3_WHEEL_NAME sudo rm -rf $FILESYSTEM_ROOT/$SONIC_PLATFORM_PY3_WHEEL_NAME + +sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/libdashapi_*.deb || \ + sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f + sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install xmlstarlet + {% endif %} {%- if SONIC_ROUTING_STACK == "frr" %} @@ -1156,3 +1168,8 @@ sudo rm -rf $FILESYSTEM_ROOT/tmp/mask_disabled_services.py sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install python3-dbus + +## Enable MULTIDB +{% if ENABLE_MULTIDB == "y" %} +sudo touch $FILESYSTEM_ROOT_ETC_SONIC/enable_multidb +{% endif %} diff --git a/files/build_templates/swss_vars.j2 b/files/build_templates/swss_vars.j2 index f35d0fc080ad..53639f01f7f1 100644 --- a/files/build_templates/swss_vars.j2 +++ b/files/build_templates/swss_vars.j2 @@ -7,6 +7,9 @@ "mac": "{{ DEVICE_METADATA.localhost.mac }}", "resource_type": "{{ DEVICE_METADATA.localhost.resource_type }}", "synchronous_mode": {% if DEVICE_METADATA.localhost.synchronous_mode == "disable" %}"disable"{% else %}"enable"{% endif %}, + {%if DEVICE_METADATA.localhost.supporting_bulk_counter_groups is defined and DEVICE_METADATA.localhost.supporting_bulk_counter_groups != '' -%} + "supporting_bulk_counter_groups": "{{ DEVICE_METADATA.localhost.supporting_bulk_counter_groups|join(',') }}", + {% endif -%} "dual_tor": {% if DEVICE_METADATA.localhost.type == "ToRRouter" and DEVICE_METADATA.localhost.subtype == "DualToR" %}"enable"{% else %}"disable"{% endif %}, "dscp_remapping": {% if SYSTEM_DEFAULTS is defined and SYSTEM_DEFAULTS.tunnel_qos_remap is defined and SYSTEM_DEFAULTS.tunnel_qos_remap.status == "enabled" %}"enable"{% else %}"disable"{% endif %} } diff --git a/files/image_config/constants/constants.yml b/files/image_config/constants/constants.yml index 01fb02deadf4..781055ba49b2 100644 --- a/files/image_config/constants/constants.yml +++ b/files/image_config/constants/constants.yml @@ -22,8 +22,8 @@ constants: enabled: true maximum_paths: enabled: true - ipv4: 64 - ipv6: 64 + ipv4: 514 + ipv6: 514 allow_list: enabled: true default_action: "permit" # or "deny" diff --git a/files/image_config/interfaces/interfaces.j2 b/files/image_config/interfaces/interfaces.j2 index cfdd322c4543..ea04fa80e931 100644 --- a/files/image_config/interfaces/interfaces.j2 +++ b/files/image_config/interfaces/interfaces.j2 @@ -131,6 +131,7 @@ iface {{ name }} {{ 'inet' if prefix | ipv4 else 'inet6' }} static {# TODO: COPP policy type rules #} {% endfor %} {% else %} +{% if not (DEVICE_METADATA['localhost']['subtype'] == 'SmartSwitch' and DEVICE_METADATA['localhost']['switch_type'] == 'dpu') %} auto eth0 iface eth0 inet dhcp metric 202 @@ -142,6 +143,7 @@ iface eth0 inet6 dhcp down sysctl net.ipv6.conf.eth0.accept_ra=0 {% endif %} {% endif %} +{% endif %} # source /etc/network/interfaces.d/* # diff --git a/files/image_config/logrotate/logrotateOverride.conf b/files/image_config/logrotate/logrotateOverride.conf index adc85ff306b5..64e181aa7c4a 100644 --- a/files/image_config/logrotate/logrotateOverride.conf +++ b/files/image_config/logrotate/logrotateOverride.conf @@ -1,2 +1,6 @@ [Unit] -Requires=logrotate-config.service \ No newline at end of file +Requires=logrotate-config.service + +[Service] +ExecStart= +ExecStart=/usr/sbin/logrotate --state /dev/shm/logrotate/status /etc/logrotate.conf diff --git a/files/image_config/monit/monitrc b/files/image_config/monit/monitrc index 74068f12d3f8..e3b252fcea75 100644 --- a/files/image_config/monit/monitrc +++ b/files/image_config/monit/monitrc @@ -38,7 +38,7 @@ ## default the file is placed in $HOME/.monit.id. # # set idfile /var/.monit.id - set idfile /var/lib/monit/id + set idfile /dev/shm/monit/id # ## Set the location of the Monit state file which saves monitoring states ## on each cycle. By default the file is placed in $HOME/.monit.state. If @@ -46,7 +46,7 @@ ## the monitoring state across reboots. If it is on temporary filesystem, the ## state will be lost on reboot which may be convenient in some situations. # - set statefile /var/lib/monit/state + set statefile /dev/shm/monit/state # # @@ -91,7 +91,7 @@ ## available in the back end filesystem). # set eventqueue - basedir /var/lib/monit/events # set the base directory where events will be stored + basedir /dev/shm/monit/events # set the base directory where events will be stored slots 100 # optionally limit the queue size # # diff --git a/files/image_config/watchdog-control/watchdog-control.sh b/files/image_config/watchdog-control/watchdog-control.sh index 892039964620..f01b21d7e695 100755 --- a/files/image_config/watchdog-control/watchdog-control.sh +++ b/files/image_config/watchdog-control/watchdog-control.sh @@ -22,6 +22,9 @@ function getBootType() *SONIC_BOOT_TYPE=fastfast*) TYPE='fastfast' ;; + *SONIC_BOOT_TYPE=express*) + TYPE='express' + ;; *SONIC_BOOT_TYPE=fast*|*fast-reboot*) TYPE='fast' ;; diff --git a/files/initramfs-tools/union-mount.j2 b/files/initramfs-tools/union-mount.j2 index fccd21f415ef..8f8abb8f6af5 100644 --- a/files/initramfs-tools/union-mount.j2 +++ b/files/initramfs-tools/union-mount.j2 @@ -212,6 +212,9 @@ mkdir -p ${rootmnt}/boot mkdir -p ${rootmnt}/host/$image_dir/boot mount --bind ${rootmnt}/host/$image_dir/boot ${rootmnt}/boot +## Mount the /tmp directory as tmpfs +mount -t tmpfs -o rw,nosuid,nodev,size=25% tmpfs ${rootmnt}/tmp + ## Mount loop device or tmpfs for /var/log if $logs_inram; then # NOTE: some platforms, when reaching initramfs stage, have a small diff --git a/files/scripts/bmp.sh b/files/scripts/bmp.sh new file mode 100755 index 000000000000..8229fd8ece26 --- /dev/null +++ b/files/scripts/bmp.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +function debug() +{ + /usr/bin/logger $1 +} + +function check_warm_boot() +{ + SYSTEM_WARM_START=`$SONIC_DB_CLI STATE_DB hget "WARM_RESTART_ENABLE_TABLE|system" enable` + SERVICE_WARM_START=`$SONIC_DB_CLI STATE_DB hget "WARM_RESTART_ENABLE_TABLE|${SERVICE}" enable` + if [[ x"$SYSTEM_WARM_START" == x"true" ]] || [[ x"$SERVICE_WARM_START" == x"true" ]]; then + WARM_BOOT="true" + else + WARM_BOOT="false" + fi +} + +function check_fast_boot () +{ + SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` + if [[ x"${SYSTEM_FAST_REBOOT}" == x"true" ]]; then + FAST_BOOT="true" + else + FAST_BOOT="false" + fi +} + +function check_redundant_type() +{ + DEVICE_SUBTYPE=`$SONIC_DB_CLI CONFIG_DB hget "DEVICE_METADATA|localhost" subtype` + if [[ x"$DEVICE_SUBTYPE" == x"DualToR" ]]; then + MUX_CONFIG=`show muxcable config` + if [[ $MUX_CONFIG =~ .*active-active.* ]]; then + ACTIVE_ACTIVE="true" + else + ACTIVE_ACTIVE="false" + fi + else + ACTIVE_ACTIVE="false" + fi + CONFIG_KNOB=`$SONIC_DB_CLI CONFIG_DB hget "MUX_LINKMGR|SERVICE_MGMT" kill_radv` + if [[ x"$CONFIG_KNOB" == x"False" ]]; then + ACTIVE_ACTIVE='false' + fi + debug "DEVICE_SUBTYPE: ${DEVICE_SUBTYPE}, CONFIG_KNOB: ${CONFIG_KNOB}" +} + +start() { + debug "Starting ${SERVICE}$DEV service..." + + # start service docker + /usr/bin/${SERVICE}.sh start $DEV + debug "Started ${SERVICE}$DEV service..." +} + +wait() { + /usr/bin/${SERVICE}.sh wait $DEV +} + +stop() { + debug "Stopping ${SERVICE}$DEV service..." + + check_warm_boot + check_fast_boot + check_redundant_type + debug "Warm boot flag: ${SERVICE}$DEV ${WARM_BOOT}." + debug "Fast boot flag: ${SERVICE}$DEV ${FAST_BOOT}." + + # For WARM/FAST boot do not perform service stop + if [[ x"$WARM_BOOT" != x"true" ]] && [[ x"$FAST_BOOT" != x"true" ]]; then + if [[ x"$SERVICE" == x"radv" ]] && [[ x"$ACTIVE_ACTIVE" == x"true" ]]; then + debug "Killing Docker ${SERVICE}${DEV} for active-active dualtor device..." + /usr/bin/${SERVICE}.sh kill $DEV + else + /usr/bin/${SERVICE}.sh stop $DEV + debug "Stopped ${SERVICE}$DEV service..." + fi + else + debug "Killing Docker ${SERVICE}${DEV}..." + /usr/bin/${SERVICE}.sh kill $DEV + fi +} + +DEV=$2 + +SCRIPT_NAME=$(basename -- "$0") +SERVICE="${SCRIPT_NAME%.*}" +NAMESPACE_PREFIX="asic" +if [[ "$DEV" && "$DEV" != *"dpu"* ]]; then + NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace + SONIC_DB_CLI="sonic-db-cli -n $NET_NS" +else + SONIC_DB_CLI="sonic-db-cli" +fi + +case "$1" in + start|wait|stop) + $1 + ;; + *) + echo "Usage: $0 {start|wait|stop}" + exit 1 + ;; +esac diff --git a/files/scripts/sonic-dpu-mgmt-traffic.sh b/files/scripts/sonic-dpu-mgmt-traffic.sh index 71e6ed29b32b..014d722537f1 100755 --- a/files/scripts/sonic-dpu-mgmt-traffic.sh +++ b/files/scripts/sonic-dpu-mgmt-traffic.sh @@ -4,12 +4,22 @@ command_name=$0 usage(){ - echo "Syntax: $command_name -e|--enable -d|--disable" + echo "Syntax: $command_name inbound/outbound -e|--enable -d|--disable [--dpus,--ports,--nofwctrl]" echo "Arguments:" - echo "-e Enable dpu management traffic forwarding" - echo "-d Disable dpu management traffic forwarding" + echo "inbound Control DPU Inbound traffic forwarding" + echo "outbound Control DPU Outbound traffic forwarding" + echo "-e Enable dpu management traffic forwarding in a specific direction" + echo "-d Disable dpu management traffic forwarding in a specific direction" + echo "--dpus Selection of dpus for which the inbound traffic has to be controlled (all can be specified)" + echo "--ports Selection of ports for which the inbound traffic has to be controlled" + echo "--nofwctrl Disable changing the general ipv4 forwarding (Could be useful if inbound is enabled and outbound is disabled)" } +dpu_l=() +declare -A midplane_dict +declare -A midplane_ip_dict +fw_change="enable" + add_rem_valid_iptable(){ local op=$1 local table=$2 @@ -39,20 +49,148 @@ control_forwarding(){ if [ "$op" = "enable" ]; then value=1 fi - echo $value > /proc/sys/net/ipv4/ip_forward - echo $value > /proc/sys/net/ipv4/conf/eth0/forwarding + if [ "$fw_change" = "enable" ]; then + echo $value > /proc/sys/net/ipv4/ip_forward + echo $value > /proc/sys/net/ipv4/conf/eth0/forwarding + fi +} + +validate_dpus(){ + local provided_list=("$@") + for item1 in "${provided_list[@]}"; do + local found=0 + for item2 in "${dpu_l[@]}"; do + if [[ "$item1" = "$item2" ]]; then + found=1 + break + fi + done + if [[ $found -eq 0 ]]; then + echo "$item1 is not detected! Please provide proper dpu names list!" + exit 1 + fi + done +} + +general_validation(){ + if [ -z "$direction" ]; then + echo "Please provide the direction argument (inbound or outboud)" + usage + exit 1 + fi + + if [ -z "$operation" ]; then + echo "Please provide the operation option (-e or -d)" + usage + exit 1 + fi +} + +port_use_validation(){ + local port_l=("$@") + for port in "${port_l[@]}"; do + if (( port >= 0 && port <= 1023 )); then + echo "Provided port $port in range 0-1023, Please execute with a different port" + exit 1 + fi + if netstat -tuln | awk '{print $4}' | grep -q ":$port\$"; then + echo "Provided port $port is in use by another process, Please execute with a different port" + exit 1 + fi + done +} + + + + +inbound_validation(){ + #DPU Validation + while IFS= read -r line; do + dpu_name=$( echo "$line" | sed 's/.*|//;s/"//g') + dpu_l+=("$dpu_name") + done < <(redis-cli -n 4 keys DPUS*) + len1=${#dpu_name[@]} + if [ "$len1" -eq 0 ]; then + echo "No dpus detected on device!" + exit 1 + fi + sorted_dpu_l=($(for item in "${dpu_l[@]}"; do + echo "$item" + done | sort)) + if [ -z "$arg_dpu_names" ]; then + echo "No DPUs provided!" + usage + exit 1 + else + if [ "$arg_dpu_names" = "all" ]; then + sel_dpu_names=("${sorted_dpu_l[@]}") + echo "${#sorted_dpu_l[@]} DPUs detected:" + echo "${sorted_dpu_l[@]}" + else + IFS=',' read -ra sel_dpu_names <<< "$arg_dpu_names" + validate_dpus ${sel_dpu_names[@]} + fi + fi + #Port validation + IFS=',' read -ra provided_ports <<< "$arg_port_list" + len1=${#sel_dpu_names[@]} + len2=${#provided_ports[@]} + if [ "$len1" -ne "$len2" ]; then + echo "Length of ${sel_dpu_names[@]} does not match provided port length ${provided_ports[@]}" + usage + exit 1 + fi + port_use_validation ${provided_ports[@]} + for dpu in "${sel_dpu_names[@]}"; do + midplane_int_name=$(redis-cli -n 4 hget "DPUS|$dpu" "midplane_interface") + if [ -z "$midplane_int_name" ]; then + echo "Cannot obtain midplane interface for $dpu" + exit 1 + fi + midplane_dict["$dpu"]="$midplane_int_name" + done + + for dpu in "${!midplane_dict[@]}"; do + midplane_ip=$(redis-cli -n 4 hget "DHCP_SERVER_IPV4_PORT|$midplane_iface|${midplane_dict[$dpu]}" "ips@") + if [ -z "$midplane_ip" ]; then + echo "Cannot obtain midplane ip for $dpu" + exit 1 + fi + midplane_ip_dict["$dpu"]="$midplane_ip" + done } -ctrl_dpu_forwarding(){ +# Outbound Traffice forwarding control function +ctrl_dpu_ob_forwarding(){ local op=$1 control_forwarding $op add_rem_valid_iptable $op nat POSTROUTING -o ${mgmt_iface} -j MASQUERADE add_rem_valid_iptable $op filter FORWARD -i ${mgmt_iface} -o ${midplane_iface} -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT add_rem_valid_iptable $op filter FORWARD -i ${midplane_iface} -o ${mgmt_iface} -j ACCEPT if [ "$op" = "enable" ]; then - echo "Enabled DPU management traffic Forwarding" + echo "Enabled DPU management outbound traffic Forwarding" + else + echo "Disabled DPU management outbound traffic Forwarding" + fi +} + +ctrl_dpu_ib_forwarding(){ + local op=$1 + local dest_port=22 + control_forwarding $op + add_rem_valid_iptable $op filter FORWARD -i ${midplane_iface} -o ${mgmt_iface} -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + add_rem_valid_iptable $op filter FORWARD -i ${mgmt_iface} -o ${midplane_iface} -p tcp --dport $dest_port -j ACCEPT + for index in ${!sel_dpu_names[@]}; do + dpu_name="${sel_dpu_names[$index]}" + dpu_midplane_ip="${midplane_ip_dict[$dpu_name]}" + switch_port="${provided_ports[$index]}" + add_rem_valid_iptable $op nat POSTROUTING -p tcp -d $dpu_midplane_ip --dport $dest_port -j MASQUERADE + add_rem_valid_iptable $op nat PREROUTING -i ${mgmt_iface} -p tcp --dport $switch_port -j DNAT --to-destination $dpu_midplane_ip:$dest_port + done + if [ "$op" = "enable" ]; then + echo "Enabled DPU management inbound traffic Forwarding" else - echo "Disabled DPU management traffic Forwarding" + echo "Disabled DPU management inbound traffic Forwarding" fi } @@ -70,16 +208,81 @@ if ! ifconfig "$midplane_iface" > /dev/null 2>&1; then exit 1 fi +operation="" +direction="" + +invalid_arg(){ + echo "Invalid arguments $1" + usage + exit 1 +} + + case $1 in - -e|--enable) - ctrl_dpu_forwarding enable - ;; - -d|--disable) - ctrl_dpu_forwarding disable - ;; + inbound) + direction="inbound" + shift + while [ "$1" != "--" ] && [ -n "$1" ]; do + case $1 in + -e|--enable) + operation="enable" + ;; + -d|--disable) + operation="disable" + ;; + --dpus) + shift; + arg_dpu_names=$1 + ;; + --ports) + shift; + arg_port_list=$1 + ;; + --nofwctrl) + fw_change="disable" + ;; + *) + invalid_arg $1 + ;; + esac + shift + done + ;; + outbound) + direction="outbound" + shift + while [ "$1" != "--" ] && [ -n "$1" ]; do + case $1 in + -e|--enable) + operation="enable" + ;; + -d|--disable) + operation="disable" + ;; + --nofwctrl) + fw_change="disable" + ;; + *) + invalid_arg $1 + ;; + esac + shift + done + ;; *) - echo "Incorrect Usage!" - usage - exit 1 + invalid_arg $1 + ;; +esac + +general_validation + + +case $direction in + outbound) + ctrl_dpu_ob_forwarding $operation + ;; + inbound) + inbound_validation + ctrl_dpu_ib_forwarding $operation ;; esac diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index 35815fe4dfb9..f081cf6de8e4 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -233,6 +233,7 @@ function clean_up_chassis_db_tables() local lagid = redis.call('HGET', 'SYSTEM_LAG_ID_TABLE', lagname) redis.call('SREM', 'SYSTEM_LAG_ID_SET', lagid) redis.call('HDEL', 'SYSTEM_LAG_ID_TABLE', lagname) + redis.call('rpush', 'SYSTEM_LAG_IDS_FREE_LIST', lagid) nsl = nsl + 1 end end diff --git a/files/scripts/syncd_common.sh b/files/scripts/syncd_common.sh index 826cdd731ba6..d3a8b0df7c42 100755 --- a/files/scripts/syncd_common.sh +++ b/files/scripts/syncd_common.sh @@ -81,6 +81,9 @@ function getBootType() *SONIC_BOOT_TYPE=fastfast*) TYPE='fastfast' ;; + *SONIC_BOOT_TYPE=express*) + TYPE='express' + ;; *SONIC_BOOT_TYPE=fast*|*fast-reboot*) # check that the key exists SYSTEM_FAST_REBOOT=`sonic-db-cli STATE_DB hget "FAST_RESTART_ENABLE_TABLE|system" enable` diff --git a/platform/barefoot/sonic-platform-modules-arista b/platform/barefoot/sonic-platform-modules-arista index ed942d617ddd..2e2acb67f9ea 160000 --- a/platform/barefoot/sonic-platform-modules-arista +++ b/platform/barefoot/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit ed942d617ddde8e63b5190ad3a7d8171c1dbde9a +Subproject commit 2e2acb67f9ea20366f5d26c1c61b6952810d6d88 diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk index 0416007a2c25..88c04a3136d8 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk @@ -3,13 +3,14 @@ DOCKER_SYNCD_BRCM_DNX_RPC = docker-syncd-brcm-dnx-rpc.gz DOCKER_SYNCD_DNX_BASE = docker-syncd-brcm-dnx.gz $(DOCKER_SYNCD_BRCM_DNX_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc -$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT) $(PTF) +$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEPENDS += $(SYNCD_RPC) ifeq ($(INSTALL_DEBUG_TOOLS), y) $(DOCKER_SYNCD_BRCM_DNX_RPC)_DEPENDS += $(SYNCD_RPC_DBG) \ $(LIBSWSSCOMMON_DBG) \ $(LIBSAIMETADATA_DBG) \ $(LIBSAIREDIS_DBG) endif +$(DOCKER_SYNCD_BRCM_DNX_RPC)_PYTHON_WHEELS += $(PTF_PY3) $(DOCKER_SYNCD_BRCM_DNX_RPC)_FILES += $(DSSERVE) $(BCMCMD) $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) $(DOCKER_SYNCD_BRCM_DNX_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_DNX_BASE) SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_BRCM_DNX_RPC) diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 index ca85d74083ea..b5ed2b720e93 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 @@ -1,58 +1,71 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} FROM docker-syncd-brcm-dnx-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive -COPY \ -{% for deb in docker_syncd_brcm_dnx_rpc_debs.split(' ') -%} -debs/{{ deb }}{{' '}} -{%- endfor -%} -debs/ - RUN apt-get purge -y syncd ## Pre-install the fundamental packages RUN apt-get update \ && apt-get -y install \ net-tools \ - python3-pip \ - python-setuptools \ + python3-pip \ + python3-dev \ + python-is-python3 \ + python3-scapy \ build-essential \ libssl-dev \ libffi-dev \ - python-dev \ wget \ cmake \ - libqt5core5a \ - libqt5network5 \ - libboost-atomic1.74.0 - -RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_syncd_brcm_dnx_rpc_debs.split(' ') -%} -dpkg_apt debs/{{ deb }}{{'; '}} -{%- endfor %} - -RUN wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \ - && tar xvfz 1.0.0.tar.gz \ - && cd nanomsg-1.0.0 \ - && mkdir -p build \ - && cmake . \ - && make install \ - && ldconfig \ - && cd .. \ - && rm -fr nanomsg-1.0.0 \ - && rm -f 1.0.0.tar.gz \ - && pip2 install cffi==1.7.0 \ - && pip2 install --upgrade cffi==1.7.0 \ - && pip2 install wheel \ - && pip2 install nnpy \ + libnanomsg5 \ + libnanomsg-dev + +{% if docker_syncd_brcm_dnx_rpc_debs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("debs/", docker_syncd_brcm_dnx_rpc_debs.split(' '), "/debs/") }} +{% endif %} + +{% if docker_syncd_brcm_dnx_rpc_pydebs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("python-debs/", docker_syncd_brcm_dnx_rpc_pydebs.split(' '), "/debs/") }} +{% endif %} + +{% if docker_syncd_brcm_dnx_rpc_debs.strip() -%} +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_syncd_brcm_dnx_rpc_debs.split(' ')) }} +{% endif %} + +{% if docker_syncd_brcm_dnx_rpc_pydebs.strip() -%} +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_syncd_brcm_dnx_rpc_pydebs.split(' ')) }} +{% endif %} + +RUN pip3 install cffi==1.16.0 \ + && pip3 install wheel \ + && pip3 install nnpy \ && mkdir -p /opt \ && cd /opt \ && wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py \ - && mkdir ptf && cd ptf && wget https://raw.githubusercontent.com/p4lang/ptf/master/src/ptf/afpacket.py && touch __init__.py \ && apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y \ && rm -rf /root/deps COPY ["ptf_nn_agent.conf", "/etc/supervisor/conf.d/"] +## Clean up +RUN apt-get -y purge \ + cmake \ + libssl-dev \ + libffi-dev \ + python3-dev \ + python3-pip \ + libthrift-dev \ + build-essential + +RUN apt-get clean -y && \ + apt-get autoclean -y && \ + apt-get autoremove -y && \ + rm -rf /debs + ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/broadcom/docker-syncd-brcm-dnx.mk b/platform/broadcom/docker-syncd-brcm-dnx.mk index 4276e1125445..febb19c49315 100644 --- a/platform/broadcom/docker-syncd-brcm-dnx.mk +++ b/platform/broadcom/docker-syncd-brcm-dnx.mk @@ -24,7 +24,7 @@ endif $(DOCKER_SYNCD_DNX_BASE)_DEPENDS += $(SYNCD) $(DOCKER_SYNCD_DNX_BASE)_DEPENDS += $(BRCM_DNX_SAI) -$(DOCKER_SYNCD_DNX_BASE)_FILES += $(DSSERVE) $(BCMCMD) +$(DOCKER_SYNCD_DNX_BASE)_FILES += $(DSSERVE) $(BCMCMD) $(RDB-CLI) ifeq ($(INSTALL_DEBUG_TOOLS), y) $(DOCKER_SYNCD_DNX_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ diff --git a/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 index 160a1380140f..6bceef873d59 100755 --- a/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 @@ -23,8 +23,8 @@ RUN apt-get install -yf kmod ## BRCM uses ethtool to set host interface speed RUN apt-get install -y ethtool -COPY ["files/dsserve", "files/bcmcmd", "start.sh", "start_led.sh", "bcmsh", "/usr/bin/"] -RUN chmod +x /usr/bin/dsserve /usr/bin/bcmcmd +COPY ["files/dsserve", "files/bcmcmd", "start.sh", "start_led.sh", "bcmsh", "files/rdb-cli", "/usr/bin/"] +RUN chmod +x /usr/bin/dsserve /usr/bin/bcmcmd /usr/bin/rdb-cli COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] diff --git a/platform/broadcom/docker-syncd-brcm-rpc.mk b/platform/broadcom/docker-syncd-brcm-rpc.mk index 929642331598..98e443a9f130 100644 --- a/platform/broadcom/docker-syncd-brcm-rpc.mk +++ b/platform/broadcom/docker-syncd-brcm-rpc.mk @@ -2,13 +2,14 @@ DOCKER_SYNCD_BRCM_RPC = docker-syncd-brcm-rpc.gz $(DOCKER_SYNCD_BRCM_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-brcm-rpc -$(DOCKER_SYNCD_BRCM_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT) $(PTF) +$(DOCKER_SYNCD_BRCM_RPC)_DEPENDS += $(SYNCD_RPC) ifeq ($(INSTALL_DEBUG_TOOLS), y) $(DOCKER_SYNCD_BRCM_RPC)_DEPENDS += $(SYNCD_RPC_DBG) \ $(LIBSWSSCOMMON_DBG) \ $(LIBSAIMETADATA_DBG) \ $(LIBSAIREDIS_DBG) endif +$(DOCKER_SYNCD_BRCM_RPC)_PYTHON_WHEELS += $(PTF_PY3) $(DOCKER_SYNCD_BRCM_RPC)_FILES += $(DSSERVE) $(BCMCMD) $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) $(DOCKER_SYNCD_BRCM_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_BASE) SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_BRCM_RPC) diff --git a/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 index 3517b037a40a..82e2e510ea98 100644 --- a/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 +++ b/platform/broadcom/docker-syncd-brcm-rpc/Dockerfile.j2 @@ -1,51 +1,50 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} FROM docker-syncd-brcm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive -COPY \ -{% for deb in docker_syncd_brcm_rpc_debs.split(' ') -%} -debs/{{ deb }}{{' '}} -{%- endfor -%} -debs/ - RUN apt-get purge -y syncd ## Pre-install the fundamental packages RUN apt-get update \ && apt-get -y install \ net-tools \ - python3-pip \ - python-setuptools \ + python3-pip \ + python3-dev \ + python-is-python3 \ + python3-scapy \ build-essential \ libssl-dev \ libffi-dev \ - python-dev \ wget \ cmake \ - libqt5core5a \ - libqt5network5 \ - libboost-atomic1.74.0 - -RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_syncd_brcm_rpc_debs.split(' ') -%} -dpkg_apt debs/{{ deb }}{{'; '}} -{%- endfor %} - -RUN wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \ - && tar xvfz 1.0.0.tar.gz \ - && cd nanomsg-1.0.0 \ - && mkdir -p build \ - && cmake . \ - && make install \ - && ldconfig \ - && cd .. \ - && rm -fr nanomsg-1.0.0 \ - && rm -f 1.0.0.tar.gz \ - && pip2 install cffi==1.7.0 \ - && pip2 install --upgrade cffi==1.7.0 \ - && pip2 install wheel \ - && pip2 install nnpy \ + libnanomsg5 \ + libnanomsg-dev + +{% if docker_syncd_brcm_rpc_debs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("debs/", docker_syncd_brcm_rpc_debs.split(' '), "/debs/") }} +{% endif %} + +{% if docker_syncd_brcm_rpc_pydebs.strip() -%} +# Copy locally-built Debian package dependencies +{{ copy_files("python-debs/", docker_syncd_brcm_rpc_pydebs.split(' '), "/debs/") }} +{% endif %} + +{% if docker_syncd_brcm_rpc_debs.strip() -%} +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_syncd_brcm_rpc_debs.split(' ')) }} +{% endif %} + +{% if docker_syncd_brcm_rpc_pydebs.strip() -%} +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_syncd_brcm_rpc_pydebs.split(' ')) }} +{% endif %} + +RUN pip3 install cffi==1.16.0 \ + && pip3 install wheel \ + && pip3 install nnpy \ && mkdir -p /opt \ && cd /opt \ && wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py \ @@ -54,4 +53,19 @@ RUN wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \ COPY ["ptf_nn_agent.conf", "/etc/supervisor/conf.d/"] +## Clean up +RUN apt-get -y purge \ + cmake \ + libssl-dev \ + libffi-dev \ + python3-dev \ + python3-pip \ + libthrift-dev \ + build-essential + +RUN apt-get clean -y && \ + apt-get autoclean -y && \ + apt-get autoremove -y && \ + rm -rf /debs + ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/broadcom/libsaithrift-dev.mk b/platform/broadcom/libsaithrift-dev.mk index ec4e1f6e6da6..037f12f03501 100644 --- a/platform/broadcom/libsaithrift-dev.mk +++ b/platform/broadcom/libsaithrift-dev.mk @@ -4,14 +4,8 @@ SAI_VER = 0.9.4 LIBSAITHRIFT_DEV = libsaithrift$(SAITHRIFT_VER)-dev_$(SAI_VER)_amd64.deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI -#Support two different versions of thrift ifeq ($(SAITHRIFT_V2),y) -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT_0_14_1) $(LIBTHRIFT_0_14_1_DEV) $(PYTHON3_THRIFT_0_14_1) $(THRIFT_0_14_1_COMPILER) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT_0_14_1) $(LIBSAITHRIFT_DEV)_BUILD_ENV = SAITHRIFTV2=true SAITHRIFT_VER=v2 -else -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBTHRIFT) $(LIBTHRIFT_DEV) $(PYTHON_THRIFT) $(THRIFT_COMPILER) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBTHRIFT) endif $(LIBSAITHRIFT_DEV)_DEPENDS += $(BRCM_XGS_SAI) $(BRCM_XGS_SAI_DEV) $(LIBSAITHRIFT_DEV)_RDEPENDS += $(BRCM_XGS_SAI) diff --git a/platform/broadcom/one-image.mk b/platform/broadcom/one-image.mk index b3951f869530..dca377930acf 100755 --- a/platform/broadcom/one-image.mk +++ b/platform/broadcom/one-image.mk @@ -100,6 +100,10 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \ $(MICAS_M2_W6510_48V8C_PLATFORM_MODULE) \ $(MICAS_M2_W6510_48GT4V_PLATFORM_MODULE) \ $(MICAS_M2_W6520_24DC8QC_PLATFORM_MODULE) \ + $(MICAS_M2_W6940_128QC_PLATFORM_MODULE) \ + $(MICAS_M2_W6930_64QC_PLATFORM_MODULE) \ + $(MICAS_M2_W6940_64OC_PLATFORM_MODULE) \ + $(MICAS_M2_W6920_32QC2X_PLATFORM_MODULE) \ $(MICAS_M2_W6510_32C_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_BUILD_INSTALLS = $(BRCM_OPENNSL_KERNEL) $(BRCM_DNX_OPENNSL_KERNEL) diff --git a/platform/broadcom/platform-modules-micas.mk b/platform/broadcom/platform-modules-micas.mk index 729674eb7517..7e70b5c670dc 100644 --- a/platform/broadcom/platform-modules-micas.mk +++ b/platform/broadcom/platform-modules-micas.mk @@ -25,6 +25,38 @@ MICAS_M2_W6520_24DC8QC_PLATFORM_MODULE = platform-modules-micas-m2-w6520-24dc8qc $(MICAS_M2_W6520_24DC8QC_PLATFORM_MODULE)_PLATFORM = x86_64-micas_m2-w6520-24dc8qc-r0 $(eval $(call add_extra_package,$(MICAS_M2_W6510_48V8C_PLATFORM_MODULE),$(MICAS_M2_W6520_24DC8QC_PLATFORM_MODULE))) +## M2-W6940-128QC +MICAS_M2_W6940_128QC_PLATFORM_MODULE_VERSION = 1.0 +export MICAS_M2_W6940_128QC_PLATFORM_MODULE_VERSION + +MICAS_M2_W6940_128QC_PLATFORM_MODULE = platform-modules-micas-m2-w6940-128qc_$(MICAS_M2_W6940_128QC_PLATFORM_MODULE_VERSION)_amd64.deb +$(MICAS_M2_W6940_128QC_PLATFORM_MODULE)_PLATFORM = x86_64-micas_m2-w6940-128qc-r0 +$(eval $(call add_extra_package,$(MICAS_M2_W6510_48V8C_PLATFORM_MODULE),$(MICAS_M2_W6940_128QC_PLATFORM_MODULE))) + +## M2-W6930-64QC +MICAS_M2_W6930_64QC_PLATFORM_MODULE_VERSION = 1.0 +export MICAS_M2_W6930_64QC_PLATFORM_MODULE_VERSION + +MICAS_M2_W6930_64QC_PLATFORM_MODULE = platform-modules-micas-m2-w6930-64qc_$(MICAS_M2_W6930_64QC_PLATFORM_MODULE_VERSION)_amd64.deb +$(MICAS_M2_W6930_64QC_PLATFORM_MODULE)_PLATFORM = x86_64-micas_m2-w6930-64qc-r0 +$(eval $(call add_extra_package,$(MICAS_M2_W6510_48V8C_PLATFORM_MODULE),$(MICAS_M2_W6930_64QC_PLATFORM_MODULE))) + +## M2-W6940-64OC +MICAS_M2_W6940_64OC_PLATFORM_MODULE_VERSION = 1.0 +export MICAS_M2_W6940_64OC_PLATFORM_MODULE_VERSION + +MICAS_M2_W6940_64OC_PLATFORM_MODULE = platform-modules-micas-m2-w6940-64oc_$(MICAS_M2_W6940_64OC_PLATFORM_MODULE_VERSION)_amd64.deb +$(MICAS_M2_W6940_64OC_PLATFORM_MODULE)_PLATFORM = x86_64-micas_m2-w6940-64oc-r0 +$(eval $(call add_extra_package,$(MICAS_M2_W6510_48V8C_PLATFORM_MODULE),$(MICAS_M2_W6940_64OC_PLATFORM_MODULE))) + +## M2-W6920-32QC2X +MICAS_M2_W6920_32QC2X_PLATFORM_MODULE_VERSION = 1.0 +export MICAS_M2_W6920_32QC2X_PLATFORM_MODULE_VERSION + +MICAS_M2_W6920_32QC2X_PLATFORM_MODULE = platform-modules-micas-m2-w6920-32qc2x_$(MICAS_M2_W6920_32QC2X_PLATFORM_MODULE_VERSION)_amd64.deb +$(MICAS_M2_W6920_32QC2X_PLATFORM_MODULE)_PLATFORM = x86_64-micas_m2-w6920-32qc2x-r0 +$(eval $(call add_extra_package,$(MICAS_M2_W6510_48V8C_PLATFORM_MODULE),$(MICAS_M2_W6920_32QC2X_PLATFORM_MODULE))) + ## M2-W6510-32C MICAS_M2_W6510_32C_PLATFORM_MODULE_VERSION = 1.0 export MICAS_M2_W6510_32C_PLATFORM_MODULE_VERSION diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk index 4070f7be06ae..e3f0e46ccccc 100755 --- a/platform/broadcom/rules.mk +++ b/platform/broadcom/rules.mk @@ -56,5 +56,7 @@ $(SYNCD)_DEPENDS += $(BRCM_XGS_SAI) $(BRCM_XGS_SAI_DEV) $(SYNCD)_UNINSTALLS += $(BRCM_XGS_SAI_DEV) $(BRCM_XGS_SAI) ifeq ($(ENABLE_SYNCD_RPC),y) +# Remove the libthrift_0.11.0 dependency injected by rules/syncd.mk +$(SYNCD)_DEPENDS := $(filter-out $(LIBTHRIFT_DEV),$($(SYNCD)_DEPENDS)) $(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) endif diff --git a/platform/broadcom/sai-modules.mk b/platform/broadcom/sai-modules.mk index 05ca22e7319d..53f0768a15e2 100644 --- a/platform/broadcom/sai-modules.mk +++ b/platform/broadcom/sai-modules.mk @@ -10,7 +10,7 @@ $(BRCM_OPENNSL_KERNEL)_MACHINE = broadcom SONIC_DPKG_DEBS += $(BRCM_OPENNSL_KERNEL) # SAI bcm modules for DNX family ASIC -BRCM_DNX_OPENNSL_KERNEL_VERSION = 11.2.9.1 +BRCM_DNX_OPENNSL_KERNEL_VERSION = 11.2.13.1-1 BRCM_DNX_OPENNSL_KERNEL = opennsl-modules-dnx_$(BRCM_DNX_OPENNSL_KERNEL_VERSION)_amd64.deb $(BRCM_DNX_OPENNSL_KERNEL)_SRC_PATH = $(PLATFORM_PATH)/saibcm-modules-dnx diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 85cdd54e5622..4127bb58d6b0 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,6 +1,6 @@ -LIBSAIBCM_XGS_VERSION = 11.2.13.1 -LIBSAIBCM_DNX_VERSION = 11.2.9.1 -LIBSAIBCM_XGS_BRANCH_NAME = SAI_11.2.0_GA +LIBSAIBCM_XGS_VERSION = 11.2.16.2 +LIBSAIBCM_DNX_VERSION = 11.2.13.1-1 +LIBSAIBCM_XGS_BRANCH_NAME = SAI_11.2.16.2 LIBSAIBCM_DNX_BRANCH_NAME = SAI_11.2.0_GA LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_XGS_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)/xgs" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_DNX_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)/dnx" diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista index ed942d617ddd..2e2acb67f9ea 160000 --- a/platform/broadcom/sonic-platform-modules-arista +++ b/platform/broadcom/sonic-platform-modules-arista @@ -1 +1 @@ -Subproject commit ed942d617ddde8e63b5190ad3a7d8171c1dbde9a +Subproject commit 2e2acb67f9ea20366f5d26c1c61b6952810d6d88 diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/control b/platform/broadcom/sonic-platform-modules-micas/debian/control index c6f9acb4a27e..3df20d5b4be0 100644 --- a/platform/broadcom/sonic-platform-modules-micas/debian/control +++ b/platform/broadcom/sonic-platform-modules-micas/debian/control @@ -16,8 +16,22 @@ Package: platform-modules-micas-m2-w6520-24dc8qc Architecture: amd64 Description: kernel modules for platform devices such as fan, led, sfp -Package: platform-modules-micas-m2-w6510-32c +Package: platform-modules-micas-m2-w6940-128qc +Architecture: amd64 +Description: kernel modules for platform devices such as fan, led, sfp + +Package: platform-modules-micas-m2-w6930-64qc +Architecture: amd64 +Description: kernel modules for platform devices such as fan, led, sfp + +Package: platform-modules-micas-m2-w6940-64oc Architecture: amd64 Description: kernel modules for platform devices such as fan, led, sfp +Package: platform-modules-micas-m2-w6920-32qc2x +Architecture: amd64 +Description: kernel modules for platform devices such as fan, led, sfp +Package: platform-modules-micas-m2-w6510-32c +Architecture: amd64 +Description: kernel modules for platform devices such as fan, led, sfp diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.install b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.install new file mode 100644 index 000000000000..a719c1aecba0 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.install @@ -0,0 +1 @@ +m2-w6920-32qc2x/modules/sonic_platform-1.0-py3-none-any.whl /usr/share/sonic/device/x86_64-micas_m2-w6920-32qc2x-r0 diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.postinst b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.postinst new file mode 100644 index 000000000000..a8132f4f65a9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6920-32qc2x.postinst @@ -0,0 +1,10 @@ +#!/bin/sh +# postinst + +kernel_version=$(uname -r) + +if [ -e /boot/System.map-${kernel_version} ]; then + depmod -a -F /boot/System.map-${kernel_version} ${kernel_version} || true +fi + +#DEBHELPER# diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.install b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.install new file mode 100644 index 000000000000..f6e2060d2d11 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.install @@ -0,0 +1 @@ +m2-w6930-64qc/modules/sonic_platform-1.0-py3-none-any.whl /usr/share/sonic/device/x86_64-micas_m2-w6930-64qc-r0 diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.postinst b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.postinst new file mode 100644 index 000000000000..a8132f4f65a9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6930-64qc.postinst @@ -0,0 +1,10 @@ +#!/bin/sh +# postinst + +kernel_version=$(uname -r) + +if [ -e /boot/System.map-${kernel_version} ]; then + depmod -a -F /boot/System.map-${kernel_version} ${kernel_version} || true +fi + +#DEBHELPER# diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.install b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.install new file mode 100644 index 000000000000..3247b8cdd083 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.install @@ -0,0 +1 @@ +m2-w6940-128qc/modules/sonic_platform-1.0-py3-none-any.whl /usr/share/sonic/device/x86_64-micas_m2-w6940-128qc-r0 diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.postinst b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.postinst new file mode 100644 index 000000000000..a8132f4f65a9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-128qc.postinst @@ -0,0 +1,10 @@ +#!/bin/sh +# postinst + +kernel_version=$(uname -r) + +if [ -e /boot/System.map-${kernel_version} ]; then + depmod -a -F /boot/System.map-${kernel_version} ${kernel_version} || true +fi + +#DEBHELPER# diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.install b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.install new file mode 100644 index 000000000000..49a8fe1026f3 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.install @@ -0,0 +1 @@ +m2-w6940-64oc/modules/sonic_platform-1.0-py3-none-any.whl /usr/share/sonic/device/x86_64-micas_m2-w6940-64oc-r0 diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.postinst b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.postinst new file mode 100644 index 000000000000..a8132f4f65a9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/debian/platform-modules-micas-m2-w6940-64oc.postinst @@ -0,0 +1,10 @@ +#!/bin/sh +# postinst + +kernel_version=$(uname -r) + +if [ -e /boot/System.map-${kernel_version} ]; then + depmod -a -F /boot/System.map-${kernel_version} ${kernel_version} || true +fi + +#DEBHELPER# diff --git a/platform/broadcom/sonic-platform-modules-micas/debian/rule.mk b/platform/broadcom/sonic-platform-modules-micas/debian/rule.mk index 5bd19a8ee8f1..66e05fe8104c 100644 --- a/platform/broadcom/sonic-platform-modules-micas/debian/rule.mk +++ b/platform/broadcom/sonic-platform-modules-micas/debian/rule.mk @@ -3,6 +3,10 @@ currentdir = $(shell pwd) MODULE_DIRS := m2-w6510-48v8c MODULE_DIRS += m2-w6510-48gt4v MODULE_DIRS += m2-w6520-24dc8qc +MODULE_DIRS += m2-w6940-128qc +MODULE_DIRS += m2-w6930-64qc +MODULE_DIRS += m2-w6940-64oc +MODULE_DIRS += m2-w6920-32qc2x MODULE_DIRS += m2-w6510-32c export MODULE_DIRS diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/Makefile new file mode 100755 index 000000000000..a0c262841c51 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/Makefile @@ -0,0 +1,28 @@ +PWD = $(shell pwd) +DIR_KERNEL_SRC = $(PWD)/modules/driver +EXTRA_CFLAGS:= -I$(M)/include +EXTRA_CFLAGS+= -Wall +SUB_BUILD_DIR = $(PWD)/build +INSTALL_DIR = $(SUB_BUILD_DIR)/$(KERNEL_SRC)/$(INSTALL_MOD_DIR) +INSTALL_SCRIPT_DIR = $(SUB_BUILD_DIR)/usr/local/bin +INSTALL_LIB_DIR = $(SUB_BUILD_DIR)/usr/lib/python3/dist-packages +INSTALL_SYSFS_CFG_DIR = $(SUB_BUILD_DIR)/etc/plat_sysfs_cfg +INSTALL_SERVICE_DIR = $(SUB_BUILD_DIR)/lib/systemd/system + +all: + $(MAKE) -C $(KBUILD_OUTPUT) M=$(DIR_KERNEL_SRC) modules + @if [ ! -d ${INSTALL_DIR} ]; then mkdir -p ${INSTALL_DIR} ;fi + cp -r $(DIR_KERNEL_SRC)/*.ko $(INSTALL_DIR) + @if [ ! -d ${INSTALL_SCRIPT_DIR} ]; then mkdir -p ${INSTALL_SCRIPT_DIR} ;fi + cp -r $(PWD)/config/* $(INSTALL_SCRIPT_DIR) + @if [ ! -d ${INSTALL_LIB_DIR} ]; then mkdir -p ${INSTALL_LIB_DIR} ;fi + @if [ -d $(PWD)/hal-config/ ]; then cp -r $(PWD)/hal-config/* ${INSTALL_LIB_DIR} ;fi + @if [ ! -d ${INSTALL_SYSFS_CFG_DIR} ]; then mkdir -p ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ -d $(PWD)/plat_sysfs_cfg/ ]; then cp -r $(PWD)/plat_sysfs_cfg/* ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ ! -d ${INSTALL_SERVICE_DIR} ]; then mkdir -p ${INSTALL_SERVICE_DIR} ;fi + @if [ -d $(PWD)/service/ ]; then cp -r $(PWD)/service/* ${INSTALL_SERVICE_DIR} ;fi +clean: + rm -f ${DIR_KERNEL_SRC}/*.o ${DIR_KERNEL_SRC}/*.ko ${DIR_KERNEL_SRC}/*.mod.c ${DIR_KERNEL_SRC}/.*.cmd + rm -f ${DIR_KERNEL_SRC}/Module.markers ${DIR_KERNEL_SRC}/Module.symvers ${DIR_KERNEL_SRC}/modules.order + rm -rf ${DIR_KERNEL_SRC}/.tmp_versions + rm -rf $(SUB_BUILD_DIR) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_config.py new file mode 100644 index 000000000000..6eee7b5df129 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_config.py @@ -0,0 +1,1443 @@ + +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from platform_common import * + +STARTMODULE = { + "hal_fanctrl": 1, + "hal_ledctrl": 1, + "avscontrol": 0, + "dev_monitor": 1, + "reboot_cause": 1, + "pmon_syslog": 1, + "sff_temp_polling": 1, + "generate_airflow": 1, + "set_eth_mac": 1, + "drv_update": 1, +} + +MANUINFO_CONF = { + "bios": { + "key": "BIOS", + "head": True, + "next": "onie" + }, + "bios_vendor": { + "parent": "bios", + "key": "Vendor", + "cmd": "dmidecode -t 0 |grep Vendor", + "pattern": r".*Vendor", + "separator": ":", + "arrt_index": 1, + }, + "bios_version": { + "parent": "bios", + "key": "Version", + "cmd": "dmidecode -t 0 |grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "bios_date": { + "parent": "bios", + "key": "Release Date", + "cmd": "dmidecode -t 0 |grep Release", + "pattern": r".*Release Date", + "separator": ":", + "arrt_index": 3, + }, + "onie": { + "key": "ONIE", + "next": "cpu" + }, + "onie_date": { + "parent": "onie", + "key": "Build Date", + "file": "/host/machine.conf", + "pattern": r"^onie_build_date", + "separator": "=", + "arrt_index": 1, + }, + "onie_version": { + "parent": "onie", + "key": "Version", + "file": "/host/machine.conf", + "pattern": r"^onie_version", + "separator": "=", + "arrt_index": 2, + }, + + "cpu": { + "key": "CPU", + "next": "cpld" + }, + "cpu_vendor": { + "parent": "cpu", + "key": "Vendor", + "cmd": "dmidecode --type processor |grep Manufacturer", + "pattern": r".*Manufacturer", + "separator": ":", + "arrt_index": 1, + }, + "cpu_model": { + "parent": "cpu", + "key": "Device Model", + "cmd": "dmidecode --type processor | grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "cpu_core": { + "parent": "cpu", + "key": "Core Count", + "cmd": "dmidecode --type processor | grep \"Core Count\"", + "pattern": r".*Core Count", + "separator": ":", + "arrt_index": 3, + }, + "cpu_thread": { + "parent": "cpu", + "key": "Thread Count", + "cmd": "dmidecode --type processor | grep \"Thread Count\"", + "pattern": r".*Thread Count", + "separator": ":", + "arrt_index": 4, + }, + "cpld": { + "key": "CPLD", + "next": "psu" + }, + + "cpld1": { + "key": "CPLD1", + "parent": "cpld", + "arrt_index": 1, + }, + "cpld1_model": { + "key": "Device Model", + "parent": "cpld1", + "config": "LCMXO3LF-1300C-5BG256C", + "arrt_index": 1, + }, + "cpld1_vender": { + "key": "Vendor", + "parent": "cpld1", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld1_desc": { + "key": "Description", + "parent": "cpld1", + "config": "CPU_CPLD", + "arrt_index": 3, + }, + "cpld1_version": { + "key": "Firmware Version", + "parent": "cpld1", + "reg": { + "loc": "/dev/port", + "offset": 0x700, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld2": { + "key": "CPLD2", + "parent": "cpld", + "arrt_index": 2, + }, + "cpld2_model": { + "key": "Device Model", + "parent": "cpld2", + "config": "LCMXO3LF-2100C-5BG324C", + "arrt_index": 1, + }, + "cpld2_vender": { + "key": "Vendor", + "parent": "cpld2", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld2_desc": { + "key": "Description", + "parent": "cpld2", + "config": "CTRL_CPLD", + "arrt_index": 3, + }, + "cpld2_version": { + "key": "Firmware Version", + "parent": "cpld2", + "reg": { + "loc": "/dev/port", + "offset": 0x900, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld3": { + "key": "CPLD3", + "parent": "cpld", + "arrt_index": 3, + }, + "cpld3_model": { + "key": "Device Model", + "parent": "cpld3", + "config": "LCMXO3LF_2100C_5BG256C", + "arrt_index": 1, + }, + "cpld3_vender": { + "key": "Vendor", + "parent": "cpld3", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld3_desc": { + "key": "Description", + "parent": "cpld3", + "config": "MAC_CPLDA", + "arrt_index": 3, + }, + "cpld3_version": { + "key": "Firmware Version", + "parent": "cpld3", + "i2c": { + "bus": "26", + "loc": "0x1d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld4": { + "key": "CPLD4", + "parent": "cpld", + "arrt_index": 4, + }, + "cpld4_model": { + "key": "Device Model", + "parent": "cpld4", + "config": "LCMXO3LF_1300C_5BG256C", + "arrt_index": 1, + }, + "cpld4_vender": { + "key": "Vendor", + "parent": "cpld4", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld4_desc": { + "key": "Description", + "parent": "cpld4", + "config": "MAC_CPLDB", + "arrt_index": 3, + }, + "cpld4_version": { + "key": "Firmware Version", + "parent": "cpld4", + "i2c": { + "bus": "26", + "loc": "0x2d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld5": { + "key": "CPLD5", + "parent": "cpld", + "arrt_index": 5, + }, + "cpld5_model": { + "key": "Device Model", + "parent": "cpld5", + "config": "LCMXO3LF_1300C_5BG256C", + "arrt_index": 1, + }, + "cpld5_vender": { + "key": "Vendor", + "parent": "cpld5", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld5_desc": { + "key": "Description", + "parent": "cpld5", + "config": "FAN_CPLD", + "arrt_index": 3, + }, + "cpld5_version": { + "key": "Firmware Version", + "parent": "cpld5", + "i2c": { + "bus": "28", + "loc": "0x3d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "psu": { + "key": "PSU", + "next": "fan" + }, + + "psu1": { + "parent": "psu", + "key": "PSU1", + "arrt_index": 1, + }, + "psu1_hw_version": { + "key": "Hardware Version", + "parent": "psu1", + "extra": { + "funcname": "getPsu", + "id": "psu1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu1_fw_version": { + "key": "Firmware Version", + "parent": "psu1", + "config": "NA", + "arrt_index": 2, + }, + + "psu2": { + "parent": "psu", + "key": "PSU2", + "arrt_index": 2, + }, + "psu2_hw_version": { + "key": "Hardware Version", + "parent": "psu2", + "extra": { + "funcname": "getPsu", + "id": "psu2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu2_fw_version": { + "key": "Firmware Version", + "parent": "psu2", + "config": "NA", + "arrt_index": 2, + }, + + "fan": { + "key": "FAN", + "next": "fpga" + }, + + "fan1": { + "key": "FAN1", + "parent": "fan", + "arrt_index": 1, + }, + "fan1_hw_version": { + "key": "Hardware Version", + "parent": "fan1", + "extra": { + "funcname": "checkFan", + "id": "fan1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan1_fw_version": { + "key": "Firmware Version", + "parent": "fan1", + "config": "NA", + "arrt_index": 2, + }, + + "fan2": { + "key": "FAN2", + "parent": "fan", + "arrt_index": 2, + }, + "fan2_hw_version": { + "key": "Hardware Version", + "parent": "fan2", + "extra": { + "funcname": "checkFan", + "id": "fan2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan2_fw_version": { + "key": "Firmware Version", + "parent": "fan2", + "config": "NA", + "arrt_index": 2, + }, + + "fan3": { + "key": "FAN3", + "parent": "fan", + "arrt_index": 3, + }, + "fan3_hw_version": { + "key": "Hardware Version", + "parent": "fan3", + "extra": { + "funcname": "checkFan", + "id": "fan3", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan3_fw_version": { + "key": "Firmware Version", + "parent": "fan3", + "config": "NA", + "arrt_index": 2, + }, + + "fan4": { + "key": "FAN4", + "parent": "fan", + "arrt_index": 4, + }, + "fan4_hw_version": { + "key": "Hardware Version", + "parent": "fan4", + "extra": { + "funcname": "checkFan", + "id": "fan4", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan4_fw_version": { + "key": "Firmware Version", + "parent": "fan4", + "config": "NA", + "arrt_index": 2, + }, + + "fan5": { + "key": "FAN5", + "parent": "fan", + "arrt_index": 5, + }, + "fan5_hw_version": { + "key": "Hardware Version", + "parent": "fan5", + "extra": { + "funcname": "checkFan", + "id": "fan5", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan5_fw_version": { + "key": "Firmware Version", + "parent": "fan5", + "config": "NA", + "arrt_index": 2, + }, + + "fan6": { + "key": "FAN6", + "parent": "fan", + "arrt_index": 6, + }, + "fan6_hw_version": { + "key": "Hardware Version", + "parent": "fan6", + "extra": { + "funcname": "checkFan", + "id": "fan6", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan6_fw_version": { + "key": "Firmware Version", + "parent": "fan6", + "config": "NA", + "arrt_index": 2, + }, + + "fpga": { + "key": "FPGA", + }, + + "fpga1": { + "key": "FPGA1", + "parent": "fpga", + "arrt_index": 1, + }, + "fpga1_model": { + "parent": "fpga1", + "config": "XC7A50T-2FGG484C", + "key": "Device Model", + "arrt_index": 1, + }, + "fpga1_vender": { + "parent": "fpga1", + "config": "XILINX", + "key": "Vendor", + "arrt_index": 2, + }, + "fpga1_desc": { + "key": "Description", + "parent": "fpga1", + "config": "MAC_FPGA", + "arrt_index": 3, + }, + "fpga1_hw_version": { + "parent": "fpga1", + "config": "NA", + "key": "Hardware Version", + "arrt_index": 4, + }, + "fpga1_fw_version": { + "parent": "fpga1", + "devfile": { + "loc": "/dev/fpga0", + "offset": 0, + "len": 4, + "bit_width": 4 + }, + "key": "Firmware Version", + "arrt_index": 5, + }, + "fpga1_date": { + "parent": "fpga1", + "pci": { + "bus": 4, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 4 + }, + "key": "Build Date", + "arrt_index": 6, + }, + + "others": { + "key": "OTHERS", + }, + "5387": { + "parent": "others", + "key": "CPU-BMC-SWITCH", + "arrt_index" : 1, + }, + "5387_model": { + "parent": "5387", + "config": "BCM53134O", + "key": "Device Model", + "arrt_index" : 1, + }, + "5387_vendor": { + "parent": "5387", + "config": "Broadcom", + "key": "Vendor", + "arrt_index" : 2, + }, + "5387_hw_version": { + "parent": "5387", + "key": "Hardware Version", + "func": { + "funcname": "get_bcm5387_version", + "params" : { + "before": [ + {"gettype": "cmd", "cmd": "echo 99 > /sys/class/gpio/export"}, + {"gettype": "cmd", "cmd": "echo out > /sys/class/gpio/gpio99/direction"}, + {"gettype": "cmd", "cmd": "echo 0 > /sys/class/gpio/gpio99/value"}, + # select update 5387 + {"gettype": "io", "io_addr": 0x991, "value": 0x6}, + {"gettype": "io", "io_addr": 0x990, "value": 0x1}, + {"gettype": "io", "io_addr": 0x9a6, "value": 0x2}, + {"gettype": "io", "io_addr": 0x9d4, "value": 0x0}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio_device sck=139 miso=88 mosi=89 cs=87 bus=0 gpio_chip_name=wb_gpio_c3000"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_93xx46 spi_bus_num=0"}, + ], + "get_version": "md5sum /sys/bus/spi/devices/spi0.0/eeprom | awk '{print $1}'", + "after": [ + {"gettype": "cmd", "cmd": "echo 1 > /sys/class/gpio/gpio99/value"}, + {"gettype": "cmd", "cmd": "echo 99 > /sys/class/gpio/unexport"}, + ], + "finally": [ + {"gettype": "cmd", "cmd": "rmmod wb_spi_93xx46"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio_device"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio"}, + {"gettype": "io", "io_addr": 0x9d4, "value": 0xff}, + {"gettype": "io", "io_addr": 0x9a6, "value": 0xff}, + {"gettype": "io", "io_addr": 0x990, "value": 0xfc}, + {"gettype": "io", "io_addr": 0x991, "value": 0xf8}, + ], + }, + }, + "arrt_index" : 3, + }, +} + +PMON_SYSLOG_STATUS = { + "polling_time": 3, + "sffs": { + "present": {"path": ["/sys/wb_plat/sff/*/present"], "ABSENT": 0}, + "nochangedmsgflag": 0, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 1, + "alias": { + "sff1": "Ethernet1", + "sff2": "Ethernet2", + "sff3": "Ethernet3", + "sff4": "Ethernet4", + "sff5": "Ethernet5", + "sff6": "Ethernet6", + "sff7": "Ethernet7", + "sff8": "Ethernet8", + "sff9": "Ethernet9", + "sff10": "Ethernet10", + "sff11": "Ethernet11", + "sff12": "Ethernet12", + "sff13": "Ethernet13", + "sff14": "Ethernet14", + "sff15": "Ethernet15", + "sff16": "Ethernet16", + "sff17": "Ethernet17", + "sff18": "Ethernet18", + "sff19": "Ethernet19", + "sff20": "Ethernet20", + "sff21": "Ethernet21", + "sff22": "Ethernet22", + "sff23": "Ethernet23", + "sff24": "Ethernet24", + "sff25": "Ethernet25", + "sff26": "Ethernet26", + "sff27": "Ethernet27", + "sff28": "Ethernet28", + "sff29": "Ethernet29", + "sff30": "Ethernet30", + "sff31": "Ethernet31", + "sff32": "Ethernet32", + } + }, + "fans": { + "present": {"path": ["/sys/wb_plat/fan/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/fan/%s/motor0/status", 'okval': 1}, + {"path": "/sys/wb_plat/fan/%s/motor1/status", 'okval': 1}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "fan1": "FAN1", + "fan2": "FAN2", + "fan3": "FAN3", + "fan4": "FAN4", + "fan5": "FAN5", + "fan6": "FAN6" + } + }, + "psus": { + "present": {"path": ["/sys/wb_plat/psu/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/psu/%s/output", "okval": 1}, + {"path": "/sys/wb_plat/psu/%s/alert", "okval": 0}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "psu1": "PSU1", + "psu2": "PSU2" + } + } +} + +##################### MAC Voltage adjust#################################### + +MAC_DEFAULT_PARAM = [ + { + "name": "mac_core", # AVS name + "type": 0, # 1: used default value, if rov value not in range. 0: do nothing, if rov value not in range + "default": 0x73, # default value, if rov value not in range + "rov_source": 0, # 0: get rov value from cpld, 1: get rov value from SDK + "cpld_avs": {"bus":26, "loc":0x2d, "offset":0x3f, "gettype":"i2c"}, + "set_avs": { + "loc": "/sys/bus/i2c/devices/30-0040/avs0_vout_command","gettype": "sysfs","formula": None}, + "mac_avs_param": { + 0x72:0x0e66 , + 0x73:0x0e4c , + 0x74:0x0e33 , + 0x75:0x0e19 , + 0x76:0x0e00 , + 0x77:0x0de6 , + 0x78:0x0dcc , + 0x79:0x0db3 , + 0x7a:0x0d99 , + 0x7b:0x0d80 , + 0x7c:0x0d66 , + 0x7d:0x0d4c , + 0x7e:0x0d33 , + 0x7f:0x0d19 , + 0x80:0x0d00 , + 0x81:0x0ce6 , + 0x82:0x0ccc , + 0x83:0x0cb3 , + 0x84:0x0c99 , + 0x85:0x0c80 , + 0x86:0x0c66 , + 0x87:0x0c4c , + 0x88:0x0c33 , + 0x89:0x0c19 , + 0x8A:0x0c00 + } + } +] + + +DRIVERLISTS = [ + {"name": "wb_gpio_c3000", "delay": 30}, + {"name": "wb_gpio_c3000_device", "delay": 0}, + {"name": "i2c_ismt", "delay": 0}, + {"name": "i2c_i801", "delay": 0}, + {"name": "i2c_dev", "delay": 0}, + {"name": "i2c_algo_bit", "delay": 0}, + {"name": "i2c_gpio", "delay": 0}, + {"name": "i2c_mux", "delay": 0}, + {"name": "wb_i2c_gpio_device gpio_sda=31 gpio_scl=32 gpio_chip_name=wb_gpio_c3000", "delay": 0}, + {"name": "mdio_bitbang", "delay": 0}, + {"name": "mdio_gpio", "delay": 0}, + {"name": "wb_mdio_gpio_device gpio_mdc=33 gpio_mdio=34 gpio_chip_name=wb_gpio_c3000", "delay": 0}, + {"name": "platform_common dfd_my_type=0x40c1", "delay":0}, + {"name": "wb_fpga_pcie", "delay": 0}, + {"name": "wb_pcie_dev", "delay": 0}, + {"name": "wb_pcie_dev_device", "delay": 0}, + {"name": "wb_lpc_drv", "delay": 0}, + {"name": "wb_lpc_drv_device", "delay": 0}, + {"name": "wb_io_dev", "delay": 0}, + {"name": "wb_io_dev_device", "delay": 0}, + {"name": "wb_i2c_dev", "delay": 0}, + {"name": "wb_fpga_i2c_bus_drv", "delay": 0}, + {"name": "wb_fpga_i2c_bus_device", "delay": 0}, + {"name": "wb_fpga_pca954x_drv", "delay": 0}, + {"name": "wb_fpga_pca954x_device", "delay": 0}, + {"name": "wb_i2c_dev_device", "delay": 0}, + {"name": "lm75", "delay":0}, + {"name": "tmp401", "delay":0}, + {"name": "optoe", "delay":0}, + {"name": "at24", "delay":0}, + {"name": "wb_mac_bsc", "delay": 0}, + {"name": "pmbus_core", "delay": 0}, + {"name": "ucd9000", "delay": 0}, + {"name": "wb_xdpe132g5c_pmbus", "delay":0}, + {"name": "xdpe12284", "delay": 0}, + {"name": "wb_csu550", "delay":0}, + {"name": "tps53679", "delay": 0}, + {"name": "wb_wdt", "delay": 0}, + {"name": "wb_wdt_device", "delay": 0}, + {"name": "plat_dfd", "delay":0}, + {"name": "plat_switch", "delay":0}, + {"name": "plat_fan", "delay":0}, + {"name": "plat_psu", "delay":0}, + {"name": "plat_sff", "delay":0}, + {"name": "plat_sensor", "delay":0}, + {"name": "hw_test", "delay": 0}, +] + + +DEVICE = [ + {"name":"24c02", "bus": 2, "loc": 0x56}, + {"name": "wb_mac_bsc_th3", "bus": 62, "loc": 0x44}, + {"name": "tps53688", "bus": 42, "loc": 0x68}, + {"name": "tps53688", "bus": 42, "loc": 0x6e}, + # fan + {"name":"24c64", "bus": 47, "loc": 0x50},#fan6 + {"name":"24c64", "bus": 48, "loc": 0x50},#fan5 + {"name":"24c64", "bus": 49, "loc": 0x50},#fan4 + {"name":"24c64", "bus": 50, "loc": 0x50},#fan3 + {"name":"24c64", "bus": 51, "loc": 0x50},#fan2 + {"name":"24c64", "bus": 52, "loc": 0x50},#fan1 + # psu + {"name":"24c02", "bus": 58, "loc": 0x50}, + {"name":"wb_fsp1200","bus":58, "loc":0x58}, + {"name":"24c02", "bus": 59, "loc": 0x50}, + {"name":"wb_fsp1200","bus":59, "loc":0x58}, + + {"name":"24c02", "bus": 54, "loc": 0x56}, #fan eeprom + {"name":"24c02", "bus": 55, "loc": 0x57}, #mac eeprom + #temp + {"name":"tmp411", "bus": 56, "loc":0x4c}, + {"name":"tmp411", "bus": 57, "loc":0x4c}, + {"name":"lm75", "bus":53, "loc":0x48}, + {"name":"lm75", "bus":53, "loc":0x49}, + {"name":"lm75", "bus":56, "loc":0x4b}, + {"name":"lm75", "bus":57, "loc":0x4f}, + {"name":"lm75", "bus":57, "loc":0x4e}, + # dcdc + {"name":"ucd90160", "bus": 41, "loc": 0x5b}, + {"name":"ucd90160", "bus": 60, "loc": 0x5b}, + {"name":"wb_xdpe132g5c_pmbus", "bus": 30, "loc": 0x40}, + {"name":"xdpe12284", "bus": 31, "loc": 0x66}, + {"name":"xdpe12284", "bus": 32, "loc": 0x70}, + {"name":"xdpe12284", "bus": 32, "loc": 0x6e}, + {"name":"xdpe12284", "bus": 42, "loc": 0x5e}, + {"name":"xdpe12284", "bus": 42, "loc": 0x68}, + {"name":"xdpe12284", "bus": 42, "loc": 0x6e}, +] + +OPTOE = [ + {"name": "optoe3", "startbus": 63, "endbus": 94}, + {"name": "optoe2", "startbus": 95, "endbus": 96}, +] + +REBOOT_CTRL_PARAM = { + "cpu": {"io_addr": 0x920, "rst_val": 0xfe, "rst_delay": 0, "gettype": "io"}, + "mac": {"io_addr": 0x921, "rst_val": 0xfe, "rst_delay": 1, "unlock_rst_val": 0xff, "unlock_rst_delay": 1, "gettype": "io"}, + "phy": {"io_addr": 0x923, "rst_val": 0xef, "rst_delay": 1, "unlock_rst_val": 0xff, "unlock_rst_delay": 1, "gettype": "io"}, +} + +REBOOT_CAUSE_PARA = { + "reboot_cause_list": [ + { + "name": "cold_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x988, "okval": 0}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Power Loss, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Power Loss, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size":1*1024*1024} + ] + }, + { + "name": "wdt_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x989, "okval": 1}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size":1*1024*1024} + ], + "finish_operation": [ + {"gettype": "io", "io_addr": 0x987, "value": 0xfc}, + ] + }, + { + "name": "otp_switch_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_switch_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_switch_reboot_flag"}, + ] + }, + { + "name": "otp_other_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_other_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_other_reboot_flag"}, + ] + }, + ], + "other_reboot_cause_record": [ + {"record_type": "file", "mode": "cover", "log": "Other, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Other, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], +} + +DEV_MONITOR_PARAM = { + "polling_time": 10, + "psus": [ + { + "name": "psu1", + "present": {"gettype": "i2c", "bus": 26, "loc": 0x1d, "offset": 0x34, "presentbit": 4, "okval": 0}, + "device": [ + {"id": "psu1pmbus", "name": "wb_fsp1200", "bus": 59, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu1frue2", "name": "24c02", "bus": 59, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "psu2", + "present": {"gettype": "i2c", "bus": 26, "loc": 0x1d, "offset": 0x34, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "psu2pmbus", "name": "wb_fsp1200", "bus": 58, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu2frue2", "name": "24c02", "bus": 58, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "fans": [ + { + "name": "fan1", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 5, "okval": 0}, + "device": [ + {"id": "fan1frue2", "name": "24c64", "bus": 52, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan2", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 4, "okval": 0}, + "device": [ + {"id": "fan2frue2", "name": "24c64", "bus": 51, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan3", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 3, "okval": 0}, + "device": [ + {"id": "fan3frue2", "name": "24c64", "bus": 50, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan4", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 2, "okval": 0}, + "device": [ + {"id": "fan4frue2", "name": "24c64", "bus": 49, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan5", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "fan5frue2", "name": "24c64", "bus": 48, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan6", + "present": {"gettype": "i2c", "bus": 28, "loc": 0x3d, "offset": 0x37, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "fan6frue2", "name": "24c64", "bus": 47, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "others": [ + { + "name": "eeprom", + "device": [ + {"id": "eeprom_1", "name": "24c02", "bus": 2, "loc": 0x56, "attr": "eeprom"}, + ], + }, + { + "name": "lm75", + "device": [ + {"id": "lm75_1", "name": "lm75", "bus": 53, "loc": 0x48, "attr": "hwmon"}, + {"id": "lm75_2", "name": "lm75", "bus": 53, "loc": 0x49, "attr": "hwmon"}, + {"id": "lm75_3", "name": "lm75", "bus": 56, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_4", "name": "lm75", "bus": 57, "loc": 0x4f, "attr": "hwmon"}, + {"id": "lm75_5", "name": "lm75", "bus": 57, "loc": 0x4e, "attr": "hwmon"}, + ], + }, + { + "name": "tmp411", + "device": [ + {"id": "tmp411_1", "name": "tmp411", "bus": 56, "loc": 0x4c, "attr": "hwmon"}, + {"id": "tmp411_2", "name": "tmp411", "bus": 57, "loc": 0x4c, "attr": "hwmon"}, + ], + }, + { + "name": "xdpe12284", + "device": [ + {"id": "xdpe12284_1", "name": "xdpe12284", "bus": 31, "loc": 0x66, "attr": "hwmon"}, + {"id": "xdpe12284_2", "name": "xdpe12284", "bus": 32, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_3", "name": "xdpe12284", "bus": 32, "loc": 0x6e, "attr": "hwmon"}, + {"id": "xdpe12284_4", "name": "xdpe12284", "bus": 42, "loc": 0x5e, "attr": "hwmon"}, + {"id": "xdpe12284_5", "name": "xdpe12284", "bus": 42, "loc": 0x68, "attr": "hwmon"}, + {"id": "xdpe12284_6", "name": "xdpe12284", "bus": 42, "loc": 0x6e, "attr": "hwmon"}, + ], + }, + ], +} + +INIT_PARAM_PRE = [] +INIT_COMMAND_PRE = [ + "i2cset -y -f 26 0x1d 0x51 0x03", + "i2cset -y -f 26 0x1d 0x54 0x03", +] + +INIT_PARAM = [] + +INIT_COMMAND = [] + + +WARM_UPGRADE_PARAM = { + "slot0": { + "VME": { + "chain1": [ + {"name": "BASE_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/base_cpld_transf_header.vme", + "init_cmd": [ + {"cmd": "echo 63 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo out > /sys/class/gpio/gpio63/direction", "gettype": "cmd"}, + {"cmd": "echo 0 > /sys/class/gpio/gpio63/value", "gettype": "cmd"}, + {"io_addr": 0x9cc, "value": 0x0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"io_addr": 0x932, "value": None, "gettype": "io"}, + {"io_addr": 0x933, "value": None, "gettype": "io"}, + {"io_addr": 0x937, "value": None, "gettype": "io"}, + {"io_addr": 0x938, "value": None, "gettype": "io"}, + {"io_addr": 0x939, "value": None, "gettype": "io"}, + {"io_addr": 0x93a, "value": None, "gettype": "io"}, + {"io_addr": 0x941, "value": None, "gettype": "io"}, + {"io_addr": 0x942, "value": None, "gettype": "io"}, + {"io_addr": 0x947, "value": None, "gettype": "io"}, + {"io_addr": 0x948, "value": None, "gettype": "io"}, + {"io_addr": 0x949, "value": None, "gettype": "io"}, + {"io_addr": 0x94d, "value": None, "gettype": "io"}, + {"io_addr": 0x94e, "value": None, "gettype": "io"}, + {"io_addr": 0x94f, "value": None, "gettype": "io"}, + {"io_addr": 0x950, "value": None, "gettype": "io"}, + {"io_addr": 0x951, "value": None, "gettype": "io"}, + {"io_addr": 0x952, "value": None, "gettype": "io"}, + {"io_addr": 0x953, "value": None, "gettype": "io"}, + {"io_addr": 0x990, "value": None, "gettype": "io"}, + {"io_addr": 0x991, "value": None, "gettype": "io"}, + {"io_addr": 0x9a3, "value": None, "gettype": "io"}, + {"io_addr": 0x9a4, "value": None, "gettype": "io"}, + {"io_addr": 0x9a5, "value": None, "gettype": "io"}, + {"io_addr": 0x9a6, "value": None, "gettype": "io"}, + {"io_addr": 0x9a7, "value": None, "gettype": "io"}, + {"io_addr": 0x9ad, "value": None, "gettype": "io"}, + {"io_addr": 0x9d2, "value": None, "gettype": "io"}, + {"io_addr": 0x9d3, "value": None, "gettype": "io"}, + {"io_addr": 0x9d4, "value": None, "gettype": "io"}, + {"io_addr": 0x9d5, "value": None, "gettype": "io"}, + {"io_addr": 0x9d6, "value": None, "gettype": "io"}, + {"io_addr": 0x9d7, "value": None, "gettype": "io"}, + {"io_addr": 0x9d8, "value": None, "gettype": "io"}, + ], + "after_upgrade_delay": 30, + "after_upgrade_delay_timeout": 60, + "refresh_finish_flag_check": {"io_addr": 0x9cb, "value": 0x5a, "gettype": "io"}, + "access_check_reg": {"io_addr": 0x955, "value": 0xaa, "gettype": "io"}, + "finish_cmd": [ + {"io_addr": 0x9cc, "value": 0xff, "gettype": "io"}, + {"cmd": "echo 1 > /sys/class/gpio/gpio63/value", "gettype": "cmd"}, + {"cmd": "echo 63 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + ], + }, + ], + + "chain2": [ + {"name": "MAC_CPLDA", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cplda_transf_header.vme", + "init_cmd": [ + {"io_addr": 0x9a7, "value": 0x1, "gettype": "io"}, + {"io_addr": 0x9cc, "value": 0x0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"bus": 26, "loc": 0x1d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x14, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x15, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x1c, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x1d, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x1f, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x20, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x21, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x22, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x35, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x36, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x37, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x38, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x39, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x3a, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x4c, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x4d, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x4e, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x4f, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x50, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x51, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x53, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x55, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x1d, "offset": 0x5f, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 26, "loc": 0x1d, "offset": 0xcb, "value": 0x5a, "gettype": "i2c"}, + "access_check_reg": {"bus": 26, "loc": 0x1d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"io_addr": 0x9cc, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x9a7, "value": 0x0, "gettype": "io"}, + ], + }, + + {"name": "MAC_CPLDB", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cpldb_transf_header.vme", + "init_cmd": [ + {"io_addr": 0x9a7, "value": 0x2, "gettype": "io"}, + {"io_addr": 0x9cc, "value": 0x0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"bus": 26, "loc": 0x2d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x14, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x15, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x22, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x23, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x30, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x31, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x32, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x3a, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x42, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x43, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x44, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x4a, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x4d, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x50, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x55, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x60, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x61, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x62, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x63, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x64, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0x65, "value": None, "gettype": "i2c"}, + {"bus": 26, "loc": 0x2d, "offset": 0xf3, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 26, "loc": 0x2d, "offset": 0xcb, "value": 0x5a, "gettype": "i2c"}, + "access_check_reg": {"bus": 26, "loc": 0x2d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"io_addr": 0x9cc, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x9a7, "value": 0x0, "gettype": "io"}, + ], + }, + ], + + "chain3": [ + {"name": "FAN_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/fan_cpld_transf_header.vme", + "init_cmd": [], + "rw_recover_reg": [ + {"bus": 28, "loc": 0x3d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x12, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x13, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x14, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x15, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x16, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x17, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x18, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x19, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x20, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x21, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x30, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x31, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x33, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x35, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x3a, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x3c, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x3d, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x3e, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x3f, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x40, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x41, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x60, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x61, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x62, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x63, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x64, "value": None, "gettype": "i2c"}, + {"bus": 28, "loc": 0x3d, "offset": 0x65, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"bus": 28, "loc": 0x3d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [], + }, + ], + + + "chain4": [ + {"name": "CPU_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/cpu_cpld_transf_header.vme", + "init_cmd": [ + {"cmd": "echo 114 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio114/direction", "gettype": "cmd"}, + {"io_addr": 0x7a5, "value": 0x0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"io_addr": 0x705, "value": None, "gettype": "io"}, + {"io_addr": 0x713, "value": None, "gettype": "io"}, + {"io_addr": 0x715, "value": None, "gettype": "io"}, + {"io_addr": 0x721, "value": None, "gettype": "io"}, + {"io_addr": 0x722, "value": None, "gettype": "io"}, + {"io_addr": 0x772, "value": None, "gettype": "io"}, + {"io_addr": 0x774, "value": None, "gettype": "io"}, + {"io_addr": 0x776, "value": None, "gettype": "io"}, + {"io_addr": 0x778, "value": None, "gettype": "io"}, + {"io_addr": 0x77a, "value": None, "gettype": "io"}, + {"io_addr": 0x77c, "value": None, "gettype": "io"}, + {"io_addr": 0x780, "value": None, "gettype": "io"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"io_addr": 0x705, "value": 0x5a, "gettype": "io"}, + "finish_cmd": [ + {"io_addr": 0x7a5, "value": 0x1, "gettype": "io"}, + {"cmd": "echo 0 > /sys/class/gpio/gpio114/value", "gettype": "cmd"}, + {"cmd": "echo 114 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + ], + }, + ], + + }, + + "MTD": { + "chain1": [ + {"name": "MAC_FPGA", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"cmd": "setpci -s 00:0e.0 0xA0.W=0x0050", "gettype": "cmd"}, # link_disable + {"io_addr": 0x9b0, "value": 0x3, "gettype": "io"}, + ], + "after_upgrade_delay": 10, + "after_upgrade_delay_timeout": 180, + "access_check_reg": { + "path": "/dev/fpga0", "offset": 0x8, "value": [0x55, 0xaa, 0x5a, 0xa5], "read_len":4, "gettype":"devfile", + "polling_cmd":[ + {"cmd": "setpci -s 00:0e.0 0xA0.W=0x0060", "gettype": "cmd"}, # retrain_link + {"cmd": "rmmod wb_fpga_pcie", "gettype": "cmd"}, + {"cmd": "modprobe wb_fpga_pcie", "gettype": "cmd", "delay": 0.1}, + ], + "polling_delay": 0.1 + }, + "finish_cmd": [ + {"cmd": "setpci -s 00:0e.0 0xA0.W=0x0060", "gettype": "cmd"}, # retrain_link + {"io_addr": 0x9b0, "value": 0x2, "gettype": "io"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ], + }, + }, + "stop_services_cmd": [ + "/usr/local/bin/platform_process.py stop", + ], + "start_services_cmd": [ + "/usr/local/bin/platform_process.py start", + ], +} + +UPGRADE_SUMMARY = { + "devtype": 0x40c1, + + "slot0": { + "subtype": 0, + "VME": { + "chain1": { + "name": "BASE_CPLD", + "is_support_warm_upg": 1, + }, + "chain2": { + "name": "MAC_CPLD", + "is_support_warm_upg": 1, + }, + "chain3": { + "name": "FAN_CPLD", + "is_support_warm_upg": 1, + }, + "chain4": { + "name": "CPU_CPLD", + "is_support_warm_upg": 1, + }, + }, + + "MTD": { + "chain1": { + "name": "MAC_FPGA", + "is_support_warm_upg": 1, + "init_cmd": [ + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=139 miso=88 mosi=89 cs=87 bus=0 gpio_chip_name=wb_gpio_c3000", "gettype": "cmd"}, + {"cmd": "echo 99 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo out > /sys/class/gpio/gpio99/direction", "gettype": "cmd", "delay": 0.1}, + {"cmd": "echo 0 > /sys/class/gpio/gpio99/value", "gettype": "cmd", "delay": 0.1}, + {"io_addr": 0x991, "value": 0xfa, "gettype": "io"}, + {"io_addr": 0x990, "value": 0xfd, "gettype": "io"}, + {"io_addr": 0x9a6, "value": 0xfe, "gettype": "io"}, + {"io_addr": 0x9d8, "value": 0xfd, "gettype": "io"}, + {"cmd": "modprobe wb_spi_nor_device spi_bus_num=0", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + {"cmd": "rmmod wb_spi_nor_device", "gettype": "cmd"}, + {"io_addr": 0x9d8, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x9a6, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x990, "value": 0xfc, "gettype": "io"}, + {"io_addr": 0x991, "value": 0xf8, "gettype": "io"}, + {"cmd": "echo 1 > /sys/class/gpio/gpio99/value", "gettype": "cmd"}, + {"cmd": "echo 99 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + ], + }, + + "chain3": { + "name": "BIOS", + "is_support_warm_upg": 0, + "filesizecheck": 10240, # bios check file size, Unit: K + "init_cmd": [ + {"io_addr": 0x722, "value": 0x02, "gettype": "io"}, + {"cmd": "modprobe mtd", "gettype": "cmd"}, + {"cmd": "modprobe spi_nor", "gettype": "cmd"}, + {"cmd": "modprobe ofpart", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi writeable=1", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi_pci", "gettype": "cmd"}, + ], + "finish_cmd": [ + {"cmd": "rmmod intel_spi_pci", "gettype": "cmd"}, + {"cmd": "rmmod intel_spi", "gettype": "cmd"}, + {"cmd": "rmmod ofpart", "gettype": "cmd"}, + {"cmd": "rmmod spi_nor", "gettype": "cmd"}, + {"cmd": "rmmod mtd", "gettype": "cmd"}, + ], + }, + }, + + "SYSFS": { + "chain2": { + "name": "BCM53134O", + "is_support_warm_upg": 0, + "init_cmd": [ + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=139 miso=88 mosi=89 cs=87 bus=0 gpio_chip_name=wb_gpio_c3000", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_93xx46 spi_bus_num=0", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + + {"cmd": "rmmod wb_spi_93xx46", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + ], + }, + }, + + "TEST": { + "cpld": [ + {"chain": 1, "file": "/etc/.upgrade_test/base_cpld_test_header.vme", "display_name": "BASE_CPLD"}, + {"chain": 2, "file": "/etc/.upgrade_test/mac_cpld_test_header.vme", "display_name": "MAC_CPLD"}, + {"chain": 3, "file": "/etc/.upgrade_test/fan_cpld_test_header.vme", "display_name": "FAN_CPLD"}, + {"chain": 4, "file": "/etc/.upgrade_test/cpu_cpld_test_header.vme", "display_name": "CPU_CPLD"}, + ], + "fpga": [ + {"chain": 1,"file": "/etc/.upgrade_test/fpga_test_header.bin","display_name": "FPGA",}, + ], + }, + }, +} + + +PLATFORM_E2_CONF = { + "fan": [ + {"name": "fan1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/52-0050/eeprom"}, + {"name": "fan2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/51-0050/eeprom"}, + {"name": "fan3", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/50-0050/eeprom"}, + {"name": "fan4", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/49-0050/eeprom"}, + {"name": "fan5", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/48-0050/eeprom"}, + {"name": "fan6", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/47-0050/eeprom"}, + ], + "psu": [ + {"name": "psu1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/59-0050/eeprom"}, + {"name": "psu2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/58-0050/eeprom"}, + ], + "syseeprom": [ + {"name": "syseeprom", "e2_type": "onie_tlv", "e2_path": "/sys/bus/i2c/devices/2-0056/eeprom"}, + ], +} + +AIR_FLOW_CONF = { + "psu_fan_airflow": { + "intake": ['GW-CRPS1300D', 'DPS-1300AB-6 F', 'DPS-1300AB-6 S'], + "exhaust": ['CRPS1300D3R', 'DPS-1300AB-11 C'] + }, + + "fanairflow": { + "intake": ['M1HFAN IV-F'], + "exhaust": ['M1HFAN IV-R'] + }, + + "fans": [ + { + "name": "FAN1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/52-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + { + "name": "FAN2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/51-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + { + "name": "FAN3", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/50-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + { + "name": "FAN4", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/49-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + { + "name": "FAN5", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/48-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + { + "name": "FAN6", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/47-0050/eeprom", + "area": "productInfoArea", "field": "productName", "decode": "fanairflow" + }, + ], + + "psus": [ + { + "name": "PSU1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/59-0050/eeprom", + "area": "productInfoArea", "field": "productPartModelName", "decode": "psu_fan_airflow" + }, + { + "name": "PSU2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/58-0050/eeprom", + "area": "productInfoArea", "field": "productPartModelName", "decode": "psu_fan_airflow" + } + ] +} + +SET_MAC_CONF = [ + { + "eth_name": "eth0", + "e2_name": "syseeprom", + "e2_type": "onie_tlv", + "e2_path": "/sys/bus/i2c/devices/2-0056/eeprom", + "mac_location": {"field": "Base MAC Address"}, + "ifcfg": { + "ifcfg_file_path": "/etc/network/interfaces.d/ifcfg-eth0-mac", "file_mode": "add", + } + } +] + +DRVIER_UPDATE_CONF = { + "reboot_flag": 1, + "drv_list": [ + { + "source": "extra/sdhci_pci.ko", + "target": "kernel/drivers/mmc/host/sdhci-pci.ko", + "judge_flag": "/sys/module/sdhci_pci/parameters/wb_sdhci_pci" + }, + ] +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_port_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_port_config.py new file mode 100644 index 000000000000..3395be3e48e9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/config/x86_64_micas_m2_w6920_32qc2x_r0_port_config.py @@ -0,0 +1,42 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +PLATFORM_INTF_OPTOE = { + "port_num": 34, + "port_bus_map": { + 1: 65, + 2: 66, + 3: 63, + 4: 64, + 5: 67, + 6: 68, + 7: 69, + 8: 70, + 9: 71, + 10: 72, + 11: 73, + 12: 74, + 13: 75, + 14: 76, + 15: 77, + 16: 78, + 17: 79, + 18: 80, + 19: 81, + 20: 82, + 21: 83, + 22: 84, + 23: 85, + 24: 86, + 25: 87, + 26: 88, + 27: 89, + 28: 90, + 29: 93, + 30: 94, + 31: 91, + 32: 92, + 33: 96, + 34: 95 + } +} \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_device.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_device.py new file mode 100644 index 000000000000..edbc3624c5d9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_device.py @@ -0,0 +1,1333 @@ +# coding:utf-8 + +psu_fan_airflow = { + "intake": ['GW-CRPS1300D', 'DPS-1300AB-6 F', 'DPS-1300AB-6 S'], + "exhaust": ['CRPS1300D3R', 'DPS-1300AB-11 C'] +} + +fanairflow = { + "intake": ['M1HFAN IV-F'], + "exhaust": ['M1HFAN IV-R'] +} + +psu_display_name = { + "PA1300I-F": ['GW-CRPS1300D', 'DPS-1300AB-6 F', 'DPS-1300AB-6 S'], + "PA1300I-R": ['CRPS1300D3R', 'DPS-1300AB-11 C'] +} + +psutypedecode = { + 0x00: 'N/A', + 0x01: 'AC', + 0x02: 'DC', +} + + +class Unit: + Temperature = "C" + Voltage = "V" + Current = "A" + Power = "W" + Speed = "RPM" + + +class threshold: + PSU_TEMP_MIN = -20 * 1000 + PSU_TEMP_MAX = 60 * 1000 + + PSU_FAN_SPEED_MIN = 3000 + PSU_FAN_SPEED_MAX = 30000 + + PSU_OUTPUT_VOLTAGE_MIN = 11 * 1000 + PSU_OUTPUT_VOLTAGE_MAX = 13 * 1000 + + PSU_AC_INPUT_VOLTAGE_MIN = 200 * 1000 + PSU_AC_INPUT_VOLTAGE_MAX = 240 * 1000 + + PSU_DC_INPUT_VOLTAGE_MIN = 190 * 1000 + PSU_DC_INPUT_VOLTAGE_MAX = 290 * 1000 + + ERR_VALUE = -9999999 + + PSU_OUTPUT_POWER_MIN = 5 * 1000 * 1000 + PSU_OUTPUT_POWER_MAX = 1300 * 1000 * 1000 + + PSU_INPUT_POWER_MIN = 5 * 1000 * 1000 + PSU_INPUT_POWER_MAX = 1400* 1000 * 1000 + + PSU_OUTPUT_CURRENT_MIN = 1 * 1000 + PSU_OUTPUT_CURRENT_MAX = 107 * 1000 + + PSU_INPUT_CURRENT_MIN = 0.05 * 1000 + PSU_INPUT_CURRENT_MAX = 12 * 1000 + + FRONT_FAN_SPEED_MAX = 32500 + REAR_FAN_SPEED_MAX = 30500 + FAN_SPEED_MIN = 7248 + + +class Description: + CPLD = "Used for managing IO modules, SFP+ modules and system LEDs" + BIOS = "Performs initialization of hardware components during booting" + FPGA = "Platform management controller for on-board temperature monitoring, in-chassis power" + + +devices = { + "onie_e2": [ + { + "name": "ONIE_E2", + "e2loc": {"loc": "/sys/bus/i2c/devices/2-0056/eeprom", "way": "sysfs"}, + "airflow": "intake" + }, + ], + "psus": [ + { + "e2loc": {"loc": "/sys/bus/i2c/devices/59-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 59, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU1", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 59, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/58-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 58, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU2", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "InputsStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 58, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + ], + "temps": [ + { + "name": "BOARD_TEMP", + "temp_id": "TEMP1", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/57-004f/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/57-004e/hwmon/hwmon*/temp1_input", "way": "sysfs"} + ], + "Min": -10000, + "Low": 0, + "High": 85000, + "Max": 90000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "CPU_TEMP", + "temp_id": "TEMP2", + "Temperature": { + "value": {"loc": "/sys/bus/platform/devices/coretemp.0/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": 2000, + "Low": 10000, + "High": 85000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "INLET_TEMP", + "temp_id": "TEMP3", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/56-004b/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + ], + "Min": -10000, + "Low": 0, + "High": 50000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "OUTLET_TEMP", + "temp_id": "TEMP4", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/53-0048/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/53-0049/hwmon/hwmon*/temp1_input", "way": "sysfs"} + ], + "Min": -10000, + "Low": 0, + "High": 85000, + "Max": 90000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SWITCH_TEMP", + "temp_id": "TEMP5", + "api_name": "ASIC_TEMP", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/56-004c/hwmon/hwmon*/temp2_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/57-004c/hwmon/hwmon*/temp2_input", "way": "sysfs"} + ], + "Min": 2000, + "Low": 10000, + "High": 100000, + "Max": 105000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU1_TEMP", + "temp_id": "TEMP6", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/59-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -20000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU2_TEMP", + "temp_id": "TEMP7", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/58-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -20000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SFF_TEMP", + "Temperature": { + "value": {"loc": "/tmp/highest_sff_temp", "way": "sysfs", "flock_path": "/tmp/highest_sff_temp"}, + "Min": -15000, + "Low": 0, + "High": 80000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + ], + "leds": [ + { + "name": "BOARD_SYS_LED", + "led_type": "SYS_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x40, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + { + "name": "BOARD_FAN_LED", + "led_type": "FAN_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x42, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + { + "name": "BOARD_PSU_LED", + "led_type": "PSU_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x43, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + ], + "fans": [ + { + "name": "FAN1", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/52-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x41, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x65, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x65, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN2", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/51-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x40, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x64, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x64, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN3", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/50-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan3/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3f, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x63, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x63, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN4", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/49-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan4/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3e, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x62, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x62, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN5", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/48-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan5/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3d, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x61, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x61, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN6", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/47-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan6/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3c, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x60, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x60, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + ], + "cplds": [ + { + "name": "CPU_CPLD", + "cpld_id": "CPLD1", + "VersionFile": {"loc": "/dev/cpld0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for system power", + "slot": 0, + "warm": 0, + }, + { + "name": "CTRL_CPLD", + "cpld_id": "CPLD2", + "VersionFile": {"loc": "/dev/cpld1", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_CPLDA", + "cpld_id": "CPLD3", + "VersionFile": {"loc": "/dev/cpld2", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for SFP+ modules", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_CPLDB", + "cpld_id": "CPLD4", + "VersionFile": {"loc": "/dev/cpld3", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for SFP+ modules", + "slot": 0, + "warm": 0, + }, + { + "name": "FAN_CPLD", + "cpld_id": "CPLD5", + "VersionFile": {"loc": "/dev/cpld4", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for fan modules", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_FPGA", + "cpld_id": "CPLD6", + "VersionFile": {"loc": "/dev/fpga0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "format": "little_endian", + "warm": 1, + }, + { + "name": "BIOS", + "cpld_id": "CPLD7", + "VersionFile": {"cmd": "dmidecode -s bios-version", "way": "cmd"}, + "desc": "Performs initialization of hardware components during booting", + "slot": 0, + "type": "str", + "warm": 0, + }, + ], + "dcdc": [ + { + "name": "MAC_VCC12V_CON", + "dcdc_id": "DCDC1", + "Min": 11400, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.0V_FPGA", + "dcdc_id": "DCDC2", + "Min": 950, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1050, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.8V_FPGA", + "dcdc_id": "DCDC3", + "Min": 1710, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1890, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.2V_FPGA", + "dcdc_id": "DCDC4", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V", + "dcdc_id": "DCDC5", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_DVDD3.3V_1.8V", + "dcdc_id": "DCDC6", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_AVDD1.8V", + "dcdc_id": "DCDC7", + "Min": 1710, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1890, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_DVDD1.2V", + "dcdc_id": "DCDC8", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in8_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_AVDD1.2V", + "dcdc_id": "DCDC9", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in9_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V_SFP+", + "dcdc_id": "DCDC10", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in10_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V_CLK", + "dcdc_id": "DCDC11", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in11_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD5V_VR", + "dcdc_id": "DCDC12", + "Min": 4500, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in13_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 5500, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_CORE", + "dcdc_id": "DCDC13", + "Min": 700, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in14_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 980, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_ANALOG", + "dcdc_id": "DCDC14", + "Min": 760, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in15_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 920, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_ANALOG1", + "dcdc_id": "DCDC15", + "Min": 760, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in16_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 920, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD3.3V", + "dcdc_id": "DCDC16", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD12V", + "dcdc_id": "DCDC17", + "Min": 11400, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD3.3_STBY", + "dcdc_id": "DCDC18", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_SSD1_VDD3.3V", + "dcdc_id": "DCDC19", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_PHY_VDD1V0", + "dcdc_id": "DCDC20", + "Min": 950, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1100, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_OVDD_PHY_M", + "dcdc_id": "DCDC21", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VCCP", + "dcdc_id": "DCDC22", + "Min": 468, + "value": { + "loc": "/sys/bus/i2c/devices/42-0068/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1364, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VNN", + "dcdc_id": "DCDC23", + "Min": 585, + "value": { + "loc": "/sys/bus/i2c/devices/42-0068/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1364, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_P1V05", + "dcdc_id": "DCDC24", + "Min": 945, + "value": { + "loc": "/sys/bus/i2c/devices/42-006e/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1155, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VCCRAM", + "dcdc_id": "DCDC25", + "Min": 675, + "value": { + "loc": "/sys/bus/i2c/devices/42-006e/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1320, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_P1V2_VDDQ", + "dcdc_id": "DCDC26", + "Min": 1080, + "value": { + "loc": "/sys/bus/i2c/devices/42-005e/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1320, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3_MON", + "dcdc_id": "DCDC27", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in3/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_QSFPDD_VDD3.3V_A", + "dcdc_id": "DCDC28", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in1/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_QSFPDD_VDD3.3V_B", + "dcdc_id": "DCDC29", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in2/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.7V_CLK", + "dcdc_id": "DCDC30", + "Min": 3500, + "value": { + "loc": "/sys/wb_plat/sensor/in4/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 4000, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD5V_USB", + "dcdc_id": "DCDC31", + "Min": 4500, + "value": { + "loc": "/sys/wb_plat/sensor/in5/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 5500, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN6_VDD12V", + "dcdc_id": "DCDC32", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in11/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN5_VDD12V", + "dcdc_id": "DCDC33", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in10/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN4_VDD12V", + "dcdc_id": "DCDC34", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in9/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN3_VDD12V", + "dcdc_id": "DCDC35", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in8/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN2_VDD12V", + "dcdc_id": "DCDC36", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in7/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN1_VDD12V", + "dcdc_id": "DCDC37", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in6/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN_VDD3.3V", + "dcdc_id": "DCDC38", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in12/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + ], + "cpu": [ + { + "name": "cpu", + "CpuResetCntReg": {"loc": "/dev/cpld1", "offset": 0x88, "len": 1, "way": "devfile_ascii"}, + "reboot_cause_path": "/etc/sonic/.reboot/.previous-reboot-cause.txt" + } + ], + "cards": [ + { + "name": "psu1", + "sn": "123" + }, + { + "name": "psu2", + "sn": "456" + }, + ], + "sfps": { + "ver": '1.0', + "port_index_start": 0, + "port_num": 34, + "log_level": 2, + "eeprom_retry_times": 5, + "eeprom_retry_break_sec": 0.2, + "presence_cpld": { + "dev_id": { + 2: { + "offset": { + 0x32: "17-24", + 0x33: "25-28,31,32,29,30", + 0x46: "34,33", + }, + }, + 3: { + "offset": { + 0x4E: "3,4,1,2,5-8", + 0x4F: "9-16", + }, + }, + }, + }, + "presence_val_is_present": 0, + "eeprom_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/eeprom", + "eeprom_path_key": [65,66,63,64] + list(range(67, 91)) + [93,94,91,92,96,95], + "optoe_driver_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/dev_class", + "optoe_driver_key": [65,66,63,64] + list(range(67, 91)) + [93,94,91,92,96,95], + "reset_cpld": { + "dev_id": { + 2: { + "offset": { + 0x21: "17-24", + 0x22: "25-28,31,32,29,30", + }, + }, + 3: { + "offset": { + 0x22: "3,4,1,2,5-8", + 0x23: "9-16", + }, + }, + }, + }, + "reset_val_is_reset": 0, + "txdis_cpld": { + "dev_id": { + 2: { + "offset": { + 0x50: "34,33", + }, + }, + }, + }, + "txdisable_val_is_on": 1, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_device.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_device.py new file mode 100644 index 000000000000..ceea936bd5cd --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_device.py @@ -0,0 +1,1333 @@ +# coding:utf-8 + +psu_fan_airflow = { + "intake": ['GW-CRPS1300D', 'DPS-1300AB-6 F', 'DPS-1300AB-6 S'], + "exhaust": ['CRPS1300D3R', 'DPS-1300AB-11 C'] +} + +fanairflow = { + "intake": ['M1HFAN IV-F'], + "exhaust": ['M1HFAN IV-R'] +} + +psu_display_name = { + "PA1300I-F": ['GW-CRPS1300D', 'DPS-1300AB-6 F', 'DPS-1300AB-6 S'], + "PA1300I-R": ['CRPS1300D3R', 'DPS-1300AB-11 C'] +} + +psutypedecode = { + 0x00: 'N/A', + 0x01: 'AC', + 0x02: 'DC', +} + + +class Unit: + Temperature = "C" + Voltage = "V" + Current = "A" + Power = "W" + Speed = "RPM" + + +class threshold: + PSU_TEMP_MIN = -20 * 1000 + PSU_TEMP_MAX = 60 * 1000 + + PSU_FAN_SPEED_MIN = 3000 + PSU_FAN_SPEED_MAX = 30000 + + PSU_OUTPUT_VOLTAGE_MIN = 11 * 1000 + PSU_OUTPUT_VOLTAGE_MAX = 13 * 1000 + + PSU_AC_INPUT_VOLTAGE_MIN = 200 * 1000 + PSU_AC_INPUT_VOLTAGE_MAX = 240 * 1000 + + PSU_DC_INPUT_VOLTAGE_MIN = 190 * 1000 + PSU_DC_INPUT_VOLTAGE_MAX = 290 * 1000 + + ERR_VALUE = -9999999 + + PSU_OUTPUT_POWER_MIN = 5 * 1000 * 1000 + PSU_OUTPUT_POWER_MAX = 1300 * 1000 * 1000 + + PSU_INPUT_POWER_MIN = 5 * 1000 * 1000 + PSU_INPUT_POWER_MAX = 1400* 1000 * 1000 + + PSU_OUTPUT_CURRENT_MIN = 1 * 1000 + PSU_OUTPUT_CURRENT_MAX = 107 * 1000 + + PSU_INPUT_CURRENT_MIN = 0.05 * 1000 + PSU_INPUT_CURRENT_MAX = 12 * 1000 + + FRONT_FAN_SPEED_MAX = 32500 + REAR_FAN_SPEED_MAX = 30500 + FAN_SPEED_MIN = 7248 + + +class Description: + CPLD = "Used for managing IO modules, SFP+ modules and system LEDs" + BIOS = "Performs initialization of hardware components during booting" + FPGA = "Platform management controller for on-board temperature monitoring, in-chassis power" + + +devices = { + "onie_e2": [ + { + "name": "ONIE_E2", + "e2loc": {"loc": "/sys/bus/i2c/devices/2-0056/eeprom", "way": "sysfs"}, + "airflow": "exhaust" + }, + ], + "psus": [ + { + "e2loc": {"loc": "/sys/bus/i2c/devices/59-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 59, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU1", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 59, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 59, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-59/59-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/58-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 58, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU2", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "InputsStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 58, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 58, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": + { + "value": {"loc": "/sys/bus/i2c/devices/i2c-58/58-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + ], + "temps": [ + { + "name": "BOARD_TEMP", + "temp_id": "TEMP1", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/57-004f/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/57-004e/hwmon/hwmon*/temp1_input", "way": "sysfs"} + ], + "Min": -10000, + "Low": 0, + "High": 85000, + "Max": 90000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "CPU_TEMP", + "temp_id": "TEMP2", + "Temperature": { + "value": {"loc": "/sys/bus/platform/devices/coretemp.0/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": 2000, + "Low": 10000, + "High": 85000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "INLET_TEMP", + "temp_id": "TEMP3", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/53-0048/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/53-0049/hwmon/hwmon*/temp1_input", "way": "sysfs"} + ], + "Min": -10000, + "Low": 0, + "High": 50000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "OUTLET_TEMP", + "temp_id": "TEMP4", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/56-004b/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + ], + "Min": -10000, + "Low": 0, + "High": 85000, + "Max": 90000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SWITCH_TEMP", + "temp_id": "TEMP5", + "api_name": "ASIC_TEMP", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/56-004c/hwmon/hwmon*/temp2_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/57-004c/hwmon/hwmon*/temp2_input", "way": "sysfs"} + ], + "Min": 2000, + "Low": 10000, + "High": 100000, + "Max": 105000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU1_TEMP", + "temp_id": "TEMP6", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/59-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -20000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU2_TEMP", + "temp_id": "TEMP7", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/58-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -20000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SFF_TEMP", + "Temperature": { + "value": {"loc": "/tmp/highest_sff_temp", "way": "sysfs", "flock_path": "/tmp/highest_sff_temp"}, + "Min": -15000, + "Low": 0, + "High": 80000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + ], + "leds": [ + { + "name": "BOARD_SYS_LED", + "led_type": "SYS_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x40, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + { + "name": "BOARD_FAN_LED", + "led_type": "FAN_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x42, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + { + "name": "BOARD_PSU_LED", + "led_type": "PSU_LED", + "led": {"bus": 26, "addr": 0x2d, "offset": 0x43, "way": "i2c"}, + "led_attrs": { + "green": 0x06, "red": 0x05, "amber": 0x03, "default": 0x06, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x0f + }, + }, + ], + "fans": [ + { + "name": "FAN1", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/52-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x41, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x65, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x65, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN2", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/51-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x40, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x64, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x64, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN3", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/50-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan3/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3f, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x63, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x63, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN4", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/49-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan4/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3e, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x62, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x62, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN5", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/48-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan5/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3d, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x61, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x61, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN6", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/47-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan6/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 28, "addr": 0x3d, "offset": 0x3c, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x60, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Set_speed": {"bus": 28, "addr": 0x3d, "offset": 0x60, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + ], + "cplds": [ + { + "name": "CPU_CPLD", + "cpld_id": "CPLD1", + "VersionFile": {"loc": "/dev/cpld0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for system power", + "slot": 0, + "warm": 0, + }, + { + "name": "CTRL_CPLD", + "cpld_id": "CPLD2", + "VersionFile": {"loc": "/dev/cpld1", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_CPLDA", + "cpld_id": "CPLD3", + "VersionFile": {"loc": "/dev/cpld2", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for SFP+ modules", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_CPLDB", + "cpld_id": "CPLD4", + "VersionFile": {"loc": "/dev/cpld3", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for SFP+ modules", + "slot": 0, + "warm": 0, + }, + { + "name": "FAN_CPLD", + "cpld_id": "CPLD5", + "VersionFile": {"loc": "/dev/cpld4", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for fan modules", + "slot": 0, + "warm": 0, + }, + { + "name": "MAC_FPGA", + "cpld_id": "CPLD6", + "VersionFile": {"loc": "/dev/fpga0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "format": "little_endian", + "warm": 1, + }, + { + "name": "BIOS", + "cpld_id": "CPLD7", + "VersionFile": {"cmd": "dmidecode -s bios-version", "way": "cmd"}, + "desc": "Performs initialization of hardware components during booting", + "slot": 0, + "type": "str", + "warm": 0, + }, + ], + "dcdc": [ + { + "name": "MAC_VCC12V_CON", + "dcdc_id": "DCDC1", + "Min": 11400, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.0V_FPGA", + "dcdc_id": "DCDC2", + "Min": 950, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1050, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.8V_FPGA", + "dcdc_id": "DCDC3", + "Min": 1710, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1890, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD1.2V_FPGA", + "dcdc_id": "DCDC4", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V", + "dcdc_id": "DCDC5", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_DVDD3.3V_1.8V", + "dcdc_id": "DCDC6", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_AVDD1.8V", + "dcdc_id": "DCDC7", + "Min": 1710, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1890, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_DVDD1.2V", + "dcdc_id": "DCDC8", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in8_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_AVDD1.2V", + "dcdc_id": "DCDC9", + "Min": 1130, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in9_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1280, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V_SFP+", + "dcdc_id": "DCDC10", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in10_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3V_CLK", + "dcdc_id": "DCDC11", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in11_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD5V_VR", + "dcdc_id": "DCDC12", + "Min": 4500, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in13_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 5500, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_CORE", + "dcdc_id": "DCDC13", + "Min": 700, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in14_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 980, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_ANALOG", + "dcdc_id": "DCDC14", + "Min": 760, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in15_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 920, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD_ANALOG1", + "dcdc_id": "DCDC15", + "Min": 760, + "value": { + "loc": "/sys/bus/i2c/devices/60-005b/hwmon/hwmon*/in16_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 920, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD3.3V", + "dcdc_id": "DCDC16", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD12V", + "dcdc_id": "DCDC17", + "Min": 11400, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_VDD3.3_STBY", + "dcdc_id": "DCDC18", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_SSD1_VDD3.3V", + "dcdc_id": "DCDC19", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_PHY_VDD1V0", + "dcdc_id": "DCDC20", + "Min": 950, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1100, + "format": "float(float(%s)/1000)", + }, + + { + "name": "BASE_OVDD_PHY_M", + "dcdc_id": "DCDC21", + "Min": 3135, + "value": { + "loc": "/sys/bus/i2c/devices/41-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3465, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VCCP", + "dcdc_id": "DCDC22", + "Min": 468, + "value": { + "loc": "/sys/bus/i2c/devices/42-0068/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1364, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VNN", + "dcdc_id": "DCDC23", + "Min": 585, + "value": { + "loc": "/sys/bus/i2c/devices/42-0068/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1364, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_P1V05", + "dcdc_id": "DCDC24", + "Min": 945, + "value": { + "loc": "/sys/bus/i2c/devices/42-006e/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1155, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_VCCRAM", + "dcdc_id": "DCDC25", + "Min": 675, + "value": { + "loc": "/sys/bus/i2c/devices/42-006e/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1320, + "format": "float(float(%s)/1000)", + }, + + { + "name": "CPU_P1V2_VDDQ", + "dcdc_id": "DCDC26", + "Min": 1080, + "value": { + "loc": "/sys/bus/i2c/devices/42-005e/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 1320, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.3_MON", + "dcdc_id": "DCDC27", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in3/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_QSFPDD_VDD3.3V_A", + "dcdc_id": "DCDC28", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in1/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_QSFPDD_VDD3.3V_B", + "dcdc_id": "DCDC29", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in2/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD3.7V_CLK", + "dcdc_id": "DCDC30", + "Min": 3500, + "value": { + "loc": "/sys/wb_plat/sensor/in4/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 4000, + "format": "float(float(%s)/1000)", + }, + + { + "name": "MAC_VDD5V_USB", + "dcdc_id": "DCDC31", + "Min": 4500, + "value": { + "loc": "/sys/wb_plat/sensor/in5/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 5500, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN6_VDD12V", + "dcdc_id": "DCDC32", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in11/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN5_VDD12V", + "dcdc_id": "DCDC33", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in10/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN4_VDD12V", + "dcdc_id": "DCDC34", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in9/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN3_VDD12V", + "dcdc_id": "DCDC35", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in8/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN2_VDD12V", + "dcdc_id": "DCDC36", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in7/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN1_VDD12V", + "dcdc_id": "DCDC37", + "Min": 11400, + "value": { + "loc": "/sys/wb_plat/sensor/in6/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 12600, + "format": "float(float(%s)/1000)", + }, + + { + "name": "FAN_VDD3.3V", + "dcdc_id": "DCDC38", + "Min": 3040, + "value": { + "loc": "/sys/wb_plat/sensor/in12/in_input", + "way": "sysfs", + }, + "read_times": 5, + "Unit": "V", + "Max": 3560, + "format": "float(float(%s)/1000)", + }, + ], + "cpu": [ + { + "name": "cpu", + "CpuResetCntReg": {"loc": "/dev/cpld1", "offset": 0x88, "len": 1, "way": "devfile_ascii"}, + "reboot_cause_path": "/etc/sonic/.reboot/.previous-reboot-cause.txt" + } + ], + "cards": [ + { + "name": "psu1", + "sn": "123" + }, + { + "name": "psu2", + "sn": "456" + }, + ], + "sfps": { + "ver": '1.0', + "port_index_start": 0, + "port_num": 34, + "log_level": 2, + "eeprom_retry_times": 5, + "eeprom_retry_break_sec": 0.2, + "presence_cpld": { + "dev_id": { + 2: { + "offset": { + 0x32: "17-24", + 0x33: "25-28,31,32,29,30", + 0x46: "34,33", + }, + }, + 3: { + "offset": { + 0x4E: "3,4,1,2,5-8", + 0x4F: "9-16", + }, + }, + }, + }, + "presence_val_is_present": 0, + "eeprom_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/eeprom", + "eeprom_path_key": [65,66,63,64] + list(range(67, 91)) + [93,94,91,92,96,95], + "optoe_driver_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/dev_class", + "optoe_driver_key": [65,66,63,64] + list(range(67, 91)) + [93,94,91,92,96,95], + "reset_cpld": { + "dev_id": { + 2: { + "offset": { + 0x21: "17-24", + 0x22: "25-28,31,32,29,30", + }, + }, + 3: { + "offset": { + 0x22: "3,4,1,2,5-8", + 0x23: "9-16", + }, + }, + }, + }, + "reset_val_is_reset": 0, + "txdis_cpld": { + "dev_id": { + 2: { + "offset": { + 0x50: "34,33", + }, + }, + }, + }, + "txdisable_val_is_on": 1, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_monitor.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_monitor.py new file mode 100644 index 000000000000..5bd96813eb2b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_exhaust_monitor.py @@ -0,0 +1,213 @@ +# coding:utf-8 + + +monitor = { + "openloop": { + "linear": { + "name": "linear", + "flag": 0, + "pwm_min": 0x8d, + "pwm_max": 0xff, + "K": 11, + "tin_min": 28, + }, + "curve": { + "name": "curve", + "flag": 1, + "pwm_min": 0x8d, + "pwm_max": 0xff, + "a": 0.1255, + "b": -1.2036, + "c": 76, + "tin_min": 25, + }, + }, + + "pid": { + "CPU_TEMP": { + "name": "CPU_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 0.2, + "Kd": 0.3, + "target": 80, + "value": [None, None, None], + }, + "SWITCH_TEMP": { + "name": "SWITCH_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 0.3, + "Kd": 0.3, + "target": 78, + "value": [None, None, None], + }, + "OUTLET_TEMP": { + "name": "OUTLET_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 65, + "value": [None, None, None], + }, + "BOARD_TEMP": { + "name": "BOARD_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 83, + "value": [None, None, None], + }, + "SFF_TEMP": { + "name": "SFF_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 0.3, + "Ki": 0.2, + "Kd": 0, + "target": 65, + "value": [None, None, None], + }, + }, + + "temps_threshold": { + "SWITCH_TEMP": {"name": "SWITCH_TEMP", "warning": 100, "critical": 110}, + "INLET_TEMP": {"name": "INLET_TEMP", "warning": 45, "critical": 50, "fix": -2}, + "BOARD_TEMP": {"name": "BOARD_TEMP", "warning": 90, "critical": 95}, + "OUTLET_TEMP": {"name": "OUTLET_TEMP", "warning": 70, "critical": 75}, + "CPU_TEMP": {"name": "CPU_TEMP", "warning": 87, "critical": 93}, + "SFF_TEMP": {"name": "SFF_TEMP", "warning": 999, "critical": 1000, "ignore_threshold": 1, "invalid": -10000, "error": -9999}, + }, + + "fancontrol_para": { + "interval": 5, + "fan_status_interval": 0.5, + "max_pwm": 0xff, + "min_pwm": 0x8d, + "abnormal_pwm": 0xff, + "warning_pwm": 0xff, + "temp_invalid_pid_pwm": 0x8d, + "temp_error_pid_pwm": 0x8d, + "temp_fail_num": 3, + "check_temp_fail": [ + {"temp_name": "INLET_TEMP"}, + {"temp_name": "SWITCH_TEMP"}, + {"temp_name": "CPU_TEMP"}, + ], + "temp_warning_num": 3, # temp over warning 3 times continuously + "temp_critical_num": 3, # temp over critical 3 times continuously + "temp_warning_countdown": 60, # 5 min warning speed after not warning + "temp_critical_countdown": 60, # 5 min full speed after not critical + "rotor_error_count": 6, # fan rotor error 6 times continuously + "inlet_mac_diff": 999, + "check_crit_reboot_flag": 1, + "check_crit_reboot_num": 3, + "check_crit_sleep_time": 20, + + "deal_all_fan_error_method_flag": 1, + "all_fan_error_switch_temp_critical_temp": 95, + "all_fan_error_recover_log": "Power off base and mac board.", + "all_fan_error_recover_cmd": "dfd_debug io_wr 0x947 0xfa", + "all_fan_error_check_crit_reboot_num": 3, + "all_fan_error_check_crit_sleep_time": 2, + + "psu_absent_fullspeed_num": 0xFF, #Full-speed switchover - Number of Psus absent - Disables the full-speed switchover of Psus absent + "fan_absent_fullspeed_num": 2, # Full speed rotation of the system -fan Indicates the number of absent bits + "rotor_error_fullspeed_num": 3, # System full speed - Number of motor failures + "psu_fan_control": 1, # Enable the psu fan control function + "deal_fan_error": 1, # Handling Fan anomalies + "deal_fan_error_conf": { + "countdown": 2, # max time:(2-1)*Speed regulation period + "FAN1": [ + {"name": "FAN1", "pwm": 0xff}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN2": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0xff}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN3": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0xff}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN4": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0xff}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN5": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0xff}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN6": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0xff}, + ], + }, + }, + + "ledcontrol_para": { + "interval": 5, + "checkpsu": 0, # 0: sys led don't follow psu led + "checkfan": 0, # 0: sys led don't follow fan led + "psu_amber_num": 1, + "fan_amber_num": 1, + "board_sys_led": [ + {"led_name": "BOARD_SYS_LED"}, + ], + "board_psu_led": [ + {"led_name": "BOARD_PSU_LED"}, + ], + "board_fan_led": [ + {"led_name": "BOARD_FAN_LED"}, + ], + "psu_air_flow_monitor": 1, + "fan_air_flow_monitor": 1, + "psu_air_flow_amber_num": 1, + "fan_air_flow_amber_num": 1, + }, + + "otp_reboot_judge_file": { + "otp_switch_reboot_judge_file": "/etc/.otp_switch_reboot_flag", + "otp_other_reboot_judge_file": "/etc/.otp_other_reboot_flag", + }, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_monitor.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_monitor.py new file mode 100644 index 000000000000..d6b5c2b5aa0c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/hal-config/x86_64_micas_m2_w6920_32qc2x_r0_monitor.py @@ -0,0 +1,213 @@ +# coding:utf-8 + + +monitor = { + "openloop": { + "linear": { + "name": "linear", + "flag": 0, + "pwm_min": 0x8d, + "pwm_max": 0xff, + "K": 11, + "tin_min": 28, + }, + "curve": { + "name": "curve", + "flag": 1, + "pwm_min": 0x8d, + "pwm_max": 0xff, + "a": 0.1255, + "b": -1.2036, + "c": 76, + "tin_min": 25, + }, + }, + + "pid": { + "CPU_TEMP": { + "name": "CPU_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 1, + "Kd": 0.3, + "target": 80, + "value": [None, None, None], + }, + "SWITCH_TEMP": { + "name": "SWITCH_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 0.5, + "Kd": 0.3, + "target": 78, + "value": [None, None, None], + }, + "OUTLET_TEMP": { + "name": "OUTLET_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 65, + "value": [None, None, None], + }, + "BOARD_TEMP": { + "name": "BOARD_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 83, + "value": [None, None, None], + }, + "SFF_TEMP": { + "name": "SFF_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x8d, + "pwm_max": 0xff, + "Kp": 0.3, + "Ki": 0.4, + "Kd": 0, + "target": 65, + "value": [None, None, None], + }, + }, + + "temps_threshold": { + "SWITCH_TEMP": {"name": "SWITCH_TEMP", "warning": 100, "critical": 110}, + "INLET_TEMP": {"name": "INLET_TEMP", "warning": 45, "critical": 50, "fix": -4}, + "BOARD_TEMP": {"name": "BOARD_TEMP", "warning": 90, "critical": 95}, + "OUTLET_TEMP": {"name": "OUTLET_TEMP", "warning": 70, "critical": 75}, + "CPU_TEMP": {"name": "CPU_TEMP", "warning": 87, "critical": 93}, + "SFF_TEMP": {"name": "SFF_TEMP", "warning": 999, "critical": 1000, "ignore_threshold": 1, "invalid": -10000, "error": -9999}, + }, + + "fancontrol_para": { + "interval": 5, + "fan_status_interval": 0.5, + "max_pwm": 0xff, + "min_pwm": 0x8d, + "abnormal_pwm": 0xff, + "warning_pwm": 0xff, + "temp_invalid_pid_pwm": 0x8d, + "temp_error_pid_pwm": 0x8d, + "temp_fail_num": 3, + "check_temp_fail": [ + {"temp_name": "INLET_TEMP"}, + {"temp_name": "SWITCH_TEMP"}, + {"temp_name": "CPU_TEMP"}, + ], + "temp_warning_num": 3, # temp over warning 3 times continuously + "temp_critical_num": 3, # temp over critical 3 times continuously + "temp_warning_countdown": 60, # 5 min warning speed after not warning + "temp_critical_countdown": 60, # 5 min full speed after not critical + "rotor_error_count": 6, # fan rotor error 6 times continuously + "inlet_mac_diff": 999, + "check_crit_reboot_flag": 1, + "check_crit_reboot_num": 3, + "check_crit_sleep_time": 20, + + "deal_all_fan_error_method_flag": 1, + "all_fan_error_switch_temp_critical_temp": 95, + "all_fan_error_recover_log": "Power off base and mac board.", + "all_fan_error_recover_cmd": "dfd_debug io_wr 0x947 0xfa", + "all_fan_error_check_crit_reboot_num": 3, + "all_fan_error_check_crit_sleep_time": 2, + + "psu_absent_fullspeed_num": 0xFF, #Full-speed switchover - Number of Psus absent - Disables the full-speed switchover of Psus absent + "fan_absent_fullspeed_num": 2, # Full speed rotation of the system -fan Indicates the number of absent bits + "rotor_error_fullspeed_num": 3, # System full speed - Number of motor failures + "psu_fan_control": 1, # Enable the psu fan control function + "deal_fan_error": 1, # Handling Fan anomalies + "deal_fan_error_conf": { + "countdown": 2, # max time:(2-1)*Speed regulation period + "FAN1": [ + {"name": "FAN1", "pwm": 0xff}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN2": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0xff}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN3": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0xff}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN4": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0xff}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN5": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0xff}, + {"name": "FAN6", "pwm": 0x99}, + ], + "FAN6": [ + {"name": "FAN1", "pwm": 0x99}, + {"name": "FAN2", "pwm": 0x99}, + {"name": "FAN3", "pwm": 0x99}, + {"name": "FAN4", "pwm": 0x99}, + {"name": "FAN5", "pwm": 0x99}, + {"name": "FAN6", "pwm": 0xff}, + ], + }, + }, + + "ledcontrol_para": { + "interval": 5, + "checkpsu": 0, # 0: sys led don't follow psu led + "checkfan": 0, # 0: sys led don't follow fan led + "psu_amber_num": 1, + "fan_amber_num": 1, + "board_sys_led": [ + {"led_name": "BOARD_SYS_LED"}, + ], + "board_psu_led": [ + {"led_name": "BOARD_PSU_LED"}, + ], + "board_fan_led": [ + {"led_name": "BOARD_FAN_LED"}, + ], + "psu_air_flow_monitor": 1, + "fan_air_flow_monitor": 1, + "psu_air_flow_amber_num": 1, + "fan_air_flow_amber_num": 1, + }, + + "otp_reboot_judge_file": { + "otp_switch_reboot_judge_file": "/etc/.otp_switch_reboot_flag", + "otp_other_reboot_judge_file": "/etc/.otp_other_reboot_flag", + }, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/Makefile new file mode 100644 index 000000000000..0a1798579e1c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/Makefile @@ -0,0 +1,13 @@ +MAKEFILE_FILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST))) +MODULES_DIR = $(abspath $(MAKEFILE_FILE_PATH)/../../../../common/modules) + +EXTRA_CFLAGS+= -I$(MODULES_DIR) + + +obj-m += wb_pcie_dev_device.o +obj-m += wb_lpc_drv_device.o +obj-m += wb_io_dev_device.o +obj-m += wb_fpga_i2c_bus_device.o +obj-m += wb_fpga_pca954x_device.o +obj-m += wb_i2c_dev_device.o +obj-m += wb_wdt_device.o diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_i2c_bus_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_i2c_bus_device.c new file mode 100644 index 000000000000..4b8f3f53788f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_i2c_bus_device.c @@ -0,0 +1,993 @@ +/* + * An wb_fpga_i2c_bus_device driver for fpga i2c device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_fpga_i2c_debug = 0; +static int g_wb_fpga_i2c_error = 0; + +module_param(g_wb_fpga_i2c_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_i2c_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_I2C_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_i2c_debug) { \ + printk(KERN_INFO "[WB_FPGA_I2C][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_I2C_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_i2c_error) { \ + printk(KERN_ERR "[WB_FPGA_I2C][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data0 = { + .adap_nr = 3, + .i2c_timeout = 3000, + .i2c_scale = 0x500, + .i2c_filter = 0x504, + .i2c_stretch = 0x508, + .i2c_ext_9548_exits_flag = 0x50c, + .i2c_ext_9548_addr = 0x510, + .i2c_ext_9548_chan = 0x514, + .i2c_in_9548_chan = 0x518, + .i2c_slave = 0x51c, + .i2c_reg = 0x520, + .i2c_reg_len = 0x530, + .i2c_data_len = 0x534, + .i2c_ctrl = 0x538, + .i2c_status = 0x53c, + .i2c_data_buf = 0x580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x80, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data1 = { + .adap_nr = 4, + .i2c_timeout = 3000, + .i2c_scale = 0x600, + .i2c_filter = 0x604, + .i2c_stretch = 0x608, + .i2c_ext_9548_exits_flag = 0x60c, + .i2c_ext_9548_addr = 0x610, + .i2c_ext_9548_chan = 0x614, + .i2c_in_9548_chan = 0x618, + .i2c_slave = 0x61c, + .i2c_reg = 0x620, + .i2c_reg_len = 0x630, + .i2c_data_len = 0x634, + .i2c_ctrl = 0x638, + .i2c_status = 0x63c, + .i2c_data_buf = 0x680, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x84, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data2 = { + .adap_nr = 5, + .i2c_timeout = 3000, + .i2c_scale = 0x700, + .i2c_filter = 0x704, + .i2c_stretch = 0x708, + .i2c_ext_9548_exits_flag = 0x70c, + .i2c_ext_9548_addr = 0x710, + .i2c_ext_9548_chan = 0x714, + .i2c_in_9548_chan = 0x718, + .i2c_slave = 0x71c, + .i2c_reg = 0x720, + .i2c_reg_len = 0x730, + .i2c_data_len = 0x734, + .i2c_ctrl = 0x738, + .i2c_status = 0x73c, + .i2c_data_buf = 0x780, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x88, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data3 = { + .adap_nr = 6, + .i2c_timeout = 3000, + .i2c_scale = 0x16800, + .i2c_filter = 0x16804, + .i2c_stretch = 0x16808, + .i2c_ext_9548_exits_flag = 0x1680c, + .i2c_ext_9548_addr = 0x16810, + .i2c_ext_9548_chan = 0x16814, + .i2c_in_9548_chan = 0x16818, + .i2c_slave = 0x1681c, + .i2c_reg = 0x16820, + .i2c_reg_len = 0x16830, + .i2c_data_len = 0x16834, + .i2c_ctrl = 0x16838, + .i2c_status = 0x1683c, + .i2c_data_buf = 0x16900, + .i2c_data_buf_len = 256, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x8c, + .i2c_reset_on = 0x0000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data4 = { + .adap_nr = 7, + .i2c_timeout = 3000, + .i2c_scale = 0x900, + .i2c_filter = 0x904, + .i2c_stretch = 0x908, + .i2c_ext_9548_exits_flag = 0x90c, + .i2c_ext_9548_addr = 0x910, + .i2c_ext_9548_chan = 0x914, + .i2c_in_9548_chan = 0x918, + .i2c_slave = 0x91c, + .i2c_reg = 0x920, + .i2c_reg_len = 0x930, + .i2c_data_len = 0x934, + .i2c_ctrl = 0x938, + .i2c_status = 0x93c, + .i2c_data_buf = 0x980, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0xac, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data5 = { + .adap_nr = 8, + .i2c_timeout = 3000, + .i2c_scale = 0xf00, + .i2c_filter = 0xf04, + .i2c_stretch = 0xf08, + .i2c_ext_9548_exits_flag = 0xf0c, + .i2c_ext_9548_addr = 0xf10, + .i2c_ext_9548_chan = 0xf14, + .i2c_in_9548_chan = 0xf18, + .i2c_slave = 0xf1c, + .i2c_reg = 0xf20, + .i2c_reg_len = 0xf30, + .i2c_data_len = 0xf34, + .i2c_ctrl = 0xf38, + .i2c_status = 0xf3c, + .i2c_data_buf = 0xf80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0xac, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data0 = { + .adap_nr = 9, + .i2c_timeout = 3000, + .i2c_scale = 0x2c00, + .i2c_filter = 0x2c04, + .i2c_stretch = 0x2c08, + .i2c_ext_9548_exits_flag = 0x2c0c, + .i2c_ext_9548_addr = 0x2c10, + .i2c_ext_9548_chan = 0x2c14, + .i2c_in_9548_chan = 0x2c18, + .i2c_slave = 0x2c1c, + .i2c_reg = 0x2c20, + .i2c_reg_len = 0x2c30, + .i2c_data_len = 0x2c34, + .i2c_ctrl = 0x2c38, + .i2c_status = 0x2c3c, + .i2c_data_buf = 0x2c80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data1 = { + .adap_nr = 10, + .i2c_timeout = 3000, + .i2c_scale = 0x2d00, + .i2c_filter = 0x2d04, + .i2c_stretch = 0x2d08, + .i2c_ext_9548_exits_flag = 0x2d0c, + .i2c_ext_9548_addr = 0x2d10, + .i2c_ext_9548_chan = 0x2d14, + .i2c_in_9548_chan = 0x2d18, + .i2c_slave = 0x2d1c, + .i2c_reg = 0x2d20, + .i2c_reg_len = 0x2d30, + .i2c_data_len = 0x2d34, + .i2c_ctrl = 0x2d38, + .i2c_status = 0x2d3c, + .i2c_data_buf = 0x2d80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data2 = { + .adap_nr = 11, + .i2c_timeout = 3000, + .i2c_scale = 0x2e00, + .i2c_filter = 0x2e04, + .i2c_stretch = 0x2e08, + .i2c_ext_9548_exits_flag = 0x2e0c, + .i2c_ext_9548_addr = 0x2e10, + .i2c_ext_9548_chan = 0x2e14, + .i2c_in_9548_chan = 0x2e18, + .i2c_slave = 0x2e1c, + .i2c_reg = 0x2e20, + .i2c_reg_len = 0x2e30, + .i2c_data_len = 0x2e34, + .i2c_ctrl = 0x2e38, + .i2c_status = 0x2e3c, + .i2c_data_buf = 0x2e80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000004, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data3 = { + .adap_nr = 12, + .i2c_timeout = 3000, + .i2c_scale = 0x2f00, + .i2c_filter = 0x2f04, + .i2c_stretch = 0x2f08, + .i2c_ext_9548_exits_flag = 0x2f0c, + .i2c_ext_9548_addr = 0x2f10, + .i2c_ext_9548_chan = 0x2f14, + .i2c_in_9548_chan = 0x2f18, + .i2c_slave = 0x2f1c, + .i2c_reg = 0x2f20, + .i2c_reg_len = 0x2f30, + .i2c_data_len = 0x2f34, + .i2c_ctrl = 0x2f38, + .i2c_status = 0x2f3c, + .i2c_data_buf = 0x2f80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000008, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data4 = { + .adap_nr = 13, + .i2c_timeout = 3000, + .i2c_scale = 0x3000, + .i2c_filter = 0x3004, + .i2c_stretch = 0x3008, + .i2c_ext_9548_exits_flag = 0x300c, + .i2c_ext_9548_addr = 0x3010, + .i2c_ext_9548_chan = 0x3014, + .i2c_in_9548_chan = 0x3018, + .i2c_slave = 0x301c, + .i2c_reg = 0x3020, + .i2c_reg_len = 0x3030, + .i2c_data_len = 0x3034, + .i2c_ctrl = 0x3038, + .i2c_status = 0x303c, + .i2c_data_buf = 0x3080, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000010, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data5 = { + .adap_nr = 14, + .i2c_timeout = 3000, + .i2c_scale = 0x3100, + .i2c_filter = 0x3104, + .i2c_stretch = 0x3108, + .i2c_ext_9548_exits_flag = 0x310c, + .i2c_ext_9548_addr = 0x3110, + .i2c_ext_9548_chan = 0x3114, + .i2c_in_9548_chan = 0x3118, + .i2c_slave = 0x311c, + .i2c_reg = 0x3120, + .i2c_reg_len = 0x3130, + .i2c_data_len = 0x3134, + .i2c_ctrl = 0x3138, + .i2c_status = 0x313c, + .i2c_data_buf = 0x3180, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000020, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data6 = { + .adap_nr = 15, + .i2c_timeout = 3000, + .i2c_scale = 0x3200, + .i2c_filter = 0x3204, + .i2c_stretch = 0x3208, + .i2c_ext_9548_exits_flag = 0x320c, + .i2c_ext_9548_addr = 0x3210, + .i2c_ext_9548_chan = 0x3214, + .i2c_in_9548_chan = 0x3218, + .i2c_slave = 0x321c, + .i2c_reg = 0x3220, + .i2c_reg_len = 0x3230, + .i2c_data_len = 0x3234, + .i2c_ctrl = 0x3238, + .i2c_status = 0x323c, + .i2c_data_buf = 0x3280, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000040, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data7 = { + .adap_nr = 16, + .i2c_timeout = 3000, + .i2c_scale = 0x3300, + .i2c_filter = 0x3304, + .i2c_stretch = 0x3308, + .i2c_ext_9548_exits_flag = 0x330c, + .i2c_ext_9548_addr = 0x3310, + .i2c_ext_9548_chan = 0x3314, + .i2c_in_9548_chan = 0x3318, + .i2c_slave = 0x331c, + .i2c_reg = 0x3320, + .i2c_reg_len = 0x3330, + .i2c_data_len = 0x3334, + .i2c_ctrl = 0x3338, + .i2c_status = 0x333c, + .i2c_data_buf = 0x3380, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000080, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data8 = { + .adap_nr = 17, + .i2c_timeout = 3000, + .i2c_scale = 0x3400, + .i2c_filter = 0x3404, + .i2c_stretch = 0x3408, + .i2c_ext_9548_exits_flag = 0x340c, + .i2c_ext_9548_addr = 0x3410, + .i2c_ext_9548_chan = 0x3414, + .i2c_in_9548_chan = 0x3418, + .i2c_slave = 0x341c, + .i2c_reg = 0x3420, + .i2c_reg_len = 0x3430, + .i2c_data_len = 0x3434, + .i2c_ctrl = 0x3438, + .i2c_status = 0x343c, + .i2c_data_buf = 0x3480, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000100, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data9 = { + .adap_nr = 18, + .i2c_timeout = 3000, + .i2c_scale = 0x3500, + .i2c_filter = 0x3504, + .i2c_stretch = 0x3508, + .i2c_ext_9548_exits_flag = 0x350c, + .i2c_ext_9548_addr = 0x3510, + .i2c_ext_9548_chan = 0x3514, + .i2c_in_9548_chan = 0x3518, + .i2c_slave = 0x351c, + .i2c_reg = 0x3520, + .i2c_reg_len = 0x3530, + .i2c_data_len = 0x3534, + .i2c_ctrl = 0x3538, + .i2c_status = 0x353c, + .i2c_data_buf = 0x3580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000200, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data10 = { + .adap_nr = 19, + .i2c_timeout = 3000, + .i2c_scale = 0x3600, + .i2c_filter = 0x3604, + .i2c_stretch = 0x3608, + .i2c_ext_9548_exits_flag = 0x360c, + .i2c_ext_9548_addr = 0x3610, + .i2c_ext_9548_chan = 0x3614, + .i2c_in_9548_chan = 0x3618, + .i2c_slave = 0x361c, + .i2c_reg = 0x3620, + .i2c_reg_len = 0x3630, + .i2c_data_len = 0x3634, + .i2c_ctrl = 0x3638, + .i2c_status = 0x363c, + .i2c_data_buf = 0x3680, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000400, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data11 = { + .adap_nr = 20, + .i2c_timeout = 3000, + .i2c_scale = 0x3700, + .i2c_filter = 0x3704, + .i2c_stretch = 0x3708, + .i2c_ext_9548_exits_flag = 0x370c, + .i2c_ext_9548_addr = 0x3710, + .i2c_ext_9548_chan = 0x3714, + .i2c_in_9548_chan = 0x3718, + .i2c_slave = 0x371c, + .i2c_reg = 0x3720, + .i2c_reg_len = 0x3730, + .i2c_data_len = 0x3734, + .i2c_ctrl = 0x3738, + .i2c_status = 0x373c, + .i2c_data_buf = 0x3780, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000800, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data12 = { + .adap_nr = 21, + .i2c_timeout = 3000, + .i2c_scale = 0x3800, + .i2c_filter = 0x3804, + .i2c_stretch = 0x3808, + .i2c_ext_9548_exits_flag = 0x380c, + .i2c_ext_9548_addr = 0x3810, + .i2c_ext_9548_chan = 0x3814, + .i2c_in_9548_chan = 0x3818, + .i2c_slave = 0x381c, + .i2c_reg = 0x3820, + .i2c_reg_len = 0x3830, + .i2c_data_len = 0x3834, + .i2c_ctrl = 0x3838, + .i2c_status = 0x383c, + .i2c_data_buf = 0x3880, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00001000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data13 = { + .adap_nr = 22, + .i2c_timeout = 3000, + .i2c_scale = 0x3900, + .i2c_filter = 0x3904, + .i2c_stretch = 0x3908, + .i2c_ext_9548_exits_flag = 0x390c, + .i2c_ext_9548_addr = 0x3910, + .i2c_ext_9548_chan = 0x3914, + .i2c_in_9548_chan = 0x3918, + .i2c_slave = 0x391c, + .i2c_reg = 0x3920, + .i2c_reg_len = 0x3930, + .i2c_data_len = 0x3934, + .i2c_ctrl = 0x3938, + .i2c_status = 0x393c, + .i2c_data_buf = 0x3980, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00002000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data14 = { + .adap_nr = 23, + .i2c_timeout = 3000, + .i2c_scale = 0x3a00, + .i2c_filter = 0x3a04, + .i2c_stretch = 0x3a08, + .i2c_ext_9548_exits_flag = 0x3a0c, + .i2c_ext_9548_addr = 0x3a10, + .i2c_ext_9548_chan = 0x3a14, + .i2c_in_9548_chan = 0x3a18, + .i2c_slave = 0x3a1c, + .i2c_reg = 0x3a20, + .i2c_reg_len = 0x3a30, + .i2c_data_len = 0x3a34, + .i2c_ctrl = 0x3a38, + .i2c_status = 0x3a3c, + .i2c_data_buf = 0x3a80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00004000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data15 = { + .adap_nr = 24, + .i2c_timeout = 3000, + .i2c_scale = 0x3b00, + .i2c_filter = 0x3b04, + .i2c_stretch = 0x3b08, + .i2c_ext_9548_exits_flag = 0x3b0c, + .i2c_ext_9548_addr = 0x3b10, + .i2c_ext_9548_chan = 0x3b14, + .i2c_in_9548_chan = 0x3b18, + .i2c_slave = 0x3b1c, + .i2c_reg = 0x3b20, + .i2c_reg_len = 0x3b30, + .i2c_data_len = 0x3b34, + .i2c_ctrl = 0x3b38, + .i2c_status = 0x3b3c, + .i2c_data_buf = 0x3b80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00008000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_mac_dom_device_data16 = { + .adap_nr = 25, + .i2c_timeout = 3000, + .i2c_scale = 0x3c00, + .i2c_filter = 0x3c04, + .i2c_stretch = 0x3c08, + .i2c_ext_9548_exits_flag = 0x3c0c, + .i2c_ext_9548_addr = 0x3c10, + .i2c_ext_9548_chan = 0x3c14, + .i2c_in_9548_chan = 0x3c18, + .i2c_slave = 0x3c1c, + .i2c_reg = 0x3c20, + .i2c_reg_len = 0x3c30, + .i2c_data_len = 0x3c34, + .i2c_ctrl = 0x3c38, + .i2c_status = 0x3c3c, + .i2c_data_buf = 0x3c80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 2, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00010000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + + +static void wb_fpga_i2c_bus_device_release(struct device *dev) +{ + return; +} + +static struct platform_device fpga_i2c_bus_device[] = { + { + .name = "wb-fpga-i2c", + .id = 1, + .dev = { + .platform_data = &fpga_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 2, + .dev = { + .platform_data = &fpga_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 3, + .dev = { + .platform_data = &fpga_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 4, + .dev = { + .platform_data = &fpga_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 5, + .dev = { + .platform_data = &fpga_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 6, + .dev = { + .platform_data = &fpga_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 7, + .dev = { + .platform_data = &fpga_mac_dom_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 8, + .dev = { + .platform_data = &fpga_mac_dom_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 9, + .dev = { + .platform_data = &fpga_mac_dom_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 10, + .dev = { + .platform_data = &fpga_mac_dom_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 11, + .dev = { + .platform_data = &fpga_mac_dom_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 12, + .dev = { + .platform_data = &fpga_mac_dom_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 13, + .dev = { + .platform_data = &fpga_mac_dom_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 14, + .dev = { + .platform_data = &fpga_mac_dom_device_data7, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 15, + .dev = { + .platform_data = &fpga_mac_dom_device_data8, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 16, + .dev = { + .platform_data = &fpga_mac_dom_device_data9, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 17, + .dev = { + .platform_data = &fpga_mac_dom_device_data10, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 18, + .dev = { + .platform_data = &fpga_mac_dom_device_data11, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 19, + .dev = { + .platform_data = &fpga_mac_dom_device_data12, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 20, + .dev = { + .platform_data = &fpga_mac_dom_device_data13, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 21, + .dev = { + .platform_data = &fpga_mac_dom_device_data14, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 22, + .dev = { + .platform_data = &fpga_mac_dom_device_data15, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 23, + .dev = { + .platform_data = &fpga_mac_dom_device_data16, + .release = wb_fpga_i2c_bus_device_release, + }, + }, +}; + +static int __init wb_fpga_i2c_bus_device_init(void) +{ + int i; + int ret = 0; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_i2c_bus_device); i++) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + ret = platform_device_register(&fpga_i2c_bus_device[i]); + if (ret < 0) { + fpga_i2c_bus_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-fpga-i2c.%d register failed!\n", i + 1); + } else { + fpga_i2c_bus_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_fpga_i2c_bus_device_exit(void) +{ + int i; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_i2c_bus_device) - 1; i >= 0; i--) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + if (fpga_i2c_bus_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&fpga_i2c_bus_device[i]); + } + } +} + +module_init(wb_fpga_i2c_bus_device_init); +module_exit(wb_fpga_i2c_bus_device_exit); +MODULE_DESCRIPTION("FPGA I2C Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_pca954x_device.c new file mode 100644 index 000000000000..4e442d85440a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_fpga_pca954x_device.c @@ -0,0 +1,413 @@ +/* + * An wb_fpga_pca954x_device driver for fpga pca954x device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_fpga_pca954x_device_debug = 0; +static int g_wb_fpga_pca954x_device_error = 0; + +module_param(g_wb_fpga_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_FPGA_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_error) { \ + printk(KERN_ERR "[WB_FPGA_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + + +static fpga_pca954x_device_t fpga_pca954x_device_data1 = { + .i2c_bus = 3, + .i2c_addr = 0x70, + .pca9548_base_nr = 26, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data2 = { + .i2c_bus = 4, + .i2c_addr = 0x70, + .pca9548_base_nr = 27, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data3 = { + .i2c_bus = 27, + .i2c_addr = 0x77, + .pca9548_base_nr = 39, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data4 = { + .i2c_bus =5, + .i2c_addr = 0x70, + .pca9548_base_nr = 28, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data5 = { + .i2c_bus = 28, + .i2c_addr = 0x71, + .pca9548_base_nr = 47, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data6 = { + .i2c_bus = 6, + .i2c_addr = 0x70, + .pca9548_base_nr = 29, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data7 = { + .i2c_bus = 29, + .i2c_addr = 0x77, + .pca9548_base_nr = 55, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data8 = { + .i2c_bus = 7, + .i2c_addr = 0x71, + .pca9548_base_nr = 30, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data9 = { + .i2c_bus = 8, + .i2c_addr = 0x70, + .pca9548_base_nr =38, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data10 = { + .i2c_bus = 9, + .i2c_addr = 0x70, + .pca9548_base_nr = 63, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data11 = { + .i2c_bus = 10, + .i2c_addr = 0x70, + .pca9548_base_nr = 65, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data12 = { + .i2c_bus = 11, + .i2c_addr = 0x70, + .pca9548_base_nr = 67, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data13 = { + .i2c_bus = 12, + .i2c_addr = 0x70, + .pca9548_base_nr = 69, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data14 = { + .i2c_bus = 13, + .i2c_addr = 0x70, + .pca9548_base_nr = 71, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data15 = { + .i2c_bus = 14, + .i2c_addr = 0x70, + .pca9548_base_nr = 73, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data16 = { + .i2c_bus = 15, + .i2c_addr = 0x70, + .pca9548_base_nr = 75, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data17 = { + .i2c_bus = 16, + .i2c_addr = 0x70, + .pca9548_base_nr = 77, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data18 = { + .i2c_bus = 17, + .i2c_addr = 0x70, + .pca9548_base_nr = 79, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data19 = { + .i2c_bus = 18, + .i2c_addr = 0x70, + .pca9548_base_nr = 81, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data20 = { + .i2c_bus = 19, + .i2c_addr = 0x70, + .pca9548_base_nr = 83, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data21 = { + .i2c_bus = 20, + .i2c_addr = 0x70, + .pca9548_base_nr = 85, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data22 = { + .i2c_bus = 21, + .i2c_addr = 0x70, + .pca9548_base_nr = 87, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data23 = { + .i2c_bus = 22, + .i2c_addr = 0x70, + .pca9548_base_nr = 89, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data24 = { + .i2c_bus = 23, + .i2c_addr = 0x70, + .pca9548_base_nr = 91, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data25 = { + .i2c_bus = 24, + .i2c_addr = 0x70, + .pca9548_base_nr = 93, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data26 = { + .i2c_bus = 25, + .i2c_addr = 0x70, + .pca9548_base_nr = 95, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +struct i2c_board_info fpga_pca954x_device_info[] = { + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data1, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data2, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data3, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data4, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data5, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data6, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data7, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data8, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data9, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data10, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data11, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data12, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data13, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data14, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data15, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data16, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data17, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data18, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data19, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data20, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data21, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data22, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data23, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data24, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data25, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data26, + }, +}; + +static int __init wb_fpga_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_pca954x_device_info); i++) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + fpga_pca954x_device_info[i].addr = fpga_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(fpga_pca954x_device_data->i2c_bus); + if (adap == NULL) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", fpga_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &fpga_pca954x_device_info[i]); + if (!client) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register fpga pca954x device %d at bus %d!\n", + fpga_pca954x_device_data->i2c_addr, fpga_pca954x_device_data->i2c_bus); + } else { + fpga_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_fpga_pca954x_device_exit(void) +{ + int i; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_pca954x_device_info) - 1; i >= 0; i--) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + if (fpga_pca954x_device_data->client) { + i2c_unregister_device(fpga_pca954x_device_data->client); + fpga_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_fpga_pca954x_device_init); +module_exit(wb_fpga_pca954x_device_exit); +MODULE_DESCRIPTION("FPGA PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_i2c_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_i2c_dev_device.c new file mode 100644 index 000000000000..9a3aef32977b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_i2c_dev_device.c @@ -0,0 +1,146 @@ +/* + * An wb_i2c_dev_device driver for i2c dev device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_dev_device_debug = 0; +static int g_wb_i2c_dev_device_error = 0; + +module_param(g_wb_i2c_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_dev_device_debug) { \ + printk(KERN_INFO "[WB_I2C_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_dev_device_error) { \ + printk(KERN_ERR "[WB_I2C_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_dev_device_t i2c_dev_device_data0 = { + .i2c_bus = 26, + .i2c_addr = 0x1d, + .i2c_name = "cpld2", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data1 = { + .i2c_bus = 26, + .i2c_addr = 0x2d, + .i2c_name = "cpld3", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data2 = { + .i2c_bus = 28, + .i2c_addr = 0x3d, + .i2c_name = "cpld4", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + + +struct i2c_board_info i2c_dev_device_info[] = { + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data0, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data1, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data2, + }, +}; + +static int __init wb_i2c_dev_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_dev_device_info); i++) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + i2c_dev_device_info[i].addr = i2c_dev_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_dev_device_data->i2c_bus); + if (adap == NULL) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_dev_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_dev_device_info[i]); + if (!client) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "Failed to register i2c dev device %d at bus %d!\n", + i2c_dev_device_data->i2c_addr, i2c_dev_device_data->i2c_bus); + } else { + i2c_dev_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_dev_device_exit(void) +{ + int i; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_dev_device_info) - 1; i >= 0; i--) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + if (i2c_dev_device_data->client) { + i2c_unregister_device(i2c_dev_device_data->client); + i2c_dev_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_dev_device_init); +module_exit(wb_i2c_dev_device_exit); +MODULE_DESCRIPTION("I2C DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_io_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_io_dev_device.c new file mode 100644 index 000000000000..76b86a2d47ea --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_io_dev_device.c @@ -0,0 +1,123 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_io_dev_device_debug = 0; +static int g_wb_io_dev_device_error = 0; + +module_param(g_wb_io_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_io_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_IO_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_io_dev_device_debug) { \ + printk(KERN_INFO "[WB_IO_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_IO_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_io_dev_device_error) { \ + printk(KERN_ERR "[WB_IO_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static io_dev_device_t io_dev_device_data0 = { + .io_dev_name = "cpld0", + .io_base = 0x700, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static io_dev_device_t io_dev_device_data1 = { + .io_dev_name = "cpld1", + .io_base = 0x900, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static void wb_io_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device io_dev_device[] = { + { + .name = "wb-io-dev", + .id = 1, + .dev = { + .platform_data = &io_dev_device_data0, + .release = wb_io_dev_device_release, + }, + }, + { + .name = "wb-io-dev", + .id = 2, + .dev = { + .platform_data = &io_dev_device_data1, + .release = wb_io_dev_device_release, + }, + }, +}; + +static int __init wb_io_dev_device_init(void) +{ + int i; + int ret = 0; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(io_dev_device); i++) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + ret = platform_device_register(&io_dev_device[i]); + if (ret < 0) { + io_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-io-dev.%d register failed!\n", i + 1); + } else { + io_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_io_dev_device_exit(void) +{ + int i; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(io_dev_device) - 1; i >= 0; i--) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + if (io_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&io_dev_device[i]); + } + } +} + +module_init(wb_io_dev_device_init); +module_exit(wb_io_dev_device_exit); +MODULE_DESCRIPTION("IO DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_lpc_drv_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_lpc_drv_device.c new file mode 100644 index 000000000000..27dbd87d71b2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_lpc_drv_device.c @@ -0,0 +1,150 @@ +/* + * An wb_lpc_drv_device driver for lpc device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_lpc_drv_device_debug = 0; +static int g_wb_lpc_drv_device_error = 0; + +module_param(g_wb_lpc_drv_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_lpc_drv_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_LPC_DRV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_lpc_drv_device_debug) { \ + printk(KERN_INFO "[WB_LPC_DRV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_LPC_DRV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_lpc_drv_device_error) { \ + printk(KERN_ERR "[WB_LPC_DRV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static lpc_drv_device_t lpc_drv_device_data_0 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0x700, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x84, +}; + +static lpc_drv_device_t lpc_drv_device_data_1 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0x900, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x88, +}; + +static lpc_drv_device_t lpc_drv_device_data_2 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0xb00, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x90, +}; + +static void wb_lpc_drv_device_release(struct device *dev) +{ + return; +} + +static struct platform_device lpc_drv_device[] = { + { + .name = "wb-lpc", + .id = 1, + .dev = { + .platform_data = &lpc_drv_device_data_0, + .release = wb_lpc_drv_device_release, + }, + }, + { + .name = "wb-lpc", + .id = 2, + .dev = { + .platform_data = &lpc_drv_device_data_1, + .release = wb_lpc_drv_device_release, + }, + }, + { + .name = "wb-lpc", + .id = 3, + .dev = { + .platform_data = &lpc_drv_device_data_2, + .release = wb_lpc_drv_device_release, + }, + }, +}; + +static int __init wb_lpc_drv_device_init(void) +{ + int i; + int ret = 0; + lpc_drv_device_t *lpc_drv_device_data; + + WB_LPC_DRV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(lpc_drv_device); i++) { + lpc_drv_device_data = lpc_drv_device[i].dev.platform_data; + ret = platform_device_register(&lpc_drv_device[i]); + if (ret < 0) { + lpc_drv_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-lpc.%d register failed!\n", i + 1); + } else { + lpc_drv_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_lpc_drv_device_exit(void) +{ + int i; + lpc_drv_device_t *lpc_drv_device_data; + + WB_LPC_DRV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(lpc_drv_device) - 1; i >= 0; i--) { + lpc_drv_device_data = lpc_drv_device[i].dev.platform_data; + if (lpc_drv_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&lpc_drv_device[i]); + } + } +} + +module_init(wb_lpc_drv_device_init); +module_exit(wb_lpc_drv_device_exit); +MODULE_DESCRIPTION("LPC DRV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_pcie_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_pcie_dev_device.c new file mode 100644 index 000000000000..4523c9f33c13 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_pcie_dev_device.c @@ -0,0 +1,113 @@ +/* + * An wb_pcie_dev_device driver for pcie device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_pcie_dev_device_debug = 0; +static int g_wb_pcie_dev_device_error = 0; + +module_param(g_wb_pcie_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_pcie_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_pcie_dev_device_debug) { \ + printk(KERN_INFO "[WB_PCIE_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_PCIE_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_pcie_dev_device_error) { \ + printk(KERN_ERR "[WB_PCIE_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static pci_dev_device_t pcie_dev_device_data0 = { + .pci_dev_name = "fpga0", + .pci_domain = 0x0000, + .pci_bus = 0x04, + .pci_slot = 0x00, + .pci_fn = 0, + .pci_bar = 0, + .bus_width = 4, + .upg_ctrl_base = 0xa00, + .upg_flash_base = 0x2f0000, +}; + +static void wb_pcie_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device pcie_dev_device[] = { + { + .name = "wb-pci-dev", + .id = 1, + .dev = { + .platform_data = &pcie_dev_device_data0, + .release = wb_pcie_dev_device_release, + }, + }, +}; + +static int __init wb_pcie_dev_device_init(void) +{ + int i; + int ret = 0; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(pcie_dev_device); i++) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + ret = platform_device_register(&pcie_dev_device[i]); + if (ret < 0) { + pcie_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-pci-dev.%d register failed!\n", i + 1); + } else { + pcie_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_pcie_dev_device_exit(void) +{ + int i; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(pcie_dev_device) - 1; i >= 0; i--) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + if (pcie_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&pcie_dev_device[i]); + } + } +} + +module_init(wb_pcie_dev_device_init); +module_exit(wb_pcie_dev_device_exit); +MODULE_DESCRIPTION("PCIE DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_wdt_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_wdt_device.c new file mode 100644 index 000000000000..e29610c906e8 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/modules/driver/wb_wdt_device.c @@ -0,0 +1,155 @@ +/* + * An wb_wdt_device driver for watchdog device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_wdt_device_debug = 0; +static int g_wb_wdt_device_error = 0; + +module_param(g_wb_wdt_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_wdt_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_WDT_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_wdt_device_debug) { \ + printk(KERN_INFO "[WB_WDT_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_WDT_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_wdt_device_error) { \ + printk(KERN_ERR "[WB_WDT_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static wb_wdt_device_t wb_wdt_device_data_0 = { + .feed_wdt_type = 2, + .hw_margin = 180000, + .feed_time = 30000, + .config_dev_name = "/dev/cpld3", + .config_mode = 2, + .priv_func_mode = 4, + .enable_reg = 0xf2, + .enable_val = 0x1, + .disable_val = 0x0, + .enable_mask = 0x1, + .timeout_cfg_reg = 0xf3, + .hw_algo = "toggle", + .wdt_config_mode.logic_wdt = { + .feed_dev_name = "/dev/cpld3", + .feed_reg = 0xf2, + .active_val = 0x1, + .logic_func_mode = 0x1, + }, + .timer_accuracy = 6000, /* 6s */ + .sysfs_index = SYSFS_NO_CFG, +}; + +static wb_wdt_device_t wb_wdt_device_data_1 = { + .feed_wdt_type = 1, + .hw_margin = 90000, + .feed_time = 9000, + .config_dev_name = "/dev/cpld1", + .config_mode = 2, + .priv_func_mode = 3, + .enable_reg = 0x4f, + .enable_val = 0x1, + .disable_val = 0x0, + .enable_mask = 0x1, + .timeout_cfg_reg = 0x50, + .hw_algo = "level", + .wdt_config_mode.logic_wdt = { + .feed_dev_name = "/dev/cpld1", + .feed_reg = 0xac, + .active_val = 0x0, + .logic_func_mode = 0x3, + }, + .timer_accuracy = 1600, /* 1.6s */ + .sysfs_index = SYSFS_NO_CFG, +}; + +static void wb_wdt_device_release(struct device *dev) +{ + return; +} + +static struct platform_device wb_wdt_device[] = { + { + .name = "wb_wdt", + .id = 0, + .dev = { + .platform_data = &wb_wdt_device_data_0, + .release = wb_wdt_device_release, + }, + }, + { + .name = "wb_wdt", + .id = 1, + .dev = { + .platform_data = &wb_wdt_device_data_1, + .release = wb_wdt_device_release, + }, + }, +}; + +static int __init wb_wdt_device_init(void) +{ + int i; + int ret = 0; + wb_wdt_device_t *wb_wdt_device_data; + + WB_WDT_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(wb_wdt_device); i++) { + wb_wdt_device_data = wb_wdt_device[i].dev.platform_data; + ret = platform_device_register(&wb_wdt_device[i]); + if (ret < 0) { + wb_wdt_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "rg-wdt.%d register failed!\n", i + 1); + } else { + wb_wdt_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_wdt_device_exit(void) +{ + int i; + wb_wdt_device_t *wb_wdt_device_data; + + WB_WDT_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(wb_wdt_device) - 1; i >= 0; i--) { + wb_wdt_device_data = wb_wdt_device[i].dev.platform_data; + if (wb_wdt_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&wb_wdt_device[i]); + } + } +} + +module_init(wb_wdt_device_init); +module_exit(wb_wdt_device_exit); +MODULE_DESCRIPTION("WB WDT Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_CPLD.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_CPLD.cfg new file mode 100644 index 000000000000..67412066e392 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_CPLD.cfg @@ -0,0 +1,35 @@ +# configuration item: I2C address of CPLD +# format: cpld_i2c_dev.bus_[cpld_slot]_[cpld_id] cpld_i2c_dev.addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +# bus: I2C bus number of CPLD +# addr: I2C address of CPLD +cpld_i2c_dev.bus_0_2=26 +cpld_i2c_dev.addr_0_2=0x1d +cpld_i2c_dev.bus_0_3=26 +cpld_i2c_dev.addr_0_3=0x2d +cpld_i2c_dev.bus_0_4=28 +cpld_i2c_dev.addr_0_4=0x3d + +# configuration item: LPC address of CPLD +# format: cpld_lpc_addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +cpld_lpc_dev_0_0=0x700 +cpld_lpc_dev_0_1=0x900 + +# configuration item: CPLD access method, lpc or i2c +# format: mode_cpld_[cpld_slot][cpld_slot]=lpc/i2c +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +mode_cpld_0_0=lpc +mode_cpld_0_1=lpc +mode_cpld_0_2=i2c +mode_cpld_0_3=i2c +mode_cpld_0_4=i2c + +# configuration item: the number of CPLD +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: CPLD main_dev is 4 +# minor_dev: CPLD minor_dev not exist +dev_num_4_0=12 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_FAN.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_FAN.cfg new file mode 100644 index 000000000000..7ac4aa4195a4 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_FAN.cfg @@ -0,0 +1,435 @@ +# configuration item: the number of fans +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: fan main_dev is 1 +# minor_dev: fan minor_dev not exist(0) +dev_num_1_0=6 + +# configuration item: the number of rotors +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: rotor main_dev is 1 +# minor_dev: rotor minor_dev is 5 +dev_num_1_5=2 + +# configuration item: fan presence status +# format: dev_present_status_[main_dev_id][fan_index] +# main_dev_id: fan main_dev_id is 1 +# fan_index: start from 1 +dev_present_status.mode_1_1=config +dev_present_status.src_1_1=cpld +dev_present_status.frmt_1_1=bit +dev_present_status.pola_1_1=negative +dev_present_status.addr_1_1=0x00040037 +dev_present_status.len_1_1=1 +dev_present_status.bit_offset_1_1=5 + +dev_present_status.mode_1_2=config +dev_present_status.src_1_2=cpld +dev_present_status.frmt_1_2=bit +dev_present_status.pola_1_2=negative +dev_present_status.addr_1_2=0x00040037 +dev_present_status.len_1_2=1 +dev_present_status.bit_offset_1_2=4 + +dev_present_status.mode_1_3=config +dev_present_status.src_1_3=cpld +dev_present_status.frmt_1_3=bit +dev_present_status.pola_1_3=negative +dev_present_status.addr_1_3=0x00040037 +dev_present_status.len_1_3=1 +dev_present_status.bit_offset_1_3=3 + +dev_present_status.mode_1_4=config +dev_present_status.src_1_4=cpld +dev_present_status.frmt_1_4=bit +dev_present_status.pola_1_4=negative +dev_present_status.addr_1_4=0x00040037 +dev_present_status.len_1_4=1 +dev_present_status.bit_offset_1_4=2 + +dev_present_status.mode_1_5=config +dev_present_status.src_1_5=cpld +dev_present_status.frmt_1_5=bit +dev_present_status.pola_1_5=negative +dev_present_status.addr_1_5=0x00040037 +dev_present_status.len_1_5=1 +dev_present_status.bit_offset_1_5=1 + +dev_present_status.mode_1_6=config +dev_present_status.src_1_6=cpld +dev_present_status.frmt_1_6=bit +dev_present_status.pola_1_6=negative +dev_present_status.addr_1_6=0x00040037 +dev_present_status.len_1_6=1 +dev_present_status.bit_offset_1_6=0 + +# configuration item: fan pwm +# format: fan_ratio_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_ratio.mode_1_0=config +fan_ratio.int_cons_1_0= +fan_ratio.src_1_0=cpld +fan_ratio.frmt_1_0=byte +fan_ratio.pola_1_0= +fan_ratio.fpath_1_0= +fan_ratio.addr_1_0=0x00040065 +fan_ratio.len_1_0=1 +fan_ratio.bit_offset_1_0= + +fan_ratio.mode_1_1=config +fan_ratio.int_cons_1_1= +fan_ratio.src_1_1=cpld +fan_ratio.frmt_1_1=byte +fan_ratio.pola_1_1= +fan_ratio.fpath_1_1= +fan_ratio.addr_1_1=0x00040065 +fan_ratio.len_1_1=1 +fan_ratio.bit_offset_1_1= + +fan_ratio.mode_2_0=config +fan_ratio.int_cons_2_0= +fan_ratio.src_2_0=cpld +fan_ratio.frmt_2_0=byte +fan_ratio.pola_2_0= +fan_ratio.fpath_2_0= +fan_ratio.addr_2_0=0x00040064 +fan_ratio.len_2_0=1 +fan_ratio.bit_offset_2_0= + +fan_ratio.mode_2_1=config +fan_ratio.int_cons_2_1= +fan_ratio.src_2_1=cpld +fan_ratio.frmt_2_1=byte +fan_ratio.pola_2_1= +fan_ratio.fpath_2_1= +fan_ratio.addr_2_1=0x00040064 +fan_ratio.len_2_1=1 +fan_ratio.bit_offset_2_1= + +fan_ratio.mode_3_0=config +fan_ratio.int_cons_3_0= +fan_ratio.src_3_0=cpld +fan_ratio.frmt_3_0=byte +fan_ratio.pola_3_0= +fan_ratio.fpath_3_0= +fan_ratio.addr_3_0=0x00040063 +fan_ratio.len_3_0=1 +fan_ratio.bit_offset_3_0= + +fan_ratio.mode_3_1=config +fan_ratio.int_cons_3_1= +fan_ratio.src_3_1=cpld +fan_ratio.frmt_3_1=byte +fan_ratio.pola_3_1= +fan_ratio.fpath_3_1= +fan_ratio.addr_3_1=0x00040063 +fan_ratio.len_3_1=1 +fan_ratio.bit_offset_3_1= + +fan_ratio.mode_4_0=config +fan_ratio.int_cons_4_0= +fan_ratio.src_4_0=cpld +fan_ratio.frmt_4_0=byte +fan_ratio.pola_4_0= +fan_ratio.fpath_4_0= +fan_ratio.addr_4_0=0x00040062 +fan_ratio.len_4_0=1 +fan_ratio.bit_offset_4_0= + +fan_ratio.mode_4_1=config +fan_ratio.int_cons_4_1= +fan_ratio.src_4_1=cpld +fan_ratio.frmt_4_1=byte +fan_ratio.pola_4_1= +fan_ratio.fpath_4_1= +fan_ratio.addr_4_1=0x00040062 +fan_ratio.len_4_1=1 +fan_ratio.bit_offset_4_1= + +fan_ratio.mode_5_0=config +fan_ratio.int_cons_5_0= +fan_ratio.src_5_0=cpld +fan_ratio.frmt_5_0=byte +fan_ratio.pola_5_0= +fan_ratio.fpath_5_0= +fan_ratio.addr_5_0=0x00040061 +fan_ratio.len_5_0=1 +fan_ratio.bit_offset_5_0= + +fan_ratio.mode_5_1=config +fan_ratio.int_cons_5_1= +fan_ratio.src_5_1=cpld +fan_ratio.frmt_5_1=byte +fan_ratio.pola_5_1= +fan_ratio.fpath_5_1= +fan_ratio.addr_5_1=0x00040061 +fan_ratio.len_5_1=1 +fan_ratio.bit_offset_5_1= + +fan_ratio.mode_6_0=config +fan_ratio.int_cons_6_0= +fan_ratio.src_6_0=cpld +fan_ratio.frmt_6_0=byte +fan_ratio.pola_6_0= +fan_ratio.fpath_6_0= +fan_ratio.addr_6_0=0x00040060 +fan_ratio.len_6_0=1 +fan_ratio.bit_offset_6_0= + +fan_ratio.mode_6_1=config +fan_ratio.int_cons_6_1= +fan_ratio.src_6_1=cpld +fan_ratio.frmt_6_1=byte +fan_ratio.pola_6_1= +fan_ratio.fpath_6_1= +fan_ratio.addr_6_1=0x00040060 +fan_ratio.len_6_1=1 +fan_ratio.bit_offset_6_1= + +# configuration item: fan rotor status +# format: fan_roll_status_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_roll_status.mode_1_0=config +fan_roll_status.int_cons_1_0= +fan_roll_status.src_1_0=cpld +fan_roll_status.frmt_1_0=bit +fan_roll_status.pola_1_0=positive +fan_roll_status.fpath_1_0= +fan_roll_status.addr_1_0=0x00040038 +fan_roll_status.len_1_0=1 +fan_roll_status.bit_offset_1_0=5 + +fan_roll_status.mode_1_1=config +fan_roll_status.int_cons_1_1= +fan_roll_status.src_1_1=cpld +fan_roll_status.frmt_1_1=bit +fan_roll_status.pola_1_1=positive +fan_roll_status.fpath_1_1= +fan_roll_status.addr_1_1=0x00040039 +fan_roll_status.len_1_1=1 +fan_roll_status.bit_offset_1_1=5 + +fan_roll_status.mode_2_0=config +fan_roll_status.int_cons_2_0= +fan_roll_status.src_2_0=cpld +fan_roll_status.frmt_2_0=bit +fan_roll_status.pola_2_0=positive +fan_roll_status.fpath_2_0= +fan_roll_status.addr_2_0=0x00040038 +fan_roll_status.len_2_0=1 +fan_roll_status.bit_offset_2_0=4 + +fan_roll_status.mode_2_1=config +fan_roll_status.int_cons_2_1= +fan_roll_status.src_2_1=cpld +fan_roll_status.frmt_2_1=bit +fan_roll_status.pola_2_1=positive +fan_roll_status.fpath_2_1= +fan_roll_status.addr_2_1=0x00040039 +fan_roll_status.len_2_1=1 +fan_roll_status.bit_offset_2_1=4 + +fan_roll_status.mode_3_0=config +fan_roll_status.int_cons_3_0= +fan_roll_status.src_3_0=cpld +fan_roll_status.frmt_3_0=bit +fan_roll_status.pola_3_0=positive +fan_roll_status.fpath_3_0= +fan_roll_status.addr_3_0=0x00040038 +fan_roll_status.len_3_0=1 +fan_roll_status.bit_offset_3_0=3 + +fan_roll_status.mode_3_1=config +fan_roll_status.int_cons_3_1= +fan_roll_status.src_3_1=cpld +fan_roll_status.frmt_3_1=bit +fan_roll_status.pola_3_1=positive +fan_roll_status.fpath_3_1= +fan_roll_status.addr_3_1=0x00040039 +fan_roll_status.len_3_1=1 +fan_roll_status.bit_offset_3_1=3 + +fan_roll_status.mode_4_0=config +fan_roll_status.int_cons_4_0= +fan_roll_status.src_4_0=cpld +fan_roll_status.frmt_4_0=bit +fan_roll_status.pola_4_0=positive +fan_roll_status.fpath_4_0= +fan_roll_status.addr_4_0=0x00040038 +fan_roll_status.len_4_0=1 +fan_roll_status.bit_offset_4_0=2 + +fan_roll_status.mode_4_1=config +fan_roll_status.int_cons_4_1= +fan_roll_status.src_4_1=cpld +fan_roll_status.frmt_4_1=bit +fan_roll_status.pola_4_1=positive +fan_roll_status.fpath_4_1= +fan_roll_status.addr_4_1=0x00040039 +fan_roll_status.len_4_1=1 +fan_roll_status.bit_offset_4_1=2 + +fan_roll_status.mode_5_0=config +fan_roll_status.int_cons_5_0= +fan_roll_status.src_5_0=cpld +fan_roll_status.frmt_5_0=bit +fan_roll_status.pola_5_0=positive +fan_roll_status.fpath_5_0= +fan_roll_status.addr_5_0=0x00040038 +fan_roll_status.len_5_0=1 +fan_roll_status.bit_offset_5_0=1 + +fan_roll_status.mode_5_1=config +fan_roll_status.int_cons_5_1= +fan_roll_status.src_5_1=cpld +fan_roll_status.frmt_5_1=bit +fan_roll_status.pola_5_1=positive +fan_roll_status.fpath_5_1= +fan_roll_status.addr_5_1=0x00040039 +fan_roll_status.len_5_1=1 +fan_roll_status.bit_offset_5_1=1 + +fan_roll_status.mode_6_0=config +fan_roll_status.int_cons_6_0= +fan_roll_status.src_6_0=cpld +fan_roll_status.frmt_6_0=bit +fan_roll_status.pola_6_0=positive +fan_roll_status.fpath_6_0= +fan_roll_status.addr_6_0=0x00040038 +fan_roll_status.len_6_0=1 +fan_roll_status.bit_offset_6_0=0 + +fan_roll_status.mode_6_1=config +fan_roll_status.int_cons_6_1= +fan_roll_status.src_6_1=cpld +fan_roll_status.frmt_6_1=bit +fan_roll_status.pola_6_1=positive +fan_roll_status.fpath_6_1= +fan_roll_status.addr_6_1=0x00040039 +fan_roll_status.len_6_1=1 +fan_roll_status.bit_offset_6_1=0 + +# configuration item: fan speed +# format: fan_speed_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_speed.mode_1_0=config +fan_speed.int_cons_1_0= +fan_speed.src_1_0=cpld +fan_speed.frmt_1_0=num_bytes +fan_speed.pola_1_0=negative +fan_speed.fpath_1_0= +fan_speed.addr_1_0=0x00040070 +fan_speed.len_1_0=2 +fan_speed.bit_offset_1_0= + +fan_speed.mode_1_1=config +fan_speed.int_cons_1_1= +fan_speed.src_1_1=cpld +fan_speed.frmt_1_1=num_bytes +fan_speed.pola_1_1=negative +fan_speed.fpath_1_1= +fan_speed.addr_1_1=0x0004007c +fan_speed.len_1_1=2 +fan_speed.bit_offset_1_1= + +fan_speed.mode_2_0=config +fan_speed.int_cons_2_0= +fan_speed.src_2_0=cpld +fan_speed.frmt_2_0=num_bytes +fan_speed.pola_2_0=negative +fan_speed.fpath_2_0= +fan_speed.addr_2_0=0x0004006e +fan_speed.len_2_0=2 +fan_speed.bit_offset_2_0= + +fan_speed.mode_2_1=config +fan_speed.int_cons_2_1= +fan_speed.src_2_1=cpld +fan_speed.frmt_2_1=num_bytes +fan_speed.pola_2_1=negative +fan_speed.fpath_2_1= +fan_speed.addr_2_1=0x0004007a +fan_speed.len_2_1=2 +fan_speed.bit_offset_2_1= + +fan_speed.mode_3_0=config +fan_speed.int_cons_3_0= +fan_speed.src_3_0=cpld +fan_speed.frmt_3_0=num_bytes +fan_speed.pola_3_0=negative +fan_speed.fpath_3_0= +fan_speed.addr_3_0=0x0004006c +fan_speed.len_3_0=2 +fan_speed.bit_offset_3_0= + +fan_speed.mode_3_1=config +fan_speed.int_cons_3_1= +fan_speed.src_3_1=cpld +fan_speed.frmt_3_1=num_bytes +fan_speed.pola_3_1=negative +fan_speed.fpath_3_1= +fan_speed.addr_3_1=0x00040078 +fan_speed.len_3_1=2 +fan_speed.bit_offset_3_1= + +fan_speed.mode_4_0=config +fan_speed.int_cons_4_0= +fan_speed.src_4_0=cpld +fan_speed.frmt_4_0=num_bytes +fan_speed.pola_4_0=negative +fan_speed.fpath_4_0= +fan_speed.addr_4_0=0x0004006a +fan_speed.len_4_0=2 +fan_speed.bit_offset_4_0= + +fan_speed.mode_4_1=config +fan_speed.int_cons_4_1= +fan_speed.src_4_1=cpld +fan_speed.frmt_4_1=num_bytes +fan_speed.pola_4_1=negative +fan_speed.fpath_4_1= +fan_speed.addr_4_1=0x00040076 +fan_speed.len_4_1=2 +fan_speed.bit_offset_4_1= + +fan_speed.mode_5_0=config +fan_speed.int_cons_5_0= +fan_speed.src_5_0=cpld +fan_speed.frmt_5_0=num_bytes +fan_speed.pola_5_0=negative +fan_speed.fpath_5_0= +fan_speed.addr_5_0=0x00040068 +fan_speed.len_5_0=2 +fan_speed.bit_offset_5_0= + +fan_speed.mode_5_1=config +fan_speed.int_cons_5_1= +fan_speed.src_5_1=cpld +fan_speed.frmt_5_1=num_bytes +fan_speed.pola_5_1=negative +fan_speed.fpath_5_1= +fan_speed.addr_5_1=0x00040074 +fan_speed.len_5_1=2 +fan_speed.bit_offset_5_1= + +fan_speed.mode_6_0=config +fan_speed.int_cons_6_0= +fan_speed.src_6_0=cpld +fan_speed.frmt_6_0=num_bytes +fan_speed.pola_6_0=negative +fan_speed.fpath_6_0= +fan_speed.addr_6_0=0x00040066 +fan_speed.len_6_0=2 +fan_speed.bit_offset_6_0= + +fan_speed.mode_6_1=config +fan_speed.int_cons_6_1= +fan_speed.src_6_1=cpld +fan_speed.frmt_6_1=num_bytes +fan_speed.pola_6_1=negative +fan_speed.fpath_6_1= +fan_speed.addr_6_1=0x00040072 +fan_speed.len_6_1=2 +fan_speed.bit_offset_6_1= diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_PSU.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_PSU.cfg new file mode 100644 index 000000000000..1ba326d51d7c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_PSU.cfg @@ -0,0 +1,63 @@ +# configuration item: the number of psus +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: psu main_dev is 2 +# minor_dev: psu minor_dev not exist(0) +dev_num_2_0=2 + +# configuration item: psu status +# format: psu_status_[psu_index]_[status_id] +# psu_index: start from 1 +# status_id: 0: presence 1: output 2: alert +# psu1 presence status +psu_status.mode_1_0=config +psu_status.src_1_0=cpld +psu_status.frmt_1_0=bit +psu_status.pola_1_0=negative +psu_status.addr_1_0=0x00020034 +psu_status.len_1_0=1 +psu_status.bit_offset_1_0=4 + +# psu1 output status +psu_status.mode_1_1=config +psu_status.src_1_1=cpld +psu_status.frmt_1_1=bit +psu_status.pola_1_1=positive +psu_status.addr_1_1=0x00020034 +psu_status.len_1_1=1 +psu_status.bit_offset_1_1=5 + +# psu1 alert status +psu_status.mode_1_2=config +psu_status.src_1_2=cpld +psu_status.frmt_1_2=bit +psu_status.pola_1_2=negative +psu_status.addr_1_2=0x00020034 +psu_status.len_1_2=1 +psu_status.bit_offset_1_2=6 + +# psu2 presence status +psu_status.mode_2_0=config +psu_status.src_2_0=cpld +psu_status.frmt_2_0=bit +psu_status.pola_2_0=negative +psu_status.addr_2_0=0x00020034 +psu_status.len_2_0=1 +psu_status.bit_offset_2_0=0 + +# psu2 output status +psu_status.mode_2_1=config +psu_status.src_2_1=cpld +psu_status.frmt_2_1=bit +psu_status.pola_2_1=positive +psu_status.addr_2_1=0x00020034 +psu_status.len_2_1=1 +psu_status.bit_offset_2_1=1 + +# psu2 alert status +psu_status.mode_2_2=config +psu_status.src_2_2=cpld +psu_status.frmt_2_2=bit +psu_status.pola_2_2=negative +psu_status.addr_2_2=0x00020034 +psu_status.len_2_2=1 +psu_status.bit_offset_2_2=2 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SENSOR.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SENSOR.cfg new file mode 100644 index 000000000000..07d9fdf6948d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SENSOR.cfg @@ -0,0 +1,295 @@ + +# Number of temperature sensors on the mainboard +dev_num_0_1=0 + +# Number of voltage sensors on the mainboard +dev_num_0_2=12 + + +# in1 MAC_QSFPDD_VDD3.3V_A +hwmon_in.mode_0x0001_0x00=config +hwmon_in.int_cons_0x0001_0x00=0 +hwmon_in.src_0x0001_0x00=cpld +hwmon_in.frmt_0x0001_0x00=num_bytes +hwmon_in.pola_0x0001_0x00=negative +hwmon_in.addr_0x0001_0x00=0x00020060 +hwmon_in.len_0x0001_0x00=2 +hwmon_in.int_extra1_0x0001_0x00=0x00020060 +hwmon_in.int_extra2_0x0001_0x00=2000 +hwmon_in.int_extra3_0x0001_0x00=1 + +hwmon_in.mode_0x0001_0x01=str_constant +hwmon_in.str_cons_0x0001_0x01=MAC_QSFPDD_VDD3.3V_A + +hwmon_in.mode_0x0001_0x02=str_constant +hwmon_in.str_cons_0x0001_0x02=cpld + +hwmon_in.mode_0x0001_0x03=str_constant +hwmon_in.str_cons_0x0001_0x03=3560 + +hwmon_in.mode_0x0001_0x05=str_constant +hwmon_in.str_cons_0x0001_0x05=3040 + +# in2 MAC_QSFPDD_VDD3.3V_B +hwmon_in.mode_0x0002_0x00=config +hwmon_in.int_cons_0x0002_0x00=0 +hwmon_in.src_0x0002_0x00=cpld +hwmon_in.frmt_0x0002_0x00=num_bytes +hwmon_in.pola_0x0002_0x00=negative +hwmon_in.addr_0x0002_0x00=0x00020062 +hwmon_in.len_0x0002_0x00=2 +hwmon_in.int_extra1_0x0002_0x00=0x00020062 +hwmon_in.int_extra2_0x0002_0x00=2000 +hwmon_in.int_extra3_0x0002_0x00=1 + +hwmon_in.mode_0x0002_0x01=str_constant +hwmon_in.str_cons_0x0002_0x01=MAC_QSFPDD_VDD3.3V_B + +hwmon_in.mode_0x0002_0x02=str_constant +hwmon_in.str_cons_0x0002_0x02=cpld + +hwmon_in.mode_0x0002_0x03=str_constant +hwmon_in.str_cons_0x0002_0x03=3560 + +hwmon_in.mode_0x0002_0x05=str_constant +hwmon_in.str_cons_0x0002_0x05=3040 + +# in3 MAC_VDD3.3_MON +hwmon_in.mode_0x0003_0x00=config +hwmon_in.int_cons_0x0003_0x00=0 +hwmon_in.src_0x0003_0x00=cpld +hwmon_in.frmt_0x0003_0x00=num_bytes +hwmon_in.pola_0x0003_0x00=negative +hwmon_in.addr_0x0003_0x00=0x00020066 +hwmon_in.len_0x0003_0x00=2 +hwmon_in.int_extra1_0x0003_0x00=0x00020066 +hwmon_in.int_extra2_0x0003_0x00=2000 +hwmon_in.int_extra3_0x0003_0x00=1 + +hwmon_in.mode_0x0003_0x01=str_constant +hwmon_in.str_cons_0x0003_0x01=MAC_VDD3.3_MON + +hwmon_in.mode_0x0003_0x02=str_constant +hwmon_in.str_cons_0x0003_0x02=cpld + +hwmon_in.mode_0x0003_0x03=str_constant +hwmon_in.str_cons_0x0003_0x03=3465 + +hwmon_in.mode_0x0003_0x05=str_constant +hwmon_in.str_cons_0x0003_0x05=3040 + +# in4 MAC_VDD3.7V_CLK +hwmon_in.mode_0x0004_0x00=config +hwmon_in.int_cons_0x0004_0x00=0 +hwmon_in.src_0x0004_0x00=cpld +hwmon_in.frmt_0x0004_0x00=num_bytes +hwmon_in.pola_0x0004_0x00=negative +hwmon_in.addr_0x0004_0x00=0x00020068 +hwmon_in.len_0x0004_0x00=2 +hwmon_in.int_extra1_0x0004_0x00=0x00020068 +hwmon_in.int_extra2_0x0004_0x00=2000 +hwmon_in.int_extra3_0x0004_0x00=1 + +hwmon_in.mode_0x0004_0x01=str_constant +hwmon_in.str_cons_0x0004_0x01=MAC_VDD3.7V_CLK + +hwmon_in.mode_0x0004_0x02=str_constant +hwmon_in.str_cons_0x0004_0x02=cpld + +hwmon_in.mode_0x0004_0x03=str_constant +hwmon_in.str_cons_0x0004_0x03=4000 + +hwmon_in.mode_0x0004_0x05=str_constant +hwmon_in.str_cons_0x0004_0x05=3500 + +# in5 MAC_VDD5V_USB +hwmon_in.mode_0x0005_0x00=config +hwmon_in.int_cons_0x0005_0x00=0 +hwmon_in.src_0x0005_0x00=cpld +hwmon_in.frmt_0x0005_0x00=num_bytes +hwmon_in.pola_0x0005_0x00=negative +hwmon_in.addr_0x0005_0x00=0x0002006a +hwmon_in.len_0x0005_0x00=2 +hwmon_in.int_extra1_0x0005_0x00=0x0002006a +hwmon_in.int_extra2_0x0005_0x00=3000 +hwmon_in.int_extra3_0x0005_0x00=1 + +hwmon_in.mode_0x0005_0x01=str_constant +hwmon_in.str_cons_0x0005_0x01=MAC_VDD5V_USB + +hwmon_in.mode_0x0005_0x02=str_constant +hwmon_in.str_cons_0x0005_0x02=cpld + +hwmon_in.mode_0x0005_0x03=str_constant +hwmon_in.str_cons_0x0005_0x03=5500 + +hwmon_in.mode_0x0005_0x05=str_constant +hwmon_in.str_cons_0x0005_0x05=4500 + +# in6 FAN1_VDD12V +hwmon_in.mode_0x0006_0x00=config +hwmon_in.int_cons_0x0006_0x00=0 +hwmon_in.src_0x0006_0x00=cpld +hwmon_in.frmt_0x0006_0x00=num_bytes +hwmon_in.pola_0x0006_0x00=negative +hwmon_in.addr_0x0006_0x00=0x00040082 +hwmon_in.len_0x0006_0x00=2 +hwmon_in.int_extra1_0x0006_0x00=0x00040082 +hwmon_in.int_extra2_0x0006_0x00=6000 +hwmon_in.int_extra3_0x0006_0x00=1 + +hwmon_in.mode_0x0006_0x01=str_constant +hwmon_in.str_cons_0x0006_0x01=FAN1_VDD12V + +hwmon_in.mode_0x0006_0x02=str_constant +hwmon_in.str_cons_0x0006_0x02=cpld + +hwmon_in.mode_0x0006_0x03=str_constant +hwmon_in.str_cons_0x0006_0x03=12600 + +hwmon_in.mode_0x0006_0x05=str_constant +hwmon_in.str_cons_0x0006_0x05=11400 + +# in7 FAN2_VDD12V +hwmon_in.mode_0x0007_0x00=config +hwmon_in.int_cons_0x0007_0x00=0 +hwmon_in.src_0x0007_0x00=cpld +hwmon_in.frmt_0x0007_0x00=num_bytes +hwmon_in.pola_0x0007_0x00=negative +hwmon_in.addr_0x0007_0x00=0x00040080 +hwmon_in.len_0x0007_0x00=2 +hwmon_in.int_extra1_0x0007_0x00=0x00040080 +hwmon_in.int_extra2_0x0007_0x00=6000 +hwmon_in.int_extra3_0x0007_0x00=1 + +hwmon_in.mode_0x0007_0x01=str_constant +hwmon_in.str_cons_0x0007_0x01=FAN2_VDD12V + +hwmon_in.mode_0x0007_0x02=str_constant +hwmon_in.str_cons_0x0007_0x02=cpld + +hwmon_in.mode_0x0007_0x03=str_constant +hwmon_in.str_cons_0x0007_0x03=12600 + +hwmon_in.mode_0x0007_0x05=str_constant +hwmon_in.str_cons_0x0007_0x05=11400 + +# in8 FAN3_VDD12V +hwmon_in.mode_0x0008_0x00=config +hwmon_in.int_cons_0x0008_0x00=0 +hwmon_in.src_0x0008_0x00=cpld +hwmon_in.frmt_0x0008_0x00=num_bytes +hwmon_in.pola_0x0008_0x00=negative +hwmon_in.addr_0x0008_0x00=0x00040088 +hwmon_in.len_0x0008_0x00=2 +hwmon_in.int_extra1_0x0008_0x00=0x00040088 +hwmon_in.int_extra2_0x0008_0x00=6000 +hwmon_in.int_extra3_0x0008_0x00=1 + +hwmon_in.mode_0x0008_0x01=str_constant +hwmon_in.str_cons_0x0008_0x01=FAN3_VDD12V + +hwmon_in.mode_0x0008_0x02=str_constant +hwmon_in.str_cons_0x0008_0x02=cpld + +hwmon_in.mode_0x0008_0x03=str_constant +hwmon_in.str_cons_0x0008_0x03=12600 + +hwmon_in.mode_0x0008_0x05=str_constant +hwmon_in.str_cons_0x0008_0x05=11400 + +# in9 FAN4_VDD12V +hwmon_in.mode_0x0009_0x00=config +hwmon_in.int_cons_0x0009_0x00=0 +hwmon_in.src_0x0009_0x00=cpld +hwmon_in.frmt_0x0009_0x00=num_bytes +hwmon_in.pola_0x0009_0x00=negative +hwmon_in.addr_0x0009_0x00=0x0004008a +hwmon_in.len_0x0009_0x00=2 +hwmon_in.int_extra1_0x0009_0x00=0x0004008a +hwmon_in.int_extra2_0x0009_0x00=6000 +hwmon_in.int_extra3_0x0009_0x00=1 + +hwmon_in.mode_0x0009_0x01=str_constant +hwmon_in.str_cons_0x0009_0x01=FAN4_VDD12V + +hwmon_in.mode_0x0009_0x02=str_constant +hwmon_in.str_cons_0x0009_0x02=cpld + +hwmon_in.mode_0x0009_0x03=str_constant +hwmon_in.str_cons_0x0009_0x03=12600 + +hwmon_in.mode_0x0009_0x05=str_constant +hwmon_in.str_cons_0x0009_0x05=11400 + +# in10 FAN5_VDD12V +hwmon_in.mode_0x000a_0x00=config +hwmon_in.int_cons_0x000a_0x00=0 +hwmon_in.src_0x000a_0x00=cpld +hwmon_in.frmt_0x000a_0x00=num_bytes +hwmon_in.pola_0x000a_0x00=negative +hwmon_in.addr_0x000a_0x00=0x00040086 +hwmon_in.len_0x000a_0x00=2 +hwmon_in.int_extra1_0x000a_0x00=0x00040086 +hwmon_in.int_extra2_0x000a_0x00=6000 +hwmon_in.int_extra3_0x000a_0x00=1 + +hwmon_in.mode_0x000a_0x01=str_constant +hwmon_in.str_cons_0x000a_0x01=FAN5_VDD12V + +hwmon_in.mode_0x000a_0x02=str_constant +hwmon_in.str_cons_0x000a_0x02=cpld + +hwmon_in.mode_0x000a_0x03=str_constant +hwmon_in.str_cons_0x000a_0x03=12600 + +hwmon_in.mode_0x000a_0x05=str_constant +hwmon_in.str_cons_0x000a_0x05=11400 + +# in11 FAN6_VDD12V +hwmon_in.mode_0x000b_0x00=config +hwmon_in.int_cons_0x000b_0x00=0 +hwmon_in.src_0x000b_0x00=cpld +hwmon_in.frmt_0x000b_0x00=num_bytes +hwmon_in.pola_0x000b_0x00=negative +hwmon_in.addr_0x000b_0x00=0x0004008c +hwmon_in.len_0x000b_0x00=2 +hwmon_in.int_extra1_0x000b_0x00=0x0004008c +hwmon_in.int_extra2_0x000b_0x00=6000 +hwmon_in.int_extra3_0x000b_0x00=1 + +hwmon_in.mode_0x000b_0x01=str_constant +hwmon_in.str_cons_0x000b_0x01=FAN6_VDD12V + +hwmon_in.mode_0x000b_0x02=str_constant +hwmon_in.str_cons_0x000b_0x02=cpld + +hwmon_in.mode_0x000b_0x03=str_constant +hwmon_in.str_cons_0x000b_0x03=12600 + +hwmon_in.mode_0x000b_0x05=str_constant +hwmon_in.str_cons_0x000b_0x05=11400 + +# in12 FAN_VDD3.3V +hwmon_in.mode_0x000c_0x00=config +hwmon_in.int_cons_0x000c_0x00=0 +hwmon_in.src_0x000c_0x00=cpld +hwmon_in.frmt_0x000c_0x00=num_bytes +hwmon_in.pola_0x000c_0x00=negative +hwmon_in.addr_0x000c_0x00=0x00040084 +hwmon_in.len_0x000c_0x00=2 +hwmon_in.int_extra1_0x000c_0x00=0x00040084 +hwmon_in.int_extra2_0x000c_0x00=2000 +hwmon_in.int_extra3_0x000c_0x00=1 + +hwmon_in.mode_0x000c_0x01=str_constant +hwmon_in.str_cons_0x000c_0x01=FAN_VDD3.3V + +hwmon_in.mode_0x000c_0x02=str_constant +hwmon_in.str_cons_0x000c_0x02=cpld + +hwmon_in.mode_0x000c_0x03=str_constant +hwmon_in.str_cons_0x000c_0x03=3560 + +hwmon_in.mode_0x000c_0x05=str_constant +hwmon_in.str_cons_0x000c_0x05=3040 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SFF.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SFF.cfg new file mode 100644 index 000000000000..4876a92c007b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/WB_PLAT_SFF.cfg @@ -0,0 +1,323 @@ +# configuration item: the number of sffs +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: sff main_dev is 3 +# minor_dev: sff minor_dev not exist(0) +dev_num_3_0=34 + +# configuration item: The directory name of sff sysfs +# format: sff_dir_name_[sff_index] +# sff_index: start from 1 +sff_dir_name_1 =sff1 +sff_dir_name_2 =sff2 +sff_dir_name_3 =sff3 +sff_dir_name_4 =sff4 +sff_dir_name_5 =sff5 +sff_dir_name_6 =sff6 +sff_dir_name_7 =sff7 +sff_dir_name_8 =sff8 +sff_dir_name_9 =sff9 +sff_dir_name_10 =sff10 +sff_dir_name_11 =sff11 +sff_dir_name_12 =sff12 +sff_dir_name_13 =sff13 +sff_dir_name_14 =sff14 +sff_dir_name_15 =sff15 +sff_dir_name_16 =sff16 +sff_dir_name_17 =sff17 +sff_dir_name_18 =sff18 +sff_dir_name_19 =sff19 +sff_dir_name_20 =sff20 +sff_dir_name_21 =sff21 +sff_dir_name_22 =sff22 +sff_dir_name_23 =sff23 +sff_dir_name_24 =sff24 +sff_dir_name_25 =sff25 +sff_dir_name_26 =sff26 +sff_dir_name_27 =sff27 +sff_dir_name_28 =sff28 +sff_dir_name_29 =sff29 +sff_dir_name_30 =sff30 +sff_dir_name_31 =sff31 +sff_dir_name_32 =sff32 +sff_dir_name_33 =sff33 +sff_dir_name_34 =sff34 + +# configuration item: sff cpld register status +# format: sff_cpld_reg_[sff_index]_[cpld_reg] +# sff_index: start from 1 +# cpld_reg: 1: power_on, 2: tx_fault, 3: tx_dis, 4:pre_n, 5:rx_los +# 6: reset, 7: lpmode, 8: module_present, 9: interrupt + +# sff cpld presence status +sff_cpld_reg.mode_1_8=config +sff_cpld_reg.src_1_8=cpld +sff_cpld_reg.frmt_1_8=bit +sff_cpld_reg.pola_1_8=negative +sff_cpld_reg.addr_1_8=0x0003004e +sff_cpld_reg.len_1_8=1 +sff_cpld_reg.bit_offset_1_8=2 + +sff_cpld_reg.mode_2_8=config +sff_cpld_reg.src_2_8=cpld +sff_cpld_reg.frmt_2_8=bit +sff_cpld_reg.pola_2_8=negative +sff_cpld_reg.addr_2_8=0x0003004e +sff_cpld_reg.len_2_8=1 +sff_cpld_reg.bit_offset_2_8=3 + +sff_cpld_reg.mode_3_8=config +sff_cpld_reg.src_3_8=cpld +sff_cpld_reg.frmt_3_8=bit +sff_cpld_reg.pola_3_8=negative +sff_cpld_reg.addr_3_8=0x0003004e +sff_cpld_reg.len_3_8=1 +sff_cpld_reg.bit_offset_3_8=0 + +sff_cpld_reg.mode_4_8=config +sff_cpld_reg.src_4_8=cpld +sff_cpld_reg.frmt_4_8=bit +sff_cpld_reg.pola_4_8=negative +sff_cpld_reg.addr_4_8=0x0003004e +sff_cpld_reg.len_4_8=1 +sff_cpld_reg.bit_offset_4_8=1 + +sff_cpld_reg.mode_5_8=config +sff_cpld_reg.src_5_8=cpld +sff_cpld_reg.frmt_5_8=bit +sff_cpld_reg.pola_5_8=negative +sff_cpld_reg.addr_5_8=0x0003004e +sff_cpld_reg.len_5_8=1 +sff_cpld_reg.bit_offset_5_8=4 + +sff_cpld_reg.mode_6_8=config +sff_cpld_reg.src_6_8=cpld +sff_cpld_reg.frmt_6_8=bit +sff_cpld_reg.pola_6_8=negative +sff_cpld_reg.addr_6_8=0x0003004e +sff_cpld_reg.len_6_8=1 +sff_cpld_reg.bit_offset_6_8=5 + +sff_cpld_reg.mode_7_8=config +sff_cpld_reg.src_7_8=cpld +sff_cpld_reg.frmt_7_8=bit +sff_cpld_reg.pola_7_8=negative +sff_cpld_reg.addr_7_8=0x0003004e +sff_cpld_reg.len_7_8=1 +sff_cpld_reg.bit_offset_7_8=6 + +sff_cpld_reg.mode_8_8=config +sff_cpld_reg.src_8_8=cpld +sff_cpld_reg.frmt_8_8=bit +sff_cpld_reg.pola_8_8=negative +sff_cpld_reg.addr_8_8=0x0003004e +sff_cpld_reg.len_8_8=1 +sff_cpld_reg.bit_offset_8_8=7 + +sff_cpld_reg.mode_9_8=config +sff_cpld_reg.src_9_8=cpld +sff_cpld_reg.frmt_9_8=bit +sff_cpld_reg.pola_9_8=negative +sff_cpld_reg.addr_9_8=0x0003004f +sff_cpld_reg.len_9_8=1 +sff_cpld_reg.bit_offset_9_8=0 + +sff_cpld_reg.mode_10_8=config +sff_cpld_reg.src_10_8=cpld +sff_cpld_reg.frmt_10_8=bit +sff_cpld_reg.pola_10_8=negative +sff_cpld_reg.addr_10_8=0x0003004f +sff_cpld_reg.len_10_8=1 +sff_cpld_reg.bit_offset_10_8=1 + +sff_cpld_reg.mode_11_8=config +sff_cpld_reg.src_11_8=cpld +sff_cpld_reg.frmt_11_8=bit +sff_cpld_reg.pola_11_8=negative +sff_cpld_reg.addr_11_8=0x0003004f +sff_cpld_reg.len_11_8=1 +sff_cpld_reg.bit_offset_11_8=2 + +sff_cpld_reg.mode_12_8=config +sff_cpld_reg.src_12_8=cpld +sff_cpld_reg.frmt_12_8=bit +sff_cpld_reg.pola_12_8=negative +sff_cpld_reg.addr_12_8=0x0003004f +sff_cpld_reg.len_12_8=1 +sff_cpld_reg.bit_offset_12_8=3 + +sff_cpld_reg.mode_13_8=config +sff_cpld_reg.src_13_8=cpld +sff_cpld_reg.frmt_13_8=bit +sff_cpld_reg.pola_13_8=negative +sff_cpld_reg.addr_13_8=0x0003004f +sff_cpld_reg.len_13_8=1 +sff_cpld_reg.bit_offset_13_8=4 + +sff_cpld_reg.mode_14_8=config +sff_cpld_reg.src_14_8=cpld +sff_cpld_reg.frmt_14_8=bit +sff_cpld_reg.pola_14_8=negative +sff_cpld_reg.addr_14_8=0x0003004f +sff_cpld_reg.len_14_8=1 +sff_cpld_reg.bit_offset_14_8=5 + +sff_cpld_reg.mode_15_8=config +sff_cpld_reg.src_15_8=cpld +sff_cpld_reg.frmt_15_8=bit +sff_cpld_reg.pola_15_8=negative +sff_cpld_reg.addr_15_8=0x0003004f +sff_cpld_reg.len_15_8=1 +sff_cpld_reg.bit_offset_15_8=6 + +sff_cpld_reg.mode_16_8=config +sff_cpld_reg.src_16_8=cpld +sff_cpld_reg.frmt_16_8=bit +sff_cpld_reg.pola_16_8=negative +sff_cpld_reg.addr_16_8=0x0003004f +sff_cpld_reg.len_16_8=1 +sff_cpld_reg.bit_offset_16_8=7 + +sff_cpld_reg.mode_17_8=config +sff_cpld_reg.src_17_8=cpld +sff_cpld_reg.frmt_17_8=bit +sff_cpld_reg.pola_17_8=negative +sff_cpld_reg.addr_17_8=0x00020032 +sff_cpld_reg.len_17_8=1 +sff_cpld_reg.bit_offset_17_8=0 + +sff_cpld_reg.mode_18_8=config +sff_cpld_reg.src_18_8=cpld +sff_cpld_reg.frmt_18_8=bit +sff_cpld_reg.pola_18_8=negative +sff_cpld_reg.addr_18_8=0x00020032 +sff_cpld_reg.len_18_8=1 +sff_cpld_reg.bit_offset_18_8=1 + +sff_cpld_reg.mode_19_8=config +sff_cpld_reg.src_19_8=cpld +sff_cpld_reg.frmt_19_8=bit +sff_cpld_reg.pola_19_8=negative +sff_cpld_reg.addr_19_8=0x00020032 +sff_cpld_reg.len_19_8=1 +sff_cpld_reg.bit_offset_19_8=2 + +sff_cpld_reg.mode_20_8=config +sff_cpld_reg.src_20_8=cpld +sff_cpld_reg.frmt_20_8=bit +sff_cpld_reg.pola_20_8=negative +sff_cpld_reg.addr_20_8=0x00020032 +sff_cpld_reg.len_20_8=1 +sff_cpld_reg.bit_offset_20_8=3 + +sff_cpld_reg.mode_21_8=config +sff_cpld_reg.src_21_8=cpld +sff_cpld_reg.frmt_21_8=bit +sff_cpld_reg.pola_21_8=negative +sff_cpld_reg.addr_21_8=0x00020032 +sff_cpld_reg.len_21_8=1 +sff_cpld_reg.bit_offset_21_8=4 + +sff_cpld_reg.mode_22_8=config +sff_cpld_reg.src_22_8=cpld +sff_cpld_reg.frmt_22_8=bit +sff_cpld_reg.pola_22_8=negative +sff_cpld_reg.addr_22_8=0x00020032 +sff_cpld_reg.len_22_8=1 +sff_cpld_reg.bit_offset_22_8=5 + +sff_cpld_reg.mode_23_8=config +sff_cpld_reg.src_23_8=cpld +sff_cpld_reg.frmt_23_8=bit +sff_cpld_reg.pola_23_8=negative +sff_cpld_reg.addr_23_8=0x00020032 +sff_cpld_reg.len_23_8=1 +sff_cpld_reg.bit_offset_23_8=6 + +sff_cpld_reg.mode_24_8=config +sff_cpld_reg.src_24_8=cpld +sff_cpld_reg.frmt_24_8=bit +sff_cpld_reg.pola_24_8=negative +sff_cpld_reg.addr_24_8=0x00020032 +sff_cpld_reg.len_24_8=1 +sff_cpld_reg.bit_offset_24_8=7 + +sff_cpld_reg.mode_25_8=config +sff_cpld_reg.src_25_8=cpld +sff_cpld_reg.frmt_25_8=bit +sff_cpld_reg.pola_25_8=negative +sff_cpld_reg.addr_25_8=0x00020033 +sff_cpld_reg.len_25_8=1 +sff_cpld_reg.bit_offset_25_8=0 + +sff_cpld_reg.mode_26_8=config +sff_cpld_reg.src_26_8=cpld +sff_cpld_reg.frmt_26_8=bit +sff_cpld_reg.pola_26_8=negative +sff_cpld_reg.addr_26_8=0x00020033 +sff_cpld_reg.len_26_8=1 +sff_cpld_reg.bit_offset_26_8=1 + +sff_cpld_reg.mode_27_8=config +sff_cpld_reg.src_27_8=cpld +sff_cpld_reg.frmt_27_8=bit +sff_cpld_reg.pola_27_8=negative +sff_cpld_reg.addr_27_8=0x00020033 +sff_cpld_reg.len_27_8=1 +sff_cpld_reg.bit_offset_27_8=2 + +sff_cpld_reg.mode_28_8=config +sff_cpld_reg.src_28_8=cpld +sff_cpld_reg.frmt_28_8=bit +sff_cpld_reg.pola_28_8=negative +sff_cpld_reg.addr_28_8=0x00020033 +sff_cpld_reg.len_28_8=1 +sff_cpld_reg.bit_offset_28_8=3 + +sff_cpld_reg.mode_29_8=config +sff_cpld_reg.src_29_8=cpld +sff_cpld_reg.frmt_29_8=bit +sff_cpld_reg.pola_29_8=negative +sff_cpld_reg.addr_29_8=0x00020033 +sff_cpld_reg.len_29_8=1 +sff_cpld_reg.bit_offset_29_8=6 + +sff_cpld_reg.mode_30_8=config +sff_cpld_reg.src_30_8=cpld +sff_cpld_reg.frmt_30_8=bit +sff_cpld_reg.pola_30_8=negative +sff_cpld_reg.addr_30_8=0x00020033 +sff_cpld_reg.len_30_8=1 +sff_cpld_reg.bit_offset_30_8=7 + +sff_cpld_reg.mode_31_8=config +sff_cpld_reg.src_31_8=cpld +sff_cpld_reg.frmt_31_8=bit +sff_cpld_reg.pola_31_8=negative +sff_cpld_reg.addr_31_8=0x00020033 +sff_cpld_reg.len_31_8=1 +sff_cpld_reg.bit_offset_31_8=4 + +sff_cpld_reg.mode_32_8=config +sff_cpld_reg.src_32_8=cpld +sff_cpld_reg.frmt_32_8=bit +sff_cpld_reg.pola_32_8=negative +sff_cpld_reg.addr_32_8=0x00020033 +sff_cpld_reg.len_32_8=1 +sff_cpld_reg.bit_offset_32_8=5 + +sff_cpld_reg.mode_33_8=config +sff_cpld_reg.src_33_8=cpld +sff_cpld_reg.frmt_33_8=bit +sff_cpld_reg.pola_33_8=negative +sff_cpld_reg.addr_33_8=0x00020046 +sff_cpld_reg.len_33_8=1 +sff_cpld_reg.bit_offset_33_8=1 + +sff_cpld_reg.mode_34_8=config +sff_cpld_reg.src_34_8=cpld +sff_cpld_reg.frmt_34_8=bit +sff_cpld_reg.pola_34_8=negative +sff_cpld_reg.addr_34_8=0x00020046 +sff_cpld_reg.len_34_8=1 +sff_cpld_reg.bit_offset_34_8=0 + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/cfg_file_name b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/cfg_file_name new file mode 100644 index 000000000000..c3ea65365c78 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/plat_sysfs_cfg/cfg_file_name @@ -0,0 +1,5 @@ +WB_PLAT_CPLD +WB_PLAT_FAN +WB_PLAT_PSU +WB_PLAT_SFF +WB_PLAT_SENSOR diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/service/set-eth-mac.service b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/service/set-eth-mac.service new file mode 100644 index 000000000000..4b74632c21cf --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/service/set-eth-mac.service @@ -0,0 +1,14 @@ +[Unit] +Description=Set eth mac address +Before=interfaces-config.service +Requires=platform_driver.service +After=platform_driver.service +#DefaultDependencies=no + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/set_eth_mac.py +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/setup.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/setup.py new file mode 100755 index 000000000000..6c3916921abb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6920-32qc2x/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation', + license='Apache 2.0', + author='SONiC Team', + author_email='support', + url='', + maintainer='support', + maintainer_email='', + packages=[ + 'sonic_platform', + 'plat_hal', + 'wbutil', + 'eepromutil', + 'hal-config', + 'config', + ], + py_modules=[ + 'hal_pltfm', + 'platform_util', + 'platform_intf', + ], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/Makefile new file mode 100644 index 000000000000..ffcf6320f6cd --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/Makefile @@ -0,0 +1,26 @@ +PWD = $(shell pwd) +DIR_KERNEL_SRC = $(PWD)/modules/driver +EXTRA_CFLAGS:= -I$(M)/include +EXTRA_CFLAGS+= -Wall +SUB_BUILD_DIR = $(PWD)/build +INSTALL_DIR = $(SUB_BUILD_DIR)/$(KERNEL_SRC)/$(INSTALL_MOD_DIR) +INSTALL_SCRIPT_DIR = $(SUB_BUILD_DIR)/usr/local/bin +INSTALL_LIB_DIR = $(SUB_BUILD_DIR)/usr/lib/python3/dist-packages +INSTALL_SYSFS_CFG_DIR = $(SUB_BUILD_DIR)/etc/plat_sysfs_cfg + +all: + $(MAKE) -C $(KBUILD_OUTPUT) M=$(DIR_KERNEL_SRC) modules + @if [ ! -d ${INSTALL_DIR} ]; then mkdir -p ${INSTALL_DIR} ;fi + cp -r $(DIR_KERNEL_SRC)/*.ko $(INSTALL_DIR) + @if [ ! -d ${INSTALL_SCRIPT_DIR} ]; then mkdir -p ${INSTALL_SCRIPT_DIR} ;fi + cp -r $(PWD)/config/* $(INSTALL_SCRIPT_DIR) + @if [ ! -d ${INSTALL_LIB_DIR} ]; then mkdir -p ${INSTALL_LIB_DIR} ;fi + @if [ -d $(PWD)/hal-config/ ]; then cp -r $(PWD)/hal-config/* ${INSTALL_LIB_DIR} ;fi + @if [ ! -d ${INSTALL_SYSFS_CFG_DIR} ]; then mkdir -p ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ -d $(PWD)/plat_sysfs_cfg/ ]; then cp -r $(PWD)/plat_sysfs_cfg/* ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ ! -d ${INSTALL_UPGRADE_TEST_DIR} ]; then mkdir -p ${INSTALL_UPGRADE_TEST_DIR} ;fi +clean: + rm -f ${DIR_KERNEL_SRC}/*.o ${DIR_KERNEL_SRC}/*.ko ${DIR_KERNEL_SRC}/*.mod.c ${DIR_KERNEL_SRC}/.*.cmd + rm -f ${DIR_KERNEL_SRC}/Module.markers ${DIR_KERNEL_SRC}/Module.symvers ${DIR_KERNEL_SRC}/modules.order + rm -rf ${DIR_KERNEL_SRC}/.tmp_versions + rm -rf $(SUB_BUILD_DIR) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_config.py new file mode 100755 index 000000000000..100f8603d982 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_config.py @@ -0,0 +1,2036 @@ +#!/usr/bin/python3 +# -*- coding: UTF-8 -*- +from platform_common import * + +STARTMODULE = { + "fancontrol": 0, + "hal_fanctrl": 1, + "hal_ledctrl": 1, + "avscontrol": 0, + "tty_console": 1, + "dev_monitor": 1, + "pmon_syslog": 1, + "sff_temp_polling": 1, + "reboot_cause": 1, +} + +DEV_MONITOR_PARAM = { + "polling_time": 10, + "psus": [ + {"name": "psu1", + "present": {"gettype": "io", "io_addr": 0x964, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "psu1pmbus", "name": "wb_fsp1200", "bus": 83, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu1frue2", "name": "24c02", "bus": 83, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "psu2", + "present": {"gettype": "io", "io_addr": 0x964, "presentbit": 4, "okval": 0}, + "device": [ + {"id": "psu2pmbus", "name": "wb_fsp1200", "bus": 84, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu2frue2", "name": "24c02", "bus": 84, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "psu3", + "present": {"gettype": "io", "io_addr": 0x965, "presentbit": 4, "okval": 0}, + "device": [ + {"id": "psu3pmbus", "name": "wb_fsp1200", "bus": 86, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu3frue2", "name": "24c02", "bus": 86, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "psu4", + "present": {"gettype": "io", "io_addr": 0x965, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "psu4pmbus", "name": "wb_fsp1200", "bus": 85, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu4frue2", "name": "24c02", "bus": 85, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "fans": [ + {"name": "fan1", + "present": {"gettype": "i2c", "bus": 92, "loc": 0x0d, "offset": 0x30, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "fan1frue2", "name": "24c64", "bus": 95, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan2", + "present": {"gettype": "i2c", "bus": 101, "loc": 0x0d, "offset": 0x30, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "fan5frue2", "name": "24c64", "bus": 104, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan3", + "present": {"gettype": "i2c", "bus": 92, "loc": 0x0d, "offset": 0x30, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "fan2frue2", "name": "24c64", "bus": 96, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan4", + "present": {"gettype": "i2c", "bus": 101, "loc": 0x0d, "offset": 0x30, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "fan6frue2", "name": "24c64", "bus": 105, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan5", + "present": {"gettype": "i2c", "bus": 92, "loc": 0x0d, "offset": 0x30, "presentbit": 2, "okval": 0}, + "device": [ + {"id": "fan3frue2", "name": "24c64", "bus": 97, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan6", + "present": {"gettype": "i2c", "bus": 101, "loc": 0x0d, "offset": 0x30, "presentbit": 2, "okval": 0}, + "device": [ + {"id": "fan7frue2", "name": "24c64", "bus": 106, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan7", + "present": {"gettype": "i2c", "bus": 92, "loc": 0x0d, "offset": 0x30, "presentbit": 3, "okval": 0}, + "device": [ + {"id": "fan4frue2", "name": "24c64", "bus": 98, "loc": 0x50, "attr": "eeprom"}, + ], + }, + {"name": "fan8", + "present": {"gettype": "i2c", "bus": 101, "loc": 0x0d, "offset": 0x30, "presentbit": 3, "okval": 0}, + "device": [ + {"id": "fan8frue2", "name": "24c64", "bus": 107, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "others": [ + { + "name": "eeprom", + "device": [ + {"id": "eeprom_1", "name": "24c02", "bus": 1, "loc": 0x56, "attr": "eeprom"}, + ], + }, + { + "name": "lm75", + "device": [ + {"id": "lm75_1", "name": "lm75", "bus": 79, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_2", "name": "lm75", "bus": 93, "loc": 0x48, "attr": "hwmon"}, + {"id": "lm75_3", "name": "lm75", "bus": 94, "loc": 0x49, "attr": "hwmon"}, + {"id": "lm75_4", "name": "lm75", "bus": 102, "loc": 0x48, "attr": "hwmon"}, + {"id": "lm75_5", "name": "lm75", "bus": 117, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_6", "name": "lm75", "bus": 118, "loc": 0x4f, "attr": "hwmon"}, + {"id": "lm75_7", "name": "lm75", "bus": 198, "loc": 0x4b, "attr": "hwmon"}, + ], + }, + { + "name": "mac_bsc", + "device": [ + {"id": "mac_bsc_1", "name": "wb_mac_bsc_th4", "bus": 122, "loc": 0x44, "attr": "hwmon"}, + ], + }, + { + "name":"tmp411", + "device":[ + {"id":"tmp411_1", "name":"tmp411","bus":119, "loc":0x4c, "attr":"hwmon"}, + {"id":"tmp411_2", "name":"tmp411","bus":120, "loc":0x4c, "attr":"hwmon"}, + ], + }, + { + "name": "ina3221", + "device": [ + {"id": "ina3221_1", "name": "ina3221", "bus": 78, "loc": 0x43, "attr": "hwmon"}, + ], + }, + { + "name": "tps53622", + "device": [ + {"id": "tps53622_1", "name": "tps53688", "bus": 78, "loc": 0x67, "attr": "hwmon"}, + {"id": "tps53622_2", "name": "tps53688", "bus": 78, "loc": 0x6c, "attr": "hwmon"}, + {"id": "tps53622_3", "name": "tps53688", "bus": 131, "loc": 0x67, "attr": "hwmon"}, + ], + }, + { + "name": "ucd90160", + "device": [ + {"id": "ucd90160_1", "name": "ucd90160", "bus": 77, "loc": 0x5b, "attr": "hwmon"}, + {"id": "ucd90160_2", "name": "ucd90160", "bus": 128, "loc": 0x5b, "attr": "hwmon"}, + {"id": "ucd90160_3", "name": "ucd90160", "bus": 129, "loc": 0x5b, "attr": "hwmon"}, + {"id": "ucd90160_4", "name": "ucd90160", "bus": 130, "loc": 0x5b, "attr": "hwmon"}, + ], + }, + ], +} + +MANUINFO_CONF = { + "bios": { + "key": "BIOS", + "head": True, + "next": "onie" + }, + "bios_vendor": { + "parent": "bios", + "key": "Vendor", + "cmd": "dmidecode -t 0 |grep Vendor", + "pattern": r".*Vendor", + "separator": ":", + "arrt_index": 1, + }, + "bios_version": { + "parent": "bios", + "key": "Version", + "cmd": "dmidecode -t 0 |grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "bios_date": { + "parent": "bios", + "key": "Release Date", + "cmd": "dmidecode -t 0 |grep Release", + "pattern": r".*Release Date", + "separator": ":", + "arrt_index": 3, + }, + "onie": { + "key": "ONIE", + "next": "cpu" + }, + "onie_date": { + "parent": "onie", + "key": "Build Date", + "file": "/host/machine.conf", + "pattern": r"^onie_build_date", + "separator": "=", + "arrt_index": 1, + }, + "onie_version": { + "parent": "onie", + "key": "Version", + "file": "/host/machine.conf", + "pattern": r"^onie_version", + "separator": "=", + "arrt_index": 2, + }, + + "cpu": { + "key": "CPU", + "next": "ssd" + }, + "cpu_vendor": { + "parent": "cpu", + "key": "Vendor", + "cmd": "dmidecode --type processor |grep Manufacturer", + "pattern": r".*Manufacturer", + "separator": ":", + "arrt_index": 1, + }, + "cpu_model": { + "parent": "cpu", + "key": "Device Model", + "cmd": "dmidecode --type processor | grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "cpu_core": { + "parent": "cpu", + "key": "Core Count", + "cmd": "dmidecode --type processor | grep \"Core Count\"", + "pattern": r".*Core Count", + "separator": ":", + "arrt_index": 3, + }, + "cpu_thread": { + "parent": "cpu", + "key": "Thread Count", + "cmd": "dmidecode --type processor | grep \"Thread Count\"", + "pattern": r".*Thread Count", + "separator": ":", + "arrt_index": 4, + }, + "ssd": { + "key": "SSD", + "next": "cpld" + }, + "ssd_model": { + "parent": "ssd", + "key": "Device Model", + "cmd": "smartctl -i /dev/sda |grep \"Device Model\"", + "pattern": r".*Device Model", + "separator": ":", + "arrt_index": 1, + }, + "ssd_fw": { + "parent": "ssd", + "key": "Firmware Version", + "cmd": "smartctl -i /dev/sda |grep \"Firmware Version\"", + "pattern": r".*Firmware Version", + "separator": ":", + "arrt_index": 2, + }, + "ssd_user_cap": { + "parent": "ssd", + "key": "User Capacity", + "cmd": "smartctl -i /dev/sda |grep \"User Capacity\"", + "pattern": r".*User Capacity", + "separator": ":", + "arrt_index": 3, + }, + + "cpld": { + "key": "CPLD", + "next": "psu" + }, + + "cpld1": { + "key": "CPLD1", + "parent": "cpld", + "arrt_index": 1, + }, + "cpld1_model": { + "key": "Device Model", + "parent": "cpld1", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld1_vender": { + "key": "Vendor", + "parent": "cpld1", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld1_desc": { + "key": "Description", + "parent": "cpld1", + "config": "CPU_CPLD", + "arrt_index": 3, + }, + "cpld1_version": { + "key": "Firmware Version", + "parent": "cpld1", + "reg": { + "loc": "/dev/port", + "offset": 0x700, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + "cpld2": { + "key": "CPLD2", + "parent": "cpld", + "arrt_index": 2, + }, + "cpld2_model": { + "key": "Device Model", + "parent": "cpld2", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld2_vender": { + "key": "Vendor", + "parent": "cpld2", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld2_desc": { + "key": "Description", + "parent": "cpld2", + "config": "CONNECT_CPLD", + "arrt_index": 3, + }, + "cpld2_version": { + "key": "Firmware Version", + "parent": "cpld2", + "reg": { + "loc": "/dev/port", + "offset": 0x900, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld3": { + "key": "CPLD3", + "parent": "cpld", + "arrt_index": 3, + }, + "cpld3_model": { + "key": "Device Model", + "parent": "cpld3", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld3_vender": { + "key": "Vendor", + "parent": "cpld3", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld3_desc": { + "key": "Description", + "parent": "cpld3", + "config": "MAC_CPLDA", + "arrt_index": 3, + }, + "cpld3_version": { + "key": "Firmware Version", + "parent": "cpld3", + "i2c": { + "bus": "109", + "loc": "0x1d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld4": { + "key": "CPLD4", + "parent": "cpld", + "arrt_index": 4, + }, + "cpld4_model": { + "key": "Device Model", + "parent": "cpld4", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld4_vender": { + "key": "Vendor", + "parent": "cpld4", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld4_desc": { + "key": "Description", + "parent": "cpld4", + "config": "MAC_CPLDB", + "arrt_index": 3, + }, + "cpld4_version": { + "key": "Firmware Version", + "parent": "cpld4", + "i2c": { + "bus": "110", + "loc": "0x2d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld5": { + "key": "CPLD5", + "parent": "cpld", + "arrt_index": 5, + }, + "cpld5_model": { + "key": "Device Model", + "parent": "cpld5", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld5_vender": { + "key": "Vendor", + "parent": "cpld5", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld5_desc": { + "key": "Description", + "parent": "cpld5", + "config": "PORT_CPLDA", + "arrt_index": 3, + }, + "cpld5_version": { + "key": "Firmware Version", + "parent": "cpld5", + "i2c": { + "bus": "111", + "loc": "0x3d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld6": { + "key": "CPLD6", + "parent": "cpld", + "arrt_index": 6, + }, + "cpld6_model": { + "key": "Device Model", + "parent": "cpld6", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld6_vender": { + "key": "Vendor", + "parent": "cpld6", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld6_desc": { + "key": "Description", + "parent": "cpld6", + "config": "PORT_CPLDB", + "arrt_index": 3, + }, + "cpld6_version": { + "key": "Firmware Version", + "parent": "cpld6", + "i2c": { + "bus": "112", + "loc": "0x4d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld7": { + "key": "CPLD7", + "parent": "cpld", + "arrt_index": 7, + }, + "cpld7_model": { + "key": "Device Model", + "parent": "cpld7", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld7_vender": { + "key": "Vendor", + "parent": "cpld7", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld7_desc": { + "key": "Description", + "parent": "cpld7", + "config": "FAN_CPLDA", + "arrt_index": 3, + }, + "cpld7_version": { + "key": "Firmware Version", + "parent": "cpld7", + "i2c": { + "bus": "92", + "loc": "0x0d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld8": { + "key": "CPLD8", + "parent": "cpld", + "arrt_index": 8, + }, + "cpld8_model": { + "key": "Device Model", + "parent": "cpld8", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld8_vender": { + "key": "Vendor", + "parent": "cpld8", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld8_desc": { + "key": "Description", + "parent": "cpld8", + "config": "FAN_CPLDB", + "arrt_index": 3, + }, + "cpld8_version": { + "key": "Firmware Version", + "parent": "cpld8", + "i2c": { + "bus": "101", + "loc": "0x0d", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "psu": { + "key": "PSU", + "next": "fan" + }, + + "psu1": { + "parent": "psu", + "key": "PSU1", + "arrt_index": 1, + }, + "psu1_hw_version": { + "key": "Hardware Version", + "parent": "psu1", + "extra": { + "funcname": "getPsu", + "id": "psu1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu1_fw_version": { + "key": "Firmware Version", + "parent": "psu1", + "config": "NA", + "arrt_index": 2, + }, + + "psu2": { + "parent": "psu", + "key": "PSU2", + "arrt_index": 2, + }, + "psu2_hw_version": { + "key": "Hardware Version", + "parent": "psu2", + "extra": { + "funcname": "getPsu", + "id": "psu2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu2_fw_version": { + "key": "Firmware Version", + "parent": "psu2", + "config": "NA", + "arrt_index": 2, + }, + "psu3": { + "parent": "psu", + "key": "PSU3", + "arrt_index": 3, + }, + "psu3_hw_version": { + "key": "Hardware Version", + "parent": "psu3", + "extra": { + "funcname": "getPsu", + "id": "psu3", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu3_fw_version": { + "key": "Firmware Version", + "parent": "psu3", + "config": "NA", + "arrt_index": 2, + }, + + "psu4": { + "parent": "psu", + "key": "PSU4", + "arrt_index": 4, + }, + "psu4_hw_version": { + "key": "Hardware Version", + "parent": "psu4", + "extra": { + "funcname": "getPsu", + "id": "psu4", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu4_fw_version": { + "key": "Firmware Version", + "parent": "psu4", + "config": "NA", + "arrt_index": 2, + }, + + "fan": { + "key": "FAN", + "next": "i210" + }, + "fan1": { + "key": "FAN1", + "parent": "fan", + "arrt_index": 1, + }, + "fan1_hw_version": { + "key": "Hardware Version", + "parent": "fan1", + "extra": { + "funcname": "checkFan", + "id": "fan1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan1_fw_version": { + "key": "Firmware Version", + "parent": "fan1", + "config": "NA", + "arrt_index": 2, + }, + + "fan2": { + "key": "FAN2", + "parent": "fan", + "arrt_index": 2, + }, + "fan2_hw_version": { + "key": "Hardware Version", + "parent": "fan2", + "extra": { + "funcname": "checkFan", + "id": "fan2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan2_fw_version": { + "key": "Firmware Version", + "parent": "fan2", + "config": "NA", + "arrt_index": 2, + }, + + "fan3": { + "key": "FAN3", + "parent": "fan", + "arrt_index": 3, + }, + "fan3_hw_version": { + "key": "Hardware Version", + "parent": "fan3", + "extra": { + "funcname": "checkFan", + "id": "fan3", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan3_fw_version": { + "key": "Firmware Version", + "parent": "fan3", + "config": "NA", + "arrt_index": 2, + }, + + "fan4": { + "key": "FAN4", + "parent": "fan", + "arrt_index": 4, + }, + "fan4_hw_version": { + "key": "Hardware Version", + "parent": "fan4", + "extra": { + "funcname": "checkFan", + "id": "fan4", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan4_fw_version": { + "key": "Firmware Version", + "parent": "fan4", + "config": "NA", + "arrt_index": 2, + }, + + "fan5": { + "key": "FAN5", + "parent": "fan", + "arrt_index": 5, + }, + "fan5_hw_version": { + "key": "Hardware Version", + "parent": "fan5", + "extra": { + "funcname": "checkFan", + "id": "fan5", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan5_fw_version": { + "key": "Firmware Version", + "parent": "fan5", + "config": "NA", + "arrt_index": 2, + }, + + "fan6": { + "key": "FAN6", + "parent": "fan", + "arrt_index": 6, + }, + "fan6_hw_version": { + "key": "Hardware Version", + "parent": "fan6", + "extra": { + "funcname": "checkFan", + "id": "fan6", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan6_fw_version": { + "key": "Firmware Version", + "parent": "fan6", + "config": "NA", + "arrt_index": 2, + }, + + "fan7": { + "key": "FAN7", + "parent": "fan", + "arrt_index": 7, + }, + "fan7_hw_version": { + "key": "Hardware Version", + "parent": "fan7", + "extra": { + "funcname": "checkFan", + "id": "fan7", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan7_fw_version": { + "key": "Firmware Version", + "parent": "fan7", + "config": "NA", + "arrt_index": 2, + }, + + "fan8": { + "key": "FAN8", + "parent": "fan", + "arrt_index": 8, + }, + "fan8_hw_version": { + "key": "Hardware Version", + "parent": "fan8", + "extra": { + "funcname": "checkFan", + "id": "fan8", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan8_fw_version": { + "key": "Firmware Version", + "parent": "fan8", + "config": "NA", + "arrt_index": 2, + }, + + "i210": { + "key": "NIC", + "next": "fpga" + }, + "i210_model": { + "parent": "i210", + "config": "NA", + "key": "Device Model", + "arrt_index": 1, + }, + "i210_vendor": { + "parent": "i210", + "config": "INTEL", + "key": "Vendor", + "arrt_index": 2, + }, + "i210_version": { + "parent": "i210", + "cmd": "ethtool -i eth0", + "pattern": r"firmware-version", + "separator": ":", + "key": "Firmware Version", + "arrt_index": 3, + }, + + "fpga": { + "key": "FPGA", + }, + + "fpga1": { + "key": "FPGA1", + "parent": "fpga", + "arrt_index": 1, + }, + "fpga1_model": { + "parent": "fpga1", + "config": "XC7A100T-2FGG484C", + "key": "Device Model", + "arrt_index": 1, + }, + "fpga1_vender": { + "parent": "fpga1", + "config": "XILINX", + "key": "Vendor", + "arrt_index": 2, + }, + "fpga1_desc": { + "key": "Description", + "parent": "fpga1", + "config": "MAC_FPGA", + "arrt_index": 3, + }, + "fpga1_hw_version": { + "parent": "fpga1", + "config": "NA", + "key": "Hardware Version", + "arrt_index": 4, + }, + "fpga1_fw_version": { + "parent": "fpga1", + "pci": { + "bus": 8, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 0 + }, + "key": "Firmware Version", + "arrt_index": 5, + }, + "fpga1_date": { + "parent": "fpga1", + "pci": { + "bus": 8, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 4 + }, + "key": "Build Date", + "arrt_index": 6, + }, + "fpga2": { + "key": "FPGA2", + "parent": "fpga", + "arrt_index": 2, + }, + "fpga2_model": { + "parent": "fpga2", + "config": "XC7A100T-2FGG484C", + "key": "Device Model", + "arrt_index": 1, + }, + "fpga2_vender": { + "parent": "fpga2", + "config": "XILINX", + "key": "Vendor", + "arrt_index": 2, + }, + "fpga2_desc": { + "key": "Description", + "parent": "fpga2", + "config": "PORT_FPGA", + "arrt_index": 3, + }, + "fpga2_hw_version": { + "parent": "fpga2", + "config": "NA", + "key": "Hardware Version", + "arrt_index": 4, + }, + "fpga2_fw_version": { + "parent": "fpga2", + "devfile": { + "loc": "/dev/fpga1", + "offset": 0, + "len": 4, + "bit_width": 4 + }, + "key": "Firmware Version", + "arrt_index": 5, + }, + "fpga2_date": { + "parent": "fpga2", + "devfile": { + "loc": "/dev/fpga1", + "offset": 4, + "len": 4, + "bit_width": 4 + }, + "key": "Build Date", + "arrt_index": 6, + }, + "others": { + "key": "OTHERS", + }, + "5387": { + "parent": "others", + "key": "CPU-BMC-SWITCH", + "arrt_index": 1, + }, + "5387_model": { + "parent": "5387", + "config": "BCM5387", + "key": "Device Model", + "arrt_index": 1, + }, + "5387_vendor": { + "parent": "5387", + "config": "Broadcom", + "key": "Vendor", + "arrt_index": 2, + }, + "5387_hw_version": { + "parent": "5387", + "key": "Hardware Version", + "func": { + "funcname": "get_bcm5387_version", + "params": { + "before": [ + # OE pull high + {"gettype": "cmd", "cmd": "echo 50 > /sys/class/gpio/export"}, + {"gettype": "cmd", "cmd": "echo high > /sys/class/gpio/gpio50/direction"}, + # SEL1 set high + {"gettype": "cmd", "cmd": "echo 48 > /sys/class/gpio/export"}, + {"gettype": "cmd", "cmd": "echo high > /sys/class/gpio/gpio48/direction"}, + # select update 5387 + {"gettype": "io", "io_addr": 0x918, "value": 0x06}, + # enable 5387 + {"gettype": "io", "io_addr": 0x943, "value": 0x00}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio_device sck=65 miso=32 mosi=67 bus=0"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_93xx46 spi_bus_num=0 spi_cs_gpio=6"}, + ], + "get_version": "md5sum /sys/bus/spi/devices/spi0.0/eeprom | awk '{print $1}'", + "after": [ + {"gettype": "cmd", "cmd": "echo 0 > /sys/class/gpio/gpio48/value"}, + {"gettype": "cmd", "cmd": "echo 48 > /sys/class/gpio/unexport"}, + {"gettype": "cmd", "cmd": "echo 0 > /sys/class/gpio/gpio50/value"}, + {"gettype": "cmd", "cmd": "echo 50 > /sys/class/gpio/unexport"}, + ], + "finally": [ + {"gettype": "cmd", "cmd": "rmmod wb_spi_93xx46"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio_device"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio"}, + {"gettype": "io", "io_addr": 0x943, "value": 0x01}, + {"gettype": "io", "io_addr": 0x918, "value": 0x00}, + ], + }, + }, + "arrt_index": 3, + }, +} + +PMON_SYSLOG_STATUS = { + "polling_time": 3, + "sffs": { + "present": {"path": ["/sys/wb_plat/sff/*/present"], "ABSENT": 0}, + "nochangedmsgflag": 0, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 1, + "alias": { + "sff1": "Ethernet1", + "sff2": "Ethernet2", + "sff3": "Ethernet3", + "sff4": "Ethernet4", + "sff5": "Ethernet5", + "sff6": "Ethernet6", + "sff7": "Ethernet7", + "sff8": "Ethernet8", + "sff9": "Ethernet9", + "sff10": "Ethernet10", + "sff11": "Ethernet11", + "sff12": "Ethernet12", + "sff13": "Ethernet13", + "sff14": "Ethernet14", + "sff15": "Ethernet15", + "sff16": "Ethernet16", + "sff17": "Ethernet17", + "sff18": "Ethernet18", + "sff19": "Ethernet19", + "sff20": "Ethernet20", + "sff21": "Ethernet21", + "sff22": "Ethernet22", + "sff23": "Ethernet23", + "sff24": "Ethernet24", + "sff25": "Ethernet25", + "sff26": "Ethernet26", + "sff27": "Ethernet27", + "sff28": "Ethernet28", + "sff29": "Ethernet29", + "sff30": "Ethernet30", + "sff31": "Ethernet31", + "sff32": "Ethernet32", + "sff33": "Ethernet33", + "sff34": "Ethernet34", + "sff35": "Ethernet35", + "sff36": "Ethernet36", + "sff37": "Ethernet37", + "sff38": "Ethernet38", + "sff39": "Ethernet39", + "sff40": "Ethernet40", + "sff41": "Ethernet41", + "sff42": "Ethernet42", + "sff43": "Ethernet43", + "sff44": "Ethernet44", + "sff45": "Ethernet45", + "sff46": "Ethernet46", + "sff47": "Ethernet47", + "sff48": "Ethernet48", + "sff49": "Ethernet49", + "sff50": "Ethernet50", + "sff51": "Ethernet51", + "sff52": "Ethernet52", + "sff53": "Ethernet53", + "sff54": "Ethernet54", + "sff55": "Ethernet55", + "sff56": "Ethernet56", + "sff57": "Ethernet57", + "sff58": "Ethernet58", + "sff59": "Ethernet59", + "sff60": "Ethernet60", + "sff61": "Ethernet61", + "sff62": "Ethernet62", + "sff63": "Ethernet63", + "sff64": "Ethernet64", + } + }, + "fans": { + "present": {"path": ["/sys/wb_plat/fan/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/fan/%s/motor0/status", 'okval': 1}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "fan1": "FAN1", + "fan2": "FAN2", + "fan3": "FAN3", + "fan4": "FAN4", + "fan5": "FAN5", + "fan6": "FAN6", + "fan7": "FAN7", + "fan8": "FAN8", + } + }, + "psus": { + "present": {"path": ["/sys/wb_plat/psu/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/psu/%s/output", "okval": 1}, + {"path": "/sys/wb_plat/psu/%s/alert", "okval": 0}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "psu1": "PSU1", + "psu2": "PSU2", + "psu3": "PSU3", + "psu4": "PSU4" + } + } +} + +REBOOT_CAUSE_PARA = { + "reboot_cause_list": [ + { + "name": "cold_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x910, "okval": 0}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Power Loss, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Power Loss, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ] + }, + { + "name": "wdt_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x91a, "okval": 1}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size":1*1024*1024} + ], + "finish_operation": [ + {"gettype": "io", "io_addr": 0x919, "value": 0xfc}, + ] + }, + { + "name": "bmc_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x91b, "okval": 1}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "BMC reboot, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "BMC reboot, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + "finish_operation": [ + {"gettype": "io", "io_addr": 0x919, "value": 0xfa}, + ] + }, + { + "name": "bmc_powerdown", + "monitor_point": {"gettype": "io", "io_addr": 0x91c, "okval": 1}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "BMC powerdown, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "BMC powerdown, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + "finish_operation": [ + {"gettype": "io", "io_addr": 0x919, "value": 0xf6}, + ] + }, + { + "name": "otp_switch_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_switch_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_switch_reboot_flag"}, + ] + }, + { + "name": "otp_other_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_other_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_other_reboot_flag"}, + ] + }, + ], + "other_reboot_cause_record": [ + {"record_type": "file", "mode": "cover", "log": "Other, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Other, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], +} + +##################### MAC Voltage adjust#################################### +MAC_DEFAULT_PARAM = [ + { + "name": "mac_core", # AVS name + "type": 0, # 1: used default value, if rov value not in range. 0: do nothing, if rov value not in range + "default": 0x82, # default value, if rov value not in range + "sdkreg": "TOP_AVS_SEL_REG", # SDK register name + "sdktype": 0, # 0: No shift operation required, 1: shift operation required + "macregloc": 24, # Shift right 24 bits + "mask": 0xff, # Use with macregloc + "rov_source": 0, # 0: get rov value from cpld, 1: get rov value from SDK + "cpld_avs": {"bus": 109, "loc": 0x1d, "offset": 0x24, "gettype": "i2c"}, + "set_avs": { + "loc": "/sys/bus/i2c/devices/126-0010/avs_vout", + "gettype": "sysfs", "formula": "int((%f)*1000000)" + }, + "mac_avs_param": { + 0x7e: 0.90090, + 0x82: 0.87820, + 0x86: 0.85640, + 0x8A: 0.83370, + 0x8E: 0.80960, + } + } +] + +BLACKLIST_DRIVERS = [ + {"name": "i2c_i801", "delay": 0}, +] + +DRIVERLISTS = [ + {"name": "i2c_i801", "delay": 1}, + {"name": "wb_gpio_d1500", "delay": 0}, + {"name": "i2c_dev", "delay": 0}, + {"name": "i2c_algo_bit", "delay": 0}, + {"name": "i2c_gpio", "delay": 0}, + {"name": "i2c_mux", "delay": 0}, + {"name": "wb_gpio_device", "delay": 0}, + {"name": "wb_i2c_gpio_device gpio_sda=17 gpio_scl=1 gpio_udelay=2", "delay": 0}, + {"name": "platform_common dfd_my_type=0x20000055", "delay": 0}, + {"name": "wb_fpga_pcie", "delay": 0}, + {"name": "wb_pcie_dev", "delay": 0}, + {"name": "wb_pcie_dev_device", "delay": 0}, + {"name": "wb_io_dev", "delay": 0}, + {"name": "wb_i2c_dev", "delay": 0}, + {"name": "wb_spi_ocores", "delay": 0}, + {"name": "wb_spi_ocores_device", "delay": 0}, + {"name": "wb_spi_dev", "delay": 0}, + {"name": "wb_spi_dev_device", "delay": 0}, + {"name": "wb_spi_dev_platform_device", "delay": 0}, + {"name": "wb_lpc_drv", "delay": 0}, + {"name": "wb_lpc_drv_device", "delay": 0}, + {"name": "wb_io_dev_device", "delay": 0}, + {"name": "wb_fpga_i2c_bus_drv", "delay": 0}, + {"name": "wb_fpga_i2c_bus_device", "delay": 0}, + {"name": "wb_i2c_mux_pca9641", "delay": 0}, + {"name": "wb_i2c_mux_pca954x", "delay": 0}, + {"name": "wb_i2c_mux_pca954x_device", "delay": 0}, + {"name": "wb_fpga_pca954x_drv", "delay": 0}, + {"name": "wb_fpga_pca954x_device", "delay": 0}, + {"name": "wb_i2c_dev_device", "delay": 0}, + {"name": "wb_wdt", "delay": 0}, + {"name": "lm75", "delay": 0}, + {"name": "tmp401", "delay": 0}, + {"name": "optoe", "delay": 0}, + {"name": "at24", "delay": 0}, + {"name": "wb_mac_bsc", "delay": 0}, + {"name": "pmbus_core", "delay": 0}, + {"name": "wb_csu550", "delay": 0}, + {"name": "ina3221", "delay": 0}, + {"name": "tps53679", "delay": 0}, + {"name": "ucd9000", "delay": 0}, + {"name": "wb_xdpe132g5c", "delay": 0}, + {"name": "plat_dfd", "delay": 0}, + {"name": "plat_switch", "delay": 0}, + {"name": "plat_fan", "delay": 0}, + {"name": "plat_psu", "delay": 0}, + {"name": "plat_sff", "delay": 0}, + {"name": "wb_spi_master", "delay": 0}, +] + +DEVICE = [ + {"name": "24c02", "bus": 1, "loc": 0x56}, + {"name": "wb_mac_bsc_th4", "bus": 122, "loc": 0x44}, + # fan + {"name": "24c64", "bus": 95, "loc": 0x50}, + {"name": "24c64", "bus": 96, "loc": 0x50}, + {"name": "24c64", "bus": 97, "loc": 0x50}, + {"name": "24c64", "bus": 98, "loc": 0x50}, + {"name": "24c64", "bus": 104, "loc": 0x50}, + {"name": "24c64", "bus": 105, "loc": 0x50}, + {"name": "24c64", "bus": 106, "loc": 0x50}, + {"name": "24c64", "bus": 107, "loc": 0x50}, + # psu + {"name": "24c02", "bus": 83, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 83, "loc": 0x58}, + {"name": "24c02", "bus": 84, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 84, "loc": 0x58}, + {"name": "24c02", "bus": 86, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 86, "loc": 0x58}, + {"name": "24c02", "bus": 85, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 85, "loc": 0x58}, + # temp + {"name": "lm75", "bus": 79, "loc": 0x4b}, + {"name": "lm75", "bus": 93, "loc": 0x48}, + {"name": "lm75", "bus": 94, "loc": 0x49}, + {"name": "lm75", "bus": 102, "loc": 0x48}, + {"name": "lm75", "bus": 103, "loc": 0x49}, + {"name": "lm75", "bus": 117, "loc": 0x4b}, + {"name": "lm75", "bus": 118, "loc": 0x4f}, + {"name": "tmp411", "bus": 119, "loc": 0x4c}, + {"name": "tmp411", "bus": 120, "loc": 0x4c}, + {"name": "lm75", "bus": 198, "loc": 0x4b}, + #dcdc + {"name": "ucd90160", "bus": 77, "loc": 0x5b}, + {"name": "tps53688", "bus": 78, "loc": 0x67}, + {"name": "tps53688", "bus": 78, "loc": 0x6c}, + {"name": "ina3221", "bus": 78, "loc": 0x43}, + {"name": "ucd90160", "bus": 128, "loc": 0x5b}, + {"name": "ucd90160", "bus": 129, "loc": 0x5b}, + {"name": "ucd90160", "bus": 130, "loc": 0x5b}, + {"name": "tps53688", "bus": 131, "loc": 0x67}, + #avs + {"name": "wb_xdpe132g5c", "bus": 126, "loc": 0x10}, +] + +OPTOE = [ + {"name": "optoe3", "startbus": 133, "endbus": 196}, +] + +REBOOT_CTRL_PARAM = { + "cpu": {"io_addr": 0x920, "rst_val": 0xfe, "rst_delay": 0, "gettype": "io"}, + "mac": {"bus": 109, "loc": 0x1d, "offset": 0x11, "rst_val": 0xfd, "rst_delay": 0, "gettype": "i2c"}, + "phy": {"io_addr": 0x921, "rst_val": 0xef, "rst_delay": 1, "unlock_rst_val": 0xff, "unlock_rst_delay": 1, "gettype": "io"}, + "power": {"io_addr": 0x923, "rst_val": 0x01, "rst_delay": 0, "gettype": "io"}, +} + +# INIT_PARAM_PRE = [ +# {"loc": "126-0010/avs_vout_max", "value": "900900"}, +# {"loc": "126-0010/avs_vout_min", "value": "809600"}, +# ] + +INIT_PARAM = [] + +INIT_COMMAND_PRE = [ + # sfp power enable + "dfd_debug io_wr 0x939 0x01", + "i2cset -f -y 109 0x1d 0x73 0xff", + "i2cset -f -y 110 0x2d 0x79 0xff", + "i2cset -f -y 110 0x2d 0x7a 0xff", + "i2cset -f -y 110 0x2d 0x7b 0xff", + "i2cset -f -y 111 0x3d 0x76 0xff", + "i2cset -f -y 111 0x3d 0x77 0xff", + "i2cset -f -y 112 0x4d 0x79 0xff", + "i2cset -f -y 112 0x4d 0x7a 0xff", + "i2cset -f -y 112 0x4d 0x7b 0xff", + # enable tty_console monitor + "dfd_debug io_wr 0x966 0x01", +] + +INIT_COMMAND = [ + # enable led + "i2cset -f -y 109 0x1d 0xc4 0x1", + "i2cset -f -y 110 0x2d 0xcc 0x1", + "i2cset -f -y 111 0x3d 0xc8 0x1", + "i2cset -f -y 112 0x4d 0xc9 0x1", + + # port led off + #MAC CPLD_U14 register: + #port 50, 49, 54, 53, 58, 57, 62, 61 + "i2cset -f -y 109 0x1d 0xc0 0xff", + "i2cset -f -y 109 0x1d 0xc1 0xff", + "i2cset -f -y 109 0x1d 0xc2 0xff", + "i2cset -f -y 109 0x1d 0xc3 0xff", + + #MAC CPLD_U14 register: + #port 2, 1, 6, 5, 10, 9, 14, 13, 18, 17, 22, 21, 26, 25, 30, 29, 34, 33, 37, 38, 42, 41, 46, 45 + "i2cset -f -y 110 0x2d 0xc0 0xff", + "i2cset -f -y 110 0x2d 0xc1 0xff", + "i2cset -f -y 110 0x2d 0xc2 0xff", + "i2cset -f -y 110 0x2d 0xc3 0xff", + "i2cset -f -y 110 0x2d 0xc4 0xff", + "i2cset -f -y 110 0x2d 0xc5 0xff", + "i2cset -f -y 110 0x2d 0xc6 0xff", + "i2cset -f -y 110 0x2d 0xc7 0xff", + "i2cset -f -y 110 0x2d 0xc8 0xff", + "i2cset -f -y 110 0x2d 0xc9 0xff", + "i2cset -f -y 110 0x2d 0xca 0xff", + "i2cset -f -y 110 0x2d 0xcb 0xff", + + #PORT CPLD_U5 register: + #port:4, 3, 8, 7, 12, 11, 16, 15, 23, 20, 27, 24, 31, 28, 32 + "i2cset -f -y 111 0x3d 0xc0 0xff", + "i2cset -f -y 111 0x3d 0xc1 0xff", + "i2cset -f -y 111 0x3d 0xc2 0xff", + "i2cset -f -y 111 0x3d 0xc3 0xff", + "i2cset -f -y 111 0x3d 0xc4 0xff", + "i2cset -f -y 111 0x3d 0xc5 0xff", + "i2cset -f -y 111 0x3d 0xc6 0xff", + "i2cset -f -y 111 0x3d 0xc7 0xff", + + #PORT CPLD_U9 register + #port: 35, 19, 39, 36, 43, 40, 47, 44, 51, 48, 55, 52, 59, 56, 63, 60, 64 + "i2cset -f -y 112 0x4d 0xc0 0xff", + "i2cset -f -y 112 0x4d 0xc1 0xff", + "i2cset -f -y 112 0x4d 0xc2 0xff", + "i2cset -f -y 112 0x4d 0xc3 0xff", + "i2cset -f -y 112 0x4d 0xc4 0xff", + "i2cset -f -y 112 0x4d 0xc5 0xff", + "i2cset -f -y 112 0x4d 0xc6 0xff", + "i2cset -f -y 112 0x4d 0xc7 0xff", + "i2cset -f -y 112 0x4d 0xc8 0xff", + "sleep 0.5", + + #MAC CPLD_U14 register: + #port 50, 49, 54, 53, 58, 57, 62, 61 + "i2cset -f -y 109 0x1d 0xc0 0x0", + "i2cset -f -y 109 0x1d 0xc1 0x0", + "i2cset -f -y 109 0x1d 0xc2 0x0", + "i2cset -f -y 109 0x1d 0xc3 0x0", + + #MAC CPLD_U14 register: + #port 2, 1, 6, 5, 10, 9, 14, 13, 18, 17, 22, 21, 26, 25, 30, 29, 34, 33, 37, 38, 42, 41, 46, 45 + "i2cset -f -y 110 0x2d 0xc0 0x0", + "i2cset -f -y 110 0x2d 0xc1 0x0", + "i2cset -f -y 110 0x2d 0xc2 0x0", + "i2cset -f -y 110 0x2d 0xc3 0x0", + "i2cset -f -y 110 0x2d 0xc4 0x0", + "i2cset -f -y 110 0x2d 0xc5 0x0", + "i2cset -f -y 110 0x2d 0xc6 0x0", + "i2cset -f -y 110 0x2d 0xc7 0x0", + "i2cset -f -y 110 0x2d 0xc8 0x0", + "i2cset -f -y 110 0x2d 0xc9 0x0", + "i2cset -f -y 110 0x2d 0xca 0x0", + "i2cset -f -y 110 0x2d 0xcb 0x0", + + #PORT CPLD_U5 register + #port:4, 3, 8, 7, 12, 11, 16, 15, 23, 20, 27, 24, 31, 28, 32 + "i2cset -f -y 111 0x3d 0xc0 0x0", + "i2cset -f -y 111 0x3d 0xc1 0x0", + "i2cset -f -y 111 0x3d 0xc2 0x0", + "i2cset -f -y 111 0x3d 0xc3 0x0", + "i2cset -f -y 111 0x3d 0xc4 0x0", + "i2cset -f -y 111 0x3d 0xc5 0x0", + "i2cset -f -y 111 0x3d 0xc6 0x0", + "i2cset -f -y 111 0x3d 0xc7 0x0", + + #PORT CPLD_U9 register + #port: 35, 19, 39, 36, 43, 40, 47, 44, 51, 48, 55, 52, 59, 56, 63, 60, 64 + "i2cset -f -y 112 0x4d 0xc0 0x0", + "i2cset -f -y 112 0x4d 0xc1 0x0", + "i2cset -f -y 112 0x4d 0xc2 0x0", + "i2cset -f -y 112 0x4d 0xc3 0x0", + "i2cset -f -y 112 0x4d 0xc4 0x0", + "i2cset -f -y 112 0x4d 0xc5 0x0", + "i2cset -f -y 112 0x4d 0xc6 0x0", + "i2cset -f -y 112 0x4d 0xc7 0x0", + "i2cset -f -y 112 0x4d 0xc8 0x0", + ] + +WARM_UPGRADE_PARAM = { + "slot0": { + "VME": { + "chain1": [ + {"name": "BASE_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/base_cpld_u55_transf_header.vme", + "init_cmd": [ + {"bus": 109, "loc": 0x1d, "offset": 0x1c, "value": 0xff, "gettype": "i2c"}, + {"io_addr": 0x916, "value": 0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"io_addr": 0x918, "value": None, "gettype": "io"}, + {"io_addr": 0x929, "value": None, "gettype": "io"}, + {"io_addr": 0x940, "value": None, "gettype": "io"}, + {"io_addr": 0x941, "value": None, "gettype": "io"}, + {"io_addr": 0x942, "value": None, "gettype": "io"}, + {"io_addr": 0x943, "value": None, "gettype": "io"}, + {"io_addr": 0x944, "value": None, "gettype": "io"}, + {"io_addr": 0x945, "value": None, "gettype": "io"}, + {"io_addr": 0x946, "value": None, "gettype": "io"}, + {"io_addr": 0x948, "value": None, "gettype": "io"}, + {"io_addr": 0x949, "value": None, "gettype": "io"}, + {"io_addr": 0x94a, "value": None, "gettype": "io"}, + {"io_addr": 0x953, "value": None, "gettype": "io"}, + {"io_addr": 0x954, "value": None, "gettype": "io"}, + {"io_addr": 0x955, "value": None, "gettype": "io"}, + {"io_addr": 0x958, "value": None, "gettype": "io"}, + {"io_addr": 0x959, "value": None, "gettype": "io"}, + {"io_addr": 0x960, "value": None, "gettype": "io"}, + {"io_addr": 0x961, "value": None, "gettype": "io"}, + {"io_addr": 0x962, "value": None, "gettype": "io"}, + {"io_addr": 0x963, "value": None, "gettype": "io"}, + ], + "after_upgrade_delay": 30, + "after_upgrade_delay_timeout": 60, + "refresh_finish_flag_check": {"io_addr": 0x91d, "value": 0x5a, "gettype": "io"}, + "access_check_reg": {"io_addr": 0x955, "value": 0xaa, "gettype": "io"}, + "finish_cmd": [ + {"bus": 109, "loc": 0x1d, "offset": 0x1c, "value": 0, "gettype": "i2c"}, + ], + }, + ], + + "chain2": [ + {"name": "FAN_CPLD_1", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/ufan_cpld_u13_transf_header.vme", + "rw_recover_reg": [], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"bus": 92, "loc": 0x0d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + }, + ], + + "chain3": [ + {"name": "FAN_CPLD_2", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/dfan_cpld_u13_transf_header.vme", + "rw_recover_reg": [], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"bus": 101, "loc": 0x0d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + }, + ], + + "chain4": [ + {"name": "MAC_CPLD_1", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cpld_u14_transf_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"bus": 110, "loc": 0x2d, "offset": 0x13, "value": 0xff, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x18, "value": 0x00, "gettype": "i2c"}, + ], + "rw_recover_reg": [ + {"bus": 109, "loc": 0x1d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x12, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x13, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x16, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x18, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x1a, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x1b, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x1c, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x21, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x23, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x51, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x52, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x56, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x57, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x58, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x59, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x5a, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x70, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x72, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0x73, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xaa, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xc0, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xc1, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xc2, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xc3, "value": None, "gettype": "i2c"}, + {"bus": 109, "loc": 0x1d, "offset": 0xc4, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 109, "loc": 0x1d, "offset": 0x18, "value": 0x01, "gettype": "i2c"}, + "access_check_reg": {"bus": 109, "loc": 0x1d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"bus": 110, "loc": 0x2d, "offset": 0x13, "value": 0, "gettype": "i2c"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + + {"name": "MAC_CPLD_2", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cpld_u30_transf_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"bus": 109, "loc": 0x1d, "offset": 0x1b, "value": 0xff, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x11, "value": 0x00, "gettype": "i2c"}, + ], + "rw_recover_reg": [ + {"bus": 110, "loc": 0x2d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x13, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x52, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x53, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x56, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x57, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x58, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x59, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x5a, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x5b, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x5c, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x5d, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x5e, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x70, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x71, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x72, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x76, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x77, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x78, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x79, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x7a, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0x7b, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xaa, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc0, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc1, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc2, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc3, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc4, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc5, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc6, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc7, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc8, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xc9, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xca, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xcb, "value": None, "gettype": "i2c"}, + {"bus": 110, "loc": 0x2d, "offset": 0xcc, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 110, "loc": 0x2d, "offset": 0x11, "value": 0x01, "gettype": "i2c"}, + "access_check_reg": {"bus": 110, "loc": 0x2d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"bus": 109, "loc": 0x1d, "offset": 0x1b, "value": 0, "gettype": "i2c"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ], + + "chain5": [ + {"name": "PORT_CPLD_1", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/port_cpld_u5_transf_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"bus": 112, "loc": 0x4d, "offset": 0x13, "value": 0xff, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x18, "value": 0x00, "gettype": "i2c"}, + ], + "rw_recover_reg": [ + {"bus": 111, "loc": 0x3d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x13, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x14, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x15, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x16, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x18, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x1a, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x1b, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x21, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x51, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x53, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x56, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x57, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x58, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x59, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x5a, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x5b, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x5c, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x70, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x71, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x74, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x75, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x76, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0x77, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xaa, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc0, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc1, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc2, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc3, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc4, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc5, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc6, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc7, "value": None, "gettype": "i2c"}, + {"bus": 111, "loc": 0x3d, "offset": 0xc8, "value": None, "gettype": "i2c"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 111, "loc": 0x3d, "offset": 0x18, "value": 0x01, "gettype": "i2c"}, + "access_check_reg": {"bus": 111, "loc": 0x3d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"bus": 112, "loc": 0x4d, "offset": 0x13, "value": 0, "gettype": "i2c"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + + {"name": "PORT_CPLD_2", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/port_cpld_u9_transf_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"bus": 111, "loc": 0x3d, "offset": 0x1b, "value": 0xff, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x11, "value": 0x00, "gettype": "i2c"}, + ], + "rw_recover_reg": [ + {"bus": 112, "loc": 0x4d, "offset": 0x11, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x13, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x50, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x52, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x53, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x54, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x55, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x56, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x57, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x58, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x59, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x5a, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x5b, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x5c, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x5d, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x5e, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x70, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x71, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x72, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x76, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x77, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x78, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x79, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x7a, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0x7b, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xaa, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc0, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc1, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc2, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc3, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc4, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc5, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc6, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc7, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc8, "value": None, "gettype": "i2c"}, + {"bus": 112, "loc": 0x4d, "offset": 0xc9, "value": None, "gettype": "i2c"}, + + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"bus": 112, "loc": 0x4d, "offset": 0x11, "value": 0x01, "gettype": "i2c"}, + "access_check_reg": {"bus": 112, "loc": 0x4d, "offset": 0xaa, "value": 0x55, "gettype": "i2c"}, + "finish_cmd": [ + {"bus": 111, "loc": 0x3d, "offset": 0x1b, "value": 0, "gettype": "i2c"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ], + + "chain6": [ + {"name": "CPU_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/refresh_cpu_cpld_header.vme", + "init_cmd": [ + {"cmd": "echo 7 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio7/direction", "gettype": "cmd"}, + {"io_addr": 0x7cc, "value": 0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"io_addr": 0x705, "value": None, "gettype": "io"}, + {"io_addr": 0x713, "value": None, "gettype": "io"}, + {"io_addr": 0x715, "value": None, "gettype": "io"}, + {"io_addr": 0x721, "value": None, "gettype": "io"}, + {"io_addr": 0x722, "value": None, "gettype": "io"}, + {"io_addr": 0x772, "value": None, "gettype": "io"}, + {"io_addr": 0x774, "value": None, "gettype": "io"}, + {"io_addr": 0x776, "value": None, "gettype": "io"}, + {"io_addr": 0x778, "value": None, "gettype": "io"}, + {"io_addr": 0x77a, "value": None, "gettype": "io"}, + {"io_addr": 0x77c, "value": None, "gettype": "io"}, + {"io_addr": 0x780, "value": None, "gettype": "io"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"io_addr": 0x705, "value": 0x5a, "gettype": "io"}, + "finish_cmd": [ + {"io_addr": 0x7cc, "value": 0xff, "gettype": "io"}, + {"cmd": "echo 0 > /sys/class/gpio/gpio7/value", "gettype": "cmd"}, + {"cmd": "echo 7 > /sys/class/gpio/unexport", "gettype": "cmd"}, + ], + }, + ], + }, + + "MTD": { + "chain1": [ + {"name": "MAC_FPGA", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"cmd": "setpci -s 00:03.2 0xA0.W=0x0050", "gettype": "cmd"}, # link_disable + {"io_addr": 0x948, "value": 0x0, "gettype": "io"}, + {"bus": 58, "loc": 0x1c, "offset": 0x23, "value": 0x00, "gettype": "i2c"}, + {"bus": 58, "loc": 0x1c, "offset": 0x23, "value": 0x01, "gettype": "i2c", "delay": 0.1}, + ], + "after_upgrade_delay": 10, + "after_upgrade_delay_timeout": 180, + "refresh_finish_flag_check": {"bus": 58, "loc": 0x1c, "offset": 0x23, "value": 0x07, "gettype": "i2c"}, + "access_check_reg": { + "path": "/dev/fpga0", "offset": 0x8, "value": [0x55, 0xaa, 0x5a, 0xa5], "read_len":4, "gettype":"devfile", + "polling_cmd":[ + {"cmd": "setpci -s 00:03.2 0xA0.W=0x0060", "gettype": "cmd"}, # retrain_link + {"cmd": "rmmod wb_fpga_pcie", "gettype": "cmd"}, + {"cmd": "modprobe wb_fpga_pcie", "gettype": "cmd", "delay": 0.1}, + ], + "polling_delay": 0.1 + }, + "finish_cmd": [ + {"cmd": "setpci -s 00:03.2 0xA0.W=0x0060", "gettype": "cmd"}, # retrain_link + {"io_addr": 0x948, "value": 0x1, "gettype": "io"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ], + "chain2": [ + {"name": "PORT_FPGA", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"io_addr": 0x948, "value": 0x0, "gettype": "io"}, + {"bus": 66, "loc": 0x3c, "offset": 0x21, "value": 0x00, "gettype": "i2c"}, + {"bus": 66, "loc": 0x3c, "offset": 0x21, "value": 0x01, "gettype": "i2c", "delay": 0.1}, + ], + "after_upgrade_delay": 10, + "after_upgrade_delay_timeout": 180, + "refresh_finish_flag_check": {"bus": 66, "loc": 0x3c, "offset": 0x21, "value": 0x07, "gettype": "i2c"}, + "access_check_reg": { + "path": "/dev/fpga1", "offset": 0x8, "value": [0x55, 0xaa, 0x5a, 0xa5], "read_len":4, "gettype":"devfile", + "polling_cmd":[ + {"cmd": "rmmod wb_fpga_pcie", "gettype": "cmd"}, + {"cmd": "modprobe wb_fpga_pcie", "gettype": "cmd", "delay": 0.1}, + ], + "polling_delay": 0.1 + }, + "finish_cmd": [ + {"io_addr": 0x948, "value": 0x1, "gettype": "io"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ], + }, + }, + "stop_services_cmd": [ + "/usr/local/bin/platform_process.py stop", + ], + "start_services_cmd": [ + "/usr/local/bin/platform_process.py start", + ], +} + +UPGRADE_SUMMARY = { + "devtype": 0x20000055, + + "slot0": { + "subtype": 0, + "VME": { + "chain1": { + "name": "BASE_CPLD", + "is_support_warm_upg": 1, + }, + "chain2": { + "name": "FANA_CPLD", + "is_support_warm_upg": 1, + }, + "chain3": { + "name": "FANB_CPLD", + "is_support_warm_upg": 1, + }, + "chain4": { + "name": "MAC_CPLD", + "is_support_warm_upg": 1, + }, + "chain5": { + "name": "PORT_CPLD", + "is_support_warm_upg": 1, + }, + "chain6": { + "name": "CPU_CPLD", + "is_support_warm_upg": 1, + }, + }, + + "MTD": { + "chain1": { + "name": "MAC_FPGA", + "is_support_warm_upg": 1, + "init_cmd": [ + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=65 miso=32 mosi=67 bus=0", "gettype": "cmd"}, + {"cmd": "echo 50 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio50/direction", "gettype": "cmd", "delay": 0.1}, + {"cmd": "echo 48 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio48/direction", "gettype": "cmd", "delay": 0.1}, + {"io_addr": 0x918, "value": 0x2, "gettype": "io"}, + {"io_addr": 0x946, "value": 0xfe, "gettype": "io"}, + {"cmd": "modprobe wb_spi_nor_device spi_bus_num=0", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + {"cmd": "rmmod wb_spi_nor_device", "gettype": "cmd"}, + {"io_addr": 0x946, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x918, "value": 0x0, "gettype": "io"}, + {"cmd": "echo 0 > /sys/class/gpio/gpio48/value", "gettype": "cmd"}, + {"cmd": "echo 48 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + {"cmd": "echo 0 > /sys/class/gpio/gpio50/value", "gettype": "cmd"}, + {"cmd": "echo 50 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + ], + }, + "chain2": { + "name": "PORT_FPGA", + "is_support_warm_upg": 1, + "init_cmd": [ + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=65 miso=32 mosi=67 bus=0", "gettype": "cmd"}, + {"cmd": "echo 50 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio50/direction", "gettype": "cmd", "delay": 0.1}, + {"cmd": "echo 48 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio48/direction", "gettype": "cmd", "delay": 0.1}, + {"io_addr": 0x918, "value": 0x3, "gettype": "io"}, + {"io_addr": 0x946, "value": 0xfb, "gettype": "io"}, + {"cmd": "modprobe wb_spi_nor_device spi_bus_num=0", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + {"cmd": "rmmod wb_spi_nor_device", "gettype": "cmd"}, + {"io_addr": 0x946, "value": 0xff, "gettype": "io"}, + {"io_addr": 0x918, "value": 0x0, "gettype": "io"}, + {"cmd": "echo 0 > /sys/class/gpio/gpio48/value", "gettype": "cmd"}, + {"cmd": "echo 48 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + {"cmd": "echo 0 > /sys/class/gpio/gpio50/value", "gettype": "cmd"}, + {"cmd": "echo 50 > /sys/class/gpio/unexport", "gettype": "cmd", "delay": 0.1}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + ], + }, + "chain4": { + "name": "BIOS", + "is_support_warm_upg": 0, + "filesizecheck": 10240, # bios check file size, Unit: K + "init_cmd": [ + {"io_addr": 0x722, "value": 0x02, "gettype": "io"}, + {"cmd": "modprobe mtd", "gettype": "cmd"}, + {"cmd": "modprobe spi_nor", "gettype": "cmd"}, + {"cmd": "modprobe ofpart", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi writeable=1", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi_platform writeable=1", "gettype": "cmd"}, + ], + "finish_cmd": [ + {"cmd": "rmmod intel_spi_platform", "gettype": "cmd"}, + {"cmd": "rmmod intel_spi", "gettype": "cmd"}, + {"cmd": "rmmod ofpart", "gettype": "cmd"}, + {"cmd": "rmmod spi_nor", "gettype": "cmd"}, + {"cmd": "rmmod mtd", "gettype": "cmd"}, + ], + }, + }, + + "SYSFS": { + "chain3": { + "name": "BCM5387", + "is_support_warm_upg": 0, + "init_cmd": [ + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=65 miso=32 mosi=67 bus=0", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_93xx46 spi_bus_num=0 spi_cs_gpio=6", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + {"cmd": "rmmod wb_spi_93xx46", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + ], + }, + }, + + "TEST": { + "fpga": [ + {"chain": 1, "file": "/etc/.upgrade_test/fpga_test_0_1_header.bin", "display_name": "MAC_FPGA"}, + {"chain": 2, "file": "/etc/.upgrade_test/fpga_test_0_2_header.bin", "display_name": "PORT_FPGA"}, + ], + "cpld": [ + {"chain": 1, "file": "/etc/.upgrade_test/cpld_test_0_1_header.vme", "display_name": "BASE_CPLD"}, + {"chain": 2, "file": "/etc/.upgrade_test/cpld_test_0_2_header.vme", "display_name": "FANA_CPLD"}, + {"chain": 3, "file": "/etc/.upgrade_test/cpld_test_0_3_header.vme", "display_name": "FANB_CPLD"}, + {"chain": 4, "file": "/etc/.upgrade_test/cpld_test_0_4_header.vme", "display_name": "MAC_CPLD"}, + {"chain": 5, "file": "/etc/.upgrade_test/cpld_test_0_5_header.vme", "display_name": "PORT_CPLD"}, + {"chain": 6, "file": "/etc/.upgrade_test/cpld_test_0_6_header.vme", "display_name": "CPU_CPLD"}, + ], + }, + }, + + "BMC": { + "name": "BMC", + "init_cmd": [ + {"cmd": "ipmitool raw 0x32 0x03 0x02", "gettype": "cmd", "ignore_result": 1}, + ], + "finish_cmd": [], + }, +} + +PLATFORM_E2_CONF = { + "fan": [ + {"name": "fan1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/95-0050/eeprom"}, + {"name": "fan2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/104-0050/eeprom"}, + {"name": "fan3", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/96-0050/eeprom"}, + {"name": "fan4", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/105-0050/eeprom"}, + {"name": "fan5", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/97-0050/eeprom"}, + {"name": "fan6", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/106-0050/eeprom"}, + {"name": "fan7", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/98-0050/eeprom"}, + {"name": "fan8", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/107-0050/eeprom"}, + ], + "psu": [ + {"name": "psu1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/83-0050/eeprom"}, + {"name": "psu2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/84-0050/eeprom"}, + {"name": "psu3", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/86-0050/eeprom"}, + {"name": "psu4", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/85-0050/eeprom"}, + ], + "syseeprom": [ + {"name": "syseeprom", "e2_type": "onie_tlv", "e2_path": "/sys/bus/i2c/devices/1-0056/eeprom"}, + ], +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_port_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_port_config.py new file mode 100755 index 000000000000..5ed9537f3c16 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/config/x86_64_micas_m2_w6930_64qc_r0_port_config.py @@ -0,0 +1,7 @@ +#!/usr/bin/python3 +# -*- coding: UTF-8 -*- + +PLATFORM_INTF_OPTOE = { + "port_num": 64, + "optoe_start_bus": 133, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_device.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_device.py new file mode 100755 index 000000000000..36d6cbd0f109 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_device.py @@ -0,0 +1,1758 @@ +#!/usr/bin/python3 + +psu_fan_airflow = { + "intake": ['DPS-1300AB-6 S', 'GW-CRPS1300D'], + "exhaust": [] +} + +fanairflow = { + "intake": ['M2EFAN II-F'], + "exhaust": [], +} + +psu_display_name = { + "PA1300I-F": ['GW-CRPS1300D', 'DPS-1300AB-6 S'], +} + +psutypedecode = { + 0x00: 'N/A', + 0x01: 'AC', + 0x02: 'DC', +} + + +class Unit: + Temperature = "C" + Voltage = "V" + Current = "A" + Power = "W" + Speed = "RPM" + + +class threshold: + PSU_TEMP_MIN = -10 * 1000 + PSU_TEMP_MAX = 60 * 1000 + + PSU_FAN_SPEED_MIN = 2000 + PSU_FAN_SPEED_MAX = 28000 + + PSU_OUTPUT_VOLTAGE_MIN = 11 * 1000 + PSU_OUTPUT_VOLTAGE_MAX = 14 * 1000 + + PSU_AC_INPUT_VOLTAGE_MIN = 200 * 1000 + PSU_AC_INPUT_VOLTAGE_MAX = 240 * 1000 + + PSU_DC_INPUT_VOLTAGE_MIN = 190 * 1000 + PSU_DC_INPUT_VOLTAGE_MAX = 290 * 1000 + + ERR_VALUE = -9999999 + + PSU_OUTPUT_POWER_MIN = 10 * 1000 * 1000 + PSU_OUTPUT_POWER_MAX = 1300 * 1000 * 1000 + + PSU_INPUT_POWER_MIN = 10 * 1000 * 1000 + PSU_INPUT_POWER_MAX = 1444 * 1000 * 1000 + + PSU_OUTPUT_CURRENT_MIN = 2 * 1000 + PSU_OUTPUT_CURRENT_MAX = 107 * 1000 + + PSU_INPUT_CURRENT_MIN = 0.2 * 1000 + PSU_INPUT_CURRENT_MAX = 7 * 1000 + + FRONT_FAN_SPEED_MAX = 14200 + REAR_FAN_SPEED_MAX = 11200 + FAN_SPEED_MIN = 2000 + + +devices = { + "onie_e2": [ + { + "name": "ONIE_E2", + "e2loc": {"loc": "/sys/bus/i2c/devices/1-0056/eeprom", "way": "sysfs"}, + "airflow": "intake" + }, + ], + "psus": [ + { + "e2loc": {"loc": "/sys/bus/i2c/devices/83-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 83, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU1", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 83, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 83, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 83, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 83, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 83, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/84-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 84, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU2", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 84, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 84, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 84, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 84, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 84, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/86-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 86, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu3/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU3", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 86, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 86, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 86, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 86, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 86, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/85-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 85, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/wb_plat/psu/psu4/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU4", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 85, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 85, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": threshold.PSU_FAN_SPEED_MAX, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 85, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 85, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 85, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + } + ], + "temps": [ + { + "name": "BOARD_TEMP", + "temp_id": "TEMP1", + "api_name": "Board", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/118-004f/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 70000, + "Max": 75000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "CPU_TEMP", + "temp_id": "TEMP2", + "api_name": "CPU", + "Temperature": { + "value": {"loc": "/sys/bus/platform/devices/coretemp.0/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -15000, + "Low": 10000, + "High": 98000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "INLET_TEMP", + "temp_id": "TEMP3", + "api_name": "Inlet", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/79-004b/hwmon/*/temp1_input", "way": "sysfs"}, + ], + "Min": -30000, + "Low": 0, + "High": 40000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "OUTLET_TEMP", + "temp_id": "TEMP4", + "api_name": "Outlet", + "Temperature": { + "value": [ + {"loc": "/sys/bus/i2c/devices/93-0048/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/94-0049/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/102-0048/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + {"loc": "/sys/bus/i2c/devices/103-0049/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + ], + "Min": -30000, + "Low": 0, + "High": 70000, + "Max": 80000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SWITCH_TEMP", + "temp_id": "TEMP5", + "api_name": "ASIC_TEMP", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/122-0044/hwmon/hwmon*/temp99_input", "way": "sysfs"}, + "Min": -30000, + "Low": 10000, + "High": 100000, + "Max": 105000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU1_TEMP", + "temp_id": "TEMP6", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-83/83-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU2_TEMP", + "temp_id": "TEMP7", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-84/84-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU3_TEMP", + "temp_id": "TEMP8", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-86/86-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU4_TEMP", + "temp_id": "TEMP9", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-85/85-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SFF_TEMP", + "Temperature": { + "value": {"loc": "/tmp/highest_sff_temp", "way": "sysfs", "flock_path": "/tmp/highest_sff_temp"}, + "Min": -15000, + "Low": 0, + "High": 80000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + ], + "leds": [ + { + "name": "FRONT_SYS_LED", + "led_type": "SYS_LED", + "led": {"loc": "/dev/cpld4", "offset": 0x08, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x01, "red": 0x02, "amber": 0x03, "default": 0x01, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + }, + { + "name": "FRONT_PSU_LED", + "led_type": "PSU_LED", + "led": {"loc": "/dev/cpld4", "offset": 0x09, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + }, + { + "name": "FRONT_FAN_LED", + "led_type": "FAN_LED", + "led": {"loc": "/dev/cpld4", "offset": 0x0a, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + }, + ], + "fans": [ + { + "name": "FAN1", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-95/95-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 92, "addr": 0x0d, "offset": 0x3b, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x14, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x14, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan1/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN2", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-104/104-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 101, "addr": 0x0d, "offset": 0x3b, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x14, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x14, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan2/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN3", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-96/96-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan3/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 92, "addr": 0x0d, "offset": 0x3c, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x15, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x15, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan3/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN4", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-105/105-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan4/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 101, "addr": 0x0d, "offset": 0x3c, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x15, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x15, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan4/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN5", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-97/97-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan5/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 92, "addr": 0x0d, "offset": 0x3d, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x16, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x16, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan5/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan5/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN6", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-106/106-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan6/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 101, "addr": 0x0d, "offset": 0x3d, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x16, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x16, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan6/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan6/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN7", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-98/98-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan7/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 92, "addr": 0x0d, "offset": 0x3e, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x17, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan7/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan7/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan7/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 92, "addr": 0x0d, "offset": 0x17, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan7/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan7/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan7/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN8", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-107/107-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/wb_plat/fan/fan8/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"bus": 101, "addr": 0x0d, "offset": 0x3e, "way": "i2c"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "yellow": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0xff + }, + "PowerMax": 80.64, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x17, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan8/motor0/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan8/motor0/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan8/motor0/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"bus": 101, "addr": 0x0d, "offset": 0x17, "way": "i2c"}, + "Running": {"loc": "/sys/wb_plat/fan/fan8/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/wb_plat/fan/fan8/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/wb_plat/fan/fan8/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + ], + "cplds": [ + { + "name": "CPU_CPLD", + "cpld_id": "CPLD1", + "VersionFile": {"loc": "/dev/cpld0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for system power", + "slot": 0, + "warm": 1, + }, + { + "name": "CONNECT_CPLD", + "cpld_id": "CPLD2", + "VersionFile": {"loc": "/dev/cpld1", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_CPLDA", + "cpld_id": "CPLD3", + "VersionFile": {"loc": "/dev/cpld4", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_CPLDB", + "cpld_id": "CPLD4", + "VersionFile": {"loc": "/dev/cpld5", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "PORT_CPLDA", + "cpld_id": "CPLD5", + "VersionFile": {"loc": "/dev/cpld6", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "PORT_CPLDB", + "cpld_id": "CPLD6", + "VersionFile": {"loc": "/dev/cpld7", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "FAN_CPLDA", + "cpld_id": "CPLD7", + "VersionFile": {"loc": "/dev/cpld8", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for fan modules", + "slot": 0, + "warm": 1, + }, + { + "name": "FAN_CPLDB", + "cpld_id": "CPLD8", + "VersionFile": {"loc": "/dev/cpld9", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for fan modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_FPGA", + "cpld_id": "CPLD9", + "VersionFile": {"loc": "/dev/fpga0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "format": "little_endian", + "warm": 1, + }, + { + "name": "PORT_FPGA", + "cpld_id": "CPLD10", + "VersionFile": {"loc": "/dev/fpga1", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "format": "little_endian", + "warm": 1, + }, + { + "name": "BIOS", + "cpld_id": "CPLD11", + "VersionFile": {"cmd": "dmidecode -s bios-version", "way": "cmd"}, + "desc": "Performs initialization of hardware components during booting", + "slot": 0, + "type": "str", + "warm": 0, + }, + ], + "dcdc": [ + { + "name": "MAC_VDD3.3V_standby", + "dcdc_id": "DCDC1", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD12V_A", + "dcdc_id": "DCDC2", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 10200, + "Max": 13800, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD1.0V_FPGA", + "dcdc_id": "DCDC3", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 850, + "Max": 1150, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD1.8V_FPGA", + "dcdc_id": "DCDC4", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1530, + "Max": 2070, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD1.2V_FPGA", + "dcdc_id": "DCDC5", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1020, + "Max": 1380, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD3.3V", + "dcdc_id": "DCDC6", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD5V_CLK_MCU", + "dcdc_id": "DCDC7", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 4250, + "Max": 5750, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD3.3V_MAC", + "dcdc_id": "DCDC8", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in8_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDDO1.8V", + "dcdc_id": "DCDC9", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in9_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1530, + "Max": 2070, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDDO1.2V", + "dcdc_id": "DCDC10", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in10_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1020, + "Max": 1380, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD_CORE", + "dcdc_id": "DCDC11", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in11_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 680, + "Max": 980, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD3.3_CLK", + "dcdc_id": "DCDC12", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in12_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD_ANALOG", + "dcdc_id": "DCDC13", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in13_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 655, + "Max": 885, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD1.2V_MAC_A", + "dcdc_id": "DCDC14", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in14_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1020, + "Max": 1380, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_AVDD1.8V", + "dcdc_id": "DCDC15", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in15_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1530, + "Max": 2070, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD_ANALOG2", + "dcdc_id": "DCDC16", + "value": { + "loc": "/sys/bus/i2c/devices/128-005b/hwmon/hwmon*/in16_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 655, + "Max": 885, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD12V_B", + "dcdc_id": "DCDC17", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 10200, + "Max": 13800, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD5.0V", + "dcdc_id": "DCDC18", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 4250, + "Max": 5750, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_A", + "dcdc_id": "DCDC19", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_B", + "dcdc_id": "DCDC20", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_C", + "dcdc_id": "DCDC21", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_D", + "dcdc_id": "DCDC22", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_E", + "dcdc_id": "DCDC23", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_QSFPDD_VDD3.3V_F", + "dcdc_id": "DCDC24", + "value": { + "loc": "/sys/bus/i2c/devices/129-005b/hwmon/hwmon*/in8_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD1.0V_FPGA", + "dcdc_id": "DCDC25", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 850, + "Max": 1150, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD1.8V_FPGA", + "dcdc_id": "DCDC26", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1530, + "Max": 2070, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD1.2V_FPGA", + "dcdc_id": "DCDC27", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1020, + "Max": 1380, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD3.3V", + "dcdc_id": "DCDC28", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD12V", + "dcdc_id": "DCDC29", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 10200, + "Max": 13800, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_VDD3.3V_standby", + "dcdc_id": "DCDC30", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in6_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_A", + "dcdc_id": "DCDC31", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in7_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_B", + "dcdc_id": "DCDC32", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in8_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_C", + "dcdc_id": "DCDC33", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in9_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_D", + "dcdc_id": "DCDC34", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in10_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_E", + "dcdc_id": "DCDC35", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in11_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "PORT_QSFPDD_VDD3.3V_F", + "dcdc_id": "DCDC36", + "value": { + "loc": "/sys/bus/i2c/devices/130-005b/hwmon/hwmon*/in12_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2805, + "Max": 3795, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "MAC_VDD1.2V_MAC_B", + "dcdc_id": "DCDC37", + "value": { + "loc": "/sys/bus/i2c/devices/131-0067/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1020, + "Max": 1380, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "BASE_VDD12V", + "dcdc_id": "DCDC38", + "value": { + "loc": "/sys/bus/i2c/devices/77-005b/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 10830, + "Max": 13230, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "BASE_SW_VDD1.2V", + "dcdc_id": "DCDC39", + "value": { + "loc": "/sys/bus/i2c/devices/77-005b/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1083, + "Max": 1323, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "BASE_VDD2.5V", + "dcdc_id": "DCDC40", + "value": { + "loc": "/sys/bus/i2c/devices/77-005b/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2247, + "Max": 2745, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "BASE_VDD3.3V", + "dcdc_id": "DCDC41", + "value": { + "loc": "/sys/bus/i2c/devices/77-005b/hwmon/hwmon*/in4_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2960, + "Max": 3616, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "BASE_SSD_VDD3.3V", + "dcdc_id": "DCDC42", + "value": { + "loc": "/sys/bus/i2c/devices/77-005b/hwmon/hwmon*/in5_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2978, + "Max": 3638, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_P1V05_V", + "dcdc_id": "DCDC43", + "value": { + "loc": "/sys/bus/i2c/devices/78-0067/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 882, + "Max": 1232, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_VCCIN_V", + "dcdc_id": "DCDC44", + "value": { + "loc": "/sys/bus/i2c/devices/78-0067/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1368, + "Max": 2244, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_VCCD_V", + "dcdc_id": "DCDC45", + "value": { + "loc": "/sys/bus/i2c/devices/78-006c/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 990, + "Max": 1452, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_VCCSCSUS_V", + "dcdc_id": "DCDC46", + "value": { + "loc": "/sys/bus/i2c/devices/78-006c/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 855, + "Max": 1265, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_P5V_AUX_V", + "dcdc_id": "DCDC47", + "value": { + "loc": "/sys/bus/i2c/devices/78-0043/hwmon/hwmon*/in1_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 3852, + "Max": 6347, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_P3V3_STBY_V", + "dcdc_id": "DCDC48", + "value": { + "loc": "/sys/bus/i2c/devices/78-0043/hwmon/hwmon*/in2_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 2682, + "Max": 4004, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + { + "name": "CPU_P1V7_VCCSCFUSESUS_V", + "dcdc_id": "DCDC49", + "value": { + "loc": "/sys/bus/i2c/devices/78-0043/hwmon/hwmon*/in3_input", + "way": "sysfs", + }, + "read_times": 1, + "Min": 1377, + "Max": 2057, + "Unit": "V", + "format": "float(float(%s)/1000)", + }, + ], + "cpu": [ + { + "name": "cpu", + "CpuResetCntReg": {"loc": "/dev/cpld1", "offset": 0x10, "len": 1, "way": "devfile_ascii"}, + "reboot_cause_path": "/etc/sonic/.reboot/.previous-reboot-cause.txt" + } + ], + "sfps": { + "ver": '1.0', + "port_index_start": 0, + "port_num": 64, + "log_level": 2, + "eeprom_retry_times": 5, + "eeprom_retry_break_sec": 0.2, + "presence_cpld": { + "dev_id": { + 4: { + "offset": { + 0x71: "49-50, 53-54, 57-58, 61-62", + }, + }, + 5: { + "offset": { + 0x73: "1-2, 5-6, 9-10, 13-14", + 0x74: "17-18, 21-22, 25-26, 29-30", + 0x75: "33-34, 37-38, 41-42, 45-46", + }, + }, + 6: { + "offset": { + 0x72: "3-4, 7-8, 11-12, 15-16", + 0x73: "20, 23-24, 27-28, 31-32", + }, + }, + 7: { + "offset": { + 0x73: "19, 35-36, 39-40, 43-44, 47", + 0x74: "48, 51-52, 55-56, 59-60, 63", + 0x75: "64", + }, + }, + }, + }, + "presence_val_is_present": 0, + "eeprom_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/eeprom", + "eeprom_path_key": list(range(133, 197)), + "optoe_driver_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/dev_class", + "optoe_driver_key": list(range(133, 197)), + "reset_cpld": { + "dev_id": { + 4: { + "offset": { + 0x70: "49-50, 53-54, 57-58, 61-62", + }, + }, + 5: { + "offset": { + 0x70: "1-2, 5-6, 9-10, 13-14", + 0x71: "17-18, 21-22, 25-26, 29-30", + 0x72: "33-34, 37-38, 41-42, 45-46", + }, + }, + 6: { + "offset": { + 0x70: "3-4, 7-8, 11-12, 15-16", + 0x71: "20, 23-24, 27-28, 31-32", + }, + }, + 7: { + "offset": { + 0x70: "19, 35-36, 39-40, 43-44, 47", + 0x71: "48, 51-52, 55-56, 59-60, 63", + 0x72: "64", + }, + }, + }, + }, + "reset_val_is_reset": 0, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_monitor.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_monitor.py new file mode 100755 index 000000000000..69abf0da3fbd --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/hal-config/x86_64_micas_m2_w6930_64qc_r0_monitor.py @@ -0,0 +1,135 @@ +# coding:utf-8 + + +monitor = { + "openloop": { + "linear": { + "name": "linear", + "flag": 0, + "pwm_min": 0x80, + "pwm_max": 0xff, + "K": 11, + "tin_min": 38, + }, + "curve": { + "name": "curve", + "flag": 1, + "pwm_min": 0x80, + "pwm_max": 0xff, + "a": 0.369, + "b": -15.657, + "c": 289, + "tin_min": 25, + }, + }, + + "pid": { + "CPU_TEMP": { + "name": "CPU_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 1, + "Kd": 0.3, + "target": 80, + "value": [None, None, None], + }, + "SWITCH_TEMP": { + "name": "SWITCH_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 1, + "Kd": 0.3, + "target": 90, + "value": [None, None, None], + }, + "OUTLET_TEMP": { + "name": "OUTLET_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 65, + "value": [None, None, None], + }, + "SFF_TEMP": { + "name": "SFF_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 0.1, + "Ki": 0.4, + "Kd": 0, + "target": 60, + "value": [None, None, None], + }, + }, + + "temps_threshold": { + "SWITCH_TEMP": {"name": "SWITCH_TEMP", "warning": 100, "critical": 105, "invalid": -100000, "error": -99999}, + "INLET_TEMP": {"name": "INLET_TEMP", "warning": 40, "critical": 50, "fix": -3}, + "OUTLET_TEMP": {"name": "OUTLET_TEMP", "warning": 70, "critical": 75}, + "CPU_TEMP": {"name": "CPU_TEMP", "warning": 100, "critical": 102}, + "SFF_TEMP": {"name": "SFF_TEMP", "warning": 999, "critical": 1000, "ignore_threshold": 1, "invalid": -10000, "error": -9999}, + }, + + "fancontrol_para": { + "interval": 5, + "max_pwm": 0xff, + "min_pwm": 0x80, + "abnormal_pwm": 0xff, + "warning_pwm": 0xff, + "temp_invalid_pid_pwm": 0x80, + "temp_error_pid_pwm": 0x80, + "temp_fail_num": 3, + "check_temp_fail": [ + {"temp_name": "INLET_TEMP"}, + {"temp_name": "SWITCH_TEMP"}, + {"temp_name": "CPU_TEMP"}, + ], + "temp_warning_num": 3, # temp over warning 3 times continuously + "temp_critical_num": 3, # temp over critical 3 times continuously + "temp_warning_countdown": 60, # 5 min warning speed after not warning + "temp_critical_countdown": 60, # 5 min full speed after not critical + "rotor_error_count": 6, # fan rotor error 6 times continuously + "inlet_mac_diff": 999, + "check_crit_reboot_flag": 1, + "check_crit_reboot_num": 3, + "check_crit_sleep_time": 20, + "psu_fan_control": 1, + "psu_absent_fullspeed_num": 0xFF, + "fan_absent_fullspeed_num": 1, + "rotor_error_fullspeed_num": 1, + }, + + "ledcontrol_para": { + "interval":5, + "checkpsu": 0, # 0: sys led don't follow psu led + "checkfan": 0, # 0: sys led don't follow fan led + "psu_amber_num": 1, + "fan_amber_num": 1, + "board_sys_led": [ + {"led_name": "FRONT_SYS_LED"}, + ], + "board_psu_led": [ + {"led_name": "FRONT_PSU_LED"}, + ], + "board_fan_led": [ + {"led_name": "FRONT_FAN_LED"}, + ], + }, + + "otp_reboot_judge_file": { + "otp_switch_reboot_judge_file": "/etc/.otp_switch_reboot_flag", + "otp_other_reboot_judge_file": "/etc/.otp_other_reboot_flag", + }, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/Makefile new file mode 100755 index 000000000000..1541b91bdf7d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/Makefile @@ -0,0 +1,16 @@ +MAKEFILE_FILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST))) +MODULES_DIR = $(abspath $(MAKEFILE_FILE_PATH)/../../../../common/modules) + +EXTRA_CFLAGS+= -I$(MODULES_DIR) + +obj-m += wb_pcie_dev_device.o +obj-m += wb_spi_ocores_device.o +obj-m += wb_spi_dev_device.o +obj-m += wb_lpc_drv_device.o +obj-m += wb_io_dev_device.o +obj-m += wb_fpga_i2c_bus_device.o +obj-m += wb_i2c_mux_pca954x_device.o +obj-m += wb_fpga_pca954x_device.o +obj-m += wb_spi_master.o +obj-m += wb_i2c_dev_device.o +obj-m += wb_spi_dev_platform_device.o diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_i2c_bus_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_i2c_bus_device.c new file mode 100644 index 000000000000..d0650a29b1bf --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_i2c_bus_device.c @@ -0,0 +1,2317 @@ +/* + * An wb_fpga_i2c_bus_device driver for fpga i2c device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_fpga_i2c_debug = 0; +static int g_wb_fpga_i2c_error = 0; + +module_param(g_wb_fpga_i2c_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_i2c_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_I2C_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_i2c_debug) { \ + printk(KERN_INFO "[WB_FPGA_I2C][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_I2C_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_i2c_error) { \ + printk(KERN_ERR "[WB_FPGA_I2C][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data0 = { + .adap_nr = 2, + .i2c_timeout = 3000, + .i2c_scale = 0x100, + .i2c_filter = 0x104, + .i2c_stretch = 0x108, + .i2c_ext_9548_exits_flag = 0x10c, + .i2c_ext_9548_addr = 0x110, + .i2c_ext_9548_chan = 0x114, + .i2c_in_9548_chan = 0x118, + .i2c_slave = 0x11c, + .i2c_reg = 0x120, + .i2c_reg_len = 0x130, + .i2c_data_len = 0x134, + .i2c_ctrl = 0x138, + .i2c_status = 0x13c, + .i2c_data_buf = 0x180, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data1 = { + .adap_nr = 3, + .i2c_timeout = 3000, + .i2c_scale = 0x200, + .i2c_filter = 0x204, + .i2c_stretch = 0x208, + .i2c_ext_9548_exits_flag = 0x20c, + .i2c_ext_9548_addr = 0x210, + .i2c_ext_9548_chan = 0x214, + .i2c_in_9548_chan = 0x218, + .i2c_slave = 0x21c, + .i2c_reg = 0x220, + .i2c_reg_len = 0x230, + .i2c_data_len = 0x234, + .i2c_ctrl = 0x238, + .i2c_status = 0x23c, + .i2c_data_buf = 0x280, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data2 = { + .adap_nr = 4, + .i2c_timeout = 3000, + .i2c_scale = 0x300, + .i2c_filter = 0x304, + .i2c_stretch = 0x308, + .i2c_ext_9548_exits_flag = 0x30c, + .i2c_ext_9548_addr = 0x310, + .i2c_ext_9548_chan = 0x314, + .i2c_in_9548_chan = 0x318, + .i2c_slave = 0x31c, + .i2c_reg = 0x320, + .i2c_reg_len = 0x330, + .i2c_data_len = 0x334, + .i2c_ctrl = 0x338, + .i2c_status = 0x33c, + .i2c_data_buf = 0x380, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000004, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data3 = { + .adap_nr = 5, + .i2c_timeout = 3000, + .i2c_scale = 0x400, + .i2c_filter = 0x404, + .i2c_stretch = 0x408, + .i2c_ext_9548_exits_flag = 0x40c, + .i2c_ext_9548_addr = 0x410, + .i2c_ext_9548_chan = 0x414, + .i2c_in_9548_chan = 0x418, + .i2c_slave = 0x41c, + .i2c_reg = 0x420, + .i2c_reg_len = 0x430, + .i2c_data_len = 0x434, + .i2c_ctrl = 0x438, + .i2c_status = 0x43c, + .i2c_data_buf = 0x480, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000008, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data4 = { + .adap_nr = 6, + .i2c_timeout = 3000, + .i2c_scale = 0x500, + .i2c_filter = 0x504, + .i2c_stretch = 0x508, + .i2c_ext_9548_exits_flag = 0x50c, + .i2c_ext_9548_addr = 0x510, + .i2c_ext_9548_chan = 0x514, + .i2c_in_9548_chan = 0x518, + .i2c_slave = 0x51c, + .i2c_reg = 0x520, + .i2c_reg_len = 0x530, + .i2c_data_len = 0x534, + .i2c_ctrl = 0x538, + .i2c_status = 0x53c, + .i2c_data_buf = 0x580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000010, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data5 = { + .adap_nr = 7, + .i2c_timeout = 3000, + .i2c_scale = 0x600, + .i2c_filter = 0x604, + .i2c_stretch = 0x608, + .i2c_ext_9548_exits_flag = 0x60c, + .i2c_ext_9548_addr = 0x610, + .i2c_ext_9548_chan = 0x614, + .i2c_in_9548_chan = 0x618, + .i2c_slave = 0x61c, + .i2c_reg = 0x620, + .i2c_reg_len = 0x630, + .i2c_data_len = 0x634, + .i2c_ctrl = 0x638, + .i2c_status = 0x63c, + .i2c_data_buf = 0x680, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000020, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_i2c_bus_device_data6 = { + .adap_nr = 199, + .i2c_timeout = 3000, + .i2c_scale = 0x1a00, + .i2c_filter = 0x1a04, + .i2c_stretch = 0x1a08, + .i2c_ext_9548_exits_flag = 0x1a0c, + .i2c_ext_9548_addr = 0x1a10, + .i2c_ext_9548_chan = 0x1a14, + .i2c_in_9548_chan = 0x1a18, + .i2c_slave = 0x1a1c, + .i2c_reg = 0x1a20, + .i2c_reg_len = 0x1a30, + .i2c_data_len = 0x1a34, + .i2c_ctrl = 0x1a38, + .i2c_status = 0x1a3c, + .i2c_data_buf = 0x1b00, + .i2c_data_buf_len = 0x100, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x28, + .i2c_reset_on = 0x00000040, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data0 = { + .adap_nr = 8, + .i2c_timeout = 3000, + .i2c_scale = 0x800, + .i2c_filter = 0x804, + .i2c_stretch = 0x808, + .i2c_ext_9548_exits_flag = 0x80c, + .i2c_ext_9548_addr = 0x810, + .i2c_ext_9548_chan = 0x814, + .i2c_in_9548_chan = 0x818, + .i2c_slave = 0x81c, + .i2c_reg = 0x820, + .i2c_reg_len = 0x830, + .i2c_data_len = 0x834, + .i2c_ctrl = 0x838, + .i2c_status = 0x83c, + .i2c_data_buf = 0x880, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data1 = { + .adap_nr = 9, + .i2c_timeout = 3000, + .i2c_scale = 0x900, + .i2c_filter = 0x904, + .i2c_stretch = 0x908, + .i2c_ext_9548_exits_flag = 0x90c, + .i2c_ext_9548_addr = 0x910, + .i2c_ext_9548_chan = 0x914, + .i2c_in_9548_chan = 0x918, + .i2c_slave = 0x91c, + .i2c_reg = 0x920, + .i2c_reg_len = 0x930, + .i2c_data_len = 0x934, + .i2c_ctrl = 0x938, + .i2c_status = 0x93c, + .i2c_data_buf = 0x980, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data2 = { + .adap_nr = 10, + .i2c_timeout = 3000, + .i2c_scale = 0xa00, + .i2c_filter = 0xa04, + .i2c_stretch = 0xa08, + .i2c_ext_9548_exits_flag = 0xa0c, + .i2c_ext_9548_addr = 0xa10, + .i2c_ext_9548_chan = 0xa14, + .i2c_in_9548_chan = 0xa18, + .i2c_slave = 0xa1c, + .i2c_reg = 0xa20, + .i2c_reg_len = 0xa30, + .i2c_data_len = 0xa34, + .i2c_ctrl = 0xa38, + .i2c_status = 0xa3c, + .i2c_data_buf = 0xa80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000004, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data3 = { + .adap_nr = 11, + .i2c_timeout = 3000, + .i2c_scale = 0xb00, + .i2c_filter = 0xb04, + .i2c_stretch = 0xb08, + .i2c_ext_9548_exits_flag = 0xb0c, + .i2c_ext_9548_addr = 0xb10, + .i2c_ext_9548_chan = 0xb14, + .i2c_in_9548_chan = 0xb18, + .i2c_slave = 0xb1c, + .i2c_reg = 0xb20, + .i2c_reg_len = 0xb30, + .i2c_data_len = 0xb34, + .i2c_ctrl = 0xb38, + .i2c_status = 0xb3c, + .i2c_data_buf = 0xb80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000008, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data4 = { + .adap_nr = 12, + .i2c_timeout = 3000, + .i2c_scale = 0xc00, + .i2c_filter = 0xc04, + .i2c_stretch = 0xc08, + .i2c_ext_9548_exits_flag = 0xc0c, + .i2c_ext_9548_addr = 0xc10, + .i2c_ext_9548_chan = 0xc14, + .i2c_in_9548_chan = 0xc18, + .i2c_slave = 0xc1c, + .i2c_reg = 0xc20, + .i2c_reg_len = 0xc30, + .i2c_data_len = 0xc34, + .i2c_ctrl = 0xc38, + .i2c_status = 0xc3c, + .i2c_data_buf = 0xc80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000010, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data5 = { + .adap_nr = 13, + .i2c_timeout = 3000, + .i2c_scale = 0xd00, + .i2c_filter = 0xd04, + .i2c_stretch = 0xd08, + .i2c_ext_9548_exits_flag = 0xd0c, + .i2c_ext_9548_addr = 0xd10, + .i2c_ext_9548_chan = 0xd14, + .i2c_in_9548_chan = 0xd18, + .i2c_slave = 0xd1c, + .i2c_reg = 0xd20, + .i2c_reg_len = 0xd30, + .i2c_data_len = 0xd34, + .i2c_ctrl = 0xd38, + .i2c_status = 0xd3c, + .i2c_data_buf = 0xd80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000020, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data6 = { + .adap_nr = 14, + .i2c_timeout = 3000, + .i2c_scale = 0xe00, + .i2c_filter = 0xe04, + .i2c_stretch = 0xe08, + .i2c_ext_9548_exits_flag = 0xe0c, + .i2c_ext_9548_addr = 0xe10, + .i2c_ext_9548_chan = 0xe14, + .i2c_in_9548_chan = 0xe18, + .i2c_slave = 0xe1c, + .i2c_reg = 0xe20, + .i2c_reg_len = 0xe30, + .i2c_data_len = 0xe34, + .i2c_ctrl = 0xe38, + .i2c_status = 0xe3c, + .i2c_data_buf = 0xe80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000040, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data7 = { + .adap_nr = 15, + .i2c_timeout = 3000, + .i2c_scale = 0xf00, + .i2c_filter = 0xf04, + .i2c_stretch = 0xf08, + .i2c_ext_9548_exits_flag = 0xf0c, + .i2c_ext_9548_addr = 0xf10, + .i2c_ext_9548_chan = 0xf14, + .i2c_in_9548_chan = 0xf18, + .i2c_slave = 0xf1c, + .i2c_reg = 0xf20, + .i2c_reg_len = 0xf30, + .i2c_data_len = 0xf34, + .i2c_ctrl = 0xf38, + .i2c_status = 0xf3c, + .i2c_data_buf = 0xf80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000080, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data8 = { + .adap_nr = 16, + .i2c_timeout = 3000, + .i2c_scale = 0x1000, + .i2c_filter = 0x1004, + .i2c_stretch = 0x1008, + .i2c_ext_9548_exits_flag = 0x100c, + .i2c_ext_9548_addr = 0x1010, + .i2c_ext_9548_chan = 0x1014, + .i2c_in_9548_chan = 0x1018, + .i2c_slave = 0x101c, + .i2c_reg = 0x1020, + .i2c_reg_len = 0x1030, + .i2c_data_len = 0x1034, + .i2c_ctrl = 0x1038, + .i2c_status = 0x103c, + .i2c_data_buf = 0x1080, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000100, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data9 = { + .adap_nr = 17, + .i2c_timeout = 3000, + .i2c_scale = 0x1100, + .i2c_filter = 0x1104, + .i2c_stretch = 0x1108, + .i2c_ext_9548_exits_flag = 0x110c, + .i2c_ext_9548_addr = 0x1110, + .i2c_ext_9548_chan = 0x1114, + .i2c_in_9548_chan = 0x1118, + .i2c_slave = 0x111c, + .i2c_reg = 0x1120, + .i2c_reg_len = 0x1130, + .i2c_data_len = 0x1134, + .i2c_ctrl = 0x1138, + .i2c_status = 0x113c, + .i2c_data_buf = 0x1180, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000200, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data10 = { + .adap_nr = 18, + .i2c_timeout = 3000, + .i2c_scale = 0x1200, + .i2c_filter = 0x1204, + .i2c_stretch = 0x1208, + .i2c_ext_9548_exits_flag = 0x120c, + .i2c_ext_9548_addr = 0x1210, + .i2c_ext_9548_chan = 0x1214, + .i2c_in_9548_chan = 0x1218, + .i2c_slave = 0x121c, + .i2c_reg = 0x1220, + .i2c_reg_len = 0x1230, + .i2c_data_len = 0x1234, + .i2c_ctrl = 0x1238, + .i2c_status = 0x123c, + .i2c_data_buf = 0x1280, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000400, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data11 = { + .adap_nr = 19, + .i2c_timeout = 3000, + .i2c_scale = 0x1300, + .i2c_filter = 0x1304, + .i2c_stretch = 0x1308, + .i2c_ext_9548_exits_flag = 0x130c, + .i2c_ext_9548_addr = 0x1310, + .i2c_ext_9548_chan = 0x1314, + .i2c_in_9548_chan = 0x1318, + .i2c_slave = 0x131c, + .i2c_reg = 0x1320, + .i2c_reg_len = 0x1330, + .i2c_data_len = 0x1334, + .i2c_ctrl = 0x1338, + .i2c_status = 0x133c, + .i2c_data_buf = 0x1380, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00000800, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data12 = { + .adap_nr = 20, + .i2c_timeout = 3000, + .i2c_scale = 0x1400, + .i2c_filter = 0x1404, + .i2c_stretch = 0x1408, + .i2c_ext_9548_exits_flag = 0x140c, + .i2c_ext_9548_addr = 0x1410, + .i2c_ext_9548_chan = 0x1414, + .i2c_in_9548_chan = 0x1418, + .i2c_slave = 0x141c, + .i2c_reg = 0x1420, + .i2c_reg_len = 0x1430, + .i2c_data_len = 0x1434, + .i2c_ctrl = 0x1438, + .i2c_status = 0x143c, + .i2c_data_buf = 0x1480, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00001000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data13 = { + .adap_nr = 21, + .i2c_timeout = 3000, + .i2c_scale = 0x1500, + .i2c_filter = 0x1504, + .i2c_stretch = 0x1508, + .i2c_ext_9548_exits_flag = 0x150c, + .i2c_ext_9548_addr = 0x1510, + .i2c_ext_9548_chan = 0x1514, + .i2c_in_9548_chan = 0x1518, + .i2c_slave = 0x151c, + .i2c_reg = 0x1520, + .i2c_reg_len = 0x1530, + .i2c_data_len = 0x1534, + .i2c_ctrl = 0x1538, + .i2c_status = 0x153c, + .i2c_data_buf = 0x1580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00002000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data14 = { + .adap_nr = 22, + .i2c_timeout = 3000, + .i2c_scale = 0x1600, + .i2c_filter = 0x1604, + .i2c_stretch = 0x1608, + .i2c_ext_9548_exits_flag = 0x160c, + .i2c_ext_9548_addr = 0x1610, + .i2c_ext_9548_chan = 0x1614, + .i2c_in_9548_chan = 0x1618, + .i2c_slave = 0x161c, + .i2c_reg = 0x1620, + .i2c_reg_len = 0x1630, + .i2c_data_len = 0x1634, + .i2c_ctrl = 0x1638, + .i2c_status = 0x163c, + .i2c_data_buf = 0x1680, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00004000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga_dom_i2c_bus_device_data15 = { + .adap_nr = 23, + .i2c_timeout = 3000, + .i2c_scale = 0x1700, + .i2c_filter = 0x1704, + .i2c_stretch = 0x1708, + .i2c_ext_9548_exits_flag = 0x170c, + .i2c_ext_9548_addr = 0x1710, + .i2c_ext_9548_chan = 0x1714, + .i2c_in_9548_chan = 0x1718, + .i2c_slave = 0x171c, + .i2c_reg = 0x1720, + .i2c_reg_len = 0x1730, + .i2c_data_len = 0x1734, + .i2c_ctrl = 0x1738, + .i2c_status = 0x173c, + .i2c_data_buf = 0x1780, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x2c, + .i2c_reset_on = 0x00008000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data0 = { + .adap_nr = 24, + .i2c_timeout = 3000, + .i2c_scale = 0x100, + .i2c_filter = 0x104, + .i2c_stretch = 0x108, + .i2c_ext_9548_exits_flag = 0x10c, + .i2c_ext_9548_addr = 0x110, + .i2c_ext_9548_chan = 0x114, + .i2c_in_9548_chan = 0x118, + .i2c_slave = 0x11c, + .i2c_reg = 0x120, + .i2c_reg_len = 0x130, + .i2c_data_len = 0x134, + .i2c_ctrl = 0x138, + .i2c_status = 0x13c, + .i2c_data_buf = 0x180, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data1 = { + .adap_nr = 25, + .i2c_timeout = 3000, + .i2c_scale = 0x200, + .i2c_filter = 0x204, + .i2c_stretch = 0x208, + .i2c_ext_9548_exits_flag = 0x20c, + .i2c_ext_9548_addr = 0x210, + .i2c_ext_9548_chan = 0x214, + .i2c_in_9548_chan = 0x218, + .i2c_slave = 0x21c, + .i2c_reg = 0x220, + .i2c_reg_len = 0x230, + .i2c_data_len = 0x234, + .i2c_ctrl = 0x238, + .i2c_status = 0x23c, + .i2c_data_buf = 0x280, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data2 = { + .adap_nr = 26, + .i2c_timeout = 3000, + .i2c_scale = 0x300, + .i2c_filter = 0x304, + .i2c_stretch = 0x308, + .i2c_ext_9548_exits_flag = 0x30c, + .i2c_ext_9548_addr = 0x310, + .i2c_ext_9548_chan = 0x314, + .i2c_in_9548_chan = 0x318, + .i2c_slave = 0x31c, + .i2c_reg = 0x320, + .i2c_reg_len = 0x330, + .i2c_data_len = 0x334, + .i2c_ctrl = 0x338, + .i2c_status = 0x33c, + .i2c_data_buf = 0x380, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000004, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data3 = { + .adap_nr = 27, + .i2c_timeout = 3000, + .i2c_scale = 0x400, + .i2c_filter = 0x404, + .i2c_stretch = 0x408, + .i2c_ext_9548_exits_flag = 0x40c, + .i2c_ext_9548_addr = 0x410, + .i2c_ext_9548_chan = 0x414, + .i2c_in_9548_chan = 0x418, + .i2c_slave = 0x41c, + .i2c_reg = 0x420, + .i2c_reg_len = 0x430, + .i2c_data_len = 0x434, + .i2c_ctrl = 0x438, + .i2c_status = 0x43c, + .i2c_data_buf = 0x480, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000008, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data4 = { + .adap_nr = 28, + .i2c_timeout = 3000, + .i2c_scale = 0x500, + .i2c_filter = 0x504, + .i2c_stretch = 0x508, + .i2c_ext_9548_exits_flag = 0x50c, + .i2c_ext_9548_addr = 0x510, + .i2c_ext_9548_chan = 0x514, + .i2c_in_9548_chan = 0x518, + .i2c_slave = 0x51c, + .i2c_reg = 0x520, + .i2c_reg_len = 0x530, + .i2c_data_len = 0x534, + .i2c_ctrl = 0x538, + .i2c_status = 0x53c, + .i2c_data_buf = 0x580, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000010, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data5 = { + .adap_nr = 29, + .i2c_timeout = 3000, + .i2c_scale = 0x600, + .i2c_filter = 0x604, + .i2c_stretch = 0x608, + .i2c_ext_9548_exits_flag = 0x60c, + .i2c_ext_9548_addr = 0x610, + .i2c_ext_9548_chan = 0x614, + .i2c_in_9548_chan = 0x618, + .i2c_slave = 0x61c, + .i2c_reg = 0x620, + .i2c_reg_len = 0x630, + .i2c_data_len = 0x634, + .i2c_ctrl = 0x638, + .i2c_status = 0x63c, + .i2c_data_buf = 0x680, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000020, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data6 = { + .adap_nr = 30, + .i2c_timeout = 3000, + .i2c_scale = 0x700, + .i2c_filter = 0x704, + .i2c_stretch = 0x708, + .i2c_ext_9548_exits_flag = 0x70c, + .i2c_ext_9548_addr = 0x710, + .i2c_ext_9548_chan = 0x714, + .i2c_in_9548_chan = 0x718, + .i2c_slave = 0x71c, + .i2c_reg = 0x720, + .i2c_reg_len = 0x730, + .i2c_data_len = 0x734, + .i2c_ctrl = 0x738, + .i2c_status = 0x73c, + .i2c_data_buf = 0x780, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000040, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data7 = { + .adap_nr = 31, + .i2c_timeout = 3000, + .i2c_scale = 0x800, + .i2c_filter = 0x804, + .i2c_stretch = 0x808, + .i2c_ext_9548_exits_flag = 0x80c, + .i2c_ext_9548_addr = 0x810, + .i2c_ext_9548_chan = 0x814, + .i2c_in_9548_chan = 0x818, + .i2c_slave = 0x81c, + .i2c_reg = 0x820, + .i2c_reg_len = 0x830, + .i2c_data_len = 0x834, + .i2c_ctrl = 0x838, + .i2c_status = 0x83c, + .i2c_data_buf = 0x880, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000080, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data8 = { + .adap_nr = 32, + .i2c_timeout = 3000, + .i2c_scale = 0x900, + .i2c_filter = 0x904, + .i2c_stretch = 0x908, + .i2c_ext_9548_exits_flag = 0x90c, + .i2c_ext_9548_addr = 0x910, + .i2c_ext_9548_chan = 0x914, + .i2c_in_9548_chan = 0x918, + .i2c_slave = 0x91c, + .i2c_reg = 0x920, + .i2c_reg_len = 0x930, + .i2c_data_len = 0x934, + .i2c_ctrl = 0x938, + .i2c_status = 0x93c, + .i2c_data_buf = 0x980, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000100, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data9 = { + .adap_nr = 33, + .i2c_timeout = 3000, + .i2c_scale = 0xa00, + .i2c_filter = 0xa04, + .i2c_stretch = 0xa08, + .i2c_ext_9548_exits_flag = 0xa0c, + .i2c_ext_9548_addr = 0xa10, + .i2c_ext_9548_chan = 0xa14, + .i2c_in_9548_chan = 0xa18, + .i2c_slave = 0xa1c, + .i2c_reg = 0xa20, + .i2c_reg_len = 0xa30, + .i2c_data_len = 0xa34, + .i2c_ctrl = 0xa38, + .i2c_status = 0xa3c, + .i2c_data_buf = 0xa80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000200, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data10 = { + .adap_nr = 34, + .i2c_timeout = 3000, + .i2c_scale = 0xb00, + .i2c_filter = 0xb04, + .i2c_stretch = 0xb08, + .i2c_ext_9548_exits_flag = 0xb0c, + .i2c_ext_9548_addr = 0xb10, + .i2c_ext_9548_chan = 0xb14, + .i2c_in_9548_chan = 0xb18, + .i2c_slave = 0xb1c, + .i2c_reg = 0xb20, + .i2c_reg_len = 0xb30, + .i2c_data_len = 0xb34, + .i2c_ctrl = 0xb38, + .i2c_status = 0xb3c, + .i2c_data_buf = 0xb80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000400, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data11 = { + .adap_nr = 35, + .i2c_timeout = 3000, + .i2c_scale = 0xc00, + .i2c_filter = 0xc04, + .i2c_stretch = 0xc08, + .i2c_ext_9548_exits_flag = 0xc0c, + .i2c_ext_9548_addr = 0xc10, + .i2c_ext_9548_chan = 0xc14, + .i2c_in_9548_chan = 0xc18, + .i2c_slave = 0xc1c, + .i2c_reg = 0xc20, + .i2c_reg_len = 0xc30, + .i2c_data_len = 0xc34, + .i2c_ctrl = 0xc38, + .i2c_status = 0xc3c, + .i2c_data_buf = 0xc80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00000800, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data12 = { + .adap_nr = 36, + .i2c_timeout = 3000, + .i2c_scale = 0xd00, + .i2c_filter = 0xd04, + .i2c_stretch = 0xd08, + .i2c_ext_9548_exits_flag = 0xd0c, + .i2c_ext_9548_addr = 0xd10, + .i2c_ext_9548_chan = 0xd14, + .i2c_in_9548_chan = 0xd18, + .i2c_slave = 0xd1c, + .i2c_reg = 0xd20, + .i2c_reg_len = 0xd30, + .i2c_data_len = 0xd34, + .i2c_ctrl = 0xd38, + .i2c_status = 0xd3c, + .i2c_data_buf = 0xd80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00001000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data13 = { + .adap_nr = 37, + .i2c_timeout = 3000, + .i2c_scale = 0xe00, + .i2c_filter = 0xe04, + .i2c_stretch = 0xe08, + .i2c_ext_9548_exits_flag = 0xe0c, + .i2c_ext_9548_addr = 0xe10, + .i2c_ext_9548_chan = 0xe14, + .i2c_in_9548_chan = 0xe18, + .i2c_slave = 0xe1c, + .i2c_reg = 0xe20, + .i2c_reg_len = 0xe30, + .i2c_data_len = 0xe34, + .i2c_ctrl = 0xe38, + .i2c_status = 0xe3c, + .i2c_data_buf = 0xe80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00002000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data14 = { + .adap_nr = 38, + .i2c_timeout = 3000, + .i2c_scale = 0xf00, + .i2c_filter = 0xf04, + .i2c_stretch = 0xf08, + .i2c_ext_9548_exits_flag = 0xf0c, + .i2c_ext_9548_addr = 0xf10, + .i2c_ext_9548_chan = 0xf14, + .i2c_in_9548_chan = 0xf18, + .i2c_slave = 0xf1c, + .i2c_reg = 0xf20, + .i2c_reg_len = 0xf30, + .i2c_data_len = 0xf34, + .i2c_ctrl = 0xf38, + .i2c_status = 0xf3c, + .i2c_data_buf = 0xf80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00004000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data15 = { + .adap_nr = 39, + .i2c_timeout = 3000, + .i2c_scale = 0x1000, + .i2c_filter = 0x1004, + .i2c_stretch = 0x1008, + .i2c_ext_9548_exits_flag = 0x100c, + .i2c_ext_9548_addr = 0x1010, + .i2c_ext_9548_chan = 0x1014, + .i2c_in_9548_chan = 0x1018, + .i2c_slave = 0x101c, + .i2c_reg = 0x1020, + .i2c_reg_len = 0x1030, + .i2c_data_len = 0x1034, + .i2c_ctrl = 0x1038, + .i2c_status = 0x103c, + .i2c_data_buf = 0x1080, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00008000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data16 = { + .adap_nr = 40, + .i2c_timeout = 3000, + .i2c_scale = 0x1100, + .i2c_filter = 0x1104, + .i2c_stretch = 0x1108, + .i2c_ext_9548_exits_flag = 0x110c, + .i2c_ext_9548_addr = 0x1110, + .i2c_ext_9548_chan = 0x1114, + .i2c_in_9548_chan = 0x1118, + .i2c_slave = 0x111c, + .i2c_reg = 0x1120, + .i2c_reg_len = 0x1130, + .i2c_data_len = 0x1134, + .i2c_ctrl = 0x1138, + .i2c_status = 0x113c, + .i2c_data_buf = 0x1180, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00010000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data17 = { + .adap_nr = 41, + .i2c_timeout = 3000, + .i2c_scale = 0x1200, + .i2c_filter = 0x1204, + .i2c_stretch = 0x1208, + .i2c_ext_9548_exits_flag = 0x120c, + .i2c_ext_9548_addr = 0x1210, + .i2c_ext_9548_chan = 0x1214, + .i2c_in_9548_chan = 0x1218, + .i2c_slave = 0x121c, + .i2c_reg = 0x1220, + .i2c_reg_len = 0x1230, + .i2c_data_len = 0x1234, + .i2c_ctrl = 0x1238, + .i2c_status = 0x123c, + .i2c_data_buf = 0x1280, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00020000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data18 = { + .adap_nr = 42, + .i2c_timeout = 3000, + .i2c_scale = 0x1300, + .i2c_filter = 0x1304, + .i2c_stretch = 0x1308, + .i2c_ext_9548_exits_flag = 0x130c, + .i2c_ext_9548_addr = 0x1310, + .i2c_ext_9548_chan = 0x1314, + .i2c_in_9548_chan = 0x1318, + .i2c_slave = 0x131c, + .i2c_reg = 0x1320, + .i2c_reg_len = 0x1330, + .i2c_data_len = 0x1334, + .i2c_ctrl = 0x1338, + .i2c_status = 0x133c, + .i2c_data_buf = 0x1380, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00040000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data19 = { + .adap_nr = 43, + .i2c_timeout = 3000, + .i2c_scale = 0x1400, + .i2c_filter = 0x1404, + .i2c_stretch = 0x1408, + .i2c_ext_9548_exits_flag = 0x140c, + .i2c_ext_9548_addr = 0x1410, + .i2c_ext_9548_chan = 0x1414, + .i2c_in_9548_chan = 0x1418, + .i2c_slave = 0x141c, + .i2c_reg = 0x1420, + .i2c_reg_len = 0x1430, + .i2c_data_len = 0x1434, + .i2c_ctrl = 0x1438, + .i2c_status = 0x143c, + .i2c_data_buf = 0x1480, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00080000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data20 = { + .adap_nr = 44, + .i2c_timeout = 3000, + .i2c_scale = 0x1500, + .i2c_filter = 0x1504, + .i2c_stretch = 0x1508, + .i2c_ext_9548_exits_flag = 0x150c, + .i2c_ext_9548_addr = 0x1510, + .i2c_ext_9548_chan = 0x1514, + .i2c_in_9548_chan = 0x1518, + .i2c_slave = 0x151c, + .i2c_reg = 0x1520, + .i2c_reg_len = 0x1530, + .i2c_data_len = 0x1534, + .i2c_ctrl = 0x1538, + .i2c_status = 0x153c, + .i2c_data_buf = 0x1580, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00100000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data21 = { + .adap_nr = 45, + .i2c_timeout = 3000, + .i2c_scale = 0x1600, + .i2c_filter = 0x1604, + .i2c_stretch = 0x1608, + .i2c_ext_9548_exits_flag = 0x160c, + .i2c_ext_9548_addr = 0x1610, + .i2c_ext_9548_chan = 0x1614, + .i2c_in_9548_chan = 0x1618, + .i2c_slave = 0x161c, + .i2c_reg = 0x1620, + .i2c_reg_len = 0x1630, + .i2c_data_len = 0x1634, + .i2c_ctrl = 0x1638, + .i2c_status = 0x163c, + .i2c_data_buf = 0x1680, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00200000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data22 = { + .adap_nr = 46, + .i2c_timeout = 3000, + .i2c_scale = 0x1700, + .i2c_filter = 0x1704, + .i2c_stretch = 0x1708, + .i2c_ext_9548_exits_flag = 0x170c, + .i2c_ext_9548_addr = 0x1710, + .i2c_ext_9548_chan = 0x1714, + .i2c_in_9548_chan = 0x1718, + .i2c_slave = 0x171c, + .i2c_reg = 0x1720, + .i2c_reg_len = 0x1730, + .i2c_data_len = 0x1734, + .i2c_ctrl = 0x1738, + .i2c_status = 0x173c, + .i2c_data_buf = 0x1780, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00400000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data23 = { + .adap_nr = 47, + .i2c_timeout = 3000, + .i2c_scale = 0x1800, + .i2c_filter = 0x1804, + .i2c_stretch = 0x1808, + .i2c_ext_9548_exits_flag = 0x180c, + .i2c_ext_9548_addr = 0x1810, + .i2c_ext_9548_chan = 0x1814, + .i2c_in_9548_chan = 0x1818, + .i2c_slave = 0x181c, + .i2c_reg = 0x1820, + .i2c_reg_len = 0x1830, + .i2c_data_len = 0x1834, + .i2c_ctrl = 0x1838, + .i2c_status = 0x183c, + .i2c_data_buf = 0x1880, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x00800000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data24 = { + .adap_nr = 48, + .i2c_timeout = 3000, + .i2c_scale = 0x1900, + .i2c_filter = 0x1904, + .i2c_stretch = 0x1908, + .i2c_ext_9548_exits_flag = 0x190c, + .i2c_ext_9548_addr = 0x1910, + .i2c_ext_9548_chan = 0x1914, + .i2c_in_9548_chan = 0x1918, + .i2c_slave = 0x191c, + .i2c_reg = 0x1920, + .i2c_reg_len = 0x1930, + .i2c_data_len = 0x1934, + .i2c_ctrl = 0x1938, + .i2c_status = 0x193c, + .i2c_data_buf = 0x1980, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x01000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data25 = { + .adap_nr = 49, + .i2c_timeout = 3000, + .i2c_scale = 0x1a00, + .i2c_filter = 0x1a04, + .i2c_stretch = 0x1a08, + .i2c_ext_9548_exits_flag = 0x1a0c, + .i2c_ext_9548_addr = 0x1a10, + .i2c_ext_9548_chan = 0x1a14, + .i2c_in_9548_chan = 0x1a18, + .i2c_slave = 0x1a1c, + .i2c_reg = 0x1a20, + .i2c_reg_len = 0x1a30, + .i2c_data_len = 0x1a34, + .i2c_ctrl = 0x1a38, + .i2c_status = 0x1a3c, + .i2c_data_buf = 0x1a80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x02000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data26 = { + .adap_nr = 50, + .i2c_timeout = 3000, + .i2c_scale = 0x1b00, + .i2c_filter = 0x1b04, + .i2c_stretch = 0x1b08, + .i2c_ext_9548_exits_flag = 0x1b0c, + .i2c_ext_9548_addr = 0x1b10, + .i2c_ext_9548_chan = 0x1b14, + .i2c_in_9548_chan = 0x1b18, + .i2c_slave = 0x1b1c, + .i2c_reg = 0x1b20, + .i2c_reg_len = 0x1b30, + .i2c_data_len = 0x1b34, + .i2c_ctrl = 0x1b38, + .i2c_status = 0x1b3c, + .i2c_data_buf = 0x1b80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x04000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data27 = { + .adap_nr = 51, + .i2c_timeout = 3000, + .i2c_scale = 0x1c00, + .i2c_filter = 0x1c04, + .i2c_stretch = 0x1c08, + .i2c_ext_9548_exits_flag = 0x1c0c, + .i2c_ext_9548_addr = 0x1c10, + .i2c_ext_9548_chan = 0x1c14, + .i2c_in_9548_chan = 0x1c18, + .i2c_slave = 0x1c1c, + .i2c_reg = 0x1c20, + .i2c_reg_len = 0x1c30, + .i2c_data_len = 0x1c34, + .i2c_ctrl = 0x1c38, + .i2c_status = 0x1c3c, + .i2c_data_buf = 0x1c80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x08000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data28 = { + .adap_nr = 52, + .i2c_timeout = 3000, + .i2c_scale = 0x1d00, + .i2c_filter = 0x1d04, + .i2c_stretch = 0x1d08, + .i2c_ext_9548_exits_flag = 0x1d0c, + .i2c_ext_9548_addr = 0x1d10, + .i2c_ext_9548_chan = 0x1d14, + .i2c_in_9548_chan = 0x1d18, + .i2c_slave = 0x1d1c, + .i2c_reg = 0x1d20, + .i2c_reg_len = 0x1d30, + .i2c_data_len = 0x1d34, + .i2c_ctrl = 0x1d38, + .i2c_status = 0x1d3c, + .i2c_data_buf = 0x1d80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x10000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data29 = { + .adap_nr = 53, + .i2c_timeout = 3000, + .i2c_scale = 0x1e00, + .i2c_filter = 0x1e04, + .i2c_stretch = 0x1e08, + .i2c_ext_9548_exits_flag = 0x1e0c, + .i2c_ext_9548_addr = 0x1e10, + .i2c_ext_9548_chan = 0x1e14, + .i2c_in_9548_chan = 0x1e18, + .i2c_slave = 0x1e1c, + .i2c_reg = 0x1e20, + .i2c_reg_len = 0x1e30, + .i2c_data_len = 0x1e34, + .i2c_ctrl = 0x1e38, + .i2c_status = 0x1e3c, + .i2c_data_buf = 0x1e80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x20000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data30 = { + .adap_nr = 54, + .i2c_timeout = 3000, + .i2c_scale = 0x1f00, + .i2c_filter = 0x1f04, + .i2c_stretch = 0x1f08, + .i2c_ext_9548_exits_flag = 0x1f0c, + .i2c_ext_9548_addr = 0x1f10, + .i2c_ext_9548_chan = 0x1f14, + .i2c_in_9548_chan = 0x1f18, + .i2c_slave = 0x1f1c, + .i2c_reg = 0x1f20, + .i2c_reg_len = 0x1f30, + .i2c_data_len = 0x1f34, + .i2c_ctrl = 0x1f38, + .i2c_status = 0x1f3c, + .i2c_data_buf = 0x1f80, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x40000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_dom_i2c_bus_device_data31 = { + .adap_nr = 55, + .i2c_timeout = 3000, + .i2c_scale = 0x2000, + .i2c_filter = 0x2004, + .i2c_stretch = 0x2008, + .i2c_ext_9548_exits_flag = 0x200c, + .i2c_ext_9548_addr = 0x2010, + .i2c_ext_9548_chan = 0x2014, + .i2c_in_9548_chan = 0x2018, + .i2c_slave = 0x201c, + .i2c_reg = 0x2020, + .i2c_reg_len = 0x2030, + .i2c_data_len = 0x2034, + .i2c_ctrl = 0x2038, + .i2c_status = 0x203c, + .i2c_data_buf = 0x2080, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x1c, + .i2c_reset_on = 0x80000000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_i2c_bus_device_data0 = { + .adap_nr = 56, + .i2c_timeout = 3000, + .i2c_scale = 0x2100, + .i2c_filter = 0x2104, + .i2c_stretch = 0x2108, + .i2c_ext_9548_exits_flag = 0x210c, + .i2c_ext_9548_addr = 0x2110, + .i2c_ext_9548_chan = 0x2114, + .i2c_in_9548_chan = 0x2118, + .i2c_slave = 0x211c, + .i2c_reg = 0x2120, + .i2c_reg_len = 0x2130, + .i2c_data_len = 0x2134, + .i2c_ctrl = 0x2138, + .i2c_status = 0x213c, + .i2c_data_buf = 0x2180, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x3c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static fpga_i2c_bus_device_t fpga1_i2c_bus_device_data1 = { + .adap_nr = 57, + .i2c_timeout = 3000, + .i2c_scale = 0x2200, + .i2c_filter = 0x2204, + .i2c_stretch = 0x2208, + .i2c_ext_9548_exits_flag = 0x220c, + .i2c_ext_9548_addr = 0x2210, + .i2c_ext_9548_chan = 0x2214, + .i2c_in_9548_chan = 0x2218, + .i2c_slave = 0x221c, + .i2c_reg = 0x2220, + .i2c_reg_len = 0x2230, + .i2c_data_len = 0x2234, + .i2c_ctrl = 0x2238, + .i2c_status = 0x223c, + .i2c_data_buf = 0x2280, + .dev_name = "/dev/fpga1", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 5, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x3c, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, + .i2c_rst_delay = 1, + .i2c_rst_delay_a = 1, +}; + +static void wb_fpga_i2c_bus_device_release(struct device *dev) +{ + return; +} + +static struct platform_device fpga_i2c_bus_device[] = { + { + .name = "wb-fpga-i2c", + .id = 1, + .dev = { + .platform_data = &fpga_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 2, + .dev = { + .platform_data = &fpga_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 3, + .dev = { + .platform_data = &fpga_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 4, + .dev = { + .platform_data = &fpga_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 5, + .dev = { + .platform_data = &fpga_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 6, + .dev = { + .platform_data = &fpga_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 7, + .dev = { + .platform_data = &fpga_i2c_bus_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 8, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 9, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 10, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 11, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 12, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 13, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 14, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 15, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data7, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 16, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data8, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 17, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data9, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 18, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data10, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 19, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data11, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 20, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data12, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 21, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data13, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 22, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data14, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 23, + .dev = { + .platform_data = &fpga_dom_i2c_bus_device_data15, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 24, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 25, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 26, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 27, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 28, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 29, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 30, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 31, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data7, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 32, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data8, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 33, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data9, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 34, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data10, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 35, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data11, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 36, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data12, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 37, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data13, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 38, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data14, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 39, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data15, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 40, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data16, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 41, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data17, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 42, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data18, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 43, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data19, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 44, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data20, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 45, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data21, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 46, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data22, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 47, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data23, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 48, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data24, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 49, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data25, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 50, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data26, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 51, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data27, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 52, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data28, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 53, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data29, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 54, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data30, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 55, + .dev = { + .platform_data = &fpga1_dom_i2c_bus_device_data31, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 56, + .dev = { + .platform_data = &fpga1_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 57, + .dev = { + .platform_data = &fpga1_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, +}; + +static int __init wb_fpga_i2c_bus_device_init(void) +{ + int i; + int ret = 0; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_i2c_bus_device); i++) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + ret = platform_device_register(&fpga_i2c_bus_device[i]); + if (ret < 0) { + fpga_i2c_bus_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-fpga-i2c.%d register failed!\n", i + 1); + } else { + fpga_i2c_bus_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_fpga_i2c_bus_device_exit(void) +{ + int i; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_i2c_bus_device) - 1; i >= 0; i--) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + if (fpga_i2c_bus_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&fpga_i2c_bus_device[i]); + } + } +} + +module_init(wb_fpga_i2c_bus_device_init); +module_exit(wb_fpga_i2c_bus_device_exit); +MODULE_DESCRIPTION("FPGA I2C Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_pca954x_device.c new file mode 100644 index 000000000000..ecb846047676 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_fpga_pca954x_device.c @@ -0,0 +1,832 @@ +/* + * An wb_fpga_pca954x_device driver for fpga pca954x device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_fpga_pca954x_device_debug = 0; +static int g_wb_fpga_pca954x_device_error = 0; + +module_param(g_wb_fpga_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_FPGA_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_error) { \ + printk(KERN_ERR "[WB_FPGA_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static fpga_pca954x_device_t fpga_pca954x_device_data0 = { + .i2c_bus = 2, + .i2c_addr = 0x70, + .pca9548_base_nr = 74, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data1 = { + .i2c_bus = 74, + .i2c_addr = 0x77, + .pca9548_base_nr = 75, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data2 = { + .i2c_bus = 199, + .i2c_addr = 0x70, + .pca9548_base_nr = 200, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data3 = { + .i2c_bus = 200, + .i2c_addr = 0x76, + .pca9548_base_nr = 83, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data4 = { + .i2c_bus = 3, + .i2c_addr = 0x70, + .pca9548_base_nr = 91, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data5 = { + .i2c_bus = 91, + .i2c_addr = 0x77, + .pca9548_base_nr = 92, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data6 = { + .i2c_bus = 4, + .i2c_addr = 0x70, + .pca9548_base_nr = 100, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data7 = { + .i2c_bus = 100, + .i2c_addr = 0x77, + .pca9548_base_nr = 101, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data8 = { + .i2c_bus = 5, + .i2c_addr = 0x77, + .pca9548_base_nr = 109, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data9 = { + .i2c_bus = 6, + .i2c_addr = 0x77, + .pca9548_base_nr = 117, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data10 = { + .i2c_bus = 7, + .i2c_addr = 0x77, + .pca9548_base_nr = 125, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data11 = { + .i2c_bus = 8, + .i2c_addr = 0x70, + .pca9548_base_nr = 133, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data12 = { + .i2c_bus = 9, + .i2c_addr = 0x70, + .pca9548_base_nr = 137, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data13 = { + .i2c_bus = 10, + .i2c_addr = 0x70, + .pca9548_base_nr = 141, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data14 = { + .i2c_bus = 11, + .i2c_addr = 0x70, + .pca9548_base_nr = 145, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data15 = { + .i2c_bus = 12, + .i2c_addr = 0x70, + .pca9548_base_nr = 149, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data16 = { + .i2c_bus = 13, + .i2c_addr = 0x70, + .pca9548_base_nr = 153, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data17 = { + .i2c_bus = 14, + .i2c_addr = 0x70, + .pca9548_base_nr = 157, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data18 = { + .i2c_bus = 15, + .i2c_addr = 0x70, + .pca9548_base_nr = 161, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data19 = { + .i2c_bus = 16, + .i2c_addr = 0x70, + .pca9548_base_nr = 165, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data20 = { + .i2c_bus = 17, + .i2c_addr = 0x70, + .pca9548_base_nr = 169, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data21 = { + .i2c_bus = 18, + .i2c_addr = 0x70, + .pca9548_base_nr = 173, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data22 = { + .i2c_bus = 19, + .i2c_addr = 0x70, + .pca9548_base_nr = 177, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data23 = { + .i2c_bus = 20, + .i2c_addr = 0x70, + .pca9548_base_nr = 181, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data24 = { + .i2c_bus = 21, + .i2c_addr = 0x70, + .pca9548_base_nr = 185, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data25 = { + .i2c_bus = 22, + .i2c_addr = 0x70, + .pca9548_base_nr = 189, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data26 = { + .i2c_bus = 23, + .i2c_addr = 0x70, + .pca9548_base_nr = 193, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data27 = { + .i2c_bus = 24, + .i2c_addr = 0x70, + .pca9548_base_nr = 135, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data28 = { + .i2c_bus = 25, + .i2c_addr = 0x70, + .pca9548_base_nr = 136, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data29 = { + .i2c_bus = 26, + .i2c_addr = 0x70, + .pca9548_base_nr = 139, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data30 = { + .i2c_bus = 27, + .i2c_addr = 0x70, + .pca9548_base_nr = 140, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data31 = { + .i2c_bus = 28, + .i2c_addr = 0x70, + .pca9548_base_nr = 143, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data32 = { + .i2c_bus = 29, + .i2c_addr = 0x70, + .pca9548_base_nr = 144, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data33 = { + .i2c_bus = 30, + .i2c_addr = 0x70, + .pca9548_base_nr = 147, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data34 = { + .i2c_bus = 31, + .i2c_addr = 0x70, + .pca9548_base_nr = 148, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data35 = { + .i2c_bus = 32, + .i2c_addr = 0x70, + .pca9548_base_nr = 151, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data36 = { + .i2c_bus = 33, + .i2c_addr = 0x70, + .pca9548_base_nr = 152, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data37 = { + .i2c_bus = 34, + .i2c_addr = 0x70, + .pca9548_base_nr = 155, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data38 = { + .i2c_bus = 35, + .i2c_addr = 0x70, + .pca9548_base_nr = 156, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data39 = { + .i2c_bus = 36, + .i2c_addr = 0x70, + .pca9548_base_nr = 159, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data40 = { + .i2c_bus = 37, + .i2c_addr = 0x70, + .pca9548_base_nr = 160, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data41 = { + .i2c_bus = 38, + .i2c_addr = 0x70, + .pca9548_base_nr = 163, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data42 = { + .i2c_bus = 39, + .i2c_addr = 0x70, + .pca9548_base_nr = 164, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data43 = { + .i2c_bus = 40, + .i2c_addr = 0x70, + .pca9548_base_nr = 167, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data44 = { + .i2c_bus = 41, + .i2c_addr = 0x70, + .pca9548_base_nr = 168, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data45 = { + .i2c_bus = 42, + .i2c_addr = 0x70, + .pca9548_base_nr = 171, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data46 = { + .i2c_bus = 43, + .i2c_addr = 0x70, + .pca9548_base_nr = 172, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data47 = { + .i2c_bus = 44, + .i2c_addr = 0x70, + .pca9548_base_nr = 175, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data48 = { + .i2c_bus = 45, + .i2c_addr = 0x70, + .pca9548_base_nr = 176, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data49 = { + .i2c_bus = 46, + .i2c_addr = 0x70, + .pca9548_base_nr = 179, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data50 = { + .i2c_bus = 47, + .i2c_addr = 0x70, + .pca9548_base_nr = 180, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data51 = { + .i2c_bus = 48, + .i2c_addr = 0x70, + .pca9548_base_nr = 183, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data52 = { + .i2c_bus = 49, + .i2c_addr = 0x70, + .pca9548_base_nr = 184, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data53 = { + .i2c_bus = 50, + .i2c_addr = 0x70, + .pca9548_base_nr = 187, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data54 = { + .i2c_bus = 51, + .i2c_addr = 0x70, + .pca9548_base_nr = 188, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data55 = { + .i2c_bus = 52, + .i2c_addr = 0x70, + .pca9548_base_nr = 191, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data56 = { + .i2c_bus = 53, + .i2c_addr = 0x70, + .pca9548_base_nr = 192, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data57 = { + .i2c_bus = 54, + .i2c_addr = 0x70, + .pca9548_base_nr = 195, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data58 = { + .i2c_bus = 55, + .i2c_addr = 0x70, + .pca9548_base_nr = 196, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data59 = { + .i2c_bus = 56, + .i2c_addr = 0x70, + .pca9548_base_nr = 197, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data60 = { + .i2c_bus = 57, + .i2c_addr = 0x70, + .pca9548_base_nr = 198, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +struct i2c_board_info fpga_pca954x_device_info[] = { + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data0, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data1, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data2, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data3, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data4, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data5, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data6, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data7, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data8, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data9, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data10, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data11, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data12, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data13, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data14, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data15, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data16, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data17, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data18, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data19, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data20, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data21, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data22, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data23, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data24, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data25, + }, + { + .type = "wb_fpga_pca9542", + .platform_data = &fpga_pca954x_device_data26, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data27, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data28, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data29, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data30, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data31, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data32, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data33, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data34, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data35, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data36, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data37, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data38, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data39, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data40, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data41, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data42, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data43, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data44, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data45, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data46, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data47, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data48, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data49, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data50, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data51, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data52, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data53, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data54, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data55, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data56, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data57, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data58, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data59, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data60, + }, +}; + +static int __init wb_fpga_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_pca954x_device_info); i++) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + fpga_pca954x_device_info[i].addr = fpga_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(fpga_pca954x_device_data->i2c_bus); + if (adap == NULL) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", fpga_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &fpga_pca954x_device_info[i]); + if (!client) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register fpga pca954x device %d at bus %d!\n", + fpga_pca954x_device_data->i2c_addr, fpga_pca954x_device_data->i2c_bus); + } else { + fpga_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_fpga_pca954x_device_exit(void) +{ + int i; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_pca954x_device_info) - 1; i >= 0; i--) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + if (fpga_pca954x_device_data->client) { + i2c_unregister_device(fpga_pca954x_device_data->client); + fpga_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_fpga_pca954x_device_init); +module_exit(wb_fpga_pca954x_device_exit); +MODULE_DESCRIPTION("FPGA PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_dev_device.c new file mode 100644 index 000000000000..0f97f8f5e040 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_dev_device.c @@ -0,0 +1,190 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_dev_device_debug = 0; +static int g_wb_i2c_dev_device_error = 0; + +module_param(g_wb_i2c_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_dev_device_debug) { \ + printk(KERN_INFO "[WB_I2C_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_dev_device_error) { \ + printk(KERN_ERR "[WB_I2C_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_dev_device_t i2c_dev_device_data0 = { + .i2c_bus = 109, + .i2c_addr = 0x1d, + .i2c_name = "cpld4", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data1 = { + .i2c_bus = 110, + .i2c_addr = 0x2d, + .i2c_name = "cpld5", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data2 = { + .i2c_bus = 111, + .i2c_addr = 0x3d, + .i2c_name = "cpld6", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data3 = { + .i2c_bus = 112, + .i2c_addr = 0x4d, + .i2c_name = "cpld7", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data4 = { + .i2c_bus = 92, + .i2c_addr = 0x0d, + .i2c_name = "cpld8", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data5 = { + .i2c_bus = 101, + .i2c_addr = 0x0d, + .i2c_name = "cpld9", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +struct i2c_board_info i2c_dev_device_info[] = { + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data0, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data1, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data2, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data3, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data4, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data5, + }, +}; + +static int __init wb_i2c_dev_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_dev_device_info); i++) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + i2c_dev_device_info[i].addr = i2c_dev_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_dev_device_data->i2c_bus); + if (adap == NULL) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_dev_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_dev_device_info[i]); + if (!client) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "Failed to register i2c dev device %d at bus %d!\n", + i2c_dev_device_data->i2c_addr, i2c_dev_device_data->i2c_bus); + } else { + i2c_dev_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_dev_device_exit(void) +{ + int i; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_dev_device_info) - 1; i >= 0; i--) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + if (i2c_dev_device_data->client) { + i2c_unregister_device(i2c_dev_device_data->client); + i2c_dev_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_dev_device_init); +module_exit(wb_i2c_dev_device_exit); +MODULE_DESCRIPTION("I2C DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_mux_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_mux_pca954x_device.c new file mode 100644 index 000000000000..dc54dee29fce --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_i2c_mux_pca954x_device.c @@ -0,0 +1,146 @@ +/* + * An wb_i2c_mux_pca954x_device driver for pca954x i2c load device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_mux_pca954x_device_debug = 0; +static int g_wb_i2c_mux_pca954x_device_error = 0; + +module_param(g_wb_i2c_mux_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_mux_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_I2C_MUX_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_error) { \ + printk(KERN_ERR "[WB_I2C_MUX_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data0 = { + .i2c_bus = 1, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 1, + .close_chan_force_reset = 1, + .pca9548_base_nr = 58, + .pca9548_reset_type = PCA9548_RESET_IO, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .io_attr.io_addr = 0x915, + .io_attr.mask = 0x20, + .io_attr.reset_on = 0, + .io_attr.reset_off = 0x20, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data1 = { + .i2c_bus = 1, + .i2c_addr = 0x73, + .probe_disable = 1, + .select_chan_check = 1, + .close_chan_force_reset = 1, + .pca9548_base_nr = 66, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga1", + .file_attr.offset = 0x40, + .file_attr.mask = 0x1, + .file_attr.reset_on = 0x0, + .file_attr.reset_off = 0x1, + }, +}; + +struct i2c_board_info i2c_mux_pca954x_device_info[] = { + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data0, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data1, + }, +}; + +static int __init wb_i2c_mux_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_mux_pca954x_device_info); i++) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + i2c_mux_pca954x_device_info[i].addr = i2c_mux_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_mux_pca954x_device_data->i2c_bus); + if (adap == NULL) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_mux_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_mux_pca954x_device_info[i]); + if (!client) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register pca954x device %d at bus %d!\n", + i2c_mux_pca954x_device_data->i2c_addr, i2c_mux_pca954x_device_data->i2c_bus); + } else { + i2c_mux_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_mux_pca954x_device_exit(void) +{ + int i; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_mux_pca954x_device_info) - 1; i >= 0; i--) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + if (i2c_mux_pca954x_device_data->client) { + i2c_unregister_device(i2c_mux_pca954x_device_data->client); + i2c_mux_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_mux_pca954x_device_init); +module_exit(wb_i2c_mux_pca954x_device_exit); +MODULE_DESCRIPTION("WB I2C MUX PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_io_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_io_dev_device.c new file mode 100644 index 000000000000..ae7ff5523f63 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_io_dev_device.c @@ -0,0 +1,138 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_io_dev_device_debug = 0; +static int g_wb_io_dev_device_error = 0; + +module_param(g_wb_io_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_io_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_IO_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_io_dev_device_debug) { \ + printk(KERN_INFO "[WB_IO_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_IO_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_io_dev_device_error) { \ + printk(KERN_ERR "[WB_IO_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static io_dev_device_t io_dev_device_data0 = { + .io_dev_name = "cpld0", + .io_base = 0x700, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static io_dev_device_t io_dev_device_data1 = { + .io_dev_name = "cpld1", + .io_base = 0x900, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static io_dev_device_t io_dev_device_data2 = { + .io_dev_name = "cpld2", + .io_base = 0xb00, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static void wb_io_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device io_dev_device[] = { + { + .name = "wb-io-dev", + .id = 1, + .dev = { + .platform_data = &io_dev_device_data0, + .release = wb_io_dev_device_release, + }, + }, + { + .name = "wb-io-dev", + .id = 2, + .dev = { + .platform_data = &io_dev_device_data1, + .release = wb_io_dev_device_release, + }, + }, + { + .name = "wb-io-dev", + .id = 3, + .dev = { + .platform_data = &io_dev_device_data2, + .release = wb_io_dev_device_release, + }, + }, +}; + +static int __init wb_io_dev_device_init(void) +{ + int i; + int ret = 0; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(io_dev_device); i++) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + ret = platform_device_register(&io_dev_device[i]); + if (ret < 0) { + io_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-io-dev.%d register failed!\n", i + 1); + } else { + io_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_io_dev_device_exit(void) +{ + int i; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(io_dev_device) - 1; i >= 0; i--) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + if (io_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&io_dev_device[i]); + } + } +} + +module_init(wb_io_dev_device_init); +module_exit(wb_io_dev_device_exit); +MODULE_DESCRIPTION("IO DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_lpc_drv_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_lpc_drv_device.c new file mode 100644 index 000000000000..363d670d5a99 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_lpc_drv_device.c @@ -0,0 +1,150 @@ +/* + * An wb_i2c_ocores_device driver for i2c ocore device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_lpc_drv_device_debug = 0; +static int g_wb_lpc_drv_device_error = 0; + +module_param(g_wb_lpc_drv_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_lpc_drv_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_LPC_DRV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_lpc_drv_device_debug) { \ + printk(KERN_INFO "[WB_LPC_DRV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_LPC_DRV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_lpc_drv_device_error) { \ + printk(KERN_ERR "[WB_LPC_DRV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static lpc_drv_device_t lpc_drv_device_data_0 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0x700, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x84, +}; + +static lpc_drv_device_t lpc_drv_device_data_1 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0x900, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x88, +}; + +static lpc_drv_device_t lpc_drv_device_data_2 = { + .lpc_io_name = "wb_lpc", + .pci_domain = 0x0000, + .pci_bus = 0x00, + .pci_slot = 0x1f, + .pci_fn = 0, + .lpc_io_base = 0xb00, + .lpc_io_size = 0x100, + .lpc_gen_dec = 0x90, +}; + +static void wb_lpc_drv_device_release(struct device *dev) +{ + return; +} + +static struct platform_device lpc_drv_device[] = { + { + .name = "wb-lpc", + .id = 1, + .dev = { + .platform_data = &lpc_drv_device_data_0, + .release = wb_lpc_drv_device_release, + }, + }, + { + .name = "wb-lpc", + .id = 2, + .dev = { + .platform_data = &lpc_drv_device_data_1, + .release = wb_lpc_drv_device_release, + }, + }, + { + .name = "wb-lpc", + .id = 3, + .dev = { + .platform_data = &lpc_drv_device_data_2, + .release = wb_lpc_drv_device_release, + }, + }, +}; + +static int __init wb_lpc_drv_device_init(void) +{ + int i; + int ret = 0; + lpc_drv_device_t *lpc_drv_device_data; + + WB_LPC_DRV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(lpc_drv_device); i++) { + lpc_drv_device_data = lpc_drv_device[i].dev.platform_data; + ret = platform_device_register(&lpc_drv_device[i]); + if (ret < 0) { + lpc_drv_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-lpc.%d register failed!\n", i + 1); + } else { + lpc_drv_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_lpc_drv_device_exit(void) +{ + int i; + lpc_drv_device_t *lpc_drv_device_data; + + WB_LPC_DRV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(lpc_drv_device) - 1; i >= 0; i--) { + lpc_drv_device_data = lpc_drv_device[i].dev.platform_data; + if (lpc_drv_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&lpc_drv_device[i]); + } + } +} + +module_init(wb_lpc_drv_device_init); +module_exit(wb_lpc_drv_device_exit); +MODULE_DESCRIPTION("LPC DRV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_pcie_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_pcie_dev_device.c new file mode 100644 index 000000000000..561e64d449b4 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_pcie_dev_device.c @@ -0,0 +1,113 @@ +/* + * An wb_pcie_dev_device driver for pcie device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_pcie_dev_device_debug = 0; +static int g_wb_pcie_dev_device_error = 0; + +module_param(g_wb_pcie_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_pcie_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_pcie_dev_device_debug) { \ + printk(KERN_INFO "[WB_PCIE_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_PCIE_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_pcie_dev_device_error) { \ + printk(KERN_ERR "[WB_PCIE_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static pci_dev_device_t pcie_dev_device_data0 = { + .pci_dev_name = "fpga0", + .pci_domain = 0x0000, + .pci_bus = 0x08, + .pci_slot = 0x00, + .pci_fn = 0, + .pci_bar = 0, + .bus_width = 4, + .upg_ctrl_base = 0xa00, + .upg_flash_base = 0x2f0000, +}; + +static void wb_pcie_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device pcie_dev_device[] = { + { + .name = "wb-pci-dev", + .id = 1, + .dev = { + .platform_data = &pcie_dev_device_data0, + .release = wb_pcie_dev_device_release, + }, + }, +}; + +static int __init wb_pcie_dev_device_init(void) +{ + int i; + int ret = 0; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(pcie_dev_device); i++) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + ret = platform_device_register(&pcie_dev_device[i]); + if (ret < 0) { + pcie_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-pci-dev.%d register failed!\n", i + 1); + } else { + pcie_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_pcie_dev_device_exit(void) +{ + int i; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(pcie_dev_device) - 1; i >= 0; i--) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + if (pcie_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&pcie_dev_device[i]); + } + } +} + +module_init(wb_pcie_dev_device_init); +module_exit(wb_pcie_dev_device_exit); +MODULE_DESCRIPTION("PCIE DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_device.c new file mode 100644 index 000000000000..45f6038596b3 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_device.c @@ -0,0 +1,126 @@ +/* + * An wb_spi_dev_device driver for spi device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include +#include "wb_spi_master.h" + +#define SPI_DEVICE_MAX_NUM (64) + +static int g_wb_spi_dev_device_debug = 0; +static int g_wb_spi_dev_device_error = 0; + +module_param(g_wb_spi_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_spi_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_SPI_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_spi_dev_device_debug) { \ + printk(KERN_INFO "[WB_SPI_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_SPI_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_spi_dev_device_error) { \ + printk(KERN_ERR "[WB_SPI_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static spi_dev_device_t spi_dev_device_data0 = { + .spi_dev_name = "fpga1", + .data_bus_width = 4, + .addr_bus_width = 2, + .per_rd_len = 4, + .per_wr_len = 4, + .spi_len = 0xe000, +}; + +static struct spi_device *g_spi_device[SPI_DEVICE_MAX_NUM]; + +struct spi_board_info spi_dev_device_info[] = { + { + .modalias = "wb-spi-dev", + .max_speed_hz = 6250000, + .bus_num = 1, + .chip_select = 0, + .mode = SPI_MODE_3, + .platform_data = &spi_dev_device_data0, + }, +}; + +static int __init wb_spi_dev_device_init(void) +{ + int i; + struct spi_master *master; + struct spi_device *spi; + int spi_dev_num; + + WB_SPI_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + + spi_dev_num = ARRAY_SIZE(spi_dev_device_info); + if (spi_dev_num > SPI_DEVICE_MAX_NUM) { + printk(KERN_ERR "spi_dev_num[%d] is bigger than max_num[%d].\n", + spi_dev_num, SPI_DEVICE_MAX_NUM); + return -EINVAL; + } + + for (i = 0; i < ARRAY_SIZE(spi_dev_device_info); i++) { + master = wb_spi_master_busnum_to_master(spi_dev_device_info[i].bus_num); + if (!master) { + printk(KERN_ERR "get bus_num %u spi master failed.\n", + spi_dev_device_info[i].bus_num); + continue; + } + spi = spi_new_device(master, &spi_dev_device_info[i]); + put_device(&master->dev); + if (spi) { + g_spi_device[i] = spi; + } else { + g_spi_device[i] = NULL; + printk(KERN_ERR "Failed to register spi dev device %s at bus %d!\n", + spi_dev_device_info[i].modalias, spi_dev_device_info[i].bus_num); + continue; + } + } + return 0; +} + +static void __exit wb_spi_dev_device_exit(void) +{ + int i; + + WB_SPI_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(spi_dev_device_info) - 1; i >= 0; i--) { + if (g_spi_device[i]) { + spi_unregister_device(g_spi_device[i]); + g_spi_device[i] = NULL; + } + } +} + +module_init(wb_spi_dev_device_init); +module_exit(wb_spi_dev_device_exit); +MODULE_DESCRIPTION("SPI DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_platform_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_platform_device.c new file mode 100644 index 000000000000..9c4981321b64 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_dev_platform_device.c @@ -0,0 +1,74 @@ +/* + * An wb_spi_dev_platform_device driver for spi platform device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +static int g_wb_spi_dev_platform_device_debug = 0; +static int g_wb_spi_dev_platform_device_error = 0; + +module_param(g_wb_spi_dev_platform_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_spi_dev_platform_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_SPI_DEV_PLATFORM_DEVICE_VERBOSE(fmt, args...) do { \ + if (g_wb_spi_dev_platform_device_debug) { \ + printk(KERN_INFO "[WB_SPI_DEV_PLATFORM_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_SPI_DEV_PLATFORM_DEVICE_ERROR(fmt, args...) do { \ + if (g_wb_spi_dev_platform_device_error) { \ + printk(KERN_ERR "[WB_SPI_DEV_PLATFORM_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static void wb_spi_dev_platform_device_release(struct device *dev) +{ + return; +} + +static struct platform_device wb_spi_dev_platform_device = { + .name = "wb-spi-dev-device", + .id = 1, + .dev = { + .release = wb_spi_dev_platform_device_release, + }, +}; + +static int __init wb_spi_dev_platform_device_init(void) +{ + WB_SPI_DEV_PLATFORM_DEVICE_VERBOSE("wb_spi_dev_platform_device_init enter!\n"); + return platform_device_register(&wb_spi_dev_platform_device); +} + +static void __exit wb_spi_dev_platform_device_exit(void) +{ + WB_SPI_DEV_PLATFORM_DEVICE_VERBOSE("wb_spi_dev_platform_device_exit enter!\n"); + return platform_device_unregister(&wb_spi_dev_platform_device); +} + +module_init(wb_spi_dev_platform_device_init); +module_exit(wb_spi_dev_platform_device_exit); +MODULE_DESCRIPTION("SPI Dev Platform Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.c new file mode 100644 index 000000000000..5c9cdbe1599f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.c @@ -0,0 +1,129 @@ +/* + * An wb_spi_master driver for spi master device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include + +#include "wb_spi_master.h" + +static int g_wb_spi_master_debug = 0; +static int g_wb_spi_master_error = 0; + +module_param(g_wb_spi_master_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_spi_master_error, int, S_IRUGO | S_IWUSR); + +#define WB_SPI_MASTER_VERBOSE(fmt, args...) do { \ + if (g_wb_spi_master_debug) { \ + printk(KERN_INFO "[WB_SPI_MASTER][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_SPI_MASTER_ERROR(fmt, args...) do { \ + if (g_wb_spi_master_error) { \ + printk(KERN_ERR "[WB_SPI_MASTER][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static struct device g_wb_spi_device; +/* point to spi_master_class in drivers/spi/spi.c */ +static struct class *g_wb_spi_master_class = NULL; +static struct spi_controller *g_wb_spi_controller = NULL; + +static int __spi_controller_match(struct device *dev, const void *data) +{ + struct spi_controller *ctlr; + const u16 *bus_num = data; + + ctlr = container_of(dev, struct spi_controller, dev); + return ctlr->bus_num == *bus_num; +} + +/** + * wb_spi_master_busnum_to_master - look up master associated with bus_num + * @bus_num: the master's bus number + * Context: can sleep + * + * Return: the SPI master structure on success, else NULL. + */ +struct spi_controller *wb_spi_master_busnum_to_master(u16 bus_num) +{ + struct device *dev; + struct spi_controller *ctlr = NULL; + + WB_SPI_MASTER_VERBOSE("Enter.\n"); + + if (g_wb_spi_master_class == NULL) { + WB_SPI_MASTER_ERROR("get g_wb_spi_master_class fail.\n"); + return NULL; + } + + dev = class_find_device(g_wb_spi_master_class, NULL, &bus_num, __spi_controller_match); + if (dev) { + ctlr = container_of(dev, struct spi_controller, dev); + } + /* reference got in class_find_device */ + return ctlr; +} +EXPORT_SYMBOL_GPL(wb_spi_master_busnum_to_master); + +static int __init wb_spi_master_init(void) +{ + struct device *dev; + struct spi_board_info chip; + + WB_SPI_MASTER_VERBOSE("Enter!\n"); + + device_initialize(&g_wb_spi_device); + + g_wb_spi_controller = spi_alloc_master(&g_wb_spi_device, sizeof(struct spi_board_info)); + if (g_wb_spi_controller == NULL) { + WB_SPI_MASTER_ERROR("spi_alloc_master failed.\n"); + return -ENOMEM; + } + + g_wb_spi_master_class = g_wb_spi_controller->dev.class; + if (g_wb_spi_master_class == NULL) { + WB_SPI_MASTER_ERROR("get class_spi_master failed.\n"); + kfree(g_wb_spi_controller); + g_wb_spi_controller = NULL; + return -EINVAL; + } + printk(KERN_INFO "WB spi master init success."); + + return 0; +} + +static void __exit wb_spi_master_exit(void) +{ + WB_SPI_MASTER_VERBOSE("Enter!\n"); + if (g_wb_spi_controller != NULL) { + kfree(g_wb_spi_controller); + } + + return; +} + +module_init(wb_spi_master_init); +module_exit(wb_spi_master_exit); + +MODULE_AUTHOR("support"); +MODULE_DESCRIPTION("create spi device"); +MODULE_LICENSE("GPL"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.h b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.h new file mode 100644 index 000000000000..502ac68b5850 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_master.h @@ -0,0 +1,36 @@ +/* + * A header definition for wb_spi_master driver + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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. + */ + +#ifndef __WB_SPI_MASTER_H__ +#define __WB_SPI_MASTER_H__ + +#include +#include + +/** + * wb_spi_master_busnum_to_master - look up master associated with bus_num + * @bus_num: the master's bus number + * Context: can sleep + * + * Return: the SPI master structure on success, else NULL. + */ +struct spi_controller *wb_spi_master_busnum_to_master(u16 bus_num); + +#endif /* #ifndef __WB_SPI_MASTER_H__ */ \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_ocores_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_ocores_device.c new file mode 100644 index 000000000000..86073dc12f30 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/modules/driver/wb_spi_ocores_device.c @@ -0,0 +1,114 @@ +/* + * An wb_spi_ocores_device driver for spi ocores device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_spi_ocores_device_debug = 0; +static int g_wb_spi_ocores_device_error = 0; + +module_param(g_wb_spi_ocores_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_spi_ocores_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_SPI_OCORE_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_spi_ocores_device_debug) { \ + printk(KERN_INFO "[WB_SPI_OCORE_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_SPI_OCORE_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_spi_ocores_device_error) { \ + printk(KERN_ERR "[WB_SPI_OCORE_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static spi_ocores_device_t spi_ocores_device_data0 = { + .bus_num = 1, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 2, + .dev_base = 0x1900, + .reg_shift = 2, + .reg_io_width = 4, + .clock_frequency = 125000000, + .irq_flag = 0, + .num_chipselect = 8, +}; + +static void wb_spi_ocores_device_release(struct device *dev) +{ + return; +} + +static struct platform_device spi_ocores_device[] = { + { + .name = "wb-spioc", + .id = 1, + .dev = { + .platform_data = &spi_ocores_device_data0, + .release = wb_spi_ocores_device_release, + }, + }, +}; + +static int __init wb_spi_ocores_device_init(void) +{ + int i; + int ret = 0; + spi_ocores_device_t *spi_ocores_device_data; + + WB_SPI_OCORE_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(spi_ocores_device); i++) { + spi_ocores_device_data = spi_ocores_device[i].dev.platform_data; + ret = platform_device_register(&spi_ocores_device[i]); + if (ret < 0) { + spi_ocores_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-spi-oc.%d register failed!\n", i + 1); + } else { + spi_ocores_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_spi_ocores_device_exit(void) +{ + int i; + spi_ocores_device_t *spi_ocores_device_data; + + WB_SPI_OCORE_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(spi_ocores_device) - 1; i >= 0; i--) { + spi_ocores_device_data = spi_ocores_device[i].dev.platform_data; + if (spi_ocores_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&spi_ocores_device[i]); + } + } +} + +module_init(wb_spi_ocores_device_init); +module_exit(wb_spi_ocores_device_exit); +MODULE_DESCRIPTION("SPI OCORES Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg new file mode 100644 index 000000000000..53aa2be2aaea --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg @@ -0,0 +1,47 @@ +# configuration item: I2C address of CPLD +# format: cpld_i2c_dev.bus_[cpld_slot]_[cpld_id] cpld_i2c_dev.addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +# bus: I2C bus number of CPLD +# addr: I2C address of CPLD +cpld_i2c_dev.bus_0_2=109 +cpld_i2c_dev.addr_0_2=0x1d +cpld_i2c_dev.bus_0_3=110 +cpld_i2c_dev.addr_0_3=0x2d +cpld_i2c_dev.bus_0_4=111 +cpld_i2c_dev.addr_0_4=0x3d +cpld_i2c_dev.bus_0_5=112 +cpld_i2c_dev.addr_0_5=0x4d +cpld_i2c_dev.bus_0_6=92 +cpld_i2c_dev.addr_0_6=0x0d +cpld_i2c_dev.bus_0_7=101 +cpld_i2c_dev.addr_0_7=0x0d + + +# configuration item: LPC address of CPLD +# format: cpld_lpc_addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +cpld_lpc_dev_0_0=0x700 +cpld_lpc_dev_0_1=0x900 + + +# configuration item: CPLD access method, lpc or i2c +# format: mode_cpld_[cpld_slot][cpld_slot]=lpc/i2c +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +mode_cpld_0_0=lpc +mode_cpld_0_1=lpc +mode_cpld_0_2=i2c +mode_cpld_0_3=i2c +mode_cpld_0_4=i2c +mode_cpld_0_5=i2c +mode_cpld_0_6=i2c +mode_cpld_0_7=i2c + + +# configuration item: the number of CPLD +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: CPLD main_dev is 4 +# minor_dev: CPLD minor_dev not exist +dev_num_4_0=8 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg new file mode 100644 index 000000000000..c7f4b9de5594 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg @@ -0,0 +1,574 @@ +# configuration item: the number of fans +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: fan main_dev is 1 +# minor_dev: fan minor_dev not exist(0) +dev_num_1_0=8 + +# configuration item: the number of rotors +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: rotor main_dev is 1 +# minor_dev: rotor minor_dev is 5 +dev_num_1_5=2 + +# configuration item: fan presence status +# format: dev_present_status_[main_dev_id][fan_index] +# main_dev_id: fan main_dev_id is 1 +# fan_index: start from 1 +dev_present_status.mode_1_1=config +dev_present_status.src_1_1=cpld +dev_present_status.frmt_1_1=bit +dev_present_status.pola_1_1=negative +dev_present_status.addr_1_1=0x00060030 +dev_present_status.len_1_1=1 +dev_present_status.bit_offset_1_1=0 + +dev_present_status.mode_1_2=config +dev_present_status.src_1_2=cpld +dev_present_status.frmt_1_2=bit +dev_present_status.pola_1_2=negative +dev_present_status.addr_1_2=0x00070030 +dev_present_status.len_1_2=1 +dev_present_status.bit_offset_1_2=0 + +dev_present_status.mode_1_3=config +dev_present_status.src_1_3=cpld +dev_present_status.frmt_1_3=bit +dev_present_status.pola_1_3=negative +dev_present_status.addr_1_3=0x00060030 +dev_present_status.len_1_3=1 +dev_present_status.bit_offset_1_3=1 + +dev_present_status.mode_1_4=config +dev_present_status.src_1_4=cpld +dev_present_status.frmt_1_4=bit +dev_present_status.pola_1_4=negative +dev_present_status.addr_1_4=0x00070030 +dev_present_status.len_1_4=1 +dev_present_status.bit_offset_1_4=1 + +dev_present_status.mode_1_5=config +dev_present_status.src_1_5=cpld +dev_present_status.frmt_1_5=bit +dev_present_status.pola_1_5=negative +dev_present_status.addr_1_5=0x00060030 +dev_present_status.len_1_5=1 +dev_present_status.bit_offset_1_5=2 + +dev_present_status.mode_1_6=config +dev_present_status.src_1_6=cpld +dev_present_status.frmt_1_6=bit +dev_present_status.pola_1_6=negative +dev_present_status.addr_1_6=0x00070030 +dev_present_status.len_1_6=1 +dev_present_status.bit_offset_1_6=2 + +dev_present_status.mode_1_7=config +dev_present_status.src_1_7=cpld +dev_present_status.frmt_1_7=bit +dev_present_status.pola_1_7=negative +dev_present_status.addr_1_7=0x00060030 +dev_present_status.len_1_7=1 +dev_present_status.bit_offset_1_7=3 + +dev_present_status.mode_1_8=config +dev_present_status.src_1_8=cpld +dev_present_status.frmt_1_8=bit +dev_present_status.pola_1_8=negative +dev_present_status.addr_1_8=0x00070030 +dev_present_status.len_1_8=1 +dev_present_status.bit_offset_1_8=3 + + +# configuration item: fan rotor status +# format: fan_roll_status_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_roll_status.mode_1_0=config +fan_roll_status.int_cons_1_0= +fan_roll_status.src_1_0=cpld +fan_roll_status.frmt_1_0=bit +fan_roll_status.pola_1_0=positive +fan_roll_status.fpath_1_0= +fan_roll_status.addr_1_0=0x00060031 +fan_roll_status.len_1_0=1 +fan_roll_status.bit_offset_1_0=0 + +fan_roll_status.mode_1_1=config +fan_roll_status.int_cons_1_1= +fan_roll_status.src_1_1=cpld +fan_roll_status.frmt_1_1=bit +fan_roll_status.pola_1_1=positive +fan_roll_status.fpath_1_1= +fan_roll_status.addr_1_1=0x00060034 +fan_roll_status.len_1_1=1 +fan_roll_status.bit_offset_1_1=0 + +fan_roll_status.mode_2_0=config +fan_roll_status.int_cons_2_0= +fan_roll_status.src_2_0=cpld +fan_roll_status.frmt_2_0=bit +fan_roll_status.pola_2_0=positive +fan_roll_status.fpath_2_0= +fan_roll_status.addr_2_0=0x00070031 +fan_roll_status.len_2_0=1 +fan_roll_status.bit_offset_2_0=0 + +fan_roll_status.mode_2_1=config +fan_roll_status.int_cons_2_1= +fan_roll_status.src_2_1=cpld +fan_roll_status.frmt_2_1=bit +fan_roll_status.pola_2_1=positive +fan_roll_status.fpath_2_1= +fan_roll_status.addr_2_1=0x00070034 +fan_roll_status.len_2_1=1 +fan_roll_status.bit_offset_2_1=0 + +fan_roll_status.mode_3_0=config +fan_roll_status.int_cons_3_0= +fan_roll_status.src_3_0=cpld +fan_roll_status.frmt_3_0=bit +fan_roll_status.pola_3_0=positive +fan_roll_status.fpath_3_0= +fan_roll_status.addr_3_0=0x00060031 +fan_roll_status.len_3_0=1 +fan_roll_status.bit_offset_3_0=1 + +fan_roll_status.mode_3_1=config +fan_roll_status.int_cons_3_1= +fan_roll_status.src_3_1=cpld +fan_roll_status.frmt_3_1=bit +fan_roll_status.pola_3_1=positive +fan_roll_status.fpath_3_1= +fan_roll_status.addr_3_1=0x00060034 +fan_roll_status.len_3_1=1 +fan_roll_status.bit_offset_3_1=1 + +fan_roll_status.mode_4_0=config +fan_roll_status.int_cons_4_0= +fan_roll_status.src_4_0=cpld +fan_roll_status.frmt_4_0=bit +fan_roll_status.pola_4_0=positive +fan_roll_status.fpath_4_0= +fan_roll_status.addr_4_0=0x00070031 +fan_roll_status.len_4_0=1 +fan_roll_status.bit_offset_4_0=1 + +fan_roll_status.mode_4_1=config +fan_roll_status.int_cons_4_1= +fan_roll_status.src_4_1=cpld +fan_roll_status.frmt_4_1=bit +fan_roll_status.pola_4_1=positive +fan_roll_status.fpath_4_1= +fan_roll_status.addr_4_1=0x00070034 +fan_roll_status.len_4_1=1 +fan_roll_status.bit_offset_4_1=1 + +fan_roll_status.mode_5_0=config +fan_roll_status.int_cons_5_0= +fan_roll_status.src_5_0=cpld +fan_roll_status.frmt_5_0=bit +fan_roll_status.pola_5_0=positive +fan_roll_status.fpath_5_0= +fan_roll_status.addr_5_0=0x00060031 +fan_roll_status.len_5_0=1 +fan_roll_status.bit_offset_5_0=2 + +fan_roll_status.mode_5_1=config +fan_roll_status.int_cons_5_1= +fan_roll_status.src_5_1=cpld +fan_roll_status.frmt_5_1=bit +fan_roll_status.pola_5_1=positive +fan_roll_status.fpath_5_1= +fan_roll_status.addr_5_1=0x00060034 +fan_roll_status.len_5_1=1 +fan_roll_status.bit_offset_5_1=2 + +fan_roll_status.mode_6_0=config +fan_roll_status.int_cons_6_0= +fan_roll_status.src_6_0=cpld +fan_roll_status.frmt_6_0=bit +fan_roll_status.pola_6_0=positive +fan_roll_status.fpath_6_0= +fan_roll_status.addr_6_0=0x00070031 +fan_roll_status.len_6_0=1 +fan_roll_status.bit_offset_6_0=2 + +fan_roll_status.mode_6_1=config +fan_roll_status.int_cons_6_1= +fan_roll_status.src_6_1=cpld +fan_roll_status.frmt_6_1=bit +fan_roll_status.pola_6_1=positive +fan_roll_status.fpath_6_1= +fan_roll_status.addr_6_1=0x00070034 +fan_roll_status.len_6_1=1 +fan_roll_status.bit_offset_6_1=2 + +fan_roll_status.mode_7_0=config +fan_roll_status.int_cons_7_0= +fan_roll_status.src_7_0=cpld +fan_roll_status.frmt_7_0=bit +fan_roll_status.pola_7_0=positive +fan_roll_status.fpath_7_0= +fan_roll_status.addr_7_0=0x00060031 +fan_roll_status.len_7_0=1 +fan_roll_status.bit_offset_7_0=3 + +fan_roll_status.mode_7_1=config +fan_roll_status.int_cons_7_1= +fan_roll_status.src_7_1=cpld +fan_roll_status.frmt_7_1=bit +fan_roll_status.pola_7_1=positive +fan_roll_status.fpath_7_1= +fan_roll_status.addr_7_1=0x00060034 +fan_roll_status.len_7_1=1 +fan_roll_status.bit_offset_7_1=3 + +fan_roll_status.mode_8_0=config +fan_roll_status.int_cons_8_0= +fan_roll_status.src_8_0=cpld +fan_roll_status.frmt_8_0=bit +fan_roll_status.pola_8_0=positive +fan_roll_status.fpath_8_0= +fan_roll_status.addr_8_0=0x00070031 +fan_roll_status.len_8_0=1 +fan_roll_status.bit_offset_8_0=3 + +fan_roll_status.mode_8_1=config +fan_roll_status.int_cons_8_1= +fan_roll_status.src_8_1=cpld +fan_roll_status.frmt_8_1=bit +fan_roll_status.pola_8_1=positive +fan_roll_status.fpath_8_1= +fan_roll_status.addr_8_1=0x00070034 +fan_roll_status.len_8_1=1 +fan_roll_status.bit_offset_8_1=3 + + +# configuration item: fan speed +# format: fan_speed_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_speed.mode_1_0=config +fan_speed.int_cons_1_0= +fan_speed.src_1_0=cpld +fan_speed.frmt_1_0=num_bytes +fan_speed.pola_1_0=negative +fan_speed.fpath_1_0= +fan_speed.addr_1_0=0x0006001b +fan_speed.len_1_0=2 +fan_speed.bit_offset_1_0= + +fan_speed.mode_1_1=config +fan_speed.int_cons_1_1= +fan_speed.src_1_1=cpld +fan_speed.frmt_1_1=num_bytes +fan_speed.pola_1_1=negative +fan_speed.fpath_1_1= +fan_speed.addr_1_1=0x00060025 +fan_speed.len_1_1=2 +fan_speed.bit_offset_1_1= + +fan_speed.mode_2_0=config +fan_speed.int_cons_2_0= +fan_speed.src_2_0=cpld +fan_speed.frmt_2_0=num_bytes +fan_speed.pola_2_0=negative +fan_speed.fpath_2_0= +fan_speed.addr_2_0=0x0007001b +fan_speed.len_2_0=2 +fan_speed.bit_offset_2_0= + +fan_speed.mode_2_1=config +fan_speed.int_cons_2_1= +fan_speed.src_2_1=cpld +fan_speed.frmt_2_1=num_bytes +fan_speed.pola_2_1=negative +fan_speed.fpath_2_1= +fan_speed.addr_2_1=0x00070025 +fan_speed.len_2_1=2 +fan_speed.bit_offset_2_1= + +fan_speed.mode_3_0=config +fan_speed.int_cons_3_0= +fan_speed.src_3_0=cpld +fan_speed.frmt_3_0=num_bytes +fan_speed.pola_3_0=negative +fan_speed.fpath_3_0= +fan_speed.addr_3_0=0x0006001d +fan_speed.len_3_0=2 +fan_speed.bit_offset_3_0= + +fan_speed.mode_3_1=config +fan_speed.int_cons_3_1= +fan_speed.src_3_1=cpld +fan_speed.frmt_3_1=num_bytes +fan_speed.pola_3_1=negative +fan_speed.fpath_3_1= +fan_speed.addr_3_1=0x00060027 +fan_speed.len_3_1=2 +fan_speed.bit_offset_3_1= + +fan_speed.mode_4_0=config +fan_speed.int_cons_4_0= +fan_speed.src_4_0=cpld +fan_speed.frmt_4_0=num_bytes +fan_speed.pola_4_0=negative +fan_speed.fpath_4_0= +fan_speed.addr_4_0=0x0007001d +fan_speed.len_4_0=2 +fan_speed.bit_offset_4_0= + +fan_speed.mode_4_1=config +fan_speed.int_cons_4_1= +fan_speed.src_4_1=cpld +fan_speed.frmt_4_1=num_bytes +fan_speed.pola_4_1=negative +fan_speed.fpath_4_1= +fan_speed.addr_4_1=0x00070027 +fan_speed.len_4_1=2 +fan_speed.bit_offset_4_1= + +fan_speed.mode_5_0=config +fan_speed.int_cons_5_0= +fan_speed.src_5_0=cpld +fan_speed.frmt_5_0=num_bytes +fan_speed.pola_5_0=negative +fan_speed.fpath_5_0= +fan_speed.addr_5_0=0x0006001f +fan_speed.len_5_0=2 +fan_speed.bit_offset_5_0= + +fan_speed.mode_5_1=config +fan_speed.int_cons_5_1= +fan_speed.src_5_1=cpld +fan_speed.frmt_5_1=num_bytes +fan_speed.pola_5_1=negative +fan_speed.fpath_5_1= +fan_speed.addr_5_1=0x00060029 +fan_speed.len_5_1=2 +fan_speed.bit_offset_5_1= + +fan_speed.mode_6_0=config +fan_speed.int_cons_6_0= +fan_speed.src_6_0=cpld +fan_speed.frmt_6_0=num_bytes +fan_speed.pola_6_0=negative +fan_speed.fpath_6_0= +fan_speed.addr_6_0=0x0007001f +fan_speed.len_6_0=2 +fan_speed.bit_offset_6_0= + +fan_speed.mode_6_1=config +fan_speed.int_cons_6_1= +fan_speed.src_6_1=cpld +fan_speed.frmt_6_1=num_bytes +fan_speed.pola_6_1=negative +fan_speed.fpath_6_1= +fan_speed.addr_6_1=0x00070029 +fan_speed.len_6_1=2 +fan_speed.bit_offset_6_1= + +fan_speed.mode_7_0=config +fan_speed.int_cons_7_0= +fan_speed.src_7_0=cpld +fan_speed.frmt_7_0=num_bytes +fan_speed.pola_7_0=negative +fan_speed.fpath_7_0= +fan_speed.addr_7_0=0x00060021 +fan_speed.len_7_0=2 +fan_speed.bit_offset_7_0= + +fan_speed.mode_7_1=config +fan_speed.int_cons_7_1= +fan_speed.src_7_1=cpld +fan_speed.frmt_7_1=num_bytes +fan_speed.pola_7_1=negative +fan_speed.fpath_7_1= +fan_speed.addr_7_1=0x0006002b +fan_speed.len_7_1=2 +fan_speed.bit_offset_7_1= + +fan_speed.mode_8_0=config +fan_speed.int_cons_8_0= +fan_speed.src_8_0=cpld +fan_speed.frmt_8_0=num_bytes +fan_speed.pola_8_0=negative +fan_speed.fpath_8_0= +fan_speed.addr_8_0=0x00070021 +fan_speed.len_8_0=2 +fan_speed.bit_offset_8_0= + +fan_speed.mode_8_1=config +fan_speed.int_cons_8_1= +fan_speed.src_8_1=cpld +fan_speed.frmt_8_1=num_bytes +fan_speed.pola_8_1=negative +fan_speed.fpath_8_1= +fan_speed.addr_8_1=0x0007002b +fan_speed.len_8_1=2 +fan_speed.bit_offset_8_1= + + +# configuration item: fan pwm +# format: fan_ratio_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_ratio.mode_1_0=config +fan_ratio.int_cons_1_0= +fan_ratio.src_1_0=cpld +fan_ratio.frmt_1_0=byte +fan_ratio.pola_1_0= +fan_ratio.fpath_1_0= +fan_ratio.addr_1_0=0x00060014 +fan_ratio.len_1_0=1 +fan_ratio.bit_offset_1_0= + +fan_ratio.mode_1_1=config +fan_ratio.int_cons_1_1= +fan_ratio.src_1_1=cpld +fan_ratio.frmt_1_1=byte +fan_ratio.pola_1_1= +fan_ratio.fpath_1_1= +fan_ratio.addr_1_1=0x00060014 +fan_ratio.len_1_1=1 +fan_ratio.bit_offset_1_1= + +fan_ratio.mode_2_0=config +fan_ratio.int_cons_2_0= +fan_ratio.src_2_0=cpld +fan_ratio.frmt_2_0=byte +fan_ratio.pola_2_0= +fan_ratio.fpath_2_0= +fan_ratio.addr_2_0=0x00070014 +fan_ratio.len_2_0=1 +fan_ratio.bit_offset_2_0= + +fan_ratio.mode_2_1=config +fan_ratio.int_cons_2_1= +fan_ratio.src_2_1=cpld +fan_ratio.frmt_2_1=byte +fan_ratio.pola_2_1= +fan_ratio.fpath_2_1= +fan_ratio.addr_2_1=0x00070014 +fan_ratio.len_2_1=1 +fan_ratio.bit_offset_2_1= + +fan_ratio.mode_3_0=config +fan_ratio.int_cons_3_0= +fan_ratio.src_3_0=cpld +fan_ratio.frmt_3_0=byte +fan_ratio.pola_3_0= +fan_ratio.fpath_3_0= +fan_ratio.addr_3_0=0x00060015 +fan_ratio.len_3_0=1 +fan_ratio.bit_offset_3_0= + +fan_ratio.mode_3_1=config +fan_ratio.int_cons_3_1= +fan_ratio.src_3_1=cpld +fan_ratio.frmt_3_1=byte +fan_ratio.pola_3_1= +fan_ratio.fpath_3_1= +fan_ratio.addr_3_1=0x00060015 +fan_ratio.len_3_1=1 +fan_ratio.bit_offset_3_1= + +fan_ratio.mode_4_0=config +fan_ratio.int_cons_4_0= +fan_ratio.src_4_0=cpld +fan_ratio.frmt_4_0=byte +fan_ratio.pola_4_0= +fan_ratio.fpath_4_0= +fan_ratio.addr_4_0=0x00070015 +fan_ratio.len_4_0=1 +fan_ratio.bit_offset_4_0= + +fan_ratio.mode_4_1=config +fan_ratio.int_cons_4_1= +fan_ratio.src_4_1=cpld +fan_ratio.frmt_4_1=byte +fan_ratio.pola_4_1= +fan_ratio.fpath_4_1= +fan_ratio.addr_4_1=0x00070015 +fan_ratio.len_4_1=1 +fan_ratio.bit_offset_4_1= + +fan_ratio.mode_5_0=config +fan_ratio.int_cons_5_0= +fan_ratio.src_5_0=cpld +fan_ratio.frmt_5_0=byte +fan_ratio.pola_5_0= +fan_ratio.fpath_5_0= +fan_ratio.addr_5_0=0x00060016 +fan_ratio.len_5_0=1 +fan_ratio.bit_offset_5_0= + +fan_ratio.mode_5_1=config +fan_ratio.int_cons_5_1= +fan_ratio.src_5_1=cpld +fan_ratio.frmt_5_1=byte +fan_ratio.pola_5_1= +fan_ratio.fpath_5_1= +fan_ratio.addr_5_1=0x00060016 +fan_ratio.len_5_1=1 +fan_ratio.bit_offset_5_1= + +fan_ratio.mode_6_0=config +fan_ratio.int_cons_6_0= +fan_ratio.src_6_0=cpld +fan_ratio.frmt_6_0=byte +fan_ratio.pola_6_0= +fan_ratio.fpath_6_0= +fan_ratio.addr_6_0=0x00070016 +fan_ratio.len_6_0=1 +fan_ratio.bit_offset_6_0= + +fan_ratio.mode_6_1=config +fan_ratio.int_cons_6_1= +fan_ratio.src_6_1=cpld +fan_ratio.frmt_6_1=byte +fan_ratio.pola_6_1= +fan_ratio.fpath_6_1= +fan_ratio.addr_6_1=0x00070016 +fan_ratio.len_6_1=1 +fan_ratio.bit_offset_6_1= + +fan_ratio.mode_7_0=config +fan_ratio.int_cons_7_0= +fan_ratio.src_7_0=cpld +fan_ratio.frmt_7_0=byte +fan_ratio.pola_7_0= +fan_ratio.fpath_7_0= +fan_ratio.addr_7_0=0x00060017 +fan_ratio.len_7_0=1 +fan_ratio.bit_offset_7_0= + +fan_ratio.mode_7_1=config +fan_ratio.int_cons_7_1= +fan_ratio.src_7_1=cpld +fan_ratio.frmt_7_1=byte +fan_ratio.pola_7_1= +fan_ratio.fpath_7_1= +fan_ratio.addr_7_1=0x00060017 +fan_ratio.len_7_1=1 +fan_ratio.bit_offset_7_1= + +fan_ratio.mode_8_0=config +fan_ratio.int_cons_8_0= +fan_ratio.src_8_0=cpld +fan_ratio.frmt_8_0=byte +fan_ratio.pola_8_0= +fan_ratio.fpath_8_0= +fan_ratio.addr_8_0=0x00070017 +fan_ratio.len_8_0=1 +fan_ratio.bit_offset_8_0= + +fan_ratio.mode_8_1=config +fan_ratio.int_cons_8_1= +fan_ratio.src_8_1=cpld +fan_ratio.frmt_8_1=byte +fan_ratio.pola_8_1= +fan_ratio.fpath_8_1= +fan_ratio.addr_8_1=0x00070017 +fan_ratio.len_8_1=1 +fan_ratio.bit_offset_8_1= \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg new file mode 100644 index 000000000000..a04af1e63db8 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg @@ -0,0 +1,107 @@ +# configuration item: the number of psus +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: psu main_dev is 2 +# minor_dev: psu minor_dev not exist(0) +dev_num_2_0=4 + + +# configuration item: psu status +# format: psu_status_[psu_index]_[status_id] +# psu_index: start from 1 +# status_id: 0: presence 1: output 2: alert +# psu1 presence status +psu_status.mode_1_0=config +psu_status.src_1_0=cpld +psu_status.frmt_1_0=bit +psu_status.pola_1_0=negative +psu_status.addr_1_0=0x00010064 +psu_status.len_1_0=1 +psu_status.bit_offset_1_0=0 + +psu_status.mode_1_1=config +psu_status.src_1_1=cpld +psu_status.frmt_1_1=bit +psu_status.pola_1_1=positive +psu_status.addr_1_1=0x00010064 +psu_status.len_1_1=1 +psu_status.bit_offset_1_1=1 + +psu_status.mode_1_2=config +psu_status.src_1_2=cpld +psu_status.frmt_1_2=bit +psu_status.pola_1_2=negative +psu_status.addr_1_2=0x00010064 +psu_status.len_1_2=1 +psu_status.bit_offset_1_2=2 + +psu_status.mode_2_0=config +psu_status.src_2_0=cpld +psu_status.frmt_2_0=bit +psu_status.pola_2_0=negative +psu_status.addr_2_0=0x00010064 +psu_status.len_2_0=1 +psu_status.bit_offset_2_0=4 + +psu_status.mode_2_1=config +psu_status.src_2_1=cpld +psu_status.frmt_2_1=bit +psu_status.pola_2_1=positive +psu_status.addr_2_1=0x00010064 +psu_status.len_2_1=1 +psu_status.bit_offset_2_1=5 + +psu_status.mode_2_2=config +psu_status.src_2_2=cpld +psu_status.frmt_2_2=bit +psu_status.pola_2_2=negative +psu_status.addr_2_2=0x00010064 +psu_status.len_2_2=1 +psu_status.bit_offset_2_2=6 + +psu_status.mode_3_0=config +psu_status.src_3_0=cpld +psu_status.frmt_3_0=bit +psu_status.pola_3_0=negative +psu_status.addr_3_0=0x00010065 +psu_status.len_3_0=1 +psu_status.bit_offset_3_0=4 + +psu_status.mode_3_1=config +psu_status.src_3_1=cpld +psu_status.frmt_3_1=bit +psu_status.pola_3_1=positive +psu_status.addr_3_1=0x00010065 +psu_status.len_3_1=1 +psu_status.bit_offset_3_1=5 + +psu_status.mode_3_2=config +psu_status.src_3_2=cpld +psu_status.frmt_3_2=bit +psu_status.pola_3_2=negative +psu_status.addr_3_2=0x00010065 +psu_status.len_3_2=1 +psu_status.bit_offset_3_2=6 + +psu_status.mode_4_0=config +psu_status.src_4_0=cpld +psu_status.frmt_4_0=bit +psu_status.pola_4_0=negative +psu_status.addr_4_0=0x00010065 +psu_status.len_4_0=1 +psu_status.bit_offset_4_0=0 + +psu_status.mode_4_1=config +psu_status.src_4_1=cpld +psu_status.frmt_4_1=bit +psu_status.pola_4_1=positive +psu_status.addr_4_1=0x00010065 +psu_status.len_4_1=1 +psu_status.bit_offset_4_1=1 + +psu_status.mode_4_2=config +psu_status.src_4_2=cpld +psu_status.frmt_4_2=bit +psu_status.pola_4_2=negative +psu_status.addr_4_2=0x00010065 +psu_status.len_4_2=1 +psu_status.bit_offset_4_2=2 \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg new file mode 100644 index 000000000000..075073962a2e --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg @@ -0,0 +1,593 @@ +# configuration item: the number of sffs +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: sff main_dev is 3 +# minor_dev: sff minor_dev not exist(0) +dev_num_3_0=64 + + +# configuration item: The directory name of sff sysfs +# format: sff_dir_name_[sff_index] +# sff_index: start from 1 +sff_dir_name_1 =sff1 +sff_dir_name_2 =sff2 +sff_dir_name_3 =sff3 +sff_dir_name_4 =sff4 +sff_dir_name_5 =sff5 +sff_dir_name_6 =sff6 +sff_dir_name_7 =sff7 +sff_dir_name_8 =sff8 +sff_dir_name_9 =sff9 +sff_dir_name_10 =sff10 +sff_dir_name_11 =sff11 +sff_dir_name_12 =sff12 +sff_dir_name_13 =sff13 +sff_dir_name_14 =sff14 +sff_dir_name_15 =sff15 +sff_dir_name_16 =sff16 +sff_dir_name_17 =sff17 +sff_dir_name_18 =sff18 +sff_dir_name_19 =sff19 +sff_dir_name_20 =sff20 +sff_dir_name_21 =sff21 +sff_dir_name_22 =sff22 +sff_dir_name_23 =sff23 +sff_dir_name_24 =sff24 +sff_dir_name_25 =sff25 +sff_dir_name_26 =sff26 +sff_dir_name_27 =sff27 +sff_dir_name_28 =sff28 +sff_dir_name_29 =sff29 +sff_dir_name_30 =sff30 +sff_dir_name_31 =sff31 +sff_dir_name_32 =sff32 +sff_dir_name_33 =sff33 +sff_dir_name_34 =sff34 +sff_dir_name_35 =sff35 +sff_dir_name_36 =sff36 +sff_dir_name_37 =sff37 +sff_dir_name_38 =sff38 +sff_dir_name_39 =sff39 +sff_dir_name_40 =sff40 +sff_dir_name_41 =sff41 +sff_dir_name_42 =sff42 +sff_dir_name_43 =sff43 +sff_dir_name_44 =sff44 +sff_dir_name_45 =sff45 +sff_dir_name_46 =sff46 +sff_dir_name_47 =sff47 +sff_dir_name_48 =sff48 +sff_dir_name_49 =sff49 +sff_dir_name_50 =sff50 +sff_dir_name_51 =sff51 +sff_dir_name_52 =sff52 +sff_dir_name_53 =sff53 +sff_dir_name_54 =sff54 +sff_dir_name_55 =sff55 +sff_dir_name_56 =sff56 +sff_dir_name_57 =sff57 +sff_dir_name_58 =sff58 +sff_dir_name_59 =sff59 +sff_dir_name_60 =sff60 +sff_dir_name_61 =sff61 +sff_dir_name_62 =sff62 +sff_dir_name_63 =sff63 +sff_dir_name_64 =sff64 + +# configuration item: sff cpld register status +# format: sff_cpld_reg_[sff_index]_[cpld_reg] +# sff_index: start from 1 +# cpld_reg: 1: power_on, 2: tx_fault, 3: tx_dis, 4:pre_n, 5:rx_los +# 6: reset, 7: lpmode, 8: module_present, 9: interrupt + +# sff cpld presence status +sff_cpld_reg.mode_1_8=config +sff_cpld_reg.src_1_8=cpld +sff_cpld_reg.frmt_1_8=bit +sff_cpld_reg.pola_1_8=negative +sff_cpld_reg.addr_1_8=0x00030073 +sff_cpld_reg.len_1_8=1 +sff_cpld_reg.bit_offset_1_8=0 + +sff_cpld_reg.mode_2_8=config +sff_cpld_reg.src_2_8=cpld +sff_cpld_reg.frmt_2_8=bit +sff_cpld_reg.pola_2_8=negative +sff_cpld_reg.addr_2_8=0x00030073 +sff_cpld_reg.len_2_8=1 +sff_cpld_reg.bit_offset_2_8=1 + +sff_cpld_reg.mode_3_8=config +sff_cpld_reg.src_3_8=cpld +sff_cpld_reg.frmt_3_8=bit +sff_cpld_reg.pola_3_8=negative +sff_cpld_reg.addr_3_8=0x00040072 +sff_cpld_reg.len_3_8=1 +sff_cpld_reg.bit_offset_3_8=0 + +sff_cpld_reg.mode_4_8=config +sff_cpld_reg.src_4_8=cpld +sff_cpld_reg.frmt_4_8=bit +sff_cpld_reg.pola_4_8=negative +sff_cpld_reg.addr_4_8=0x00040072 +sff_cpld_reg.len_4_8=1 +sff_cpld_reg.bit_offset_4_8=1 + +sff_cpld_reg.mode_5_8=config +sff_cpld_reg.src_5_8=cpld +sff_cpld_reg.frmt_5_8=bit +sff_cpld_reg.pola_5_8=negative +sff_cpld_reg.addr_5_8=0x00030073 +sff_cpld_reg.len_5_8=1 +sff_cpld_reg.bit_offset_5_8=2 + +sff_cpld_reg.mode_6_8=config +sff_cpld_reg.src_6_8=cpld +sff_cpld_reg.frmt_6_8=bit +sff_cpld_reg.pola_6_8=negative +sff_cpld_reg.addr_6_8=0x00030073 +sff_cpld_reg.len_6_8=1 +sff_cpld_reg.bit_offset_6_8=3 + +sff_cpld_reg.mode_7_8=config +sff_cpld_reg.src_7_8=cpld +sff_cpld_reg.frmt_7_8=bit +sff_cpld_reg.pola_7_8=negative +sff_cpld_reg.addr_7_8=0x00040072 +sff_cpld_reg.len_7_8=1 +sff_cpld_reg.bit_offset_7_8=2 + +sff_cpld_reg.mode_8_8=config +sff_cpld_reg.src_8_8=cpld +sff_cpld_reg.frmt_8_8=bit +sff_cpld_reg.pola_8_8=negative +sff_cpld_reg.addr_8_8=0x00040072 +sff_cpld_reg.len_8_8=1 +sff_cpld_reg.bit_offset_8_8=3 + +sff_cpld_reg.mode_9_8=config +sff_cpld_reg.src_9_8=cpld +sff_cpld_reg.frmt_9_8=bit +sff_cpld_reg.pola_9_8=negative +sff_cpld_reg.addr_9_8=0x00030073 +sff_cpld_reg.len_9_8=1 +sff_cpld_reg.bit_offset_9_8=4 + +sff_cpld_reg.mode_10_8=config +sff_cpld_reg.src_10_8=cpld +sff_cpld_reg.frmt_10_8=bit +sff_cpld_reg.pola_10_8=negative +sff_cpld_reg.addr_10_8=0x00030073 +sff_cpld_reg.len_10_8=1 +sff_cpld_reg.bit_offset_10_8=5 + +sff_cpld_reg.mode_11_8=config +sff_cpld_reg.src_11_8=cpld +sff_cpld_reg.frmt_11_8=bit +sff_cpld_reg.pola_11_8=negative +sff_cpld_reg.addr_11_8=0x00040072 +sff_cpld_reg.len_11_8=1 +sff_cpld_reg.bit_offset_11_8=4 + +sff_cpld_reg.mode_12_8=config +sff_cpld_reg.src_12_8=cpld +sff_cpld_reg.frmt_12_8=bit +sff_cpld_reg.pola_12_8=negative +sff_cpld_reg.addr_12_8=0x00040072 +sff_cpld_reg.len_12_8=1 +sff_cpld_reg.bit_offset_12_8=5 + +sff_cpld_reg.mode_13_8=config +sff_cpld_reg.src_13_8=cpld +sff_cpld_reg.frmt_13_8=bit +sff_cpld_reg.pola_13_8=negative +sff_cpld_reg.addr_13_8=0x00030073 +sff_cpld_reg.len_13_8=1 +sff_cpld_reg.bit_offset_13_8=6 + +sff_cpld_reg.mode_14_8=config +sff_cpld_reg.src_14_8=cpld +sff_cpld_reg.frmt_14_8=bit +sff_cpld_reg.pola_14_8=negative +sff_cpld_reg.addr_14_8=0x00030073 +sff_cpld_reg.len_14_8=1 +sff_cpld_reg.bit_offset_14_8=7 + +sff_cpld_reg.mode_15_8=config +sff_cpld_reg.src_15_8=cpld +sff_cpld_reg.frmt_15_8=bit +sff_cpld_reg.pola_15_8=negative +sff_cpld_reg.addr_15_8=0x00040072 +sff_cpld_reg.len_15_8=1 +sff_cpld_reg.bit_offset_15_8=6 + +sff_cpld_reg.mode_16_8=config +sff_cpld_reg.src_16_8=cpld +sff_cpld_reg.frmt_16_8=bit +sff_cpld_reg.pola_16_8=negative +sff_cpld_reg.addr_16_8=0x00040072 +sff_cpld_reg.len_16_8=1 +sff_cpld_reg.bit_offset_16_8=7 + +sff_cpld_reg.mode_17_8=config +sff_cpld_reg.src_17_8=cpld +sff_cpld_reg.frmt_17_8=bit +sff_cpld_reg.pola_17_8=negative +sff_cpld_reg.addr_17_8=0x00030074 +sff_cpld_reg.len_17_8=1 +sff_cpld_reg.bit_offset_17_8=0 + +sff_cpld_reg.mode_18_8=config +sff_cpld_reg.src_18_8=cpld +sff_cpld_reg.frmt_18_8=bit +sff_cpld_reg.pola_18_8=negative +sff_cpld_reg.addr_18_8=0x00030074 +sff_cpld_reg.len_18_8=1 +sff_cpld_reg.bit_offset_18_8=1 + +sff_cpld_reg.mode_19_8=config +sff_cpld_reg.src_19_8=cpld +sff_cpld_reg.frmt_19_8=bit +sff_cpld_reg.pola_19_8=negative +sff_cpld_reg.addr_19_8=0x00050073 +sff_cpld_reg.len_19_8=1 +sff_cpld_reg.bit_offset_19_8=0 + +sff_cpld_reg.mode_20_8=config +sff_cpld_reg.src_20_8=cpld +sff_cpld_reg.frmt_20_8=bit +sff_cpld_reg.pola_20_8=negative +sff_cpld_reg.addr_20_8=0x00040073 +sff_cpld_reg.len_20_8=1 +sff_cpld_reg.bit_offset_20_8=0 + +sff_cpld_reg.mode_21_8=config +sff_cpld_reg.src_21_8=cpld +sff_cpld_reg.frmt_21_8=bit +sff_cpld_reg.pola_21_8=negative +sff_cpld_reg.addr_21_8=0x00030074 +sff_cpld_reg.len_21_8=1 +sff_cpld_reg.bit_offset_21_8=2 + +sff_cpld_reg.mode_22_8=config +sff_cpld_reg.src_22_8=cpld +sff_cpld_reg.frmt_22_8=bit +sff_cpld_reg.pola_22_8=negative +sff_cpld_reg.addr_22_8=0x00030074 +sff_cpld_reg.len_22_8=1 +sff_cpld_reg.bit_offset_22_8=3 + +sff_cpld_reg.mode_23_8=config +sff_cpld_reg.src_23_8=cpld +sff_cpld_reg.frmt_23_8=bit +sff_cpld_reg.pola_23_8=negative +sff_cpld_reg.addr_23_8=0x00040073 +sff_cpld_reg.len_23_8=1 +sff_cpld_reg.bit_offset_23_8=1 + +sff_cpld_reg.mode_24_8=config +sff_cpld_reg.src_24_8=cpld +sff_cpld_reg.frmt_24_8=bit +sff_cpld_reg.pola_24_8=negative +sff_cpld_reg.addr_24_8=0x00040073 +sff_cpld_reg.len_24_8=1 +sff_cpld_reg.bit_offset_24_8=2 + +sff_cpld_reg.mode_25_8=config +sff_cpld_reg.src_25_8=cpld +sff_cpld_reg.frmt_25_8=bit +sff_cpld_reg.pola_25_8=negative +sff_cpld_reg.addr_25_8=0x00030074 +sff_cpld_reg.len_25_8=1 +sff_cpld_reg.bit_offset_25_8=4 + +sff_cpld_reg.mode_26_8=config +sff_cpld_reg.src_26_8=cpld +sff_cpld_reg.frmt_26_8=bit +sff_cpld_reg.pola_26_8=negative +sff_cpld_reg.addr_26_8=0x00030074 +sff_cpld_reg.len_26_8=1 +sff_cpld_reg.bit_offset_26_8=5 + +sff_cpld_reg.mode_27_8=config +sff_cpld_reg.src_27_8=cpld +sff_cpld_reg.frmt_27_8=bit +sff_cpld_reg.pola_27_8=negative +sff_cpld_reg.addr_27_8=0x00040073 +sff_cpld_reg.len_27_8=1 +sff_cpld_reg.bit_offset_27_8=3 + +sff_cpld_reg.mode_28_8=config +sff_cpld_reg.src_28_8=cpld +sff_cpld_reg.frmt_28_8=bit +sff_cpld_reg.pola_28_8=negative +sff_cpld_reg.addr_28_8=0x00040073 +sff_cpld_reg.len_28_8=1 +sff_cpld_reg.bit_offset_28_8=4 + +sff_cpld_reg.mode_29_8=config +sff_cpld_reg.src_29_8=cpld +sff_cpld_reg.frmt_29_8=bit +sff_cpld_reg.pola_29_8=negative +sff_cpld_reg.addr_29_8=0x00030074 +sff_cpld_reg.len_29_8=1 +sff_cpld_reg.bit_offset_29_8=6 + +sff_cpld_reg.mode_30_8=config +sff_cpld_reg.src_30_8=cpld +sff_cpld_reg.frmt_30_8=bit +sff_cpld_reg.pola_30_8=negative +sff_cpld_reg.addr_30_8=0x00030074 +sff_cpld_reg.len_30_8=1 +sff_cpld_reg.bit_offset_30_8=7 + +sff_cpld_reg.mode_31_8=config +sff_cpld_reg.src_31_8=cpld +sff_cpld_reg.frmt_31_8=bit +sff_cpld_reg.pola_31_8=negative +sff_cpld_reg.addr_31_8=0x00040073 +sff_cpld_reg.len_31_8=1 +sff_cpld_reg.bit_offset_31_8=5 + +sff_cpld_reg.mode_32_8=config +sff_cpld_reg.src_32_8=cpld +sff_cpld_reg.frmt_32_8=bit +sff_cpld_reg.pola_32_8=negative +sff_cpld_reg.addr_32_8=0x00040073 +sff_cpld_reg.len_32_8=1 +sff_cpld_reg.bit_offset_32_8=6 + +sff_cpld_reg.mode_33_8=config +sff_cpld_reg.src_33_8=cpld +sff_cpld_reg.frmt_33_8=bit +sff_cpld_reg.pola_33_8=negative +sff_cpld_reg.addr_33_8=0x00030075 +sff_cpld_reg.len_33_8=1 +sff_cpld_reg.bit_offset_33_8=0 + +sff_cpld_reg.mode_34_8=config +sff_cpld_reg.src_34_8=cpld +sff_cpld_reg.frmt_34_8=bit +sff_cpld_reg.pola_34_8=negative +sff_cpld_reg.addr_34_8=0x00030075 +sff_cpld_reg.len_34_8=1 +sff_cpld_reg.bit_offset_34_8=1 + +sff_cpld_reg.mode_35_8=config +sff_cpld_reg.src_35_8=cpld +sff_cpld_reg.frmt_35_8=bit +sff_cpld_reg.pola_35_8=negative +sff_cpld_reg.addr_35_8=0x00050073 +sff_cpld_reg.len_35_8=1 +sff_cpld_reg.bit_offset_35_8=1 + +sff_cpld_reg.mode_36_8=config +sff_cpld_reg.src_36_8=cpld +sff_cpld_reg.frmt_36_8=bit +sff_cpld_reg.pola_36_8=negative +sff_cpld_reg.addr_36_8=0x00050073 +sff_cpld_reg.len_36_8=1 +sff_cpld_reg.bit_offset_36_8=2 + +sff_cpld_reg.mode_37_8=config +sff_cpld_reg.src_37_8=cpld +sff_cpld_reg.frmt_37_8=bit +sff_cpld_reg.pola_37_8=negative +sff_cpld_reg.addr_37_8=0x00030075 +sff_cpld_reg.len_37_8=1 +sff_cpld_reg.bit_offset_37_8=2 + +sff_cpld_reg.mode_38_8=config +sff_cpld_reg.src_38_8=cpld +sff_cpld_reg.frmt_38_8=bit +sff_cpld_reg.pola_38_8=negative +sff_cpld_reg.addr_38_8=0x00030075 +sff_cpld_reg.len_38_8=1 +sff_cpld_reg.bit_offset_38_8=3 + +sff_cpld_reg.mode_39_8=config +sff_cpld_reg.src_39_8=cpld +sff_cpld_reg.frmt_39_8=bit +sff_cpld_reg.pola_39_8=negative +sff_cpld_reg.addr_39_8=0x00050073 +sff_cpld_reg.len_39_8=1 +sff_cpld_reg.bit_offset_39_8=3 + +sff_cpld_reg.mode_40_8=config +sff_cpld_reg.src_40_8=cpld +sff_cpld_reg.frmt_40_8=bit +sff_cpld_reg.pola_40_8=negative +sff_cpld_reg.addr_40_8=0x00050073 +sff_cpld_reg.len_40_8=1 +sff_cpld_reg.bit_offset_40_8=4 + +sff_cpld_reg.mode_41_8=config +sff_cpld_reg.src_41_8=cpld +sff_cpld_reg.frmt_41_8=bit +sff_cpld_reg.pola_41_8=negative +sff_cpld_reg.addr_41_8=0x00030075 +sff_cpld_reg.len_41_8=1 +sff_cpld_reg.bit_offset_41_8=4 + +sff_cpld_reg.mode_42_8=config +sff_cpld_reg.src_42_8=cpld +sff_cpld_reg.frmt_42_8=bit +sff_cpld_reg.pola_42_8=negative +sff_cpld_reg.addr_42_8=0x00030075 +sff_cpld_reg.len_42_8=1 +sff_cpld_reg.bit_offset_42_8=5 + +sff_cpld_reg.mode_43_8=config +sff_cpld_reg.src_43_8=cpld +sff_cpld_reg.frmt_43_8=bit +sff_cpld_reg.pola_43_8=negative +sff_cpld_reg.addr_43_8=0x00050073 +sff_cpld_reg.len_43_8=1 +sff_cpld_reg.bit_offset_43_8=5 + +sff_cpld_reg.mode_44_8=config +sff_cpld_reg.src_44_8=cpld +sff_cpld_reg.frmt_44_8=bit +sff_cpld_reg.pola_44_8=negative +sff_cpld_reg.addr_44_8=0x00050073 +sff_cpld_reg.len_44_8=1 +sff_cpld_reg.bit_offset_44_8=6 + +sff_cpld_reg.mode_45_8=config +sff_cpld_reg.src_45_8=cpld +sff_cpld_reg.frmt_45_8=bit +sff_cpld_reg.pola_45_8=negative +sff_cpld_reg.addr_45_8=0x00030075 +sff_cpld_reg.len_45_8=1 +sff_cpld_reg.bit_offset_45_8=6 + +sff_cpld_reg.mode_46_8=config +sff_cpld_reg.src_46_8=cpld +sff_cpld_reg.frmt_46_8=bit +sff_cpld_reg.pola_46_8=negative +sff_cpld_reg.addr_46_8=0x00030075 +sff_cpld_reg.len_46_8=1 +sff_cpld_reg.bit_offset_46_8=7 + +sff_cpld_reg.mode_47_8=config +sff_cpld_reg.src_47_8=cpld +sff_cpld_reg.frmt_47_8=bit +sff_cpld_reg.pola_47_8=negative +sff_cpld_reg.addr_47_8=0x00050073 +sff_cpld_reg.len_47_8=1 +sff_cpld_reg.bit_offset_47_8=7 + +sff_cpld_reg.mode_48_8=config +sff_cpld_reg.src_48_8=cpld +sff_cpld_reg.frmt_48_8=bit +sff_cpld_reg.pola_48_8=negative +sff_cpld_reg.addr_48_8=0x00050074 +sff_cpld_reg.len_48_8=1 +sff_cpld_reg.bit_offset_48_8=0 + +sff_cpld_reg.mode_49_8=config +sff_cpld_reg.src_49_8=cpld +sff_cpld_reg.frmt_49_8=bit +sff_cpld_reg.pola_49_8=negative +sff_cpld_reg.addr_49_8=0x00020071 +sff_cpld_reg.len_49_8=1 +sff_cpld_reg.bit_offset_49_8=0 + +sff_cpld_reg.mode_50_8=config +sff_cpld_reg.src_50_8=cpld +sff_cpld_reg.frmt_50_8=bit +sff_cpld_reg.pola_50_8=negative +sff_cpld_reg.addr_50_8=0x00020071 +sff_cpld_reg.len_50_8=1 +sff_cpld_reg.bit_offset_50_8=1 + +sff_cpld_reg.mode_51_8=config +sff_cpld_reg.src_51_8=cpld +sff_cpld_reg.frmt_51_8=bit +sff_cpld_reg.pola_51_8=negative +sff_cpld_reg.addr_51_8=0x00050074 +sff_cpld_reg.len_51_8=1 +sff_cpld_reg.bit_offset_51_8=1 + +sff_cpld_reg.mode_52_8=config +sff_cpld_reg.src_52_8=cpld +sff_cpld_reg.frmt_52_8=bit +sff_cpld_reg.pola_52_8=negative +sff_cpld_reg.addr_52_8=0x00050074 +sff_cpld_reg.len_52_8=1 +sff_cpld_reg.bit_offset_52_8=2 + +sff_cpld_reg.mode_53_8=config +sff_cpld_reg.src_53_8=cpld +sff_cpld_reg.frmt_53_8=bit +sff_cpld_reg.pola_53_8=negative +sff_cpld_reg.addr_53_8=0x00020071 +sff_cpld_reg.len_53_8=1 +sff_cpld_reg.bit_offset_53_8=2 + +sff_cpld_reg.mode_54_8=config +sff_cpld_reg.src_54_8=cpld +sff_cpld_reg.frmt_54_8=bit +sff_cpld_reg.pola_54_8=negative +sff_cpld_reg.addr_54_8=0x00020071 +sff_cpld_reg.len_54_8=1 +sff_cpld_reg.bit_offset_54_8=3 + +sff_cpld_reg.mode_55_8=config +sff_cpld_reg.src_55_8=cpld +sff_cpld_reg.frmt_55_8=bit +sff_cpld_reg.pola_55_8=negative +sff_cpld_reg.addr_55_8=0x00050074 +sff_cpld_reg.len_55_8=1 +sff_cpld_reg.bit_offset_55_8=3 + +sff_cpld_reg.mode_56_8=config +sff_cpld_reg.src_56_8=cpld +sff_cpld_reg.frmt_56_8=bit +sff_cpld_reg.pola_56_8=negative +sff_cpld_reg.addr_56_8=0x00050074 +sff_cpld_reg.len_56_8=1 +sff_cpld_reg.bit_offset_56_8=4 + +sff_cpld_reg.mode_57_8=config +sff_cpld_reg.src_57_8=cpld +sff_cpld_reg.frmt_57_8=bit +sff_cpld_reg.pola_57_8=negative +sff_cpld_reg.addr_57_8=0x00020071 +sff_cpld_reg.len_57_8=1 +sff_cpld_reg.bit_offset_57_8=4 + +sff_cpld_reg.mode_58_8=config +sff_cpld_reg.src_58_8=cpld +sff_cpld_reg.frmt_58_8=bit +sff_cpld_reg.pola_58_8=negative +sff_cpld_reg.addr_58_8=0x00020071 +sff_cpld_reg.len_58_8=1 +sff_cpld_reg.bit_offset_58_8=5 + +sff_cpld_reg.mode_59_8=config +sff_cpld_reg.src_59_8=cpld +sff_cpld_reg.frmt_59_8=bit +sff_cpld_reg.pola_59_8=negative +sff_cpld_reg.addr_59_8=0x00050074 +sff_cpld_reg.len_59_8=1 +sff_cpld_reg.bit_offset_59_8=5 + +sff_cpld_reg.mode_60_8=config +sff_cpld_reg.src_60_8=cpld +sff_cpld_reg.frmt_60_8=bit +sff_cpld_reg.pola_60_8=negative +sff_cpld_reg.addr_60_8=0x00050074 +sff_cpld_reg.len_60_8=1 +sff_cpld_reg.bit_offset_60_8=6 + +sff_cpld_reg.mode_61_8=config +sff_cpld_reg.src_61_8=cpld +sff_cpld_reg.frmt_61_8=bit +sff_cpld_reg.pola_61_8=negative +sff_cpld_reg.addr_61_8=0x00020071 +sff_cpld_reg.len_61_8=1 +sff_cpld_reg.bit_offset_61_8=6 + +sff_cpld_reg.mode_62_8=config +sff_cpld_reg.src_62_8=cpld +sff_cpld_reg.frmt_62_8=bit +sff_cpld_reg.pola_62_8=negative +sff_cpld_reg.addr_62_8=0x00020071 +sff_cpld_reg.len_62_8=1 +sff_cpld_reg.bit_offset_62_8=7 + +sff_cpld_reg.mode_63_8=config +sff_cpld_reg.src_63_8=cpld +sff_cpld_reg.frmt_63_8=bit +sff_cpld_reg.pola_63_8=negative +sff_cpld_reg.addr_63_8=0x00050074 +sff_cpld_reg.len_63_8=1 +sff_cpld_reg.bit_offset_63_8=7 + +sff_cpld_reg.mode_64_8=config +sff_cpld_reg.src_64_8=cpld +sff_cpld_reg.frmt_64_8=bit +sff_cpld_reg.pola_64_8=negative +sff_cpld_reg.addr_64_8=0x00050075 +sff_cpld_reg.len_64_8=1 +sff_cpld_reg.bit_offset_64_8=0 \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/cfg_file_name b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/cfg_file_name new file mode 100644 index 000000000000..5f49420441a5 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/plat_sysfs_cfg/cfg_file_name @@ -0,0 +1,4 @@ +WB_PLAT_CPLD +WB_PLAT_FAN +WB_PLAT_PSU +WB_PLAT_SFF diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/setup.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/setup.py new file mode 100644 index 000000000000..6c3916921abb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6930-64qc/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation', + license='Apache 2.0', + author='SONiC Team', + author_email='support', + url='', + maintainer='support', + maintainer_email='', + packages=[ + 'sonic_platform', + 'plat_hal', + 'wbutil', + 'eepromutil', + 'hal-config', + 'config', + ], + py_modules=[ + 'hal_pltfm', + 'platform_util', + 'platform_intf', + ], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/Makefile new file mode 100644 index 000000000000..0ddc80aae7d2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/Makefile @@ -0,0 +1,30 @@ +PWD = $(shell pwd) +DIR_KERNEL_SRC = $(PWD)/modules/driver +EXTRA_CFLAGS:= -I$(M)/include +EXTRA_CFLAGS+= -Wall +SUB_BUILD_DIR = $(PWD)/build +INSTALL_DIR = $(SUB_BUILD_DIR)/$(KERNEL_SRC)/$(INSTALL_MOD_DIR) +INSTALL_SCRIPT_DIR = $(SUB_BUILD_DIR)/usr/local/bin +INSTALL_LIB_DIR = $(SUB_BUILD_DIR)/usr/lib/python3/dist-packages +INSTALL_SYSFS_CFG_DIR = $(SUB_BUILD_DIR)/etc/plat_sysfs_cfg +INSTALL_SERVICE_DIR = $(SUB_BUILD_DIR)/lib/systemd/system + +all: + $(MAKE) -C $(KBUILD_OUTPUT) M=$(DIR_KERNEL_SRC) modules + @if [ ! -d ${INSTALL_DIR} ]; then mkdir -p ${INSTALL_DIR} ;fi + cp -r $(DIR_KERNEL_SRC)/*.ko $(INSTALL_DIR) + @if [ ! -d ${INSTALL_SCRIPT_DIR} ]; then mkdir -p ${INSTALL_SCRIPT_DIR} ;fi + cp -r $(PWD)/config/* $(INSTALL_SCRIPT_DIR) + @if [ ! -d ${INSTALL_LIB_DIR} ]; then mkdir -p ${INSTALL_LIB_DIR} ;fi + @if [ -d $(PWD)/sonic_platform/ ]; then rm -rf ${INSTALL_LIB_DIR}/sonic_platform ;fi + @if [ -d $(PWD)/sonic_platform/ ]; then cp -rf $(PWD)/sonic_platform ${INSTALL_LIB_DIR} ;fi + @if [ -d $(PWD)/hal-config/ ]; then cp -r $(PWD)/hal-config/* ${INSTALL_LIB_DIR} ;fi + @if [ ! -d ${INSTALL_SYSFS_CFG_DIR} ]; then mkdir -p ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ -d $(PWD)/plat_sysfs_cfg/ ]; then cp -r $(PWD)/plat_sysfs_cfg/* ${INSTALL_SYSFS_CFG_DIR} ;fi + @if [ ! -d ${INSTALL_SERVICE_DIR} ]; then mkdir -p ${INSTALL_SERVICE_DIR} ;fi + @if [ -d $(PWD)/service/ ]; then cp -r $(PWD)/service/* ${INSTALL_SERVICE_DIR} ;fi +clean: + rm -f ${DIR_KERNEL_SRC}/*.o ${DIR_KERNEL_SRC}/*.ko ${DIR_KERNEL_SRC}/*.mod.c ${DIR_KERNEL_SRC}/.*.cmd + rm -f ${DIR_KERNEL_SRC}/Module.markers ${DIR_KERNEL_SRC}/Module.symvers ${DIR_KERNEL_SRC}/modules.order + rm -rf ${DIR_KERNEL_SRC}/.tmp_versions + rm -rf $(SUB_BUILD_DIR) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_config.py new file mode 100755 index 000000000000..58ec348834ab --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_config.py @@ -0,0 +1,779 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from platform_common import * + +STARTMODULE = { + "hal_fanctrl": 0, + "hal_ledctrl":0, + "avscontrol": 0, + "dev_monitor": 0, + "reboot_cause": 0, + "pmon_syslog": 0, + "sff_temp_polling": 0, +} + +MANUINFO_CONF = { + "bios": { + "key": "BIOS", + "head": True, + "next": "onie" + }, + "bios_vendor": { + "parent": "bios", + "key": "Vendor", + "cmd": "dmidecode -t 0 |grep Vendor", + "pattern": r".*Vendor", + "separator": ":", + "arrt_index": 1, + }, + "bios_version": { + "parent": "bios", + "key": "Version", + "cmd": "dmidecode -t 0 |grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "bios_date": { + "parent": "bios", + "key": "Release Date", + "cmd": "dmidecode -t 0 |grep Release", + "pattern": r".*Release Date", + "separator": ":", + "arrt_index": 3, + }, + "onie": { + "key": "ONIE", + "next": "cpu" + }, + "onie_date": { + "parent": "onie", + "key": "Build Date", + "file": "/host/machine.conf", + "pattern": r"^onie_build_date", + "separator": "=", + "arrt_index": 1, + }, + "onie_version": { + "parent": "onie", + "key": "Version", + "file": "/host/machine.conf", + "pattern": r"^onie_version", + "separator": "=", + "arrt_index": 2, + }, + + "cpu": { + "key": "CPU", + "next": "ssd" + }, + "cpu_vendor": { + "parent": "cpu", + "key": "Vendor", + "cmd": "dmidecode --type processor |grep Manufacturer", + "pattern": r".*Manufacturer", + "separator": ":", + "arrt_index": 1, + }, + "cpu_model": { + "parent": "cpu", + "key": "Device Model", + "cmd": "dmidecode --type processor | grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "cpu_core": { + "parent": "cpu", + "key": "Core Count", + "cmd": "dmidecode --type processor | grep \"Core Count\"", + "pattern": r".*Core Count", + "separator": ":", + "arrt_index": 3, + }, + "cpu_thread": { + "parent": "cpu", + "key": "Thread Count", + "cmd": "dmidecode --type processor | grep \"Thread Count\"", + "pattern": r".*Thread Count", + "separator": ":", + "arrt_index": 4, + }, + "ssd": { + "key": "SSD", + "next": "cpld" + }, + "ssd_model": { + "parent": "ssd", + "key": "Device Model", + "cmd": "smartctl -i /dev/sda |grep \"Device Model\"", + "pattern": r".*Device Model", + "separator": ":", + "arrt_index": 1, + }, + "ssd_fw": { + "parent": "ssd", + "key": "Firmware Version", + "cmd": "smartctl -i /dev/sda |grep \"Firmware Version\"", + "pattern": r".*Firmware Version", + "separator": ":", + "arrt_index": 2, + }, + "ssd_user_cap": { + "parent": "ssd", + "key": "User Capacity", + "cmd": "smartctl -i /dev/sda |grep \"User Capacity\"", + "pattern": r".*User Capacity", + "separator": ":", + "arrt_index": 3, + }, + + "cpld": { + "key": "CPLD", + "next": "fpga" + }, + + "cpld1": { + "key": "CPLD1", + "parent": "cpld", + "arrt_index": 1, + }, + "cpld1_model": { + "key": "Device Model", + "parent": "cpld1", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld1_vender": { + "key": "Vendor", + "parent": "cpld1", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld1_desc": { + "key": "Description", + "parent": "cpld1", + "config": "CPU CPLD", + "arrt_index": 3, + }, + "cpld1_version": { + "key": "Firmware Version", + "parent": "cpld1", + "reg": { + "loc": "/dev/port", + "offset": 0xa00, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld2": { + "key": "CPLD2", + "parent": "cpld", + "arrt_index": 2, + }, + "cpld2_model": { + "key": "Device Model", + "parent": "cpld2", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld2_vender": { + "key": "Vendor", + "parent": "cpld2", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld2_desc": { + "key": "Description", + "parent": "cpld2", + "config": "BASE CPLD", + "arrt_index": 3, + }, + "cpld2_version": { + "key": "Firmware Version", + "parent": "cpld2", + "reg": { + "loc": "/dev/port", + "offset": 0x900, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld3": { + "key": "CPLD3", + "parent": "cpld", + "arrt_index": 3, + }, + "cpld3_model": { + "key": "Device Model", + "parent": "cpld3", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld3_vender": { + "key": "Vendor", + "parent": "cpld3", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld3_desc": { + "key": "Description", + "parent": "cpld3", + "config": "LC CPLD", + "arrt_index": 3, + }, + "cpld3_version": { + "key": "Firmware Version", + "parent": "cpld3", + "i2c": { + "bus": "17", + "loc": "0x30", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld4": { + "key": "CPLD4", + "parent": "cpld", + "arrt_index": 4, + }, + "cpld4_model": { + "key": "Device Model", + "parent": "cpld4", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld4_vender": { + "key": "Vendor", + "parent": "cpld4", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld4_desc": { + "key": "Description", + "parent": "cpld4", + "config": "MAC CPLDA", + "arrt_index": 3, + }, + "cpld4_version": { + "key": "Firmware Version", + "parent": "cpld4", + "i2c": { + "bus": "18", + "loc": "0x30", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "cpld5": { + "key": "CPLD5", + "parent": "cpld", + "arrt_index": 5, + }, + "cpld5_model": { + "key": "Device Model", + "parent": "cpld5", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld5_vender": { + "key": "Vendor", + "parent": "cpld5", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld5_desc": { + "key": "Description", + "parent": "cpld5", + "config": "MAC CPLDB", + "arrt_index": 3, + }, + "cpld5_version": { + "key": "Firmware Version", + "parent": "cpld5", + "i2c": { + "bus": "19", + "loc": "0x30", + "offset": 0, + "size": 4 + }, + "callback": "cpld_format", + "arrt_index": 4, + }, + + "i210": { + "key": "NIC", + "next": "fpga" + }, + "i210_model": { + "parent": "i210", + "config": "NA", + "key": "Device Model", + "arrt_index": 1, + }, + "i210_vendor": { + "parent": "i210", + "config": "INTEL", + "key": "Vendor", + "arrt_index": 2, + }, + "i210_version": { + "parent": "i210", + "cmd": "ethtool -i eth0", + "pattern": r"firmware-version", + "separator": ":", + "key": "Firmware Version", + "arrt_index": 3, + }, + + "fpga": { + "key": "FPGA", + }, + "fpga_model": { + "parent": "fpga", + "config": "XC7A50T-2FGG484I", + "key": "Device Model", + "arrt_index": 1, + }, + "fpga_vendor": { + "parent": "fpga", + "config": "XILINX", + "key": "Vendor", + "arrt_index": 2, + }, + "fpga_desc": { + "parent": "fpga", + "config": "NA", + "key": "Description", + "arrt_index": 3, + }, + "fpga_hw_version": { + "parent": "fpga", + "config": "NA", + "key": "Hardware Version", + "arrt_index": 4, + }, + "fpga_fw_version": { + "parent": "fpga", + "pci": { + "bus": 3, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 0 + }, + "key": "Firmware Version", + "arrt_index": 5, + }, + "fpga_date": { + "parent": "fpga", + "pci": { + "bus": 3, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 4 + }, + "key": "Build Date", + "arrt_index": 6, + }, +} + +PMON_SYSLOG_STATUS = { + "polling_time": 3, + "sffs": { + "present": {"path": ["/sys/wb_plat/sff/*/present"], "ABSENT": 0}, + "nochangedmsgflag": 0, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 1, + "alias": { + "sff49": "Ethernet49", + "sff50": "Ethernet50", + "sff51": "Ethernet51", + "sff52": "Ethernet52" + } + }, + "fans": { + "present": {"path": ["/sys/wb_plat/fan/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/fan/%s/motor0/status", 'okval': 1}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "fan1": "FAN1", + "fan2": "FAN2" + } + }, + "psus": { + "present": {"path": ["/sys/wb_plat/psu/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/wb_plat/psu/%s/output", "okval": 1}, + {"path": "/sys/wb_plat/psu/%s/alert", "okval": 0}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "psu1": "PSU1", + "psu2": "PSU2" + } + } +} + +##################### MAC Voltage adjust#################################### +MAC_DEFAULT_PARAM = [ + { + "name": "mac_core", # AVS name + "type": 0, # 1: used default value, if rov value not in range. 0: do nothing, if rov value not in range + "default": 0x01, # default value, if rov value not in range + "rov_source": 0, # 0: get rov value from cpld, 1: get rov value from SDK + "cpld_avs": {"io_addr": 0x956, "gettype": "io"}, + "set_avs": { + "loc": "/sys/bus/i2c/devices/17-0058/hwmon/hwmon*/avs0_vout", + "gettype": "sysfs", "formula": "int((%f)*1000000)" + }, + "mac_avs_param": { + 0x08: 0.875, + 0x04: 0.850, + 0x02: 0.825, + 0x01: 0.800 + } + } +] + + +DRIVERLISTS = [ + {"name": "r8169", "delay": 0, "removable": 0}, + {"name": "ice", "delay": 0, "removable": 0}, + {"name": "i2c_i801", "delay": 0}, + {"name": "i2c_dev", "delay": 0}, + {"name": "i2c_mux", "delay": 0}, + {"name": "platform_common dfd_my_type=0x40c7", "delay": 0}, + {"name": "wb_io_dev", "delay": 0}, + {"name": "wb_io_dev_device", "delay": 0}, + {"name": "wb_fpga_pcie", "delay": 0}, + {"name": "wb_pcie_dev", "delay": 0}, + {"name": "wb_pcie_dev_device", "delay": 0}, + {"name": "wb_i2c_dev", "delay": 0}, + {"name": "wb_i2c_ocores", "delay": 0}, + {"name": "wb_i2c_ocores_device", "delay": 0}, + {"name": "wb_i2c_mux_pca9641", "delay": 0}, + {"name": "wb_i2c_mux_pca954x", "delay": 0}, + {"name": "wb_i2c_mux_pca954x_device", "delay": 0}, + {"name": "wb_i2c_dev_device", "delay": 0}, + {"name": "optoe", "delay": 0}, + {"name": "at24", "delay": 0}, +] + +DEVICE = [ + {"name": "24c02", "bus": 0, "loc": 0x56}, +] + +OPTOE = [ + {"name": "optoe3", "startbus": 25, "endbus": 152}, +] + +REBOOT_CTRL_PARAM = { + #"cpu": {"io_addr": 0x910, "rst_val": 0x10, "rst_delay": 0, "gettype": "io"}, + #"mac": {"io_addr": 0x930, "rst_val": 0xbf, "rst_delay": 1, "unlock_rst_val": 0xff, "unlock_rst_delay": 1, "gettype": "io"}, + #"phy": {"io_addr": 0x930, "rst_val": 0xf7, "rst_delay": 1, "unlock_rst_val": 0xff, "unlock_rst_delay": 1, "gettype": "io"}, +} + +DEV_MONITOR_PARAM = { + "polling_time": 10, + "psus": [ + { + "name": "psu1", + "present": {"gettype": "io", "io_addr": 0xb10, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "psu1frue2", "name": "24c02", "bus": 7, "loc": 0x56, "attr": "eeprom"}, + ], + }, + { + "name": "psu2", + "present": {"gettype": "io", "io_addr": 0xb10, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "psu2frue2", "name": "24c02", "bus": 7, "loc": 0x57, "attr": "eeprom"}, + ], + }, + ], + "fans": [ + { + "name": "fan1", + "present": {"gettype": "io", "io_addr": 0x994, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "fan1frue2", "name": "24c02", "bus": 8, "loc": 0x53, "attr": "eeprom"}, + ], + }, + { + "name": "fan2", + "present": {"gettype": "io", "io_addr": 0x994, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "fan2frue2", "name": "24c02", "bus": 9, "loc": 0x53, "attr": "eeprom"}, + ], + }, + ], + "others": [ + { + "name": "eeprom", + "device": [ + {"id": "eeprom_1", "name": "24c02", "bus": 2, "loc": 0x56, "attr": "eeprom"}, + ], + }, + { + "name": "tmp275", + "device": [ + {"id": "tmp275_1", "name": "wb_tmp275", "bus": 6, "loc": 0x48, "attr": "hwmon"}, + {"id": "tmp275_2", "name": "wb_tmp275", "bus": 6, "loc": 0x49, "attr": "hwmon"}, + ], + }, + { + "name": "mac_bsc", + "device": [ + {"id": "mac_bsc_1", "name": "wb_mac_bsc_td3_x2", "bus": 18, "loc": 0x44, "attr": "hwmon"}, + ], + }, + { + "name": "ina3221", + "device": [ + {"id": "ina3221_1", "name": "wb_ina3221", "bus": 3, "loc": 0x40, "attr": "hwmon"}, + {"id": "ina3221_2", "name": "wb_ina3221", "bus": 3, "loc": 0x41, "attr": "hwmon"}, + {"id": "ina3221_3", "name": "wb_ina3221", "bus": 3, "loc": 0x42, "attr": "hwmon"}, + ], + }, + { + "name": "xdpe12284", + "device": [ + {"id": "xdpe12284_1", "name": "wb_xdpe12284", "bus": 0, "loc": 0x68, "attr": "hwmon"}, + {"id": "xdpe12284_2", "name": "wb_xdpe12284", "bus": 0, "loc": 0x6e, "attr": "hwmon"}, + {"id": "xdpe12284_2", "name": "wb_xdpe12284", "bus": 0, "loc": 0x5e, "attr": "hwmon"}, + {"id": "xdpe12284_2", "name": "wb_xdpe12284", "bus": 17, "loc": 0x58, "attr": "hwmon"}, + ], + }, + ], +} + +INIT_PARAM_PRE = [] + +INIT_COMMAND_PRE = [] + +INIT_PARAM = [] + +INIT_COMMAND = [ + # set sysled + "dfd_debug io_wr 0x950 0x04", + # mac led reset + "dfd_debug sysfs_data_wr /dev/fpga0 0x40 0x98 0x00 0x00 0x00", + "dfd_debug sysfs_data_wr /dev/fpga0 0x44 0x98 0x00 0x00 0x00", + "dfd_debug sysfs_data_wr /dev/fpga0 0x48 0x98 0x00 0x00 0x00", + "dfd_debug sysfs_data_wr /dev/fpga0 0x4c 0x98 0x00 0x00 0x00", + # enable root port PCIe AER + "setpci -s 00:10.0 0x5c.b=0x1f", + "setpci -s 00:12.0 0x5c.b=0x1f", + "setpci -s 00:14.0 0x5c.b=0x1f", + "setpci -s 14:02.0 0x5c.b=0x1f", + "setpci -s 14:03.0 0x5c.b=0x1f", + "setpci -s 14:04.0 0x5c.b=0x1f", + "setpci -s 14:05.0 0x5c.b=0x1f" +] + +REBOOT_CAUSE_PARA = { + "reboot_cause_list": [ + { + "name": "wdt_reboot", + "monitor_point": {"gettype": "io", "io_addr": 0x76b, "okval": 1}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Watchdog, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size":1*1024*1024} + ], + "finish_operation": [ + {"gettype": "io", "io_addr": 0x76b, "value": 0x00}, + ] + }, + { + "name": "otp_switch_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_switch_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: ASIC, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_switch_reboot_flag"}, + ] + }, + { + "name": "otp_other_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_other_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: Other, ", + "path": "/etc/sonic/.reboot/.history-reboot-cause.txt", "file_max_size": 1 * 1024 * 1024} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_other_reboot_flag"}, + ] + }, + ], + "other_reboot_cause_record": [ + {"record_type": "file", "mode": "cover", "log": "Other, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Other, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], +} + + +WARM_UPGRADE_PARAM = { + "slot0": { + "VME": { + "chain1": [ + {"name": "CPU_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/refresh_cpu_cpld_header.vme", + "init_cmd": [ + {"cmd": "echo 98 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo high > /sys/class/gpio/gpio98/direction", "gettype": "cmd"}, + {"io_addr": 0x7a5, "value": 0, "gettype": "io"}, + ], + "rw_recover_reg": [ + {"io_addr": 0x721, "value": None, "gettype": "io"}, + {"io_addr": 0x765, "value": None, "gettype": "io"}, + {"io_addr": 0x766, "value": None, "gettype": "io"}, + {"io_addr": 0x768, "value": None, "gettype": "io"}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "refresh_finish_flag_check": {"io_addr":0x7a5, "value":0x01, "gettype":"io"}, + "access_check_reg": {"io_addr": 0x705, "value": 0x5a, "gettype": "io"}, + "finish_cmd": [ + {"cmd": "echo 0 > /sys/class/gpio/gpio98/value", "gettype": "cmd"}, + {"cmd": "echo 98 > /sys/class/gpio/unexport", "gettype": "cmd"}, + ], + }, + ], + }, + }, + "stop_services_cmd": [ + "/usr/local/bin/platform_process.py stop", + ], + "start_services_cmd": [ + "/usr/local/bin/platform_process.py start", + ], +} + +UPGRADE_SUMMARY = { + "devtype": 0x40c7, + + "slot0": { + "subtype": 0, + "VME": { + "chain1": { + "name": "CPU_CPLD", + "is_support_warm_upg": 0, + }, + "chain2": { + "name": "BASE_CPLD", + "is_support_warm_upg": 0, + }, + "chain3": { + "name": "LC_CPLD", + "is_support_warm_upg": 0, + }, + "chain4": { + "name": "MAC_CPLDA", + "is_support_warm_upg": 0, + }, + "chain5": { + "name": "MAC_CPLDB", + "is_support_warm_upg": 0, + }, + "chain6": { + "name": "FCB_CPLD", + "is_support_warm_upg": 0, + }, + "chain7": { + "name": "MISC_CPLD", + "is_support_warm_upg": 0, + }, + "chain8": { + "name": "PCIE_CPLD", + "is_support_warm_upg": 0, + }, + }, + + "SPI-LOGIC-DEV": { + "chain1": { + "name": "FPGA", + "is_support_warm_upg": 0, + }, + }, + + "MTD": { + "chain2": { + "name": "BIOS", + "is_support_warm_upg": 0, + "filesizecheck": 20480, # bios check file size, Unit: K + "init_cmd": [ + {"cmd": "modprobe mtd", "gettype": "cmd"}, + {"cmd": "modprobe spi_nor", "gettype": "cmd"}, + {"cmd": "modprobe ofpart", "gettype": "cmd"}, + {"cmd": "modprobe spi_intel writeable=1", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi_pci", "gettype": "cmd"}, + ], + "finish_cmd": [ + {"cmd": "rmmod intel_spi_pci", "gettype": "cmd"}, + {"cmd": "rmmod spi_intel", "gettype": "cmd"}, + {"cmd": "rmmod ofpart", "gettype": "cmd"}, + {"cmd": "rmmod spi_nor", "gettype": "cmd"}, + {"cmd": "rmmod mtd", "gettype": "cmd"}, + ], + }, + }, + + "TEST": { + "fpga": [ + {"chain": 1, "file": "/etc/.upgrade_test/fpga_test_header.bin", "display_name": "FPGA"}, + ], + "cpld": [ + {"chain": 1, "file": "/etc/.upgrade_test/cpu_cpld_test_header.vme", "display_name": "CPU_CPLD"}, + {"chain": 2, "file": "/etc/.upgrade_test/base_cpld_test_header.vme", "display_name": "BASE_CPLD"}, + {"chain": 3, "file": "/etc/.upgrade_test/lc_cpld_test_header.vme", "display_name": "LC_CPLD"}, + {"chain": 4, "file": "/etc/.upgrade_test/mac_cplda_test_header.vme", "display_name": "MAC_CPLDA"}, + {"chain": 5, "file": "/etc/.upgrade_test/mac_cpldb_test_header.vme", "display_name": "MAC_CPLDB"}, + {"chain": 6, "file": "/etc/.upgrade_test/fcb_cpld_test_header.vme", "display_name": "FCB_CPLD"}, + {"chain": 7, "file": "/etc/.upgrade_test/misc_cpld_test_header.vme", "display_name": "MISC_CPLD"}, + #{"chain": 8, "file": "/etc/.upgrade_test/pcie_cpld_test_header.vme", "display_name": "PCIe_CPLD"}, + ], + }, + }, +} + + +PLATFORM_E2_CONF = { + "fan": [ + #{"name": "fan1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/8-0053/eeprom"}, + #{"name": "fan2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/9-0053/eeprom"}, + ], + "psu": [ + #{"name": "psu1", "e2_type": "custfru", "e2_path": "/sys/bus/i2c/devices/7-0056/eeprom"}, + #{"name": "psu2", "e2_type": "custfru", "e2_path": "/sys/bus/i2c/devices/7-0057/eeprom"}, + ], + "syseeprom": [ + {"name": "syseeprom", "e2_type": "onie_tlv", "e2_path": "/sys/bus/i2c/devices/0-0056/eeprom"}, + ], +} \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_port_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_port_config.py new file mode 100755 index 000000000000..58bf1b9b4042 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/config/x86_64_micas_m2_w6940_128qc_r0_port_config.py @@ -0,0 +1,136 @@ +#!/usr/bin/python3 +# -*- coding: UTF-8 -*- + +PLATFORM_INTF_OPTOE = { + "port_num": 128, + "port_bus_map": { + 1: 25, + 2: 26, + 3: 27, + 4: 28, + 7: 29, + 8: 30, + 9: 31, + 10: 32, + 13: 33, + 14: 34, + 15: 35, + 16: 36, + 19: 37, + 20: 38, + 21: 39, + 22: 40, + 25: 41, + 26: 42, + 27: 43, + 28: 44, + 31: 45, + 32: 46, + 33: 47, + 34: 48, + 37: 49, + 38: 50, + 39: 51, + 40: 52, + 43: 53, + 44: 54, + 45: 55, + 46: 56, + 49: 57, + 50: 58, + 51: 59, + 52: 60, + 55: 61, + 56: 62, + 57: 63, + 58: 64, + 61: 65, + 62: 66, + 63: 67, + 64: 68, + 67: 69, + 68: 70, + 69: 71, + 70: 72, + 73: 73, + 74: 74, + 75: 75, + 76: 76, + 79: 77, + 80: 78, + 81: 79, + 82: 80, + 85: 81, + 86: 82, + 87: 83, + 88: 84, + 91: 85, + 92: 86, + 93: 87, + 94: 88, + 97: 89, + 98: 90, + 99: 91, + 100: 92, + 103: 93, + 104: 94, + 105: 95, + 106: 96, + 109: 97, + 110: 98, + 111: 99, + 112: 100, + 115: 101, + 116: 102, + 117: 103, + 118: 104, + 121: 105, + 122: 106, + 123: 107, + 124: 108, + 125: 109, + 126: 110, + 127: 111, + 128: 112, + 5: 113, + 6: 114, + 11: 115, + 12: 116, + 17: 117, + 18: 118, + 23: 119, + 24: 120, + 29: 121, + 30: 122, + 35: 123, + 36: 124, + 41: 125, + 42: 126, + 47: 127, + 48: 128, + 53: 129, + 54: 130, + 59: 131, + 60: 132, + 65: 133, + 66: 134, + 71: 135, + 72: 136, + 77: 137, + 78: 138, + 83: 139, + 84: 140, + 89: 141, + 90: 142, + 95: 143, + 96: 144, + 101: 145, + 102: 146, + 107: 147, + 108: 148, + 113: 149, + 114: 150, + 119: 151, + 120: 152, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_device.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_device.py new file mode 100755 index 000000000000..ac42fa245697 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_device.py @@ -0,0 +1,186 @@ +#!/usr/bin/python3 + +psu_fan_airflow = { + "intake": ['GW-CRPS2000DWA'] +} + +fanairflow = { + "intake": ['FAN80-01-F'], +} + +psu_display_name = { + "PA2000I-F": ['GW-CRPS2000DWA'], +} + +psutypedecode = { + 0x00: 'N/A', + 0x01: 'AC', + 0x02: 'DC', +} + +class Description: + CPLD = "Used for managing IO modules, SFP+ modules and system LEDs" + BIOS = "Performs initialization of hardware components during booting" + FPGA = "Platform management controller for on-board temperature monitoring, in-chassis power" + + +devices = { + "onie_e2": [ + { + "name": "ONIE_E2", + "e2loc": {"loc": "/sys/bus/i2c/devices/0-0056/eeprom", "way": "sysfs"}, + "airflow": "intake" + }, + ], + + "thermal_config": { + "number": 10, + }, + + "fan_config": { + "num_fantrays": 5, + "num_fans_pertray": 2, + }, + + "psu_config": { + "number": 4 + }, + + "cpld_config": { + "number": 7 + }, + + "bmc_config": { + "number": 1 + }, + + "fpga_config": { + "number": 1, + "fpgas": [ + { + "name": "fpga0", + "alias": "MAC FPGA", + "type": "XC7A50T-2FGG484I", + "firmware_version": { + "dev_path": "/dev/fpga0", + "offset": 0x00, + "len": 4 + }, + "board_version": { + "dev_path": "/dev/fpga0", + "offset": 0x04, + "len": 4 + } + } + ] + }, + + "bios_config": { + "number": 1, + "bios": [ + { + "name": "bios0", + "alias": "BIOS", + "type": { + "cmd": "dmidecode -t 0 |grep Vendor |awk -F\": \" \'{ print $2 }\'", + "gettype": "cmd" + }, + "firmware_version": { + "cmd": "dmidecode -t 0 |grep Version |awk -F\": \" \'{ print $2 }\'", + "gettype": "cmd" + }, + "board_version": { + "cmd": "dmidecode -t 0 |grep Version |awk -F\": \" \'{ print $2 }\'", + "gettype": "cmd" + } + } + ] + }, + + "cpu": [ + { + "name": "cpu", + "reboot_cause_path": "/etc/sonic/.reboot/.previous-reboot-cause.txt" + } + ], + "sfps": { + "ver": '1.0', + "port_index_start": 0, + "port_num": 128, + "log_level": 2, + "eeprom_retry_times": 5, + "eeprom_retry_break_sec": 0.2, + "presence_cpld": { + "dev_id": { + 3: { + "offset": { + 0x30: "1-4, 7-10", + 0x31: "13-16, 19-22", + 0x32: "25-28, 31-34", + 0x33: "37-40, 43-46", + 0x34: "49-52, 55-58", + 0x35: "61-64", + }, + }, + 4: { + "offset": { + 0x30: "67-70, 73-76", + 0x31: "79-82, 85-88", + 0x32: "91-94, 97-100", + 0x33: "103-106, 109-112", + 0x34: "115-118, 121-124", + 0x35: "125-128", + }, + }, + 2: { + "offset": { + 0x30: "5-6, 11-12, 17-18, 23-24", + 0x31: "29-30, 35-36, 41-42, 47-48", + 0x32: "53-54, 59-60, 65-66, 71-72", + 0x33: "77-78, 83-84, 89-90, 95-96", + 0x34: "101-102, 107-108, 113-114, 119-120", + }, + }, + }, + }, + "presence_val_is_present": 0, + "eeprom_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/eeprom", + "eeprom_path_key": list(range(25, 153)), + "optoe_driver_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/dev_class", + "optoe_driver_key": list(range(25, 153)), + "reset_cpld": { + "dev_id": { + 3: { + "offset": { + 0x90: "1-4, 7-10", + 0x91: "13-16, 19-22", + 0x92: "25-28, 31-34", + 0x93: "37-40, 43-46", + 0x94: "49-52, 55-58", + 0x95: "61-64", + }, + }, + 4: { + "offset": { + 0x90: "67-70, 73-76", + 0x91: "79-82, 85-88", + 0x92: "91-94, 97-100", + 0x93: "103-106, 109-112", + 0x94: "115-118, 121-124", + 0x95: "125-128", + }, + }, + 2: { + "offset": { + 0x90: "5-6, 11-12, 17-18, 23-24", + 0x91: "29-30, 35-36, 41-42, 47-48", + 0x92: "53-54, 59-60, 65-66, 71-72", + 0x93: "77-78, 83-84, 89-90, 95-96", + 0x94: "101-102, 107-108, 113-114, 119-120", + }, + }, + }, + }, + "reset_val_is_reset": 0, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_monitor.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_monitor.py new file mode 100755 index 000000000000..6d68e1a5f9ee --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/hal-config/x86_64_micas_m2_w6940_128qc_r0_monitor.py @@ -0,0 +1,141 @@ +# coding:utf-8 + + +monitor = { + "openloop": { + "linear": { + "name": "linear", + "flag": 0, + "pwm_min": 0x55, + "pwm_max": 0xff, + "K": 11, + "tin_min": 38, + }, + "curve": { + "name": "curve", + "flag": 1, + "pwm_min": 0x55, + "pwm_max": 0xff, + "a": -0.05, + "b": 11.32, + "c": -166, + "tin_min": 25, + }, + }, + + "pid": { + "CPU_TEMP": { + "name": "CPU_TEMP", + "flag": 0, + "type": "duty", + "pwm_min": 0x55, + "pwm_max": 0xff, + "Kp": 1, + "Ki": 0.4, + "Kd": 0, + "target": 80, + "value": [None, None, None], + }, + "SWITCH_TEMP": { + "name": "SWITCH_TEMP", + "flag": 0, + "type": "duty", + "pwm_min": 0x55, + "pwm_max": 0xff, + "Kp": 1, + "Ki": 0.4, + "Kd": 0.3, + "target": 90, + "value": [None, None, None], + }, + "OUTLET_TEMP": { + "name": "OUTLET_TEMP", + "flag": 0, + "type": "duty", + "pwm_min": 0x55, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 60, + "value": [None, None, None], + }, + "SFF_TEMP": { + "name": "SFF_TEMP", + "flag": 0, + "type": "duty", + "pwm_min": 0x55, + "pwm_max": 0xff, + "Kp": 1, + "Ki": 1, + "Kd": 0.3, + "target": 65, + "value": [None, None, None], + }, + }, + + "temps_threshold": { + "SWITCH_TEMP": {"name": "SWITCH_TEMP", "warning": 105, "critical": 110}, + "INLET_TEMP": {"name": "INLET_TEMP", "warning": 55, "critical": 60}, + "OUTLET_TEMP": {"name": "OUTLET_TEMP", "warning": 70, "critical": 75}, + "CPU_TEMP": {"name": "CPU_TEMP", "warning": 85, "critical": 91}, + "SFF_TEMP": {"name": "SFF_TEMP", "warning": 999, "critical": 1000, "ignore_threshold": 1, "invalid": -10000, "error": -9999}, + }, + + "fancontrol_para": { + "interval": 5, + "fan_air_flow_monitor": 1, + "psu_air_flow_monitor": 1, + "max_pwm": 0xff, + "min_pwm": 0x55, + "abnormal_pwm": 0xff, + "warning_pwm": 0xff, + "temp_invalid_pid_pwm": 0x55, + "temp_error_pid_pwm": 0x55, + "temp_fail_num": 3, + "check_temp_fail": [ + {"temp_name": "INLET_TEMP"}, + {"temp_name": "SWITCH_TEMP"}, + {"temp_name": "CPU_TEMP"}, + ], + "temp_warning_num": 3, # temp over warning 3 times continuously + "temp_critical_num": 3, # temp over critical 3 times continuously + "temp_warning_countdown": 60, # 5 min warning speed after not warning + "temp_critical_countdown": 60, # 5 min full speed after not critical + "rotor_error_count": 6, # fan rotor error 6 times continuously + "inlet_mac_diff": 999, + "check_crit_reboot_flag": 1, + "check_crit_reboot_num": 3, + "check_crit_sleep_time": 20, + "psu_absent_fullspeed_num": 1, + "fan_absent_fullspeed_num": 1, + "rotor_error_fullspeed_num": 1, + "psu_fan_control": 0, + }, + + "ledcontrol_para": { + "interval": 5, + "checkpsu": 0, # 0: sys led don't follow psu led + "checkfan": 0, # 0: sys led don't follow fan led + "psu_amber_num": 1, + "fan_amber_num": 1, + "board_sys_led": [ + {"led_name": "FRONT_SYS_LED"}, + ], + "board_psu_led": [ + {"led_name": "FRONT_PSU_LED"}, + ], + "board_fan_led": [ + {"led_name": "FRONT_FAN_LED"}, + ], + "psu_air_flow_monitor": 1, + "fan_air_flow_monitor": 1, + "psu_air_flow_amber_num": 1, + "fan_air_flow_amber_num": 1, + }, + + "otp_reboot_judge_file": { + "otp_switch_reboot_judge_file": "/etc/.otp_switch_reboot_flag", + "otp_other_reboot_judge_file": "/etc/.otp_other_reboot_flag", + }, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/Makefile new file mode 100644 index 000000000000..912c4f82c6e5 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/Makefile @@ -0,0 +1,10 @@ +MAKEFILE_FILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST))) +MODULES_DIR = $(abspath $(MAKEFILE_FILE_PATH)/../../../../common/modules) + +EXTRA_CFLAGS+= -I$(MODULES_DIR) + +obj-m := wb_pcie_dev_device.o +obj-m += wb_i2c_ocores_device.o +obj-m += wb_i2c_mux_pca954x_device.o +obj-m += wb_i2c_dev_device.o +obj-m += wb_io_dev_device.o diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_dev_device.c new file mode 100644 index 000000000000..c0a7e6c00211 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_dev_device.c @@ -0,0 +1,161 @@ +/* + * An wb_i2c_dev_device driver for i2c dev device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_dev_device_debug = 0; +static int g_wb_i2c_dev_device_error = 0; + +module_param(g_wb_i2c_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_dev_device_debug) { \ + printk(KERN_INFO "[WB_I2C_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_dev_device_error) { \ + printk(KERN_ERR "[WB_I2C_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_dev_device_t i2c_dev_device_data0 = { + .i2c_bus = 17, + .i2c_addr = 0x30, + .i2c_name = "cpld2", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data1 = { + .i2c_bus = 18, + .i2c_addr = 0x30, + .i2c_name = "cpld3", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data2 = { + .i2c_bus = 19, + .i2c_addr = 0x30, + .i2c_name = "cpld4", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +static i2c_dev_device_t i2c_dev_device_data3 = { + .i2c_bus = 20, + .i2c_addr = 0x30, + .i2c_name = "cpld5", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + + +struct i2c_board_info i2c_dev_device_info[] = { + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data0, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data1, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data2, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data3, + }, +}; + +static int __init wb_i2c_dev_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_dev_device_info); i++) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + i2c_dev_device_info[i].addr = i2c_dev_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_dev_device_data->i2c_bus); + if (adap == NULL) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_dev_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_dev_device_info[i]); + if (!client) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "Failed to register i2c dev device %d at bus %d!\n", + i2c_dev_device_data->i2c_addr, i2c_dev_device_data->i2c_bus); + } else { + i2c_dev_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_dev_device_exit(void) +{ + int i; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_dev_device_info) - 1; i >= 0; i--) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + if (i2c_dev_device_data->client) { + i2c_unregister_device(i2c_dev_device_data->client); + i2c_dev_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_dev_device_init); +module_exit(wb_i2c_dev_device_exit); +MODULE_DESCRIPTION("I2C DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_mux_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_mux_pca954x_device.c new file mode 100644 index 000000000000..6d96bb56590b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_mux_pca954x_device.c @@ -0,0 +1,539 @@ +/* + * An wb_i2c_mux_pca954x_device driver for pca954x i2c load device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_mux_pca954x_device_debug = 0; +static int g_wb_i2c_mux_pca954x_device_error = 0; + +module_param(g_wb_i2c_mux_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_mux_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_I2C_MUX_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_error) { \ + printk(KERN_ERR "[WB_I2C_MUX_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data0 = { + .i2c_bus = 1, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 25, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000001, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000001, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data1 = { + .i2c_bus = 2, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 33, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000002, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000002, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data2 = { + .i2c_bus = 3, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 41, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000004, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000004, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data3 = { + .i2c_bus = 4, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 49, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000008, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000008, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data4 = { + .i2c_bus = 5, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 57, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000010, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000010, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data5 = { + .i2c_bus = 6, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 65, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000020, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000020, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data6 = { + .i2c_bus = 7, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 73, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000040, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000040, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data7 = { + .i2c_bus = 8, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 81, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000080, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000080, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data8 = { + .i2c_bus = 9, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 89, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000100, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000100, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data9 = { + .i2c_bus = 10, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 97, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000200, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000200, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data10 = { + .i2c_bus = 11, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 105, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000400, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000400, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data11 = { + .i2c_bus = 12, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 113, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00000800, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00000800, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data12 = { + .i2c_bus = 13, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 121, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00001000, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00001000, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data13 = { + .i2c_bus = 14, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 129, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00002000, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00002000, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data14 = { + .i2c_bus = 15, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 137, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00004000, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00004000, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data15 = { + .i2c_bus = 16, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 145, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00008000, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00008000, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data16 = { + .i2c_bus = 21, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 153, + .pca9548_reset_type = PCA9548_RESET_FILE, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .file_attr.dev_name = "/dev/fpga0", + .file_attr.offset = 0x84, + .file_attr.mask = 0x00010000, + .file_attr.reset_on = 0x00000000, + .file_attr.reset_off = 0x00010000, + .file_attr.width = 4, + }, +}; + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data17 = { + .i2c_bus = 22, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 0, + .close_chan_force_reset = 0, + .pca9548_base_nr = 161, +}; + + +struct i2c_board_info i2c_mux_pca954x_device_info[] = { + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data0, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data1, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data2, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data3, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data4, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data5, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data6, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data7, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data8, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data9, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data10, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data11, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data12, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data13, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data14, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data15, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data16, + }, + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data17, + }, +}; + +static int __init wb_i2c_mux_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_mux_pca954x_device_info); i++) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + i2c_mux_pca954x_device_info[i].addr = i2c_mux_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_mux_pca954x_device_data->i2c_bus); + if (adap == NULL) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_mux_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_mux_pca954x_device_info[i]); + if (!client) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register pca954x device %d at bus %d!\n", + i2c_mux_pca954x_device_data->i2c_addr, i2c_mux_pca954x_device_data->i2c_bus); + } else { + i2c_mux_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_mux_pca954x_device_exit(void) +{ + int i; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_mux_pca954x_device_info) - 1; i >= 0; i--) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + if (i2c_mux_pca954x_device_data->client) { + i2c_unregister_device(i2c_mux_pca954x_device_data->client); + i2c_mux_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_mux_pca954x_device_init); +module_exit(wb_i2c_mux_pca954x_device_exit); +MODULE_DESCRIPTION("I2C MUX PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_ocores_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_ocores_device.c new file mode 100644 index 000000000000..c6635de2d320 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_i2c_ocores_device.c @@ -0,0 +1,717 @@ +/* + * An wb_i2c_ocores_device driver for i2c ocores device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_i2c_ocores_device_debug = 0; +static int g_wb_i2c_ocores_device_error = 0; + +module_param(g_wb_i2c_ocores_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_ocores_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_OCORE_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_ocores_device_debug) { \ + printk(KERN_INFO "[WB_I2C_OCORE_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_OCORE_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_ocores_device_error) { \ + printk(KERN_ERR "[WB_I2C_OCORE_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_ocores_device_t i2c_ocores_device_data0 = { + .adap_nr = 1, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0800, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 0, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data1 = { + .adap_nr = 2, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0820, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 1, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data2 = { + .adap_nr = 3, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0840, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 2, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data3 = { + .adap_nr = 4, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0860, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 3, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data4 = { + .adap_nr = 5, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0880, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 4, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data5 = { + .adap_nr = 6, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x08a0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 5, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data6 = { + .adap_nr = 7, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x08c0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 6, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data7 = { + .adap_nr = 8, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x08e0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 7, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data8 = { + .adap_nr = 9, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0900, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 8, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data9 = { + .adap_nr = 10, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0920, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 9, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data10 = { + .adap_nr = 11, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0940, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 10, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data11 = { + .adap_nr = 12, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0960, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 11, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data12 = { + .adap_nr = 13, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0980, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 12, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data13 = { + .adap_nr = 14, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x09a0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 13, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data14 = { + .adap_nr = 15, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x09c0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 14, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data15 = { + .adap_nr = 16, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x09e0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 15, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data16 = { + .adap_nr = 17, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0a00, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 16, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data17 = { + .adap_nr = 18, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0a20, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 17, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data18 = { + .adap_nr = 19, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0a40, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 18, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data19 = { + .adap_nr = 20, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0a60, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 19, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data20 = { + .adap_nr = 21, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0a80, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 20, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data21 = { + .adap_nr = 22, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0aa0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 21, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data22 = { + .adap_nr = 23, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0ac0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 22, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static i2c_ocores_device_t i2c_ocores_device_data23 = { + .adap_nr = 24, + .big_endian = 0, + .dev_name = "/dev/fpga0", + .reg_access_mode = 3, + .dev_base = 0x0ae0, + .reg_shift = 2, + .reg_io_width = 4, + .ip_clock_khz = 125000, + .bus_clock_khz = 100, + .irq_type =1, + .irq_offset = 23, + .pci_domain = 0, + .pci_bus = 3, + .pci_slot = 0, + .pci_fn = 0, +}; + +static void wb_i2c_ocores_device_release(struct device *dev) +{ + return; +} + +static struct platform_device i2c_ocores_device[] = { + { + .name = "wb-ocores-i2c", + .id = 1, + .dev = { + .platform_data = &i2c_ocores_device_data0, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 2, + .dev = { + .platform_data = &i2c_ocores_device_data1, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 3, + .dev = { + .platform_data = &i2c_ocores_device_data2, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 4, + .dev = { + .platform_data = &i2c_ocores_device_data3, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 5, + .dev = { + .platform_data = &i2c_ocores_device_data4, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 6, + .dev = { + .platform_data = &i2c_ocores_device_data5, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 7, + .dev = { + .platform_data = &i2c_ocores_device_data6, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 8, + .dev = { + .platform_data = &i2c_ocores_device_data7, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 9, + .dev = { + .platform_data = &i2c_ocores_device_data8, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 10, + .dev = { + .platform_data = &i2c_ocores_device_data9, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 11, + .dev = { + .platform_data = &i2c_ocores_device_data10, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 12, + .dev = { + .platform_data = &i2c_ocores_device_data11, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 13, + .dev = { + .platform_data = &i2c_ocores_device_data12, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 14, + .dev = { + .platform_data = &i2c_ocores_device_data13, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 15, + .dev = { + .platform_data = &i2c_ocores_device_data14, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 16, + .dev = { + .platform_data = &i2c_ocores_device_data15, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 17, + .dev = { + .platform_data = &i2c_ocores_device_data16, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 18, + .dev = { + .platform_data = &i2c_ocores_device_data17, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 19, + .dev = { + .platform_data = &i2c_ocores_device_data18, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 20, + .dev = { + .platform_data = &i2c_ocores_device_data19, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 21, + .dev = { + .platform_data = &i2c_ocores_device_data20, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 22, + .dev = { + .platform_data = &i2c_ocores_device_data21, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 23, + .dev = { + .platform_data = &i2c_ocores_device_data22, + .release = wb_i2c_ocores_device_release, + }, + }, + { + .name = "wb-ocores-i2c", + .id = 24, + .dev = { + .platform_data = &i2c_ocores_device_data23, + .release = wb_i2c_ocores_device_release, + }, + }, +}; + +static int __init wb_i2c_ocores_device_init(void) +{ + int i; + int ret = 0; + i2c_ocores_device_t *i2c_ocores_device_data; + + WB_I2C_OCORE_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_ocores_device); i++) { + i2c_ocores_device_data = i2c_ocores_device[i].dev.platform_data; + ret = platform_device_register(&i2c_ocores_device[i]); + if (ret < 0) { + i2c_ocores_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-ocores-i2c.%d register failed!\n", i + 1); + } else { + i2c_ocores_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_i2c_ocores_device_exit(void) +{ + int i; + i2c_ocores_device_t *i2c_ocores_device_data; + + WB_I2C_OCORE_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_ocores_device) - 1; i >= 0; i--) { + i2c_ocores_device_data = i2c_ocores_device[i].dev.platform_data; + if (i2c_ocores_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&i2c_ocores_device[i]); + } + } +} + +module_init(wb_i2c_ocores_device_init); +module_exit(wb_i2c_ocores_device_exit); +MODULE_DESCRIPTION("I2C OCORES Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_io_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_io_dev_device.c new file mode 100644 index 000000000000..e4b1dde8bcae --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_io_dev_device.c @@ -0,0 +1,125 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_io_dev_device_debug = 0; +static int g_wb_io_dev_device_error = 0; + +module_param(g_wb_io_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_io_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_IO_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_io_dev_device_debug) { \ + printk(KERN_INFO "[WB_IO_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_IO_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_io_dev_device_error) { \ + printk(KERN_ERR "[WB_IO_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +/* CPU_CPLD */ +static io_dev_device_t io_dev_device_data0 = { + .io_dev_name = "cpld0", + .io_base = 0xa00, + .io_len = 0x100, + .indirect_addr = 0, +}; + +/* BASE CPLD */ +static io_dev_device_t io_dev_device_data1 = { + .io_dev_name = "cpld1", + .io_base = 0x900, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static void wb_io_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device io_dev_device[] = { + { + .name = "wb-io-dev", + .id = 1, + .dev = { + .platform_data = &io_dev_device_data0, + .release = wb_io_dev_device_release, + }, + }, + { + .name = "wb-io-dev", + .id = 2, + .dev = { + .platform_data = &io_dev_device_data1, + .release = wb_io_dev_device_release, + }, + }, +}; + +static int __init wb_io_dev_device_init(void) +{ + int i; + int ret = 0; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(io_dev_device); i++) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + ret = platform_device_register(&io_dev_device[i]); + if (ret < 0) { + io_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-io-dev.%d register failed!\n", i + 1); + } else { + io_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_io_dev_device_exit(void) +{ + int i; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(io_dev_device) - 1; i >= 0; i--) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + if (io_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&io_dev_device[i]); + } + } +} + +module_init(wb_io_dev_device_init); +module_exit(wb_io_dev_device_exit); +MODULE_DESCRIPTION("IO DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_pcie_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_pcie_dev_device.c new file mode 100644 index 000000000000..aff6ed5f798a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/modules/driver/wb_pcie_dev_device.c @@ -0,0 +1,111 @@ +/* + * An wb_pcie_dev_device driver for pcie device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_pcie_dev_device_debug = 0; +static int g_wb_pcie_dev_device_error = 0; + +module_param(g_wb_pcie_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_pcie_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_pcie_dev_device_debug) { \ + printk(KERN_INFO "[WB_PCIE_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_PCIE_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_pcie_dev_device_error) { \ + printk(KERN_ERR "[WB_PCIE_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static pci_dev_device_t pcie_dev_device_data0 = { + .pci_dev_name = "fpga0", + .pci_domain = 0x0000, + .pci_bus = 0x03, + .pci_slot = 0x00, + .pci_fn = 0, + .pci_bar = 0, + .bus_width = 4, +}; + +static void wb_pcie_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device pcie_dev_device[] = { + { + .name = "wb-pci-dev", + .id = 1, + .dev = { + .platform_data = &pcie_dev_device_data0, + .release = wb_pcie_dev_device_release, + }, + }, +}; + +static int __init wb_pcie_dev_device_init(void) +{ + int i; + int ret = 0; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(pcie_dev_device); i++) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + ret = platform_device_register(&pcie_dev_device[i]); + if (ret < 0) { + pcie_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-pci-dev.%d register failed!\n", i + 1); + } else { + pcie_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_pcie_dev_device_exit(void) +{ + int i; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(pcie_dev_device) - 1; i >= 0; i--) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + if (pcie_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&pcie_dev_device[i]); + } + } +} + +module_init(wb_pcie_dev_device_init); +module_exit(wb_pcie_dev_device_exit); +MODULE_DESCRIPTION("PCIE DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg new file mode 100644 index 000000000000..2c10ab9bbb28 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_CPLD.cfg @@ -0,0 +1,40 @@ +# configuration item: I2C address of CPLD +# format: cpld_i2c_dev.bus_[cpld_slot]_[cpld_id] cpld_i2c_dev.addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +# bus: I2C bus number of CPLD +# addr: I2C address of CPLD +cpld_i2c_dev.bus_0_3=0 +cpld_i2c_dev.addr_0_3=0x0d +cpld_i2c_dev.bus_0_4=15 +cpld_i2c_dev.addr_0_4=0x51 +cpld_i2c_dev.bus_0_5=16 +cpld_i2c_dev.addr_0_5=0x52 + + +# configuration item: LPC address of CPLD +# format: cpld_lpc_addr_[cpld_slot]_[cpld_id] +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +cpld_lpc_dev_0_0=0x700 +cpld_lpc_dev_0_1=0x900 +cpld_lpc_dev_0_2=0xb00 + + +# configuration item: CPLD access method, lpc or i2c +# format: mode_cpld_[cpld_slot][cpld_slot]=lpc/i2c +# cpld_slot: Main card: 0, linear card: start from 1 +# cpld_id: start from 0 +mode_cpld_0_0=lpc +mode_cpld_0_1=lpc +mode_cpld_0_2=lpc +mode_cpld_0_3=i2c +mode_cpld_0_4=i2c +mode_cpld_0_5=i2c + + +# configuration item: the number of CPLD +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: CPLD main_dev is 4 +# minor_dev: CPLD minor_dev not exist +dev_num_4_0=6 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg new file mode 100644 index 000000000000..eb2d7faf58c8 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_FAN.cfg @@ -0,0 +1,112 @@ +# configuration item: the number of fans +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: fan main_dev is 1 +# minor_dev: fan minor_dev not exist(0) +dev_num_1_0=2 + + +# configuration item: the number of rotors +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: rotor main_dev is 1 +# minor_dev: rotor minor_dev is 5 +dev_num_1_5=1 + + +# configuration item: fan presence status +# format: dev_present_status_[main_dev_id][fan_index] +# main_dev_id: fan main_dev_id is 1 +# fan_index: start from 1 +dev_present_status.mode_1_1=config +dev_present_status.src_1_1=cpld +dev_present_status.frmt_1_1=bit +dev_present_status.pola_1_1=negative +dev_present_status.addr_1_1=0x00010094 +dev_present_status.len_1_1=1 +dev_present_status.bit_offset_1_1=0 + +dev_present_status.mode_1_2=config +dev_present_status.src_1_2=cpld +dev_present_status.frmt_1_2=bit +dev_present_status.pola_1_2=negative +dev_present_status.addr_1_2=0x00010094 +dev_present_status.len_1_2=1 +dev_present_status.bit_offset_1_2=1 + + +# configuration item: fan rotor status +# format: fan_roll_status_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_roll_status.mode_1_0=config +fan_roll_status.int_cons_1_0= +fan_roll_status.src_1_0=cpld +fan_roll_status.frmt_1_0=bit +fan_roll_status.pola_1_0=positive +fan_roll_status.fpath_1_0= +fan_roll_status.addr_1_0=0x00010095 +fan_roll_status.len_1_0=1 +fan_roll_status.bit_offset_1_0=0 + + +fan_roll_status.mode_2_0=config +fan_roll_status.int_cons_2_0= +fan_roll_status.src_2_0=cpld +fan_roll_status.frmt_2_0=bit +fan_roll_status.pola_2_0=positive +fan_roll_status.fpath_2_0= +fan_roll_status.addr_2_0=0x00010095 +fan_roll_status.len_2_0=1 +fan_roll_status.bit_offset_2_0=1 + + +# configuration item: fan speed +# format: fan_speed_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_speed.mode_1_0=config +fan_speed.int_cons_1_0= +fan_speed.src_1_0=cpld +fan_speed.frmt_1_0=byte +fan_speed.pola_1_0= +fan_speed.fpath_1_0= +fan_speed.addr_1_0=0x00010098 +fan_speed.len_1_0=1 +fan_speed.bit_offset_1_0= +fan_speed.int_extra1_1_0=1 + + +fan_speed.mode_2_0=config +fan_speed.int_cons_2_0= +fan_speed.src_2_0=cpld +fan_speed.frmt_2_0=byte +fan_speed.pola_2_0= +fan_speed.fpath_2_0= +fan_speed.addr_2_0=0x00010099 +fan_speed.len_2_0=1 +fan_speed.bit_offset_2_0= +fan_speed.int_extra1_2_0=1 + + +# configuration item: fan pwm +# format: fan_ratio_[fan_id]_[motor_id] +# fan_id: start from 1 +# motor_id: start from 0 +fan_ratio.mode_1_0=config +fan_ratio.int_cons_1_0= +fan_ratio.src_1_0=cpld +fan_ratio.frmt_1_0=byte +fan_ratio.pola_1_0= +fan_ratio.fpath_1_0= +fan_ratio.addr_1_0=0x00010090 +fan_ratio.len_1_0=1 +fan_ratio.bit_offset_1_0= + +fan_ratio.mode_2_0=config +fan_ratio.int_cons_2_0= +fan_ratio.src_2_0=cpld +fan_ratio.frmt_2_0=byte +fan_ratio.pola_2_0= +fan_ratio.fpath_2_0= +fan_ratio.addr_2_0=0x00010091 +fan_ratio.len_2_0=1 +fan_ratio.bit_offset_2_0= diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg new file mode 100644 index 000000000000..8b2d41974eb3 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_PSU.cfg @@ -0,0 +1,64 @@ +# configuration item: the number of psus +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: psu main_dev is 2 +# minor_dev: psu minor_dev not exist(0) +dev_num_2_0=2 + + +# configuration item: psu status +# format: psu_status_[psu_index]_[status_id] +# psu_index: start from 1 +# status_id: 0: presence 1: output 2: alert +# psu1 presence status +psu_status.mode_1_0=config +psu_status.src_1_0=cpld +psu_status.frmt_1_0=bit +psu_status.pola_1_0=negative +psu_status.addr_1_0=0x00020010 +psu_status.len_1_0=1 +psu_status.bit_offset_1_0=0 + +# psu1 output status +psu_status.mode_1_1=config +psu_status.src_1_1=cpld +psu_status.frmt_1_1=bit +psu_status.pola_1_1=positive +psu_status.addr_1_1=0x00020011 +psu_status.len_1_1=1 +psu_status.bit_offset_1_1=0 + +# psu1 alert status +psu_status.mode_1_2=config +psu_status.src_1_2=cpld +psu_status.frmt_1_2=bit +psu_status.pola_1_2=negative +psu_status.addr_1_2=0x00020011 +psu_status.len_1_2=1 +psu_status.bit_offset_1_2=0 + +# psu2 presence status +psu_status.mode_2_0=config +psu_status.src_2_0=cpld +psu_status.frmt_2_0=bit +psu_status.pola_2_0=negative +psu_status.addr_2_0=0x00020010 +psu_status.len_2_0=1 +psu_status.bit_offset_2_0=1 + +# psu2 output status +psu_status.mode_2_1=config +psu_status.src_2_1=cpld +psu_status.frmt_2_1=bit +psu_status.pola_2_1=positive +psu_status.addr_2_1=0x00020011 +psu_status.len_2_1=1 +psu_status.bit_offset_2_1=1 + +# psu2 alert status +psu_status.mode_2_2=config +psu_status.src_2_2=cpld +psu_status.frmt_2_2=bit +psu_status.pola_2_2=negative +psu_status.addr_2_2=0x00020011 +psu_status.len_2_2=1 +psu_status.bit_offset_2_2=1 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg new file mode 100644 index 000000000000..9cfdcd29eb8f --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/WB_PLAT_SFF.cfg @@ -0,0 +1,54 @@ +# configuration item: the number of sffs +# format: dev_num_[main_dev]_[minor_dev] +# main_dev: sff main_dev is 3 +# minor_dev: sff minor_dev not exist(0) +dev_num_3_0=4 + + +# configuration item: The directory name of sff sysfs +# format: sff_dir_name_[sff_index] +# sff_index: start from 1 +sff_dir_name_1 =sff49 +sff_dir_name_2 =sff50 +sff_dir_name_3 =sff51 +sff_dir_name_4 =sff52 + + +# configuration item: sff cpld register status +# format: sff_cpld_reg_[sff_index]_[cpld_reg] +# sff_index: start from 1 +# cpld_reg: 1: power_on, 2: tx_fault, 3: tx_dis, 4:pre_n, 5:rx_los +# 6: reset, 7: lpmode, 8: module_present, 9: interrupt + +# sff cpld presence status +sff_cpld_reg.mode_1_8=config +sff_cpld_reg.src_1_8=cpld +sff_cpld_reg.frmt_1_8=bit +sff_cpld_reg.pola_1_8=negative +sff_cpld_reg.addr_1_8=0x00020030 +sff_cpld_reg.len_1_8=1 +sff_cpld_reg.bit_offset_1_8=1 + +sff_cpld_reg.mode_2_8=config +sff_cpld_reg.src_2_8=cpld +sff_cpld_reg.frmt_2_8=bit +sff_cpld_reg.pola_2_8=negative +sff_cpld_reg.addr_2_8=0x00020030 +sff_cpld_reg.len_2_8=1 +sff_cpld_reg.bit_offset_2_8=0 + +sff_cpld_reg.mode_3_8=config +sff_cpld_reg.src_3_8=cpld +sff_cpld_reg.frmt_3_8=bit +sff_cpld_reg.pola_3_8=negative +sff_cpld_reg.addr_3_8=0x00020030 +sff_cpld_reg.len_3_8=1 +sff_cpld_reg.bit_offset_3_8=3 + +sff_cpld_reg.mode_4_8=config +sff_cpld_reg.src_4_8=cpld +sff_cpld_reg.frmt_4_8=bit +sff_cpld_reg.pola_4_8=negative +sff_cpld_reg.addr_4_8=0x00020030 +sff_cpld_reg.len_4_8=1 +sff_cpld_reg.bit_offset_4_8=2 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/cfg_file_name b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/cfg_file_name new file mode 100644 index 000000000000..5f49420441a5 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/plat_sysfs_cfg/cfg_file_name @@ -0,0 +1,4 @@ +WB_PLAT_CPLD +WB_PLAT_FAN +WB_PLAT_PSU +WB_PLAT_SFF diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/service/subnetwork.service b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/service/subnetwork.service new file mode 100644 index 000000000000..666046592116 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/service/subnetwork.service @@ -0,0 +1,13 @@ +[Unit] +Description=Configuration eth0.4088 subnetwork +After=network.target +DefaultDependencies=no + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/subnetwork.py start +ExecStop=/usr/local/bin/subnetwork.py stop +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/setup.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/setup.py new file mode 100755 index 000000000000..a3be1cd61fbb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/setup.py @@ -0,0 +1,40 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation', + license='Apache 2.0', + author='SONiC Team', + author_email='support', + url='', + maintainer='support', + maintainer_email='', + packages=[ + 'sonic_platform', + 'plat_hal', + 'wbutil', + 'eepromutil', + 'restful_util', + 'hal-config', + 'config', + ], + py_modules=[ + 'hal_pltfm', + 'platform_util', + 'platform_intf', + ], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/__init__.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/__init__.py new file mode 100644 index 000000000000..b70995a582fc --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/__init__.py @@ -0,0 +1,2 @@ +__all__ = ["platform", "chassis", "sfp", "eeprom", "component", "thermal", "psu", "fan", "fan_drawer", "watchdog"] +from . import platform diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/chassis.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/chassis.py new file mode 100644 index 000000000000..96855d0d57ff --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/chassis.py @@ -0,0 +1,480 @@ +#!/usr/bin/env python3 + +############################################################################# +# +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + +try: + import time + import sys + from sonic_platform_base.chassis_base import ChassisBase + from sonic_platform.sfp import Sfp + from sonic_platform.psu import Psu + # from sonic_platform.fan import Fan + from sonic_platform.fan_drawer import FanDrawer + from sonic_platform.thermal import Thermal + # from sonic_platform.watchdog import Watchdog + from sonic_platform.component import Component + from sonic_platform.eeprom import Eeprom + from plat_hal.baseutil import baseutil + + from plat_hal.interface import interface + from .restful_interface import RestfulApi + +except ImportError as error: + raise ImportError(str(error) + "- required module not found")from error + + +class Chassis(ChassisBase): + """ + Platform-specific Chassis class + """ + # List of Dcdc objects representing all dcdc + # available on the chassis + _dcdc_list = None + + STATUS_INSERTED = "1" + STATUS_REMOVED = "0" + STATUS_NORMAL = "0" + STATUS_ABNORMAL = "1" + sfp_present_dict = {} + fan_present_dict = {} + voltage_status_dict = {} + + def __init__(self): + ChassisBase.__init__(self) + self.int_case = interface() + self.restful = RestfulApi() + + self.led_map = { + "0": self.STATUS_LED_COLOR_OFF, + "1": self.STATUS_LED_COLOR_GREEN, + "2": self.STATUS_LED_COLOR_AMBER, + "3": self.STATUS_LED_COLOR_RED + } + + # Initialize SFP list + + # sfp.py will read eeprom contents and retrive the eeprom data. + # It will also provide support sfp controls like reset and setting + # low power mode. + # We pass the eeprom path and sfp control path from chassis.py + # So that sfp.py implementation can be generic to all platforms + try: + self._sfp_list = [] + self.port_num = baseutil.get_config().get("sfps", None).get("port_num", 0) + self.port_start_index = baseutil.get_config().get("sfps", None).get("port_index_start", 0) + # fix problem with first index is 1, we add a fake sfp node + if self.port_start_index == 1: + self._sfp_list.append(Sfp(1)) + + # sfp id always start at 1 + for index in range(1, self.port_num + 1): + self._sfp_list.append(Sfp(index)) + + for i in range(self.port_start_index, self.port_start_index + self.port_num): + self.sfp_present_dict[i] = self.STATUS_REMOVED + + except Exception as err: + print("SFP init error: %s" % str(err)) + + try: + self._eeprom = Eeprom(self.int_case) + except Exception as err: + print("EEPROM INIT ERROR %s" % str(err)) + + # Initialize watchdog + # self._watchdog = Watchdog() + fantray_num = self.restful.get_fan_total_number() + for index in range(fantray_num): + fandrawer = FanDrawer(self.restful, index + 1) + self._fan_drawer_list.append(fandrawer) + self._fan_list.extend(fandrawer._fan_list) + + psu_num = self.restful.get_psu_total_number() + for index in range(psu_num): + psuobj = Psu(self.restful, index + 1) + self._psu_list.append(psuobj) + + thermal_num = self.restful.get_thermal_total_number() + for index in range(thermal_num): + self._thermal_list.append(Thermal(self.restful, index)) + + cpld_num = self.restful.get_cpld_total_number() + for index in range(cpld_num): + self._component_list.append(Component(self.restful, index, "cpld")) + fpga_num = self.restful.get_fpga_total_number() + for index in range(fpga_num): + self._component_list.append(Component(self.restful, index, "fpga")) + bois_num = self.restful.get_bios_total_number() + for index in range(bois_num): + self._component_list.append(Component(self.restful, index, "bios")) + bmc_num = self.restful.get_bmc_total_number() + for index in range(bmc_num): + self._component_list.append(Component(self.restful, index, "bmc")) + + def get_name(self): + """ + Retrieves the name of the chassis + Returns: + string: The name of the chassis + """ + name = '' + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return '' + + e = sys_eeprom.read_eeprom() + name = sys_eeprom.modelstr(e) + if name is None: + return '' + return name + + def get_presence(self): + """ + Retrieves the presence of the chassis + Returns: + bool: True if chassis is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the chassis + Returns: + string: Model/part number of chassis + """ + model = '' + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return '' + + e = sys_eeprom.read_eeprom() + model = sys_eeprom.modelnumber(e) + if model is None: + return '' + return model + + def get_serial_number(self): + """ + Retrieves the hardware serial number for the chassis + + Returns: + A string containing the hardware serial number for this chassis. + """ + serial_number = '' + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return '' + + e = sys_eeprom.read_eeprom() + serial_number = sys_eeprom.serial_number_str(e) + if serial_number is None: + return '' + + return serial_number + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + device_version = '' + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return '' + + e = sys_eeprom.read_eeprom() + device_version = sys_eeprom.deviceversion(e) + if device_version is None: + return '' + + return device_version + + def get_serial(self): + """ + Retrieves the serial number of the chassis (Service tag) + Returns: + string: Serial number of chassis + """ + return self.get_serial_number() + + def get_status(self): + """ + Retrieves the operational status of the chassis + Returns: + bool: A boolean value, True if chassis is operating properly + False if not + """ + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + def initizalize_system_led(self): + return True + + def set_status_led(self, color): + return False + + def get_status_led(self): + """ + Gets the state of the system LED + + Returns: + A string, one of the valid LED color strings which could be vendor + specified. + """ + led_status = None + led_status = self.restful.get_sysled() + if led_status is None: + return 'N/A' + return self.led_map.get(led_status, "unknown status %s" % led_status) + + def get_base_mac(self): + """ + Retrieves the base MAC address for the chassis + + Returns: + A string containing the MAC address in the format + 'XX:XX:XX:XX:XX:XX' + """ + base_mac = '' + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return '' + + e = sys_eeprom.read_eeprom() + base_mac = sys_eeprom.base_mac_addr(e) + if base_mac is None: + return '' + + return base_mac.upper() + + def get_system_eeprom_info(self): + """ + Retrieves the full content of system EEPROM information for the chassis + + Returns: + A dictionary where keys are the type code defined in + OCP ONIE TlvInfo EEPROM format and values are their corresponding + values. + Ex. { '0x21':'AG9064', '0x22':'V1.0', '0x23':'AG9064-0109867821', + '0x24':'001c0f000fcd0a', '0x25':'02/03/2018 16:22:00', + '0x26':'01', '0x27':'REV01', '0x28':'AG9064-C2358-16G'} + """ + sys_eeprom = self.get_eeprom() + if sys_eeprom is None: + return {} + return sys_eeprom.system_eeprom_info() + + def get_thermal_manager(self): + """ + Retrieves thermal manager class on this chassis + :return: A class derived from ThermalManagerBase representing the + specified thermal manager. ThermalManagerBase is returned as default + """ + return False + + def get_reboot_cause(self): + """ + Retrieves the cause of the previous reboot + Returns: + A tuple (string, string) where the first element is a string + containing the cause of the previous reboot. This string must be + one of the predefined strings in this class. If the first string + is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be used + to pass a description of the reboot cause. + """ + reboot_cause_msg = self.int_case.get_cpu_reboot_cause() + if "Power Loss" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_POWER_LOSS + elif "Watchdog" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_WATCHDOG + elif "BMC reboot" in reboot_cause_msg or "BMC powerdown" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_HARDWARE_OTHER + elif "Thermal Overload: ASIC" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_THERMAL_OVERLOAD_ASIC + elif "Thermal Overload: Other" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_THERMAL_OVERLOAD_OTHER + elif "Other" in reboot_cause_msg: + reboot_cause_type = self.REBOOT_CAUSE_NON_HARDWARE + else: + reboot_cause_type = self.REBOOT_CAUSE_NON_HARDWARE + return (reboot_cause_type, reboot_cause_msg) + + def get_module(self, index): + """ + Retrieves module represented by (0-based) index + + Args: + index: An integer, the index (0-based) of the module to + retrieve + + Returns: + An object dervied from ModuleBase representing the specified + module + """ + module = None + + try: + if self.get_num_modules(): + module = self._module_list[index] + except IndexError: + sys.stderr.write("Module index {} out of range (0-{})\n".format( + index, len(self._module_list) - 1)) + + return module + + def get_fan_drawer(self, index): + """ + Retrieves fan drawers represented by (0-based) index + + Args: + index: An integer, the index (0-based) of the fan drawer to + retrieve + + Returns: + An object dervied from FanDrawerBase representing the specified fan + drawer + """ + fan_drawer = None + + try: + if self.get_num_fan_drawers(): + fan_drawer = self._fan_drawer_list[index] + except IndexError: + sys.stderr.write("Fan drawer index {} out of range (0-{})\n".format( + index, len(self._fan_drawer_list) - 1)) + + return fan_drawer + + def get_change_event(self, timeout=0): + """ + Returns a nested dictionary containing all devices which have + experienced a change at chassis level + + Args: + timeout: Timeout in milliseconds (optional). If timeout == 0, + this method will block until a change is detected. + + Returns: + (bool, dict): + - bool: True if call successful, False if not; + - dict: A nested dictionary where key is a device type, + value is a dictionary with key:value pairs in the format of + {'device_id':'device_event'}, where device_id is the device ID + for this device and device_event. + The known devices's device_id and device_event was defined as table below. + ----------------------------------------------------------------- + device | device_id | device_event | annotate + ----------------------------------------------------------------- + 'fan' '' '0' Fan removed + '1' Fan inserted + + 'sfp' '' '0' Sfp removed + '1' Sfp inserted + '2' I2C bus stuck + '3' Bad eeprom + '4' Unsupported cable + '5' High Temperature + '6' Bad cable + + 'voltage' '' '0' Vout normal + '1' Vout abnormal + -------------------------------------------------------------------- + Ex. {'fan':{'0':'0', '2':'1'}, 'sfp':{'11':'0', '12':'1'}, + 'voltage':{'U20':'0', 'U21':'1'}} + Indicates that: + fan 0 has been removed, fan 2 has been inserted. + sfp 11 has been removed, sfp 12 has been inserted. + monitored voltage U20 became normal, voltage U21 became abnormal. + Note: For sfp, when event 3-6 happened, the module will not be avalaible, + XCVRD shall stop to read eeprom before SFP recovered from error status. + """ + + change_event_dict = {"fan": {}, "sfp": {}, "voltage": {}} + + start_time = time.time() + forever = False + + if timeout == 0: + forever = True + elif timeout > 0: + timeout = timeout / float(1000) # Convert to secs + else: + print("get_change_event:Invalid timeout value: %s" % timeout) + return False, change_event_dict + + end_time = start_time + timeout + if start_time > end_time: + print("get_change_event:time wrap / invalid timeout value: %s" % timeout) + return False, change_event_dict # Time wrap or possibly incorrect timeout + try: + while timeout >= 0: + # check for sfp + sfp_change_dict = self.get_transceiver_change_event() + + if sfp_change_dict: + change_event_dict["sfp"] = sfp_change_dict + return True, change_event_dict + if forever: + time.sleep(1) + else: + timeout = end_time - time.time() + if timeout >= 1: + time.sleep(1) # We poll at 1 second granularity + else: + if timeout > 0: + time.sleep(timeout) + return True, change_event_dict + except Exception as e: + print(e) + print("get_change_event: Should not reach here.") + return False, change_event_dict + + def get_transceiver_change_event(self): + current_sfp_present_dict = {} + ret_dict = {} + + # Check for OIR events and return ret_dict + for i in range(self.port_start_index, self.port_start_index + self.port_num): + sfp = self._sfp_list[i] + if sfp.get_presence(): + current_sfp_present_dict[i] = self.STATUS_INSERTED + + else: + current_sfp_present_dict[i] = self.STATUS_REMOVED + + # Update reg value + if current_sfp_present_dict == self.sfp_present_dict: + return ret_dict + + for index, status in current_sfp_present_dict.items(): + if self.sfp_present_dict[index] != status: + ret_dict[index] = status + + self.sfp_present_dict = current_sfp_present_dict + + return ret_dict + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/component.py new file mode 100644 index 000000000000..85f27a016fb2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/component.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Components' (e.g., BIOS, CPLD, FPGA, etc.) available in +# the platform +# +######################################################################## + +try: + import time + import subprocess + import os + from sonic_platform_base.component_base import ComponentBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + + +FIRMWARE_UPDATE_DIR = "/tmp/.firmwareupdate/" + +class Component(ComponentBase): + """Platform-specific Component class""" + + def __init__(self, interface_obj, index, fw_type): + + self.restful = interface_obj + self.fw_id = fw_type + str(index) + + def get_fw_info(self): + return self.restful.get_fw_by_id(self.fw_id) + + def get_name(self): + """ + Retrieves the name of the component + + Returns: + A string containing the name of the component + """ + fw_dict = self.get_fw_info() + if not fw_dict: + return "N/A" + return fw_dict.get("alias", "N/A") + + def get_description(self): + """ + Retrieves the description of the component + + Returns: + A string containing the description of the component + """ + fw_dict = self.get_fw_info() + if not fw_dict: + return "N/A" + return fw_dict.get("type", "N/A") + + def get_firmware_version(self): + """ + Retrieves the firmware version of the component + + Note: the firmware version will be read from HW + + Returns: + A string containing the firmware version of the component + """ + fw_dict = self.get_fw_info() + if not fw_dict: + return "N/A" + return fw_dict.get("firmware_version", "N/A") + + def get_available_firmware_version(self, image_path): + """ + Retrieves the available firmware version of the component + + Note: the firmware version will be read from image + + Args: + image_path: A string, path to firmware image + + Returns: + A string containing the available firmware version of the component + """ + raise NotImplementedError + + def get_firmware_update_notification(self, image_path): + """ + Retrieves a notification on what should be done in order to complete + the component firmware update + + Args: + image_path: A string, path to firmware image + + Returns: + A string containing the component firmware update notification if required. + By default 'None' value will be used, which indicates that no actions are required + """ + return None + + def install_firmware(self, image_path): + """ + Installs firmware to the component + + This API performs firmware installation only: this may/may not be the same as firmware update. + In case platform component requires some extra steps (apart from calling Low Level Utility) + to load the installed firmware (e.g, reboot, power cycle, etc.) - this must be done manually by user + + Note: in case immediate actions are required to complete the component firmware update + (e.g., reboot, power cycle, etc.) - will be done automatically by API and no return value provided + + Args: + image_path: A string, path to firmware image + + Returns: + A boolean, True if install was successful, False if not + """ + if not os.path.isfile(image_path): + print("ERROR: %s not found" % image_path) + return False + cmdstr = "upgrade.py cold %s %d" % (image_path, 0) + status, output = subprocess.getstatusoutput(cmdstr) + if status == 0: + print("INFO: %s firmware install succeeded" % self.get_name()) + return True + print("%s install failed. status:%d, output:\n%s" % (self.get_name(), status, output)) + return False + + def update_firmware(self, image_path): + """ + Updates firmware of the component + + This API performs firmware update: it assumes firmware installation and loading in a single call. + In case platform component requires some extra steps (apart from calling Low Level Utility) + to load the installed firmware (e.g, reboot, power cycle, etc.) - this will be done automatically by API + + Args: + image_path: A string, path to firmware image + + Raises: + RuntimeError: update failed + """ + raise RuntimeError("not support") + + def auto_update_firmware(self, image_path, boot_type): + """ + Updates firmware of the component + + This API performs firmware update automatically based on boot_type: it assumes firmware installation + and/or creating a loading task during the reboot, if needed, in a single call. + In case platform component requires some extra steps (apart from calling Low Level Utility) + to load the installed firmware (e.g, reboot, power cycle, etc.) - this will be done automatically during the reboot. + The loading task will be created by API. + + Args: + image_path: A string, path to firmware image + boot_type: A string, reboot type following the upgrade + - none/fast/warm/cold + + Returns: + Output: A return code + return_code: An integer number, status of component firmware auto-update + - return code of a positive number indicates successful auto-update + - status_installed = 1 + - status_updated = 2 + - status_scheduled = 3 + - return_code of a negative number indicates failed auto-update + - status_err_boot_type = -1 + - status_err_image = -2 + - status_err_unknown = -3 + + Raises: + RuntimeError: auto-update failure cause + """ + raise RuntimeError("not support") diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/eeprom.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/eeprom.py new file mode 100644 index 000000000000..05fcc3c25678 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/eeprom.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +######################################################################## +# +# Module contains platform specific implementation of SONiC Platform +# Base API and provides the EEPROMs' information. +# +# The different EEPROMs available are as follows: +# - System EEPROM : Contains Serial number, Service tag, Base MA +# address, etc. in ONIE TlvInfo EEPROM format. +# - PSU EEPROM : Contains Serial number, Part number, Service Tag, +# PSU type, Revision. +# - Fan EEPROM : Contains Serial number, Part number, Service Tag, +# Fan type, Number of Fans in Fantray, Revision. +######################################################################## + +try: + from sonic_eeprom import eeprom_tlvinfo +except ImportError as error: + raise ImportError(str(error) + "- required module not found") from error + + +class Eeprom(eeprom_tlvinfo.TlvInfoDecoder): + + def __init__(self, interface_obj): + self.int_case = interface_obj + self.name = "ONIE_E2" + + eeprom_path = self.int_case.get_onie_e2_path(self.name) + if eeprom_path is None: + raise ValueError("get eeprom path failed") + + super().__init__(eeprom_path, 0, "", True) + + def modelnumber(self, e): + ''' + Returns the value field of the model(part) number TLV as a string + ''' + (is_valid, t) = self.get_tlv_field(e, self._TLV_CODE_PART_NUMBER) + if not is_valid: + return super().part_number_str(e) + + return t[2].decode("ascii") + + def deviceversion(self, e): + ''' + Returns the value field of the Device Version as a string + ''' + (is_valid, t) = self.get_tlv_field(e, self._TLV_CODE_DEVICE_VERSION) + if not is_valid: + return "N/A" + + return str(ord(t[2])) + + def system_eeprom_info(self): + ''' + Retrieves the full content of system EEPROM information for the chassis + + Returns: + A dictionary where keys are the type code defined in + OCP ONIE TlvInfo EEPROM format and values are their corresponding + values. + Ex. { '0x21':'AG9064', '0x22':'V1.0', '0x23':'AG9064-0109867821', + '0x24':'001c0f000fcd0a', '0x25':'02/03/2018 16:22:00', + '0x26':'01', '0x27':'REV01', '0x28':'AG9064-C2358-16G'} + ''' + sys_eeprom_dict = {} + e = self.read_eeprom() + if self._TLV_HDR_ENABLED: + if not self.is_valid_tlvinfo_header(e): + return {} + total_len = (e[9] << 8) | e[10] + tlv_index = self._TLV_INFO_HDR_LEN + tlv_end = self._TLV_INFO_HDR_LEN + total_len + else: + tlv_index = self.eeprom_start + tlv_end = self._TLV_INFO_MAX_LEN + + while (tlv_index + 2) < len(e) and tlv_index < tlv_end: + if not self.is_valid_tlv(e[tlv_index:]): + break + + tlv = e[tlv_index:tlv_index + 2 + e[tlv_index + 1]] + code = "0x%02X" % tlv[0] + name, value = self.decoder(None, tlv) + sys_eeprom_dict[code] = value + + if e[tlv_index] == self._TLV_CODE_QUANTA_CRC or \ + e[tlv_index] == self._TLV_CODE_CRC_32: + break + tlv_index += e[tlv_index + 1] + 2 + + return sys_eeprom_dict diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan.py new file mode 100644 index 000000000000..d4735bb98126 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan.py @@ -0,0 +1,324 @@ +#!/usr/bin/env python3 +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Fans' information which are available in the platform. +# +######################################################################## + +try: + import time + from sonic_platform_base.fan_base import FanBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + +PSU_NOT_PRESENCE = 0x01 + +class Fan(FanBase): + """Platform-specific Fan class""" + + def __init__(self, interface_obj, fantray_index, fan_index, psu_fan=False, psu_index=0): + self.restful = interface_obj + self.fantray_index = fantray_index + self.fan_index = fan_index + self.psu_index = psu_index + self.is_psu_fan = psu_fan + if not self.is_psu_fan: + self.name = "fan" + str(fantray_index) + else: + self.name = "psu" + str(psu_index) + + self.led_map = { + "0": self.STATUS_LED_COLOR_OFF, + "1": self.STATUS_LED_COLOR_GREEN, + "2": self.STATUS_LED_COLOR_AMBER, + "3": self.STATUS_LED_COLOR_RED + } + + def fan_dict_update(self): + if not self.is_psu_fan: + return self.restful.get_fan_info(self.name) + else: + return self.restful.get_psu_info(self.name) + + def get_name(self): + """ + Retrieves the fan name + Returns: + string: The name of the device + """ + if not self.is_psu_fan: + return "Fantray{}_{}".format(self.fantray_index, self.fan_index) + return "PSU{}_FAN{}".format(self.psu_index, self.fan_index) + + def get_model(self): + """ + Retrieves the part number of the FAN + Returns: + string: Part number of FAN + """ + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("model_name", 'N/A') + else: + return 'N/A' + + def get_serial(self): + """ + Retrieves the serial number of the FAN + Returns: + string: Serial number of FAN + """ + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("serial_number", 'N/A') + else: + return 'N/A' + + def get_presence(self): + """ + Retrieves the presence of the FAN + Returns: + bool: True if fan is present, False if not + """ + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is None: + return False + status = fan_info.get('status', None) + if status is None: + return False + if status == '1' or status == '2': + return True + return False + else: + psu_info = self.fan_dict_update() + if psu_info is None: + return False + status = psu_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + if int(status, 16) & PSU_NOT_PRESENCE == 0: + return True + return False + + def get_status(self): + """ + Retrieves the operational status of the FAN + Returns: + bool: True if FAN is operating properly, False if not + """ + if not self.get_presence(): + return False + + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is not None: + status = fan_info.get('status', None) + if status == '1': + return True + else: + return False + else: + psu_info = self.fan_dict_update() + if psu_info is None: + return False + status = psu_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + status = int(status, 16) + if status != 0: + return False + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True + + def get_direction(self): + """ + Retrieves the fan airflow direction + Returns: + A string, either FAN_DIRECTION_INTAKE or FAN_DIRECTION_EXHAUST + depending on fan direction + + Notes: + - Forward/Exhaust : Air flows from Port side to Fan side. + - Reverse/Intake : Air flows from Fan side to Port side. + """ + fan_info = self.fan_dict_update() + if fan_info is None: + return self.FAN_DIRECTION_NOT_APPLICABLE + if not self.is_psu_fan: + air_flow = fan_info.get("direction", "2") + else: + air_flow = fan_info.get("fan_direction", "2") + if air_flow == "0": + return self.FAN_DIRECTION_INTAKE + elif air_flow == "1": + return self.FAN_DIRECTION_EXHAUST + else: + return self.FAN_DIRECTION_NOT_APPLICABLE + + def get_speed(self): + """ + Retrieves the speed of fan as a percentage of full speed + + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + """ + if not self.get_presence(): + return 0 + + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is not None: + motor = fan_info.get('motor{}'.format(self.fan_index)) + value = motor.get('speed') + max_speed = motor.get('speed_max') + else: + psu_info = self.fan_dict_update() + if psu_info is not None: + value = psu_info.get('fan_speed', None) + max_speed = psu_info.get('fan_speed_max', None) + if value is None or value in self.restful.restful_err_str: + return None + if max_speed is None or max_speed in self.restful.restful_err_str: + return None + if isinstance(value, str): + value = int(value) + max_speed = int(max_speed) + pwm = value * 100 / max_speed + if pwm > 100: + pwm = 100 + elif pwm < 0: + pwm = 0 + return int(pwm) + + def get_speed_tolerance(self): + """ + Retrieves the speed tolerance of the fan + Returns: + An integer, the percentage of variance from target speed which is + considered tolerable + """ + # The default tolerance value is fixed as 30% + return 30 + + def set_speed(self, speed): + """ + Set fan speed to expected value + Args: + speed: An integer, the percentage of full fan speed to set fan to, + in the range 0 (off) to 100 (full speed) + Returns: + bool: True if set success, False if fail. + """ + return True + + def set_status_led(self, color): + """ + Set led to expected color + Args: + color: A string representing the color with which to set the + fan module status LED + Returns: + bool: True if set success, False if fail. + """ + # not supported + return False + + def get_status_led(self): + """ + Gets the state of the Fan status LED + + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings. + """ + if self.is_psu_fan: + # No LED available for PSU Fan + return 'N/A' + + if not self.get_presence(): + return 'N/A' + + fan_info = self.fan_dict_update() + if fan_info is None: + return 'N/A' + + led_status = fan_info.get('led_status', None) + if led_status is None: + return 'N/A' + + return self.led_map.get(led_status, 'N/A') + + def get_target_speed(self): + """ + Retrieves the target (expected) speed of the fan + Returns: + An integer, the percentage of full fan speed, in the range 0 (off) + to 100 (full speed) + """ + pwm = 0 + if not self.get_presence(): + return 0 + + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is not None: + pwm = fan_info.get('pwm') + else: + psu_info = self.fan_dict_update() + if psu_info is not None: + pwm = psu_info.get('fan_ratio') + if pwm is None or pwm in self.restful.restful_err_str: + return None + return int(pwm) + + def get_vendor(self): + """ + Retrieves the vendor name of the fan + + Returns: + string: Vendor name of fan + """ + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("vendor", 'N/A') + else: + return 'N/A' + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + if not self.is_psu_fan: + fan_info = self.fan_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("part_number", 'N/A') + else: + return 'N/A' diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan_drawer.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan_drawer.py new file mode 100644 index 000000000000..0d61f0142ab8 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/fan_drawer.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +# +# fan_drawer_base.py +# +# Abstract base class for implementing a platform-specific class with which +# to interact with a fan drawer module in SONiC +# + +try: + import time + from sonic_platform_base.fan_drawer_base import FanDrawerBase + from sonic_platform.fan import Fan +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + + +class FanDrawer(FanDrawerBase): + """ + Abstract base class for interfacing with a fan drawer + """ + # Device type definition. Note, this is a constant. + DEVICE_TYPE = "fan_drawer" + + def __init__(self, interface_obj, fantray_index): + FanDrawerBase.__init__(self) + self.fantray_index = fantray_index + self.restful = interface_obj + self.fantrayname = "fan" + str(fantray_index) + self.num_fans_per_fantray = self.restful.get_fan_rotor_number(self.fantrayname) + for i in range(self.num_fans_per_fantray): + self._fan_list.append(Fan(interface_obj, fantray_index, i + 1)) + + def fantray_dict_update(self): + return self.restful.get_fan_info(self.fantrayname) + + def get_name(self): + """ + Retrieves the name of the device + Returns: + string: The name of the device + """ + return "Fantray{}".format(self.fantray_index) + + def get_presence(self): + """ + Retrieves the presence of the FAN + Returns: + bool: True if fan is present, False if not + """ + fan_info = self.fantray_dict_update() + if fan_info is None: + return False + status = fan_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + if status == '1' or status == '2': + return True + return False + + def get_model(self): + """ + Retrieves the part number of the FAN + Returns: + string: Part number of FAN + """ + fan_info = self.fantray_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("model_name", 'N/A') + + def get_serial(self): + """ + Retrieves the serial number of the FAN + Returns: + string: Serial number of FAN + """ + fan_info = self.fantray_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("serial_number", 'N/A') + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + fan_info = self.fantray_dict_update() + if fan_info is None: + return 'N/A' + return fan_info.get("part_number", 'N/A') + + def get_status(self): + """ + Retrieves the operational status of the FAN + Returns: + bool: True if FAN is operating properly, False if not + """ + for i in range(self.num_fans_per_fantray): + if self._fan_list[i].get_status() is False: + return False + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True + + def get_num_fans(self): + """ + Retrieves the number of fans available on this fan drawer + Returns: + An integer, the number of fan modules available on this fan drawer + """ + return len(self._fan_list) + + def get_all_fans(self): + """ + Retrieves all fan modules available on this fan drawer + Returns: + A list of objects derived from FanBase representing all fan + modules available on this fan drawer + """ + return self._fan_list + + def set_status_led(self, *args): + """ + Sets the state of the fan drawer status LED + Args: + color: A string representing the color with which to set the + fan drawer status LED + Returns: + bool: True if status LED state is set successfully, False if not + """ + # not supported + return False + + def get_status_led(self): + """ + Gets the state of the Fan status LED + + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings. + """ + return 'N/A' + + def get_maximum_consumed_power(self): + """ + Retrives the maximum power drawn by Fan Drawer + + Returns: + A float, with value of the maximum consumable power of the + component. + """ + return 'N/A' + + def get_service_tag(self): + """ + Retrieves the service tag of the device + Returns: + string: The service tag of the device + """ + return 'N/A' + + def get_mfr_id(self): + """ + Retrieves the manufacturer's name (or ID) of the device + Returns: + string: Manufacturer's id of device + """ + return "Micas" diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/pcie.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/pcie.py new file mode 100644 index 000000000000..8ea66f339e96 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/pcie.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +######################################################################## +# +# Module contains a platform specific implementation of SONiC Platform +# Base PCIe class +# +######################################################################## + +try: + from sonic_platform_base.sonic_pcie.pcie_common import PcieUtil +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + + +class Pcie(PcieUtil): + """Platform-specific Pcie class""" + + def __init__(self, platform_path): + PcieUtil.__init__(self, platform_path) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/platform.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/platform.py new file mode 100644 index 000000000000..4d6fe03d93ac --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/platform.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +############################################################################# +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +############################################################################# + +try: + from sonic_platform_base.platform_base import PlatformBase + from sonic_platform.chassis import Chassis +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + + +class Platform(PlatformBase): + """ + Platform-specific class + """ + + def __init__(self): + PlatformBase.__init__(self) + self._chassis = Chassis() diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/psu.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/psu.py new file mode 100644 index 000000000000..9d6d06a39824 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/psu.py @@ -0,0 +1,615 @@ +#!/usr/bin/env python3 +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the PSUs' information which are available in the platform +# +######################################################################## + + +try: + import time + from sonic_platform_base.psu_base import PsuBase + from sonic_platform.fan import Fan +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + +PSU_NOT_PRESENCE = 0x01 +PSU_POWER_LOSS = 0x02 +PSU_FAN_FAULT = 0x04 +PSU_VOL_FAULT = 0x08 +PSU_CUR_FAULT = 0x10 +PSU_PWR_FAULT = 0x20 +PSU_TEMP_FAULT = 0x40 + +PSU_ERR_VALUE = -999999 + +class Psu(PsuBase): + """Platform-specific PSU class""" + + def __init__(self, interface_obj, index): + self._fan_list = [] + self._thermal_list = [] + self.restful = interface_obj + self.index = index + self.name = "psu" + str(index) + + self._fan_list.append(Fan(self.restful, 1, 1, psu_fan=True, psu_index=index)) + + self.led_map = { + "0": self.STATUS_LED_COLOR_OFF, + "1": self.STATUS_LED_COLOR_GREEN, + "2": self.STATUS_LED_COLOR_AMBER, + "3": self.STATUS_LED_COLOR_RED + } + + def _get_value(self, value): + return round(float(value) / 1000, 1) + + def psu_dict_update(self): + return self.restful.get_psu_info(self.name) + + def psu_status_dict_update(self): + psu_info = self.psu_dict_update() + if psu_info is None: + return None + status = psu_info.get('status', None) + psu_status_dict = {} + psu_status_dict['InputStatus'] = False + psu_status_dict['FanStatus'] = False + psu_status_dict['TempStatus'] = False + psu_status_dict['OutputStatus'] = False + psu_status_dict['Temperature'] = {} + psu_status_dict['Temperature']['Value'] = PSU_ERR_VALUE + psu_status_dict['Temperature']['Max'] = PSU_ERR_VALUE + psu_status_dict['FanSpeed'] = {} + psu_status_dict['FanSpeed']['Value'] = 0 + psu_status_dict['FanSpeed']['Ratio'] = 0 + psu_status_dict['FanSpeed']['Max'] = 0 + if status is None or status in self.restful.restful_err_str: + return psu_status_dict + status = int(status, 16) + if status & PSU_POWER_LOSS == 0: + psu_status_dict['InputStatus'] = True + if status & PSU_FAN_FAULT == 0: + psu_status_dict['FanStatus'] = True + if psu_info.get('fan_speed') not in self.restful.restful_err_str: + psu_status_dict['FanSpeed']['Value'] = int(psu_info.get('fan_speed')) + if psu_info.get('fan_ratio') not in self.restful.restful_err_str: + psu_status_dict['FanSpeed']['Ratio'] = int(psu_info.get('fan_ratio')) + if psu_info.get('fan_speed_max') not in self.restful.restful_err_str: + psu_status_dict['FanSpeed']['Max'] = int(psu_info.get('fan_speed_max')) + if status & PSU_TEMP_FAULT == 0: + psu_status_dict['TempStatus'] = True + if status & PSU_VOL_FAULT == 0: + psu_status_dict['OutputStatus'] = True + + psu_temp = psu_info.get('temp0', None) + if psu_temp is not None: + if psu_temp.get('value') not in self.restful.restful_err_str: + psu_status_dict['Temperature']['Value'] = float(psu_temp.get('value')) + if psu_temp.get('max') not in self.restful.restful_err_str: + psu_status_dict['Temperature']['Max'] = float(psu_temp.get('max')) + return psu_status_dict + + def psu_power_dict_update(self): + psu_info = self.psu_dict_update() + if psu_info is None: + return None + psu_power_dict = {} + psu_power_dict['Outputs'] = {} + psu_power_dict['Outputs']['Voltage'] = {} + psu_power_dict['Outputs']['Current'] = {} + psu_power_dict['Outputs']['Power'] = {} + psu_power_dict['Outputs']['Max_Power'] = {} + psu_power_dict['Inputs'] = {} + psu_power_dict['Inputs']['Voltage'] = {} + psu_power_dict['Inputs']['Current'] = {} + psu_power_dict['Inputs']['Power'] = {} + psu_power_dict['Outputs']['Voltage']['Value'] = psu_info.get('out_vol', PSU_ERR_VALUE) + psu_power_dict['Outputs']['Current']['Value'] = psu_info.get('out_cur', PSU_ERR_VALUE) + psu_power_dict['Outputs']['Power']['Value'] = psu_info.get('out_power', PSU_ERR_VALUE) + psu_power_dict['Outputs']['Max_Power']['Value'] = psu_info.get('out_max_power', PSU_ERR_VALUE) + psu_power_dict['Outputs']['Voltage']['HighAlarm'] = psu_info.get('out_cur', PSU_ERR_VALUE) + psu_power_dict['Outputs']['Voltage']['LowAlarm'] = psu_info.get('out_cur', PSU_ERR_VALUE) + psu_power_dict['Inputs']['Voltage']['Value'] = psu_info.get('in_vol', PSU_ERR_VALUE) + psu_power_dict['Inputs']['Current']['Value'] = psu_info.get('in_cur', PSU_ERR_VALUE) + psu_power_dict['Inputs']['Power']['Value'] = psu_info.get('in_power', PSU_ERR_VALUE) + psu_power_dict['Inputs']['Type'] = psu_info.get('type', "N/A") + return psu_power_dict + + def get_name(self): + """ + Retrieves the name of the device + + Returns: + string: The name of the device + """ + return "Psu{}".format(self.index) + + def get_mfr_id(self): + """ + Retrieves the manufacturer's name (or ID) of the device + Returns: + string: Manufacturer's id of device + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return "N/A" + val = psu_info.get("vendor", "") + if val == "": + return "N/A" + return val.rstrip('#') + + def get_presence(self): + """ + Retrieves the presence of the Power Supply Unit (PSU) + + Returns: + bool: True if PSU is present, False if not + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return False + status = psu_info.get('present', None) + if status is not None: + if status in self.restful.restful_err_str: + return False + if int(status) == 0: + return False + return True + # present is None, try to read status + status = psu_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + if int(status, 16) & PSU_NOT_PRESENCE == 0: + return True + return False + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + + Returns: + string: Model/part number of device + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return "N/A" + val = psu_info.get("model_name", "") + if val == "": + return "N/A" + return val + + def get_serial(self): + """ + Retrieves the serial number of the PSU + + Returns: + string: Serial number of PSU + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return "N/A" + val = psu_info.get("serial_number", "") + if val == "": + return "N/A" + return val.rstrip('#') + + def get_status(self): + """ + Retrieves the operational status of the PSU + + Returns: + bool: True if PSU is operating properly, False if not + """ + if not self.get_presence(): + return False + psu_info = self.psu_dict_update() + if psu_info is None: + return False + status = psu_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + status = int(status, 16) + if status != 0: + return False + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return True + + def get_voltage(self): + """ + Retrieves current PSU voltage output + + Returns: + A float number, the output voltage in volts, + e.g. 12.1 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_output = psu_power_dict.get("Outputs", None) + if cur_psu_output is None: + return 0 + tmp = cur_psu_output.get("Voltage", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_current(self): + """ + Retrieves present electric current supplied by PSU + + Returns: + A float number, electric current in amperes, + e.g. 15.4 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_output = psu_power_dict.get("Outputs", None) + if cur_psu_output is None: + return 0 + tmp = cur_psu_output.get("Current", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_power(self): + """ + Retrieves current energy supplied by PSU + + Returns: + A float number, the power in watts, + e.g. 302.6 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_output = psu_power_dict.get("Outputs", None) + if cur_psu_output is None: + return 0 + tmp = cur_psu_output.get("Power", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + value = round(float(value) / 1000, 1) + return self._get_value(value) + + + def get_powergood_status(self): + """ + Retrieves the powergood status of PSU + + Returns: + A boolean, True if PSU has stablized its output voltages and + passed all its internal self-tests, False if not. + """ + if not self.get_presence(): + return False + psu_info = self.psu_dict_update() + if psu_info is None: + return False + status = psu_info.get('status', None) + if status is None or status in self.restful.restful_err_str: + return False + status = int(status, 16) + if status != 0: + return False + return True + + def get_status_led(self): + """ + Gets the state of the PSU status LED + + Returns: + A string, one of the predefined STATUS_LED_COLOR_* strings. + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return self.STATUS_LED_COLOR_OFF + led_status = psu_info.get('led_status', None) + if led_status is None: + return self.STATUS_LED_COLOR_OFF + + return self.led_map.get(led_status, "unknown status %s" % led_status) + + def set_status_led(self, color): + """ + Sets the state of the PSU status LED + Args: + color: A string representing the color with which to set the + PSU status LED + Returns: + bool: True if status LED state is set successfully, False if + not + """ + # not supported + return False + + def get_temperature(self): + """ + Retrieves current temperature reading from PSU + + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + cur_psu_temp = psu_status_dict.get("Temperature", None) + if cur_psu_temp is None: + return 0 + value = cur_psu_temp.get("Value", None) + if value is None or value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_temperature_high_threshold(self): + """ + Retrieves the high threshold temperature of PSU + + Returns: + A float number, the high threshold temperature of PSU in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + cur_psu_temp = psu_status_dict.get("Temperature", None) + if cur_psu_temp is None: + return 0 + value = cur_psu_temp.get("Max", None) + if value is None or value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_voltage_high_threshold(self): + """ + Retrieves the high threshold PSU voltage output + + Returns: + A float number, the high threshold output voltage in volts, + e.g. 12.1 + """ + return 13.0 + + def get_voltage_low_threshold(self): + """ + Retrieves the low threshold PSU voltage output + + Returns: + A float number, the low threshold output voltage in volts, + e.g. 12.1 + """ + return 11.8 + + def get_input_voltage(self): + """ + Get the input voltage of the PSU + + Returns: + A float number, the input voltage in volts, + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_input = psu_power_dict.get("Inputs", None) + if cur_psu_input is None: + return 0 + tmp = cur_psu_input.get("Voltage", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_input_current(self): + """ + Get the input electric current of the PSU + + Returns: + A float number, the input current in amperes, e.g 220.3 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_input = psu_power_dict.get("Inputs", None) + if cur_psu_input is None: + return 0 + tmp = cur_psu_input.get("Current", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + return self._get_value(value) + + def get_input_power(self): + """ + Get the input current energy of the PSU + + Returns: + A float number, the input power in watts, e.g. 302.6 + """ + psu_status_dict = self.psu_status_dict_update() + if psu_status_dict is None: + return 0 + if psu_status_dict.get("InputStatus", False) is False: + value = 0 + else: + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_input = psu_power_dict.get("Inputs", None) + if cur_psu_input is None: + return 0 + tmp = cur_psu_input.get("Power", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + value = round(float(value) / 1000, 1) + return self._get_value(value) + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return "N/A" + val = psu_info.get("hardware_version", "") + if val == "": + return "N/A" + return val + + def get_vendor(self): + """ + Retrieves the vendor name of the psu + + Returns: + string: Vendor name of psu + """ + psu_info = self.psu_dict_update() + if psu_info is None: + return "N/A" + val = psu_info.get("vendor", "") + if val == "": + return "N/A" + return val.rstrip('#') + + def get_maximum_supplied_power(self): + """ + Retrieves the maximum supplied power by PSU + + Returns: + A float number, the maximum power output in Watts. + e.g. 1200.1 + """ + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return 0 + cur_psu_output = psu_power_dict.get("Outputs", None) + if cur_psu_output is None: + return 0 + tmp = cur_psu_output.get("Max_Power", None) + if tmp is None: + return 0 + value = tmp.get("Value", 0) + if value in self.restful.restful_err_str: + return 0 + value = round(float(value) / 1000, 1) + return self._get_value(value) + + + def get_thermal(self, index): + """ + Retrieves thermal unit represented by (0-based) index + + Args: + index: An integer, the index (0-based) of the thermal to + retrieve + + Returns: + An object dervied from ThermalBase representing the specified thermal + """ + return False + + def get_capacity(self): + """ + Gets the capacity (maximum output power) of the PSU in watts + Returns: + An integer, the capacity of PSU + """ + return int(self.get_maximum_supplied_power()) + + def get_type(self): + """ + Gets the type of the PSU + Returns: + A string, the type of PSU (AC/DC) + """ + psu_power_dict = self.psu_power_dict_update() + if psu_power_dict is None: + return "N/A" + psu_inputs = psu_power_dict.get("Inputs", None) + if psu_inputs is None: + return "N/A" + tmp = psu_inputs.get("Type", None) + if tmp is None: + return "N/A" + if tmp == "0": + return "DC" + if tmp == "1": + return "AC" + return "N/A" + + def get_service_tag(self): + """ + Retrieves the service tag of the device + Returns: + string: The service tag of the device + """ + return 'N/A' + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/restful_interface.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/restful_interface.py new file mode 100644 index 000000000000..49cdda394333 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/restful_interface.py @@ -0,0 +1,459 @@ +from restful_util.restful_api import RestfulApiClient +from platform_util import exec_os_cmd, get_value, dev_file_read +from plat_hal.baseutil import baseutil +import time +import sys +PY3K = sys.version_info >= (3, 0) +if PY3K: + from time import monotonic as _time +else: + from monotonic import monotonic as _time + +PSU_NOT_PRESENCE = 0x01 +PSU_POWER_LOSS = 0x02 +PSU_FAN_FAULT = 0x04 +PSU_VOL_FAULT = 0x08 +PSU_CUR_FAULT = 0x10 +PSU_PWR_FAULT = 0x20 +PSU_TEMP_FAULT = 0x40 + +PSU_ERR_VALUE = -999999 + + +def RestfulInfoUpdate(): + def decorator(func): + def wrapper(self, *args, **kwargs): + self.update_restful_info(func.__name__) + return func(self, *args, **kwargs) + return wrapper + return decorator + + +class RestfulApi(RestfulApiClient): + + func_map = { + "get_psu_total_number": "psu", + "get_psu_info": "psu", + "get_fan_total_number": "fan", + "get_fan_rotor_number": "fan", + "get_fan_info": "fan", + "get_all_dcdc_sensors": "sensor", + "get_dcdc_sensor_by_id": "sensor", + "get_all_temp_sensors": "temp_sensor", + "get_temp_sensor_by_id": "temp_sensor", + "get_all_vol_sensors": "vol_sensor", + "get_vol_sensor_by_id": "vol_sensor", + "get_all_cur_sensors": "cur_sensor", + "get_cur_sensor_by_id": "cur_sensor", + "get_cpld_total_number": "fw", + "get_cpld_by_id": "fw", + "get_bmc_by_id": "fw", + "get_bmc_total_number": "fw", + "get_sysled": "led", + } + + def __init__(self, default_gap=3): + self.gap = default_gap + self.config = baseutil.get_config() + self.eeprom_config = self.config.get("onie_e2", None) + self.reboot_cause_config = self.config.get("reboot_cause", None) + self.fpga_config = self.config.get("fpga_config", {}) + self.bios_config = self.config.get("bios_config", {}) + self.sw_config = self.config.get("switch_config", {}) + self.cpld_config = self.config.get("cpld_config", {}) + self.bmc_config = self.config.get("bmc_config", {}) + self.fan_config = self.config.get("fan_config", {}) + self.psu_config = self.config.get("psu_config", {}) + self.thermal_config = self.config.get("thermal_config", {}) + self.restful_ready = 0 + self.dcdc_sensors = None + self.fans = None + self.psus = None + self.temp_sensors = None + self.vol_sensors = None + self.cur_sensors = None + self.cplds = None + self.bmc = None + self.sysled = None + self.temp_filter = { + "temp0": "INLET_TEMP_PDB", + "temp1": "INLET_TEMP_LC", + "temp2": "OUTLET_2_TEMP", + "temp3": "OUTLET_1_TEMP", + "temp4": "ASIC_TEMP", + "temp5": "CPU", + "temp6": "PSU1_TEMP", + "temp7": "PSU2_TEMP", + "temp8": "PSU3_TEMP", + "temp9": "PSU4_TEMP", + } + self.restful_update_map = { + "psu": { + "update_time": 0, + "update_func": self.update_psus, + "url": self.PsusUrl + }, + "fan": { + "update_time": 0, + "update_func": self.update_fans, + "url": self.FansUrl + }, + "fw": { + "update_time": 0, + "update_func": self.update_firmwares, + "url": self.FirmwaresUrl + }, + "sensor": { + "update_time": 0, + "update_func": self.update_sensors, + "url": self.SensorsUrl + }, + "temp_sensor": { + "update_time": 0, + "update_func": self.update_temp_sensors, + "url": self.TempSensorsUrl + }, + "vol_sensor": { + "update_time": 0, + "update_func": self.update_vol_sensors, + "url": self.VolSensorsUrl + }, + "cur_sensor": { + "update_time": 0, + "update_func": self.update_cur_sensors, + "url": self.CurSensorsUrl + }, + "led": { + "update_time": 0, + "update_func": self.update_sysled, + "url": self.LEDsUrl + }, + } + self.restful_err_str = ("ACCESS FAILED", "NA", "N/A") + + def restful_check_ready(self): + if self.restful_ready == 1: + return True + retry = 60 + while retry >= 0: + tmp = self.get_request(self.HostnameUrl) + if tmp is None: + time.sleep(5) + continue + ret = tmp.get('message', 'Not OK') + code = tmp.get('code', 0) + if ret == 'OK' and code == 200: + self.restful_ready = 1 + return True + return False + + def update_restful_info(self, func_name): + tmp = self.restful_update_map.get(self.func_map.get(func_name, None)) + if tmp is not None: + last_time = tmp.get("update_time", 0) + local_time = _time() + func = tmp.get("update_func", None) + url = tmp.get("url", None) + if func is not None and local_time - last_time > self.gap: + ret, data = self.restful_request(url) + if ret: + func(data) + tmp["update_time"] = _time() + + def restful_request(self, url): + try: + tmp = self.get_request(url) + if not tmp: + return False, None + ret = tmp.get('message', 'Not OK') + code = tmp.get('code', 0) + if ret == 'OK' and code == 200: + data = tmp.get('data', None) + return True, data + return False, None + except Exception as e: + return False, None + + def update_firmwares(self, val): + try: + self.cplds = val.get('cpld', None) + self.bmc = val.get('bmc', None) + except Exception as e: + self.cplds = None + self.bmc = None + + def update_sysled(self, val): + try: + self.sysled = val.get('sysled', None) + except Exception as e: + self.sysled = None + + def update_psus(self, val): + try: + self.psus = val.get('psu', None) + except Exception as e: + self.psus = None + + def update_fans(self, val): + try: + self.fans = val.get('fan', None) + except Exception as e: + self.fans = None + + def update_sensors(self, val): + try: + cur_sensors = val.get('cur_sensor', None) + vol_sensors = val.get('vol_sensor', None) + temp_sensors = val.get('temp_sensor', None) + self.dcdc_sensors = {} + self.temp_sensors = {} + if cur_sensors is not None: + for name, data in cur_sensors.items(): + if isinstance(data, dict): + self.dcdc_sensors[name] = data + if vol_sensors is not None: + for name, data in vol_sensors.items(): + if isinstance(data, dict): + self.dcdc_sensors[name] = data + if temp_sensors is not None: + for name, data in temp_sensors.items(): + if isinstance(data, dict): + if name in self.temp_filter: + self.temp_sensors[name] = data + self.temp_sensors[name]["alias"] = self.temp_filter[name] + except Exception as e: + self.dcdc_sensors = None + self.temp_sensors = None + + def update_temp_sensors(self, val): + try: + temp_sensors = val.get('temp_sensor', None) + self.temp_sensors = {} + if temp_sensors is not None: + for name, data in temp_sensors.items(): + if isinstance(data, dict): + if name in self.temp_filter: + self.temp_sensors[name] = data + self.temp_sensors[name]["alias"] = self.temp_filter[name] + except Exception as e: + self.temp_sensors = None + + def update_vol_sensors(self, val): + try: + vol_sensors = val.get('vol_sensor', None) + self.vol_sensors = {} + if vol_sensors is not None: + for name, data in vol_sensors.items(): + if isinstance(data, dict): + self.vol_sensors[name] = data + except Exception as e: + self.vol_sensors = None + + def update_cur_sensors(self, val): + try: + cur_sensors = val.get('cur_sensor', None) + self.cur_sensors = {} + if cur_sensors is not None: + for name, data in cur_sensors.items(): + if isinstance(data, dict): + self.cur_sensors[name] = data + except Exception as e: + self.cur_sensors = None + + # Interface for Psu + def get_psu_total_number(self): + psu_num = self.psu_config.get("number", 0) + return psu_num + + + @RestfulInfoUpdate() + def get_psu_info(self, psu_name): + if self.psus is None: + return None + return self.psus.get(psu_name) + + # Interface for Fan + def get_fan_total_number(self): + fan_num = self.fan_config.get("num_fantrays", 0) + return fan_num + + def get_fan_rotor_number(self, fan_name): + rotor_number = self.fan_config.get("num_fans_pertray", 0) + return rotor_number + + @RestfulInfoUpdate() + def get_fan_info(self, fan_name): + if self.fans is None: + return None + return self.fans.get(fan_name) + + @RestfulInfoUpdate() + def get_all_dcdc_sensors(self): + return self.dcdc_sensors + + # Interface for dcdc + @RestfulInfoUpdate() + def get_dcdc_sensor_by_id(self, dcdc_id): + if not self.dcdc_sensors: + return None + return self.dcdc_sensors.get(dcdc_id, None) + + def get_thermal_total_number(self): + thermal_num = self.thermal_config.get("number", 0) + return thermal_num + + @RestfulInfoUpdate() + def get_all_temp_sensors(self): + return self.temp_sensors + + @RestfulInfoUpdate() + def get_temp_sensor_by_id(self, temp_id): + if not self.temp_sensors: + return None + return self.temp_sensors.get(temp_id, None) + + @RestfulInfoUpdate() + def get_all_vol_sensors(self): + return self.vol_sensors + + @RestfulInfoUpdate() + def get_vol_sensor_by_id(self, vol_id): + if not self.vol_sensors: + return None + return self.vol_sensors.get(vol_id, None) + + @RestfulInfoUpdate() + def get_all_cur_sensors(self): + return self.cur_sensors + + @RestfulInfoUpdate() + def get_cur_sensor_by_id(self, cur_id): + if not self.cur_sensors: + return None + return self.cur_sensors.get(cur_id, None) + + def get_cpld_total_number(self): + cpld_num = self.cpld_config.get("number", 0) + return cpld_num + + def get_fw_by_id(self, fw_name): + if "cpld" in fw_name: + return self.get_cpld_by_id(fw_name) + elif "bmc" in fw_name: + return self.get_bmc_by_id(fw_name) + elif "switch" in fw_name: + return self.get_switch_by_id(fw_name) + elif "bios" in fw_name: + return self.get_bios_by_id(fw_name) + elif "fpga" in fw_name: + return self.get_fpga_by_id(fw_name) + + @RestfulInfoUpdate() + def get_cpld_by_id(self, fw_type): + if self.cplds is not None: + cpld = self.cplds.get(fw_type, None) + return cpld + return None + + @RestfulInfoUpdate() + def get_sysled(self): + return self.sysled + + def _get_value(self, config): + if config["gettype"] == "cmd": + ret, output = exec_os_cmd(config["cmd"]) + return output + + def get_fpga_total_number(self): + fpga_num = self.fpga_config.get("number", 0) + return fpga_num + + def get_fpga_reg(self, config): + if config is None: + return "N/A" + ret, tmp = dev_file_read(config["dev_path"], config["offset"], config["len"]) + if ret != True: + return "N/A" + reg = "" + for index in range(len(tmp) - 1, -1, -1): + val = hex(tmp[index]).replace("0x", "") + reg = reg + val + return reg + + def get_fpga_by_id(self, fw_type): + fw_dict = {} + fpgas = self.fpga_config.get("fpgas", []) + for i in fpgas: + if fw_type == i["name"]: + fw_dict['alias'] = i.get('alias', None) + fw_dict['board_version'] = self.get_fpga_reg(i.get("board_version", None)) + fw_dict['firmware_version'] = self.get_fpga_reg(i.get("firmware_version", None)) + fw_dict['type'] = i.get('type', None) + break + return fw_dict + + def get_bios_by_id(self, fw_type): + fw_dict = {} + bios = self.bios_config.get("bios", []) + for i in bios: + if fw_type == i["name"]: + fw_dict['alias'] = i.get('alias', None) + fw_dict['board_version'] = self._get_value(i.get("board_version", None)) + fw_dict['firmware_version'] = self._get_value(i.get("firmware_version", None)) + fw_dict['type'] = self._get_value(i.get("type", None)) + break + return fw_dict + + def get_switch_by_id(self, fw_type): + fw_dict = {} + sw = self.sw_config.get("switchs", []) + for i in sw: + if fw_type == i["name"]: + for cmd in i.get("init_cmd", []): + exec_os_cmd(cmd) + fw_dict['alias'] = i.get('alias', None) + fw_dict['board_version'] = self._get_value(i.get("board_version", None)).split(" ")[0] + fw_dict['firmware_version'] = self._get_value(i.get("firmware_version", None)).split(" ")[0] + fw_dict['type'] = i.get('type', None) + for cmd in i.get("deinit_cmd", []): + exec_os_cmd(cmd) + break + return fw_dict + + @RestfulInfoUpdate() + def get_bmc_by_id(self, fw_type): + fw_dict = {} + if self.bmc is not None: + bmc = self.bmc.get(fw_type) + fw_dict['board_version'] = bmc.get('board_version', None) + fw_dict['alias'] = bmc.get('alias', None) + fw_dict['firmware_version'] = bmc.get('firmware_version', None) + fw_dict['type'] = bmc.get('type', None) + return fw_dict + + def get_bmc_total_number(self): + bmc_num = self.bmc_config.get("number", 0) + return bmc_num + + def get_bios_total_number(self): + num = self.bios_config.get("number", 0) + return num + + def get_sw_total_number(self): + num = self.sw_config.get("number", 0) + return num + + def get_onie_e2_path(self, e2_name): + if self.eeprom_config is None: + return "/sys/bus/i2c/devices/1-0056/eeprom" + return self.eeprom_config.get("e2loc").get("loc") + + def get_cpu_reboot_cause(self): + if self.reboot_cause_config is None: + return 0 + check_point = self.reboot_cause_config.get('check_point', None) + if check_point is not None: + ret, val = get_value(check_point) + if ret == True: + return val + return 0 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/sfp.py new file mode 100644 index 000000000000..5c17530a5c8b --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/sfp.py @@ -0,0 +1,634 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +############################################################################# +# +# Module contains an implementation of SONiC Platform Base API and +# provides the platform information +# +# +# *_device.py config version instruction: +# ver 1.0 - platform api: +# "presence_cpld": { +# "dev_id": { +# [dev_id]: { +# "offset": { +# [offset]: [port_id] +# } +# } +# } +# } +# "reset_cpld": { +# "dev_id": { +# [dev_id]: { +# "offset": { +# [offset]: [port_id] +# } +# } +# } +# } +# ver 2.0 - wb_plat: +# "presence_path": "/xx/wb_plat/xx[port_id]/present" +# "eeprom_path": "/sys/bus/i2c/devices/i2c-[bus]/[bus]-0050/eeprom" +# "reset_path": "/xx/wb_plat/xx[port_id]/reset" +############################################################################# +import sys +import time +import syslog +import traceback +from abc import abstractmethod + +configfile_pre = "/usr/local/bin/" +sys.path.append(configfile_pre) + +try: + from platform_intf import * + from sonic_platform_base.sonic_xcvr.sfp_optoe_base import SfpOptoeBase + from plat_hal.baseutil import baseutil + +except ImportError as error: + raise ImportError(str(error) + "- required module not found") from error + +LOG_DEBUG_LEVEL = 1 +LOG_WARNING_LEVEL = 2 +LOG_ERROR_LEVEL = 3 + + +class Sfp(SfpOptoeBase): + + OPTOE_DRV_TYPE1 = 1 + OPTOE_DRV_TYPE2 = 2 + OPTOE_DRV_TYPE3 = 3 + + # index must start at 1 + def __init__(self, index): + SfpOptoeBase.__init__(self) + self.sfp_type = None + sfp_config = baseutil.get_config().get("sfps", None) + self.log_level_config = sfp_config.get("log_level", LOG_WARNING_LEVEL) + # Init instance of SfpCust + ver = sfp_config.get("ver", None) + if ver is None: + self._sfplog(LOG_ERROR_LEVEL, "Get Ver Config Error!") + vers = int(float(ver)) + if vers == 1: + self._sfp_api = SfpV1(index) + elif vers == 2: + self._sfp_api = SfpV2(index) + else: + self._sfplog(LOG_ERROR_LEVEL, "Get SfpVer Error!") + + def get_eeprom_path(self): + return self._sfp_api._get_eeprom_path() + + def read_eeprom(self, offset, num_bytes): + return self._sfp_api.read_eeprom(offset, num_bytes) + + def get_presence(self): + return self._sfp_api.get_presence() + + def get_transceiver_info(self): + # temporary solution for a sonic202111 bug + transceiver_info = super().get_transceiver_info() + try: + if transceiver_info == None: + return None + if transceiver_info['cable_type'] == None: + transceiver_info['cable_type'] = 'N/A' + if transceiver_info["vendor_rev"] is not None: + transceiver_info["hardware_rev"] = transceiver_info["vendor_rev"] + except BaseException: + print(traceback.format_exc()) + return None + return transceiver_info + + def get_reset_status(self): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + self._sfplog(LOG_ERROR_LEVEL, 'SFP does not support reset') + return False + + ret = self._sfp_api.get_reset_status() + return ret + + def reset(self): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + self._sfplog(LOG_ERROR_LEVEL, 'SFP does not support reset') + return False + + self._sfplog(LOG_DEBUG_LEVEL, 'resetting...') + ret = self._sfp_api.set_reset(True) + if ret: + time.sleep(0.5) + ret = self._sfp_api.set_reset(False) + + return ret + + def get_lpmode(self): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'QSFP' or self.sfp_type == 'QSFP_DD': + return SfpOptoeBase.get_lpmode(self) + + self._sfplog(LOG_WARNING_LEVEL, 'SFP does not support lpmode') + return False + + def set_lpmode(self, lpmode): + if self.get_presence() is False: + return False + + if self.sfp_type is None or self._xcvr_api is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'QSFP_DD' or self.sfp_type == 'QSFP': + return SfpOptoeBase.set_lpmode(self, lpmode) + + self._sfplog(LOG_WARNING_LEVEL, 'SFP does not support lpmode') + return False + + def get_tx_disable(self): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + return self._sfp_api.get_tx_disable() + + return SfpOptoeBase.get_tx_disable(self) + + def get_tx_disable_channel(self): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + return self._sfp_api.get_tx_disable_channel() + + return SfpOptoeBase.get_tx_disable_channel(self) + + def tx_disable(self, tx_disable): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + return self._sfp_api.set_tx_disable(tx_disable) + + return SfpOptoeBase.tx_disable(self, tx_disable) + + def tx_disable_channel(self, channel, disable): + if self.get_presence() is False: + return False + + if self.sfp_type is None: + self.refresh_xcvr_api() + + if self.sfp_type == 'SFP': + self._sfplog(LOG_WARNING_LEVEL, 'SFP does not support tx disable channel') + return False + + return SfpOptoeBase.tx_disable_channel(self, channel, disable) + + def set_optoe_write_max(self, write_max): + """ + This func is declared and implemented by SONiC but we're not supported + so override it as NotImplemented + """ + self._sfplog(LOG_DEBUG_LEVEL, "set_optoe_write_max NotImplemented") + + def refresh_xcvr_api(self): + """ + Updates the XcvrApi associated with this SFP + """ + self._xcvr_api = self._xcvr_api_factory.create_xcvr_api() + class_name = self._xcvr_api.__class__.__name__ + optoe_type = None + # set sfp_type + if 'CmisApi' in class_name: + self.sfp_type = 'QSFP_DD' + optoe_type = self.OPTOE_DRV_TYPE3 + elif 'Sff8472Api' in class_name: + self.sfp_type = 'SFP' + optoe_type = self.OPTOE_DRV_TYPE2 + elif ('Sff8636Api' in class_name or 'Sff8436Api' in class_name): + self.sfp_type = 'QSFP' + optoe_type = self.OPTOE_DRV_TYPE1 + # set optoe driver + if optoe_type is not None: + self._sfp_api.set_optoe_type(optoe_type) + + def _sfplog(self, log_level, msg): + if log_level >= self.log_level_config: + try: + syslog.openlog("Sfp") + if log_level == LOG_DEBUG_LEVEL: + syslog.syslog(syslog.LOG_DEBUG, msg) + elif log_level == LOG_WARNING_LEVEL: + syslog.syslog(syslog.LOG_DEBUG, msg) + elif log_level == LOG_ERROR_LEVEL: + syslog.syslog(syslog.LOG_ERR, msg) + syslog.closelog() + + except BaseException: + print(traceback.format_exc()) + + +class SfpCust(): + def __init__(self, index): + self.eeprom_path = None + self._init_config(index) + + def _init_config(self, index): + sfp_config = baseutil.get_config().get("sfps", None) + self.log_level_config = sfp_config.get("log_level", LOG_WARNING_LEVEL) + self._port_id = index + self.eeprom_retry_times = sfp_config.get("eeprom_retry_times", 0) + self.eeprom_retry_break_sec = sfp_config.get("eeprom_retry_break_sec", 0) + + def _get_eeprom_path(self): + return self.eeprom_path or None + + @abstractmethod + def get_presence(self): + pass + + def read_eeprom(self, offset, num_bytes): + try: + for i in range(self.eeprom_retry_times): + with open(self._get_eeprom_path(), mode='rb', buffering=0) as f: + f.seek(offset) + result = f.read(num_bytes) + # temporary solution for a sonic202111 bug + if len(result) < num_bytes: + result = result[::-1].zfill(num_bytes)[::-1] + if result is not None: + return bytearray(result) + time.sleep(self.eeprom_retry_break_sec) + continue + + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return None + + def write_eeprom(self, offset, num_bytes, write_buffer): + try: + for i in range(self.eeprom_retry_times): + ret = SfpOptoeBase.write_eeprom(self, offset, num_bytes, write_buffer) + if ret is False: + time.sleep(self.eeprom_retry_break_sec) + continue + break + + return ret + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + @abstractmethod + def set_optoe_type(self, optoe_type): + pass + + @abstractmethod + def set_reset(self, reset): + pass + + def _convert_str_range_to_int_arr(self, range_str): + if not range_str: + return [] + + int_range_strs = range_str.split(',') + range_res = [] + for int_range_str in int_range_strs: + if '-' in int_range_str: + range_s = int(int_range_str.split('-')[0]) + range_e = int(int_range_str.split('-')[1]) + 1 + else: + range_s = int(int_range_str) + range_e = int(int_range_str) + 1 + + range_res = range_res + list(range(range_s, range_e)) + + return range_res + + def _sfplog(self, log_level, msg): + if log_level >= self.log_level_config: + try: + syslog.openlog("SfpCust") + if log_level == LOG_DEBUG_LEVEL: + syslog.syslog(syslog.LOG_DEBUG, msg) + elif log_level == LOG_WARNING_LEVEL: + syslog.syslog(syslog.LOG_DEBUG, msg) + elif log_level == LOG_ERROR_LEVEL: + syslog.syslog(syslog.LOG_ERR, msg) + syslog.closelog() + + except BaseException: + print(traceback.format_exc()) + + +class SfpV1(SfpCust): + def _init_config(self, index): + super()._init_config(index) + # init presence path + sfp_config = baseutil.get_config().get("sfps", None) + + eeprom_path_config = sfp_config.get("eeprom_path", None) + eeprom_path_key = sfp_config.get("eeprom_path_key")[self._port_id - 1] + self.eeprom_path = None if eeprom_path_config is None else eeprom_path_config % ( + eeprom_path_key, eeprom_path_key) + self._sfplog(LOG_DEBUG_LEVEL, "Done init eeprom path: %s" % self.eeprom_path) + + self.presence_cpld = sfp_config.get("presence_cpld", None) + self.presence_val_is_present = sfp_config.get("presence_val_is_present", 0) + self._sfplog(LOG_DEBUG_LEVEL, "Done init presence path") + + # init reset path + self.reset_cpld = sfp_config.get("reset_cpld", None) + self.reset_val_is_reset = sfp_config.get("reset_val_is_reset", 0) + self._sfplog(LOG_DEBUG_LEVEL, "Done init cpld path") + + # init tx_disable path + self.txdis_cpld = sfp_config.get("txdis_cpld", None) + self.txdisable_val_is_on = sfp_config.get("txdisable_val_is_on", 0) + self._sfplog(LOG_DEBUG_LEVEL, "Done init cpld tx_disable path") + + def get_presence(self): + if self.presence_cpld is None: + self._sfplog(LOG_ERROR_LEVEL, "presence_cpld is None!") + return False + try: + dev_id, offset, offset_bit = self._get_sfp_cpld_info(self.presence_cpld) + if dev_id == -1: + return False + ret, info = platform_reg_read(0, dev_id, offset, 1) + if (ret is False + or info is None): + return False + return info[0] & (1 << offset_bit) == self.presence_val_is_present + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + def get_reset_status(self): + if self.reset_cpld is None: + self._sfplog(LOG_ERROR_LEVEL, "reset_cpld is None!") + return False + try: + dev_id, offset, offset_bit = self._get_sfp_cpld_info(self.reset_cpld) + if dev_id == -1: + return False + ret, info = platform_reg_read(0, dev_id, offset, 1) + if (ret is False + or info is None): + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_read error!") + return False + + return (info[0] & (1 << offset_bit) == self.reset_val_is_reset) + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + def get_tx_disable(self): + if self.reset_cpld is None: + self._sfplog(LOG_ERROR_LEVEL, "txdis_cpld is None!") + return None + + try: + tx_disable_list = [] + dev_id, offset, offset_bit = self._get_sfp_cpld_info(self.txdis_cpld) + if dev_id == -1: + return False + ret, info = platform_reg_read(0, dev_id, offset, 1) + if (ret is False + or info is None): + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_read error!") + return None + if self.txdisable_val_is_on == 1: + tx_disable_list.append(info[0] & (1 << offset_bit) != 0) + else: + tx_disable_list.append(info[0] & (1 << offset_bit) == 0) + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return None + + return tx_disable_list + + def get_tx_disable_channel(self): + tx_disable_list = [] + tx_disable_list = self.get_tx_disable() + if tx_disable_list is None: + return 0 + + tx_disabled = 0 + for i in range(len(tx_disable_list)): + if tx_disable_list[i]: + tx_disabled |= 1 << i + + return tx_disabled + + def read_eeprom(self, offset, num_bytes): + try: + for i in range(self.eeprom_retry_times): + ret, info = platform_sfp_read(self._port_id, offset, num_bytes) + if (ret is False + or info is None): + time.sleep(self.eeprom_retry_break_sec) + continue + eeprom_raw = [] + for i in range(0, num_bytes): + eeprom_raw.append(0) + for n in range(0, len(info)): + eeprom_raw[n] = info[n] + # temporary solution for a sonic202111 bug + if len(eeprom_raw) < num_bytes: + eeprom_raw = eeprom_raw[::-1].zfill(num_bytes)[::-1] + return bytearray(eeprom_raw) + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return None + + def set_optoe_type(self, optoe_type): + ret, info = platform_get_optoe_type(self._port_id) + if ret is True and info != optoe_type: + try: + ret, _ = platform_set_optoe_type(self._port_id, optoe_type) + except Exception as err: + self._sfplog(LOG_ERROR_LEVEL, "Set optoe err %s" % err) + + def set_reset(self, reset): + if self.reset_cpld is None: + self._sfplog(LOG_ERROR_LEVEL, "reset_cpld is None!") + return False + try: + val = [] + dev_id, offset, offset_bit = self._get_sfp_cpld_info(self.reset_cpld) + if dev_id == -1: + return False + ret, info = platform_reg_read(0, dev_id, offset, 1) + if (ret is False + or info is None): + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_read error!") + return False + + if self.reset_val_is_reset == 0: + if reset: + val.append(info[0] & (~(1 << offset_bit))) + else: + val.append(info[0] | (1 << offset_bit)) + else: + if reset: + val.append(info[0] | (1 << offset_bit)) + else: + val.append(info[0] & (~(1 << offset_bit))) + + ret, info = platform_reg_write(0, dev_id, offset, val) + if ret is False: + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_write error!") + return False + + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + return True + + def set_tx_disable(self, tx_disable): + if self.txdis_cpld is None: + self._sfplog(LOG_ERROR_LEVEL, "txdis_cpld is None!") + return False + try: + val = [] + dev_id, offset, offset_bit = self._get_sfp_cpld_info(self.txdis_cpld) + if dev_id == -1: + return False + ret, info = platform_reg_read(0, dev_id, offset, 1) + if (ret is False + or info is None): + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_read error!") + return False + + if self.txdisable_val_is_on == 0: + if tx_disable: + val.append(info[0] & (~(1 << offset_bit))) + else: + val.append(info[0] | (1 << offset_bit)) + else: + if tx_disable: + val.append(info[0] | (1 << offset_bit)) + else: + val.append(info[0] & (~(1 << offset_bit))) + + ret, info = platform_reg_write(0, dev_id, offset, val) + if ret is False: + self._sfplog(LOG_ERROR_LEVEL, "platform_reg_write error!") + return False + + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + return True + + def _get_sfp_cpld_info(self, cpld_config): + dev_id = -1 + offset = -1 + offset_bit = -1 + for dev_id_temp in cpld_config["dev_id"]: + for offset_temp in cpld_config["dev_id"][dev_id_temp]["offset"]: + port_range_str = cpld_config["dev_id"][dev_id_temp]["offset"][offset_temp] + port_range_int = self._convert_str_range_to_int_arr(port_range_str) + if self._port_id in port_range_int: + dev_id = dev_id_temp + offset = offset_temp + offset_bit = port_range_int.index(self._port_id) + break + + return dev_id, offset, offset_bit + + +class SfpV2(SfpCust): + def _init_config(self, index): + super()._init_config(index) + # init eeprom path + sfp_config = baseutil.get_config().get("sfps", None) + eeprom_path_config = sfp_config.get("eeprom_path", None) + eeprom_path_key = sfp_config.get("eeprom_path_key")[self._port_id - 1] + self.eeprom_path = None if eeprom_path_config is None else eeprom_path_config % ( + eeprom_path_key, eeprom_path_key) + self._sfplog(LOG_DEBUG_LEVEL, "Done init eeprom path: %s" % self.eeprom_path) + + # init presence path + self.presence_path = None if sfp_config.get("presence_path", + None) is None else sfp_config.get("presence_path") % self._port_id + self.presence_val_is_present = sfp_config.get("presence_val_is_present", 0) + self._sfplog(LOG_DEBUG_LEVEL, "Done init presence path: %s" % self.presence_path) + + # init optoe driver path + optoe_driver_path = sfp_config.get("optoe_driver_path", None) + optoe_driver_key = sfp_config.get("optoe_driver_key")[self._port_id - 1] + self.dev_class_path = None if optoe_driver_path is None else optoe_driver_path % ( + optoe_driver_key, optoe_driver_key) + self._sfplog(LOG_DEBUG_LEVEL, "Done init optoe driver path: %s" % self.dev_class_path) + + # init reset path + self.reset_path = None if sfp_config.get( + "reset_path", + None) is None else sfp_config.get( + "reset_path", + None) % self._port_id + self.reset_val_is_reset = sfp_config.get("reset_val_is_reset", 0) + self._sfplog(LOG_DEBUG_LEVEL, "Done init reset path: %s" % self.reset_path) + + def get_presence(self): + if self.presence_path is None: + self._sfplog(LOG_ERROR_LEVEL, "presence_path is None!") + return False + try: + with open(self.presence_path, "rb") as data: + sysfs_data = data.read(1) + if sysfs_data != "": + result = int(sysfs_data, 16) + return result == self.presence_val_is_present + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + + def set_reset(self, reset): + return True + + def set_optoe_type(self, optoe_type): + if self.dev_class_path is None: + self._sfplog(LOG_ERROR_LEVEL, "dev_class_path is None!") + return False + try: + with open(self.dev_class_path, "r+") as dc_file: + dc_file_val = dc_file.read(1) + if int(dc_file_val) != optoe_type: + dc_str = "%s" % str(optoe_type) + dc_file.write(dc_str) + # dc_file.close() + except BaseException: + self._sfplog(LOG_ERROR_LEVEL, traceback.format_exc()) + return False + return True diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/thermal.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/thermal.py new file mode 100644 index 000000000000..516c86260e7c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/thermal.py @@ -0,0 +1,282 @@ +#!/usr/bin/env python3 + +######################################################################## +# +# Module contains an implementation of SONiC Platform Base API and +# provides the Thermals' information which are available in the platform +# +######################################################################## + + +try: + import time + from sonic_platform_base.thermal_base import ThermalBase +except ImportError as e: + raise ImportError(str(e) + "- required module not found") from e + + +class Thermal(ThermalBase): + + def __init__(self, interface_obj, index): + + self.restful = interface_obj + self.temp_id = "temp" + str(index) + + def get_service_tag(self): + """ + Retrieves the service tag of the device + Returns: + string: The service tag of the device + """ + return 'N/A' + + def get_mfr_id(self): + """ + Retrieves the manufacturer's name (or ID) of the device + Returns: + string: Manufacturer's id of device + """ + return 'N/A' + + def get_sensor(self): + temp_info = {} + info = self.restful.get_temp_sensor_by_id(self.temp_id) + if info is None: + return None + + name = info.get("alias", "N/A") + temp_info['alias'] = info.get('alias', "N/A") + temp_info['type'] = info.get('type', "N/A") + value = info.get('value') + if value is None or value in self.restful.restful_err_str: + temp_info['value'] = None + else: + temp_info['value'] = float(value) / 1000 + max =info.get('max') + if max is None or max in self.restful.restful_err_str: + temp_info['max'] = None + else: + temp_info['max'] = float(max) / 1000 + min = info.get('min') + if min is None or min in self.restful.restful_err_str: + temp_info['min'] = None + else: + temp_info['min'] = float(min) / 1000 + return temp_info + + def get_name(self): + """ + Retrieves the name of the thermal + + Returns: + string: The name of the thermal + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return "N/A" + name = temp_dict.get("alias", "N/A") + return name + + def get_presence(self): + """ + Retrieves the presence of the thermal + + Returns: + bool: True if thermal is present, False if not + """ + return True + + def get_model(self): + """ + Retrieves the model number (or part number) of the Thermal + + Returns: + string: Model/part number of Thermal + """ + return "N/A" + + def get_serial(self): + """ + Retrieves the serial number of the Thermal + + Returns: + string: Serial number of Thermal + """ + return "N/A" + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + return "N/A" + + def get_status(self): + """ + Retrieves the operational status of the thermal + + Returns: + A boolean value, True if thermal is operating properly, + False if not + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return False + if temp_dict.get("value") is None or temp_dict.get("max") is None or temp_dict.get("min") is None: + return False + if (temp_dict.get("value", -1) >= temp_dict.get("max", 0) + ) or (temp_dict.get("value", 0) <= temp_dict.get("min", -1)): + return False + + return True + + def get_position_in_parent(self): + """ + Retrieves 1-based relative physical position in parent device. If the agent cannot determine the parent-relative position + for some reason, or if the associated value of entPhysicalContainedIn is '0', then the value '-1' is returned + Returns: + integer: The 1-based relative physical position in parent device or -1 if cannot determine the position + """ + return -1 + + def is_replaceable(self): + """ + Indicate whether this device is replaceable. + Returns: + bool: True if it is replaceable. + """ + return False + + def get_temperature(self): + """ + Retrieves current temperature reading from thermal + + Returns: + A float number of current temperature in Celsius up to nearest thousandth + of one degree Celsius, e.g. 30.125 + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return None + value = temp_dict.get("value", None) + if value is None: + return None + if value < -200: + return None + return round(float(value), 1) + + def get_high_threshold(self): + """ + Retrieves the high threshold temperature of thermal + + Returns: + A float number, the high threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return None + value = temp_dict.get("max", None) + if value is None: + return None + return round(float(value), 1) + + def get_low_threshold(self): + """ + Retrieves the low threshold temperature of thermal + + Returns: + A float number, the low threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return None + value = temp_dict.get("min", None) + if value is None: + return None + return round(float(value), 1) + + def set_high_threshold(self, temperature): + """ + Sets the high threshold temperature of thermal + + Args : + temperature: A float number up to nearest thousandth of one degree Celsius, + e.g. 30.125 + + Returns: + A boolean, True if threshold is set successfully, False if not + """ + # not supported + return False + + def set_low_threshold(self, temperature): + """ + Sets the low threshold temperature of thermal + + Args : + temperature: A float number up to nearest thousandth of one degree Celsius, + e.g. 30.125 + + Returns: + A boolean, True if threshold is set successfully, False if not + """ + # not supported + return False + + def get_high_critical_threshold(self): + """ + Retrieves the high critical threshold temperature of thermal + + Returns: + A float number, the high critical threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return None + value = temp_dict.get("max", None) + if value is None: + return None + return round(float(value), 1) + + def get_low_critical_threshold(self): + """ + Retrieves the low critical threshold temperature of thermal + + Returns: + A float number, the low critical threshold temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + temp_dict = self.get_sensor() + if temp_dict is None: + return None + value = temp_dict.get("min", None) + if value is None: + return None + return round(float(value), 1) + + def get_minimum_recorded(self): + """ + Retrieves the minimum recorded temperature of thermal + + Returns: + A float number, the minimum recorded temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + # not supported + return False + + def get_maximum_recorded(self): + """ + Retrieves the maximum recorded temperature of thermal + + Returns: + A float number, the maximum recorded temperature of thermal in Celsius + up to nearest thousandth of one degree Celsius, e.g. 30.125 + """ + # not supported + return False diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/watchdog.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/watchdog.py new file mode 100644 index 000000000000..948337f47a9a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-128qc/sonic_platform/watchdog.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python3 + +######################################################################## +# +# +# Abstract base class for implementing a platform-specific class with +# which to interact with a hardware watchdog module in SONiC +# +######################################################################## + +import fcntl +import os +import array + +try: + from sonic_platform_base.watchdog_base import WatchdogBase +except ImportError as error: + raise ImportError(str(error) + "- required module not found") from error + + +# ioctl constants +IO_WRITE = 0x40000000 +IO_READ = 0x80000000 +IO_READ_WRITE = 0xC0000000 +IO_SIZE_INT = 0x00040000 +IO_SIZE_40 = 0x00280000 +IO_TYPE_WATCHDOG = ord('W') << 8 + +WDR_INT = IO_READ | IO_SIZE_INT | IO_TYPE_WATCHDOG +WDR_40 = IO_READ | IO_SIZE_40 | IO_TYPE_WATCHDOG +WDWR_INT = IO_READ_WRITE | IO_SIZE_INT | IO_TYPE_WATCHDOG + +# Watchdog ioctl command +WDIOC_GETSUPPORT = 0 | WDR_40 +WDIOC_GETSTATUS = 1 | WDR_INT +WDIOC_GETBOOTSTATUS = 2 | WDR_INT +WDIOC_GETTEMP = 3 | WDR_INT +WDIOC_SETOPTIONS = 4 | WDR_INT +WDIOC_KEEPALIVE = 5 | WDR_INT +WDIOC_SETTIMEOUT = 6 | WDWR_INT +WDIOC_GETTIMEOUT = 7 | WDR_INT +WDIOC_SETPRETIMEOUT = 8 | WDWR_INT +WDIOC_GETPRETIMEOUT = 9 | WDR_INT +WDIOC_GETTIMELEFT = 10 | WDR_INT + +# Watchdog status constants +WDIOS_DISABLECARD = 0x0001 +WDIOS_ENABLECARD = 0x0002 + +WDT_COMMON_ERROR = -1 +WDT_IDENTITY = "CPLD Watchdog" +WDT_SYSFS_PATH = "/sys/class/watchdog/" + +DEFAULT_TIMEOUT = 180 + + +class Watchdog(WatchdogBase): + """ + Abstract base class for interfacing with a hardware watchdog module + """ + + def __init__(self): + self.watchdog, self.wdt_main_dev_name = self._get_wdt() + self.status_path = "/sys/class/watchdog/%s/status" % self.wdt_main_dev_name + self.state_path = "/sys/class/watchdog/%s/state" % self.wdt_main_dev_name + self.timeout_path = "/sys/class/watchdog/%s/timeout" % self.wdt_main_dev_name + # Set default value + self._disable() + self.armed = False + self.timeout = self._gettimeout() + + def _is_wd_main(self, dev): + """ + Checks watchdog identity + """ + identity = self._read_file( + "{}/{}/identity".format(WDT_SYSFS_PATH, dev)) + return identity == WDT_IDENTITY + + def _get_wdt(self): + """ + Retrieves watchdog device + """ + wdt_main_dev_list = [dev for dev in os.listdir( + "/dev/") if dev.startswith("watchdog") and self._is_wd_main(dev)] + if not wdt_main_dev_list: + return None + wdt_main_dev_name = wdt_main_dev_list[0] + watchdog_device_path = "/dev/{}".format(wdt_main_dev_name) + watchdog = os.open(watchdog_device_path, os.O_RDWR) + return watchdog, wdt_main_dev_name + + def _read_file(self, file_path): + """ + Read text file + """ + try: + with open(file_path, "r") as fd: + txt = fd.read() + except IOError: + return WDT_COMMON_ERROR + return txt.strip() + + def _enable(self): + """ + Turn on the watchdog timer + """ + req = array.array('h', [WDIOS_ENABLECARD]) + fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False) + + def _disable(self): + """ + Turn off the watchdog timer + """ + req = array.array('h', [WDIOS_DISABLECARD]) + fcntl.ioctl(self.watchdog, WDIOC_SETOPTIONS, req, False) + + def _keepalive(self): + """ + Keep alive watchdog timer + """ + fcntl.ioctl(self.watchdog, WDIOC_KEEPALIVE) + + def _settimeout(self, seconds): + """ + Set watchdog timer timeout + @param seconds - timeout in seconds + @return is the actual set timeout + """ + req = array.array('I', [seconds]) + fcntl.ioctl(self.watchdog, WDIOC_SETTIMEOUT, req, True) + return int(req[0]) + + def _gettimeout(self): + """ + Get watchdog timeout + @return watchdog timeout + """ + req = array.array('I', [0]) + fcntl.ioctl(self.watchdog, WDIOC_GETTIMEOUT, req, True) + + return int(req[0]) + + def _gettimeleft(self): + """ + Get time left before watchdog timer expires + @return time left in seconds + """ + req = array.array('I', [0]) + fcntl.ioctl(self.watchdog, WDIOC_GETTIMELEFT, req, True) + + return int(req[0]) + + def arm(self, seconds): + """ + Arm the hardware watchdog with a timeout of seconds. + If the watchdog is currently armed, calling this function will + simply reset the timer to the provided value. If the underlying + hardware does not support the value provided in , this + method should arm the watchdog with the *next greater* available + value. + + Returns: + An integer specifying the *actual* number of seconds the watchdog + was armed with. On failure returns -1. + """ + ret = WDT_COMMON_ERROR + if seconds < 0: + return ret + + try: + if self.timeout != seconds: + self.timeout = self._settimeout(seconds) + if self.armed: + self._keepalive() + else: + self._settimeout(seconds) + self._enable() + self.armed = True + ret = self.timeout + except IOError: + pass + + return ret + + def disarm(self): + """ + Disarm the hardware watchdog + + Returns: + A boolean, True if watchdog is disarmed successfully, False if not + """ + disarmed = False + if self.is_armed(): + try: + self._disable() + self.armed = False + disarmed = True + except IOError: + pass + + return disarmed + + def is_armed(self): + """ + Retrieves the armed state of the hardware watchdog. + + Returns: + A boolean, True if watchdog is armed, False if not + """ + return self.armed + + def get_remaining_time(self): + """ + If the watchdog is armed, retrieve the number of seconds remaining on + the watchdog timer + + Returns: + An integer specifying the number of seconds remaining on thei + watchdog timer. If the watchdog is not armed, returns -1. + """ + timeleft = WDT_COMMON_ERROR + + if self.armed: + try: + timeleft = self._gettimeleft() + except IOError: + pass + + return timeleft + + def __del__(self): + """ + Close watchdog + """ + os.close(self.watchdog) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/Makefile new file mode 100755 index 000000000000..3039a7f85903 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/Makefile @@ -0,0 +1,28 @@ +PWD = $(shell pwd) +DIR_KERNEL_SRC = $(PWD)/modules/driver +EXTRA_CFLAGS:= -I$(M)/include +EXTRA_CFLAGS+= -Wall +SUB_BUILD_DIR = $(PWD)/build +INSTALL_DIR = $(SUB_BUILD_DIR)/$(KERNEL_SRC)/$(INSTALL_MOD_DIR) +INSTALL_SCRIPT_DIR = $(SUB_BUILD_DIR)/usr/local/bin +INSTALL_LIB_DIR = $(SUB_BUILD_DIR)/usr/lib/python3/dist-packages +INSTALL_S3IP_SYSFS_CFG_DIR = $(SUB_BUILD_DIR)/etc/s3ip_sysfs_cfg +INSTALL_S3IP_CONFIG_DIR = $(SUB_BUILD_DIR)/etc/s3ip + +all: + $(MAKE) -C $(KBUILD_OUTPUT) M=$(DIR_KERNEL_SRC) modules + @if [ ! -d ${INSTALL_DIR} ]; then mkdir -p ${INSTALL_DIR} ;fi + cp -r $(DIR_KERNEL_SRC)/*.ko $(INSTALL_DIR) + @if [ ! -d ${INSTALL_SCRIPT_DIR} ]; then mkdir -p ${INSTALL_SCRIPT_DIR} ;fi + cp -r $(PWD)/config/* $(INSTALL_SCRIPT_DIR) + @if [ ! -d ${INSTALL_LIB_DIR} ]; then mkdir -p ${INSTALL_LIB_DIR} ;fi + @if [ -d $(PWD)/hal-config/ ]; then cp -r $(PWD)/hal-config/* ${INSTALL_LIB_DIR} ;fi + @if [ ! -d ${INSTALL_S3IP_CONFIG_DIR} ]; then mkdir -p ${INSTALL_S3IP_CONFIG_DIR} ;fi + @if [ -d $(PWD)/s3ip_config/ ]; then cp -r $(PWD)/s3ip_config/* ${INSTALL_S3IP_CONFIG_DIR} ;fi + @if [ ! -d ${INSTALL_S3IP_SYSFS_CFG_DIR} ]; then mkdir -p ${INSTALL_S3IP_SYSFS_CFG_DIR} ;fi + @if [ -d $(PWD)/s3ip_sysfs_cfg/ ]; then cp -r $(PWD)/s3ip_sysfs_cfg/* ${INSTALL_S3IP_SYSFS_CFG_DIR} ;fi +clean: + rm -f ${DIR_KERNEL_SRC}/*.o ${DIR_KERNEL_SRC}/*.ko ${DIR_KERNEL_SRC}/*.mod.c ${DIR_KERNEL_SRC}/.*.cmd ${DIR_KERNEL_SRC}/*.mod + rm -f ${DIR_KERNEL_SRC}/Module.markers ${DIR_KERNEL_SRC}/Module.symvers ${DIR_KERNEL_SRC}/modules.order + rm -rf ${DIR_KERNEL_SRC}/.tmp_versions + rm -rf $(SUB_BUILD_DIR) diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_config.py new file mode 100644 index 000000000000..0f2b3bb581e7 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_config.py @@ -0,0 +1,1644 @@ +#!/usr/bin/python3 +# -*- coding: UTF-8 -*- +from platform_common import * + +STARTMODULE = { + "hal_fanctrl": 1, + "hal_ledctrl": 1, + "avscontrol": 0, + "tty_console": 1, + "dev_monitor": 1, + "pmon_syslog": 1, + "sff_temp_polling": 1, + "reboot_cause": 1, +} + +DEV_MONITOR_PARAM = { + "polling_time": 10, + "psus": [ + { + "name": "psu1", + "present": {"gettype": "io", "io_addr": 0x958, "presentbit": 2, "okval": 0}, + "device": [ + {"id": "psu1pmbus", "name": "wb_fsp1200", "bus": 42, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu1frue2", "name": "24c02", "bus": 42, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "psu2", + "present": {"gettype": "io", "io_addr": 0x958, "presentbit": 6, "okval": 0}, + "device": [ + {"id": "psu2pmbus", "name": "wb_fsp1200", "bus": 43, "loc": 0x58, "attr": "hwmon"}, + {"id": "psu2frue2", "name": "24c02", "bus": 43, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "fans": [ + { + "name": "fan1", + "present": {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x5b, "read_len":1, "presentbit": 0, "okval": 0}, + "device": [ + {"id": "fan1frue2", "name": "24c64", "bus": 52, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan2", + "present": {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x5b, "read_len":1, "presentbit": 1, "okval": 0}, + "device": [ + {"id": "fan2frue2", "name": "24c64", "bus": 53, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan3", + "present": {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x5b, "read_len":1, "presentbit": 2, "okval": 0}, + "device": [ + {"id": "fan3frue2", "name": "24c64", "bus": 54, "loc": 0x50, "attr": "eeprom"}, + ], + }, + { + "name": "fan4", + "present": {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x5b, "read_len":1, "presentbit": 3, "okval": 0}, + "device": [ + {"id": "fan4frue2", "name": "24c64", "bus": 55, "loc": 0x50, "attr": "eeprom"}, + ], + }, + ], + "others": [ + { + "name": "eeprom", + "device": [ + {"id": "eeprom_1", "name": "24c02", "bus": 1, "loc": 0x56, "attr": "eeprom"}, + ], + }, + { + "name": "lm75", + "device": [ + {"id": "lm75_1", "name": "lm75", "bus": 51, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_2", "name": "lm75", "bus": 56, "loc": 0x4e, "attr": "hwmon"}, + {"id": "lm75_3", "name": "lm75", "bus": 58, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_4", "name": "lm75", "bus": 75, "loc": 0x4b, "attr": "hwmon"}, + {"id": "lm75_5", "name": "lm75", "bus": 76, "loc": 0x4f, "attr": "hwmon"}, + ], + }, + { + "name":"ct7318", + "device":[ + {"id":"ct7318_1", "name":"ct7318","bus":77, "loc":0x4c, "attr":"hwmon"}, + {"id":"ct7318_2", "name":"ct7318","bus":78, "loc":0x4c, "attr":"hwmon"}, + ], + }, + { + "name": "ucd90160", + "device": [ + {"id": "ucd90160_1", "name": "ucd90160", "bus": 68, "loc": 0x5b, "attr": "hwmon"}, + {"id": "ucd90160_2", "name": "ucd90160", "bus": 69, "loc": 0x5f, "attr": "hwmon"}, + {"id": "ucd90160_3", "name": "ucd90160", "bus": 82, "loc": 0x5b, "attr": "hwmon"}, + {"id": "ucd90160_4", "name": "ucd90160", "bus": 83, "loc": 0x5b, "attr": "hwmon"}, + ], + }, + { + "name": "ucd9081", + "device": [ + {"id": "wb_ucd9081_1", "name": "wb_ucd9081", "bus": 72, "loc": 0x68, "attr": "hwmon"}, + ], + }, + { + "name": "xdpe12284", + "device": [ + {"id": "xdpe12284_1", "name": "xdpe12284", "bus": 90, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_2", "name": "xdpe12284", "bus": 91, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_3", "name": "xdpe12284", "bus": 92, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_4", "name": "xdpe12284", "bus": 93, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_5", "name": "xdpe12284", "bus": 94, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_6", "name": "xdpe12284", "bus": 95, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_7", "name": "xdpe12284", "bus": 96, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_8", "name": "xdpe12284", "bus": 97, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_9", "name": "xdpe12284", "bus": 69, "loc": 0x70, "attr": "hwmon"}, + {"id": "xdpe12284_10", "name": "xdpe12284", "bus": 69, "loc": 0x6e, "attr": "hwmon"}, + {"id": "xdpe12284_11", "name": "xdpe12284", "bus": 69, "loc": 0x5e, "attr": "hwmon"}, + {"id": "xdpe12284_12", "name": "xdpe12284", "bus": 69, "loc": 0x68, "attr": "hwmon"}, + ], + }, + ], +} + +MANUINFO_CONF = { + "bios": { + "key": "BIOS", + "head": True, + "next": "onie" + }, + "bios_vendor": { + "parent": "bios", + "key": "Vendor", + "cmd": "dmidecode -t 0 |grep Vendor", + "pattern": r".*Vendor", + "separator": ":", + "arrt_index": 1, + }, + "bios_version": { + "parent": "bios", + "key": "Version", + "cmd": "dmidecode -t 0 |grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "bios_date": { + "parent": "bios", + "key": "Release Date", + "cmd": "dmidecode -t 0 |grep Release", + "pattern": r".*Release Date", + "separator": ":", + "arrt_index": 3, + }, + "onie": { + "key": "ONIE", + "next": "cpu" + }, + "onie_date": { + "parent": "onie", + "key": "Build Date", + "file": "/host/machine.conf", + "pattern": r"^onie_build_date", + "separator": "=", + "arrt_index": 1, + }, + "onie_version": { + "parent": "onie", + "key": "Version", + "file": "/host/machine.conf", + "pattern": r"^onie_version", + "separator": "=", + "arrt_index": 2, + }, + + "cpu": { + "key": "CPU", + "next": "ssd" + }, + "cpu_vendor": { + "parent": "cpu", + "key": "Vendor", + "cmd": "dmidecode --type processor |grep Manufacturer", + "pattern": r".*Manufacturer", + "separator": ":", + "arrt_index": 1, + }, + "cpu_model": { + "parent": "cpu", + "key": "Device Model", + "cmd": "dmidecode --type processor | grep Version", + "pattern": r".*Version", + "separator": ":", + "arrt_index": 2, + }, + "cpu_core": { + "parent": "cpu", + "key": "Core Count", + "cmd": "dmidecode --type processor | grep \"Core Count\"", + "pattern": r".*Core Count", + "separator": ":", + "arrt_index": 3, + }, + "cpu_thread": { + "parent": "cpu", + "key": "Thread Count", + "cmd": "dmidecode --type processor | grep \"Thread Count\"", + "pattern": r".*Thread Count", + "separator": ":", + "arrt_index": 4, + }, + "ssd": { + "key": "SSD", + "next": "cpld" + }, + "ssd_model": { + "parent": "ssd", + "key": "Device Model", + "cmd": "smartctl -i /dev/sda |grep \"Device Model\"", + "pattern": r".*Device Model", + "separator": ":", + "arrt_index": 1, + }, + "ssd_fw": { + "parent": "ssd", + "key": "Firmware Version", + "cmd": "smartctl -i /dev/sda |grep \"Firmware Version\"", + "pattern": r".*Firmware Version", + "separator": ":", + "arrt_index": 2, + }, + "ssd_user_cap": { + "parent": "ssd", + "key": "User Capacity", + "cmd": "smartctl -i /dev/sda |grep \"User Capacity\"", + "pattern": r".*User Capacity", + "separator": ":", + "arrt_index": 3, + }, + + "cpld": { + "key": "CPLD", + "next": "psu" + }, + + "cpld1": { + "key": "CPLD1", + "parent": "cpld", + "arrt_index": 1, + }, + "cpld1_model": { + "key": "Device Model", + "parent": "cpld1", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld1_vender": { + "key": "Vendor", + "parent": "cpld1", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld1_desc": { + "key": "Description", + "parent": "cpld1", + "config": "CPU_CPLD", + "arrt_index": 3, + }, + "cpld1_version": { + "key": "Firmware Version", + "parent": "cpld1", + "devfile": { + "loc": "/dev/cpld0", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + "cpld2": { + "key": "CPLD2", + "parent": "cpld", + "arrt_index": 2, + }, + "cpld2_model": { + "key": "Device Model", + "parent": "cpld2", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld2_vender": { + "key": "Vendor", + "parent": "cpld2", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld2_desc": { + "key": "Description", + "parent": "cpld2", + "config": "CONNECT_CPLD", + "arrt_index": 3, + }, + "cpld2_version": { + "key": "Firmware Version", + "parent": "cpld2", + "devfile": { + "loc": "/dev/cpld1", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "cpld3": { + "key": "CPLD3", + "parent": "cpld", + "arrt_index": 3, + }, + "cpld3_model": { + "key": "Device Model", + "parent": "cpld3", + "config": "LCMXO3LF-4300C-6BG256C", + "arrt_index": 1, + }, + "cpld3_vender": { + "key": "Vendor", + "parent": "cpld3", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld3_desc": { + "key": "Description", + "parent": "cpld3", + "config": "MAC_CPLDA", + "arrt_index": 3, + }, + "cpld3_version": { + "key": "Firmware Version", + "parent": "cpld3", + "devfile": { + "loc": "/dev/cpld6", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "cpld4": { + "key": "CPLD4", + "parent": "cpld", + "arrt_index": 4, + }, + "cpld4_model": { + "key": "Device Model", + "parent": "cpld4", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld4_vender": { + "key": "Vendor", + "parent": "cpld4", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld4_desc": { + "key": "Description", + "parent": "cpld4", + "config": "MAC_CPLDB", + "arrt_index": 3, + }, + "cpld4_version": { + "key": "Firmware Version", + "parent": "cpld4", + "devfile": { + "loc": "/dev/cpld7", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "cpld5": { + "key": "CPLD5", + "parent": "cpld", + "arrt_index": 5, + }, + "cpld5_model": { + "key": "Device Model", + "parent": "cpld5", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld5_vender": { + "key": "Vendor", + "parent": "cpld5", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld5_desc": { + "key": "Description", + "parent": "cpld5", + "config": "MAC_CPLDC", + "arrt_index": 3, + }, + "cpld5_version": { + "key": "Firmware Version", + "parent": "cpld5", + "devfile": { + "loc": "/dev/cpld8", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "cpld6": { + "key": "CPLD6", + "parent": "cpld", + "arrt_index": 6, + }, + "cpld6_model": { + "key": "Device Model", + "parent": "cpld6", + "config": "LCMXO3LF-4300C-6BG324I", + "arrt_index": 1, + }, + "cpld6_vender": { + "key": "Vendor", + "parent": "cpld6", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld6_desc": { + "key": "Description", + "parent": "cpld6", + "config": "MGMT_CPLD", + "arrt_index": 3, + }, + "cpld6_version": { + "key": "Firmware Version", + "parent": "cpld6", + "devfile": { + "loc": "/dev/cpld9", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "cpld7": { + "key": "CPLD7", + "parent": "cpld", + "arrt_index": 7, + }, + "cpld7_model": { + "key": "Device Model", + "parent": "cpld7", + "config": "LCMXO3LF-2100C-5BG256C", + "arrt_index": 1, + }, + "cpld7_vender": { + "key": "Vendor", + "parent": "cpld7", + "config": "LATTICE", + "arrt_index": 2, + }, + "cpld7_desc": { + "key": "Description", + "parent": "cpld7", + "config": "FAN_CPLD", + "arrt_index": 3, + }, + "cpld7_version": { + "key": "Firmware Version", + "parent": "cpld7", + "devfile": { + "loc": "/dev/cpld10", + "offset":0, + "len":4, + "bit_width":1 + }, + "arrt_index": 4, + }, + + "psu": { + "key": "PSU", + "next": "fan" + }, + + "psu1": { + "parent": "psu", + "key": "PSU1", + "arrt_index": 1, + }, + "psu1_hw_version": { + "key": "Hardware Version", + "parent": "psu1", + "extra": { + "funcname": "getPsu", + "id": "psu1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu1_fw_version": { + "key": "Firmware Version", + "parent": "psu1", + "config": "NA", + "arrt_index": 2, + }, + + "psu2": { + "parent": "psu", + "key": "PSU2", + "arrt_index": 2, + }, + "psu2_hw_version": { + "key": "Hardware Version", + "parent": "psu2", + "extra": { + "funcname": "getPsu", + "id": "psu2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "psu2_fw_version": { + "key": "Firmware Version", + "parent": "psu2", + "config": "NA", + "arrt_index": 2, + }, + + "fan": { + "key": "FAN", + "next": "i210" + }, + "fan1": { + "key": "FAN1", + "parent": "fan", + "arrt_index": 1, + }, + "fan1_hw_version": { + "key": "Hardware Version", + "parent": "fan1", + "extra": { + "funcname": "checkFan", + "id": "fan1", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan1_fw_version": { + "key": "Firmware Version", + "parent": "fan1", + "config": "NA", + "arrt_index": 2, + }, + + "fan2": { + "key": "FAN2", + "parent": "fan", + "arrt_index": 2, + }, + "fan2_hw_version": { + "key": "Hardware Version", + "parent": "fan2", + "extra": { + "funcname": "checkFan", + "id": "fan2", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan2_fw_version": { + "key": "Firmware Version", + "parent": "fan2", + "config": "NA", + "arrt_index": 2, + }, + + "fan3": { + "key": "FAN3", + "parent": "fan", + "arrt_index": 3, + }, + "fan3_hw_version": { + "key": "Hardware Version", + "parent": "fan3", + "extra": { + "funcname": "checkFan", + "id": "fan3", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan3_fw_version": { + "key": "Firmware Version", + "parent": "fan3", + "config": "NA", + "arrt_index": 2, + }, + + "fan4": { + "key": "FAN4", + "parent": "fan", + "arrt_index": 4, + }, + "fan4_hw_version": { + "key": "Hardware Version", + "parent": "fan4", + "extra": { + "funcname": "checkFan", + "id": "fan4", + "key": "hw_version" + }, + "arrt_index": 1, + }, + "fan4_fw_version": { + "key": "Firmware Version", + "parent": "fan4", + "config": "NA", + "arrt_index": 2, + }, + + "i210": { + "key": "NIC", + "next": "fpga" + }, + "i210_model": { + "parent": "i210", + "config": "NA", + "key": "Device Model", + "arrt_index": 1, + }, + "i210_vendor": { + "parent": "i210", + "config": "INTEL", + "key": "Vendor", + "arrt_index": 2, + }, + "i210_version": { + "parent": "i210", + "cmd": "ethtool -i eth0", + "pattern": r"firmware-version", + "separator": ":", + "key": "Firmware Version", + "arrt_index": 3, + }, + + "fpga": { + "key": "FPGA", + }, + + "fpga1": { + "key": "FPGA1", + "parent": "fpga", + "arrt_index": 1, + }, + "fpga1_model": { + "parent": "fpga1", + "config": "XC7A50T-2FGG484I", + "key": "Device Model", + "arrt_index": 1, + }, + "fpga1_vender": { + "parent": "fpga1", + "config": "XILINX", + "key": "Vendor", + "arrt_index": 2, + }, + "fpga1_desc": { + "key": "Description", + "parent": "fpga1", + "config": "MAC_FPGA", + "arrt_index": 3, + }, + "fpga1_hw_version": { + "parent": "fpga1", + "config": "NA", + "key": "Hardware Version", + "arrt_index": 4, + }, + "fpga1_fw_version": { + "parent": "fpga1", + "pci": { + "bus": 6, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 0 + }, + "key": "Firmware Version", + "arrt_index": 5, + }, + "fpga1_date": { + "parent": "fpga1", + "pci": { + "bus": 6, + "slot": 0, + "fn": 0, + "bar": 0, + "offset": 4 + }, + "key": "Build Date", + "arrt_index": 6, + }, + + "others": { + "key": "OTHERS", + }, + "53134": { + "parent": "others", + "key": "CPU-BMC-SWITCH", + "arrt_index": 1, + }, + "53134_model": { + "parent": "53134", + "config": "BCM53134O", + "key": "Device Model", + "arrt_index": 1, + }, + "53134_vendor": { + "parent": "53134", + "config": "Broadcom", + "key": "Vendor", + "arrt_index": 2, + }, + "53134_hw_version": { + "parent": "53134", + "key": "Hardware Version", + "func": { + "funcname": "get_bcm5387_version", + "params": { + "before": [ + # OE high + {"gettype": "cmd", "cmd": "echo 323 > /sys/class/gpio/export"}, + {"gettype": "cmd", "cmd": "echo high > /sys/class/gpio/gpio323/direction"}, + # SEL1 high + {"gettype": "cmd", "cmd": "echo 324 > /sys/class/gpio/export"}, + {"gettype": "cmd", "cmd": "echo high > /sys/class/gpio/gpio324/direction"}, + #enable 53134 update + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3d, "value": 0x00}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x45, "value": 0x01}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x46, "value": 0x06}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_gpio_device sck=55 mosi=54 miso=52 cs=53 bus=0 gpio_chip_name=INTC3001:00"}, + {"gettype": "cmd", "cmd": "modprobe wb_spi_93xx46"}, + ], + "get_version": "md5sum /sys/bus/spi/devices/spi0.0/eeprom | awk '{print $1}'", + "after": [ + {"gettype": "cmd", "cmd": "echo 0 > /sys/class/gpio/gpio324/value"}, + {"gettype": "cmd", "cmd": "echo 324 > /sys/class/gpio/unexport"}, + {"gettype": "cmd", "cmd": "echo 0 > /sys/class/gpio/gpio323/value"}, + {"gettype": "cmd", "cmd": "echo 323 > /sys/class/gpio/unexport"}, + ], + "finally": [ + {"gettype": "cmd", "cmd": "rmmod wb_spi_93xx46"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio_device"}, + {"gettype": "cmd", "cmd": "rmmod wb_spi_gpio"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x46, "value": 0x00}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x45, "value": 0x00}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3d, "value": 0x01}, + ], + }, + }, + "arrt_index": 3, + }, +} + +PMON_SYSLOG_STATUS = { + "polling_time": 3, + "sffs": { + "present": {"path": ["/sys/s3ip/transceiver/*/present"], "ABSENT": 0}, + "nochangedmsgflag": 0, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 1, + "alias": { + "sff1": "Ethernet1", + "sff2": "Ethernet2", + "sff3": "Ethernet3", + "sff4": "Ethernet4", + "sff5": "Ethernet5", + "sff6": "Ethernet6", + "sff7": "Ethernet7", + "sff8": "Ethernet8", + "sff9": "Ethernet9", + "sff10": "Ethernet10", + "sff11": "Ethernet11", + "sff12": "Ethernet12", + "sff13": "Ethernet13", + "sff14": "Ethernet14", + "sff15": "Ethernet15", + "sff16": "Ethernet16", + "sff17": "Ethernet17", + "sff18": "Ethernet18", + "sff19": "Ethernet19", + "sff20": "Ethernet20", + "sff21": "Ethernet21", + "sff22": "Ethernet22", + "sff23": "Ethernet23", + "sff24": "Ethernet24", + "sff25": "Ethernet25", + "sff26": "Ethernet26", + "sff27": "Ethernet27", + "sff28": "Ethernet28", + "sff29": "Ethernet29", + "sff30": "Ethernet30", + "sff31": "Ethernet31", + "sff32": "Ethernet32", + "sff33": "Ethernet33", + "sff34": "Ethernet34", + "sff35": "Ethernet35", + "sff36": "Ethernet36", + "sff37": "Ethernet37", + "sff38": "Ethernet38", + "sff39": "Ethernet39", + "sff40": "Ethernet40", + "sff41": "Ethernet41", + "sff42": "Ethernet42", + "sff43": "Ethernet43", + "sff44": "Ethernet44", + "sff45": "Ethernet45", + "sff46": "Ethernet46", + "sff47": "Ethernet47", + "sff48": "Ethernet48", + "sff49": "Ethernet49", + "sff50": "Ethernet50", + "sff51": "Ethernet51", + "sff52": "Ethernet52", + "sff53": "Ethernet53", + "sff54": "Ethernet54", + "sff55": "Ethernet55", + "sff56": "Ethernet56", + "sff57": "Ethernet57", + "sff58": "Ethernet58", + "sff59": "Ethernet59", + "sff60": "Ethernet60", + "sff61": "Ethernet61", + "sff62": "Ethernet62", + "sff63": "Ethernet63", + "sff64": "Ethernet64", + "sff65": "Ethernet65", + "sff66": "Ethernet66", + } + }, + "fans": { + "present": {"path": ["/sys/s3ip/fan/*/status"], "ABSENT": 0}, + "status": [ + {"path": "/sys/s3ip/fan/%s/status", 'okval': 1}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "fan1": "FAN1", + "fan2": "FAN2", + "fan3": "FAN3", + "fan4": "FAN4" + } + }, + "psus": { + "present": {"path": ["/sys/s3ip/psu/*/present"], "ABSENT": 0}, + "status": [ + {"path": "/sys/s3ip/psu/%s/out_status", "okval":1}, + ], + "nochangedmsgflag": 1, + "nochangedmsgtime": 60, + "noprintfirsttimeflag": 0, + "alias": { + "psu1": "PSU1", + "psu2": "PSU2" + } + } +} + +REBOOT_CTRL_PARAM = { + "cpu": {"path":"/dev/cpld1", "offset":0x17, "rst_val":0xfd, "rst_delay":0, "gettype":"devfile"}, + "mac": [ + {"gettype": "cmd", "cmd": "setpci -s 14:02.0 0x50.W=0x0050", "rst_delay":0.1}, + {"path":"/dev/cpld6", "offset":0x16, "rst_val":0x00, "rst_delay":1, "gettype": "devfile"}, + {"path":"/dev/cpld6", "offset":0x16, "rst_val":0x01, "rst_delay":0, "gettype": "devfile"}, + {"gettype": "cmd", "cmd": "setpci -s 14:02.0 0x50.W=0x0060", "rst_delay":0.1}, + ], + "phy": {"path":"/dev/cpld1", "offset":0x18, "rst_val":0x1e, "rst_delay":0, "gettype":"devfile"}, + "power": [ + {"bus": 42, "loc": 0x58, "offset": 0x02, "rst_val": 0x48, "rst_delay":0.1, "gettype": "i2c"}, + {"bus": 42, "loc": 0x58, "offset": 0x01, "rst_val": 0x40, "rst_delay":0.1, "gettype": "i2c"}, + {"bus": 43, "loc": 0x58, "offset": 0x02, "rst_val": 0x48, "rst_delay":0.1, "gettype": "i2c"}, + {"bus": 43, "loc": 0x58, "offset": 0x01, "rst_val": 0x40, "rst_delay":0.1, "gettype": "i2c"}, + ], + +} + +REBOOT_CAUSE_PARA = { + "reboot_cause_list": [ + { + "name": "cold_reboot", + "monitor_point": {"gettype":"devfile", "path":"/dev/cpld1", "offset":0x1d, "read_len":1, "okval":0x09}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Power Loss, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Power Loss, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ] + }, + { + "name": "wdt_reboot", + "monitor_point": {"gettype":"devfile", "path":"/dev/cpld1", "offset":0x1d, "read_len":1, "okval":0x05}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Watchdog, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Watchdog, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + }, + { + "name": "bmc_reboot", + "monitor_point": {"gettype":"devfile", "path":"/dev/cpld1", "offset":0x1d, "read_len":1, "okval":0x06}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "BMC reboot, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "BMC reboot, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + }, + { + "name": "cpu_reboot", + "monitor_point": {"gettype":"devfile", "path":"/dev/cpld1", "offset":0x1d, "read_len":1, "okval":[0x03, 0x04]}, + "record": [ + {"record_type":"file", "mode":"cover", "log":"CPU reboot, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "CPU reboot, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + }, + { + "name": "bmc_powerdown", + "monitor_point": {"gettype":"devfile", "path":"/dev/cpld1", "offset":0x1d, "read_len":1, "okval":[0x02, 0x07, 0x0a]}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "BMC powerdown, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "BMC powerdown, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + }, + { + "name": "otp_switch_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_switch_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: ASIC, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: ASIC, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_switch_reboot_flag"}, + ] + }, + { + "name": "otp_other_reboot", + "monitor_point": {"gettype": "file_exist", "judge_file": "/etc/.otp_other_reboot_flag", "okval": True}, + "record": [ + {"record_type": "file", "mode": "cover", "log": "Thermal Overload: Other, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Thermal Overload: Other, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], + "finish_operation": [ + {"gettype": "cmd", "cmd": "rm -rf /etc/.otp_other_reboot_flag"}, + ] + }, + ], + "other_reboot_cause_record": [ + {"record_type": "file", "mode": "cover", "log": "Other, ", "path": "/etc/sonic/.reboot/.previous-reboot-cause.txt"}, + {"record_type": "file", "mode": "add", "log": "Other, ", "path": "/etc/sonic/.reboot/.history-reboot-cause.txt"} + ], +} + +##################### MAC Voltage adjust#################################### +MAC_DEFAULT_PARAM = [ + { + "name": "mac_core", # AVS name + "type": 0, # 1: used default value, if rov value not in range. 0: do nothing, if rov value not in range + "default": 0x82, # default value, if rov value not in range + "rov_source": 0, # 0: get rov value from cpld, 1: get rov value from SDK + "cpld_avs": {"path": "/dev/cpld6", "offset": 0x30, "read_len": 1, "gettype": "devfile"}, + "set_avs": { + "loc": "/sys/bus/i2c/devices/84-0040/avs0_vout_command", "gettype": "sysfs", "formula": None}, + "mac_avs_param": { + 0x92: 0xBF4, + 0x90: 0xC29, + 0x8e: 0xC56, + 0x8c: 0xC8B, + 0x8a: 0xCBD, + 0x88: 0xCEA, + 0x86: 0xD14, + 0x84: 0xD44, + 0x82: 0xD71 + } + } +] + +DRIVERLISTS = [ + {"name": "i2c_i801", "delay": 1}, + {"name": "i2c_dev", "delay": 0}, + {"name": "i2c_algo_bit", "delay": 0}, + {"name": "i2c_gpio", "delay": 0}, + {"name": "i2c_mux", "delay": 0}, + {"name": "wb_i2c_gpio_device gpio_sda=181 gpio_scl=180 gpio_chip_name=INTC3001:00 bus_num=1", "delay": 0}, + {"name": "platform_common dfd_my_type=0x40d7", "delay": 0}, + {"name": "wb_fpga_pcie", "delay": 0}, + {"name": "wb_pcie_dev", "delay": 0}, + {"name": "wb_pcie_dev_device", "delay": 0}, + {"name": "wb_io_dev", "delay": 0}, + {"name": "wb_io_dev_device", "delay": 0}, + {"name": "wb_indirect_dev", "delay": 0}, + {"name": "wb_indirect_dev_device", "delay": 0}, + {"name": "wb_i2c_dev", "delay": 0}, + {"name": "wb_spi_dev", "delay": 0}, + {"name": "wb_fpga_i2c_bus_drv", "delay": 0}, + {"name": "wb_fpga_i2c_bus_device", "delay": 0}, + {"name": "wb_i2c_mux_pca9641", "delay": 0}, + {"name": "wb_i2c_mux_pca954x", "delay": 0}, + {"name": "wb_i2c_mux_pca954x_device", "delay": 0}, + {"name": "wb_fpga_pca954x_drv", "delay": 0}, + {"name": "wb_fpga_pca954x_device", "delay": 0}, + {"name": "wb_i2c_dev_device", "delay": 0}, + {"name": "mdio_bitbang", "delay": 0}, + {"name": "mdio_gpio", "delay": 0}, + {"name": "wb_mdio_gpio_device gpio_mdc=69 gpio_mdio=70 gpio_chip_name=INTC3001:00", "delay": 0}, + {"name": "wb_wdt", "delay": 0}, + {"name": "wb_wdt_device", "delay": 0}, + {"name": "lm75", "delay": 0}, + {"name": "tmp401", "delay": 0}, + {"name": "ct7148", "delay": 0}, + {"name": "optoe", "delay": 0}, + {"name": "at24", "delay": 0}, + {"name": "pmbus_core", "delay": 0}, + {"name": "wb_csu550", "delay": 0}, + {"name": "ina3221", "delay": 0}, + {"name": "tps53679", "delay": 0}, + {"name": "ucd9000", "delay": 0}, + {"name": "wb_ucd9081", "delay": 0}, + {"name": "xdpe12284", "delay": 0}, + {"name": "wb_xdpe132g5c_pmbus", "delay":0}, + {"name": "wb_xdpe132g5c", "delay": 0}, + {"name": "plat_dfd", "delay": 0}, + {"name": "plat_switch", "delay": 0}, + {"name": "plat_fan", "delay": 0}, + {"name": "plat_psu", "delay": 0}, + {"name": "plat_sff", "delay": 0}, + {"name": "hw_test", "delay": 0}, + + {"name": "s3ip_sysfs", "delay": 0}, + {"name": "wb_switch_driver", "delay": 0}, + {"name": "syseeprom_device_driver", "delay": 0}, + {"name": "fan_device_driver", "delay": 0}, + {"name": "cpld_device_driver", "delay": 0}, + {"name": "sysled_device_driver", "delay": 0}, + {"name": "psu_device_driver", "delay": 0}, + {"name": "transceiver_device_driver", "delay": 0}, + {"name": "temp_sensor_device_driver", "delay": 0}, + {"name": "vol_sensor_device_driver", "delay": 0}, + {"name": "curr_sensor_device_driver", "delay": 0}, + {"name": "fpga_device_driver", "delay": 0}, + {"name": "watchdog_device_driver", "delay": 0}, +] + +DEVICE = [ + {"name": "24c02", "bus": 1, "loc": 0x56}, + {"name": "24c02", "bus": 57, "loc": 0x57}, + {"name": "24c02", "bus": 61, "loc": 0x57}, + {"name": "24c02", "bus": 66, "loc": 0x57}, + # fan + {"name": "24c64", "bus": 52, "loc": 0x50}, + {"name": "24c64", "bus": 53, "loc": 0x50}, + {"name": "24c64", "bus": 54, "loc": 0x50}, + {"name": "24c64", "bus": 55, "loc": 0x50}, + # psu + {"name": "24c02", "bus": 42, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 42, "loc": 0x58}, + {"name": "24c02", "bus": 43, "loc": 0x50}, + {"name": "wb_fsp1200", "bus": 43, "loc": 0x58}, + # temp + {"name": "lm75", "bus": 51, "loc": 0x4b}, + {"name": "lm75", "bus": 56, "loc": 0x4e}, + {"name": "lm75", "bus": 58, "loc": 0x4b}, + {"name": "lm75", "bus": 75, "loc": 0x4b}, + {"name": "lm75", "bus": 76, "loc": 0x4f}, + {"name": "ct7318", "bus": 77, "loc": 0x4c}, + {"name": "ct7318", "bus": 78, "loc": 0x4c}, + #dcdc + {"name": "ucd90160", "bus": 68, "loc": 0x5b}, + {"name": "ucd90160", "bus": 69, "loc": 0x5f}, + {"name": "xdpe12284", "bus": 69, "loc": 0x70}, + {"name": "xdpe12284", "bus": 69, "loc": 0x6e}, + {"name": "xdpe12284", "bus": 69, "loc": 0x5e}, + {"name": "xdpe12284", "bus": 69, "loc": 0x68}, + {"name": "wb_ucd9081", "bus": 72, "loc": 0x68}, + {"name": "wb_ucd90160", "bus": 82, "loc": 0x5b}, + {"name": "wb_ucd90160", "bus": 83, "loc": 0x5b}, + {"name": "xdpe12284", "bus": 90, "loc": 0x70}, + {"name": "xdpe12284", "bus": 91, "loc": 0x70}, + {"name": "xdpe12284", "bus": 92, "loc": 0x70}, + {"name": "xdpe12284", "bus": 93, "loc": 0x70}, + {"name": "xdpe12284", "bus": 94, "loc": 0x70}, + {"name": "xdpe12284", "bus": 95, "loc": 0x70}, + {"name": "xdpe12284", "bus": 96, "loc": 0x70}, + {"name": "xdpe12284", "bus": 97, "loc": 0x70}, + #avs + {"name": "wb_xdpe132g5c_pmbus", "bus": 84, "loc": 0x40}, + {"name": "wb_xdpe132g5c", "bus": 84, "loc": 0x10}, + {"name": "wb_xdpe132g5c_pmbus", "bus": 85, "loc": 0x4d}, + {"name": "wb_xdpe132g5c", "bus": 85, "loc": 0x1d}, + {"name": "wb_xdpe132g5c_pmbus", "bus": 86, "loc": 0x4d}, + {"name": "wb_xdpe132g5c", "bus": 86, "loc": 0x1d}, +] + +OPTOE = [ + {"name": "optoe2", "startbus": 59, "endbus": 60}, + {"name": "optoe3", "startbus": 106, "endbus": 169}, +] + + +INIT_PARAM = [] + +INIT_COMMAND_PRE = [] + +INIT_COMMAND = [ + # open X86 BMC Serial port + "dfd_debug sysfs_data_wr /dev/cpld1 0x41 0x01", + # enable stream light + "dfd_debug sysfs_data_wr /dev/cpld6 0xef 0x01", + "dfd_debug sysfs_data_wr /dev/cpld7 0xef 0x01", + "dfd_debug sysfs_data_wr /dev/cpld8 0x80 0xff", + "dfd_debug sysfs_data_wr /dev/cpld8 0x81 0xff", + # KR power_on + "dfd_debug sysfs_data_wr /dev/cpld9 0x80 0x03", + # KR tx-disable enable + "dfd_debug sysfs_data_wr /dev/cpld9 0x58 0x00", + ] + +WARM_UPGRADE_PARAM = { + "slot0": { + "VME": { + "chain1": [ + { + "name": "BASE_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/base_cpld_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0xcb, "value": 0x01, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3b, "value": 0x00, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x36, "value": 0x2c, "delay": 0.1}, #bmc_ready + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x17, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x19, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x1b, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x1c, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x21, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x23, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x25, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x2b, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x2c, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x2d, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x31, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x32, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x33, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x36, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x38, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3d, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3e, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3f, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x40, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x41, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x43, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x44, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x45, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x57, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x5a, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x65, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x66, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x67, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x70, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x71, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x72, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x73, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x74, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x75, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x90, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x91, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x92, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x93, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x94, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x95, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xa5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb6, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb7, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xb8, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xba, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xbb, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xbc, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc6, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc7, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xd2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xd3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xd4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xd5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xd8, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe6, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe7, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xe8, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 180, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3b, "value": 0x03,"delay": 20}, #after bmc_ready delay time + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0xcb, "value": 0x00, "delay": 0.1}, + ], + }, + ], + "chain2": [ + { + "name": "MAC_CPLD_A", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cplda_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x01, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x28, "value": 0x00, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x24, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x25, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x70, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x71, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x72, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x76, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x77, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x78, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd6, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd7, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd8, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xd9, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xda, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xdb, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xe0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xe1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0xef, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld6", "offset": 0x28, "value": 0x01, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x00, "delay": 0.1}, + ], + }, + { + "name": "MAC_CPLD_B", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cpldb_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x02, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x28, "value": 0x00, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x70, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x71, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x72, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x73, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x74, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x80, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x81, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x82, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x83, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x84, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd4, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd5, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd6, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd7, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd8, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xd9, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xda, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xdb, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xdc, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xde, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xdf, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xe0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xe1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xe2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xe3, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0xef, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld7", "offset": 0x28, "value": 0x01, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x00, "delay": 0.1}, + ], + } + ], + "chain3": [ + { + "name": "MAC_CPLD_C", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mac_cpldc_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x04, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x46, "value": 0x00, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x13, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x14, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x15, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x16, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x17, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x1a, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x20, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x21, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x32, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x33, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x4a, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x4b, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x52, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x59, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x62, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x63, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x80, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x81, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld8", "offset": 0x46, "value": 0x01, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x00, "delay": 0.1}, + ], + } + ], + "chain4": [ + { + "name": "FAN_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/fan_cpld_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x08, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x40, "value": 0x00, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x20, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x22, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x31, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x53, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x56, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x58, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x90, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x91, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x92, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x93, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0xd0, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0xd1, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0xd2, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0xd3, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld10", "offset": 0x40, "value": 0x00, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x00, "delay": 0.1}, + ], + } + ], + "chain5": [ + { + "name": "MGMT_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/mgmt_cpld_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x10, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x1c, "value": 0x00, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x21, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x24, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x30, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x40, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x58, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x70, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x71, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x80, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0xa8, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0xba, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 30, + "access_check_reg": {"skip": 1}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld9", "offset": 0x1c, "value": 0x01, "delay": 1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x4c, "value": 0x00, "delay": 0.1}, + ], + } + ], + "chain6": [ + { + "name": "CPU_CPLD", + "refresh_file_judge_flag": 1, + "refresh_file": "/etc/.cpld_refresh/cpu_cpld_refresh_header.vme", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"cmd": "echo 497 > /sys/class/gpio/export", "gettype": "cmd"}, + {"cmd": "echo out > /sys/class/gpio/gpio497/direction", "gettype": "cmd"}, + {"cmd": "echo 1 > /sys/class/gpio/gpio497/value", "gettype": "cmd"}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0xcc, "value": 0x01, "delay": 0.1}, + ], + "rw_recover_reg": [ + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x17, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x21, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x41, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x51, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x52, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x53, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x54, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x60, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x61, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x62, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x74, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x81, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x82, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x83, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x84, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x85, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x86, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x87, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x88, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x89, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x8a, "read_len": 1, "value": None, "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0xcb, "read_len": 1, "value": None, "delay": 0.1}, + ], + "after_upgrade_delay": 1, + "after_upgrade_delay_timeout": 180, + "access_check_reg": {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0x10, "read_len": 1, "value": 0x36, "okval": 0xff}, + "finish_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + {"gettype": "devfile", "path": "/dev/cpld0", "offset": 0xcc, "value": 0x00, "delay": 0.1}, + {"cmd": "echo 0 > /sys/class/gpio/gpio497/value", "gettype": "cmd"}, + {"cmd": "echo 497 > /sys/class/gpio/unexport", "gettype": "cmd"}, + ], + }, + ], + }, + "SPI-LOGIC-DEV": { + "chain1": [ + {"name": "MAC_FPGA", + "init_cmd": [ + {"file": WARM_UPG_FLAG, "gettype": "creat_file"}, + {"cmd": "setpci -s 00:12.0 0x114.W=0xffff", "gettype": "cmd"}, + {"cmd": "setpci -s 00:12.0 0x50.W=0x0050", "gettype": "cmd"}, # link_disable + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc6, "value": 0x00}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0xc6, "value": 0x01, "delay": 1}, + ], + "after_upgrade_delay": 10, + "after_upgrade_delay_timeout": 10, + "refresh_finish_flag_check": {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x63, "value": 0x01, "read_len": 1}, + "access_check_reg": { + "path": "/dev/fpga0", "offset": 0x8, "value": [0x55, 0xaa, 0x5a, 0xa5], "read_len": 4, "gettype": "devfile", + "polling_cmd": [ + {"cmd": "setpci -s 00:12.0 0x50.W=0x0060", "gettype": "cmd", "delay": 1}, # retrain_link + {"cmd": "setpci -s 00:12.0 0x52.w", "gettype": "cmd", "okval": 0x12, + "timeout": 10, "mask": 0xff}, # check link status + {"cmd": "rmmod wb_fpga_pcie", "gettype": "cmd", "delay": 0.1}, + {"cmd": "modprobe wb_fpga_pcie", "gettype": "cmd", "delay": 2}, + ], + "polling_delay": 0.1 + }, + "finish_cmd": [ + {"cmd": "setpci -s 00:12.0 0x50.W=0x0060", "gettype": "cmd"}, # retrain_link + {"cmd": "setpci -s 00:12.0 0x110.W=0xffff", "gettype": "cmd"}, + {"cmd": "setpci -s 00:12.0 0x114.W=0x0000", "gettype": "cmd"}, + {"file": WARM_UPG_FLAG, "gettype": "remove_file"}, + ], + }, + ] + }, + }, + "stop_services_cmd": [ + "/usr/local/bin/platform_process.py stop", + ], + "start_services_cmd": [ + "/usr/local/bin/platform_process.py start", + ], +} + +UPGRADE_SUMMARY = { + "devtype": 0x40d7, + + "slot0": { + "subtype": 0, + "VME": { + "chain1": { + "name": "BASE_CPLD", + "is_support_warm_upg": 1, + }, + "chain2": { + "name": "MAC_CPLDAB", + "is_support_warm_upg": 1, + }, + "chain3": { + "name": "MAC_CPLDC", + "is_support_warm_upg": 1, + }, + "chain4": { + "name": "FAN_CPLD", + "is_support_warm_upg": 1, + }, + "chain5": { + "name": "MGMT_CPLD", + "is_support_warm_upg": 1, + }, + "chain6": { + "name": "CPU_CPLD", + "is_support_warm_upg": 1, + }, + }, + + "SPI-LOGIC-DEV": { + "chain1": { + "name": "MAC_FPGA", + "is_support_warm_upg": 1, + } + }, + + "SYSFS": { + "chain2": { + "name": "BCM53134", + "is_support_warm_upg": 0, + "init_cmd": [ + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3d, "value": 0x00, "delay": 0.1}, + {"cmd": "modprobe wb_spi_gpio", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_gpio_device sck=55 mosi=54 miso=52 cs=53 bus=0 gpio_chip_name=INTC3001:00", "gettype": "cmd"}, + {"cmd": "modprobe wb_spi_93xx46", "gettype": "cmd", "delay": 0.1}, + ], + "finish_cmd": [ + {"cmd": "rmmod wb_spi_93xx46", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio_device", "gettype": "cmd"}, + {"cmd": "rmmod wb_spi_gpio", "gettype": "cmd", "delay": 0.1}, + {"gettype": "devfile", "path": "/dev/cpld1", "offset": 0x3d, "value": 0x01, "delay": 0.1}, + ], + }, + }, + + "MTD": { + "chain4": { + "name": "BIOS", + "filesizecheck": 20480, # bios check file size, Unit: K + "is_support_warm_upg": 0, + "init_cmd": [ + {"cmd": "modprobe mtd", "gettype": "cmd"}, + {"cmd": "modprobe spi_nor", "gettype": "cmd"}, + {"cmd": "modprobe ofpart", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi writeable=1", "gettype": "cmd"}, + {"cmd": "modprobe intel_spi_pci", "gettype": "cmd"}, + ], + "finish_cmd": [ + {"cmd": "rmmod intel_spi_pci", "gettype": "cmd"}, + {"cmd": "rmmod intel_spi", "gettype": "cmd"}, + {"cmd": "rmmod ofpart", "gettype": "cmd"}, + {"cmd": "rmmod spi_nor", "gettype": "cmd"}, + {"cmd": "rmmod mtd", "gettype": "cmd"}, + ], + }, + }, + + "TEST": { + "fpga": [ + {"chain": 1, "file": "/etc/.upgrade_test/fpga_test_header.bin", "display_name": "MAC_FPGA"}, + ], + "cpld": [ + {"chain": 1, "file": "/etc/.upgrade_test/cpld_test_0_1_header.vme", "display_name": "BASE_CPLD"}, + {"chain": 2, "file": "/etc/.upgrade_test/cpld_test_0_2_header.vme", "display_name": "MAC_CPLDAB"}, + {"chain": 3, "file": "/etc/.upgrade_test/cpld_test_0_3_header.vme", "display_name": "MAC_CPLDC"}, + {"chain": 4, "file": "/etc/.upgrade_test/cpld_test_0_4_header.vme", "display_name": "FAN_CPLD"}, + {"chain": 5, "file": "/etc/.upgrade_test/cpld_test_0_5_header.vme", "display_name": "MGMT_CPLD"}, + {"chain": 6, "file": "/etc/.upgrade_test/cpld_test_0_6_header.vme", "display_name": "CPU_CPLD"}, + ], + }, + }, +} + +PLATFORM_E2_CONF = { + "fan": [ + {"name": "fan1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/52-0050/eeprom"}, + {"name": "fan2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/53-0050/eeprom"}, + {"name": "fan3", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/54-0050/eeprom"}, + {"name": "fan4", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/55-0050/eeprom"}, + ], + "psu": [ + {"name": "psu1", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/42-0050/eeprom"}, + {"name": "psu2", "e2_type": "fru", "e2_path": "/sys/bus/i2c/devices/43-0050/eeprom"}, + ], + "syseeprom": [ + {"name": "syseeprom", "e2_type": "onie_tlv", "e2_path": "/sys/bus/i2c/devices/1-0056/eeprom"}, + ], +} + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_port_config.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_port_config.py new file mode 100644 index 000000000000..bb88ae1a5fae --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/config/x86_64_micas_m2_w6940_64oc_r0_port_config.py @@ -0,0 +1,74 @@ +#!/usr/bin/python3 +# -*- coding: UTF-8 -*- + +PLATFORM_INTF_OPTOE = { + "port_num": 66, + "port_bus_map": { + 1: 106, + 2: 107, + 3: 108, + 4: 109, + 5: 110, + 6: 111, + 7: 112, + 8: 113, + 9: 114, + 10: 115, + 11: 116, + 12: 117, + 13: 118, + 14: 119, + 15: 120, + 16: 121, + 17: 122, + 18: 123, + 19: 124, + 20: 125, + 21: 126, + 22: 127, + 23: 128, + 24: 129, + 25: 130, + 26: 131, + 27: 132, + 28: 133, + 29: 134, + 30: 135, + 31: 136, + 32: 137, + 33: 138, + 34: 139, + 35: 140, + 36: 141, + 37: 142, + 38: 143, + 39: 144, + 40: 145, + 41: 146, + 42: 147, + 43: 148, + 44: 149, + 45: 150, + 46: 151, + 47: 152, + 48: 153, + 49: 154, + 50: 155, + 51: 156, + 52: 157, + 53: 158, + 54: 159, + 55: 160, + 56: 161, + 57: 162, + 58: 163, + 59: 164, + 60: 165, + 61: 166, + 62: 167, + 63: 168, + 64: 169, + 65: 59, + 66: 60, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_device.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_device.py new file mode 100644 index 000000000000..81a53b11f6f2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_device.py @@ -0,0 +1,756 @@ +#!/usr/bin/python3 + +psu_fan_airflow = { + "intake": ['CRPS3000CL', 'ECDL3000123'], + "exhaust": [] +} + +fanairflow = { + "intake": ['FAN80-02-F'], + "exhaust": [], +} + +psu_display_name = { + "PA3000I-F": ['CRPS3000CL', 'ECDL3000123'], +} + +psutypedecode = { + 0x00: 'N/A', + 0x01: 'AC', + 0x02: 'DC', +} + +class Unit: + Temperature = "C" + Voltage = "V" + Current = "A" + Power = "W" + Speed = "RPM" + + +class threshold: + PSU_TEMP_MIN = -20 * 1000 + PSU_TEMP_MAX = 65 * 1000 + + PSU_FAN_SPEED_MIN = 3500 + PSU_FAN_SPEED_MAX = 23500 + PSU_A_FAN_SPEED_MAX = 39000 + + PSU_OUTPUT_VOLTAGE_MIN = 11 * 1000 + PSU_OUTPUT_VOLTAGE_MAX = 13 * 1000 + + PSU_AC_INPUT_VOLTAGE_MIN = 90 * 1000 + PSU_AC_INPUT_VOLTAGE_MAX = 264 * 1000 + + PSU_DC_INPUT_VOLTAGE_MIN = 180 * 1000 + PSU_DC_INPUT_VOLTAGE_MAX = 320 * 1000 + + ERR_VALUE = -9999999 + + PSU_OUTPUT_POWER_MIN = 0* 1000 * 1000 + PSU_OUTPUT_POWER_MAX = 3000 * 1000 * 1000 + + PSU_INPUT_POWER_MIN = 0 * 1000 * 1000 + PSU_INPUT_POWER_MAX = 3100* 1000 * 1000 + + PSU_OUTPUT_CURRENT_MIN = 0 * 1000 + PSU_OUTPUT_CURRENT_MAX = 246 * 1000 + + PSU_INPUT_CURRENT_MIN = 0 * 1000 + PSU_INPUT_CURRENT_MAX = 20 * 1000 + + FRONT_FAN_SPEED_MAX = 18000 + REAR_FAN_SPEED_MAX = 16000 + FAN_SPEED_MIN = 3200 + + +devices = { + "sensor_print_src": "s3ip", + + "dcdc_data_source": [ + { + "path": "/sys/s3ip/vol_sensor", + "type": "vol", + "Unit": Unit.Voltage, + "read_times": 3, + }, + { + "path": "/sys/s3ip/curr_sensor", + "type": "curr", + "Unit": Unit.Current, + "read_times": 3, + }, + ], + "temp_data_source": [ + { + "path": "/sys/s3ip/temp_sensor", + "type": "temp", + "Unit": Unit.Temperature, + }, + ], + + "onie_e2": [ + { + "name": "ONIE_E2", + "e2loc": {"loc": "/sys/bus/i2c/devices/1-0056/eeprom", "way": "sysfs"}, + "airflow": "intake" + }, + ], + "psus": [ + { + "e2loc": {"loc": "/sys/bus/i2c/devices/42-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 42, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/s3ip/psu/psu1/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU1", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 42, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 42, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": { + "ECDL3000123": threshold.PSU_FAN_SPEED_MAX, + "CRPS3000CL": threshold.PSU_A_FAN_SPEED_MAX, + }, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 42, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 42, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 42, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + }, + { + "e2loc": {"loc": "/sys/bus/i2c/devices/43-0050/eeprom", "way": "sysfs"}, + "pmbusloc": {"bus": 43, "addr": 0x58, "way": "i2c"}, + "present": {"loc": "/sys/s3ip/psu/psu2/present", "way": "sysfs", "mask": 0x01, "okval": 1}, + "name": "PSU2", + "psu_display_name": psu_display_name, + "airflow": psu_fan_airflow, + "TempStatus": {"bus": 43, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0004}, + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": threshold.PSU_TEMP_MIN, + "Max": threshold.PSU_TEMP_MAX, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + }, + "FanStatus": {"bus": 43, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x0400}, + "FanSpeed": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/fan1_input", "way": "sysfs"}, + "Min": threshold.PSU_FAN_SPEED_MIN, + "Max": { + "ECDL3000123": threshold.PSU_FAN_SPEED_MAX, + "CRPS3000CL": threshold.PSU_A_FAN_SPEED_MAX, + }, + "Unit": Unit.Speed + }, + "psu_fan_tolerance": 40, + "InputsStatus": {"bus": 43, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x2000}, + "InputsType": {"bus": 43, "addr": 0x58, "offset": 0x80, "way": "i2c", 'psutypedecode': psutypedecode}, + "InputsVoltage": { + 'AC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_AC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_AC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + + }, + 'DC': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.PSU_DC_INPUT_VOLTAGE_MIN, + "Max": threshold.PSU_DC_INPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + 'other': { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/in1_input", "way": "sysfs"}, + "Min": threshold.ERR_VALUE, + "Max": threshold.ERR_VALUE, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + } + }, + "InputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/curr1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_CURRENT_MIN, + "Max": threshold.PSU_INPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "InputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/power1_input", "way": "sysfs"}, + "Min": threshold.PSU_INPUT_POWER_MIN, + "Max": threshold.PSU_INPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + "OutputsStatus": {"bus": 43, "addr": 0x58, "offset": 0x79, "way": "i2cword", "mask": 0x8800}, + "OutputsVoltage": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/in2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_VOLTAGE_MIN, + "Max": threshold.PSU_OUTPUT_VOLTAGE_MAX, + "Unit": Unit.Voltage, + "format": "float(float(%s)/1000)" + }, + "OutputsCurrent": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/curr2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_CURRENT_MIN, + "Max": threshold.PSU_OUTPUT_CURRENT_MAX, + "Unit": Unit.Current, + "format": "float(float(%s)/1000)" + }, + "OutputsPower": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/power2_input", "way": "sysfs"}, + "Min": threshold.PSU_OUTPUT_POWER_MIN, + "Max": threshold.PSU_OUTPUT_POWER_MAX, + "Unit": Unit.Power, + "format": "float(float(%s)/1000000)" + }, + } + ], + "temps": [ + { + "name": "BOARD_TEMP", + "temp_id": "TEMP1", + "Temperature": { + "value": [ + {"loc": "/sys/s3ip/temp_sensor/temp13/value", "way": "sysfs"}, + {"loc": "/sys/s3ip/temp_sensor/temp14/value", "way": "sysfs"}, + {"loc": "/sys/s3ip/temp_sensor/temp15/value", "way": "sysfs"}, + ], + "Min": -10000, + "Low": 0, + "High": 70000, + "Max": 75000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "CPU_TEMP", + "temp_id": "TEMP2", + "Temperature": { + "value": {"loc": "/sys/bus/platform/devices/coretemp.0/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -15000, + "Low": 10000, + "High": 98000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "INLET_TEMP", + "temp_id": "TEMP3", + "Temperature": { + "value": [ + {"loc": "/sys/s3ip/temp_sensor/temp10/value", "way": "sysfs"}, + ], + "Min": -30000, + "Low": 0, + "High": 40000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "OUTLET_TEMP", + "temp_id": "TEMP4", + "Temperature": { + "value": [ + {"loc": "/sys/s3ip/temp_sensor/temp11/value", "way": "sysfs"}, + {"loc": "/sys/s3ip/temp_sensor/temp12/value", "way": "sysfs"}, + ], + "Min": -30000, + "Low": 0, + "High": 70000, + "Max": 80000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SWITCH_TEMP", + "temp_id": "TEMP5", + "api_name": "ASIC_TEMP", + "Temperature": { + "value": {"loc": "/sys/s3ip/temp_sensor/temp17/value", "way": "sysfs"}, + "Min": -30000, + "Low": 10000, + "High": 100000, + "Max": 105000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU1_TEMP", + "temp_id": "TEMP6", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-42/42-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "PSU2_TEMP", + "temp_id": "TEMP7", + "Temperature": { + "value": {"loc": "/sys/bus/i2c/devices/i2c-43/43-0058/hwmon/hwmon*/temp1_input", "way": "sysfs"}, + "Min": -10000, + "Low": 0, + "High": 55000, + "Max": 60000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "MOS_TEMP", + "temp_id": "TEMP8", + "Temperature": { + "value": [ + {"loc": "/sys/s3ip/temp_sensor/temp18/value", "way": "sysfs"}, + {"loc": "/sys/s3ip/temp_sensor/temp19/value", "way": "sysfs"}, + {"loc": "/sys/s3ip/temp_sensor/temp20/value", "way": "sysfs"}, + ], + "Min": -30000, + "Low": 10000, + "High": 100000, + "Max":125000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + { + "name": "SFF_TEMP", + "Temperature": { + "value": {"loc": "/tmp/highest_sff_temp", "way": "sysfs", "flock_path": "/tmp/highest_sff_temp"}, + "Min": -15000, + "Low": 0, + "High": 80000, + "Max": 100000, + "Unit": Unit.Temperature, + "format": "float(float(%s)/1000)" + } + }, + ], + "leds": [ + { + "name": "FRONT_SYS_LED", + "led_type": "SYS_LED", + "led": {"loc": "/dev/cpld1", "offset": 0xd2, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x07 + }, + }, + { + "name": "FRONT_PSU_LED", + "led_type": "PSU_LED", + "led": {"loc": "/dev/cpld1", "offset": 0xd3, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x07 + }, + }, + { + "name": "FRONT_FAN_LED", + "led_type": "FAN_LED", + "led": {"loc": "/dev/cpld1", "offset": 0xd4, "len": 1, "way": "devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0, "mask": 0x07 + }, + }, + ], + "fans": [ + { + "name": "FAN1", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-52/52-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/s3ip/fan/fan1/status", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"loc": "/dev/cpld10", "offset":0xd0, "len": 1, "way":"devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x90, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan1/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan1/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x90, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan1/motor2/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan1/motor2/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan1/motor2/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN2", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-53/53-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/s3ip/fan/fan2/status", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"loc": "/dev/cpld10", "offset":0xd1, "len": 1, "way":"devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x91, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan2/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan2/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x91, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan2/motor2/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan2/motor2/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan2/motor2/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN3", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-54/54-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/s3ip/fan/fan3/status", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"loc": "/dev/cpld10", "offset":0xd2, "len": 1, "way":"devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x92, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan3/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan3/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x92, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan3/motor2/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan3/motor2/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan3/motor2/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + { + "name": "FAN4", + "airflow": fanairflow, + "e2loc": {'loc': '/sys/bus/i2c/devices/i2c-55/55-0050/eeprom', 'offset': 0, 'len': 256, 'way': 'devfile'}, + "present": {"loc": "/sys/s3ip/fan/fan4/status", "way": "sysfs", "mask": 0x01, "okval": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "led": {"loc": "/dev/cpld10", "offset":0xd3, "len": 1, "way":"devfile"}, + "led_attrs": { + "green": 0x04, "red": 0x02, "amber": 0x06, "default": 0x04, + "flash": 0xff, "light": 0xff, "off": 0xff, "mask": 0x07 + }, + "Rotor": { + "Rotor1_config": { + "name": "Rotor1", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x93, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan4/motor1/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.FRONT_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan4/motor1/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.FRONT_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + "Rotor2_config": { + "name": "Rotor2", + "Set_speed": {"loc": "/dev/cpld10", "offset":0x93, "len": 1, "way":"devfile"}, + "Running": {"loc": "/sys/s3ip/fan/fan4/motor2/status", "way": "sysfs", "mask": 0x01, "is_runing": 1}, + "HwAlarm": {"loc": "/sys/s3ip/fan/fan4/motor2/status", "way": "sysfs", "mask": 0x01, "no_alarm": 1}, + "SpeedMin": threshold.FAN_SPEED_MIN, + "SpeedMax": threshold.REAR_FAN_SPEED_MAX, + "Speed": { + "value": {"loc": "/sys/s3ip/fan/fan4/motor2/speed", "way": "sysfs"}, + "Min": threshold.FAN_SPEED_MIN, + "Max": threshold.REAR_FAN_SPEED_MAX, + "Unit": Unit.Speed, + }, + }, + }, + }, + ], + "cplds": [ + { + "name": "CPU_CPLD", + "cpld_id": "CPLD1", + "VersionFile": {"loc": "/dev/cpld0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for system power", + "slot": 0, + "warm": 1, + }, + { + "name": "CONNECT_CPLD", + "cpld_id": "CPLD2", + "VersionFile": {"loc": "/dev/cpld1", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_CPLDA", + "cpld_id": "CPLD3", + "VersionFile": {"loc": "/dev/cpld6", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_CPLDB", + "cpld_id": "CPLD4", + "VersionFile": {"loc": "/dev/cpld7", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_CPLDC", + "cpld_id": "CPLD5", + "VersionFile": {"loc": "/dev/cpld8", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MGMT_CPLD", + "cpld_id": "CPLD6", + "VersionFile": {"loc": "/dev/cpld9", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for sff modules", + "slot": 0, + "warm": 1, + }, + { + "name": "FAN_CPLD", + "cpld_id": "CPLD7", + "VersionFile": {"loc": "/dev/cpld10", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for fan modules", + "slot": 0, + "warm": 1, + }, + { + "name": "MAC_FPGA", + "cpld_id": "CPLD8", + "VersionFile": {"loc": "/dev/fpga0", "offset": 0, "len": 4, "way": "devfile_ascii"}, + "desc": "Used for base functions", + "slot": 0, + "format": "little_endian", + "warm": 1, + }, + { + "name": "BIOS", + "cpld_id": "CPLD9", + "VersionFile": {"cmd": "dmidecode -s bios-version", "way": "cmd"}, + "desc": "Performs initialization of hardware components during booting", + "slot": 0, + "type": "str", + "warm": 0, + }, + ], + "cpu": [ + { + "name": "cpu", + "CpuResetCntReg": {"loc": "/dev/cpld1", "offset": 0x10, "len": 1, "way": "devfile_ascii"}, + "reboot_cause_path": "/etc/sonic/.reboot/.previous-reboot-cause.txt" + } + ], + "sfps": { + "ver": '1.0', + "port_index_start": 0, + "port_num": 66, + "log_level": 2, + "eeprom_retry_times": 5, + "eeprom_retry_break_sec": 0.2, + "presence_cpld": { + "dev_id": { + 6: { + "offset": { + 0x73: "17-24", + 0x74: "9-16", + 0x75: "1-8", + }, + }, + 7: { + "offset": { + 0x76: "57-64", + 0x77: "49-56", + 0x78: "41-48", + 0x79: "33-40", + 0x7a: "25-32", + }, + }, + 9: { + "offset": { + 0x69: "65-66", + }, + }, + }, + }, + "presence_val_is_present": 0, + "eeprom_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/eeprom", + "eeprom_path_key": list(range(106, 170)) + [59, 60], + "optoe_driver_path": "/sys/bus/i2c/devices/i2c-%d/%d-0050/dev_class", + "optoe_driver_key": list(range(106, 170)) + [59, 60], + "reset_cpld": { + "dev_id": { + 6: { + "offset": { + 0x70: "17-24", + 0x71: "9-16", + 0x72: "1-8", + }, + }, + 7: { + "offset": { + 0x70: "57-64", + 0x71: "49-56", + 0x72: "41-48", + 0x73: "33-40", + 0x74: "25-32", + }, + }, + }, + }, + "reset_val_is_reset": 0, + } +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_monitor.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_monitor.py new file mode 100644 index 000000000000..4e95787950f6 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/hal-config/x86_64_micas_m2_w6940_64oc_r0_monitor.py @@ -0,0 +1,158 @@ +# coding:utf-8 + + +monitor = { + "openloop": { + "linear": { + "name": "linear", + "flag": 0, + "pwm_min": 0x80, + "pwm_max": 0xff, + "K": 11, + "tin_min": 38, + }, + "curve": { + "name": "curve", + "flag": 1, + "pwm_min": 0x80, + "pwm_max": 0xff, + "a": -0.38, + "b": 33.68, + "c": -476, + "tin_min": 27, + }, + }, + + "pid": { + "CPU_TEMP": { + "name": "CPU_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 0.3, + "Kd": 0.3, + "target": 80, + "value": [None, None, None], + }, + "SWITCH_TEMP": { + "name": "SWITCH_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 1.5, + "Ki": 1, + "Kd": 0.3, + "target": 90, + "value": [None, None, None], + }, + "OUTLET_TEMP": { + "name": "OUTLET_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.4, + "Kd": 0.3, + "target": 65, + "value": [None, None, None], + }, + "MOS_TEMP": { + "name": "MOS_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 1, + "Ki": 0.1, + "Kd": 0.3, + "target": 97, + "value": [None, None, None], + }, + "SFF_TEMP": { + "name": "SFF_TEMP", + "flag": 1, + "type": "duty", + "pwm_min": 0x80, + "pwm_max": 0xff, + "Kp": 2, + "Ki": 0.3, + "Kd": 0, + "target": 65, + "value": [None, None, None], + }, + }, + + "temps_threshold": { + "SWITCH_TEMP": {"name": "SWITCH_TEMP", "warning": 100, "critical": 105, "invalid": -100000, "error": -99999}, + "INLET_TEMP": {"name": "INLET_TEMP", "warning": 50, "critical": 55, "fix": -2}, + "OUTLET_TEMP": {"name": "OUTLET_TEMP", "warning": 70, "critical": 75}, + "CPU_TEMP": {"name": "CPU_TEMP", "warning": 90, "critical": 95}, + "MOS_TEMP": {"name": "MOS_TEMP", "warning": 100, "critical": 125}, + "BOARD_TEMP": {"name": "BOARD_TEMP", "warning": 95, "critical": 100}, + "SFF_TEMP": {"name": "SFF_TEMP", "warning": 999, "critical": 1000, "ignore_threshold": 1, "invalid": -10000, "error": -9999}, + }, + + "fancontrol_para": { + "interval": 5, + "max_pwm": 0xff, + "min_pwm": 0x80, + "abnormal_pwm": 0xff, + "warning_pwm": 0xff, + "temp_invalid_pid_pwm": 0x80, + "temp_error_pid_pwm": 0x80, + "temp_fail_num": 3, + "check_temp_fail": [ + {"temp_name": "INLET_TEMP"}, + {"temp_name": "SWITCH_TEMP"}, + {"temp_name": "CPU_TEMP"}, + {"temp_name": "MOS_TEMP"}, + {"temp_name": "OUTLET_TEMP"}, + {"temp_name": "BOARD_TEMP"}, + ], + "temp_warning_num": 3, # temp over warning 3 times continuously + "temp_critical_num": 3, # temp over critical 3 times continuously + "temp_warning_countdown": 60, # 5 min warning speed after not warning + "temp_critical_countdown": 60, # 5 min full speed after not critical + "rotor_error_count": 6, # fan rotor error 6 times continuously + "inlet_mac_diff": 999, + "check_crit_reboot_flag": 1, + "check_crit_reboot_num": 3, + "check_crit_sleep_time": 20, + "psu_fan_control": 1, + "psu_absent_fullspeed_num": 0xFF, + "fan_absent_fullspeed_num": 1, + "rotor_error_fullspeed_num": 1, + "deal_all_fan_error_method_flag": 1, + "all_fan_error_switch_temp_critical_temp": 80, + "all_fan_error_recover_log": "Power off base and mac board.", + "all_fan_error_recover_cmd": "dfd_debug io_wr 0x93a 0x01", + "all_fan_error_check_crit_reboot_num": 3, + "all_fan_error_check_crit_sleep_time": 2, + }, + + "ledcontrol_para": { + "interval":5, + "checkpsu": 0, # 0: sys led don't follow psu led + "checkfan": 0, # 0: sys led don't follow fan led + "psu_amber_num": 1, + "fan_amber_num": 1, + "board_sys_led": [ + {"led_name": "FRONT_SYS_LED"}, + ], + "board_psu_led": [ + {"led_name": "FRONT_PSU_LED"}, + ], + "board_fan_led": [ + {"led_name": "FRONT_FAN_LED"}, + ], + }, + + "otp_reboot_judge_file": { + "otp_switch_reboot_judge_file": "/etc/.otp_switch_reboot_flag", + "otp_other_reboot_judge_file": "/etc/.otp_other_reboot_flag", + }, +} diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/Makefile b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/Makefile new file mode 100644 index 000000000000..8c39927af73d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/Makefile @@ -0,0 +1,13 @@ +MAKEFILE_FILE_PATH = $(abspath $(lastword $(MAKEFILE_LIST))) +MODULES_DIR = $(abspath $(MAKEFILE_FILE_PATH)/../../../../common/modules) + +EXTRA_CFLAGS+= -I$(MODULES_DIR) + +obj-m += wb_pcie_dev_device.o +obj-m += wb_io_dev_device.o +obj-m += wb_fpga_i2c_bus_device.o +obj-m += wb_i2c_mux_pca954x_device.o +obj-m += wb_fpga_pca954x_device.o +obj-m += wb_i2c_dev_device.o +obj-m += wb_wdt_device.o +obj-m += wb_indirect_dev_device.o diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_i2c_bus_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_i2c_bus_device.c new file mode 100644 index 000000000000..60fde91c5102 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_i2c_bus_device.c @@ -0,0 +1,1101 @@ +/* + * An wb_fpga_i2c_bus_device driver for fpga i2c device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_fpga_i2c_debug = 0; +static int g_wb_fpga_i2c_error = 0; + +module_param(g_wb_fpga_i2c_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_i2c_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_I2C_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_i2c_debug) { \ + printk(KERN_INFO "[WB_FPGA_I2C][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_I2C_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_i2c_error) { \ + printk(KERN_ERR "[WB_FPGA_I2C][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +/* CPLD-I2C-MASTER-1 */ +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data0 = { + .adap_nr = 2, + .i2c_timeout = 3000, + .i2c_scale = 0x00, + .i2c_filter = 0x04, + .i2c_stretch = 0x08, + .i2c_ext_9548_exits_flag = 0x0c, + .i2c_ext_9548_addr = 0x10, + .i2c_ext_9548_chan = 0x14, + .i2c_in_9548_chan = 0x18, + .i2c_slave = 0x1c, + .i2c_reg = 0x20, + .i2c_reg_len = 0x30, + .i2c_data_len = 0x34, + .i2c_ctrl = 0x38, + .i2c_status = 0x3c, + .i2c_err_vec = 0x48, + .i2c_data_buf = 0x100, + .i2c_data_buf_len = 256, + .dev_name = "/dev/cpld2", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 6, + .i2c_adap_reset_flag = 0, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +/* CPLD-I2C-MASTER-4 */ +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data1 = { + .adap_nr = 3, + .i2c_timeout = 3000, + .i2c_scale = 0x00, + .i2c_filter = 0x04, + .i2c_stretch = 0x08, + .i2c_ext_9548_exits_flag = 0x0c, + .i2c_ext_9548_addr = 0x10, + .i2c_ext_9548_chan = 0x14, + .i2c_in_9548_chan = 0x18, + .i2c_slave = 0x1c, + .i2c_reg = 0x20, + .i2c_reg_len = 0x30, + .i2c_data_len = 0x34, + .i2c_ctrl = 0x38, + .i2c_status = 0x3c, + .i2c_err_vec = 0x48, + .i2c_data_buf = 0x100, + .i2c_data_buf_len = 256, + .dev_name = "/dev/cpld5", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 6, + .i2c_adap_reset_flag = 0, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +/* CPLD-I2C-MASTER-2 */ +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data2 = { + .adap_nr = 4, + .i2c_timeout = 3000, + .i2c_scale = 0x00, + .i2c_filter = 0x04, + .i2c_stretch = 0x08, + .i2c_ext_9548_exits_flag = 0x0c, + .i2c_ext_9548_addr = 0x10, + .i2c_ext_9548_chan = 0x14, + .i2c_in_9548_chan = 0x18, + .i2c_slave = 0x1c, + .i2c_reg = 0x20, + .i2c_reg_len = 0x30, + .i2c_data_len = 0x34, + .i2c_ctrl = 0x38, + .i2c_status = 0x3c, + .i2c_err_vec = 0x48, + .i2c_data_buf = 0x100, + .i2c_data_buf_len = 256, + .dev_name = "/dev/cpld3", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 6, + .i2c_adap_reset_flag = 0, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +/* CPLD-I2C-MASTER-3 */ +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data3 = { + .adap_nr = 5, + .i2c_timeout = 3000, + .i2c_scale = 0x00, + .i2c_filter = 0x04, + .i2c_stretch = 0x08, + .i2c_ext_9548_exits_flag = 0x0c, + .i2c_ext_9548_addr = 0x10, + .i2c_ext_9548_chan = 0x14, + .i2c_in_9548_chan = 0x18, + .i2c_slave = 0x1c, + .i2c_reg = 0x20, + .i2c_reg_len = 0x30, + .i2c_data_len = 0x34, + .i2c_ctrl = 0x38, + .i2c_status = 0x3c, + .i2c_err_vec = 0x48, + .i2c_data_buf = 0x100, + .i2c_data_buf_len = 256, + .dev_name = "/dev/cpld4", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 6, + .i2c_adap_reset_flag = 0, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data4 = { + .adap_nr = 6, + .i2c_timeout = 3000, + .i2c_scale = 0x1400, + .i2c_filter = 0x1404, + .i2c_stretch = 0x1408, + .i2c_ext_9548_exits_flag = 0x140c, + .i2c_ext_9548_addr = 0x1410, + .i2c_ext_9548_chan = 0x1414, + .i2c_in_9548_chan = 0x1418, + .i2c_slave = 0x141c, + .i2c_reg = 0x1420, + .i2c_reg_len = 0x1430, + .i2c_data_len = 0x1434, + .i2c_ctrl = 0x1438, + .i2c_status = 0x143c, + .i2c_err_vec = 0x1448, + .i2c_data_buf = 0x1480, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x4c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data5 = { + .adap_nr = 7, + .i2c_timeout = 3000, + .i2c_scale = 0x1500, + .i2c_filter = 0x1504, + .i2c_stretch = 0x1508, + .i2c_ext_9548_exits_flag = 0x150c, + .i2c_ext_9548_addr = 0x1510, + .i2c_ext_9548_chan = 0x1514, + .i2c_in_9548_chan = 0x1518, + .i2c_slave = 0x151c, + .i2c_reg = 0x1520, + .i2c_reg_len = 0x1530, + .i2c_data_len = 0x1534, + .i2c_ctrl = 0x1538, + .i2c_status = 0x153c, + .i2c_err_vec = 0x1548, + .i2c_data_buf = 0x1580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x50, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data6 = { + .adap_nr = 8, + .i2c_timeout = 3000, + .i2c_scale = 0x1800, + .i2c_filter = 0x1804, + .i2c_stretch = 0x1808, + .i2c_ext_9548_exits_flag = 0x180c, + .i2c_ext_9548_addr = 0x1810, + .i2c_ext_9548_chan = 0x1814, + .i2c_in_9548_chan = 0x1818, + .i2c_slave = 0x181c, + .i2c_reg = 0x1820, + .i2c_reg_len = 0x1830, + .i2c_data_len = 0x1834, + .i2c_ctrl = 0x1838, + .i2c_status = 0x183c, + .i2c_err_vec = 0x1848, + .i2c_data_buf = 0x1880, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x54, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data7 = { + .adap_nr = 9, + .i2c_timeout = 3000, + .i2c_scale = 0x1900, + .i2c_filter = 0x1904, + .i2c_stretch = 0x1908, + .i2c_ext_9548_exits_flag = 0x190c, + .i2c_ext_9548_addr = 0x1910, + .i2c_ext_9548_chan = 0x1914, + .i2c_in_9548_chan = 0x1918, + .i2c_slave = 0x191c, + .i2c_reg = 0x1920, + .i2c_reg_len = 0x1930, + .i2c_data_len = 0x1934, + .i2c_ctrl = 0x1938, + .i2c_status = 0x193c, + .i2c_err_vec = 0x1948, + .i2c_data_buf = 0x1980, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x58, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_i2c_bus_device_data8 = { + .adap_nr = 10, + .i2c_timeout = 3000, + .i2c_scale = 0x1a00, + .i2c_filter = 0x1a04, + .i2c_stretch = 0x1a08, + .i2c_ext_9548_exits_flag = 0x1a0c, + .i2c_ext_9548_addr = 0x1a10, + .i2c_ext_9548_chan = 0x1a14, + .i2c_in_9548_chan = 0x1a18, + .i2c_slave = 0x1a1c, + .i2c_reg = 0x1a20, + .i2c_reg_len = 0x1a30, + .i2c_data_len = 0x1a34, + .i2c_ctrl = 0x1a38, + .i2c_status = 0x1a3c, + .i2c_err_vec = 0x1a48, + .i2c_data_buf = 0x1a80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000001, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data0 = { + .adap_nr = 11, + .i2c_timeout = 3000, + .i2c_scale = 0x2000, + .i2c_filter = 0x2004, + .i2c_stretch = 0x2008, + .i2c_ext_9548_exits_flag = 0x200c, + .i2c_ext_9548_addr = 0x2010, + .i2c_ext_9548_chan = 0x2014, + .i2c_in_9548_chan = 0x2018, + .i2c_slave = 0x201c, + .i2c_reg = 0x2020, + .i2c_reg_len = 0x2030, + .i2c_data_len = 0x2034, + .i2c_ctrl = 0x2038, + .i2c_status = 0x203c, + .i2c_err_vec = 0x2048, + .i2c_data_buf = 0x2080, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000002, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data1 = { + .adap_nr = 12, + .i2c_timeout = 3000, + .i2c_scale = 0x2100, + .i2c_filter = 0x2104, + .i2c_stretch = 0x2108, + .i2c_ext_9548_exits_flag = 0x210c, + .i2c_ext_9548_addr = 0x2110, + .i2c_ext_9548_chan = 0x2114, + .i2c_in_9548_chan = 0x2118, + .i2c_slave = 0x211c, + .i2c_reg = 0x2120, + .i2c_reg_len = 0x2130, + .i2c_data_len = 0x2134, + .i2c_ctrl = 0x2138, + .i2c_status = 0x213c, + .i2c_err_vec = 0x2148, + .i2c_data_buf = 0x2180, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x0000004, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data2 = { + .adap_nr = 13, + .i2c_timeout = 3000, + .i2c_scale = 0x2200, + .i2c_filter = 0x2204, + .i2c_stretch = 0x2208, + .i2c_ext_9548_exits_flag = 0x220c, + .i2c_ext_9548_addr = 0x2210, + .i2c_ext_9548_chan = 0x2214, + .i2c_in_9548_chan = 0x2218, + .i2c_slave = 0x221c, + .i2c_reg = 0x2220, + .i2c_reg_len = 0x2230, + .i2c_data_len = 0x2234, + .i2c_ctrl = 0x2238, + .i2c_status = 0x223c, + .i2c_err_vec = 0x2248, + .i2c_data_buf = 0x2280, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000008, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data3 = { + .adap_nr = 14, + .i2c_timeout = 3000, + .i2c_scale = 0x2300, + .i2c_filter = 0x2304, + .i2c_stretch = 0x2308, + .i2c_ext_9548_exits_flag = 0x230c, + .i2c_ext_9548_addr = 0x2310, + .i2c_ext_9548_chan = 0x2314, + .i2c_in_9548_chan = 0x2318, + .i2c_slave = 0x231c, + .i2c_reg = 0x2320, + .i2c_reg_len = 0x2330, + .i2c_data_len = 0x2334, + .i2c_ctrl = 0x2338, + .i2c_status = 0x233c, + .i2c_err_vec = 0x2348, + .i2c_data_buf = 0x2380, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000010, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data4 = { + .adap_nr = 15, + .i2c_timeout = 3000, + .i2c_scale = 0x2400, + .i2c_filter = 0x2404, + .i2c_stretch = 0x2408, + .i2c_ext_9548_exits_flag = 0x240c, + .i2c_ext_9548_addr = 0x2410, + .i2c_ext_9548_chan = 0x2414, + .i2c_in_9548_chan = 0x2418, + .i2c_slave = 0x241c, + .i2c_reg = 0x2420, + .i2c_reg_len = 0x2430, + .i2c_data_len = 0x2434, + .i2c_ctrl = 0x2438, + .i2c_status = 0x243c, + .i2c_err_vec = 0x2448, + .i2c_data_buf = 0x2480, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000020, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data5 = { + .adap_nr = 16, + .i2c_timeout = 3000, + .i2c_scale = 0x2500, + .i2c_filter = 0x2504, + .i2c_stretch = 0x2508, + .i2c_ext_9548_exits_flag = 0x250c, + .i2c_ext_9548_addr = 0x2510, + .i2c_ext_9548_chan = 0x2514, + .i2c_in_9548_chan = 0x2518, + .i2c_slave = 0x251c, + .i2c_reg = 0x2520, + .i2c_reg_len = 0x2530, + .i2c_data_len = 0x2534, + .i2c_ctrl = 0x2538, + .i2c_status = 0x253c, + .i2c_err_vec = 0x2548, + .i2c_data_buf = 0x2580, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000040, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data6 = { + .adap_nr = 17, + .i2c_timeout = 3000, + .i2c_scale = 0x2600, + .i2c_filter = 0x2604, + .i2c_stretch = 0x2608, + .i2c_ext_9548_exits_flag = 0x260c, + .i2c_ext_9548_addr = 0x2610, + .i2c_ext_9548_chan = 0x2614, + .i2c_in_9548_chan = 0x2618, + .i2c_slave = 0x261c, + .i2c_reg = 0x2620, + .i2c_reg_len = 0x2630, + .i2c_data_len = 0x2634, + .i2c_ctrl = 0x2638, + .i2c_status = 0x263c, + .i2c_err_vec = 0x2648, + .i2c_data_buf = 0x2680, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000080, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data7 = { + .adap_nr = 18, + .i2c_timeout = 3000, + .i2c_scale = 0x2700, + .i2c_filter = 0x2704, + .i2c_stretch = 0x2708, + .i2c_ext_9548_exits_flag = 0x270c, + .i2c_ext_9548_addr = 0x2710, + .i2c_ext_9548_chan = 0x2714, + .i2c_in_9548_chan = 0x2718, + .i2c_slave = 0x271c, + .i2c_reg = 0x2720, + .i2c_reg_len = 0x2730, + .i2c_data_len = 0x2734, + .i2c_ctrl = 0x2738, + .i2c_status = 0x273c, + .i2c_err_vec = 0x2748, + .i2c_data_buf = 0x2780, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000100, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data8 = { + .adap_nr = 19, + .i2c_timeout = 3000, + .i2c_scale = 0x2800, + .i2c_filter = 0x2804, + .i2c_stretch = 0x2808, + .i2c_ext_9548_exits_flag = 0x280c, + .i2c_ext_9548_addr = 0x2810, + .i2c_ext_9548_chan = 0x2814, + .i2c_in_9548_chan = 0x2818, + .i2c_slave = 0x281c, + .i2c_reg = 0x2820, + .i2c_reg_len = 0x2830, + .i2c_data_len = 0x2834, + .i2c_ctrl = 0x2838, + .i2c_status = 0x283c, + .i2c_err_vec = 0x2848, + .i2c_data_buf = 0x2880, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000200, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data9 = { + .adap_nr = 20, + .i2c_timeout = 3000, + .i2c_scale = 0x2900, + .i2c_filter = 0x2904, + .i2c_stretch = 0x2908, + .i2c_ext_9548_exits_flag = 0x290c, + .i2c_ext_9548_addr = 0x2910, + .i2c_ext_9548_chan = 0x2914, + .i2c_in_9548_chan = 0x2918, + .i2c_slave = 0x291c, + .i2c_reg = 0x2920, + .i2c_reg_len = 0x2930, + .i2c_data_len = 0x2934, + .i2c_ctrl = 0x2938, + .i2c_status = 0x293c, + .i2c_err_vec = 0x2948, + .i2c_data_buf = 0x2980, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000400, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data10 = { + .adap_nr = 21, + .i2c_timeout = 3000, + .i2c_scale = 0x2a00, + .i2c_filter = 0x2a04, + .i2c_stretch = 0x2a08, + .i2c_ext_9548_exits_flag = 0x2a0c, + .i2c_ext_9548_addr = 0x2a10, + .i2c_ext_9548_chan = 0x2a14, + .i2c_in_9548_chan = 0x2a18, + .i2c_slave = 0x2a1c, + .i2c_reg = 0x2a20, + .i2c_reg_len = 0x2a30, + .i2c_data_len = 0x2a34, + .i2c_ctrl = 0x2a38, + .i2c_status = 0x2a3c, + .i2c_err_vec = 0x2a48, + .i2c_data_buf = 0x2a80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00000800, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data11 = { + .adap_nr = 22, + .i2c_timeout = 3000, + .i2c_scale = 0x2b00, + .i2c_filter = 0x2b04, + .i2c_stretch = 0x2b08, + .i2c_ext_9548_exits_flag = 0x2b0c, + .i2c_ext_9548_addr = 0x2b10, + .i2c_ext_9548_chan = 0x2b14, + .i2c_in_9548_chan = 0x2b18, + .i2c_slave = 0x2b1c, + .i2c_reg = 0x2b20, + .i2c_reg_len = 0x2b30, + .i2c_data_len = 0x2b34, + .i2c_ctrl = 0x2b38, + .i2c_status = 0x2b3c, + .i2c_err_vec = 0x2b48, + .i2c_data_buf = 0x2b80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00001000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data12 = { + .adap_nr = 23, + .i2c_timeout = 3000, + .i2c_scale = 0x2c00, + .i2c_filter = 0x2c04, + .i2c_stretch = 0x2c08, + .i2c_ext_9548_exits_flag = 0x2c0c, + .i2c_ext_9548_addr = 0x2c10, + .i2c_ext_9548_chan = 0x2c14, + .i2c_in_9548_chan = 0x2c18, + .i2c_slave = 0x2c1c, + .i2c_reg = 0x2c20, + .i2c_reg_len = 0x2c30, + .i2c_data_len = 0x2c34, + .i2c_ctrl = 0x2c38, + .i2c_status = 0x2c3c, + .i2c_err_vec = 0x2c48, + .i2c_data_buf = 0x2c80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00002000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data13 = { + .adap_nr = 24, + .i2c_timeout = 3000, + .i2c_scale = 0x2d00, + .i2c_filter = 0x2d04, + .i2c_stretch = 0x2d08, + .i2c_ext_9548_exits_flag = 0x2d0c, + .i2c_ext_9548_addr = 0x2d10, + .i2c_ext_9548_chan = 0x2d14, + .i2c_in_9548_chan = 0x2d18, + .i2c_slave = 0x2d1c, + .i2c_reg = 0x2d20, + .i2c_reg_len = 0x2d30, + .i2c_data_len = 0x2d34, + .i2c_ctrl = 0x2d38, + .i2c_status = 0x2d3c, + .i2c_err_vec = 0x2d48, + .i2c_data_buf = 0x2d80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00004000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data14 = { + .adap_nr = 25, + .i2c_timeout = 3000, + .i2c_scale = 0x2e00, + .i2c_filter = 0x2e04, + .i2c_stretch = 0x2e08, + .i2c_ext_9548_exits_flag = 0x2e0c, + .i2c_ext_9548_addr = 0x2e10, + .i2c_ext_9548_chan = 0x2e14, + .i2c_in_9548_chan = 0x2e18, + .i2c_slave = 0x2e1c, + .i2c_reg = 0x2e20, + .i2c_reg_len = 0x2e30, + .i2c_data_len = 0x2e34, + .i2c_ctrl = 0x2e38, + .i2c_status = 0x2e3c, + .i2c_err_vec = 0x2e48, + .i2c_data_buf = 0x2e80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00008000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static fpga_i2c_bus_device_t fpga0_dom_i2c_bus_device_data15 = { + .adap_nr = 26, + .i2c_timeout = 3000, + .i2c_scale = 0x2f00, + .i2c_filter = 0x2f04, + .i2c_stretch = 0x2f08, + .i2c_ext_9548_exits_flag = 0x2f0c, + .i2c_ext_9548_addr = 0x2f10, + .i2c_ext_9548_chan = 0x2f14, + .i2c_in_9548_chan = 0x2f18, + .i2c_slave = 0x2f1c, + .i2c_reg = 0x2f20, + .i2c_reg_len = 0x2f30, + .i2c_data_len = 0x2f34, + .i2c_ctrl = 0x2f38, + .i2c_status = 0x2f3c, + .i2c_err_vec = 0x2f48, + .i2c_data_buf = 0x2f80, + .dev_name = "/dev/fpga0", + .i2c_scale_value = 0x4e, + .i2c_filter_value = 0x7c, + .i2c_stretch_value = 0x7c, + .i2c_func_mode = 3, + .i2c_adap_reset_flag = 1, + .i2c_reset_addr = 0x7c, + .i2c_reset_on = 0x00010000, + .i2c_reset_off = 0x00000000, + .i2c_rst_delay_b = 0, /* delay time before reset(us) */ + .i2c_rst_delay = 1, /* reset time(us) */ + .i2c_rst_delay_a = 1, /* delay time after reset(us) */ +}; + +static void wb_fpga_i2c_bus_device_release(struct device *dev) +{ + return; +} + +static struct platform_device fpga_i2c_bus_device[] = { + { + .name = "wb-fpga-i2c", + .id = 1, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 2, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 3, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 4, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 5, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 6, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 7, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 8, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data7, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 9, + .dev = { + .platform_data = &fpga0_i2c_bus_device_data8, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 10, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data0, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 11, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data1, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 12, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data2, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 13, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data3, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 14, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data4, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 15, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data5, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 16, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data6, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 17, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data7, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 18, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data8, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 19, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data9, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 20, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data10, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 21, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data11, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 22, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data12, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 23, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data13, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 24, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data14, + .release = wb_fpga_i2c_bus_device_release, + }, + }, + { + .name = "wb-fpga-i2c", + .id = 25, + .dev = { + .platform_data = &fpga0_dom_i2c_bus_device_data15, + .release = wb_fpga_i2c_bus_device_release, + }, + }, +}; + +static int __init wb_fpga_i2c_bus_device_init(void) +{ + int i; + int ret = 0; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_i2c_bus_device); i++) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + ret = platform_device_register(&fpga_i2c_bus_device[i]); + if (ret < 0) { + fpga_i2c_bus_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-fpga-i2c.%d register failed!\n", i + 1); + } else { + fpga_i2c_bus_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_fpga_i2c_bus_device_exit(void) +{ + int i; + fpga_i2c_bus_device_t *fpga_i2c_bus_device_data; + + WB_FPGA_I2C_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_i2c_bus_device) - 1; i >= 0; i--) { + fpga_i2c_bus_device_data = fpga_i2c_bus_device[i].dev.platform_data; + if (fpga_i2c_bus_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&fpga_i2c_bus_device[i]); + } + } +} + +module_init(wb_fpga_i2c_bus_device_init); +module_exit(wb_fpga_i2c_bus_device_exit); +MODULE_DESCRIPTION("FPGA I2C Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_pca954x_device.c new file mode 100644 index 000000000000..043ec82366ec --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_fpga_pca954x_device.c @@ -0,0 +1,489 @@ +/* + * An wb_fpga_pca954x_device driver for fpga pca954x device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_fpga_pca954x_device_debug = 0; +static int g_wb_fpga_pca954x_device_error = 0; + +module_param(g_wb_fpga_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_fpga_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_FPGA_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_FPGA_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_fpga_pca954x_device_error) { \ + printk(KERN_ERR "[WB_FPGA_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +/* CPLD-I2C-MASTER-1 */ +static fpga_pca954x_device_t fpga_pca954x_device_data0 = { + .i2c_bus = 2, + .i2c_addr = 0x70, + .pca9548_base_nr = 27, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data1 = { + .i2c_bus = 27, + .i2c_addr = 0x76, + .pca9548_base_nr = 42, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +/* CPLD-I2C-MASTER-4 */ +static fpga_pca954x_device_t fpga_pca954x_device_data2 = { + .i2c_bus = 3, + .i2c_addr = 0x70, + .pca9548_base_nr = 28, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data3 = { + .i2c_bus = 28, + .i2c_addr = 0x77, + .pca9548_base_nr = 50, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +/* CPLD-I2C-MASTER-2 */ +static fpga_pca954x_device_t fpga_pca954x_device_data4 = { + .i2c_bus = 4, + .i2c_addr = 0x70, + .pca9548_base_nr = 29, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data5 = { + .i2c_bus =29, + .i2c_addr = 0x77, + .pca9548_base_nr = 58, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +/* CPLD-I2C-MASTER-3 */ +static fpga_pca954x_device_t fpga_pca954x_device_data6 = { + .i2c_bus = 5, + .i2c_addr = 0x71, + .pca9548_base_nr = 30, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data7 = { + .i2c_bus = 30, + .i2c_addr = 0x77, + .pca9548_base_nr = 66, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +/* fpga-i2c-1 */ +static fpga_pca954x_device_t fpga_pca954x_device_data8 = { + .i2c_bus = 6, + .i2c_addr = 0x70, + .pca9548_base_nr = 31, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data9 = { + .i2c_bus = 31, + .i2c_addr = 0x76, + .pca9548_base_nr = 74, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data10 = { + .i2c_bus = 7, + .i2c_addr = 0x70, + .pca9548_base_nr = 32, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data11 = { + .i2c_bus = 32, + .i2c_addr = 0x76, + .pca9548_base_nr = 82, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data12 = { + .i2c_bus = 8, + .i2c_addr = 0x71, + .pca9548_base_nr = 33, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data13 = { + .i2c_bus = 33, + .i2c_addr = 0x76, + .pca9548_base_nr = 90, + .fpga_9548_flag = 2, + .fpga_9548_reset_flag = 1, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data14 = { + .i2c_bus = 9, + .i2c_addr = 0x70, + .pca9548_base_nr = 98, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data15 = { + .i2c_bus = 10, + .i2c_addr = 0x70, + .pca9548_base_nr = 102, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data16 = { + .i2c_bus = 11, + .i2c_addr = 0x70, + .pca9548_base_nr = 106, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data17 = { + .i2c_bus = 12, + .i2c_addr = 0x70, + .pca9548_base_nr = 110, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data18 = { + .i2c_bus = 13, + .i2c_addr = 0x70, + .pca9548_base_nr = 114, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data19 = { + .i2c_bus = 14, + .i2c_addr = 0x70, + .pca9548_base_nr = 118, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data20 = { + .i2c_bus = 15, + .i2c_addr = 0x70, + .pca9548_base_nr = 122, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data21 = { + .i2c_bus = 16, + .i2c_addr = 0x70, + .pca9548_base_nr = 126, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data22 = { + .i2c_bus = 17, + .i2c_addr = 0x70, + .pca9548_base_nr = 130, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data23 = { + .i2c_bus = 18, + .i2c_addr = 0x70, + .pca9548_base_nr = 134, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data24 = { + .i2c_bus = 19, + .i2c_addr = 0x70, + .pca9548_base_nr = 138, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data25 = { + .i2c_bus = 20, + .i2c_addr = 0x70, + .pca9548_base_nr = 142, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data26 = { + .i2c_bus = 21, + .i2c_addr = 0x70, + .pca9548_base_nr = 146, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data27 = { + .i2c_bus = 22, + .i2c_addr = 0x70, + .pca9548_base_nr = 150, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data28 = { + .i2c_bus = 23, + .i2c_addr = 0x70, + .pca9548_base_nr = 154, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data29 = { + .i2c_bus = 24, + .i2c_addr = 0x70, + .pca9548_base_nr = 158, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data30 = { + .i2c_bus = 25, + .i2c_addr = 0x70, + .pca9548_base_nr = 162, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +static fpga_pca954x_device_t fpga_pca954x_device_data31 = { + .i2c_bus = 26, + .i2c_addr = 0x70, + .pca9548_base_nr = 166, + .fpga_9548_flag = 1, + .fpga_9548_reset_flag = 0, +}; + +struct i2c_board_info fpga_pca954x_device_info[] = { + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data0, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data1, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data2, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data3, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data4, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data5, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data6, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data7, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data8, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data9, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data10, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data11, + }, + { + .type = "wb_fpga_pca9541", + .platform_data = &fpga_pca954x_device_data12, + }, + { + .type = "wb_fpga_pca9548", + .platform_data = &fpga_pca954x_device_data13, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data14, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data15, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data16, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data17, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data18, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data19, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data20, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data21, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data22, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data23, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data24, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data25, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data26, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data27, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data28, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data29, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data30, + }, + { + .type = "wb_fpga_pca9544", + .platform_data = &fpga_pca954x_device_data31, + }, +}; + +static int __init wb_fpga_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(fpga_pca954x_device_info); i++) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + fpga_pca954x_device_info[i].addr = fpga_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(fpga_pca954x_device_data->i2c_bus); + if (adap == NULL) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", fpga_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &fpga_pca954x_device_info[i]); + if (!client) { + fpga_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register fpga pca954x device %d at bus %d!\n", + fpga_pca954x_device_data->i2c_addr, fpga_pca954x_device_data->i2c_bus); + } else { + fpga_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_fpga_pca954x_device_exit(void) +{ + int i; + fpga_pca954x_device_t *fpga_pca954x_device_data; + + WB_FPGA_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(fpga_pca954x_device_info) - 1; i >= 0; i--) { + fpga_pca954x_device_data = fpga_pca954x_device_info[i].platform_data; + if (fpga_pca954x_device_data->client) { + i2c_unregister_device(fpga_pca954x_device_data->client); + fpga_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_fpga_pca954x_device_init); +module_exit(wb_fpga_pca954x_device_exit); +MODULE_DESCRIPTION("FPGA PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_dev_device.c new file mode 100644 index 000000000000..92bced35580d --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_dev_device.c @@ -0,0 +1,181 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_dev_device_debug = 0; +static int g_wb_i2c_dev_device_error = 0; + +module_param(g_wb_i2c_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_dev_device_debug) { \ + printk(KERN_INFO "[WB_I2C_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_dev_device_error) { \ + printk(KERN_ERR "[WB_I2C_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +/* mac cplda */ +static i2c_dev_device_t i2c_dev_device_data0 = { + .i2c_bus = 98, + .i2c_addr = 0x1d, + .i2c_name = "cpld6", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +/* mac cpldb */ +static i2c_dev_device_t i2c_dev_device_data1 = { + .i2c_bus = 99, + .i2c_addr = 0x2d, + .i2c_name = "cpld7", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +/* mac cpldc */ +static i2c_dev_device_t i2c_dev_device_data2 = { + .i2c_bus = 100, + .i2c_addr = 0x3d, + .i2c_name = "cpld8", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +/* mgmt cpld */ +static i2c_dev_device_t i2c_dev_device_data3 = { + .i2c_bus = 5, + .i2c_addr = 0x1a, + .i2c_name = "cpld9", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + +/* fan cpld */ +static i2c_dev_device_t i2c_dev_device_data4 = { + .i2c_bus = 50, + .i2c_addr = 0x0d, + .i2c_name = "cpld10", + .data_bus_width = 1, + .addr_bus_width = 1, + .per_rd_len = 256, + .per_wr_len = 256, + .i2c_len = 256, +}; + + +struct i2c_board_info i2c_dev_device_info[] = { + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data0, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data1, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data2, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data3, + }, + { + .type = "wb-i2c-dev", + .platform_data = &i2c_dev_device_data4, + }, +}; + +static int __init wb_i2c_dev_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_dev_device_info); i++) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + i2c_dev_device_info[i].addr = i2c_dev_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_dev_device_data->i2c_bus); + if (adap == NULL) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_dev_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_dev_device_info[i]); + if (!client) { + i2c_dev_device_data->client = NULL; + printk(KERN_ERR "Failed to register i2c dev device %d at bus %d!\n", + i2c_dev_device_data->i2c_addr, i2c_dev_device_data->i2c_bus); + } else { + i2c_dev_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_dev_device_exit(void) +{ + int i; + i2c_dev_device_t *i2c_dev_device_data; + + WB_I2C_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_dev_device_info) - 1; i >= 0; i--) { + i2c_dev_device_data = i2c_dev_device_info[i].platform_data; + if (i2c_dev_device_data->client) { + i2c_unregister_device(i2c_dev_device_data->client); + i2c_dev_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_dev_device_init); +module_exit(wb_i2c_dev_device_exit); +MODULE_DESCRIPTION("I2C DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_mux_pca954x_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_mux_pca954x_device.c new file mode 100644 index 000000000000..1bc2aafed2a9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_i2c_mux_pca954x_device.c @@ -0,0 +1,122 @@ +/* + * An wb_i2c_mux_pca954x_device driver for pca954x i2c load device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include +#include + +#include + +static int g_wb_i2c_mux_pca954x_device_debug = 0; +static int g_wb_i2c_mux_pca954x_device_error = 0; + +module_param(g_wb_i2c_mux_pca954x_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_i2c_mux_pca954x_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_debug) { \ + printk(KERN_INFO "[WB_I2C_MUX_PCA954X_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_I2C_MUX_PCA954X_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_i2c_mux_pca954x_device_error) { \ + printk(KERN_ERR "[WB_I2C_MUX_PCA954X_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static i2c_mux_pca954x_device_t i2c_mux_pca954x_device_data0 = { + .i2c_bus = 1, + .i2c_addr = 0x70, + .probe_disable = 1, + .select_chan_check = 1, + .close_chan_force_reset = 1, + .pca9548_base_nr = 34, + .pca9548_reset_type = PCA9548_RESET_IO, + .rst_delay_b = 0, + .rst_delay = 1000, + .rst_delay_a = 1000, + .attr = { + .io_attr.io_addr = 0x91e, + .io_attr.mask = 0x01, + .io_attr.reset_on = 0, + .io_attr.reset_off = 0x01, + }, +}; + +struct i2c_board_info i2c_mux_pca954x_device_info[] = { + { + .type = "wb_pca9548", + .platform_data = &i2c_mux_pca954x_device_data0, + }, +}; + +static int __init wb_i2c_mux_pca954x_device_init(void) +{ + int i; + struct i2c_adapter *adap; + struct i2c_client *client; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(i2c_mux_pca954x_device_info); i++) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + i2c_mux_pca954x_device_info[i].addr = i2c_mux_pca954x_device_data->i2c_addr; + adap = i2c_get_adapter(i2c_mux_pca954x_device_data->i2c_bus); + if (adap == NULL) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "get i2c bus %d adapter fail.\n", i2c_mux_pca954x_device_data->i2c_bus); + continue; + } + client = i2c_new_client_device(adap, &i2c_mux_pca954x_device_info[i]); + if (!client) { + i2c_mux_pca954x_device_data->client = NULL; + printk(KERN_ERR "Failed to register pca954x device %d at bus %d!\n", + i2c_mux_pca954x_device_data->i2c_addr, i2c_mux_pca954x_device_data->i2c_bus); + } else { + i2c_mux_pca954x_device_data->client = client; + } + i2c_put_adapter(adap); + } + return 0; +} + +static void __exit wb_i2c_mux_pca954x_device_exit(void) +{ + int i; + i2c_mux_pca954x_device_t *i2c_mux_pca954x_device_data; + + WB_I2C_MUX_PCA954X_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(i2c_mux_pca954x_device_info) - 1; i >= 0; i--) { + i2c_mux_pca954x_device_data = i2c_mux_pca954x_device_info[i].platform_data; + if (i2c_mux_pca954x_device_data->client) { + i2c_unregister_device(i2c_mux_pca954x_device_data->client); + i2c_mux_pca954x_device_data->client = NULL; + } + } +} + +module_init(wb_i2c_mux_pca954x_device_init); +module_exit(wb_i2c_mux_pca954x_device_exit); +MODULE_DESCRIPTION("WB I2C MUX PCA954X Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_indirect_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_indirect_dev_device.c new file mode 100644 index 000000000000..82b692e414cc --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_indirect_dev_device.c @@ -0,0 +1,193 @@ +/* + * An wb_indirect_dev_device driver for indirect load device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_indirect_dev_device_debug = 0; +static int g_indirect_dev_device_error = 0; + +module_param(g_indirect_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_indirect_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define INDIRECT_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_indirect_dev_device_debug) { \ + printk(KERN_INFO "[INDIRECT_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define INDIRECT_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_indirect_dev_device_error) { \ + printk(KERN_ERR "[INDIRECT_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +/* CPLD-I2C-MASTER-0 */ +static indirect_dev_device_t indirect_dev_device_data0 = { + .logic_func_mode = 4, + .dev_name = "cpld2", + .logic_dev_name = "/dev/cpld1", + .data_bus_width = 4, + .addr_bus_width = 1, + .wr_data = 0x70, + .wr_data_width = 4, + .addr_low = 0x74, + .addr_high = 0x75, + .rd_data = 0x76, + .rd_data_width = 4, + .opt_ctl = 0x7a, + .indirect_len = 0x230, +}; + +/* CPLD-I2C-MASTER-1 */ +static indirect_dev_device_t indirect_dev_device_data1 = { + .logic_func_mode = 4, + .dev_name = "cpld3", + .logic_dev_name = "/dev/cpld1", + .data_bus_width = 4, + .addr_bus_width = 1, + .wr_data = 0x80, + .wr_data_width = 4, + .addr_low = 0x84, + .addr_high = 0x85, + .rd_data = 0x86, + .rd_data_width = 4, + .opt_ctl = 0x8a, + .indirect_len = 0x230, +}; + +/* CPLD-I2C-MASTER-2 */ +static indirect_dev_device_t indirect_dev_device_data2 = { + .logic_func_mode = 4, + .dev_name = "cpld4", + .logic_dev_name = "/dev/cpld1", + .data_bus_width = 4, + .addr_bus_width = 1, + .wr_data = 0x90, + .wr_data_width = 4, + .addr_low = 0x94, + .addr_high = 0x95, + .rd_data = 0x96, + .rd_data_width = 4, + .opt_ctl = 0x9a, + .indirect_len = 0x230, +}; + +/* CPLD-I2C-MASTER-3 */ +static indirect_dev_device_t indirect_dev_device_data3 = { + .logic_func_mode = 4, + .dev_name = "cpld5", + .logic_dev_name = "/dev/cpld1", + .data_bus_width = 4, + .addr_bus_width = 1, + .wr_data = 0xa0, + .wr_data_width = 4, + .addr_low = 0xa4, + .addr_high = 0xa5, + .rd_data = 0xa6, + .rd_data_width = 4, + .opt_ctl = 0xaa, + .indirect_len = 0x230, +}; + +static void indirect_dev_device_bus_device_release(struct device *dev) +{ + return; +} + +static struct platform_device indirect_dev_device[] = { + { + .name = "wb-indirect-dev", + .id = 1, + .dev = { + .platform_data = &indirect_dev_device_data0, + .release = indirect_dev_device_bus_device_release, + }, + }, + { + .name = "wb-indirect-dev", + .id = 2, + .dev = { + .platform_data = &indirect_dev_device_data1, + .release = indirect_dev_device_bus_device_release, + }, + }, + { + .name = "wb-indirect-dev", + .id = 3, + .dev = { + .platform_data = &indirect_dev_device_data2, + .release = indirect_dev_device_bus_device_release, + }, + }, + { + .name = "wb-indirect-dev", + .id = 4, + .dev = { + .platform_data = &indirect_dev_device_data3, + .release = indirect_dev_device_bus_device_release, + }, + }, +}; + +static int __init indirect_dev_device_bus_device_init(void) +{ + int i; + int ret = 0; + indirect_dev_device_t *indirect_dev_device_data; + + INDIRECT_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(indirect_dev_device); i++) { + indirect_dev_device_data = indirect_dev_device[i].dev.platform_data; + ret = platform_device_register(&indirect_dev_device[i]); + if (ret < 0) { + indirect_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-indirect-dev.%d register failed!\n", i + 1); + } else { + indirect_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit indirect_dev_device_bus_device_exit(void) +{ + int i; + indirect_dev_device_t *indirect_dev_device_data; + + INDIRECT_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(indirect_dev_device) - 1; i >= 0; i--) { + indirect_dev_device_data = indirect_dev_device[i].dev.platform_data; + if (indirect_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&indirect_dev_device[i]); + } + } +} + +module_init(indirect_dev_device_bus_device_init); +module_exit(indirect_dev_device_bus_device_exit); +MODULE_DESCRIPTION("INDIRECT DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_io_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_io_dev_device.c new file mode 100644 index 000000000000..91767b2fdff0 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_io_dev_device.c @@ -0,0 +1,123 @@ +/* + * An wb_io_dev_device driver for io device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_io_dev_device_debug = 0; +static int g_wb_io_dev_device_error = 0; + +module_param(g_wb_io_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_io_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_IO_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_io_dev_device_debug) { \ + printk(KERN_INFO "[WB_IO_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_IO_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_io_dev_device_error) { \ + printk(KERN_ERR "[WB_IO_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static io_dev_device_t io_dev_device_data0 = { + .io_dev_name = "cpld0", + .io_base = 0xa00, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static io_dev_device_t io_dev_device_data1 = { + .io_dev_name = "cpld1", + .io_base = 0x900, + .io_len = 0x100, + .indirect_addr = 0, +}; + +static void wb_io_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device io_dev_device[] = { + { + .name = "wb-io-dev", + .id = 1, + .dev = { + .platform_data = &io_dev_device_data0, + .release = wb_io_dev_device_release, + }, + }, + { + .name = "wb-io-dev", + .id = 2, + .dev = { + .platform_data = &io_dev_device_data1, + .release = wb_io_dev_device_release, + }, + }, +}; + +static int __init wb_io_dev_device_init(void) +{ + int i; + int ret = 0; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(io_dev_device); i++) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + ret = platform_device_register(&io_dev_device[i]); + if (ret < 0) { + io_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-io-dev.%d register failed!\n", i + 1); + } else { + io_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_io_dev_device_exit(void) +{ + int i; + io_dev_device_t *io_dev_device_data; + + WB_IO_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(io_dev_device) - 1; i >= 0; i--) { + io_dev_device_data = io_dev_device[i].dev.platform_data; + if (io_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&io_dev_device[i]); + } + } +} + +module_init(wb_io_dev_device_init); +module_exit(wb_io_dev_device_exit); +MODULE_DESCRIPTION("IO DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_pcie_dev_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_pcie_dev_device.c new file mode 100644 index 000000000000..c76daa348e0a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_pcie_dev_device.c @@ -0,0 +1,116 @@ +/* + * An wb_pcie_dev_device driver for pcie device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_pcie_dev_device_debug = 0; +static int g_wb_pcie_dev_device_error = 0; + +module_param(g_wb_pcie_dev_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_pcie_dev_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_pcie_dev_device_debug) { \ + printk(KERN_INFO "[WB_PCIE_DEV_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_PCIE_DEV_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_pcie_dev_device_error) { \ + printk(KERN_ERR "[WB_PCIE_DEV_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static pci_dev_device_t pcie_dev_device_data0 = { + .pci_dev_name = "fpga0", + .pci_domain = 0x0000, + .pci_slot = 0x00, + .pci_fn = 0, + .pci_bar = 0, + .bus_width = 4, + .search_mode = 1, + .bridge_bus = 0, + .bridge_slot = 0x12, + .bridge_fn = 0, + .upg_ctrl_base = 0xa00, + .upg_flash_base = 0x2f0000, +}; + +static void wb_pcie_dev_device_release(struct device *dev) +{ + return; +} + +static struct platform_device pcie_dev_device[] = { + { + .name = "wb-pci-dev", + .id = 1, + .dev = { + .platform_data = &pcie_dev_device_data0, + .release = wb_pcie_dev_device_release, + }, + }, +}; + +static int __init wb_pcie_dev_device_init(void) +{ + int i; + int ret = 0; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(pcie_dev_device); i++) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + ret = platform_device_register(&pcie_dev_device[i]); + if (ret < 0) { + pcie_dev_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "wb-pci-dev.%d register failed!\n", i + 1); + } else { + pcie_dev_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_pcie_dev_device_exit(void) +{ + int i; + pci_dev_device_t *pcie_dev_device_data; + + WB_PCIE_DEV_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(pcie_dev_device) - 1; i >= 0; i--) { + pcie_dev_device_data = pcie_dev_device[i].dev.platform_data; + if (pcie_dev_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&pcie_dev_device[i]); + } + } +} + +module_init(wb_pcie_dev_device_init); +module_exit(wb_pcie_dev_device_exit); +MODULE_DESCRIPTION("PCIE DEV Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_wdt_device.c b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_wdt_device.c new file mode 100644 index 000000000000..e40ed10639f9 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/modules/driver/wb_wdt_device.c @@ -0,0 +1,155 @@ +/* + * An wb_wdt_device driver for watchdog device function + * + * Copyright (C) 2024 Micas Networks Inc. + * + * 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 +#include +#include +#include +#include + +#include + +static int g_wb_wdt_device_debug = 0; +static int g_wb_wdt_device_error = 0; + +module_param(g_wb_wdt_device_debug, int, S_IRUGO | S_IWUSR); +module_param(g_wb_wdt_device_error, int, S_IRUGO | S_IWUSR); + +#define WB_WDT_DEVICE_DEBUG_VERBOSE(fmt, args...) do { \ + if (g_wb_wdt_device_debug) { \ + printk(KERN_INFO "[WB_WDT_DEVICE][VER][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +#define WB_WDT_DEVICE_DEBUG_ERROR(fmt, args...) do { \ + if (g_wb_wdt_device_error) { \ + printk(KERN_ERR "[WB_WDT_DEVICE][ERR][func:%s line:%d]\r\n"fmt, __func__, __LINE__, ## args); \ + } \ +} while (0) + +static wb_wdt_device_t wb_wdt_device_data_0 = { + .feed_wdt_type = 1, + .hw_margin = 408000, + .feed_time = 9000, + .config_dev_name = "/dev/cpld1", + .config_mode = 1, + .priv_func_mode = 3, + .enable_reg = 0xb0, + .enable_val = 0x1, + .disable_val = 0x0, + .enable_mask = 0x1, + .timeout_cfg_reg = 0xb1, + .timeleft_cfg_reg = 0xb2, + .hw_algo = "toggle", + .wdt_config_mode.gpio_wdt = { + .gpio = 346, + .flags = 1 + }, + .timer_accuracy = 1600, /* 1.6s */ + .sysfs_index = SYSFS_NO_CFG, +}; + +/* sys led */ +static wb_wdt_device_t wb_wdt_device_data_1 = { + .feed_wdt_type = 2, + .hw_margin = 180000, + .feed_time = 30000, + .config_dev_name = "/dev/cpld1", + .config_mode = 2, + .priv_func_mode = 3, + .enable_reg = 0xba, + .enable_val = 0x1, + .disable_val = 0x0, + .enable_mask = 0x1, + .timeout_cfg_reg = 0xbc, + .timeleft_cfg_reg = 0xbd, + .hw_algo = "toggle", + .wdt_config_mode.logic_wdt = { + .feed_dev_name = "/dev/cpld1", + .feed_reg = 0xbb, + .active_val = 0x01, + .logic_func_mode = 4, + }, + .timer_accuracy = 6000, /* 6s */ + .sysfs_index = SYSFS_NO_CFG, +}; + +static void wb_wdt_device_release(struct device *dev) +{ + return; +} + +static struct platform_device wb_wdt_device[] = { + { + .name = "wb_wdt", + .id = 0, + .dev = { + .platform_data = &wb_wdt_device_data_0, + .release = wb_wdt_device_release, + }, + }, + { + .name = "wb_wdt", + .id = 1, + .dev = { + .platform_data = &wb_wdt_device_data_1, + .release = wb_wdt_device_release, + }, + }, +}; + +static int __init wb_wdt_device_init(void) +{ + int i; + int ret = 0; + wb_wdt_device_t *wb_wdt_device_data; + + WB_WDT_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = 0; i < ARRAY_SIZE(wb_wdt_device); i++) { + wb_wdt_device_data = wb_wdt_device[i].dev.platform_data; + ret = platform_device_register(&wb_wdt_device[i]); + if (ret < 0) { + wb_wdt_device_data->device_flag = -1; /* device register failed, set flag -1 */ + printk(KERN_ERR "rg-wdt.%d register failed!\n", i + 1); + } else { + wb_wdt_device_data->device_flag = 0; /* device register suucess, set flag 0 */ + } + } + return 0; +} + +static void __exit wb_wdt_device_exit(void) +{ + int i; + wb_wdt_device_t *wb_wdt_device_data; + + WB_WDT_DEVICE_DEBUG_VERBOSE("enter!\n"); + for (i = ARRAY_SIZE(wb_wdt_device) - 1; i >= 0; i--) { + wb_wdt_device_data = wb_wdt_device[i].dev.platform_data; + if (wb_wdt_device_data->device_flag == 0) { /* device register success, need unregister */ + platform_device_unregister(&wb_wdt_device[i]); + } + } +} + +module_init(wb_wdt_device_init); +module_exit(wb_wdt_device_exit); +MODULE_DESCRIPTION("WB WDT Devices"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("support"); diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/CPLD.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/CPLD.cfg new file mode 100644 index 000000000000..f08fd5866a8a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/CPLD.cfg @@ -0,0 +1,321 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Set item: System E2 i2c bus address +# Description: Format other_i2c_dev.bus_[main_dev]_[minor_dev] other_i2c_dev.addr_[main_dev]_[minor_dev], +# .bus is configuration item corresponds to the bus number (/dev/i2c-bus) +# .addr is address of the device corresponding to the configuration item on the bus +# Note: main_dev look rg_main_dev_type_t definition, main board is 0, minor_dev is 0 +other_i2c_dev.bus_0_0=1 +other_i2c_dev.addr_0_0=0x56 + +# Configuration item: System E2 path +eeprom_path_0_0=/sys/bus/i2c/devices/1-0056/eeprom + +# Configuration item: System E2 size +eeprom_size_0_0=256 + +# Configuration item: watchdog number +# Description: Format watchdog_id_[index] +watchdog_id_0=0 + +# Configuration item: watchdog device name +# Description: Format watchdog_name_[index]_[type] +watchdog_name_0_0=identity +watchdog_name_0_1=state +watchdog_name_0_2=timeleft + +# Configuration item: i2c bus address of the cpld +# Description: Format cpld_i2c_dev.bus_[cpld_slot]_[cpld_id] cpld_i2c_dev.addr_[cpld_slot]_[cpld_id] +# All cpld numbers of each product are customized and do not have to be repeated. +# The numbers are reflected in the upper eight digits of the offset address of the cpld device +# cpld_slot: 1: cable card 1, 2: cable card 2, 3: cable card 3, 4: cable card 4,5: fan adapter board +# cpld_id: 0:CPLD_A 1:CPLD_B +# .bus is configuration item corresponds to the bus number(/dev/i2c-bus) +# .addr is address of the device corresponding to the configuration item on the bus +# Note: This field is optional. This field is not required for a cpld that does not have I2C access +cpld_i2c_dev.bus_0_2=98 +cpld_i2c_dev.addr_0_2=0x1d +cpld_i2c_dev.bus_0_3=99 +cpld_i2c_dev.addr_0_3=0x2d +cpld_i2c_dev.bus_0_4=100 +cpld_i2c_dev.addr_0_4=0x3d +cpld_i2c_dev.bus_0_5=5 +cpld_i2c_dev.addr_0_5=0x1a +cpld_i2c_dev.bus_0_6=50 +cpld_i2c_dev.addr_0_6=0x0d + +# Configuration item: cpld lpc address +# Description: Format cpld_lpc_addr_[cpld_slot]_[cpld_id] +# All cpld numbers of each product are customized and do not have to be repeated. +# The numbers are reflected in the upper eight digits of the offset address of the cpld device +# cpld_id: 0:X86_CPLD, 1:MAC_CPLDA, 2:MAC_CPLDB +# Note: This field is optional. This field is not required for CPLDS that are not accessed by LPCS +cpld_lpc_dev_0_0=0xa00 +cpld_lpc_dev_0_1=0x900 + +# Configuration item: Access mode of each cpld(LPC/I2C) +# Description: Format mode_cpld_[cpld_slot][cpld_slot]=lpc/i2c, cpld_id is cpld number,Start at 0 +# Note: This field is required +mode_cpld_0_0=lpc +mode_cpld_0_1=lpc +mode_cpld_0_2=i2c +mode_cpld_0_3=i2c +mode_cpld_0_4=i2c +mode_cpld_0_5=i2c +mode_cpld_0_6=i2c + +# Configuration item: the number of CPLD +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev: indicates that the mainboard is 0, the subPLD is 5, and the minor_dev: CPLD is 8 +dev_num_0_8=7 + +# Configuration item: Name of each cpld +# Description: Format cpld_name_[cpld_id] cpld_id is cpld number,start with 1 +# Note: This field is required +cpld_name_0_0=CPU_CPLD +cpld_name_0_1=BASE_CPLD +cpld_name_0_2=MAC_CPLDA +cpld_name_0_3=MAC_CPLDB +cpld_name_0_4=MAC_CPLDC +cpld_name_0_5=MGMT_CPLD +cpld_name_0_6=FAN_CPLD + + +# Configuration item: Model of each cpld +# Description: Format cpld_type_[cpld_id] cpld_idis cpld number,start with 1 +# Note: This field is required +cpld_type_0_0=LATTICE/LCMXO3LF-2100C-5BG256C +cpld_type_0_1=LATTICE/LCMXO3LF-4300C-6BG324I +cpld_type_0_2=LATTICE/LCMXO3LF-4300C-6BG256C +cpld_type_0_3=LATTICE/LCMXO3LF-4300C-6BG324I +cpld_type_0_4=LATTICE/LCMXO3LF-4300C-6BG324I +cpld_type_0_5=LATTICE/LCMXO3LF-4300C-6BG324I +cpld_type_0_6=LATTICE/LCMXO3LF-2100C-5BG256C + + +# Configuration item: Version register of each CPLD +# Description: Format cpld_version_[cpld_id] cpld_id is cpld number,start with 1 +# Note: This field is required +cpld_version.mode_0_0=config +cpld_version.int_cons_0_0= +cpld_version.src_0_0=cpld +cpld_version.frmt_0_0=num_bytes +cpld_version.pola_0_0= +cpld_version.fpath_0_0= +cpld_version.addr_0_0=0x00000000 +cpld_version.len_0_0=4 +cpld_version.bit_offset_0_0= + +cpld_version.mode_0_1=config +cpld_version.int_cons_0_1= +cpld_version.src_0_1=cpld +cpld_version.frmt_0_1=num_bytes +cpld_version.pola_0_1= +cpld_version.fpath_0_1= +cpld_version.addr_0_1=0x00010000 +cpld_version.len_0_1=4 +cpld_version.bit_offset_0_1= + +cpld_version.mode_0_2=config +cpld_version.int_cons_0_2= +cpld_version.src_0_2=cpld +cpld_version.frmt_0_2=num_bytes +cpld_version.pola_0_2= +cpld_version.fpath_0_2= +cpld_version.addr_0_2=0x00020000 +cpld_version.len_0_2=4 +cpld_version.bit_offset_0_2= + +cpld_version.mode_0_3=config +cpld_version.int_cons_0_3= +cpld_version.src_0_3=cpld +cpld_version.frmt_0_3=num_bytes +cpld_version.pola_0_3= +cpld_version.fpath_0_3= +cpld_version.addr_0_3=0x00030000 +cpld_version.len_0_3=4 +cpld_version.bit_offset_0_3= + +cpld_version.mode_0_4=config +cpld_version.int_cons_0_4= +cpld_version.src_0_4=cpld +cpld_version.frmt_0_4=num_bytes +cpld_version.pola_0_4= +cpld_version.fpath_0_4= +cpld_version.addr_0_4=0x00040000 +cpld_version.len_0_4=4 +cpld_version.bit_offset_0_4= + +cpld_version.mode_0_5=config +cpld_version.int_cons_0_5= +cpld_version.src_0_5=cpld +cpld_version.frmt_0_5=num_bytes +cpld_version.pola_0_5= +cpld_version.fpath_0_5= +cpld_version.addr_0_5=0x00050000 +cpld_version.len_0_5=4 +cpld_version.bit_offset_0_5= + +cpld_version.mode_0_6=config +cpld_version.int_cons_0_6= +cpld_version.src_0_6=cpld +cpld_version.frmt_0_6=num_bytes +cpld_version.pola_0_6= +cpld_version.fpath_0_6= +cpld_version.addr_0_6=0x00060000 +cpld_version.len_0_6=4 +cpld_version.bit_offset_0_6= + +# Configuration item: Test register for each CPLD +# Description: Format cpld_test_reg_[cpld_id] cpld_id is cpld number,start with 1 +# Note: This field is required +cpld_test_reg.mode_0_0=config +cpld_test_reg.int_cons_0_0= +cpld_test_reg.src_0_0=cpld +cpld_test_reg.frmt_0_0=byte +cpld_test_reg.pola_0_0= +cpld_test_reg.fpath_0_0= +cpld_test_reg.addr_0_0=0x00000005 +cpld_test_reg.len_0_0=1 +cpld_test_reg.bit_offset_0_0= + +cpld_test_reg.mode_0_1=config +cpld_test_reg.int_cons_0_1= +cpld_test_reg.src_0_1=cpld +cpld_test_reg.frmt_0_1=byte +cpld_test_reg.pola_0_1= +cpld_test_reg.fpath_0_1= +cpld_test_reg.addr_0_1=0x00010055 +cpld_test_reg.len_0_1=1 +cpld_test_reg.bit_offset_0_1= + +cpld_test_reg.mode_0_2=config +cpld_test_reg.int_cons_0_2= +cpld_test_reg.src_0_2=cpld +cpld_test_reg.frmt_0_2=byte +cpld_test_reg.pola_0_2= +cpld_test_reg.fpath_0_2= +cpld_test_reg.addr_0_2=0x00020055 +cpld_test_reg.len_0_2=1 +cpld_test_reg.bit_offset_0_2= + +cpld_test_reg.mode_0_3=config +cpld_test_reg.int_cons_0_3= +cpld_test_reg.src_0_3=cpld +cpld_test_reg.frmt_0_3=byte +cpld_test_reg.pola_0_3= +cpld_test_reg.fpath_0_3= +cpld_test_reg.addr_0_3=0x00030055 +cpld_test_reg.len_0_3=1 +cpld_test_reg.bit_offset_0_3= + +cpld_test_reg.mode_0_4=config +cpld_test_reg.int_cons_0_4= +cpld_test_reg.src_0_4=cpld +cpld_test_reg.frmt_0_4=byte +cpld_test_reg.pola_0_4= +cpld_test_reg.fpath_0_4= +cpld_test_reg.addr_0_4=0x00040055 +cpld_test_reg.len_0_4=1 +cpld_test_reg.bit_offset_0_4= + +cpld_test_reg.mode_0_5=config +cpld_test_reg.int_cons_0_5= +cpld_test_reg.src_0_5=cpld +cpld_test_reg.frmt_0_5=byte +cpld_test_reg.pola_0_5= +cpld_test_reg.fpath_0_5= +cpld_test_reg.addr_0_5=0x00050055 +cpld_test_reg.len_0_5=1 +cpld_test_reg.bit_offset_0_5= + +cpld_test_reg.mode_0_6=config +cpld_test_reg.int_cons_0_6= +cpld_test_reg.src_0_6=cpld +cpld_test_reg.frmt_0_6=byte +cpld_test_reg.pola_0_6= +cpld_test_reg.fpath_0_6= +cpld_test_reg.addr_0_6=0x00060055 +cpld_test_reg.len_0_6=1 +cpld_test_reg.bit_offset_0_6= + +# Configuration item: Hardware version register of each CPLD +# Description: Format cpld_hw_version_[cpld_id] cpld_id is cpld number,start with 1 +# Note: Optional +cpld_hw_version.mode_0_0=config +cpld_hw_version.int_cons_0_0= +cpld_hw_version.src_0_0=cpld +cpld_hw_version.frmt_0_0=byte +cpld_hw_version.pola_0_0= +cpld_hw_version.fpath_0_0= +cpld_hw_version.addr_0_0=0x00000009 +cpld_hw_version.len_0_0=1 +cpld_hw_version.bit_offset_0_0= + +cpld_hw_version.mode_0_1=config +cpld_hw_version.int_cons_0_1= +cpld_hw_version.src_0_1=cpld +cpld_hw_version.frmt_0_1=byte +cpld_hw_version.pola_0_1= +cpld_hw_version.fpath_0_1= +cpld_hw_version.addr_0_1=0x00010009 +cpld_hw_version.len_0_1=1 +cpld_hw_version.bit_offset_0_1= + +cpld_hw_version.mode_0_2=config +cpld_hw_version.int_cons_0_2= +cpld_hw_version.src_0_2=cpld +cpld_hw_version.frmt_0_2=byte +cpld_hw_version.pola_0_2= +cpld_hw_version.fpath_0_2= +cpld_hw_version.addr_0_2=0x00020009 +cpld_hw_version.len_0_2=1 +cpld_hw_version.bit_offset_0_2= + +cpld_hw_version.mode_0_3=config +cpld_hw_version.int_cons_0_3= +cpld_hw_version.src_0_3=cpld +cpld_hw_version.frmt_0_3=byte +cpld_hw_version.pola_0_3= +cpld_hw_version.fpath_0_3= +cpld_hw_version.addr_0_3=0x00030009 +cpld_hw_version.len_0_3=1 +cpld_hw_version.bit_offset_0_3= + +cpld_hw_version.mode_0_4=config +cpld_hw_version.int_cons_0_4= +cpld_hw_version.src_0_4=cpld +cpld_hw_version.frmt_0_4=byte +cpld_hw_version.pola_0_4= +cpld_hw_version.fpath_0_4= +cpld_hw_version.addr_0_4=0x00040009 +cpld_hw_version.len_0_4=1 +cpld_hw_version.bit_offset_0_4= + +cpld_hw_version.mode_0_5=config +cpld_hw_version.int_cons_0_5= +cpld_hw_version.src_0_5=cpld +cpld_hw_version.frmt_0_5=byte +cpld_hw_version.pola_0_5= +cpld_hw_version.fpath_0_5= +cpld_hw_version.addr_0_5=0x00050009 +cpld_hw_version.len_0_5=1 +cpld_hw_version.bit_offset_0_5= + +cpld_hw_version.mode_0_6=config +cpld_hw_version.int_cons_0_6= +cpld_hw_version.src_0_6=cpld +cpld_hw_version.frmt_0_6=byte +cpld_hw_version.pola_0_6= +cpld_hw_version.fpath_0_6= +cpld_hw_version.addr_0_6=0x00060009 +cpld_hw_version.len_0_6=1 +cpld_hw_version.bit_offset_0_6= + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FAN.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FAN.cfg new file mode 100644 index 000000000000..86fb3b13a106 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FAN.cfg @@ -0,0 +1,358 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Configuration items: E2 i2c bus address +# Description: Format other_i2c_dev.bus_[main_dev]_[minor_dev] other_i2c_dev.addr_[main_dev]_[minor_dev], +# .bus is configuration item corresponds to the bus number (/dev/i2c-bus) +# .addr is address of the device corresponding to the configuration item on the bus +# Note: main_dev is defined in rg_main_dev_type_t. mainboard is 0, fan is 1, dev_index is device index +other_i2c_dev.bus_1_1=52 +other_i2c_dev.addr_1_1=0x50 +other_i2c_dev.bus_1_2=53 +other_i2c_dev.addr_1_2=0x50 +other_i2c_dev.bus_1_3=54 +other_i2c_dev.addr_1_3=0x50 +other_i2c_dev.bus_1_4=55 +other_i2c_dev.addr_1_4=0x50 + +# Configuration items: Fan dependent constant +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,Fan is 1 minor_dev, 0: does not exist, 5: motor + +# Number of fans +dev_num_1_0=4 + +# Number of motors +dev_num_1_5=2 + +# Configuration items: Product fan E2 format +# Description: Format fan_e2_mode +# Note: required +fan_e2_mode=fru + +# Configuration items: Mode of reading fan E2 +# Description: Format fan_sysfs_name +# Note: If not configured, it is read by i2c, otherwise it is read by sysfs +fan_sysfs_name=eeprom + +# Configuration items: Fan air duct type +# Filling instructions: fan_direction_[direction]_[index] +# direction is air duct 0:F2B 1:B2F, indexstart with 1 +# Note: required +fan_direction_0_1=FAN80-02-F +# Configuration items: Fan status CPLD register address +# Description: Format dev_present_status_[main_dev_id][fan_index] fan_indexstart with 1 +# Note: fan main_dev_id is 1 +dev_present_status.mode_1_1=config +dev_present_status.src_1_1=cpld +dev_present_status.frmt_1_1=bit +dev_present_status.pola_1_1=negative +dev_present_status.addr_1_1=0x0006005b +dev_present_status.len_1_1=1 +dev_present_status.bit_offset_1_1=0 + +dev_present_status.mode_1_2=config +dev_present_status.src_1_2=cpld +dev_present_status.frmt_1_2=bit +dev_present_status.pola_1_2=negative +dev_present_status.addr_1_2=0x0006005b +dev_present_status.len_1_2=1 +dev_present_status.bit_offset_1_2=1 + +dev_present_status.mode_1_3=config +dev_present_status.src_1_3=cpld +dev_present_status.frmt_1_3=bit +dev_present_status.pola_1_3=negative +dev_present_status.addr_1_3=0x0006005b +dev_present_status.len_1_3=1 +dev_present_status.bit_offset_1_3=2 + +dev_present_status.mode_1_4=config +dev_present_status.src_1_4=cpld +dev_present_status.frmt_1_4=bit +dev_present_status.pola_1_4=negative +dev_present_status.addr_1_4=0x0006005b +dev_present_status.len_1_4=1 +dev_present_status.bit_offset_1_4=3 + +# Configuration items: Fan rotation status CPLD register address +# Description: Format fan_roll_status_[fan_id]_[motor_id] fan_idstart with 1, motor_idstart with 1 +# Note: required +fan_roll_status.mode_1_1=config +fan_roll_status.int_cons_1_1= +fan_roll_status.src_1_1=cpld +fan_roll_status.frmt_1_1=bit +fan_roll_status.pola_1_1=positive +fan_roll_status.fpath_1_1= +fan_roll_status.addr_1_1=0x0006005c +fan_roll_status.len_1_1=1 +fan_roll_status.bit_offset_1_1=0 + +fan_roll_status.mode_1_2=config +fan_roll_status.int_cons_1_2= +fan_roll_status.src_1_2=cpld +fan_roll_status.frmt_1_2=bit +fan_roll_status.pola_1_2=positive +fan_roll_status.fpath_1_2= +fan_roll_status.addr_1_2=0x0006005d +fan_roll_status.len_1_2=1 +fan_roll_status.bit_offset_1_2=0 + +fan_roll_status.mode_2_1=config +fan_roll_status.int_cons_2_1= +fan_roll_status.src_2_1=cpld +fan_roll_status.frmt_2_1=bit +fan_roll_status.pola_2_1=positive +fan_roll_status.fpath_2_1= +fan_roll_status.addr_2_1=0x0006005c +fan_roll_status.len_2_1=1 +fan_roll_status.bit_offset_2_1=1 + +fan_roll_status.mode_2_2=config +fan_roll_status.int_cons_2_2= +fan_roll_status.src_2_2=cpld +fan_roll_status.frmt_2_2=bit +fan_roll_status.pola_2_2=positive +fan_roll_status.fpath_2_2= +fan_roll_status.addr_2_2=0x0006005d +fan_roll_status.len_2_2=1 +fan_roll_status.bit_offset_2_2=1 + +fan_roll_status.mode_3_1=config +fan_roll_status.int_cons_3_1= +fan_roll_status.src_3_1=cpld +fan_roll_status.frmt_3_1=bit +fan_roll_status.pola_3_1=positive +fan_roll_status.fpath_3_1= +fan_roll_status.addr_3_1=0x0006005c +fan_roll_status.len_3_1=1 +fan_roll_status.bit_offset_3_1=2 + +fan_roll_status.mode_3_2=config +fan_roll_status.int_cons_3_2= +fan_roll_status.src_3_2=cpld +fan_roll_status.frmt_3_2=bit +fan_roll_status.pola_3_2=positive +fan_roll_status.fpath_3_2= +fan_roll_status.addr_3_2=0x0006005d +fan_roll_status.len_3_2=1 +fan_roll_status.bit_offset_3_2=2 + +fan_roll_status.mode_4_1=config +fan_roll_status.int_cons_4_1= +fan_roll_status.src_4_1=cpld +fan_roll_status.frmt_4_1=bit +fan_roll_status.pola_4_1=positive +fan_roll_status.fpath_4_1= +fan_roll_status.addr_4_1=0x0006005c +fan_roll_status.len_4_1=1 +fan_roll_status.bit_offset_4_1=3 + +fan_roll_status.mode_4_2=config +fan_roll_status.int_cons_4_2= +fan_roll_status.src_4_2=cpld +fan_roll_status.frmt_4_2=bit +fan_roll_status.pola_4_2=positive +fan_roll_status.fpath_4_2= +fan_roll_status.addr_4_2=0x0006005d +fan_roll_status.len_4_2=1 +fan_roll_status.bit_offset_4_2=3 + +# Configuration items: Fan speed CPLD register address +# Description: Format fan_speed_[fan_id]_[motor_id] fan_idstart with 1, motor_idstart with 1 +# Note: required +fan_speed.mode_1_1=config +fan_speed.int_cons_1_1= +fan_speed.src_1_1=cpld +fan_speed.frmt_1_1=num_bytes +fan_speed.pola_1_1=negative +fan_speed.fpath_1_1= +fan_speed.addr_1_1=0x00060094 +fan_speed.len_1_1=2 +fan_speed.bit_offset_1_1= + +fan_speed.mode_1_2=config +fan_speed.int_cons_1_2= +fan_speed.src_1_2=cpld +fan_speed.frmt_1_2=num_bytes +fan_speed.pola_1_2=negative +fan_speed.fpath_1_2= +fan_speed.addr_1_2=0x000600a0 +fan_speed.len_1_2=2 +fan_speed.bit_offset_1_2= + +fan_speed.mode_2_1=config +fan_speed.int_cons_2_1= +fan_speed.src_2_1=cpld +fan_speed.frmt_2_1=num_bytes +fan_speed.pola_2_1=negative +fan_speed.fpath_2_1= +fan_speed.addr_2_1=0x00060096 +fan_speed.len_2_1=2 +fan_speed.bit_offset_2_1= + +fan_speed.mode_2_2=config +fan_speed.int_cons_2_2= +fan_speed.src_2_2=cpld +fan_speed.frmt_2_2=num_bytes +fan_speed.pola_2_2=negative +fan_speed.fpath_2_2= +fan_speed.addr_2_2=0x000600a2 +fan_speed.len_2_2=2 +fan_speed.bit_offset_2_2= + +fan_speed.mode_3_1=config +fan_speed.int_cons_3_1= +fan_speed.src_3_1=cpld +fan_speed.frmt_3_1=num_bytes +fan_speed.pola_3_1=negative +fan_speed.fpath_3_1= +fan_speed.addr_3_1=0x00060098 +fan_speed.len_3_1=2 +fan_speed.bit_offset_3_1= + +fan_speed.mode_3_2=config +fan_speed.int_cons_3_2= +fan_speed.src_3_2=cpld +fan_speed.frmt_3_2=num_bytes +fan_speed.pola_3_2=negative +fan_speed.fpath_3_2= +fan_speed.addr_3_2=0x000600a4 +fan_speed.len_3_2=2 +fan_speed.bit_offset_3_2= + +fan_speed.mode_4_1=config +fan_speed.int_cons_4_1= +fan_speed.src_4_1=cpld +fan_speed.frmt_4_1=num_bytes +fan_speed.pola_4_1=negative +fan_speed.fpath_4_1= +fan_speed.addr_4_1=0x0006009a +fan_speed.len_4_1=2 +fan_speed.bit_offset_4_1= + +fan_speed.mode_4_2=config +fan_speed.int_cons_4_2= +fan_speed.src_4_2=cpld +fan_speed.frmt_4_2=num_bytes +fan_speed.pola_4_2=negative +fan_speed.fpath_4_2= +fan_speed.addr_4_2=0x000600a6 +fan_speed.len_4_2=2 +fan_speed.bit_offset_4_2= + +# Configuration items: Fan speed level CPLD register address +# Description: Format fan_ratio_[fan_id]_[motor_id] fan_idstart with 1, motor_idstart with 1 +# Note: required +fan_ratio.mode_1=config +fan_ratio.int_cons_1= +fan_ratio.src_1=cpld +fan_ratio.frmt_1=byte +fan_ratio.pola_1= +fan_ratio.fpath_1= +fan_ratio.addr_1=0x00060090 +fan_ratio.len_1=1 +fan_ratio.bit_offset_1= + +fan_ratio.mode_2=config +fan_ratio.int_cons_2= +fan_ratio.src_2=cpld +fan_ratio.frmt_2=byte +fan_ratio.pola_2= +fan_ratio.fpath_2= +fan_ratio.addr_2=0x00060091 +fan_ratio.len_2=1 +fan_ratio.bit_offset_2= + +fan_ratio.mode_3=config +fan_ratio.int_cons_3= +fan_ratio.src_3=cpld +fan_ratio.frmt_3=byte +fan_ratio.pola_3= +fan_ratio.fpath_3= +fan_ratio.addr_3=0x00060092 +fan_ratio.len_3=1 +fan_ratio.bit_offset_3= + +fan_ratio.mode_4=config +fan_ratio.int_cons_4= +fan_ratio.src_4=cpld +fan_ratio.frmt_4=byte +fan_ratio.pola_4= +fan_ratio.fpath_4= +fan_ratio.addr_4=0x00060093 +fan_ratio.len_4=1 +fan_ratio.bit_offset_4= + +# Fan speed tolerance +fan_threshold_0x0301_0x01=30 +fan_threshold_0x0301_0x02=30 + +# Maximum fan speed +fan_threshold_0x0201_0x01=18000 +fan_threshold_0x0201_0x02=16000 + +# Minimum fan speed +fan_threshold_0x0101_0x01=3600 +fan_threshold_0x0101_0x02=3200 + +# Rated fan speed +fan_threshold_0x1001_0x01=0 +fan_threshold_0x1001_0x02=0 + +fan_threshold_0x1101_0x01=0 +fan_threshold_0x1101_0x02=0 + +fan_threshold_0x1201_0x01=3600 +fan_threshold_0x1201_0x02=3200 + +fan_threshold_0x1301_0x01=5400 +fan_threshold_0x1301_0x02=4800 + +fan_threshold_0x1401_0x01=7200 +fan_threshold_0x1401_0x02=6400 + +fan_threshold_0x1501_0x01=9000 +fan_threshold_0x1501_0x02=8000 + +fan_threshold_0x1601_0x01=10800 +fan_threshold_0x1601_0x02=9600 + +fan_threshold_0x1701_0x01=12600 +fan_threshold_0x1701_0x02=11200 + +fan_threshold_0x1801_0x01=14400 +fan_threshold_0x1801_0x02=12800 + +fan_threshold_0x1901_0x01=16200 +fan_threshold_0x1901_0x02=14400 + +fan_threshold_0x1a01_0x01=18000 +fan_threshold_0x1a01_0x02=16000 + +# Configuration items: the number of fan names displayed in the product +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,FAN is 1, minor_dev, 7: The number of fan names displayed +dev_num_1_7=1 + +# Configuration items: number of fan types supported by each fan name +# Description: Format fan_type_num_[fan_id] +# Note: fan_id start with 1 +fan_type_num_1=1 + +# Configuration items: product Fan type Name +# Description: Format fan_name_[index1]_[index2] +# Note: index1 indicates the ID of the fan that is displayed, start with 1, +# index2 Indicates different fan names with the same ID, start with 1 +fan_name_0_1=FAN80-02-F + +# Configuration items: fan name is displayed +# Description: Format decode_fan_name_[index] +# Note: index indicates the ID of the fan that is displayed +decode_fan_name_1=FAN80-02-F diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FPGA.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FPGA.cfg new file mode 100644 index 000000000000..c5dff6c6d0cc --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/FPGA.cfg @@ -0,0 +1,64 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + + +# Configuration item: motherboard FPGA number +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev: motherboard is 0,daughter card is 5, minor_dev: FPGA is 8 +dev_num_0_9=1 + +# Configuration item: name of each fpga +# Description: Format fpga_name_[fpga_id] fpga_id is fpga number,Start at 0 +# Note: required +fpga_name_0_0=MAC_FPGA + +# Configuration item: Version register for each FPGA +# Description: Format fpga_version_[fpga_id] fpga_id is fpga number,Start at 0 +# Note: required +fpga_version.mode_0_0=config +fpga_version.int_cons_0_0= +fpga_version.src_0_0=file +fpga_version.frmt_0_0=num_bytes +fpga_version.pola_0_0=negative +fpga_version.fpath_0_0=/dev/fpga0 +fpga_version.addr_0_0=0x0 +fpga_version.len_0_0=4 +fpga_version.bit_offset_0_0= + +# Configuration item: Test registers for each FPGA +# Description: Format fpga_test_reg_[fpga_id] fpga_id is fpga number,Start at 0 +# Note: required +fpga_test_reg.mode_0_0=config +fpga_test_reg.int_cons_0_0= +fpga_test_reg.src_0_0=file +fpga_test_reg.frmt_0_0=num_bytes +fpga_test_reg.pola_0_0=negative +fpga_test_reg.fpath_0_0=/dev/fpga0 +fpga_test_reg.addr_0_0=0x08 +fpga_test_reg.len_0_0=4 +fpga_test_reg.bit_offset_0_0= + +# Configuration item: Device type register for each FPGA +# Description: Format fpga_model_reg_[main_dev]_[fpga_id] +# Note: main_dev: motherboard is 0, daughter card is 5, fpga_id is fpga number,Start at 0 +fpga_model_reg.mode_0_0=config +fpga_model_reg.int_cons_0_0= +fpga_model_reg.src_0_0=file +fpga_model_reg.frmt_0_0=num_bytes +fpga_model_reg.pola_0_0=negative +fpga_model_reg.fpath_0_0=/dev/fpga0 +fpga_model_reg.addr_0_0=0x98 +fpga_model_reg.len_0_0=4 +fpga_model_reg.bit_offset_0_0= + + +# Configuration item: Device conversion configuration for each FPGA +# Description: Format fpga_model_decode_[origin_value] +# Note: origin_value is the value read from the FPGA device model register cannot exceed 0xffff +fpga_model_decode_0x0=XC7A150T-2FGG484I \ No newline at end of file diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/LED.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/LED.cfg new file mode 100644 index 000000000000..049d2af1aaa2 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/LED.cfg @@ -0,0 +1,128 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Configuration item: LED CPLD register address +# Description: Formatled_status_[led_id]_[led_index] +# Note: led_id By definition wb_led_t +# led_index:If there is no index, fill in 0. If there is an index (such as a fan light), the number starts from 1 + +# Front panel SYS light +led_status.mode_0_0=config +led_status.src_0_0=cpld +led_status.frmt_0_0=bit +led_status.addr_0_0=0x000100d2 +led_status.len_0_0=3 + +# Configuration item: LED indicator CPLD register value converted to standard value +# Description: Format led_status_decode_[led_id]_[origin_value] origin_value:Original CPLD value +# led_id Same LED light type defined, 0- Front panel SYS light +led_status_decode_0_0=0 +led_status_decode_0_1=7 +led_status_decode_0_2=3 +led_status_decode_0_3=5 +led_status_decode_0_4=1 +led_status_decode_0_5=6 +led_status_decode_0_6=2 +led_status_decode_0_7=0 + +# Front panel BMC light +led_status.mode_2_0=config +led_status.src_2_0=cpld +led_status.frmt_2_0=bit +led_status.addr_2_0=0x000100d5 +led_status.len_2_0=3 + +led_status_decode_2_0=0 +led_status_decode_2_1=7 +led_status_decode_2_2=3 +led_status_decode_2_3=5 +led_status_decode_2_4=1 +led_status_decode_2_5=6 +led_status_decode_2_6=2 +led_status_decode_2_7=0 + +# Front panel FAN light +led_status.mode_4_0=config +led_status.src_4_0=cpld +led_status.frmt_4_0=bit +led_status.addr_4_0=0x000100d4 +led_status.len_4_0=3 + +# Configuration item: LED indicator CPLD register value converted to standard value +# Description: Format led_status_decode_[led_id]_[origin_value] origin_value:Original CPLD value +# led_id Same LED light type defined, 4-Front panel FAN light +led_status_decode_4_0=0 +led_status_decode_4_1=7 +led_status_decode_4_2=3 +led_status_decode_4_3=5 +led_status_decode_4_4=1 +led_status_decode_4_5=6 +led_status_decode_4_6=2 +led_status_decode_4_7=0 + +# Front panel PSU light +led_status.mode_6_0=config +led_status.src_6_0=cpld +led_status.frmt_6_0=bit +led_status.addr_6_0=0x000100d3 +led_status.len_6_0=3 + +# Configuration item: LED indicator CPLD register value converted to standard value +# Description: Format led_status_decode_[led_id]_[origin_value] origin_value:Original CPLD value +# led_id Same LED light type defined, 6-Front panel PSU light +led_status_decode_6_0=0 +led_status_decode_6_1=7 +led_status_decode_6_2=3 +led_status_decode_6_3=5 +led_status_decode_6_4=1 +led_status_decode_6_5=6 +led_status_decode_6_6=2 +led_status_decode_6_7=0 + +# Fan body lamp1 +led_status.mode_10_1=config +led_status.src_10_1=cpld +led_status.frmt_10_1=bit +led_status.addr_10_1=0x000600d0 +led_status.len_10_1=3 + +# Fan body lamp2 +led_status.mode_10_2=config +led_status.src_10_2=cpld +led_status.frmt_10_2=bit +led_status.addr_10_2=0x000600d1 +led_status.len_10_2=3 + +# Fan body lamp3 +led_status.mode_10_3=config +led_status.src_10_3=cpld +led_status.frmt_10_3=bit +led_status.addr_10_3=0x000600d2 +led_status.len_10_3=3 + +# Fan body lamp4 +led_status.mode_10_4=config +led_status.src_10_4=cpld +led_status.frmt_10_4=bit +led_status.addr_10_4=0x000600d3 +led_status.len_10_4=3 + + +# Configuration item: LED indicator CPLD register value converted to standard value +# Description: Format led_status_decode_[led_id]_[origin_value] origin_value:Original CPLD value +# led_id Same LED light type defined, 10-Fan body lamp +led_status_decode_10_0=0 +led_status_decode_10_1=7 +led_status_decode_10_2=3 +led_status_decode_10_3=5 +led_status_decode_10_4=1 +led_status_decode_10_5=6 +led_status_decode_10_6=2 +led_status_decode_10_7=0 + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/PSU.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/PSU.cfg new file mode 100644 index 000000000000..a344173b362e --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/PSU.cfg @@ -0,0 +1,657 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Configuration items: PSU number +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,PSU is 2, minor_dev,0 indicates the obtained number +dev_num_2_0=2 + +# Configuration items: PSU temperature sensors number +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,PSU is 2, minor_dev, 1:temperature +dev_num_2_1=3 + +# Configuration items: PSU E2 information +# Description: Format other_i2c_dev_[main_dev]_[psu_index] +# Note: main_dev,PSU is 2, psu_index:Power supply number, start with 1 +other_i2c_dev.bus_2_1=42 +other_i2c_dev.addr_2_1=0x50 +other_i2c_dev.bus_2_2=43 +other_i2c_dev.addr_2_2=0x50 + +# Configuration items: Mode of reading power supply E2 +# Description: Format psu_sysfs_name +# Note: If not configured, it is read by i2c, otherwise it is read by sysfs +psu_sysfs_name=eeprom + +other_i2c_dev.bus_2_5=42 +other_i2c_dev.addr_2_5=0x58 +other_i2c_dev.bus_2_6=43 +other_i2c_dev.addr_2_6=0x58 + +# Configuration items: PMBUS register address of the power supply +# Description: Format psu_status_[psu_index]_[reg_id] +# Note:psu_index:Power supply number,start with 1 reg_id, 9:Power Output Status (0x79) +psu_pmbus_reg.mode_1_9=config +psu_pmbus_reg.src_1_9=other_i2c +psu_pmbus_reg.frmt_1_9=byte +psu_pmbus_reg.pola_1_9=negative +psu_pmbus_reg.addr_1_9=0x02050079 +psu_pmbus_reg.len_1_9=2 +psu_pmbus_reg.bit_offset_1_9= + +psu_pmbus_reg.mode_2_9=config +psu_pmbus_reg.src_2_9=other_i2c +psu_pmbus_reg.frmt_2_9=byte +psu_pmbus_reg.pola_2_9=negative +psu_pmbus_reg.addr_2_9=0x02060079 +psu_pmbus_reg.len_2_9=2 +psu_pmbus_reg.bit_offset_2_9= + +# Configuration items:PMBUS register address of the power supply +# Description: Format psu_status_[psu_index]_[reg_id] +# Note:psu_index:Power supply number,start with 1 reg_id, 10:Power input Status (0x79) +psu_pmbus_reg.mode_1_10=config +psu_pmbus_reg.src_1_10=other_i2c +psu_pmbus_reg.frmt_1_10=byte +psu_pmbus_reg.pola_1_10=negative +psu_pmbus_reg.addr_1_10=0x02050079 +psu_pmbus_reg.len_1_10=2 +psu_pmbus_reg.bit_offset_1_10= + +psu_pmbus_reg.mode_2_10=config +psu_pmbus_reg.src_2_10=other_i2c +psu_pmbus_reg.frmt_2_10=byte +psu_pmbus_reg.pola_2_10=negative +psu_pmbus_reg.addr_2_10=0x02060079 +psu_pmbus_reg.len_2_10=2 +psu_pmbus_reg.bit_offset_2_10= + +# Configuration items:PMBUS register address of the power supply +# Description: Format psu_status_[psu_index]_[reg_id] +# Note:psu_index:Power supply number,,start with 1 reg_id 11:Power Input type (0x80) +psu_pmbus_reg.mode_1_11=config +psu_pmbus_reg.src_1_11=other_i2c +psu_pmbus_reg.frmt_1_11=byte +psu_pmbus_reg.pola_1_11=positive +psu_pmbus_reg.addr_1_11=0x02050080 +psu_pmbus_reg.len_1_11=1 +psu_pmbus_reg.bit_offset_1_11= + +psu_pmbus_reg.mode_2_11=config +psu_pmbus_reg.src_2_11=other_i2c +psu_pmbus_reg.frmt_2_11=byte +psu_pmbus_reg.pola_2_11=positive +psu_pmbus_reg.addr_2_11=0x02060080 +psu_pmbus_reg.len_2_11=1 +psu_pmbus_reg.bit_offset_2_11= + + +psu_pmbus_reg.mode_1_12=config +psu_pmbus_reg.src_1_12=other_i2c +psu_pmbus_reg.frmt_1_12=byte +psu_pmbus_reg.pola_1_12=positive +psu_pmbus_reg.addr_1_12=0x0205003b +psu_pmbus_reg.len_1_12=1 +psu_pmbus_reg.bit_offset_1_12= + +psu_pmbus_reg.mode_2_12=config +psu_pmbus_reg.src_2_12=other_i2c +psu_pmbus_reg.frmt_2_12=byte +psu_pmbus_reg.pola_2_12=positive +psu_pmbus_reg.addr_2_12=0x0206003b +psu_pmbus_reg.len_2_12=1 +psu_pmbus_reg.bit_offset_2_12= + +# Configuration items: Input status of the power module +# Description: Format psu_pmbus_id_[psu_index]_[psu_sensor_type]=value +# Note: psu_index is Power supply number,start with 1, psu_sensor_type is PMBUS type,Input stateis 10 +# value value:bus[8]_addr[16]_offset[8] +psu_pmbus_id_1_11=0x5F005880 +psu_pmbus_id_2_11=0x60005880 + + +# Configuration items: Address of the power status register +# Description: Format psu_status_[psu_index]_[status_id] +# Note: psu_index:Power supply number,start with 1 status_id 0:present 1:status 2:Alarm status +psu_status.mode_1_0=config +psu_status.src_1_0=cpld +psu_status.frmt_1_0=bit +psu_status.pola_1_0=negative +psu_status.addr_1_0=0x00010058 +psu_status.len_1_0=1 +psu_status.bit_offset_1_0=2 + +psu_status.mode_1_1=config +psu_status.src_1_1=cpld +psu_status.frmt_1_1=bit +psu_status.pola_1_1=positive +psu_status.addr_1_1=0x00010058 +psu_status.len_1_1=1 +psu_status.bit_offset_1_1=1 + +psu_status.mode_1_2=config +psu_status.src_1_2=cpld +psu_status.frmt_1_2=bit +psu_status.pola_1_2=positive +psu_status.addr_1_2=0x00010058 +psu_status.len_1_2=1 +psu_status.bit_offset_1_2=0 + +psu_status.mode_2_0=config +psu_status.src_2_0=cpld +psu_status.frmt_2_0=bit +psu_status.pola_2_0=negative +psu_status.addr_2_0=0x00010058 +psu_status.len_2_0=1 +psu_status.bit_offset_2_0=6 + +psu_status.mode_2_1=config +psu_status.src_2_1=cpld +psu_status.frmt_2_1=bit +psu_status.pola_2_1=positive +psu_status.addr_2_1=0x00010058 +psu_status.len_2_1=1 +psu_status.bit_offset_2_1=5 + +psu_status.mode_2_2=config +psu_status.src_2_2=cpld +psu_status.frmt_2_2=bit +psu_status.pola_2_2=positive +psu_status.addr_2_2=0x00010058 +psu_status.len_2_2=1 +psu_status.bit_offset_2_2=4 + +# Configuration items:PSU PMBUS information +# Description: Format hwmon_psu_[psu_index]_[sensor_type] +# Note: psu_index:Power supply number,start with 1 sensor_type definition is as follows: +# 0:None 1:in_vol 2:in_curr 3:in_power 4:out_vol 5:out_curr 6:out_power 7:fan +# psu1 in_vol +hwmon_psu.mode_1_1=config +hwmon_psu.int_cons_1_1=0 +hwmon_psu.src_1_1=file +hwmon_psu.frmt_1_1=buf +hwmon_psu.fpath_1_1=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_1=0 +hwmon_psu.len_1_1=8 +hwmon_psu.bit_offset_1_1= +hwmon_psu.str_cons_1_1=in1_input + +# psu1 in_curr +hwmon_psu.mode_1_2=config +hwmon_psu.int_cons_1_2=0 +hwmon_psu.src_1_2=file +hwmon_psu.frmt_1_2=buf +hwmon_psu.fpath_1_2=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_2=0 +hwmon_psu.len_1_2=8 +hwmon_psu.bit_offset_1_2= +hwmon_psu.str_cons_1_2=curr1_input + +# psu1 in_power +hwmon_psu.mode_1_3=config +hwmon_psu.int_cons_1_3=0 +hwmon_psu.src_1_3=file +hwmon_psu.frmt_1_3=buf +hwmon_psu.fpath_1_3=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_3=0 +hwmon_psu.len_1_3=16 +hwmon_psu.bit_offset_1_3=0 +hwmon_psu.str_cons_1_3=power1_input + +# psu1 out_vol +hwmon_psu.mode_1_4=config +hwmon_psu.int_cons_1_4=0 +hwmon_psu.src_1_4=file +hwmon_psu.frmt_1_4=buf +hwmon_psu.fpath_1_4=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_4=0 +hwmon_psu.len_1_4=8 +hwmon_psu.bit_offset_1_4= +hwmon_psu.str_cons_1_4=in2_input + +# psu1 out_curr +hwmon_psu.mode_1_5=config +hwmon_psu.int_cons_1_5=0 +hwmon_psu.src_1_5=file +hwmon_psu.frmt_1_5=buf +hwmon_psu.fpath_1_5=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_5=0 +hwmon_psu.len_1_5=8 +hwmon_psu.bit_offset_1_5= +hwmon_psu.str_cons_1_5=curr2_input + +# psu1 out_power +hwmon_psu.mode_1_6=config +hwmon_psu.int_cons_1_6=0 +hwmon_psu.src_1_6=file +hwmon_psu.frmt_1_6=buf +hwmon_psu.fpath_1_6=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_6=0 +hwmon_psu.len_1_6=16 +hwmon_psu.bit_offset_1_6=0 +hwmon_psu.str_cons_1_6=power2_input + +# psu1 fan +hwmon_psu.mode_1_7=config +hwmon_psu.int_cons_1_7= +hwmon_psu.src_1_7=file +hwmon_psu.frmt_1_7=buf +hwmon_psu.fpath_1_7=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_psu.addr_1_7=0 +hwmon_psu.len_1_7=8 +hwmon_psu.bit_offset_1_7= +hwmon_psu.str_cons_1_7=fan1_input + +# psu2 in_vol +hwmon_psu.mode_2_1=config +hwmon_psu.int_cons_2_1=0 +hwmon_psu.src_2_1=file +hwmon_psu.frmt_2_1=buf +hwmon_psu.fpath_2_1=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_1=0 +hwmon_psu.len_2_1=8 +hwmon_psu.bit_offset_2_1= +hwmon_psu.str_cons_2_1=in1_input + +# psu2 in_curr +hwmon_psu.mode_2_2=config +hwmon_psu.int_cons_2_2=0 +hwmon_psu.src_2_2=file +hwmon_psu.frmt_2_2=buf +hwmon_psu.fpath_2_2=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_2=0 +hwmon_psu.len_2_2=8 +hwmon_psu.bit_offset_2_2= +hwmon_psu.str_cons_2_2=curr1_input + +# psu2 in_power +hwmon_psu.mode_2_3=config +hwmon_psu.int_cons_2_3=0 +hwmon_psu.src_2_3=file +hwmon_psu.frmt_2_3=buf +hwmon_psu.fpath_2_3=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_3=0 +hwmon_psu.len_2_3=16 +hwmon_psu.bit_offset_2_3=0 +hwmon_psu.str_cons_2_3=power1_input + +# psu2 out_vol +hwmon_psu.mode_2_4=config +hwmon_psu.int_cons_2_4=0 +hwmon_psu.src_2_4=file +hwmon_psu.frmt_2_4=buf +hwmon_psu.fpath_2_4=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_4=0 +hwmon_psu.len_2_4=8 +hwmon_psu.bit_offset_2_4= +hwmon_psu.str_cons_2_4=in2_input + +# psu2 out_curr +hwmon_psu.mode_2_5=config +hwmon_psu.int_cons_2_5=0 +hwmon_psu.src_2_5=file +hwmon_psu.frmt_2_5=buf +hwmon_psu.fpath_2_5=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_5=0 +hwmon_psu.len_2_5=8 +hwmon_psu.bit_offset_2_5= +hwmon_psu.str_cons_2_5=curr2_input + +# psu2 out_power +hwmon_psu.mode_2_6=config +hwmon_psu.int_cons_2_6=0 +hwmon_psu.src_2_6=file +hwmon_psu.frmt_2_6=buf +hwmon_psu.fpath_2_6=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_6=0 +hwmon_psu.len_2_6=16 +hwmon_psu.bit_offset_2_6=0 +hwmon_psu.str_cons_2_6=power2_input + +# psu2 fan +hwmon_psu.mode_2_7=config +hwmon_psu.int_cons_2_7= +hwmon_psu.src_2_7=file +hwmon_psu.frmt_2_7=buf +hwmon_psu.fpath_2_7=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_psu.addr_2_7=0 +hwmon_psu.len_2_7=8 +hwmon_psu.bit_offset_2_7= +hwmon_psu.str_cons_2_7=fan1_input + + +# Configuration items: Temperature hwmon path +# Description: Format hwmon_temp[key1]_[key2] +# Note: key1: high 8bit indicates the index of the device (start with 1), and the low 8bit indicates the temperature index,start with 1 +# key2: high 4bit indicates the main device type, the power supply is 5, and the low 4bit indicates the temperature type +# 0:input 1:alias 2:type 3:max 4:max_hyst 5:min 6:crit +# mode: str_constant takes the value of str_cons directly, and config reads it in the way specified by src +# int_cons:N raw value/(10^N) +# fpath:hwmon first half of the path +# bit_offset: Number of decimal places, retain original precision if not configured +# str_cons:if mode is str_constant,the value is result of read,if read from file the value is read file name. + +# psu1 temp1 input +hwmon_temp.mode_0x0101_0x20=config +hwmon_temp.int_cons_0x0101_0x20=0 +hwmon_temp.src_0x0101_0x20=file +hwmon_temp.frmt_0x0101_0x20=buf +hwmon_temp.fpath_0x0101_0x20=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_temp.addr_0x0101_0x20=0 +hwmon_temp.len_0x0101_0x20=8 +hwmon_temp.bit_offset_0x0101_0x20= +hwmon_temp.str_cons_0x0101_0x20=temp1_input + +# psu1 temp1 alias +hwmon_temp.mode_0x0101_0x21=str_constant +hwmon_temp.str_cons_0x0101_0x21=temp1 +# psu1 temp1 max +hwmon_temp.mode_0x0101_0x23=str_constant +hwmon_temp.str_cons_0x0101_0x23=60000 +# psu1 temp1 min +hwmon_temp.mode_0x0101_0x25=str_constant +hwmon_temp.str_cons_0x0101_0x25=-10000 +# psu1 temp1 type +hwmon_temp.mode_0x0101_0x22=str_constant +hwmon_temp.str_cons_0x0101_0x22=psu_pmbus + +# psu1 temp2 input +hwmon_temp.mode_0x0102_0x20=config +hwmon_temp.int_cons_0x0102_0x20=0 +hwmon_temp.src_0x0102_0x20=file +hwmon_temp.frmt_0x0102_0x20=buf +hwmon_temp.fpath_0x0102_0x20=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_temp.addr_0x0102_0x20=0 +hwmon_temp.len_0x0102_0x20=8 +hwmon_temp.bit_offset_0x0102_0x20= +hwmon_temp.str_cons_0x0102_0x20=temp2_input + +# psu1 temp2 alias +hwmon_temp.mode_0x0102_0x21=str_constant +hwmon_temp.str_cons_0x0102_0x21=temp2 +# psu1 temp2 max +hwmon_temp.mode_0x0102_0x23=str_constant +hwmon_temp.str_cons_0x0102_0x23=60000 +# psu1 temp2 min +hwmon_temp.mode_0x0102_0x25=str_constant +hwmon_temp.str_cons_0x0102_0x25=-10000 +# psu1 temp2 type +hwmon_temp.mode_0x0102_0x22=str_constant +hwmon_temp.str_cons_0x0102_0x22=psu_pmbus + +# psu1 temp3 input +hwmon_temp.mode_0x0103_0x20=config +hwmon_temp.int_cons_0x0103_0x20=0 +hwmon_temp.src_0x0103_0x20=file +hwmon_temp.frmt_0x0103_0x20=buf +hwmon_temp.fpath_0x0103_0x20=/sys/bus/i2c/devices/42-0058/hwmon/ +hwmon_temp.addr_0x0103_0x20=0 +hwmon_temp.len_0x0103_0x20=8 +hwmon_temp.bit_offset_0x0103_0x20= +hwmon_temp.str_cons_0x0103_0x20=temp3_input + +# psu1 temp3 alias +hwmon_temp.mode_0x0103_0x21=str_constant +hwmon_temp.str_cons_0x0103_0x21=temp3 +# psu1 temp3 max +hwmon_temp.mode_0x0103_0x23=str_constant +hwmon_temp.str_cons_0x0103_0x23=60000 +# psu1 temp3 min +hwmon_temp.mode_0x0103_0x25=str_constant +hwmon_temp.str_cons_0x0103_0x25=-10000 +# psu1 temp1 type +hwmon_temp.mode_0x0103_0x22=str_constant +hwmon_temp.str_cons_0x0103_0x22=psu_pmbus + +# psu2 temp1 input +hwmon_temp.mode_0x0201_0x20=config +hwmon_temp.int_cons_0x0201_0x20=0 +hwmon_temp.src_0x0201_0x20=file +hwmon_temp.frmt_0x0201_0x20=buf +hwmon_temp.fpath_0x0201_0x20=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_temp.addr_0x0201_0x20=0 +hwmon_temp.len_0x0201_0x20=8 +hwmon_temp.bit_offset_0x0201_0x20= +hwmon_temp.str_cons_0x0201_0x20=temp1_input + +# psu2 temp1 alias +hwmon_temp.mode_0x0201_0x21=str_constant +hwmon_temp.str_cons_0x0201_0x21=temp1 +# psu2 temp1 max +hwmon_temp.mode_0x0201_0x23=str_constant +hwmon_temp.str_cons_0x0201_0x23=60000 +# psu2 temp1 min +hwmon_temp.mode_0x0201_0x25=str_constant +hwmon_temp.str_cons_0x0201_0x25=-10000 +# psu2 temp1 type +hwmon_temp.mode_0x0201_0x22=str_constant +hwmon_temp.str_cons_0x0201_0x22=psu_pmbus + +# psu2 temp2 input +hwmon_temp.mode_0x0202_0x20=config +hwmon_temp.int_cons_0x0202_0x20=0 +hwmon_temp.src_0x0202_0x20=file +hwmon_temp.frmt_0x0202_0x20=buf +hwmon_temp.fpath_0x0202_0x20=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_temp.addr_0x0202_0x20=0 +hwmon_temp.len_0x0202_0x20=8 +hwmon_temp.bit_offset_0x0202_0x20= +hwmon_temp.str_cons_0x0202_0x20=temp2_input + +# psu2 temp2 alias +hwmon_temp.mode_0x0202_0x21=str_constant +hwmon_temp.str_cons_0x0202_0x21=temp2 +# psu2 temp2 max +hwmon_temp.mode_0x0202_0x23=str_constant +hwmon_temp.str_cons_0x0202_0x23=60000 +# psu2 temp2 min +hwmon_temp.mode_0x0202_0x25=str_constant +hwmon_temp.str_cons_0x0202_0x25=-10000 +# psu2 temp2 type +hwmon_temp.mode_0x0202_0x22=str_constant +hwmon_temp.str_cons_0x0202_0x22=psu_pmbus + +# psu2 temp3 input +hwmon_temp.mode_0x0203_0x20=config +hwmon_temp.int_cons_0x0203_0x20=0 +hwmon_temp.src_0x0203_0x20=file +hwmon_temp.frmt_0x0203_0x20=buf +hwmon_temp.fpath_0x0203_0x20=/sys/bus/i2c/devices/43-0058/hwmon/ +hwmon_temp.addr_0x0203_0x20=0 +hwmon_temp.len_0x0203_0x20=8 +hwmon_temp.bit_offset_0x0203_0x20= +hwmon_temp.str_cons_0x0203_0x20=temp3_input + +# psu2 temp3 alias +hwmon_temp.mode_0x0203_0x21=str_constant +hwmon_temp.str_cons_0x0203_0x21=temp3 +# psu2 temp3 max +hwmon_temp.mode_0x0203_0x23=str_constant +hwmon_temp.str_cons_0x0203_0x23=60000 +# psu2 temp3 min +hwmon_temp.mode_0x0203_0x25=str_constant +hwmon_temp.str_cons_0x0203_0x25=-10000 +# psu2 temp3 type +hwmon_temp.mode_0x0203_0x22=str_constant +hwmon_temp.str_cons_0x0203_0x22=psu_pmbus + +# psu3 temp1 input +hwmon_temp.mode_0x0301_0x20=config +hwmon_temp.int_cons_0x0301_0x20=0 +hwmon_temp.src_0x0301_0x20=file +hwmon_temp.frmt_0x0301_0x20=buf +hwmon_temp.fpath_0x0301_0x20=/sys/bus/i2c/devices/97-0058/hwmon/ +hwmon_temp.addr_0x0301_0x20=0 +hwmon_temp.len_0x0301_0x20=8 +hwmon_temp.bit_offset_0x0301_0x20= +hwmon_temp.str_cons_0x0301_0x20=temp1_input + +# psu3 temp1 alias +hwmon_temp.mode_0x0301_0x21=str_constant +hwmon_temp.str_cons_0x0301_0x21=temp1 +# psu3 temp1 max +hwmon_temp.mode_0x0301_0x23=str_constant +hwmon_temp.str_cons_0x0301_0x23=60000 +# psu3 temp1 min +hwmon_temp.mode_0x0301_0x25=str_constant +hwmon_temp.str_cons_0x0301_0x25=-10000 +# psu3 temp1 type +hwmon_temp.mode_0x0301_0x22=str_constant +hwmon_temp.str_cons_0x0301_0x22=psu_pmbus + +# psu3 temp2 input +hwmon_temp.mode_0x0302_0x20=config +hwmon_temp.int_cons_0x0302_0x20=0 +hwmon_temp.src_0x0302_0x20=file +hwmon_temp.frmt_0x0302_0x20=buf +hwmon_temp.fpath_0x0302_0x20=/sys/bus/i2c/devices/97-0058/hwmon/ +hwmon_temp.addr_0x0302_0x20=0 +hwmon_temp.len_0x0302_0x20=8 +hwmon_temp.bit_offset_0x0302_0x20= +hwmon_temp.str_cons_0x0302_0x20=temp2_input + +# psu3 temp2 alias +hwmon_temp.mode_0x0302_0x21=str_constant +hwmon_temp.str_cons_0x0302_0x21=temp2 +# psu3 temp2 max +hwmon_temp.mode_0x0302_0x23=str_constant +hwmon_temp.str_cons_0x0302_0x23=60000 +# psu3 temp2 min +hwmon_temp.mode_0x0302_0x25=str_constant +hwmon_temp.str_cons_0x0302_0x25=-10000 +# psu3 temp2 type +hwmon_temp.mode_0x0302_0x22=str_constant +hwmon_temp.str_cons_0x0302_0x22=psu_pmbus + +# psu3 temp3 input +hwmon_temp.mode_0x0303_0x20=config +hwmon_temp.int_cons_0x0303_0x20=0 +hwmon_temp.src_0x0303_0x20=file +hwmon_temp.frmt_0x0303_0x20=buf +hwmon_temp.fpath_0x0303_0x20=/sys/bus/i2c/devices/97-0058/hwmon/ +hwmon_temp.addr_0x0303_0x20=0 +hwmon_temp.len_0x0303_0x20=8 +hwmon_temp.bit_offset_0x0303_0x20= +hwmon_temp.str_cons_0x0303_0x20=temp3_input + +# psu3 temp3 alias +hwmon_temp.mode_0x0303_0x21=str_constant +hwmon_temp.str_cons_0x0303_0x21=temp3 +# psu3 temp3 max +hwmon_temp.mode_0x0303_0x23=str_constant +hwmon_temp.str_cons_0x0303_0x23=60000 +# psu3 temp3 min +hwmon_temp.mode_0x0303_0x25=str_constant +hwmon_temp.str_cons_0x0303_0x25=-10000 +# psu3 temp3 type +hwmon_temp.mode_0x0303_0x22=str_constant +hwmon_temp.str_cons_0x0303_0x22=psu_pmbus + +# psu4 temp1 input +hwmon_temp.mode_0x0401_0x20=config +hwmon_temp.int_cons_0x0401_0x20=0 +hwmon_temp.src_0x0401_0x20=file +hwmon_temp.frmt_0x0401_0x20=buf +hwmon_temp.fpath_0x0401_0x20=/sys/bus/i2c/devices/98-0058/hwmon/ +hwmon_temp.addr_0x0401_0x20=0 +hwmon_temp.len_0x0401_0x20=8 +hwmon_temp.bit_offset_0x0401_0x20= +hwmon_temp.str_cons_0x0401_0x20=temp1_input + +# psu4 temp1 alias +hwmon_temp.mode_0x0401_0x21=str_constant +hwmon_temp.str_cons_0x0401_0x21=temp1 +# psu4 temp1 max +hwmon_temp.mode_0x0401_0x23=str_constant +hwmon_temp.str_cons_0x0401_0x23=60000 +# psu4 temp1 min +hwmon_temp.mode_0x0401_0x25=str_constant +hwmon_temp.str_cons_0x0401_0x25=-10000 +# psu4 temp1 type +hwmon_temp.mode_0x0401_0x22=str_constant +hwmon_temp.str_cons_0x0401_0x22=psu_pmbus + +# psu4 temp2 input +hwmon_temp.mode_0x0402_0x20=config +hwmon_temp.int_cons_0x0402_0x20=0 +hwmon_temp.src_0x0402_0x20=file +hwmon_temp.frmt_0x0402_0x20=buf +hwmon_temp.fpath_0x0402_0x20=/sys/bus/i2c/devices/98-0058/hwmon/ +hwmon_temp.addr_0x0402_0x20=0 +hwmon_temp.len_0x0402_0x20=8 +hwmon_temp.bit_offset_0x0402_0x20= +hwmon_temp.str_cons_0x0402_0x20=temp2_input + +# psu4 temp2 alias +hwmon_temp.mode_0x0402_0x21=str_constant +hwmon_temp.str_cons_0x0402_0x21=temp2 +# psu4 temp2 max +hwmon_temp.mode_0x0402_0x23=str_constant +hwmon_temp.str_cons_0x0402_0x23=60000 +# psu4 temp2 min +hwmon_temp.mode_0x0402_0x25=str_constant +hwmon_temp.str_cons_0x0402_0x25=-10000 +# psu4 temp2 type +hwmon_temp.mode_0x0402_0x22=str_constant +hwmon_temp.str_cons_0x0402_0x22=psu_pmbus + +# psu4 temp3 input +hwmon_temp.mode_0x0403_0x20=config +hwmon_temp.int_cons_0x0403_0x20=0 +hwmon_temp.src_0x0403_0x20=file +hwmon_temp.frmt_0x0403_0x20=buf +hwmon_temp.fpath_0x0403_0x20=/sys/bus/i2c/devices/98-0058/hwmon/ +hwmon_temp.addr_0x0403_0x20=0 +hwmon_temp.len_0x0403_0x20=8 +hwmon_temp.bit_offset_0x0403_0x20= +hwmon_temp.str_cons_0x0403_0x20=temp3_input + +# psu4 temp3 alias +hwmon_temp.mode_0x0403_0x21=str_constant +hwmon_temp.str_cons_0x0403_0x21=temp3 +# psu4 temp3 max +hwmon_temp.mode_0x0403_0x23=str_constant +hwmon_temp.str_cons_0x0403_0x23=60000 +# psu4 temp3 min +hwmon_temp.mode_0x0403_0x25=str_constant +hwmon_temp.str_cons_0x0403_0x25=-10000 +# psu4 temp3 type +hwmon_temp.mode_0x0403_0x22=str_constant +hwmon_temp.str_cons_0x0403_0x22=psu_pmbus + +# Configuration items: The number of power supply names displayed by the product +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,PSU is 2, minor_dev, 6:The number of power supply names displayed +dev_num_2_6=2 + +# Configuration items: Product power supply type name +# Description: Format power_name_[index1]_[index2] +# Note: index1 Indicates the power supply displayed ID, start with 1, +# index2 Indicates different power supplies with the same ID, start with 1 +power_name_1_1=ECDL3000123 +power_name_1_2=CRPS3000CL + +# Configuration items: The power supply name is displayed +# Description: Format decode_power_name_[index] +# Note: index Indicates the power supply displayed ID +decode_power_name_1=PA3000I-F + + +# Configuration items: Rated power of supply +# Description: Format power_rate_supply_[index] +# Note: index Indicates the power supply displayed ID +power_rate_supply_1=1300000000 + +# Configuration items: Displays the type of power duct +# Description: Format decode_power_fan_dir_[index] +# Note: index Indicates the power supply displayed ID,attr 0 indicates -F and 1 indicates -R +decode_power_fan_dir_1=0 +decode_power_fan_dir_2=1 + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SENSOR.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SENSOR.cfg new file mode 100644 index 000000000000..7bdfdcd9369c --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SENSOR.cfg @@ -0,0 +1,3463 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Configuration item: Temperature hwmon path +# Description: Format hwmon_temp[key1]_[key2] +# Note: key1: A high 8bit indicates the device index starting from 1. A low 8bit indicates the temperature index starting from 1 +# key2:The high 4bit indicates the main device type, the sub-card is 5, and the low 4bit indicates the temperature type 0:input 1:alias +# 2:type 3:max 4:max_hyst 5:min 6:crit +# mode: str_constant takes the value of str_cons directly, and config reads it in the way specified by src +# int_cons:N raw value/(10^N) +# fpath:hwmon first half of the path +# bit_offset: Number of decimal places, retain original precision if not configured +# str_cons:if mode is str_constant,the value is result of read,if read from file the value is read file name. + +# temperature sensor number +dev_num_0_1=20 + +# voltage sensors number +dev_num_0_2=112 + +# current sensors number +dev_num_0_3=7 + +# value : 0 +# alias : 1 +# type : 2 +# max : 3 +# hyst : 4 +# min : 5 +# crit : 6 +# range : 7 +# nominal_value : 8 +# high : 9 +# low : 10 + +# sensor temp1 input +hwmon_temp.mode_0x0001_0x00=config +hwmon_temp.int_cons_0x0001_0x00=0 +hwmon_temp.src_0x0001_0x00=file +hwmon_temp.frmt_0x0001_0x00=buf +hwmon_temp.fpath_0x0001_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0001_0x00=0 +hwmon_temp.len_0x0001_0x00=8 +hwmon_temp.bit_offset_0x0001_0x00= +hwmon_temp.str_cons_0x0001_0x00=temp1_input + +# sensor temp1 alias +hwmon_temp.mode_0x0001_0x01=config +hwmon_temp.int_cons_0x0001_0x01= +hwmon_temp.src_0x0001_0x01=file +hwmon_temp.frmt_0x0001_0x01=buf +hwmon_temp.fpath_0x0001_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0001_0x01=0 +hwmon_temp.len_0x0001_0x01=16 +hwmon_temp.bit_offset_0x0001_0x01= +hwmon_temp.str_cons_0x0001_0x01=temp1_label +# sensor temp1 type +hwmon_temp.mode_0x0001_0x02=str_constant +hwmon_temp.str_cons_0x0001_0x02=cpu + +# sensor temp1 max +hwmon_temp.mode_0x0001_0x03=config +hwmon_temp.int_cons_0x0001_0x03=0 +hwmon_temp.src_0x0001_0x03=file +hwmon_temp.frmt_0x0001_0x03=buf +hwmon_temp.fpath_0x0001_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0001_0x03=0 +hwmon_temp.len_0x0001_0x03=8 +hwmon_temp.bit_offset_0x0001_0x03= +hwmon_temp.str_cons_0x0001_0x03=temp1_max +# sensor temp1 min +hwmon_temp.mode_0x0001_0x05=str_constant +hwmon_temp.str_cons_0x0001_0x05=-30000 + +# sensor temp2 input +hwmon_temp.mode_0x0002_0x00=config +hwmon_temp.int_cons_0x0002_0x00=0 +hwmon_temp.src_0x0002_0x00=file +hwmon_temp.frmt_0x0002_0x00=buf +hwmon_temp.fpath_0x0002_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0002_0x00=0 +hwmon_temp.len_0x0002_0x00=8 +hwmon_temp.bit_offset_0x0002_0x00= +hwmon_temp.str_cons_0x0002_0x00=temp2_input + +# sensor temp2 alias +hwmon_temp.mode_0x0002_0x01=config +hwmon_temp.int_cons_0x0002_0x01= +hwmon_temp.src_0x0002_0x01=file +hwmon_temp.frmt_0x0002_0x01=buf +hwmon_temp.fpath_0x0002_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0002_0x01=0 +hwmon_temp.len_0x0002_0x01=16 +hwmon_temp.bit_offset_0x0002_0x01= +hwmon_temp.str_cons_0x0002_0x01=temp2_label + +hwmon_temp.mode_0x0002_0x02=str_constant +hwmon_temp.str_cons_0x0002_0x02=cpu + +# sensor temp2 max +hwmon_temp.mode_0x0002_0x03=config +hwmon_temp.int_cons_0x0002_0x03=0 +hwmon_temp.src_0x0002_0x03=file +hwmon_temp.frmt_0x0002_0x03=buf +hwmon_temp.fpath_0x0002_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0002_0x03=0 +hwmon_temp.len_0x0002_0x03=8 +hwmon_temp.bit_offset_0x0002_0x03= +hwmon_temp.str_cons_0x0002_0x03=temp2_max +# sensor temp2 min +hwmon_temp.mode_0x0002_0x05=str_constant +hwmon_temp.str_cons_0x0002_0x05=-30000 + +# sensor temp3 input +hwmon_temp.mode_0x0003_0x00=config +hwmon_temp.int_cons_0x0003_0x00=0 +hwmon_temp.src_0x0003_0x00=file +hwmon_temp.frmt_0x0003_0x00=buf +hwmon_temp.fpath_0x0003_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0003_0x00=0 +hwmon_temp.len_0x0003_0x00=8 +hwmon_temp.bit_offset_0x0003_0x00= +hwmon_temp.str_cons_0x0003_0x00=temp3_input + +# sensor temp3 alias +hwmon_temp.mode_0x0003_0x01=config +hwmon_temp.int_cons_0x0003_0x01= +hwmon_temp.src_0x0003_0x01=file +hwmon_temp.frmt_0x0003_0x01=buf +hwmon_temp.fpath_0x0003_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0003_0x01=0 +hwmon_temp.len_0x0003_0x01=16 +hwmon_temp.bit_offset_0x0003_0x01= +hwmon_temp.str_cons_0x0003_0x01=temp3_label + +hwmon_temp.mode_0x0003_0x02=str_constant +hwmon_temp.str_cons_0x0003_0x02=cpu + +# sensor temp3 max +hwmon_temp.mode_0x0003_0x03=config +hwmon_temp.int_cons_0x0003_0x03=0 +hwmon_temp.src_0x0003_0x03=file +hwmon_temp.frmt_0x0003_0x03=buf +hwmon_temp.fpath_0x0003_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0003_0x03=0 +hwmon_temp.len_0x0003_0x03=8 +hwmon_temp.bit_offset_0x0003_0x03= +hwmon_temp.str_cons_0x0003_0x03=temp3_max +# sensor temp3 min +hwmon_temp.mode_0x0003_0x05=str_constant +hwmon_temp.str_cons_0x0003_0x05=-30000 + +# sensor temp4 input +hwmon_temp.mode_0x0004_0x00=config +hwmon_temp.int_cons_0x0004_0x00=0 +hwmon_temp.src_0x0004_0x00=file +hwmon_temp.frmt_0x0004_0x00=buf +hwmon_temp.fpath_0x0004_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0004_0x00=0 +hwmon_temp.len_0x0004_0x00=8 +hwmon_temp.bit_offset_0x0004_0x00= +hwmon_temp.str_cons_0x0004_0x00=temp4_input + +# sensor temp4 alias +hwmon_temp.mode_0x0004_0x01=config +hwmon_temp.int_cons_0x0004_0x01= +hwmon_temp.src_0x0004_0x01=file +hwmon_temp.frmt_0x0004_0x01=buf +hwmon_temp.fpath_0x0004_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0004_0x01=0 +hwmon_temp.len_0x0004_0x01=16 +hwmon_temp.bit_offset_0x0004_0x01= +hwmon_temp.str_cons_0x0004_0x01=temp4_label + +hwmon_temp.mode_0x0004_0x02=str_constant +hwmon_temp.str_cons_0x0004_0x02=cpu + +# sensor temp4 max +hwmon_temp.mode_0x0004_0x03=config +hwmon_temp.int_cons_0x0004_0x03=0 +hwmon_temp.src_0x0004_0x03=file +hwmon_temp.frmt_0x0004_0x03=buf +hwmon_temp.fpath_0x0004_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0004_0x03=0 +hwmon_temp.len_0x0004_0x03=8 +hwmon_temp.bit_offset_0x0004_0x03= +hwmon_temp.str_cons_0x0004_0x03=temp4_max +# sensor temp4 min +hwmon_temp.mode_0x0004_0x05=str_constant +hwmon_temp.str_cons_0x0004_0x05=-30000 + +# sensor temp5 input +hwmon_temp.mode_0x0005_0x00=config +hwmon_temp.int_cons_0x0005_0x00=0 +hwmon_temp.src_0x0005_0x00=file +hwmon_temp.frmt_0x0005_0x00=buf +hwmon_temp.fpath_0x0005_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0005_0x00=0 +hwmon_temp.len_0x0005_0x00=8 +hwmon_temp.bit_offset_0x0005_0x00= +hwmon_temp.str_cons_0x0005_0x00=temp5_input + +# sensor temp5 alias +hwmon_temp.mode_0x0005_0x01=config +hwmon_temp.int_cons_0x0005_0x01= +hwmon_temp.src_0x0005_0x01=file +hwmon_temp.frmt_0x0005_0x01=buf +hwmon_temp.fpath_0x0005_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0005_0x01=0 +hwmon_temp.len_0x0005_0x01=16 +hwmon_temp.bit_offset_0x0005_0x01= +hwmon_temp.str_cons_0x0005_0x01=temp5_label + +hwmon_temp.mode_0x0005_0x02=str_constant +hwmon_temp.str_cons_0x0005_0x02=cpu + +# sensor temp5 max +hwmon_temp.mode_0x0005_0x03=config +hwmon_temp.int_cons_0x0005_0x03=0 +hwmon_temp.src_0x0005_0x03=file +hwmon_temp.frmt_0x0005_0x03=buf +hwmon_temp.fpath_0x0005_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0005_0x03=0 +hwmon_temp.len_0x0005_0x03=8 +hwmon_temp.bit_offset_0x0005_0x03= +hwmon_temp.str_cons_0x0005_0x03=temp5_max +# sensor temp5 min +hwmon_temp.mode_0x0005_0x05=str_constant +hwmon_temp.str_cons_0x0005_0x05=-30000 + +# sensor temp6 input +hwmon_temp.mode_0x0006_0x00=config +hwmon_temp.int_cons_0x0006_0x00=0 +hwmon_temp.src_0x0006_0x00=file +hwmon_temp.frmt_0x0006_0x00=buf +hwmon_temp.fpath_0x0006_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0006_0x00=0 +hwmon_temp.len_0x0006_0x00=8 +hwmon_temp.bit_offset_0x0006_0x00= +hwmon_temp.str_cons_0x0006_0x00=temp6_input + +# sensor temp6 alias +hwmon_temp.mode_0x0006_0x01=config +hwmon_temp.int_cons_0x0006_0x01= +hwmon_temp.src_0x0006_0x01=file +hwmon_temp.frmt_0x0006_0x01=buf +hwmon_temp.fpath_0x0006_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0006_0x01=0 +hwmon_temp.len_0x0006_0x01=16 +hwmon_temp.bit_offset_0x0006_0x01= +hwmon_temp.str_cons_0x0006_0x01=temp6_label + +hwmon_temp.mode_0x0006_0x02=str_constant +hwmon_temp.str_cons_0x0006_0x02=cpu + +# sensor temp6 max +hwmon_temp.mode_0x0006_0x03=config +hwmon_temp.int_cons_0x0006_0x03=0 +hwmon_temp.src_0x0006_0x03=file +hwmon_temp.frmt_0x0006_0x03=buf +hwmon_temp.fpath_0x0006_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0006_0x03=0 +hwmon_temp.len_0x0006_0x03=8 +hwmon_temp.bit_offset_0x0006_0x03= +hwmon_temp.str_cons_0x0006_0x03=temp6_max +# sensor temp6 min +hwmon_temp.mode_0x0006_0x05=str_constant +hwmon_temp.str_cons_0x0006_0x05=-30000 + +# sensor temp7 input +hwmon_temp.mode_0x0007_0x00=config +hwmon_temp.int_cons_0x0007_0x00=0 +hwmon_temp.src_0x0007_0x00=file +hwmon_temp.frmt_0x0007_0x00=buf +hwmon_temp.fpath_0x0007_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0007_0x00=0 +hwmon_temp.len_0x0007_0x00=8 +hwmon_temp.bit_offset_0x0007_0x00= +hwmon_temp.str_cons_0x0007_0x00=temp7_input + +# sensor temp7 alias +hwmon_temp.mode_0x0007_0x01=config +hwmon_temp.int_cons_0x0007_0x01= +hwmon_temp.src_0x0007_0x01=file +hwmon_temp.frmt_0x0007_0x01=buf +hwmon_temp.fpath_0x0007_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0007_0x01=0 +hwmon_temp.len_0x0007_0x01=16 +hwmon_temp.bit_offset_0x0007_0x01= +hwmon_temp.str_cons_0x0007_0x01=temp7_label + +hwmon_temp.mode_0x0007_0x02=str_constant +hwmon_temp.str_cons_0x0007_0x02=cpu + +# sensor temp7 max +hwmon_temp.mode_0x0007_0x03=config +hwmon_temp.int_cons_0x0007_0x03=0 +hwmon_temp.src_0x0007_0x03=file +hwmon_temp.frmt_0x0007_0x03=buf +hwmon_temp.fpath_0x0007_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0007_0x03=0 +hwmon_temp.len_0x0007_0x03=8 +hwmon_temp.bit_offset_0x0007_0x03= +hwmon_temp.str_cons_0x0007_0x03=temp7_max +# sensor temp7 min +hwmon_temp.mode_0x0007_0x05=str_constant +hwmon_temp.str_cons_0x0007_0x05=-30000 + +# sensor temp8 input +hwmon_temp.mode_0x0008_0x00=config +hwmon_temp.int_cons_0x0008_0x00=0 +hwmon_temp.src_0x0008_0x00=file +hwmon_temp.frmt_0x0008_0x00=buf +hwmon_temp.fpath_0x0008_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0008_0x00=0 +hwmon_temp.len_0x0008_0x00=8 +hwmon_temp.bit_offset_0x0008_0x00= +hwmon_temp.str_cons_0x0008_0x00=temp8_input + +# sensor temp8 alias +hwmon_temp.mode_0x0008_0x01=config +hwmon_temp.int_cons_0x0008_0x01= +hwmon_temp.src_0x0008_0x01=file +hwmon_temp.frmt_0x0008_0x01=buf +hwmon_temp.fpath_0x0008_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0008_0x01=0 +hwmon_temp.len_0x0008_0x01=16 +hwmon_temp.bit_offset_0x0008_0x01= +hwmon_temp.str_cons_0x0008_0x01=temp8_label + +hwmon_temp.mode_0x0008_0x02=str_constant +hwmon_temp.str_cons_0x0008_0x02=cpu + +# sensor temp8 max +hwmon_temp.mode_0x0008_0x03=config +hwmon_temp.int_cons_0x0008_0x03=0 +hwmon_temp.src_0x0008_0x03=file +hwmon_temp.frmt_0x0008_0x03=buf +hwmon_temp.fpath_0x0008_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0008_0x03=0 +hwmon_temp.len_0x0008_0x03=8 +hwmon_temp.bit_offset_0x0008_0x03= +hwmon_temp.str_cons_0x0008_0x03=temp8_max +# sensor temp8 min +hwmon_temp.mode_0x0008_0x05=str_constant +hwmon_temp.str_cons_0x0008_0x05=-30000 + +# sensor temp9 input +hwmon_temp.mode_0x0009_0x00=config +hwmon_temp.int_cons_0x0009_0x00=0 +hwmon_temp.src_0x0009_0x00=file +hwmon_temp.frmt_0x0009_0x00=buf +hwmon_temp.fpath_0x0009_0x00=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0009_0x00=0 +hwmon_temp.len_0x0009_0x00=8 +hwmon_temp.bit_offset_0x0009_0x00= +hwmon_temp.str_cons_0x0009_0x00=temp9_input + +# sensor temp9 alias +hwmon_temp.mode_0x0009_0x01=config +hwmon_temp.int_cons_0x0009_0x01= +hwmon_temp.src_0x0009_0x01=file +hwmon_temp.frmt_0x0009_0x01=buf +hwmon_temp.fpath_0x0009_0x01=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0009_0x01=0 +hwmon_temp.len_0x0009_0x01=16 +hwmon_temp.bit_offset_0x0009_0x01= +hwmon_temp.str_cons_0x0009_0x01=temp9_label + +hwmon_temp.mode_0x0009_0x02=str_constant +hwmon_temp.str_cons_0x0009_0x02=cpu + +# sensor temp9 max +hwmon_temp.mode_0x0009_0x03=config +hwmon_temp.int_cons_0x0009_0x03=0 +hwmon_temp.src_0x0009_0x03=file +hwmon_temp.frmt_0x0009_0x03=buf +hwmon_temp.fpath_0x0009_0x03=/sys/devices/platform/coretemp.0/hwmon/ +hwmon_temp.addr_0x0009_0x03=0 +hwmon_temp.len_0x0009_0x03=8 +hwmon_temp.bit_offset_0x0009_0x03= +hwmon_temp.str_cons_0x0009_0x03=temp9_max +# sensor temp9 min +hwmon_temp.mode_0x0009_0x05=str_constant +hwmon_temp.str_cons_0x0009_0x05=-30000 + +# sensor temp10 input +hwmon_temp.mode_0x000a_0x00=config +hwmon_temp.int_cons_0x000a_0x00=0 +hwmon_temp.src_0x000a_0x00=file +hwmon_temp.frmt_0x000a_0x00=buf +hwmon_temp.fpath_0x000a_0x00=/sys/bus/i2c/devices/58-004b/hwmon/ +hwmon_temp.addr_0x000a_0x00=0 +hwmon_temp.len_0x000a_0x00=8 +hwmon_temp.bit_offset_0x000a_0x00= +hwmon_temp.str_cons_0x000a_0x00=temp1_input + +hwmon_temp.mode_0x000a_0x01=str_constant +hwmon_temp.str_cons_0x000a_0x01=MGMT_INLET_TEMP_01 + +hwmon_temp.mode_0x000a_0x02=str_constant +hwmon_temp.str_cons_0x000a_0x02=lm75 + +# sensor temp10 max +hwmon_temp.mode_0x000a_0x03=config +hwmon_temp.int_cons_0x000a_0x03=0 +hwmon_temp.src_0x000a_0x03=file +hwmon_temp.frmt_0x000a_0x03=buf +hwmon_temp.fpath_0x000a_0x03=/sys/bus/i2c/devices/58-004b/hwmon/ +hwmon_temp.addr_0x000a_0x03=0 +hwmon_temp.len_0x000a_0x03=8 +hwmon_temp.bit_offset_0x000a_0x03= +hwmon_temp.str_cons_0x000a_0x03=temp1_max + +hwmon_temp.mode_0x000a_0x04=config +hwmon_temp.int_cons_0x000a_0x04=0 +hwmon_temp.src_0x000a_0x04=file +hwmon_temp.frmt_0x000a_0x04=buf +hwmon_temp.fpath_0x000a_0x04=/sys/bus/i2c/devices/58-004b/hwmon/ +hwmon_temp.addr_0x000a_0x04=0 +hwmon_temp.len_0x000a_0x04=8 +hwmon_temp.bit_offset_0x000a_0x04= +hwmon_temp.str_cons_0x000a_0x04=temp1_max_hyst +# sensor temp10 min +hwmon_temp.mode_0x000a_0x05=str_constant +hwmon_temp.str_cons_0x000a_0x05=-30000 + +hwmon_temp.mode_0x000b_0x00=config +hwmon_temp.int_cons_0x000b_0x00=0 +hwmon_temp.src_0x000b_0x00=file +hwmon_temp.frmt_0x000b_0x00=buf +hwmon_temp.fpath_0x000b_0x00=/sys/bus/i2c/devices/56-004e/hwmon/ +hwmon_temp.addr_0x000b_0x00=0 +hwmon_temp.len_0x000b_0x00=8 +hwmon_temp.bit_offset_0x000b_0x00= +hwmon_temp.str_cons_0x000b_0x00=temp1_input + +hwmon_temp.mode_0x000b_0x01=str_constant +hwmon_temp.str_cons_0x000b_0x01=FCB_TEMP_02 + +hwmon_temp.mode_0x000b_0x02=str_constant +hwmon_temp.str_cons_0x000b_0x02=lm75 + +hwmon_temp.mode_0x000b_0x03=config +hwmon_temp.int_cons_0x000b_0x03=0 +hwmon_temp.src_0x000b_0x03=file +hwmon_temp.frmt_0x000b_0x03=buf +hwmon_temp.fpath_0x000b_0x03=/sys/bus/i2c/devices/56-004e/hwmon/ +hwmon_temp.addr_0x000b_0x03=0 +hwmon_temp.len_0x000b_0x03=8 +hwmon_temp.bit_offset_0x000b_0x03= +hwmon_temp.str_cons_0x000b_0x03=temp1_max + +hwmon_temp.mode_0x000b_0x04=config +hwmon_temp.int_cons_0x000b_0x04=0 +hwmon_temp.src_0x000b_0x04=file +hwmon_temp.frmt_0x000b_0x04=buf +hwmon_temp.fpath_0x000b_0x04=/sys/bus/i2c/devices/56-004e/hwmon/ +hwmon_temp.addr_0x000b_0x04=0 +hwmon_temp.len_0x000b_0x04=8 +hwmon_temp.bit_offset_0x000b_0x04= +hwmon_temp.str_cons_0x000b_0x04=temp1_max_hyst +# sensor temp11 min +hwmon_temp.mode_0x000b_0x05=str_constant +hwmon_temp.str_cons_0x000b_0x05=-30000 + +hwmon_temp.mode_0x000c_0x00=config +hwmon_temp.int_cons_0x000c_0x00=0 +hwmon_temp.src_0x000c_0x00=file +hwmon_temp.frmt_0x000c_0x00=buf +hwmon_temp.fpath_0x000c_0x00=/sys/bus/i2c/devices/51-004b/hwmon/ +hwmon_temp.addr_0x000c_0x00=0 +hwmon_temp.len_0x000c_0x00=8 +hwmon_temp.bit_offset_0x000c_0x00= +hwmon_temp.str_cons_0x000c_0x00=temp1_input + +hwmon_temp.mode_0x000c_0x01=str_constant +hwmon_temp.str_cons_0x000c_0x01=FCB_TEMP_03 + +hwmon_temp.mode_0x000c_0x02=str_constant +hwmon_temp.str_cons_0x000c_0x02=lm75 + +hwmon_temp.mode_0x000c_0x03=config +hwmon_temp.int_cons_0x000c_0x03=0 +hwmon_temp.src_0x000c_0x03=file +hwmon_temp.frmt_0x000c_0x03=buf +hwmon_temp.fpath_0x000c_0x03=/sys/bus/i2c/devices/51-004b/hwmon/ +hwmon_temp.addr_0x000c_0x03=0 +hwmon_temp.len_0x000c_0x03=8 +hwmon_temp.bit_offset_0x000c_0x03= +hwmon_temp.str_cons_0x000c_0x03=temp1_max + +hwmon_temp.mode_0x000c_0x04=config +hwmon_temp.int_cons_0x000c_0x04=0 +hwmon_temp.src_0x000c_0x04=file +hwmon_temp.frmt_0x000c_0x04=buf +hwmon_temp.fpath_0x000c_0x04=/sys/bus/i2c/devices/51-004b/hwmon/ +hwmon_temp.addr_0x000c_0x04=0 +hwmon_temp.len_0x000c_0x04=8 +hwmon_temp.bit_offset_0x000c_0x04= +hwmon_temp.str_cons_0x000c_0x04=temp1_max_hyst +# sensor temp12 min +hwmon_temp.mode_0x000c_0x05=str_constant +hwmon_temp.str_cons_0x000c_0x05=-30000 + +#temp13 MAC_Tboard_TEMP_05 +hwmon_temp.mode_0x000d_0x00=config +hwmon_temp.int_cons_0x000d_0x00=0 +hwmon_temp.src_0x000d_0x00=file +hwmon_temp.frmt_0x000d_0x00=buf +hwmon_temp.fpath_0x000d_0x00=/sys/bus/i2c/devices/77-004c/hwmon/ +hwmon_temp.addr_0x000d_0x00=0 +hwmon_temp.len_0x000d_0x00=8 +hwmon_temp.bit_offset_0x000d_0x00= +hwmon_temp.str_cons_0x000d_0x00=temp1_input + +hwmon_temp.mode_0x000d_0x01=str_constant +hwmon_temp.str_cons_0x000d_0x01=MAC_Tboard_TEMP_05 + +hwmon_temp.mode_0x000d_0x02=str_constant +hwmon_temp.str_cons_0x000d_0x02=ct7318 + +# sensor temp13 min +hwmon_temp.mode_0x000d_0x05=str_constant +hwmon_temp.str_cons_0x000d_0x05=-30000 + +# sensor temp13 max +hwmon_temp.mode_0x000d_0x03=str_constant +hwmon_temp.str_cons_0x000d_0x03=105000 + +#temp14 MAC_Tboard_TEMP_06 +hwmon_temp.mode_0x000e_0x00=config +hwmon_temp.int_cons_0x000e_0x00=0 +hwmon_temp.src_0x000e_0x00=file +hwmon_temp.frmt_0x000e_0x00=buf +hwmon_temp.fpath_0x000e_0x00=/sys/bus/i2c/devices/78-004c/hwmon/ +hwmon_temp.addr_0x000e_0x00=0 +hwmon_temp.len_0x000e_0x00=8 +hwmon_temp.bit_offset_0x000e_0x00= +hwmon_temp.str_cons_0x000e_0x00=temp1_input + +hwmon_temp.mode_0x000e_0x01=str_constant +hwmon_temp.str_cons_0x000e_0x01=MAC_Tboard_TEMP_06 + +hwmon_temp.mode_0x000e_0x02=str_constant +hwmon_temp.str_cons_0x000e_0x02=ct7318 + +# sensor temp14 min +hwmon_temp.mode_0x000e_0x05=str_constant +hwmon_temp.str_cons_0x000e_0x05=-30000 + +# sensor temp14 ax +hwmon_temp.mode_0x000e_0x03=str_constant +hwmon_temp.str_cons_0x000e_0x03=105000 + +#temp15 MAC_Tboard_TEMP_07 +hwmon_temp.mode_0x000f_0x00=config +hwmon_temp.int_cons_0x000f_0x00=0 +hwmon_temp.src_0x000f_0x00=file +hwmon_temp.frmt_0x000f_0x00=buf +hwmon_temp.fpath_0x000f_0x00=/sys/bus/i2c/devices/76-004f/hwmon/ +hwmon_temp.addr_0x000f_0x00=0 +hwmon_temp.len_0x000f_0x00=8 +hwmon_temp.bit_offset_0x000f_0x00= +hwmon_temp.str_cons_0x000f_0x00=temp1_input + +hwmon_temp.mode_0x000f_0x01=str_constant +hwmon_temp.str_cons_0x000f_0x01=MAC_Tboard_TEMP_07 + +hwmon_temp.mode_0x000f_0x02=str_constant +hwmon_temp.str_cons_0x000f_0x02=lm75 + +hwmon_temp.mode_0x000f_0x03=config +hwmon_temp.int_cons_0x000f_0x03=0 +hwmon_temp.src_0x000f_0x03=file +hwmon_temp.frmt_0x000f_0x03=buf +hwmon_temp.fpath_0x000f_0x03=/sys/bus/i2c/devices/76-004f/hwmon/ +hwmon_temp.addr_0x000f_0x03=0 +hwmon_temp.len_0x000f_0x03=8 +hwmon_temp.bit_offset_0x000f_0x03= +hwmon_temp.str_cons_0x000f_0x03=temp1_max + +hwmon_temp.mode_0x000f_0x04=config +hwmon_temp.int_cons_0x000f_0x04=0 +hwmon_temp.src_0x000f_0x04=file +hwmon_temp.frmt_0x000f_0x04=buf +hwmon_temp.fpath_0x000f_0x04=/sys/bus/i2c/devices/76-004f/hwmon/ +hwmon_temp.addr_0x000f_0x04=0 +hwmon_temp.len_0x000f_0x04=8 +hwmon_temp.bit_offset_0x000f_0x04= +hwmon_temp.str_cons_0x000f_0x04=temp1_max_hyst +# sensor temp15 min +hwmon_temp.mode_0x000f_0x05=str_constant +hwmon_temp.str_cons_0x000f_0x05=-30000 + +# temp16 mac_temp_min +hwmon_temp.mode_0x0010_0x00=config +hwmon_temp.src_0x0010_0x00=cpld +hwmon_temp.addr_0x0010_0x00=0x00020080 +hwmon_temp.frmt_0x0010_0x00=num_bytes +hwmon_temp.len_0x00010_0x00=2 +hwmon_temp.pola_0x0010_0x00=positive +hwmon_temp.str_cons_0x0010_0x00=temp0_input +hwmon_temp.int_extra1_0x0010_0x00=4 + +hwmon_temp.mode_0x0010_0x01=str_constant +hwmon_temp.str_cons_0x0010_0x01=MAC_TEMP_MIN + +hwmon_temp.mode_0x0010_0x02=str_constant +hwmon_temp.str_cons_0x0010_0x02=CPLD + +hwmon_temp.mode_0x0010_0x03=constant +hwmon_temp.int_cons_0x0010_0x03=105000 + +hwmon_temp.mode_0x0010_0x05=constant +hwmon_temp.int_cons_0x0010_0x05=-30000 + +#temp17 mac_temp_max +hwmon_temp.mode_0x0011_0x00=config +hwmon_temp.src_0x0011_0x00=cpld +hwmon_temp.addr_0x0011_0x00=0x00020082 +hwmon_temp.frmt_0x0011_0x00=num_bytes +hwmon_temp.len_0x0011_0x00=2 +hwmon_temp.pola_0x0011_0x00=positive +hwmon_temp.str_cons_0x0011_0x00=temp1_input +hwmon_temp.int_extra1_0x0011_0x00=4 + +hwmon_temp.mode_0x0011_0x01=str_constant +hwmon_temp.str_cons_0x0011_0x01=MAC_TEMP_MAX + +hwmon_temp.mode_0x0011_0x02=str_constant +hwmon_temp.str_cons_0x0011_0x02=CPLD + +hwmon_temp.mode_0x0011_0x03=constant +hwmon_temp.int_cons_0x0011_0x03=105000 + +hwmon_temp.mode_0x0011_0x05=constant +hwmon_temp.int_cons_0x0011_0x05=-30000 + +#temp18 TMOS_CORE_TEMP_01 +hwmon_temp.mode_0x0012_0x00=config +hwmon_temp.int_cons_0x0012_0x00=0 +hwmon_temp.src_0x0012_0x00=file +hwmon_temp.frmt_0x0012_0x00=buf +hwmon_temp.fpath_0x0012_0x00=/sys/bus/i2c/devices/84-0040/hwmon/ +hwmon_temp.addr_0x0012_0x00=0 +hwmon_temp.len_0x0012_0x00=8 +hwmon_temp.bit_offset_0x0012_0x00= +hwmon_temp.str_cons_0x0012_0x00=temp1_input + +hwmon_temp.mode_0x0012_0x01=str_constant +hwmon_temp.str_cons_0x0012_0x01=TMOS_CORE_TEMP_01 + +hwmon_temp.mode_0x0012_0x02=str_constant +hwmon_temp.str_cons_0x0012_0x02=xdpe132g5c + +hwmon_temp.mode_0x0012_0x03=str_constant +hwmon_temp.str_cons_0x0012_0x03=125000 + +# sensor temp18 min +hwmon_temp.mode_0x0012_0x05=str_constant +hwmon_temp.str_cons_0x0012_0x05=-30000 + +#temp19 TMOS_ANALOG0_TEMP +hwmon_temp.mode_0x0013_0x00=config +hwmon_temp.int_cons_0x0013_0x00=0 +hwmon_temp.src_0x0013_0x00=file +hwmon_temp.frmt_0x0013_0x00=buf +hwmon_temp.fpath_0x0013_0x00=/sys/bus/i2c/devices/85-004d/hwmon/ +hwmon_temp.addr_0x0013_0x00=0 +hwmon_temp.len_0x0013_0x00=8 +hwmon_temp.bit_offset_0x0013_0x00= +hwmon_temp.str_cons_0x0013_0x00=temp1_input + +hwmon_temp.mode_0x0013_0x01=str_constant +hwmon_temp.str_cons_0x0013_0x01=TMOS_ANALOG0_TEMP + +hwmon_temp.mode_0x0013_0x02=str_constant +hwmon_temp.str_cons_0x0013_0x02=xdpe132g5c + +hwmon_temp.mode_0x0013_0x03=str_constant +hwmon_temp.str_cons_0x0013_0x03=125000 + +# sensor temp19 min +hwmon_temp.mode_0x0013_0x05=str_constant +hwmon_temp.str_cons_0x0013_0x05=-30000 + +#temp20 TMOS_ANALOG1_TEMP +hwmon_temp.mode_0x0014_0x00=config +hwmon_temp.int_cons_0x0014_0x00=0 +hwmon_temp.src_0x0014_0x00=file +hwmon_temp.frmt_0x0014_0x00=buf +hwmon_temp.fpath_0x0014_0x00=/sys/bus/i2c/devices/86-004d/hwmon/ +hwmon_temp.addr_0x0014_0x00=0 +hwmon_temp.len_0x0014_0x00=8 +hwmon_temp.bit_offset_0x0014_0x00= +hwmon_temp.str_cons_0x0014_0x00=temp1_input + +hwmon_temp.mode_0x0014_0x01=str_constant +hwmon_temp.str_cons_0x0014_0x01=TMOS_ANALOG1_TEMP + +hwmon_temp.mode_0x0014_0x02=str_constant +hwmon_temp.str_cons_0x0014_0x02=xdpe132g5c + +hwmon_temp.mode_0x0014_0x03=str_constant +hwmon_temp.str_cons_0x0014_0x03=125000 + +# sensor temp20 min +hwmon_temp.mode_0x0014_0x05=str_constant +hwmon_temp.str_cons_0x0014_0x05=-30000 + +# sensor vol +# value : 0 +# alias : 1 +# type : 2 +# max : 3 +# hyst : 4 +# min : 5 +# crit : 6 +# range : 7 +# nominal_value : 8 +# high : 9 +# low : 10 + +# vol1 +hwmon_in.mode_0x0001_0x00=config +hwmon_in.int_cons_0x0001_0x00=0 +hwmon_in.src_0x0001_0x00=file +hwmon_in.frmt_0x0001_0x00=buf +hwmon_in.fpath_0x0001_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0001_0x00=0 +hwmon_in.len_0x0001_0x00=8 +hwmon_in.bit_offset_0x0001_0x00= +hwmon_in.str_cons_0x0001_0x00=in1_input +hwmon_in.mode_0x0001_0x01=str_constant +hwmon_in.str_cons_0x0001_0x01=VDD12V_BASE +hwmon_in.mode_0x0001_0x02=str_constant +hwmon_in.str_cons_0x0001_0x02=ucd90160 +hwmon_in.mode_0x0001_0x03=constant +hwmon_in.int_cons_0x0001_0x03=13200 +hwmon_in.mode_0x0001_0x05=constant +hwmon_in.int_cons_0x0001_0x05=10800 +hwmon_in.mode_0x0001_0x08=constant +hwmon_in.int_cons_0x0001_0x08=12000 +hwmon_in.mode_0x0001_0x07=constant +hwmon_in.int_cons_0x0001_0x07=60 + +# vol2 +hwmon_in.mode_0x0002_0x00=config +hwmon_in.int_cons_0x0002_0x00=0 +hwmon_in.src_0x0002_0x00=file +hwmon_in.frmt_0x0002_0x00=buf +hwmon_in.fpath_0x0002_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0002_0x00=0 +hwmon_in.len_0x0002_0x00=8 +hwmon_in.bit_offset_0x0002_0x00= +hwmon_in.str_cons_0x0002_0x00=in2_input +hwmon_in.mode_0x0002_0x01=str_constant +hwmon_in.str_cons_0x0002_0x01=VDD3.3_STBY +hwmon_in.mode_0x0002_0x02=str_constant +hwmon_in.str_cons_0x0002_0x02=ucd90160 +hwmon_in.mode_0x0002_0x03=constant +hwmon_in.int_cons_0x0002_0x03=3630 +hwmon_in.mode_0x0002_0x05=constant +hwmon_in.int_cons_0x0002_0x05=2970 +hwmon_in.mode_0x0002_0x08=constant +hwmon_in.int_cons_0x0002_0x08=3300 +hwmon_in.mode_0x0002_0x07=constant +hwmon_in.int_cons_0x0002_0x07=16 + +# vol3 +hwmon_in.mode_0x0003_0x00=config +hwmon_in.int_cons_0x0003_0x00=0 +hwmon_in.src_0x0003_0x00=file +hwmon_in.frmt_0x0003_0x00=buf +hwmon_in.fpath_0x0003_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0003_0x00=0 +hwmon_in.len_0x0003_0x00=8 +hwmon_in.bit_offset_0x0003_0x00= +hwmon_in.str_cons_0x0003_0x00=in3_input +hwmon_in.mode_0x0003_0x01=str_constant +hwmon_in.str_cons_0x0003_0x01=VDD5V_USB +hwmon_in.mode_0x0003_0x02=str_constant +hwmon_in.str_cons_0x0003_0x02=ucd90160 +hwmon_in.mode_0x0003_0x03=constant +hwmon_in.int_cons_0x0003_0x03=5500 +hwmon_in.mode_0x0003_0x05=constant +hwmon_in.int_cons_0x0003_0x05=4500 +hwmon_in.mode_0x0003_0x08=constant +hwmon_in.int_cons_0x0003_0x08=5000 +hwmon_in.mode_0x0003_0x07=constant +hwmon_in.int_cons_0x0003_0x07=25 + +# vol4 +hwmon_in.mode_0x0004_0x00=config +hwmon_in.int_cons_0x0004_0x00=0 +hwmon_in.src_0x0004_0x00=file +hwmon_in.frmt_0x0004_0x00=buf +hwmon_in.fpath_0x0004_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0004_0x00=0 +hwmon_in.len_0x0004_0x00=8 +hwmon_in.bit_offset_0x0004_0x00= +hwmon_in.str_cons_0x0004_0x00=in4_input +hwmon_in.mode_0x0004_0x01=str_constant +hwmon_in.str_cons_0x0004_0x01=PHY_VDD1V0 +hwmon_in.mode_0x0004_0x02=str_constant +hwmon_in.str_cons_0x0004_0x02=ucd90160 +hwmon_in.mode_0x0004_0x03=constant +hwmon_in.int_cons_0x0004_0x03=1100 +hwmon_in.mode_0x0004_0x05=constant +hwmon_in.int_cons_0x0004_0x05=900 +hwmon_in.mode_0x0004_0x08=constant +hwmon_in.int_cons_0x0004_0x08=1000 +hwmon_in.mode_0x0004_0x07=constant +hwmon_in.int_cons_0x0004_0x07=5 + +# vol5 +hwmon_in.mode_0x0005_0x00=config +hwmon_in.int_cons_0x0005_0x00=0 +hwmon_in.src_0x0005_0x00=file +hwmon_in.frmt_0x0005_0x00=buf +hwmon_in.fpath_0x0005_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0005_0x00=0 +hwmon_in.len_0x0005_0x00=8 +hwmon_in.bit_offset_0x0005_0x00= +hwmon_in.str_cons_0x0005_0x00=in5_input +hwmon_in.mode_0x0005_0x01=str_constant +hwmon_in.str_cons_0x0005_0x01=VDD3.3V_BASE +hwmon_in.mode_0x0005_0x02=str_constant +hwmon_in.str_cons_0x0005_0x02=ucd90160 +hwmon_in.mode_0x0005_0x03=constant +hwmon_in.int_cons_0x0005_0x03=3630 +hwmon_in.mode_0x0005_0x05=constant +hwmon_in.int_cons_0x0005_0x05=2970 +hwmon_in.mode_0x0005_0x08=constant +hwmon_in.int_cons_0x0005_0x08=3300 +hwmon_in.mode_0x0005_0x07=constant +hwmon_in.int_cons_0x0005_0x07=16 + +# vol6 +hwmon_in.mode_0x0006_0x00=config +hwmon_in.int_cons_0x0006_0x00=0 +hwmon_in.src_0x0006_0x00=file +hwmon_in.frmt_0x0006_0x00=buf +hwmon_in.fpath_0x0006_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0006_0x00=0 +hwmon_in.len_0x0006_0x00=8 +hwmon_in.bit_offset_0x0006_0x00= +hwmon_in.str_cons_0x0006_0x00=in6_input +hwmon_in.mode_0x0006_0x01=str_constant +hwmon_in.str_cons_0x0006_0x01=VDD3.3_CLK_BASE +hwmon_in.mode_0x0006_0x02=str_constant +hwmon_in.str_cons_0x0006_0x02=ucd90160 +hwmon_in.mode_0x0006_0x03=constant +hwmon_in.int_cons_0x0006_0x03=3630 +hwmon_in.mode_0x0006_0x05=constant +hwmon_in.int_cons_0x0006_0x05=2970 +hwmon_in.mode_0x0006_0x08=constant +hwmon_in.int_cons_0x0006_0x08=3300 +hwmon_in.mode_0x0006_0x07=constant +hwmon_in.int_cons_0x0006_0x07=16 + +# vol7 +hwmon_in.mode_0x0007_0x00=config +hwmon_in.int_cons_0x0007_0x00=0 +hwmon_in.src_0x0007_0x00=file +hwmon_in.frmt_0x0007_0x00=buf +hwmon_in.fpath_0x0007_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0007_0x00=0 +hwmon_in.len_0x0007_0x00=8 +hwmon_in.bit_offset_0x0007_0x00= +hwmon_in.str_cons_0x0007_0x00=in7_input +hwmon_in.mode_0x0007_0x01=str_constant +hwmon_in.str_cons_0x0007_0x01=BMC_VCC3.3V_OUT +hwmon_in.mode_0x0007_0x02=str_constant +hwmon_in.str_cons_0x0007_0x02=ucd90160 +hwmon_in.mode_0x0007_0x03=constant +hwmon_in.int_cons_0x0007_0x03=3630 +hwmon_in.mode_0x0007_0x05=constant +hwmon_in.int_cons_0x0007_0x05=2970 +hwmon_in.mode_0x0007_0x08=constant +hwmon_in.int_cons_0x0007_0x08=3300 +hwmon_in.mode_0x0007_0x07=constant +hwmon_in.int_cons_0x0007_0x07=16 + +# vol8 +hwmon_in.mode_0x0008_0x00=config +hwmon_in.int_cons_0x0008_0x00=0 +hwmon_in.src_0x0008_0x00=file +hwmon_in.frmt_0x0008_0x00=buf +hwmon_in.fpath_0x0008_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0008_0x00=0 +hwmon_in.len_0x0008_0x00=8 +hwmon_in.bit_offset_0x0008_0x00= +hwmon_in.str_cons_0x0008_0x00=in8_input +hwmon_in.mode_0x0008_0x01=str_constant +hwmon_in.str_cons_0x0008_0x01=SSD_VDD3.3V +hwmon_in.mode_0x0008_0x02=str_constant +hwmon_in.str_cons_0x0008_0x02=ucd90160 +hwmon_in.mode_0x0008_0x03=constant +hwmon_in.int_cons_0x0008_0x03=3630 +hwmon_in.mode_0x0008_0x05=constant +hwmon_in.int_cons_0x0008_0x05=2970 +hwmon_in.mode_0x0008_0x08=constant +hwmon_in.int_cons_0x0008_0x08=3300 +hwmon_in.mode_0x0008_0x07=constant +hwmon_in.int_cons_0x0008_0x07=16 + +# vol9 +hwmon_in.mode_0x0009_0x00=config +hwmon_in.int_cons_0x0009_0x00=0 +hwmon_in.src_0x0009_0x00=file +hwmon_in.frmt_0x0009_0x00=buf +hwmon_in.fpath_0x0009_0x00=/sys/bus/i2c/devices/68-005b/hwmon/ +hwmon_in.addr_0x0009_0x00=0 +hwmon_in.len_0x0009_0x00=8 +hwmon_in.bit_offset_0x0009_0x00= +hwmon_in.str_cons_0x0009_0x00=in9_input +hwmon_in.mode_0x0009_0x01=str_constant +hwmon_in.str_cons_0x0009_0x01=VDD3V8_CLK_BASE +hwmon_in.mode_0x0009_0x02=str_constant +hwmon_in.str_cons_0x0009_0x02=ucd90160 +hwmon_in.mode_0x0009_0x03=constant +hwmon_in.int_cons_0x0009_0x03=4180 +hwmon_in.mode_0x0009_0x05=constant +hwmon_in.int_cons_0x0009_0x05=3420 +hwmon_in.mode_0x0009_0x08=constant +hwmon_in.int_cons_0x0009_0x08=3800 +hwmon_in.mode_0x0009_0x07=constant +hwmon_in.int_cons_0x0009_0x07=19 + +# vol10 +hwmon_in.mode_0x000a_0x00=config +hwmon_in.int_cons_0x000a_0x00=0 +hwmon_in.src_0x000a_0x00=file +hwmon_in.frmt_0x000a_0x00=buf +hwmon_in.fpath_0x000a_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000a_0x00=0 +hwmon_in.len_0x000a_0x00=8 +hwmon_in.bit_offset_0x000a_0x00= +hwmon_in.str_cons_0x000a_0x00=in1_input +hwmon_in.mode_0x000a_0x01=str_constant +hwmon_in.str_cons_0x000a_0x01=VDD12V_MAC1 +hwmon_in.mode_0x000a_0x02=str_constant +hwmon_in.str_cons_0x000a_0x02=ucd90160 +hwmon_in.mode_0x000a_0x03=constant +hwmon_in.int_cons_0x000a_0x03=13200 +hwmon_in.mode_0x000a_0x05=constant +hwmon_in.int_cons_0x000a_0x05=10800 +hwmon_in.mode_0x000a_0x08=constant +hwmon_in.int_cons_0x000a_0x08=12000 +hwmon_in.mode_0x000a_0x07=constant +hwmon_in.int_cons_0x000a_0x07=60 + +# vol11 +hwmon_in.mode_0x000b_0x00=config +hwmon_in.int_cons_0x000b_0x00=0 +hwmon_in.src_0x000b_0x00=file +hwmon_in.frmt_0x000b_0x00=buf +hwmon_in.fpath_0x000b_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000b_0x00=0 +hwmon_in.len_0x000b_0x00=8 +hwmon_in.bit_offset_0x000b_0x00= +hwmon_in.str_cons_0x000b_0x00=in2_input +hwmon_in.mode_0x000b_0x01=str_constant +hwmon_in.str_cons_0x000b_0x01=VDD1.8_CLK +hwmon_in.mode_0x000b_0x02=str_constant +hwmon_in.str_cons_0x000b_0x02=ucd90160 +hwmon_in.mode_0x000b_0x03=constant +hwmon_in.int_cons_0x000b_0x03=1980 +hwmon_in.mode_0x000b_0x05=constant +hwmon_in.int_cons_0x000b_0x05=1620 +hwmon_in.mode_0x000b_0x08=constant +hwmon_in.int_cons_0x000b_0x08=1800 +hwmon_in.mode_0x000b_0x07=constant +hwmon_in.int_cons_0x000b_0x07=9 + +# vol12 +hwmon_in.mode_0x000c_0x00=config +hwmon_in.int_cons_0x000c_0x00=0 +hwmon_in.src_0x000c_0x00=file +hwmon_in.frmt_0x000c_0x00=buf +hwmon_in.fpath_0x000c_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000c_0x00=0 +hwmon_in.len_0x000c_0x00=8 +hwmon_in.bit_offset_0x000c_0x00= +hwmon_in.str_cons_0x000c_0x00=in3_input +hwmon_in.mode_0x000c_0x01=str_constant +hwmon_in.str_cons_0x000c_0x01=VDD3.3_CLK_MAC +hwmon_in.mode_0x000c_0x02=str_constant +hwmon_in.str_cons_0x000c_0x02=ucd90160 +hwmon_in.mode_0x000c_0x03=constant +hwmon_in.int_cons_0x000c_0x03=3630 +hwmon_in.mode_0x000c_0x05=constant +hwmon_in.int_cons_0x000c_0x05=2970 +hwmon_in.mode_0x000c_0x08=constant +hwmon_in.int_cons_0x000c_0x08=3300 +hwmon_in.mode_0x000c_0x07=constant +hwmon_in.int_cons_0x000c_0x07=16 + +# vol13 +hwmon_in.mode_0x000d_0x00=config +hwmon_in.int_cons_0x000d_0x00=0 +hwmon_in.src_0x000d_0x00=file +hwmon_in.frmt_0x000d_0x00=buf +hwmon_in.fpath_0x000d_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000d_0x00=0 +hwmon_in.len_0x000d_0x00=8 +hwmon_in.bit_offset_0x000d_0x00= +hwmon_in.str_cons_0x000d_0x00=in4_input +hwmon_in.mode_0x000d_0x01=str_constant +hwmon_in.str_cons_0x000d_0x01=VDD1.0V_FPGA +hwmon_in.mode_0x000d_0x02=str_constant +hwmon_in.str_cons_0x000d_0x02=ucd90160 +hwmon_in.mode_0x000d_0x03=constant +hwmon_in.int_cons_0x000d_0x03=1100 +hwmon_in.mode_0x000d_0x05=constant +hwmon_in.int_cons_0x000d_0x05=900 +hwmon_in.mode_0x000d_0x08=constant +hwmon_in.int_cons_0x000d_0x08=1000 +hwmon_in.mode_0x000d_0x07=constant +hwmon_in.int_cons_0x000d_0x07=5 + +# vol14 +hwmon_in.mode_0x000e_0x00=config +hwmon_in.int_cons_0x000e_0x00=0 +hwmon_in.src_0x000e_0x00=file +hwmon_in.frmt_0x000e_0x00=buf +hwmon_in.fpath_0x000e_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000e_0x00=0 +hwmon_in.len_0x000e_0x00=8 +hwmon_in.bit_offset_0x000e_0x00= +hwmon_in.str_cons_0x000e_0x00=in5_input +hwmon_in.mode_0x000e_0x01=str_constant +hwmon_in.str_cons_0x000e_0x01=VDD1.8V_FPGA +hwmon_in.mode_0x000e_0x02=str_constant +hwmon_in.str_cons_0x000e_0x02=ucd90160 +hwmon_in.mode_0x000e_0x03=constant +hwmon_in.int_cons_0x000e_0x03=1980 +hwmon_in.mode_0x000e_0x05=constant +hwmon_in.int_cons_0x000e_0x05=1620 +hwmon_in.mode_0x000e_0x08=constant +hwmon_in.int_cons_0x000e_0x08=1800 +hwmon_in.mode_0x000e_0x07=constant +hwmon_in.int_cons_0x000e_0x07=9 + +# vol15 +hwmon_in.mode_0x000f_0x00=config +hwmon_in.int_cons_0x000f_0x00=0 +hwmon_in.src_0x000f_0x00=file +hwmon_in.frmt_0x000f_0x00=buf +hwmon_in.fpath_0x000f_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x000f_0x00=0 +hwmon_in.len_0x000f_0x00=8 +hwmon_in.bit_offset_0x000f_0x00= +hwmon_in.str_cons_0x000f_0x00=in6_input +hwmon_in.mode_0x000f_0x01=str_constant +hwmon_in.str_cons_0x000f_0x01=VDD1.2V_FPGA +hwmon_in.mode_0x000f_0x02=str_constant +hwmon_in.str_cons_0x000f_0x02=ucd90160 +hwmon_in.mode_0x000f_0x03=constant +hwmon_in.int_cons_0x000f_0x03=1320 +hwmon_in.mode_0x000f_0x05=constant +hwmon_in.int_cons_0x000f_0x05=1080 +hwmon_in.mode_0x000f_0x08=constant +hwmon_in.int_cons_0x000f_0x08=1200 +hwmon_in.mode_0x000f_0x07=constant +hwmon_in.int_cons_0x000f_0x07=6 + +# vol16 +hwmon_in.mode_0x0010_0x00=config +hwmon_in.int_cons_0x0010_0x00=0 +hwmon_in.src_0x0010_0x00=file +hwmon_in.frmt_0x0010_0x00=buf +hwmon_in.fpath_0x0010_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0010_0x00=0 +hwmon_in.len_0x0010_0x00=8 +hwmon_in.bit_offset_0x0010_0x00= +hwmon_in.str_cons_0x0010_0x00=in7_input +hwmon_in.mode_0x0010_0x01=str_constant +hwmon_in.str_cons_0x0010_0x01=VDD3.3V_MAC +hwmon_in.mode_0x0010_0x02=str_constant +hwmon_in.str_cons_0x0010_0x02=ucd90160 +hwmon_in.mode_0x0010_0x03=constant +hwmon_in.int_cons_0x0010_0x03=3630 +hwmon_in.mode_0x0010_0x05=constant +hwmon_in.int_cons_0x0010_0x05=2970 +hwmon_in.mode_0x0010_0x08=constant +hwmon_in.int_cons_0x0010_0x08=3300 +hwmon_in.mode_0x0010_0x07=constant +hwmon_in.int_cons_0x0010_0x07=16 + +# vol17 +hwmon_in.mode_0x0011_0x00=config +hwmon_in.int_cons_0x0011_0x00=0 +hwmon_in.src_0x0011_0x00=file +hwmon_in.frmt_0x0011_0x00=buf +hwmon_in.fpath_0x0011_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0011_0x00=0 +hwmon_in.len_0x0011_0x00=8 +hwmon_in.bit_offset_0x0011_0x00= +hwmon_in.str_cons_0x0011_0x00=in8_input +hwmon_in.mode_0x0011_0x01=str_constant +hwmon_in.str_cons_0x0011_0x01=VDDO1.2V +hwmon_in.mode_0x0011_0x02=str_constant +hwmon_in.str_cons_0x0011_0x02=ucd90160 +hwmon_in.mode_0x0011_0x03=constant +hwmon_in.int_cons_0x0011_0x03=1320 +hwmon_in.mode_0x0011_0x05=constant +hwmon_in.int_cons_0x0011_0x05=1080 +hwmon_in.mode_0x0011_0x08=constant +hwmon_in.int_cons_0x0011_0x08=1200 +hwmon_in.mode_0x0011_0x07=constant +hwmon_in.int_cons_0x0011_0x07=6 + +# vol18 +hwmon_in.mode_0x0012_0x00=config +hwmon_in.int_cons_0x0012_0x00=0 +hwmon_in.src_0x0012_0x00=file +hwmon_in.frmt_0x0012_0x00=buf +hwmon_in.fpath_0x0012_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0012_0x00=0 +hwmon_in.len_0x0012_0x00=8 +hwmon_in.bit_offset_0x0012_0x00= +hwmon_in.str_cons_0x0012_0x00=in9_input +hwmon_in.mode_0x0012_0x01=str_constant +hwmon_in.str_cons_0x0012_0x01=VDDO1.8V +hwmon_in.mode_0x0012_0x02=str_constant +hwmon_in.str_cons_0x0012_0x02=ucd90160 +hwmon_in.mode_0x0012_0x03=constant +hwmon_in.int_cons_0x0012_0x03=1980 +hwmon_in.mode_0x0012_0x05=constant +hwmon_in.int_cons_0x0012_0x05=1620 +hwmon_in.mode_0x0012_0x08=constant +hwmon_in.int_cons_0x0012_0x08=1800 +hwmon_in.mode_0x0012_0x07=constant +hwmon_in.int_cons_0x0012_0x07=9 + +# vol19 +hwmon_in.mode_0x0013_0x00=config +hwmon_in.int_cons_0x0013_0x00=0 +hwmon_in.src_0x0013_0x00=file +hwmon_in.frmt_0x0013_0x00=buf +hwmon_in.fpath_0x0013_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0013_0x00=0 +hwmon_in.len_0x0013_0x00=8 +hwmon_in.bit_offset_0x0013_0x00= +hwmon_in.str_cons_0x0013_0x00=in10_input +hwmon_in.mode_0x0013_0x01=str_constant +hwmon_in.str_cons_0x0013_0x01=VDD_CORE +hwmon_in.mode_0x0013_0x02=str_constant +hwmon_in.str_cons_0x0013_0x02=ucd90160 +hwmon_in.mode_0x0013_0x03=constant +hwmon_in.int_cons_0x0013_0x03=900 +hwmon_in.mode_0x0013_0x05=constant +hwmon_in.int_cons_0x0013_0x05=630 +hwmon_in.mode_0x0013_0x08=constant +hwmon_in.int_cons_0x0013_0x08=800 +hwmon_in.mode_0x0013_0x07=constant +hwmon_in.int_cons_0x0013_0x07=4 + +# vol20 +hwmon_in.mode_0x0014_0x00=config +hwmon_in.int_cons_0x0014_0x00=0 +hwmon_in.src_0x0014_0x00=file +hwmon_in.frmt_0x0014_0x00=buf +hwmon_in.fpath_0x0014_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0014_0x00=0 +hwmon_in.len_0x0014_0x00=8 +hwmon_in.bit_offset_0x0014_0x00= +hwmon_in.str_cons_0x0014_0x00=in11_input +hwmon_in.mode_0x0014_0x01=str_constant +hwmon_in.str_cons_0x0014_0x01=VDDA1.5V +hwmon_in.mode_0x0014_0x02=str_constant +hwmon_in.str_cons_0x0014_0x02=ucd90160 +hwmon_in.mode_0x0014_0x03=constant +hwmon_in.int_cons_0x0014_0x03=1650 +hwmon_in.mode_0x0014_0x05=constant +hwmon_in.int_cons_0x0014_0x05=1350 +hwmon_in.mode_0x0014_0x08=constant +hwmon_in.int_cons_0x0014_0x08=1500 +hwmon_in.mode_0x0014_0x07=constant +hwmon_in.int_cons_0x0014_0x07=7 + +# vol21 +hwmon_in.mode_0x0015_0x00=config +hwmon_in.int_cons_0x0015_0x00=0 +hwmon_in.src_0x0015_0x00=file +hwmon_in.frmt_0x0015_0x00=buf +hwmon_in.fpath_0x0015_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0015_0x00=0 +hwmon_in.len_0x0015_0x00=8 +hwmon_in.bit_offset_0x0015_0x00=0 +hwmon_in.str_cons_0x0015_0x00=in12_input +hwmon_in.mode_0x0015_0x01=str_constant +hwmon_in.str_cons_0x0015_0x01=VDD0_9V_ANLG0 +hwmon_in.mode_0x0015_0x02=str_constant +hwmon_in.str_cons_0x0015_0x02=ucd90160 +hwmon_in.mode_0x0015_0x03=constant +hwmon_in.int_cons_0x0015_0x03=990 +hwmon_in.mode_0x0015_0x05=constant +hwmon_in.int_cons_0x0015_0x05=810 +hwmon_in.mode_0x0015_0x08=constant +hwmon_in.int_cons_0x0015_0x08=900 +hwmon_in.mode_0x0015_0x07=constant +hwmon_in.int_cons_0x0015_0x07=4 + + +# vol22 +hwmon_in.mode_0x0016_0x00=config +hwmon_in.int_cons_0x0016_0x00=0 +hwmon_in.src_0x0016_0x00=file +hwmon_in.frmt_0x0016_0x00=buf +hwmon_in.fpath_0x0016_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0016_0x00=0 +hwmon_in.len_0x0016_0x00=8 +hwmon_in.bit_offset_0x0016_0x00=0 +hwmon_in.str_cons_0x0016_0x00=in13_input +hwmon_in.mode_0x0016_0x01=str_constant +hwmon_in.str_cons_0x0016_0x01=VDD0_9V_ANLG1 +hwmon_in.mode_0x0016_0x02=str_constant +hwmon_in.str_cons_0x0016_0x02=ucd90160 +hwmon_in.mode_0x0016_0x03=constant +hwmon_in.int_cons_0x0016_0x03=990 +hwmon_in.mode_0x0016_0x05=constant +hwmon_in.int_cons_0x0016_0x05=810 +hwmon_in.mode_0x0016_0x08=constant +hwmon_in.int_cons_0x0016_0x08=900 +hwmon_in.mode_0x0016_0x07=constant +hwmon_in.int_cons_0x0016_0x07=4 + + +# vol23 +hwmon_in.mode_0x0017_0x00=config +hwmon_in.int_cons_0x0017_0x00=0 +hwmon_in.src_0x0017_0x00=file +hwmon_in.frmt_0x0017_0x00=buf +hwmon_in.fpath_0x0017_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0017_0x00=0 +hwmon_in.len_0x0017_0x00=8 +hwmon_in.bit_offset_0x0017_0x00= +hwmon_in.str_cons_0x0017_0x00=in14_input +hwmon_in.mode_0x0017_0x01=str_constant +hwmon_in.str_cons_0x0017_0x01=VDD0_75V_ANLG0 +hwmon_in.mode_0x0017_0x02=str_constant +hwmon_in.str_cons_0x0017_0x02=ucd90160 +hwmon_in.mode_0x0017_0x03=constant +hwmon_in.int_cons_0x0017_0x03=825 +hwmon_in.mode_0x0017_0x05=constant +hwmon_in.int_cons_0x0017_0x05=675 +hwmon_in.mode_0x0017_0x08=constant +hwmon_in.int_cons_0x0017_0x08=750 +hwmon_in.mode_0x0017_0x07=constant +hwmon_in.int_cons_0x0017_0x07=3 + +# vol24 +hwmon_in.mode_0x0018_0x00=config +hwmon_in.int_cons_0x0018_0x00=0 +hwmon_in.src_0x0018_0x00=file +hwmon_in.frmt_0x0018_0x00=buf +hwmon_in.fpath_0x0018_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0018_0x00=0 +hwmon_in.len_0x0018_0x00=8 +hwmon_in.bit_offset_0x0018_0x00= +hwmon_in.str_cons_0x0018_0x00=in15_input +hwmon_in.mode_0x0018_0x01=str_constant +hwmon_in.str_cons_0x0018_0x01=VDD0_75V_ANLG1 +hwmon_in.mode_0x0018_0x02=str_constant +hwmon_in.str_cons_0x0018_0x02=ucd90160 +hwmon_in.mode_0x0018_0x03=constant +hwmon_in.int_cons_0x0018_0x03=825 +hwmon_in.mode_0x0018_0x05=constant +hwmon_in.int_cons_0x0018_0x05=675 +hwmon_in.mode_0x0018_0x08=constant +hwmon_in.int_cons_0x0018_0x08=750 +hwmon_in.mode_0x0018_0x07=constant +hwmon_in.int_cons_0x0018_0x07=3 + +# vol25 +hwmon_in.mode_0x0019_0x00=config +hwmon_in.int_cons_0x0019_0x00=0 +hwmon_in.src_0x0019_0x00=file +hwmon_in.frmt_0x0019_0x00=buf +hwmon_in.fpath_0x0019_0x00=/sys/bus/i2c/devices/82-005b/hwmon/ +hwmon_in.addr_0x0019_0x00=0 +hwmon_in.len_0x0019_0x00=8 +hwmon_in.bit_offset_0x0019_0x00= +hwmon_in.str_cons_0x0019_0x00=in16_input +hwmon_in.mode_0x0019_0x01=str_constant +hwmon_in.str_cons_0x0019_0x01=VDD0.8V +hwmon_in.mode_0x0019_0x02=str_constant +hwmon_in.str_cons_0x0019_0x02=ucd90160 +hwmon_in.mode_0x0019_0x03=constant +hwmon_in.int_cons_0x0019_0x03=880 +hwmon_in.mode_0x0019_0x05=constant +hwmon_in.int_cons_0x0019_0x05=720 +hwmon_in.mode_0x0019_0x08=constant +hwmon_in.int_cons_0x0019_0x08=750 +hwmon_in.mode_0x0019_0x07=constant +hwmon_in.int_cons_0x0019_0x07=3 + +# vol26 +hwmon_in.mode_0x001a_0x00=config +hwmon_in.int_cons_0x001a_0x00=0 +hwmon_in.src_0x001a_0x00=file +hwmon_in.frmt_0x001a_0x00=buf +hwmon_in.fpath_0x001a_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001a_0x00=0 +hwmon_in.len_0x001a_0x00=8 +hwmon_in.bit_offset_0x001a_0x00= +hwmon_in.str_cons_0x001a_0x00=in1_input +hwmon_in.mode_0x001a_0x01=str_constant +hwmon_in.str_cons_0x001a_0x01=VDD12V_MAC2 +hwmon_in.mode_0x001a_0x02=str_constant +hwmon_in.str_cons_0x001a_0x02=ucd90160 +hwmon_in.mode_0x001a_0x03=constant +hwmon_in.int_cons_0x001a_0x03=13200 +hwmon_in.mode_0x001a_0x05=constant +hwmon_in.int_cons_0x001a_0x05=10800 +hwmon_in.mode_0x001a_0x08=constant +hwmon_in.int_cons_0x001a_0x08=12000 +hwmon_in.mode_0x001a_0x07=constant +hwmon_in.int_cons_0x001a_0x07=60 + +# vol27 +hwmon_in.mode_0x001b_0x00=config +hwmon_in.int_cons_0x001b_0x00=0 +hwmon_in.src_0x001b_0x00=file +hwmon_in.frmt_0x001b_0x00=buf +hwmon_in.fpath_0x001b_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001b_0x00=0 +hwmon_in.len_0x001b_0x00=8 +hwmon_in.bit_offset_0x001b_0x00= +hwmon_in.str_cons_0x001b_0x00=in2_input +hwmon_in.mode_0x001b_0x01=str_constant +hwmon_in.str_cons_0x001b_0x01=VDD3.3V_STANDBY +hwmon_in.mode_0x001b_0x02=str_constant +hwmon_in.str_cons_0x001b_0x02=ucd90160 +hwmon_in.mode_0x001b_0x03=constant +hwmon_in.int_cons_0x001b_0x03=3630 +hwmon_in.mode_0x001b_0x05=constant +hwmon_in.int_cons_0x001b_0x05=2970 +hwmon_in.mode_0x001b_0x08=constant +hwmon_in.int_cons_0x001b_0x08=3300 +hwmon_in.mode_0x001b_0x07=constant +hwmon_in.int_cons_0x001b_0x07=16 + +# vol28 +hwmon_in.mode_0x001c_0x00=config +hwmon_in.int_cons_0x001c_0x00=0 +hwmon_in.src_0x001c_0x00=file +hwmon_in.frmt_0x001c_0x00=buf +hwmon_in.fpath_0x001c_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001c_0x00=0 +hwmon_in.len_0x001c_0x00=8 +hwmon_in.bit_offset_0x001c_0x00=0 +hwmon_in.str_cons_0x001c_0x00=in3_input +hwmon_in.mode_0x001c_0x01=str_constant +hwmon_in.str_cons_0x001c_0x01=VDD3V8_CLK +hwmon_in.mode_0x001c_0x02=str_constant +hwmon_in.str_cons_0x001c_0x02=ucd90160 +hwmon_in.mode_0x001c_0x03=constant +hwmon_in.int_cons_0x001c_0x03=4180 +hwmon_in.mode_0x001c_0x05=constant +hwmon_in.int_cons_0x001c_0x05=3420 +hwmon_in.mode_0x001c_0x08=constant +hwmon_in.int_cons_0x001c_0x08=3800 +hwmon_in.mode_0x001c_0x07=constant +hwmon_in.int_cons_0x001c_0x07=19 + +# vol29 +hwmon_in.mode_0x001d_0x00=config +hwmon_in.int_cons_0x001d_0x00=0 +hwmon_in.src_0x001d_0x00=file +hwmon_in.frmt_0x001d_0x00=buf +hwmon_in.fpath_0x001d_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001d_0x00=0 +hwmon_in.len_0x001d_0x00=8 +hwmon_in.bit_offset_0x001d_0x00=0 +hwmon_in.str_cons_0x001d_0x00=in4_input +hwmon_in.mode_0x001d_0x01=str_constant +hwmon_in.str_cons_0x001d_0x01=VDD5V_VR +hwmon_in.mode_0x001d_0x02=str_constant +hwmon_in.str_cons_0x001d_0x02=ucd90160 +hwmon_in.mode_0x001d_0x03=constant +hwmon_in.int_cons_0x001d_0x03=5500 +hwmon_in.mode_0x001d_0x05=constant +hwmon_in.int_cons_0x001d_0x05=4500 +hwmon_in.mode_0x001d_0x08=constant +hwmon_in.int_cons_0x001d_0x08=5000 +hwmon_in.mode_0x001d_0x07=constant +hwmon_in.int_cons_0x001d_0x07=25 + +# vol30 +hwmon_in.mode_0x001e_0x00=config +hwmon_in.int_cons_0x001e_0x00=0 +hwmon_in.src_0x001e_0x00=file +hwmon_in.frmt_0x001e_0x00=buf +hwmon_in.fpath_0x001e_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001e_0x00=0 +hwmon_in.len_0x001e_0x00=8 +hwmon_in.bit_offset_0x001e_0x00=0 +hwmon_in.str_cons_0x001e_0x00=in5_input +hwmon_in.mode_0x001e_0x01=str_constant +hwmon_in.str_cons_0x001e_0x01=VDD1.5V +hwmon_in.mode_0x001e_0x02=str_constant +hwmon_in.str_cons_0x001e_0x02=ucd90160 +hwmon_in.mode_0x001e_0x03=constant +hwmon_in.int_cons_0x001e_0x03=1650 +hwmon_in.mode_0x001e_0x05=constant +hwmon_in.int_cons_0x001e_0x05=1350 +hwmon_in.mode_0x001e_0x08=constant +hwmon_in.int_cons_0x001e_0x08=1500 +hwmon_in.mode_0x001e_0x07=constant +hwmon_in.int_cons_0x001e_0x07=7 + +# vol31 +hwmon_in.mode_0x001f_0x00=config +hwmon_in.int_cons_0x001f_0x00=0 +hwmon_in.src_0x001f_0x00=file +hwmon_in.frmt_0x001f_0x00=buf +hwmon_in.fpath_0x001f_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x001f_0x00=0 +hwmon_in.len_0x001f_0x00=8 +hwmon_in.bit_offset_0x001f_0x00=0 +hwmon_in.str_cons_0x001f_0x00=in6_input +hwmon_in.mode_0x001f_0x01=str_constant +hwmon_in.str_cons_0x001f_0x01=VDD1_2V +hwmon_in.mode_0x001f_0x02=str_constant +hwmon_in.str_cons_0x001f_0x02=ucd90160 +hwmon_in.mode_0x001f_0x03=constant +hwmon_in.int_cons_0x001f_0x03=1320 +hwmon_in.mode_0x001f_0x05=constant +hwmon_in.int_cons_0x001f_0x05=1080 +hwmon_in.mode_0x001f_0x08=constant +hwmon_in.int_cons_0x001f_0x08=1200 +hwmon_in.mode_0x001f_0x07=constant +hwmon_in.int_cons_0x001f_0x07=6 + +# vol32 +hwmon_in.mode_0x0020_0x00=config +hwmon_in.int_cons_0x0020_0x00=0 +hwmon_in.src_0x0020_0x00=file +hwmon_in.frmt_0x0020_0x00=buf +hwmon_in.fpath_0x0020_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x0020_0x00=0 +hwmon_in.len_0x0020_0x00=8 +hwmon_in.bit_offset_0x0020_0x00= +hwmon_in.str_cons_0x0020_0x00=in7_input +hwmon_in.mode_0x0020_0x01=str_constant +hwmon_in.str_cons_0x0020_0x01=VDD_PLL0 +hwmon_in.mode_0x0020_0x02=str_constant +hwmon_in.str_cons_0x0020_0x02=ucd90160 +hwmon_in.mode_0x0020_0x03=constant +hwmon_in.int_cons_0x0020_0x03=990 +hwmon_in.mode_0x0020_0x05=constant +hwmon_in.int_cons_0x0020_0x05=810 +hwmon_in.mode_0x0020_0x08=constant +hwmon_in.int_cons_0x0020_0x08=900 +hwmon_in.mode_0x0020_0x07=constant +hwmon_in.int_cons_0x0020_0x07=4 + +# vol33 +hwmon_in.mode_0x0021_0x00=config +hwmon_in.int_cons_0x0021_0x00=0 +hwmon_in.src_0x0021_0x00=file +hwmon_in.frmt_0x0021_0x00=buf +hwmon_in.fpath_0x0021_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x0021_0x00=0 +hwmon_in.len_0x0021_0x00=8 +hwmon_in.bit_offset_0x0021_0x00= +hwmon_in.str_cons_0x0021_0x00=in8_input +hwmon_in.mode_0x0021_0x01=str_constant +hwmon_in.str_cons_0x0021_0x01=VDD_PLL1 +hwmon_in.mode_0x0021_0x02=str_constant +hwmon_in.str_cons_0x0021_0x02=ucd90160 +hwmon_in.mode_0x0021_0x03=constant +hwmon_in.int_cons_0x0021_0x03=990 +hwmon_in.mode_0x0021_0x05=constant +hwmon_in.int_cons_0x0021_0x05=810 +hwmon_in.mode_0x0021_0x08=constant +hwmon_in.int_cons_0x0021_0x08=900 +hwmon_in.mode_0x0021_0x07=constant +hwmon_in.int_cons_0x0021_0x07=4 + +# vol34 +hwmon_in.mode_0x0022_0x00=config +hwmon_in.int_cons_0x0022_0x00=0 +hwmon_in.src_0x0022_0x00=file +hwmon_in.frmt_0x0022_0x00=buf +hwmon_in.fpath_0x0022_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x0022_0x00=0 +hwmon_in.len_0x0022_0x00=8 +hwmon_in.bit_offset_0x0022_0x00= +hwmon_in.str_cons_0x0022_0x00=in9_input +hwmon_in.mode_0x0022_0x01=str_constant +hwmon_in.str_cons_0x0022_0x01=VDD_PLL2 +hwmon_in.mode_0x0022_0x02=str_constant +hwmon_in.str_cons_0x0022_0x02=ucd90160 +hwmon_in.mode_0x0022_0x03=constant +hwmon_in.int_cons_0x0022_0x03=990 +hwmon_in.mode_0x0022_0x05=constant +hwmon_in.int_cons_0x0022_0x05=810 +hwmon_in.mode_0x0022_0x08=constant +hwmon_in.int_cons_0x0022_0x08=900 +hwmon_in.mode_0x0022_0x07=constant +hwmon_in.int_cons_0x0022_0x07=4 + +# vol35 +hwmon_in.mode_0x0023_0x00=config +hwmon_in.int_cons_0x0023_0x00=0 +hwmon_in.src_0x0023_0x00=file +hwmon_in.frmt_0x0023_0x00=buf +hwmon_in.fpath_0x0023_0x00=/sys/bus/i2c/devices/83-005b/hwmon/ +hwmon_in.addr_0x0023_0x00=0 +hwmon_in.len_0x0023_0x00=8 +hwmon_in.bit_offset_0x0023_0x00= +hwmon_in.str_cons_0x0023_0x00=in10_input +hwmon_in.mode_0x0023_0x01=str_constant +hwmon_in.str_cons_0x0023_0x01=VDD_PLL3 +hwmon_in.mode_0x0023_0x02=str_constant +hwmon_in.str_cons_0x0023_0x02=ucd90160 +hwmon_in.mode_0x0023_0x03=constant +hwmon_in.int_cons_0x0023_0x03=990 +hwmon_in.mode_0x0023_0x05=constant +hwmon_in.int_cons_0x0023_0x05=810 +hwmon_in.mode_0x0023_0x08=constant +hwmon_in.int_cons_0x0023_0x08=900 +hwmon_in.mode_0x0023_0x07=constant +hwmon_in.int_cons_0x0023_0x07=4 + +# vol36 +hwmon_in.mode_0x0024_0x00=config +hwmon_in.int_cons_0x0024_0x00=0 +hwmon_in.src_0x0024_0x00=file +hwmon_in.frmt_0x0024_0x00=buf +hwmon_in.fpath_0x0024_0x00=/sys/bus/i2c/devices/84-0040/hwmon/ +hwmon_in.addr_0x0024_0x00=0 +hwmon_in.len_0x0024_0x00=8 +hwmon_in.bit_offset_0x0024_0x00= +hwmon_in.str_cons_0x0024_0x00=in3_input +hwmon_in.mode_0x0024_0x01=str_constant +hwmon_in.str_cons_0x0024_0x01=XDPE_VDD_CORE +hwmon_in.mode_0x0024_0x02=str_constant +hwmon_in.str_cons_0x0024_0x02=xdpe132g5c +hwmon_in.mode_0x0024_0x03=constant +hwmon_in.int_cons_0x0024_0x03=900 +hwmon_in.mode_0x0024_0x05=constant +hwmon_in.int_cons_0x0024_0x05=630 +hwmon_in.mode_0x0024_0x08=constant +hwmon_in.int_cons_0x0024_0x08=800 +hwmon_in.mode_0x0024_0x07=constant +hwmon_in.int_cons_0x0024_0x07=12 + +# vol37 +hwmon_in.mode_0x0025_0x00=config +hwmon_in.int_cons_0x0025_0x00=0 +hwmon_in.src_0x0025_0x00=file +hwmon_in.frmt_0x0025_0x00=buf +hwmon_in.fpath_0x0025_0x00=/sys/bus/i2c/devices/85-004d/hwmon/ +hwmon_in.addr_0x0025_0x00=0 +hwmon_in.len_0x0025_0x00=8 +hwmon_in.bit_offset_0x0025_0x00= +hwmon_in.str_cons_0x0025_0x00=in3_input +hwmon_in.mode_0x0025_0x01=str_constant +hwmon_in.str_cons_0x0025_0x01=XDPE_VDD0_9V_ANLG0 +hwmon_in.mode_0x0025_0x02=str_constant +hwmon_in.str_cons_0x0025_0x02=xdpe132g5c +hwmon_in.mode_0x0025_0x03=constant +hwmon_in.int_cons_0x0025_0x03=990 +hwmon_in.mode_0x0025_0x05=constant +hwmon_in.int_cons_0x0025_0x05=810 +hwmon_in.mode_0x0025_0x08=constant +hwmon_in.int_cons_0x0025_0x08=900 +hwmon_in.mode_0x0025_0x07=constant +hwmon_in.int_cons_0x0025_0x07=12 + +# vol38 +hwmon_in.mode_0x0026_0x00=config +hwmon_in.int_cons_0x0026_0x00=0 +hwmon_in.src_0x0026_0x00=file +hwmon_in.frmt_0x0026_0x00=buf +hwmon_in.fpath_0x0026_0x00=/sys/bus/i2c/devices/85-004d/hwmon/ +hwmon_in.addr_0x0026_0x00=0 +hwmon_in.len_0x0026_0x00=8 +hwmon_in.bit_offset_0x0026_0x00= +hwmon_in.str_cons_0x0026_0x00=in4_input +hwmon_in.mode_0x0026_0x01=str_constant +hwmon_in.str_cons_0x0026_0x01=XDPE_VDD0_75V_ANLG0 +hwmon_in.mode_0x0026_0x02=str_constant +hwmon_in.str_cons_0x0026_0x02=xdpe132g5c +hwmon_in.mode_0x0026_0x03=constant +hwmon_in.int_cons_0x0026_0x03=825 +hwmon_in.mode_0x0026_0x05=constant +hwmon_in.int_cons_0x0026_0x05=675 +hwmon_in.mode_0x0026_0x08=constant +hwmon_in.int_cons_0x0026_0x08=750 +hwmon_in.mode_0x0026_0x07=constant +hwmon_in.int_cons_0x0026_0x07=12 + +# vol39 +hwmon_in.mode_0x0027_0x00=config +hwmon_in.int_cons_0x0027_0x00=0 +hwmon_in.src_0x0027_0x00=file +hwmon_in.frmt_0x0027_0x00=buf +hwmon_in.fpath_0x0027_0x00=/sys/bus/i2c/devices/86-004d/hwmon/ +hwmon_in.addr_0x0027_0x00=0 +hwmon_in.len_0x0027_0x00=8 +hwmon_in.bit_offset_0x0027_0x00= +hwmon_in.str_cons_0x0027_0x00=in3_input +hwmon_in.mode_0x0027_0x01=str_constant +hwmon_in.str_cons_0x0027_0x01=XDPE_VDD0_9V_ANLG1 +hwmon_in.mode_0x0027_0x02=str_constant +hwmon_in.str_cons_0x0027_0x02=xdpe132g5c +hwmon_in.mode_0x0027_0x03=constant +hwmon_in.int_cons_0x0027_0x03=990 +hwmon_in.mode_0x0027_0x05=constant +hwmon_in.int_cons_0x0027_0x05=810 +hwmon_in.mode_0x0027_0x08=constant +hwmon_in.int_cons_0x0027_0x08=900 +hwmon_in.mode_0x0027_0x07=constant +hwmon_in.int_cons_0x0027_0x07=12 + +# vol40 +hwmon_in.mode_0x0028_0x00=config +hwmon_in.int_cons_0x0028_0x00=0 +hwmon_in.src_0x0028_0x00=file +hwmon_in.frmt_0x0028_0x00=buf +hwmon_in.fpath_0x0028_0x00=/sys/bus/i2c/devices/86-004d/hwmon/ +hwmon_in.addr_0x0028_0x00=0 +hwmon_in.len_0x0028_0x00=8 +hwmon_in.bit_offset_0x0028_0x00= +hwmon_in.str_cons_0x0028_0x00=in4_input +hwmon_in.mode_0x0028_0x01=str_constant +hwmon_in.str_cons_0x0028_0x01=XDPE_VDD0_75V_ANLG1 +hwmon_in.mode_0x0028_0x02=str_constant +hwmon_in.str_cons_0x0028_0x02=xdpe132g5c +hwmon_in.mode_0x0028_0x03=constant +hwmon_in.int_cons_0x0028_0x03=825 +hwmon_in.mode_0x0028_0x05=constant +hwmon_in.int_cons_0x0028_0x05=675 +hwmon_in.mode_0x0028_0x08=constant +hwmon_in.int_cons_0x0028_0x08=750 +hwmon_in.mode_0x0028_0x07=constant +hwmon_in.int_cons_0x0028_0x07=12 + +# vol41 +hwmon_in.mode_0x0029_0x00=config +hwmon_in.int_cons_0x0029_0x00=3 +hwmon_in.src_0x0029_0x00=file +hwmon_in.frmt_0x0029_0x00=buf +hwmon_in.fpath_0x0029_0x00=/sys/bus/i2c/devices/90-0070/hwmon/ +hwmon_in.addr_0x0029_0x00=0 +hwmon_in.len_0x0029_0x00=8 +hwmon_in.bit_offset_0x0029_0x00=0 +hwmon_in.str_cons_0x0029_0x00=in3_input +hwmon_in.mode_0x0029_0x01=str_constant +hwmon_in.str_cons_0x0029_0x01=OSFP_VDD3.3V_A1 +hwmon_in.mode_0x0029_0x02=str_constant +hwmon_in.str_cons_0x0029_0x02=xdpe12284c +hwmon_in.mode_0x0029_0x03=constant +hwmon_in.int_cons_0x0029_0x03=3630 +hwmon_in.mode_0x0029_0x05=constant +hwmon_in.int_cons_0x0029_0x05=2970 +hwmon_in.mode_0x0029_0x08=constant +hwmon_in.int_cons_0x0029_0x08=3300 +hwmon_in.mode_0x0029_0x07=constant +hwmon_in.int_cons_0x0029_0x07=12 +hwmon_in.int_extra1_0x0029_0x00=1500 + +# vol42 +hwmon_in.mode_0x002a_0x00=config +hwmon_in.int_cons_0x002a_0x00=3 +hwmon_in.src_0x002a_0x00=file +hwmon_in.frmt_0x002a_0x00=buf +hwmon_in.fpath_0x002a_0x00=/sys/bus/i2c/devices/90-0070/hwmon/ +hwmon_in.addr_0x002a_0x00=0 +hwmon_in.len_0x002a_0x00=8 +hwmon_in.bit_offset_0x002a_0x00=0 +hwmon_in.str_cons_0x002a_0x00=in4_input +hwmon_in.mode_0x002a_0x01=str_constant +hwmon_in.str_cons_0x002a_0x01=OSFP_VDD3.3V_B1 +hwmon_in.mode_0x002a_0x02=str_constant +hwmon_in.str_cons_0x002a_0x02=xdpe12284c +hwmon_in.mode_0x002a_0x03=constant +hwmon_in.int_cons_0x002a_0x03=3630 +hwmon_in.mode_0x002a_0x05=constant +hwmon_in.int_cons_0x002a_0x05=2970 +hwmon_in.mode_0x002a_0x08=constant +hwmon_in.int_cons_0x002a_0x08=3300 +hwmon_in.mode_0x002a_0x07=constant +hwmon_in.int_cons_0x002a_0x07=12 +hwmon_in.int_extra1_0x002a_0x00=1500 + +# vol43 +hwmon_in.mode_0x002b_0x00=config +hwmon_in.int_cons_0x002b_0x00=3 +hwmon_in.src_0x002b_0x00=file +hwmon_in.frmt_0x002b_0x00=buf +hwmon_in.fpath_0x002b_0x00=/sys/bus/i2c/devices/91-0070/hwmon/ +hwmon_in.addr_0x002b_0x00=0 +hwmon_in.len_0x002b_0x00=8 +hwmon_in.bit_offset_0x002b_0x00=0 +hwmon_in.str_cons_0x002b_0x00=in3_input +hwmon_in.mode_0x002b_0x01=str_constant +hwmon_in.str_cons_0x002b_0x01=OSFP_VDD3.3V_A2 +hwmon_in.mode_0x002b_0x02=str_constant +hwmon_in.str_cons_0x002b_0x02=xdpe12284c +hwmon_in.mode_0x002b_0x03=constant +hwmon_in.int_cons_0x002b_0x03=3630 +hwmon_in.mode_0x002b_0x05=constant +hwmon_in.int_cons_0x002b_0x05=2970 +hwmon_in.mode_0x002b_0x08=constant +hwmon_in.int_cons_0x002b_0x08=3300 +hwmon_in.mode_0x002b_0x07=constant +hwmon_in.int_cons_0x002b_0x07=12 +hwmon_in.int_extra1_0x002b_0x00=1500 + +# vol44 +hwmon_in.mode_0x002c_0x00=config +hwmon_in.int_cons_0x002c_0x00=3 +hwmon_in.src_0x002c_0x00=file +hwmon_in.frmt_0x002c_0x00=buf +hwmon_in.fpath_0x002c_0x00=/sys/bus/i2c/devices/91-0070/hwmon/ +hwmon_in.addr_0x002c_0x00=0 +hwmon_in.len_0x002c_0x00=8 +hwmon_in.bit_offset_0x002c_0x00=0 +hwmon_in.str_cons_0x002c_0x00=in4_input +hwmon_in.mode_0x002c_0x01=str_constant +hwmon_in.str_cons_0x002c_0x01=OSFP_VDD3.3V_B2 +hwmon_in.mode_0x002c_0x02=str_constant +hwmon_in.str_cons_0x002c_0x02=xdpe12284c +hwmon_in.mode_0x002c_0x03=constant +hwmon_in.int_cons_0x002c_0x03=3630 +hwmon_in.mode_0x002c_0x05=constant +hwmon_in.int_cons_0x002c_0x05=2970 +hwmon_in.mode_0x002c_0x08=constant +hwmon_in.int_cons_0x002c_0x08=3300 +hwmon_in.mode_0x002c_0x07=constant +hwmon_in.int_cons_0x002c_0x07=12 +hwmon_in.int_extra1_0x002c_0x00=1500 + +# vol45 +hwmon_in.mode_0x002d_0x00=config +hwmon_in.int_cons_0x002d_0x00=3 +hwmon_in.src_0x002d_0x00=file +hwmon_in.frmt_0x002d_0x00=buf +hwmon_in.fpath_0x002d_0x00=/sys/bus/i2c/devices/92-0070/hwmon/ +hwmon_in.addr_0x002d_0x00=0 +hwmon_in.len_0x002d_0x00=8 +hwmon_in.bit_offset_0x002d_0x00=0 +hwmon_in.str_cons_0x002d_0x00=in3_input +hwmon_in.mode_0x002d_0x01=str_constant +hwmon_in.str_cons_0x002d_0x01=OSFP_VDD3.3V_A3 +hwmon_in.mode_0x002d_0x02=str_constant +hwmon_in.str_cons_0x002d_0x02=xdpe12284c +hwmon_in.mode_0x002d_0x03=constant +hwmon_in.int_cons_0x002d_0x03=3630 +hwmon_in.mode_0x002d_0x05=constant +hwmon_in.int_cons_0x002d_0x05=2970 +hwmon_in.mode_0x002d_0x08=constant +hwmon_in.int_cons_0x002d_0x08=3300 +hwmon_in.mode_0x002d_0x07=constant +hwmon_in.int_cons_0x002d_0x07=12 +hwmon_in.int_extra1_0x002d_0x00=1500 + +# vol46 +hwmon_in.mode_0x002e_0x00=config +hwmon_in.int_cons_0x002e_0x00=3 +hwmon_in.src_0x002e_0x00=file +hwmon_in.frmt_0x002e_0x00=buf +hwmon_in.fpath_0x002e_0x00=/sys/bus/i2c/devices/92-0070/hwmon/ +hwmon_in.addr_0x002e_0x00=0 +hwmon_in.len_0x002e_0x00=8 +hwmon_in.bit_offset_0x002e_0x00=0 +hwmon_in.str_cons_0x002e_0x00=in4_input +hwmon_in.mode_0x002e_0x01=str_constant +hwmon_in.str_cons_0x002e_0x01=OSFP_VDD3.3V_B3 +hwmon_in.mode_0x002e_0x02=str_constant +hwmon_in.str_cons_0x002e_0x02=xdpe12284c +hwmon_in.mode_0x002e_0x03=constant +hwmon_in.int_cons_0x002e_0x03=3630 +hwmon_in.mode_0x002e_0x05=constant +hwmon_in.int_cons_0x002e_0x05=2970 +hwmon_in.mode_0x002e_0x08=constant +hwmon_in.int_cons_0x002e_0x08=3300 +hwmon_in.mode_0x002e_0x07=constant +hwmon_in.int_cons_0x002e_0x07=12 +hwmon_in.int_extra1_0x002e_0x00=1500 + +# vol47 +hwmon_in.mode_0x002f_0x00=config +hwmon_in.int_cons_0x002f_0x00=3 +hwmon_in.src_0x002f_0x00=file +hwmon_in.frmt_0x002f_0x00=buf +hwmon_in.fpath_0x002f_0x00=/sys/bus/i2c/devices/93-0070/hwmon/ +hwmon_in.addr_0x002f_0x00=0 +hwmon_in.len_0x002f_0x00=8 +hwmon_in.bit_offset_0x002f_0x00=0 +hwmon_in.str_cons_0x002f_0x00=in3_input +hwmon_in.mode_0x002f_0x01=str_constant +hwmon_in.str_cons_0x002f_0x01=OSFP_VDD3.3V_A4 +hwmon_in.mode_0x002f_0x02=str_constant +hwmon_in.str_cons_0x002f_0x02=xdpe12284c +hwmon_in.mode_0x002f_0x03=constant +hwmon_in.int_cons_0x002f_0x03=3630 +hwmon_in.mode_0x002f_0x05=constant +hwmon_in.int_cons_0x002f_0x05=2970 +hwmon_in.mode_0x002f_0x08=constant +hwmon_in.int_cons_0x002f_0x08=3300 +hwmon_in.mode_0x002f_0x07=constant +hwmon_in.int_cons_0x002f_0x07=12 +hwmon_in.int_extra1_0x002f_0x00=1500 + +# vol48 +hwmon_in.mode_0x0030_0x00=config +hwmon_in.int_cons_0x0030_0x00=3 +hwmon_in.src_0x0030_0x00=file +hwmon_in.frmt_0x0030_0x00=buf +hwmon_in.fpath_0x0030_0x00=/sys/bus/i2c/devices/93-0070/hwmon/ +hwmon_in.addr_0x0030_0x00=0 +hwmon_in.len_0x0030_0x00=8 +hwmon_in.bit_offset_0x0030_0x00=0 +hwmon_in.str_cons_0x0030_0x00=in4_input +hwmon_in.mode_0x0030_0x01=str_constant +hwmon_in.str_cons_0x0030_0x01=OSFP_VDD3.3V_B4 +hwmon_in.mode_0x0030_0x02=str_constant +hwmon_in.str_cons_0x0030_0x02=xdpe12284c +hwmon_in.mode_0x0030_0x03=constant +hwmon_in.int_cons_0x0030_0x03=3630 +hwmon_in.mode_0x0030_0x05=constant +hwmon_in.int_cons_0x0030_0x05=2970 +hwmon_in.mode_0x0030_0x08=constant +hwmon_in.int_cons_0x0030_0x08=3300 +hwmon_in.mode_0x0030_0x07=constant +hwmon_in.int_cons_0x0030_0x07=12 +hwmon_in.int_extra1_0x0030_0x00=1500 + +# vol49 +hwmon_in.mode_0x0031_0x00=config +hwmon_in.int_cons_0x0031_0x00=3 +hwmon_in.src_0x0031_0x00=file +hwmon_in.frmt_0x0031_0x00=buf +hwmon_in.fpath_0x0031_0x00=/sys/bus/i2c/devices/94-0070/hwmon/ +hwmon_in.addr_0x0031_0x00=0 +hwmon_in.len_0x0031_0x00=8 +hwmon_in.bit_offset_0x0031_0x00=0 +hwmon_in.str_cons_0x0031_0x00=in3_input +hwmon_in.mode_0x0031_0x01=str_constant +hwmon_in.str_cons_0x0031_0x01=OSFP_VDD3.3V_A5 +hwmon_in.mode_0x0031_0x02=str_constant +hwmon_in.str_cons_0x0031_0x02=xdpe12284c +hwmon_in.mode_0x0031_0x03=constant +hwmon_in.int_cons_0x0031_0x03=3630 +hwmon_in.mode_0x0031_0x05=constant +hwmon_in.int_cons_0x0031_0x05=2970 +hwmon_in.mode_0x0031_0x08=constant +hwmon_in.int_cons_0x0031_0x08=3300 +hwmon_in.mode_0x0031_0x07=constant +hwmon_in.int_cons_0x0031_0x07=12 +hwmon_in.int_extra1_0x0031_0x00=1500 + +# vol50 +hwmon_in.mode_0x0032_0x00=config +hwmon_in.int_cons_0x0032_0x00=3 +hwmon_in.src_0x0032_0x00=file +hwmon_in.frmt_0x0032_0x00=buf +hwmon_in.fpath_0x0032_0x00=/sys/bus/i2c/devices/94-0070/hwmon/ +hwmon_in.addr_0x0032_0x00=0 +hwmon_in.len_0x0032_0x00=8 +hwmon_in.bit_offset_0x0032_0x00=0 +hwmon_in.str_cons_0x0032_0x00=in4_input +hwmon_in.mode_0x0032_0x01=str_constant +hwmon_in.str_cons_0x0032_0x01=OSFP_VDD3.3V_B5 +hwmon_in.mode_0x0032_0x02=str_constant +hwmon_in.str_cons_0x0032_0x02=xdpe12284c +hwmon_in.mode_0x0032_0x03=constant +hwmon_in.int_cons_0x0032_0x03=3630 +hwmon_in.mode_0x0032_0x05=constant +hwmon_in.int_cons_0x0032_0x05=2970 +hwmon_in.mode_0x0032_0x08=constant +hwmon_in.int_cons_0x0032_0x08=3300 +hwmon_in.mode_0x0032_0x07=constant +hwmon_in.int_cons_0x0032_0x07=12 +hwmon_in.int_extra1_0x0032_0x00=1500 + +# vol51 +hwmon_in.mode_0x0033_0x00=config +hwmon_in.int_cons_0x0033_0x00=3 +hwmon_in.src_0x0033_0x00=file +hwmon_in.frmt_0x0033_0x00=buf +hwmon_in.fpath_0x0033_0x00=/sys/bus/i2c/devices/95-0070/hwmon/ +hwmon_in.addr_0x0033_0x00=0 +hwmon_in.len_0x0033_0x00=8 +hwmon_in.bit_offset_0x0033_0x00=0 +hwmon_in.str_cons_0x0033_0x00=in3_input +hwmon_in.mode_0x0033_0x01=str_constant +hwmon_in.str_cons_0x0033_0x01=OSFP_VDD3.3V_A6 +hwmon_in.mode_0x0033_0x02=str_constant +hwmon_in.str_cons_0x0033_0x02=xdpe12284c +hwmon_in.mode_0x0033_0x03=constant +hwmon_in.int_cons_0x0033_0x03=3630 +hwmon_in.mode_0x0033_0x05=constant +hwmon_in.int_cons_0x0033_0x05=2970 +hwmon_in.mode_0x0033_0x08=constant +hwmon_in.int_cons_0x0033_0x08=3300 +hwmon_in.mode_0x0033_0x07=constant +hwmon_in.int_cons_0x0033_0x07=12 +hwmon_in.int_extra1_0x0033_0x00=1500 + +# vol52 +hwmon_in.mode_0x0034_0x00=config +hwmon_in.int_cons_0x0034_0x00=3 +hwmon_in.src_0x0034_0x00=file +hwmon_in.frmt_0x0034_0x00=buf +hwmon_in.fpath_0x0034_0x00=/sys/bus/i2c/devices/95-0070/hwmon/ +hwmon_in.addr_0x0034_0x00=0 +hwmon_in.len_0x0034_0x00=8 +hwmon_in.bit_offset_0x0034_0x00=0 +hwmon_in.str_cons_0x0034_0x00=in4_input +hwmon_in.mode_0x0034_0x01=str_constant +hwmon_in.str_cons_0x0034_0x01=OSFP_VDD3.3V_B6 +hwmon_in.mode_0x0034_0x02=str_constant +hwmon_in.str_cons_0x0034_0x02=xdpe12284c +hwmon_in.mode_0x0034_0x03=constant +hwmon_in.int_cons_0x0034_0x03=3630 +hwmon_in.mode_0x0034_0x05=constant +hwmon_in.int_cons_0x0034_0x05=2970 +hwmon_in.mode_0x0034_0x08=constant +hwmon_in.int_cons_0x0034_0x08=3300 +hwmon_in.mode_0x0034_0x07=constant +hwmon_in.int_cons_0x0034_0x07=12 +hwmon_in.int_extra1_0x0034_0x00=1500 + +# vol53 +hwmon_in.mode_0x0035_0x00=config +hwmon_in.int_cons_0x0035_0x00=3 +hwmon_in.src_0x0035_0x00=file +hwmon_in.frmt_0x0035_0x00=buf +hwmon_in.fpath_0x0035_0x00=/sys/bus/i2c/devices/96-0070/hwmon/ +hwmon_in.addr_0x0035_0x00=0 +hwmon_in.len_0x0035_0x00=8 +hwmon_in.bit_offset_0x0035_0x00=0 +hwmon_in.str_cons_0x0035_0x00=in3_input +hwmon_in.mode_0x0035_0x01=str_constant +hwmon_in.str_cons_0x0035_0x01=OSFP_VDD3.3V_A7 +hwmon_in.mode_0x0035_0x02=str_constant +hwmon_in.str_cons_0x0035_0x02=xdpe12284c +hwmon_in.mode_0x0035_0x03=constant +hwmon_in.int_cons_0x0035_0x03=3630 +hwmon_in.mode_0x0035_0x05=constant +hwmon_in.int_cons_0x0035_0x05=2970 +hwmon_in.mode_0x0035_0x08=constant +hwmon_in.int_cons_0x0035_0x08=3300 +hwmon_in.mode_0x0035_0x07=constant +hwmon_in.int_cons_0x0035_0x07=12 +hwmon_in.int_extra1_0x0035_0x00=1500 + +# vol54 +hwmon_in.mode_0x0036_0x00=config +hwmon_in.int_cons_0x0036_0x00=3 +hwmon_in.src_0x0036_0x00=file +hwmon_in.frmt_0x0036_0x00=buf +hwmon_in.fpath_0x0036_0x00=/sys/bus/i2c/devices/96-0070/hwmon/ +hwmon_in.addr_0x0036_0x00=0 +hwmon_in.len_0x0036_0x00=8 +hwmon_in.bit_offset_0x0036_0x00=0 +hwmon_in.str_cons_0x0036_0x00=in4_input +hwmon_in.mode_0x0036_0x01=str_constant +hwmon_in.str_cons_0x0036_0x01=OSFP_VDD3.3V_B7 +hwmon_in.mode_0x0036_0x02=str_constant +hwmon_in.str_cons_0x0036_0x02=xdpe12284c +hwmon_in.mode_0x0036_0x03=constant +hwmon_in.int_cons_0x0036_0x03=3630 +hwmon_in.mode_0x0036_0x05=constant +hwmon_in.int_cons_0x0036_0x05=2970 +hwmon_in.mode_0x0036_0x08=constant +hwmon_in.int_cons_0x0036_0x08=3300 +hwmon_in.mode_0x0036_0x07=constant +hwmon_in.int_cons_0x0036_0x07=12 +hwmon_in.int_extra1_0x0036_0x00=1500 + +# vol55 +hwmon_in.mode_0x0037_0x00=config +hwmon_in.int_cons_0x0037_0x00=3 +hwmon_in.src_0x0037_0x00=file +hwmon_in.frmt_0x0037_0x00=buf +hwmon_in.fpath_0x0037_0x00=/sys/bus/i2c/devices/97-0070/hwmon/ +hwmon_in.addr_0x0037_0x00=0 +hwmon_in.len_0x0037_0x00=8 +hwmon_in.bit_offset_0x0037_0x00=0 +hwmon_in.str_cons_0x0037_0x00=in3_input +hwmon_in.mode_0x0037_0x01=str_constant +hwmon_in.str_cons_0x0037_0x01=OSFP_VDD3.3V_A8 +hwmon_in.mode_0x0037_0x02=str_constant +hwmon_in.str_cons_0x0037_0x02=xdpe12284c +hwmon_in.mode_0x0037_0x03=constant +hwmon_in.int_cons_0x0037_0x03=3630 +hwmon_in.mode_0x0037_0x05=constant +hwmon_in.int_cons_0x0037_0x05=2970 +hwmon_in.mode_0x0037_0x08=constant +hwmon_in.int_cons_0x0037_0x08=3300 +hwmon_in.mode_0x0037_0x07=constant +hwmon_in.int_cons_0x0037_0x07=12 +hwmon_in.int_extra1_0x0037_0x00=1500 + +# vol56 +hwmon_in.mode_0x0038_0x00=config +hwmon_in.int_cons_0x0038_0x00=3 +hwmon_in.src_0x0038_0x00=file +hwmon_in.frmt_0x0038_0x00=buf +hwmon_in.fpath_0x0038_0x00=/sys/bus/i2c/devices/97-0070/hwmon/ +hwmon_in.addr_0x0038_0x00=0 +hwmon_in.len_0x0038_0x00=8 +hwmon_in.bit_offset_0x0038_0x00=0 +hwmon_in.str_cons_0x0038_0x00=in3_input +hwmon_in.mode_0x0038_0x01=str_constant +hwmon_in.str_cons_0x0038_0x01=OSFP_VDD3.3V_B8 +hwmon_in.mode_0x0038_0x02=str_constant +hwmon_in.str_cons_0x0038_0x02=xdpe12284c +hwmon_in.mode_0x0038_0x03=constant +hwmon_in.int_cons_0x0038_0x03=3630 +hwmon_in.mode_0x0038_0x05=constant +hwmon_in.int_cons_0x0038_0x05=2970 +hwmon_in.mode_0x0038_0x08=constant +hwmon_in.int_cons_0x0038_0x08=3300 +hwmon_in.mode_0x0038_0x07=constant +hwmon_in.int_cons_0x0038_0x07=12 +hwmon_in.int_extra1_0x0038_0x00=1500 + +# vol57 +hwmon_in.mode_0x0039_0x00=config +hwmon_in.int_cons_0x0039_0x00=0 +hwmon_in.src_0x0039_0x00=file +hwmon_in.frmt_0x0039_0x00=buf +hwmon_in.fpath_0x0039_0x00=/sys/bus/i2c/devices/69-0070/hwmon/ +hwmon_in.addr_0x0039_0x00=0 +hwmon_in.len_0x0039_0x00=8 +hwmon_in.bit_offset_0x0039_0x00= +hwmon_in.str_cons_0x0039_0x00=in3_input +hwmon_in.mode_0x0039_0x01=str_constant +hwmon_in.str_cons_0x0039_0x01=CPU_XDPE_VCCIN_V +hwmon_in.mode_0x0039_0x02=str_constant +hwmon_in.str_cons_0x0039_0x02=xdpe12284c +hwmon_in.mode_0x0039_0x03=constant +hwmon_in.int_cons_0x0039_0x03=2200 +hwmon_in.mode_0x0039_0x05=constant +hwmon_in.int_cons_0x0039_0x05=1350 +hwmon_in.mode_0x0039_0x08=constant +hwmon_in.int_cons_0x0039_0x08=1800 +hwmon_in.mode_0x0039_0x07=constant +hwmon_in.int_cons_0x0039_0x07=12 + +# vol58 +hwmon_in.mode_0x003a_0x00=config +hwmon_in.int_cons_0x003a_0x00=0 +hwmon_in.src_0x003a_0x00=file +hwmon_in.frmt_0x003a_0x00=buf +hwmon_in.fpath_0x003a_0x00=/sys/bus/i2c/devices/69-0070/hwmon/ +hwmon_in.addr_0x003a_0x00=0 +hwmon_in.len_0x003a_0x00=8 +hwmon_in.bit_offset_0x003a_0x00= +hwmon_in.str_cons_0x003a_0x00=in4_input +hwmon_in.mode_0x003a_0x01=str_constant +hwmon_in.str_cons_0x003a_0x01=CPU_XDPE_P1V8_V +hwmon_in.mode_0x003a_0x02=str_constant +hwmon_in.str_cons_0x003a_0x02=xdpe12284c +hwmon_in.mode_0x003a_0x03=constant +hwmon_in.int_cons_0x003a_0x03=1910 +hwmon_in.mode_0x003a_0x05=constant +hwmon_in.int_cons_0x003a_0x05=1690 +hwmon_in.mode_0x003a_0x08=constant +hwmon_in.int_cons_0x003a_0x08=1800 +hwmon_in.mode_0x003a_0x07=constant +hwmon_in.int_cons_0x003a_0x07=12 + +# vol59 +hwmon_in.mode_0x003b_0x00=config +hwmon_in.int_cons_0x003b_0x00=0 +hwmon_in.src_0x003b_0x00=file +hwmon_in.frmt_0x003b_0x00=buf +hwmon_in.fpath_0x003b_0x00=/sys/bus/i2c/devices/69-006e/hwmon/ +hwmon_in.addr_0x003b_0x00=0 +hwmon_in.len_0x003b_0x00=8 +hwmon_in.bit_offset_0x003b_0x00= +hwmon_in.str_cons_0x003b_0x00=in3_input +hwmon_in.mode_0x003b_0x01=str_constant +hwmon_in.str_cons_0x003b_0x01=CPU_XDPE_P1V05_V +hwmon_in.mode_0x003b_0x02=str_constant +hwmon_in.str_cons_0x003b_0x02=xdpe12284c +hwmon_in.mode_0x003b_0x03=constant +hwmon_in.int_cons_0x003b_0x03=1160 +hwmon_in.mode_0x003b_0x05=constant +hwmon_in.int_cons_0x003b_0x05=954 +hwmon_in.mode_0x003b_0x08=constant +hwmon_in.int_cons_0x003b_0x08=1060 +hwmon_in.mode_0x003b_0x07=constant +hwmon_in.int_cons_0x003b_0x07=12 + +# vol60 +hwmon_in.mode_0x003c_0x00=config +hwmon_in.int_cons_0x003c_0x00=0 +hwmon_in.src_0x003c_0x00=file +hwmon_in.frmt_0x003c_0x00=buf +hwmon_in.fpath_0x003c_0x00=/sys/bus/i2c/devices/69-006e/hwmon/ +hwmon_in.addr_0x003c_0x00=0 +hwmon_in.len_0x003c_0x00=8 +hwmon_in.bit_offset_0x003c_0x00= +hwmon_in.str_cons_0x003c_0x00=in4_input +hwmon_in.mode_0x003c_0x01=str_constant +hwmon_in.str_cons_0x003c_0x01=CPU_XDPE_VNN_PCH_V +hwmon_in.mode_0x003c_0x02=str_constant +hwmon_in.str_cons_0x003c_0x02=xdpe12284c +hwmon_in.mode_0x003c_0x03=constant +hwmon_in.int_cons_0x003c_0x03=1320 +hwmon_in.mode_0x003c_0x05=constant +hwmon_in.int_cons_0x003c_0x05=540 +hwmon_in.mode_0x003c_0x08=constant +hwmon_in.int_cons_0x003c_0x08=1000 +hwmon_in.mode_0x003c_0x07=constant +hwmon_in.int_cons_0x003c_0x07=12 + +# vol61 +hwmon_in.mode_0x003d_0x00=config +hwmon_in.int_cons_0x003d_0x00=0 +hwmon_in.src_0x003d_0x00=file +hwmon_in.frmt_0x003d_0x00=buf +hwmon_in.fpath_0x003d_0x00=/sys/bus/i2c/devices/69-0068/hwmon/ +hwmon_in.addr_0x003d_0x00=0 +hwmon_in.len_0x003d_0x00=8 +hwmon_in.bit_offset_0x003d_0x00= +hwmon_in.str_cons_0x003d_0x00=in3_input +hwmon_in.mode_0x003d_0x01=str_constant +hwmon_in.str_cons_0x003d_0x01=CPU_XDPE_VNN_NAC_V +hwmon_in.mode_0x003d_0x02=str_constant +hwmon_in.str_cons_0x003d_0x02=xdpe12284c +hwmon_in.mode_0x003d_0x03=constant +hwmon_in.int_cons_0x003d_0x03=1320 +hwmon_in.mode_0x003d_0x05=constant +hwmon_in.int_cons_0x003d_0x05=540 +hwmon_in.mode_0x003d_0x08=constant +hwmon_in.int_cons_0x003d_0x08=1000 +hwmon_in.mode_0x003d_0x07=constant +hwmon_in.int_cons_0x003d_0x07=12 + +# vol62 +hwmon_in.mode_0x003e_0x00=config +hwmon_in.int_cons_0x003e_0x00=0 +hwmon_in.src_0x003e_0x00=file +hwmon_in.frmt_0x003e_0x00=buf +hwmon_in.fpath_0x003e_0x00=/sys/bus/i2c/devices/69-0068/hwmon/ +hwmon_in.addr_0x003e_0x00=0 +hwmon_in.len_0x003e_0x00=8 +hwmon_in.bit_offset_0x003e_0x00=0 +hwmon_in.str_cons_0x003e_0x00=in4_input +hwmon_in.mode_0x003e_0x01=str_constant +hwmon_in.str_cons_0x003e_0x01=CPU_XDPE_VCC_ANA_V +hwmon_in.mode_0x003e_0x02=str_constant +hwmon_in.str_cons_0x003e_0x02=xdpe12284c +hwmon_in.mode_0x003e_0x03=constant +hwmon_in.int_cons_0x003e_0x03=1100 +hwmon_in.mode_0x003e_0x05=constant +hwmon_in.int_cons_0x003e_0x05=900 +hwmon_in.mode_0x003e_0x08=constant +hwmon_in.int_cons_0x003e_0x08=1000 +hwmon_in.mode_0x003e_0x07=constant +hwmon_in.int_cons_0x003e_0x07=12 + +# vol63 +hwmon_in.mode_0x003f_0x00=config +hwmon_in.int_cons_0x003f_0x00=0 +hwmon_in.src_0x003f_0x00=file +hwmon_in.frmt_0x003f_0x00=buf +hwmon_in.fpath_0x003f_0x00=/sys/bus/i2c/devices/69-005e/hwmon/ +hwmon_in.addr_0x003f_0x00=0 +hwmon_in.len_0x003f_0x00=8 +hwmon_in.bit_offset_0x003f_0x00=0 +hwmon_in.str_cons_0x003f_0x00=in3_input +hwmon_in.mode_0x003f_0x01=str_constant +hwmon_in.str_cons_0x003f_0x01=CPU_XDPE_P1V2_VDDQ_V +hwmon_in.mode_0x003f_0x02=str_constant +hwmon_in.str_cons_0x003f_0x02=xdpe12284c +hwmon_in.mode_0x003f_0x03=constant +hwmon_in.int_cons_0x003f_0x03=1280 +hwmon_in.mode_0x003f_0x05=constant +hwmon_in.int_cons_0x003f_0x05=1120 +hwmon_in.mode_0x003f_0x08=constant +hwmon_in.int_cons_0x003f_0x08=1200 +hwmon_in.mode_0x003f_0x07=constant +hwmon_in.int_cons_0x003f_0x07=12 + +# vol64 +hwmon_in.mode_0x0040_0x00=config +hwmon_in.int_cons_0x0040_0x00=0 +hwmon_in.src_0x0040_0x00=file +hwmon_in.frmt_0x0040_0x00=buf +hwmon_in.fpath_0x0040_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0040_0x00=0 +hwmon_in.len_0x0040_0x00=8 +hwmon_in.bit_offset_0x0040_0x00= +hwmon_in.str_cons_0x0040_0x00=in1_input +hwmon_in.mode_0x0040_0x01=str_constant +hwmon_in.str_cons_0x0040_0x01=CPU_P1V05_V +hwmon_in.mode_0x0040_0x02=str_constant +hwmon_in.str_cons_0x0040_0x02=ucd90160 +hwmon_in.mode_0x0040_0x03=constant +hwmon_in.int_cons_0x0040_0x03=1160 +hwmon_in.mode_0x0040_0x05=constant +hwmon_in.int_cons_0x0040_0x05=954 +hwmon_in.mode_0x0040_0x08=constant +hwmon_in.int_cons_0x0040_0x08=1060 +hwmon_in.mode_0x0040_0x07=constant +hwmon_in.int_cons_0x0040_0x07=5 + +# vol65 +hwmon_in.mode_0x0041_0x00=config +hwmon_in.int_cons_0x0041_0x00=0 +hwmon_in.src_0x0041_0x00=file +hwmon_in.frmt_0x0041_0x00=buf +hwmon_in.fpath_0x0041_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0041_0x00=0 +hwmon_in.len_0x0041_0x00=8 +hwmon_in.bit_offset_0x0041_0x00= +hwmon_in.str_cons_0x0041_0x00=in2_input +hwmon_in.mode_0x0041_0x01=str_constant +hwmon_in.str_cons_0x0041_0x01=CPU_VCCIN_V +hwmon_in.mode_0x0041_0x02=str_constant +hwmon_in.str_cons_0x0041_0x02=ucd90160 +hwmon_in.mode_0x0041_0x03=constant +hwmon_in.int_cons_0x0041_0x03=2200 +hwmon_in.mode_0x0041_0x05=constant +hwmon_in.int_cons_0x0041_0x05=1350 +hwmon_in.mode_0x0041_0x08=constant +hwmon_in.int_cons_0x0041_0x08=1800 +hwmon_in.mode_0x0041_0x07=constant +hwmon_in.int_cons_0x0041_0x07=9 + +# vol66 +hwmon_in.mode_0x0042_0x00=config +hwmon_in.int_cons_0x0042_0x00=0 +hwmon_in.src_0x0042_0x00=file +hwmon_in.frmt_0x0042_0x00=buf +hwmon_in.fpath_0x0042_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0042_0x00=0 +hwmon_in.len_0x0042_0x00=8 +hwmon_in.bit_offset_0x0042_0x00= +hwmon_in.str_cons_0x0042_0x00=in3_input +hwmon_in.mode_0x0042_0x01=str_constant +hwmon_in.str_cons_0x0042_0x01=CPU_P1V2_VDDQ_V +hwmon_in.mode_0x0042_0x02=str_constant +hwmon_in.str_cons_0x0042_0x02=ucd90160 +hwmon_in.mode_0x0042_0x03=constant +hwmon_in.int_cons_0x0042_0x03=1280 +hwmon_in.mode_0x0042_0x05=constant +hwmon_in.int_cons_0x0042_0x05=1100 +hwmon_in.mode_0x0042_0x08=constant +hwmon_in.int_cons_0x0042_0x08=1210 +hwmon_in.mode_0x0042_0x07=constant +hwmon_in.int_cons_0x0042_0x07=6 + +# vol67 +hwmon_in.mode_0x0043_0x00=config +hwmon_in.int_cons_0x0043_0x00=0 +hwmon_in.src_0x0043_0x00=file +hwmon_in.frmt_0x0043_0x00=buf +hwmon_in.fpath_0x0043_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0043_0x00=0 +hwmon_in.len_0x0043_0x00=8 +hwmon_in.bit_offset_0x0043_0x00= +hwmon_in.str_cons_0x0043_0x00=in4_input +hwmon_in.mode_0x0043_0x01=str_constant +hwmon_in.str_cons_0x0043_0x01=CPU_P1V8_V +hwmon_in.mode_0x0043_0x02=str_constant +hwmon_in.str_cons_0x0043_0x02=ucd90160 +hwmon_in.mode_0x0043_0x03=constant +hwmon_in.int_cons_0x0043_0x03=1910 +hwmon_in.mode_0x0043_0x05=constant +hwmon_in.int_cons_0x0043_0x05=169- +hwmon_in.mode_0x0043_0x08=constant +hwmon_in.int_cons_0x0043_0x08=1800 +hwmon_in.mode_0x0043_0x07=constant +hwmon_in.int_cons_0x0043_0x07=9 + +# vol68 +hwmon_in.mode_0x0044_0x00=config +hwmon_in.int_cons_0x0044_0x00=0 +hwmon_in.src_0x0044_0x00=file +hwmon_in.frmt_0x0044_0x00=buf +hwmon_in.fpath_0x0044_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0044_0x00=0 +hwmon_in.len_0x0044_0x00=8 +hwmon_in.bit_offset_0x0044_0x00= +hwmon_in.str_cons_0x0044_0x00=in5_input +hwmon_in.mode_0x0044_0x01=str_constant +hwmon_in.str_cons_0x0044_0x01=CPU_P0V6_VTT_V +hwmon_in.mode_0x0044_0x02=str_constant +hwmon_in.str_cons_0x0044_0x02=ucd90160 +hwmon_in.mode_0x0044_0x03=constant +hwmon_in.int_cons_0x0044_0x03=682 +hwmon_in.mode_0x0044_0x05=constant +hwmon_in.int_cons_0x0044_0x05=558 +hwmon_in.mode_0x0044_0x08=constant +hwmon_in.int_cons_0x0044_0x08=615 +hwmon_in.mode_0x0044_0x07=constant +hwmon_in.int_cons_0x0044_0x07=3 + +# vol69 +hwmon_in.mode_0x0045_0x00=config +hwmon_in.int_cons_0x0045_0x00=0 +hwmon_in.src_0x0045_0x00=file +hwmon_in.frmt_0x0045_0x00=buf +hwmon_in.fpath_0x0045_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0045_0x00=0 +hwmon_in.len_0x0045_0x00=8 +hwmon_in.bit_offset_0x0045_0x00= +hwmon_in.str_cons_0x0045_0x00=in6_input +hwmon_in.mode_0x0045_0x01=str_constant +hwmon_in.str_cons_0x0045_0x01=CPU_VNN_PCH_V +hwmon_in.mode_0x0045_0x02=str_constant +hwmon_in.str_cons_0x0045_0x02=ucd90160 +hwmon_in.mode_0x0045_0x03=constant +hwmon_in.int_cons_0x0045_0x03=1320 +hwmon_in.mode_0x0045_0x05=constant +hwmon_in.int_cons_0x0045_0x05=540 +hwmon_in.mode_0x0045_0x08=constant +hwmon_in.int_cons_0x0045_0x08=1000 +hwmon_in.mode_0x0045_0x07=constant +hwmon_in.int_cons_0x0045_0x07=5 + +# vol70 +hwmon_in.mode_0x0046_0x00=config +hwmon_in.int_cons_0x0046_0x00=0 +hwmon_in.src_0x0046_0x00=file +hwmon_in.frmt_0x0046_0x00=buf +hwmon_in.fpath_0x0046_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0046_0x00=0 +hwmon_in.len_0x0046_0x00=8 +hwmon_in.bit_offset_0x0046_0x00= +hwmon_in.str_cons_0x0046_0x00=in7_input +hwmon_in.mode_0x0046_0x01=str_constant +hwmon_in.str_cons_0x0046_0x01=CPU_VNN_NAC_V +hwmon_in.mode_0x0046_0x02=str_constant +hwmon_in.str_cons_0x0046_0x02=ucd90160 +hwmon_in.mode_0x0046_0x03=constant +hwmon_in.int_cons_0x0046_0x03=1320 +hwmon_in.mode_0x0046_0x05=constant +hwmon_in.int_cons_0x0046_0x05=540 +hwmon_in.mode_0x0046_0x08=constant +hwmon_in.int_cons_0x0046_0x08=1000 +hwmon_in.mode_0x0046_0x07=constant +hwmon_in.int_cons_0x0046_0x07=5 + +# vol71 +hwmon_in.mode_0x0047_0x00=config +hwmon_in.int_cons_0x0047_0x00=0 +hwmon_in.src_0x0047_0x00=file +hwmon_in.frmt_0x0047_0x00=buf +hwmon_in.fpath_0x0047_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0047_0x00=0 +hwmon_in.len_0x0047_0x00=8 +hwmon_in.bit_offset_0x0047_0x00= +hwmon_in.str_cons_0x0047_0x00=in8_input +hwmon_in.mode_0x0047_0x01=str_constant +hwmon_in.str_cons_0x0047_0x01=CPU_P2V5_VPP_V +hwmon_in.mode_0x0047_0x02=str_constant +hwmon_in.str_cons_0x0047_0x02=ucd90160 +hwmon_in.mode_0x0047_0x03=constant +hwmon_in.int_cons_0x0047_0x03=2750 +hwmon_in.mode_0x0047_0x05=constant +hwmon_in.int_cons_0x0047_0x05=2250 +hwmon_in.mode_0x0047_0x08=constant +hwmon_in.int_cons_0x0047_0x08=2500 +hwmon_in.mode_0x0047_0x07=constant +hwmon_in.int_cons_0x0047_0x07=12 + +# vol72 +hwmon_in.mode_0x0048_0x00=config +hwmon_in.int_cons_0x0048_0x00=0 +hwmon_in.src_0x0048_0x00=file +hwmon_in.frmt_0x0048_0x00=buf +hwmon_in.fpath_0x0048_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0048_0x00=0 +hwmon_in.len_0x0048_0x00=8 +hwmon_in.bit_offset_0x0048_0x00= +hwmon_in.str_cons_0x0048_0x00=in9_input +hwmon_in.mode_0x0048_0x01=str_constant +hwmon_in.str_cons_0x0048_0x01=CPU_VCC_ANA_V +hwmon_in.mode_0x0048_0x02=str_constant +hwmon_in.str_cons_0x0048_0x02=ucd90160 +hwmon_in.mode_0x0048_0x03=constant +hwmon_in.int_cons_0x0048_0x03=1100 +hwmon_in.mode_0x0048_0x05=constant +hwmon_in.int_cons_0x0048_0x05=900 +hwmon_in.mode_0x0048_0x08=constant +hwmon_in.int_cons_0x0048_0x08=1000 +hwmon_in.mode_0x0048_0x07=constant +hwmon_in.int_cons_0x0048_0x07=5 + +# vol73 +hwmon_in.mode_0x0049_0x00=config +hwmon_in.int_cons_0x0049_0x00=0 +hwmon_in.src_0x0049_0x00=file +hwmon_in.frmt_0x0049_0x00=buf +hwmon_in.fpath_0x0049_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x0049_0x00=0 +hwmon_in.len_0x0049_0x00=8 +hwmon_in.bit_offset_0x0049_0x00= +hwmon_in.str_cons_0x0049_0x00=in10_input +hwmon_in.mode_0x0049_0x01=str_constant +hwmon_in.str_cons_0x0049_0x01=CPU_P3V3_STBY_V +hwmon_in.mode_0x0049_0x02=str_constant +hwmon_in.str_cons_0x0049_0x02=ucd90160 +hwmon_in.mode_0x0049_0x03=constant +hwmon_in.int_cons_0x0049_0x03=3630 +hwmon_in.mode_0x0049_0x05=constant +hwmon_in.int_cons_0x0049_0x05=2970 +hwmon_in.mode_0x0049_0x08=constant +hwmon_in.int_cons_0x0049_0x08=3300 +hwmon_in.mode_0x0049_0x07=constant +hwmon_in.int_cons_0x0049_0x07=16 + +# vol74 +hwmon_in.mode_0x004a_0x00=config +hwmon_in.int_cons_0x004a_0x00=0 +hwmon_in.src_0x004a_0x00=file +hwmon_in.frmt_0x004a_0x00=buf +hwmon_in.fpath_0x004a_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x004a_0x00=0 +hwmon_in.len_0x004a_0x00=8 +hwmon_in.bit_offset_0x004a_0x00= +hwmon_in.str_cons_0x004a_0x00=in11_input +hwmon_in.mode_0x004a_0x01=str_constant +hwmon_in.str_cons_0x004a_0x01=CPU_P5V_AUX_V +hwmon_in.mode_0x004a_0x02=str_constant +hwmon_in.str_cons_0x004a_0x02=ucd90160 +hwmon_in.mode_0x004a_0x03=constant +hwmon_in.int_cons_0x004a_0x03=5750 +hwmon_in.mode_0x004a_0x05=constant +hwmon_in.int_cons_0x004a_0x05=4000 +hwmon_in.mode_0x004a_0x08=constant +hwmon_in.int_cons_0x004a_0x08=5000 +hwmon_in.mode_0x004a_0x07=constant +hwmon_in.int_cons_0x004a_0x07=25 + +# vol75 +hwmon_in.mode_0x004b_0x00=config +hwmon_in.int_cons_0x004b_0x00=0 +hwmon_in.src_0x004b_0x00=file +hwmon_in.frmt_0x004b_0x00=buf +hwmon_in.fpath_0x004b_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x004b_0x00=0 +hwmon_in.len_0x004b_0x00=8 +hwmon_in.bit_offset_0x004b_0x00= +hwmon_in.str_cons_0x004b_0x00=in12_input +hwmon_in.mode_0x004b_0x01=str_constant +hwmon_in.str_cons_0x004b_0x01=CPU_P1V8_AUX_NAC_V +hwmon_in.mode_0x004b_0x02=str_constant +hwmon_in.str_cons_0x004b_0x02=ucd90160 +hwmon_in.mode_0x004b_0x03=constant +hwmon_in.int_cons_0x004b_0x03=1910 +hwmon_in.mode_0x004b_0x05=constant +hwmon_in.int_cons_0x004b_0x05=1690 +hwmon_in.mode_0x004b_0x08=constant +hwmon_in.int_cons_0x004b_0x08=1800 +hwmon_in.mode_0x004b_0x07=constant +hwmon_in.int_cons_0x004b_0x07=9 + +# vol76 +hwmon_in.mode_0x004c_0x00=config +hwmon_in.int_cons_0x004c_0x00=0 +hwmon_in.src_0x004c_0x00=file +hwmon_in.frmt_0x004c_0x00=buf +hwmon_in.fpath_0x004c_0x00=/sys/bus/i2c/devices/69-005f/hwmon/ +hwmon_in.addr_0x004c_0x00=0 +hwmon_in.len_0x004c_0x00=8 +hwmon_in.bit_offset_0x004c_0x00= +hwmon_in.str_cons_0x004c_0x00=in13_input +hwmon_in.mode_0x004c_0x01=str_constant +hwmon_in.str_cons_0x004c_0x01=CPU_P3V3_AUX_V +hwmon_in.mode_0x004c_0x02=str_constant +hwmon_in.str_cons_0x004c_0x02=ucd90160 +hwmon_in.mode_0x004c_0x03=constant +hwmon_in.int_cons_0x004c_0x03=3630 +hwmon_in.mode_0x004c_0x05=constant +hwmon_in.int_cons_0x004c_0x05=2970 +hwmon_in.mode_0x004c_0x08=constant +hwmon_in.int_cons_0x004c_0x08=3300 +hwmon_in.mode_0x004c_0x07=constant +hwmon_in.int_cons_0x004c_0x07=16 + +# vol77 FANA_VDD3.3V +hwmon_in.mode_0x004d_0x00=config +hwmon_in.int_cons_0x004d_0x00=0 +hwmon_in.src_0x004d_0x00=cpld +hwmon_in.frmt_0x004d_0x00=num_bytes +hwmon_in.addr_0x004d_0x00=0x000600e8 +hwmon_in.len_0x004d_0x00=2 +hwmon_in.int_extra1_0x004d_0x00=0x000600e8 +hwmon_in.int_extra2_0x004d_0x00=2000 +hwmon_in.int_extra3_0x004d_0x00=1 + +hwmon_in.mode_0x004d_0x01=str_constant +hwmon_in.str_cons_0x004d_0x01=FANA_VDD3.3V + +hwmon_in.mode_0x004d_0x02=str_constant +hwmon_in.str_cons_0x004d_0x02=cpld + +hwmon_in.mode_0x004d_0x03=str_constant +hwmon_in.str_cons_0x004d_0x03=3630 + +hwmon_in.mode_0x004d_0x05=str_constant +hwmon_in.str_cons_0x004d_0x05=2970 + +# vol78 FANB_VDD3.3V +hwmon_in.mode_0x004e_0x00=config +hwmon_in.int_cons_0x004e_0x00=0 +hwmon_in.src_0x004e_0x00=cpld +hwmon_in.frmt_0x004e_0x00=num_bytes +hwmon_in.addr_0x004e_0x00=0x000600ea +hwmon_in.len_0x004e_0x00=2 +hwmon_in.int_extra1_0x004e_0x00=0x000600ea +hwmon_in.int_extra2_0x004e_0x00=2000 +hwmon_in.int_extra3_0x004e_0x00=1 + +hwmon_in.mode_0x004e_0x01=str_constant +hwmon_in.str_cons_0x004e_0x01=FANB_VDD3.3V + +hwmon_in.mode_0x004e_0x02=str_constant +hwmon_in.str_cons_0x004e_0x02=cpld + +hwmon_in.mode_0x004e_0x03=str_constant +hwmon_in.str_cons_0x004e_0x03=3630 + +hwmon_in.mode_0x004e_0x05=str_constant +hwmon_in.str_cons_0x004e_0x05=2970 + +# vol79 FANC_VDD3.3V +hwmon_in.mode_0x004f_0x00=config +hwmon_in.int_cons_0x004f_0x00=0 +hwmon_in.src_0x004f_0x00=cpld +hwmon_in.frmt_0x004f_0x00=num_bytes +hwmon_in.addr_0x004f_0x00=0x000600ec +hwmon_in.len_0x004f_0x00=2 +hwmon_in.int_extra1_0x004f_0x00=0x000600ec +hwmon_in.int_extra2_0x004f_0x00=2000 +hwmon_in.int_extra3_0x004f_0x00=1 + +hwmon_in.mode_0x004f_0x01=str_constant +hwmon_in.str_cons_0x004f_0x01=FANC_VDD3.3V + +hwmon_in.mode_0x004f_0x02=str_constant +hwmon_in.str_cons_0x004f_0x02=cpld + +hwmon_in.mode_0x004f_0x03=str_constant +hwmon_in.str_cons_0x004f_0x03=3630 + +hwmon_in.mode_0x004f_0x05=str_constant +hwmon_in.str_cons_0x004f_0x05=2970 + +# vol80 FAND_VDD3.3V +hwmon_in.mode_0x0050_0x00=config +hwmon_in.int_cons_0x0050_0x00=0 +hwmon_in.src_0x0050_0x00=cpld +hwmon_in.frmt_0x0050_0x00=num_bytes +hwmon_in.addr_0x0050_0x00=0x000600ee +hwmon_in.len_0x0050_0x00=2 +hwmon_in.int_extra1_0x0050_0x00=0x000600ee +hwmon_in.int_extra2_0x0050_0x00=2000 +hwmon_in.int_extra3_0x0050_0x00=1 + +hwmon_in.mode_0x0050_0x01=str_constant +hwmon_in.str_cons_0x0050_0x01=FAND_VDD3.3V + +hwmon_in.mode_0x0050_0x02=str_constant +hwmon_in.str_cons_0x0050_0x02=cpld + +hwmon_in.mode_0x0050_0x03=str_constant +hwmon_in.str_cons_0x0050_0x03=3630 + +hwmon_in.mode_0x0050_0x05=str_constant +hwmon_in.str_cons_0x0050_0x05=2970 + +# vol81 FAN_VDD12V_1 +hwmon_in.mode_0x0051_0x00=config +hwmon_in.int_cons_0x0051_0x00=0 +hwmon_in.src_0x0051_0x00=cpld +hwmon_in.frmt_0x0051_0x00=num_bytes +hwmon_in.addr_0x0051_0x00=0x000600e0 +hwmon_in.len_0x0051_0x00=2 +hwmon_in.int_extra1_0x0051_0x00=0x000600e0 +hwmon_in.int_extra2_0x0051_0x00=7070 +hwmon_in.int_extra3_0x0051_0x00=1 + +hwmon_in.mode_0x0051_0x01=str_constant +hwmon_in.str_cons_0x0051_0x01=FAN_VDD12V_1 + +hwmon_in.mode_0x0051_0x02=str_constant +hwmon_in.str_cons_0x0051_0x02=cpld + +hwmon_in.mode_0x0051_0x03=str_constant +hwmon_in.str_cons_0x0051_0x03=13200 + +hwmon_in.mode_0x0051_0x05=str_constant +hwmon_in.str_cons_0x0051_0x05=10800 + +# vol82 FAN_VDD12V_2 +hwmon_in.mode_0x0052_0x00=config +hwmon_in.int_cons_0x0052_0x00=0 +hwmon_in.src_0x0052_0x00=cpld +hwmon_in.frmt_0x0052_0x00=num_bytes +hwmon_in.addr_0x0052_0x00=0x000600e2 +hwmon_in.len_0x0052_0x00=2 +hwmon_in.int_extra1_0x0052_0x00=0x000600e2 +hwmon_in.int_extra2_0x0052_0x00=7070 +hwmon_in.int_extra3_0x0052_0x00=1 + +hwmon_in.mode_0x0052_0x01=str_constant +hwmon_in.str_cons_0x0052_0x01=FAN_VDD12V_2 + +hwmon_in.mode_0x0052_0x02=str_constant +hwmon_in.str_cons_0x0052_0x02=cpld + +hwmon_in.mode_0x0052_0x03=str_constant +hwmon_in.str_cons_0x0052_0x03=13200 + +hwmon_in.mode_0x0052_0x05=str_constant +hwmon_in.str_cons_0x0052_0x05=10800 + +# vol83 FAN_VDD12V_3 +hwmon_in.mode_0x0053_0x00=config +hwmon_in.int_cons_0x0053_0x00=0 +hwmon_in.src_0x0053_0x00=cpld +hwmon_in.frmt_0x0053_0x00=num_bytes +hwmon_in.addr_0x0053_0x00=0x000600e4 +hwmon_in.len_0x0053_0x00=2 +hwmon_in.int_extra1_0x0053_0x00=0x000600e4 +hwmon_in.int_extra2_0x0053_0x00=7070 +hwmon_in.int_extra3_0x0053_0x00=1 + +hwmon_in.mode_0x0053_0x01=str_constant +hwmon_in.str_cons_0x0053_0x01=FAN_VDD12V_3 + +hwmon_in.mode_0x0053_0x02=str_constant +hwmon_in.str_cons_0x0053_0x02=cpld + +hwmon_in.mode_0x0053_0x03=str_constant +hwmon_in.str_cons_0x0053_0x03=13200 + +hwmon_in.mode_0x0053_0x05=str_constant +hwmon_in.str_cons_0x0053_0x05=10800 + +# vol84 FAN_VDD12V_4 +hwmon_in.mode_0x0054_0x00=config +hwmon_in.int_cons_0x0054_0x00=0 +hwmon_in.src_0x0054_0x00=cpld +hwmon_in.frmt_0x0054_0x00=num_bytes +hwmon_in.addr_0x0054_0x00=0x000600e6 +hwmon_in.len_0x0054_0x00=2 +hwmon_in.int_extra1_0x0054_0x00=0x000600e6 +hwmon_in.int_extra2_0x0054_0x00=7070 +hwmon_in.int_extra3_0x0054_0x00=1 + +hwmon_in.mode_0x0054_0x01=str_constant +hwmon_in.str_cons_0x0054_0x01=FAN_VDD12V_4 + +hwmon_in.mode_0x0054_0x02=str_constant +hwmon_in.str_cons_0x0054_0x02=cpld + +hwmon_in.mode_0x0054_0x03=str_constant +hwmon_in.str_cons_0x0054_0x03=13200 + +hwmon_in.mode_0x0054_0x05=str_constant +hwmon_in.str_cons_0x0054_0x05=10800 + +# vol85 +hwmon_in.mode_0x0055_0x00=config +hwmon_in.int_cons_0x0055_0x00=0 +hwmon_in.src_0x0055_0x00=cpld +hwmon_in.frmt_0x0055_0x00=num_bytes +hwmon_in.addr_0x0055_0x00=0x00040092 +hwmon_in.len_0x0055_0x00=2 +hwmon_in.int_extra1_0x0055_0x00=0x00040092 +hwmon_in.int_extra2_0x0055_0x00=2000 +hwmon_in.int_extra3_0x0055_0x00=1 + +hwmon_in.mode_0x0055_0x01=str_constant +hwmon_in.str_cons_0x0055_0x01=OSFP_CPLD_VDD3.3V_A1 + +hwmon_in.mode_0x0055_0x02=str_constant +hwmon_in.str_cons_0x0055_0x02=cpld + +hwmon_in.mode_0x0055_0x03=str_constant +hwmon_in.str_cons_0x0055_0x03=3630 + +hwmon_in.mode_0x0055_0x05=str_constant +hwmon_in.str_cons_0x0055_0x05=2970 + +# vol86 +hwmon_in.mode_0x0056_0x00=config +hwmon_in.int_cons_0x0056_0x00=0 +hwmon_in.src_0x0056_0x00=cpld +hwmon_in.frmt_0x0056_0x00=num_bytes +hwmon_in.addr_0x0056_0x00=0x00040094 +hwmon_in.len_0x0056_0x00=2 +hwmon_in.int_extra1_0x0056_0x00=0x00040094 +hwmon_in.int_extra2_0x0056_0x00=2000 +hwmon_in.int_extra3_0x0056_0x00=1 + +hwmon_in.mode_0x0056_0x01=str_constant +hwmon_in.str_cons_0x0056_0x01=OSFP_CPLD_VDD3.3V_A2 + +hwmon_in.mode_0x0056_0x02=str_constant +hwmon_in.str_cons_0x0056_0x02=cpld + +hwmon_in.mode_0x0056_0x03=str_constant +hwmon_in.str_cons_0x0056_0x03=3630 + +hwmon_in.mode_0x0056_0x05=str_constant +hwmon_in.str_cons_0x0056_0x05=2970 + +# vol87 +hwmon_in.mode_0x0057_0x00=config +hwmon_in.int_cons_0x0057_0x00=0 +hwmon_in.src_0x0057_0x00=cpld +hwmon_in.frmt_0x0057_0x00=num_bytes +hwmon_in.addr_0x0057_0x00=0x00040096 +hwmon_in.len_0x0057_0x00=2 +hwmon_in.int_extra1_0x0057_0x00=0x00040096 +hwmon_in.int_extra2_0x0057_0x00=2000 +hwmon_in.int_extra3_0x0057_0x00=1 + +hwmon_in.mode_0x0057_0x01=str_constant +hwmon_in.str_cons_0x0057_0x01=OSFP_CPLD_VDD3.3V_A3 + +hwmon_in.mode_0x0057_0x02=str_constant +hwmon_in.str_cons_0x0057_0x02=cpld + +hwmon_in.mode_0x0057_0x03=str_constant +hwmon_in.str_cons_0x0057_0x03=3630 + +hwmon_in.mode_0x0057_0x05=str_constant +hwmon_in.str_cons_0x0057_0x05=2970 + +# vol88 +hwmon_in.mode_0x0058_0x00=config +hwmon_in.int_cons_0x0058_0x00=0 +hwmon_in.src_0x0058_0x00=cpld +hwmon_in.frmt_0x0058_0x00=num_bytes +hwmon_in.addr_0x0058_0x00=0x00040098 +hwmon_in.len_0x0058_0x00=2 +hwmon_in.int_extra1_0x0058_0x00=0x00040098 +hwmon_in.int_extra2_0x0058_0x00=2000 +hwmon_in.int_extra3_0x0058_0x00=1 + +hwmon_in.mode_0x0058_0x01=str_constant +hwmon_in.str_cons_0x0058_0x01=OSFP_CPLD_VDD3.3V_A4 + +hwmon_in.mode_0x0058_0x02=str_constant +hwmon_in.str_cons_0x0058_0x02=cpld + +hwmon_in.mode_0x0058_0x03=str_constant +hwmon_in.str_cons_0x0058_0x03=3630 + +hwmon_in.mode_0x0058_0x05=str_constant +hwmon_in.str_cons_0x0058_0x05=2970 + +# vol89 +hwmon_in.mode_0x0059_0x00=config +hwmon_in.int_cons_0x0059_0x00=0 +hwmon_in.src_0x0059_0x00=cpld +hwmon_in.frmt_0x0059_0x00=num_bytes +hwmon_in.addr_0x0059_0x00=0x0004009a +hwmon_in.len_0x0059_0x00=2 +hwmon_in.int_extra1_0x0059_0x00=0x0004009a +hwmon_in.int_extra2_0x0059_0x00=2000 +hwmon_in.int_extra3_0x0059_0x00=1 + +hwmon_in.mode_0x0059_0x01=str_constant +hwmon_in.str_cons_0x0059_0x01=OSFP_CPLD_VDD3.3V_A5 + +hwmon_in.mode_0x0059_0x02=str_constant +hwmon_in.str_cons_0x0059_0x02=cpld + +hwmon_in.mode_0x0059_0x03=str_constant +hwmon_in.str_cons_0x0059_0x03=3630 + +hwmon_in.mode_0x0059_0x05=str_constant +hwmon_in.str_cons_0x0059_0x05=2970 + +# vol90 +hwmon_in.mode_0x005a_0x00=config +hwmon_in.int_cons_0x005a_0x00=0 +hwmon_in.src_0x005a_0x00=cpld +hwmon_in.frmt_0x005a_0x00=num_bytes +hwmon_in.addr_0x005a_0x00=0x0004009c +hwmon_in.len_0x005a_0x00=2 +hwmon_in.int_extra1_0x005a_0x00=0x0004009c +hwmon_in.int_extra2_0x005a_0x00=2000 +hwmon_in.int_extra3_0x005a_0x00=1 + +hwmon_in.mode_0x005a_0x01=str_constant +hwmon_in.str_cons_0x005a_0x01=OSFP_CPLD_VDD3.3V_A6 + +hwmon_in.mode_0x005a_0x02=str_constant +hwmon_in.str_cons_0x005a_0x02=cpld + +hwmon_in.mode_0x005a_0x03=str_constant +hwmon_in.str_cons_0x005a_0x03=3630 + +hwmon_in.mode_0x005a_0x05=str_constant +hwmon_in.str_cons_0x005a_0x05=2970 + +# vol91 +hwmon_in.mode_0x005b_0x00=config +hwmon_in.int_cons_0x005b_0x00=0 +hwmon_in.src_0x005b_0x00=cpld +hwmon_in.frmt_0x005b_0x00=num_bytes +hwmon_in.addr_0x005b_0x00=0x0004009e +hwmon_in.len_0x005b_0x00=2 +hwmon_in.int_extra1_0x005b_0x00=0x0004009e +hwmon_in.int_extra2_0x005b_0x00=2000 +hwmon_in.int_extra3_0x005b_0x00=1 + +hwmon_in.mode_0x005b_0x01=str_constant +hwmon_in.str_cons_0x005b_0x01=OSFP_CPLD_VDD3.3V_A7 + +hwmon_in.mode_0x005b_0x02=str_constant +hwmon_in.str_cons_0x005b_0x02=cpld + +hwmon_in.mode_0x005b_0x03=str_constant +hwmon_in.str_cons_0x005b_0x03=3630 + +hwmon_in.mode_0x005b_0x05=str_constant +hwmon_in.str_cons_0x005b_0x05=2970 + +# vol92 +hwmon_in.mode_0x005c_0x00=config +hwmon_in.int_cons_0x005c_0x00=0 +hwmon_in.src_0x005c_0x00=cpld +hwmon_in.frmt_0x005c_0x00=num_bytes +hwmon_in.addr_0x005c_0x00=0x000400a0 +hwmon_in.len_0x005c_0x00=2 +hwmon_in.int_extra1_0x005c_0x00=0x000400a0 +hwmon_in.int_extra2_0x005c_0x00=2000 +hwmon_in.int_extra3_0x005c_0x00=1 + +hwmon_in.mode_0x005c_0x01=str_constant +hwmon_in.str_cons_0x005c_0x01=OSFP_CPLD_VDD3.3V_A8 + +hwmon_in.mode_0x005c_0x02=str_constant +hwmon_in.str_cons_0x005c_0x02=cpld + +hwmon_in.mode_0x005c_0x03=str_constant +hwmon_in.str_cons_0x005c_0x03=3630 + +hwmon_in.mode_0x005c_0x05=str_constant +hwmon_in.str_cons_0x005c_0x05=2970 + +# vol93 +hwmon_in.mode_0x005d_0x00=config +hwmon_in.int_cons_0x005d_0x00=0 +hwmon_in.src_0x005d_0x00=cpld +hwmon_in.frmt_0x005d_0x00=num_bytes +hwmon_in.addr_0x005d_0x00=0x000400a2 +hwmon_in.len_0x005d_0x00=2 +hwmon_in.int_extra1_0x005d_0x00=0x000400a2 +hwmon_in.int_extra2_0x005d_0x00=2000 +hwmon_in.int_extra3_0x005d_0x00=1 + +hwmon_in.mode_0x005d_0x01=str_constant +hwmon_in.str_cons_0x005d_0x01=OSFP_CPLD_VDD3.3V_B1 + +hwmon_in.mode_0x005d_0x02=str_constant +hwmon_in.str_cons_0x005d_0x02=cpld + +hwmon_in.mode_0x005d_0x03=str_constant +hwmon_in.str_cons_0x005d_0x03=3630 + +hwmon_in.mode_0x005d_0x05=str_constant +hwmon_in.str_cons_0x005d_0x05=2970 + +# vol94 +hwmon_in.mode_0x005e_0x00=config +hwmon_in.int_cons_0x005e_0x00=0 +hwmon_in.src_0x005e_0x00=cpld +hwmon_in.frmt_0x005e_0x00=num_bytes +hwmon_in.addr_0x005e_0x00=0x000400a4 +hwmon_in.len_0x005e_0x00=2 +hwmon_in.int_extra1_0x005e_0x00=0x000400a4 +hwmon_in.int_extra2_0x005e_0x00=2000 +hwmon_in.int_extra3_0x005e_0x00=1 + +hwmon_in.mode_0x005e_0x01=str_constant +hwmon_in.str_cons_0x005e_0x01=OSFP_CPLD_VDD3.3V_B2 + +hwmon_in.mode_0x005e_0x02=str_constant +hwmon_in.str_cons_0x005e_0x02=cpld + +hwmon_in.mode_0x005e_0x03=str_constant +hwmon_in.str_cons_0x005e_0x03=3630 + +hwmon_in.mode_0x005e_0x05=str_constant +hwmon_in.str_cons_0x005e_0x05=2970 + +# vol95 +hwmon_in.mode_0x005f_0x00=config +hwmon_in.int_cons_0x005f_0x00=0 +hwmon_in.src_0x005f_0x00=cpld +hwmon_in.frmt_0x005f_0x00=num_bytes +hwmon_in.addr_0x005f_0x00=0x000400a6 +hwmon_in.len_0x005f_0x00=2 +hwmon_in.int_extra1_0x005f_0x00=0x000400a6 +hwmon_in.int_extra2_0x005f_0x00=2000 +hwmon_in.int_extra3_0x005f_0x00=1 + +hwmon_in.mode_0x005f_0x01=str_constant +hwmon_in.str_cons_0x005f_0x01=OSFP_CPLD_VDD3.3V_B3 + +hwmon_in.mode_0x005f_0x02=str_constant +hwmon_in.str_cons_0x005f_0x02=cpld + +hwmon_in.mode_0x005f_0x03=str_constant +hwmon_in.str_cons_0x005f_0x03=3630 + +hwmon_in.mode_0x005f_0x05=str_constant +hwmon_in.str_cons_0x005f_0x05=2970 + +# vol96 +hwmon_in.mode_0x0060_0x00=config +hwmon_in.int_cons_0x0060_0x00=0 +hwmon_in.src_0x0060_0x00=cpld +hwmon_in.frmt_0x0060_0x00=num_bytes +hwmon_in.addr_0x0060_0x00=0x000400a8 +hwmon_in.len_0x0060_0x00=2 +hwmon_in.int_extra1_0x0060_0x00=0x000400a8 +hwmon_in.int_extra2_0x0060_0x00=2000 +hwmon_in.int_extra3_0x0060_0x00=1 + +hwmon_in.mode_0x0060_0x01=str_constant +hwmon_in.str_cons_0x0060_0x01=OSFP_CPLD_VDD3.3V_B4 + +hwmon_in.mode_0x0060_0x02=str_constant +hwmon_in.str_cons_0x0060_0x02=cpld + +hwmon_in.mode_0x0060_0x03=str_constant +hwmon_in.str_cons_0x0060_0x03=3630 + +hwmon_in.mode_0x0060_0x05=str_constant +hwmon_in.str_cons_0x0060_0x05=2970 + +# vol97 +hwmon_in.mode_0x0061_0x00=config +hwmon_in.int_cons_0x0061_0x00=0 +hwmon_in.src_0x0061_0x00=cpld +hwmon_in.frmt_0x0061_0x00=num_bytes +hwmon_in.addr_0x0061_0x00=0x000400aa +hwmon_in.len_0x0061_0x00=2 +hwmon_in.int_extra1_0x0061_0x00=0x000400aa +hwmon_in.int_extra2_0x0061_0x00=2000 +hwmon_in.int_extra3_0x0061_0x00=1 + +hwmon_in.mode_0x0061_0x01=str_constant +hwmon_in.str_cons_0x0061_0x01=OSFP_CPLD_VDD3.3V_B5 + +hwmon_in.mode_0x0061_0x02=str_constant +hwmon_in.str_cons_0x0061_0x02=cpld + +hwmon_in.mode_0x0061_0x03=str_constant +hwmon_in.str_cons_0x0061_0x03=3630 + +hwmon_in.mode_0x0061_0x05=str_constant +hwmon_in.str_cons_0x0061_0x05=2970 + +# vol98 +hwmon_in.mode_0x0062_0x00=config +hwmon_in.int_cons_0x0062_0x00=0 +hwmon_in.src_0x0062_0x00=cpld +hwmon_in.frmt_0x0062_0x00=num_bytes +hwmon_in.addr_0x0062_0x00=0x000400ac +hwmon_in.len_0x0062_0x00=2 +hwmon_in.int_extra1_0x0062_0x00=0x000400ac +hwmon_in.int_extra2_0x0062_0x00=2000 +hwmon_in.int_extra3_0x0062_0x00=1 + +hwmon_in.mode_0x0062_0x01=str_constant +hwmon_in.str_cons_0x0062_0x01=OSFP_CPLD_VDD3.3V_B6 + +hwmon_in.mode_0x0062_0x02=str_constant +hwmon_in.str_cons_0x0062_0x02=cpld + +hwmon_in.mode_0x0062_0x03=str_constant +hwmon_in.str_cons_0x0062_0x03=3630 + +hwmon_in.mode_0x0062_0x05=str_constant +hwmon_in.str_cons_0x0062_0x05=2970 + +# vol99 +hwmon_in.mode_0x0063_0x00=config +hwmon_in.int_cons_0x0063_0x00=0 +hwmon_in.src_0x0063_0x00=cpld +hwmon_in.frmt_0x0063_0x00=num_bytes +hwmon_in.addr_0x0063_0x00=0x000400ae +hwmon_in.len_0x0063_0x00=2 +hwmon_in.int_extra1_0x0063_0x00=0x000400ae +hwmon_in.int_extra2_0x0063_0x00=2000 +hwmon_in.int_extra3_0x0063_0x00=1 + +hwmon_in.mode_0x0063_0x01=str_constant +hwmon_in.str_cons_0x0063_0x01=OSFP_CPLD_VDD3.3V_B7 + +hwmon_in.mode_0x0063_0x02=str_constant +hwmon_in.str_cons_0x0063_0x02=cpld + +hwmon_in.mode_0x0063_0x03=str_constant +hwmon_in.str_cons_0x0063_0x03=3630 + +hwmon_in.mode_0x0063_0x05=str_constant +hwmon_in.str_cons_0x0063_0x05=2970 + +# vol100 +hwmon_in.mode_0x0064_0x00=config +hwmon_in.int_cons_0x0064_0x00=0 +hwmon_in.src_0x0064_0x00=cpld +hwmon_in.frmt_0x0064_0x00=num_bytes +hwmon_in.addr_0x0064_0x00=0x000400b0 +hwmon_in.len_0x0064_0x00=2 +hwmon_in.int_extra1_0x0064_0x00=0x000400b0 +hwmon_in.int_extra2_0x0064_0x00=2000 +hwmon_in.int_extra3_0x0064_0x00=1 + +hwmon_in.mode_0x0064_0x01=str_constant +hwmon_in.str_cons_0x0064_0x01=OSFP_CPLD_VDD3.3V_B8 + +hwmon_in.mode_0x0064_0x02=str_constant +hwmon_in.str_cons_0x0064_0x02=cpld + +hwmon_in.mode_0x0064_0x03=str_constant +hwmon_in.str_cons_0x0064_0x03=3630 + +hwmon_in.mode_0x0064_0x05=str_constant +hwmon_in.str_cons_0x0064_0x05=2970 + + +# vol101 +hwmon_in.mode_0x0065_0x00=config +hwmon_in.int_cons_0x0065_0x00=3 +hwmon_in.src_0x0065_0x00=file +hwmon_in.frmt_0x0065_0x00=buf +hwmon_in.fpath_0x0065_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x0065_0x00=0 +hwmon_in.len_0x0065_0x00=8 +hwmon_in.bit_offset_0x0065_0x00=0 +hwmon_in.str_cons_0x0065_0x00=in1_input +hwmon_in.mode_0x0065_0x01=str_constant +hwmon_in.str_cons_0x0065_0x01=VCC_3V3_BMC +hwmon_in.mode_0x0065_0x02=str_constant +hwmon_in.str_cons_0x0065_0x02=ucd9081 +hwmon_in.mode_0x0065_0x03=constant +hwmon_in.int_cons_0x0065_0x03=3630 +hwmon_in.mode_0x0065_0x05=constant +hwmon_in.int_cons_0x0065_0x05=2970 +hwmon_in.mode_0x0065_0x08=constant +hwmon_in.int_cons_0x0065_0x08=3300 +hwmon_in.mode_0x0065_0x07=constant +hwmon_in.int_cons_0x0065_0x07=5 +hwmon_in.int_extra1_0x0065_0x00=1500 + +# vol102 +hwmon_in.mode_0x0066_0x00=config +hwmon_in.int_cons_0x0066_0x00=3 +hwmon_in.src_0x0066_0x00=file +hwmon_in.frmt_0x0066_0x00=buf +hwmon_in.fpath_0x0066_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x0066_0x00=0 +hwmon_in.len_0x0066_0x00=8 +hwmon_in.bit_offset_0x0066_0x00=0 +hwmon_in.str_cons_0x0066_0x00=in2_input +hwmon_in.mode_0x0066_0x01=str_constant +hwmon_in.str_cons_0x0066_0x01=VCC_2V5_BMC +hwmon_in.mode_0x0066_0x02=str_constant +hwmon_in.str_cons_0x0066_0x02=ucd9081 +hwmon_in.mode_0x0066_0x03=constant +hwmon_in.int_cons_0x0066_0x03=2750 +hwmon_in.mode_0x0066_0x05=constant +hwmon_in.int_cons_0x0066_0x05=2250 +hwmon_in.mode_0x0066_0x08=constant +hwmon_in.int_cons_0x0066_0x08=2500 +hwmon_in.mode_0x0066_0x07=constant +hwmon_in.int_cons_0x0066_0x07=5 +hwmon_in.int_extra1_0x0066_0x00=1500 + + +# vol103 +hwmon_in.mode_0x0067_0x00=config +hwmon_in.int_cons_0x0067_0x00=0 +hwmon_in.src_0x0067_0x00=file +hwmon_in.frmt_0x0067_0x00=buf +hwmon_in.fpath_0x0067_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x0067_0x00=0 +hwmon_in.len_0x0067_0x00=8 +hwmon_in.bit_offset_0x0067_0x00= +hwmon_in.str_cons_0x0067_0x00=in3_input +hwmon_in.mode_0x0067_0x01=str_constant +hwmon_in.str_cons_0x0067_0x01=VCC_1V8_BMC +hwmon_in.mode_0x0067_0x02=str_constant +hwmon_in.str_cons_0x0067_0x02=ucd9081 +hwmon_in.mode_0x0067_0x03=constant +hwmon_in.int_cons_0x0067_0x03=1980 +hwmon_in.mode_0x0067_0x05=constant +hwmon_in.int_cons_0x0067_0x05=1620 +hwmon_in.mode_0x0067_0x08=constant +hwmon_in.int_cons_0x0067_0x08=1800 +hwmon_in.mode_0x0067_0x07=constant +hwmon_in.int_cons_0x0067_0x07=5 + +# vol104 +hwmon_in.mode_0x0068_0x00=config +hwmon_in.int_cons_0x0068_0x00=3 +hwmon_in.src_0x0068_0x00=file +hwmon_in.frmt_0x0068_0x00=buf +hwmon_in.fpath_0x0068_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x0068_0x00=0 +hwmon_in.len_0x0068_0x00=8 +hwmon_in.bit_offset_0x0068_0x00=0 +hwmon_in.str_cons_0x0068_0x00=in4_input +hwmon_in.mode_0x0068_0x01=str_constant +hwmon_in.str_cons_0x0068_0x01=VCC_3V3_RGM_BMC +hwmon_in.mode_0x0068_0x02=str_constant +hwmon_in.str_cons_0x0068_0x02=ucd9081 +hwmon_in.mode_0x0068_0x03=constant +hwmon_in.int_cons_0x0068_0x03=3630 +hwmon_in.mode_0x0068_0x05=constant +hwmon_in.int_cons_0x0068_0x05=2970 +hwmon_in.mode_0x0068_0x08=constant +hwmon_in.int_cons_0x0068_0x08=3300 +hwmon_in.mode_0x0068_0x07=constant +hwmon_in.int_cons_0x0068_0x07=5 +hwmon_in.int_extra1_0x0068_0x00=1500 + +# vol105 +hwmon_in.mode_0x0069_0x00=config +hwmon_in.int_cons_0x0069_0x00=0 +hwmon_in.src_0x0069_0x00=file +hwmon_in.frmt_0x0069_0x00=buf +hwmon_in.fpath_0x0069_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x0069_0x00=0 +hwmon_in.len_0x0069_0x00=8 +hwmon_in.bit_offset_0x0069_0x00= +hwmon_in.str_cons_0x0069_0x00=in5_input +hwmon_in.mode_0x0069_0x01=str_constant +hwmon_in.str_cons_0x0069_0x01=VCC_DDRVDDQ_BMC +hwmon_in.mode_0x0069_0x02=str_constant +hwmon_in.str_cons_0x0069_0x02=ucd9081 +hwmon_in.mode_0x0069_0x03=constant +hwmon_in.int_cons_0x0069_0x03=1320 +hwmon_in.mode_0x0069_0x05=constant +hwmon_in.int_cons_0x0069_0x05=1080 +hwmon_in.mode_0x0069_0x08=constant +hwmon_in.int_cons_0x0069_0x08=1200 +hwmon_in.mode_0x0069_0x07=constant +hwmon_in.int_cons_0x0069_0x07=5 + +# vol106 +hwmon_in.mode_0x006a_0x00=config +hwmon_in.int_cons_0x006a_0x00=0 +hwmon_in.src_0x006a_0x00=file +hwmon_in.frmt_0x006a_0x00=buf +hwmon_in.fpath_0x006a_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x006a_0x00=0 +hwmon_in.len_0x006a_0x00=8 +hwmon_in.bit_offset_0x006a_0x00= +hwmon_in.str_cons_0x006a_0x00=in6_input +hwmon_in.mode_0x006a_0x01=str_constant +hwmon_in.str_cons_0x006a_0x01=VCC_1V0_BMC +hwmon_in.mode_0x006a_0x02=str_constant +hwmon_in.str_cons_0x006a_0x02=ucd9081 +hwmon_in.mode_0x006a_0x03=constant +hwmon_in.int_cons_0x006a_0x03=1100 +hwmon_in.mode_0x006a_0x05=constant +hwmon_in.int_cons_0x006a_0x05=900 +hwmon_in.mode_0x006a_0x08=constant +hwmon_in.int_cons_0x006a_0x08=1000 +hwmon_in.mode_0x006a_0x07=constant +hwmon_in.int_cons_0x006a_0x07=5 + +# vol107 +hwmon_in.mode_0x006b_0x00=config +hwmon_in.int_cons_0x006b_0x00=0 +hwmon_in.src_0x006b_0x00=file +hwmon_in.frmt_0x006b_0x00=buf +hwmon_in.fpath_0x006b_0x00=/sys/bus/i2c/devices/72-0068/hwmon/ +hwmon_in.addr_0x006b_0x00=0 +hwmon_in.len_0x006b_0x00=8 +hwmon_in.bit_offset_0x006b_0x00= +hwmon_in.str_cons_0x006b_0x00=in7_input +hwmon_in.mode_0x006b_0x01=str_constant +hwmon_in.str_cons_0x006b_0x01=PE_RC_VCC18A_BMC +hwmon_in.mode_0x006b_0x02=str_constant +hwmon_in.str_cons_0x006b_0x02=ucd9081 +hwmon_in.mode_0x006b_0x03=constant +hwmon_in.int_cons_0x006b_0x03=1980 +hwmon_in.mode_0x006b_0x05=constant +hwmon_in.int_cons_0x006b_0x05=1620 +hwmon_in.mode_0x006b_0x08=constant +hwmon_in.int_cons_0x006b_0x08=1800 +hwmon_in.mode_0x006b_0x07=constant +hwmon_in.int_cons_0x006b_0x07=5 + +# vol108 +hwmon_in.mode_0x006c_0x00=config +hwmon_in.int_cons_0x006c_0x00=0 +hwmon_in.src_0x006c_0x00=cpld +hwmon_in.frmt_0x006c_0x00=num_bytes +hwmon_in.addr_0x006c_0x00=0x0005009a +hwmon_in.len_0x006c_0x00=2 +hwmon_in.int_extra1_0x006c_0x00=0x0005009a +hwmon_in.int_extra2_0x006c_0x00=2000 +hwmon_in.int_extra3_0x006c_0x00=1 + +hwmon_in.mode_0x006c_0x01=str_constant +hwmon_in.str_cons_0x006c_0x01=MGMT_VDD3.3V + +hwmon_in.mode_0x006c_0x02=str_constant +hwmon_in.str_cons_0x006c_0x02=cpld + +hwmon_in.mode_0x006c_0x03=str_constant +hwmon_in.str_cons_0x006c_0x03=3630 + +hwmon_in.mode_0x006c_0x05=str_constant +hwmon_in.str_cons_0x006c_0x05=2970 + +# vol109 +hwmon_in.mode_0x006d_0x00=config +hwmon_in.int_cons_0x006d_0x00=0 +hwmon_in.src_0x006d_0x00=cpld +hwmon_in.frmt_0x006d_0x00=num_bytes +hwmon_in.addr_0x006d_0x00=0x00050090 +hwmon_in.len_0x006d_0x00=2 +hwmon_in.int_extra1_0x006d_0x00=0x00050090 +hwmon_in.int_extra2_0x006d_0x00=2000 +hwmon_in.int_extra3_0x006d_0x00=1 + +hwmon_in.mode_0x006d_0x01=str_constant +hwmon_in.str_cons_0x006d_0x01=MGMT_VDD3.3V_PHY + +hwmon_in.mode_0x006d_0x02=str_constant +hwmon_in.str_cons_0x006d_0x02=cpld + +hwmon_in.mode_0x006d_0x03=str_constant +hwmon_in.str_cons_0x006d_0x03=3630 + +hwmon_in.mode_0x006d_0x05=str_constant +hwmon_in.str_cons_0x006d_0x05=2970 + +# vol110 +hwmon_in.mode_0x006e_0x00=config +hwmon_in.int_cons_0x006e_0x00=0 +hwmon_in.src_0x006e_0x00=cpld +hwmon_in.frmt_0x006e_0x00=num_bytes +hwmon_in.addr_0x006e_0x00=0x00050092 +hwmon_in.len_0x006e_0x00=2 +hwmon_in.int_extra1_0x006e_0x00=0x00050092 +hwmon_in.int_extra2_0x006e_0x00=1000 +hwmon_in.int_extra3_0x006e_0x00=1 + +hwmon_in.mode_0x006e_0x01=str_constant +hwmon_in.str_cons_0x006e_0x01=MGMT_PHY_VDD1_8V + +hwmon_in.mode_0x006e_0x02=str_constant +hwmon_in.str_cons_0x006e_0x02=cpld + +hwmon_in.mode_0x006e_0x03=str_constant +hwmon_in.str_cons_0x006e_0x03=1910 + +hwmon_in.mode_0x006e_0x05=str_constant +hwmon_in.str_cons_0x006e_0x05=1690 + +# vol111 +hwmon_in.mode_0x006f_0x00=config +hwmon_in.int_cons_0x006f_0x00=0 +hwmon_in.src_0x006f_0x00=cpld +hwmon_in.frmt_0x006f_0x00=num_bytes +hwmon_in.addr_0x006f_0x00=0x00050094 +hwmon_in.len_0x006f_0x00=2 +hwmon_in.int_extra1_0x006f_0x00=0x00050094 +hwmon_in.int_extra2_0x006f_0x00=1000 +hwmon_in.int_extra3_0x006f_0x00=1 + +hwmon_in.mode_0x006f_0x01=str_constant +hwmon_in.str_cons_0x006f_0x01=MGMT_PHY_VDD1_25V + +hwmon_in.mode_0x006f_0x02=str_constant +hwmon_in.str_cons_0x006f_0x02=cpld + +hwmon_in.mode_0x006f_0x03=str_constant +hwmon_in.str_cons_0x006f_0x03=1375 + +hwmon_in.mode_0x006f_0x05=str_constant +hwmon_in.str_cons_0x006f_0x05=1125 + +# vol112 +hwmon_in.mode_0x0070_0x00=config +hwmon_in.int_cons_0x0070_0x00=0 +hwmon_in.src_0x0070_0x00=cpld +hwmon_in.frmt_0x0070_0x00=num_bytes +hwmon_in.addr_0x0070_0x00=0x00050098 +hwmon_in.len_0x0070_0x00=2 +hwmon_in.int_extra1_0x0070_0x00=0x00050098 +hwmon_in.int_extra2_0x0070_0x00=1000 +hwmon_in.int_extra3_0x0070_0x00=1 + +hwmon_in.mode_0x0070_0x01=str_constant +hwmon_in.str_cons_0x0070_0x01=MGMT_PHY_VDD0_8V + +hwmon_in.mode_0x0070_0x02=str_constant +hwmon_in.str_cons_0x0070_0x02=cpld + +hwmon_in.mode_0x0070_0x03=str_constant +hwmon_in.str_cons_0x0070_0x03=880 + +hwmon_in.mode_0x0070_0x05=str_constant +hwmon_in.str_cons_0x0070_0x05=720 + + +# curr1 +hwmon_curr.mode_0x0001_0x00=config +hwmon_curr.int_cons_0x0001_0x00=0 +hwmon_curr.src_0x0001_0x00=file +hwmon_curr.frmt_0x0001_0x00=buf +hwmon_curr.fpath_0x0001_0x00=/sys/bus/i2c/devices/69-0070/hwmon/ +hwmon_curr.addr_0x0001_0x00=0 +hwmon_curr.len_0x0001_0x00=8 +hwmon_curr.bit_offset_0x0001_0x00= +hwmon_curr.str_cons_0x0001_0x00=curr3_input +hwmon_curr.mode_0x0001_0x01=str_constant +hwmon_curr.str_cons_0x0001_0x01=CPU_XDPE_VCCIN_C +hwmon_curr.mode_0x0001_0x02=str_constant +hwmon_curr.str_cons_0x0001_0x02=xdpe12284c +hwmon_curr.mode_0x0001_0x03=constant +hwmon_curr.int_cons_0x0001_0x03=14700 +hwmon_curr.mode_0x0001_0x05=constant +hwmon_curr.int_cons_0x0001_0x05=-3100 + +# curr2 +hwmon_curr.mode_0x0002_0x00=config +hwmon_curr.int_cons_0x0002_0x00=0 +hwmon_curr.src_0x0002_0x00=file +hwmon_curr.frmt_0x0002_0x00=buf +hwmon_curr.fpath_0x0002_0x00=/sys/bus/i2c/devices/69-0070/hwmon/ +hwmon_curr.addr_0x0002_0x00=0 +hwmon_curr.len_0x0002_0x00=8 +hwmon_curr.bit_offset_0x0002_0x00= +hwmon_curr.str_cons_0x0002_0x00=curr4_input +hwmon_curr.mode_0x0002_0x01=str_constant +hwmon_curr.str_cons_0x0002_0x01=CPU_XDPE_P1V8_C +hwmon_curr.mode_0x0002_0x02=str_constant +hwmon_curr.str_cons_0x0002_0x02=xdpe12284c +hwmon_curr.mode_0x0002_0x03=constant +hwmon_curr.int_cons_0x0002_0x03=4100 +hwmon_curr.mode_0x0002_0x05=constant +hwmon_curr.int_cons_0x0002_0x05=-3100 + +# curr3 +hwmon_curr.mode_0x0003_0x00=config +hwmon_curr.int_cons_0x0003_0x00=0 +hwmon_curr.src_0x0003_0x00=file +hwmon_curr.frmt_0x0003_0x00=buf +hwmon_curr.fpath_0x0003_0x00=/sys/bus/i2c/devices/69-006e/hwmon/ +hwmon_curr.addr_0x0003_0x00=0 +hwmon_curr.len_0x0003_0x00=8 +hwmon_curr.bit_offset_0x0003_0x00= +hwmon_curr.str_cons_0x0003_0x00=curr3_input +hwmon_curr.mode_0x0003_0x01=str_constant +hwmon_curr.str_cons_0x0003_0x01=CPU_XDPE_P1V05_C +hwmon_curr.mode_0x0003_0x02=str_constant +hwmon_curr.str_cons_0x0003_0x02=xdpe12284c +hwmon_curr.mode_0x0003_0x03=constant +hwmon_curr.int_cons_0x0003_0x03=14300 +hwmon_curr.mode_0x0003_0x05=constant +hwmon_curr.int_cons_0x0003_0x05=-3100 + +# curr4 +hwmon_curr.mode_0x0004_0x00=config +hwmon_curr.int_cons_0x0004_0x00=0 +hwmon_curr.src_0x0004_0x00=file +hwmon_curr.frmt_0x0004_0x00=buf +hwmon_curr.fpath_0x0004_0x00=/sys/bus/i2c/devices/69-006e/hwmon/ +hwmon_curr.addr_0x0004_0x00=0 +hwmon_curr.len_0x0004_0x00=8 +hwmon_curr.bit_offset_0x0004_0x00= +hwmon_curr.str_cons_0x0004_0x00=curr4_input +hwmon_curr.mode_0x0004_0x01=str_constant +hwmon_curr.str_cons_0x0004_0x01=CPU_XDPE_VNN_PCH_C +hwmon_curr.mode_0x0004_0x02=str_constant +hwmon_curr.str_cons_0x0004_0x02=xdpe12284c +hwmon_curr.mode_0x0004_0x03=constant +hwmon_curr.int_cons_0x0004_0x03=9100 +hwmon_curr.mode_0x0004_0x05=constant +hwmon_curr.int_cons_0x0004_0x05=-3100 + +# curr5 +hwmon_curr.mode_0x0005_0x00=config +hwmon_curr.int_cons_0x0005_0x00=0 +hwmon_curr.src_0x0005_0x00=file +hwmon_curr.frmt_0x0005_0x00=buf +hwmon_curr.fpath_0x0005_0x00=/sys/bus/i2c/devices/69-0068/hwmon/ +hwmon_curr.addr_0x0005_0x00=0 +hwmon_curr.len_0x0005_0x00=8 +hwmon_curr.bit_offset_0x0005_0x00= +hwmon_curr.str_cons_0x0005_0x00=curr3_input +hwmon_curr.mode_0x0005_0x01=str_constant +hwmon_curr.str_cons_0x0005_0x01=CPU_XDPE_VNN_NAC_C +hwmon_curr.mode_0x0005_0x02=str_constant +hwmon_curr.str_cons_0x0005_0x02=xdpe12284c +hwmon_curr.mode_0x0005_0x03=constant +hwmon_curr.int_cons_0x0005_0x03=22000 +hwmon_curr.mode_0x0005_0x05=constant +hwmon_curr.int_cons_0x0005_0x05=-3100 + +# curr6 +hwmon_curr.mode_0x0006_0x00=config +hwmon_curr.int_cons_0x0006_0x00=0 +hwmon_curr.src_0x0006_0x00=file +hwmon_curr.frmt_0x0006_0x00=buf +hwmon_curr.fpath_0x0006_0x00=/sys/bus/i2c/devices/69-0068/hwmon/ +hwmon_curr.addr_0x0006_0x00=0 +hwmon_curr.len_0x0006_0x00=8 +hwmon_curr.bit_offset_0x0006_0x00= +hwmon_curr.str_cons_0x0006_0x00=curr4_input +hwmon_curr.mode_0x0006_0x01=str_constant +hwmon_curr.str_cons_0x0006_0x01=CPU_XDPE_VCC_ANA_C +hwmon_curr.mode_0x0006_0x02=str_constant +hwmon_curr.str_cons_0x0006_0x02=xdpe12284c +hwmon_curr.mode_0x0006_0x03=constant +hwmon_curr.int_cons_0x0006_0x03=4100 +hwmon_curr.mode_0x0006_0x05=constant +hwmon_curr.int_cons_0x0006_0x05=-3100 + +# curr7 +hwmon_curr.mode_0x0007_0x00=config +hwmon_curr.int_cons_0x0007_0x00=0 +hwmon_curr.src_0x0007_0x00=file +hwmon_curr.frmt_0x0007_0x00=buf +hwmon_curr.fpath_0x0007_0x00=/sys/bus/i2c/devices/69-005e/hwmon/ +hwmon_curr.addr_0x0007_0x00=0 +hwmon_curr.len_0x0007_0x00=8 +hwmon_curr.bit_offset_0x0007_0x00= +hwmon_curr.str_cons_0x0007_0x00=curr3_input +hwmon_curr.mode_0x0007_0x01=str_constant +hwmon_curr.str_cons_0x0007_0x01=CPU_XDPE_P1V2_VDDQ_C +hwmon_curr.mode_0x0007_0x02=str_constant +hwmon_curr.str_cons_0x0007_0x02=xdpe12284c +hwmon_curr.mode_0x0007_0x03=constant +hwmon_curr.int_cons_0x0007_0x03=19000 +hwmon_curr.mode_0x0007_0x05=constant +hwmon_curr.int_cons_0x0007_0x05=-3100 + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SFF.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SFF.cfg new file mode 100644 index 000000000000..78acfeb999f6 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/SFF.cfg @@ -0,0 +1,2682 @@ +# +# @Fill in the agreement +# 1. Complete comments must be filled in before configuration items. Comments must not be filled in the same line of +# configuration items and invalid Spaces must not be added between configuration items +# 2. The value can be in 10 or hexadecimal format. The hexadecimal value starts with "0x" +# 3. Some configuration items do not need to be filled in a specific product. To facilitate other products to copy and +# fill in the configuration items, do not delete them +# 4. Configuration item + +# Configuration item: Number of optical modules +# Description: Format dev_num_[main_dev]_[minor_dev] +# Note: main_dev,optical module is 3, minor_dev, 0:does not exist +dev_num_3_0=66 + +# Configuration items:: optical module EEPROM size +# Description: Format eeprom_size_[main_dev]_[index] +# Note: main_dev,optical module is 3, index, Optical module index, starting from 1 +eeprom_size_3_1=0x8180 +eeprom_size_3_2=0x8180 +eeprom_size_3_3=0x8180 +eeprom_size_3_4=0x8180 +eeprom_size_3_5=0x8180 +eeprom_size_3_6=0x8180 +eeprom_size_3_7=0x8180 +eeprom_size_3_8=0x8180 +eeprom_size_3_9=0x8180 +eeprom_size_3_10=0x8180 +eeprom_size_3_11=0x8180 +eeprom_size_3_12=0x8180 +eeprom_size_3_13=0x8180 +eeprom_size_3_14=0x8180 +eeprom_size_3_15=0x8180 +eeprom_size_3_16=0x8180 +eeprom_size_3_17=0x8180 +eeprom_size_3_18=0x8180 +eeprom_size_3_19=0x8180 +eeprom_size_3_20=0x8180 +eeprom_size_3_21=0x8180 +eeprom_size_3_22=0x8180 +eeprom_size_3_23=0x8180 +eeprom_size_3_24=0x8180 +eeprom_size_3_25=0x8180 +eeprom_size_3_26=0x8180 +eeprom_size_3_27=0x8180 +eeprom_size_3_28=0x8180 +eeprom_size_3_29=0x8180 +eeprom_size_3_30=0x8180 +eeprom_size_3_31=0x8180 +eeprom_size_3_32=0x8180 +eeprom_size_3_33=0x8180 +eeprom_size_3_34=0x8180 +eeprom_size_3_35=0x8180 +eeprom_size_3_36=0x8180 +eeprom_size_3_37=0x8180 +eeprom_size_3_38=0x8180 +eeprom_size_3_39=0x8180 +eeprom_size_3_40=0x8180 +eeprom_size_3_41=0x8180 +eeprom_size_3_42=0x8180 +eeprom_size_3_43=0x8180 +eeprom_size_3_44=0x8180 +eeprom_size_3_45=0x8180 +eeprom_size_3_46=0x8180 +eeprom_size_3_47=0x8180 +eeprom_size_3_48=0x8180 +eeprom_size_3_49=0x8180 +eeprom_size_3_50=0x8180 +eeprom_size_3_51=0x8180 +eeprom_size_3_52=0x8180 +eeprom_size_3_53=0x8180 +eeprom_size_3_54=0x8180 +eeprom_size_3_55=0x8180 +eeprom_size_3_56=0x8180 +eeprom_size_3_57=0x8180 +eeprom_size_3_58=0x8180 +eeprom_size_3_59=0x8180 +eeprom_size_3_60=0x8180 +eeprom_size_3_61=0x8180 +eeprom_size_3_62=0x8180 +eeprom_size_3_63=0x8180 +eeprom_size_3_64=0x8180 +eeprom_size_3_65=0x8180 +eeprom_size_3_66=0x8180 + +# Configuration items: optical module EEPROM sysfs path +# Description: Format eeprom_size_[main_dev]_[index] +# Note: main_dev,optical module is 3, index, Optical module index, starting from 1 +eeprom_path_3_1=/sys/bus/i2c/devices/106-0050/eeprom +eeprom_path_3_2=/sys/bus/i2c/devices/107-0050/eeprom +eeprom_path_3_3=/sys/bus/i2c/devices/108-0050/eeprom +eeprom_path_3_4=/sys/bus/i2c/devices/109-0050/eeprom +eeprom_path_3_5=/sys/bus/i2c/devices/110-0050/eeprom +eeprom_path_3_6=/sys/bus/i2c/devices/111-0050/eeprom +eeprom_path_3_7=/sys/bus/i2c/devices/112-0050/eeprom +eeprom_path_3_8=/sys/bus/i2c/devices/113-0050/eeprom +eeprom_path_3_9=/sys/bus/i2c/devices/114-0050/eeprom +eeprom_path_3_10=/sys/bus/i2c/devices/115-0050/eeprom +eeprom_path_3_11=/sys/bus/i2c/devices/116-0050/eeprom +eeprom_path_3_12=/sys/bus/i2c/devices/117-0050/eeprom +eeprom_path_3_13=/sys/bus/i2c/devices/118-0050/eeprom +eeprom_path_3_14=/sys/bus/i2c/devices/119-0050/eeprom +eeprom_path_3_15=/sys/bus/i2c/devices/120-0050/eeprom +eeprom_path_3_16=/sys/bus/i2c/devices/121-0050/eeprom +eeprom_path_3_17=/sys/bus/i2c/devices/122-0050/eeprom +eeprom_path_3_18=/sys/bus/i2c/devices/123-0050/eeprom +eeprom_path_3_19=/sys/bus/i2c/devices/124-0050/eeprom +eeprom_path_3_20=/sys/bus/i2c/devices/125-0050/eeprom +eeprom_path_3_21=/sys/bus/i2c/devices/126-0050/eeprom +eeprom_path_3_22=/sys/bus/i2c/devices/127-0050/eeprom +eeprom_path_3_23=/sys/bus/i2c/devices/128-0050/eeprom +eeprom_path_3_24=/sys/bus/i2c/devices/129-0050/eeprom +eeprom_path_3_25=/sys/bus/i2c/devices/130-0050/eeprom +eeprom_path_3_26=/sys/bus/i2c/devices/131-0050/eeprom +eeprom_path_3_27=/sys/bus/i2c/devices/132-0050/eeprom +eeprom_path_3_28=/sys/bus/i2c/devices/133-0050/eeprom +eeprom_path_3_29=/sys/bus/i2c/devices/134-0050/eeprom +eeprom_path_3_30=/sys/bus/i2c/devices/135-0050/eeprom +eeprom_path_3_31=/sys/bus/i2c/devices/136-0050/eeprom +eeprom_path_3_32=/sys/bus/i2c/devices/137-0050/eeprom +eeprom_path_3_33=/sys/bus/i2c/devices/138-0050/eeprom +eeprom_path_3_34=/sys/bus/i2c/devices/139-0050/eeprom +eeprom_path_3_35=/sys/bus/i2c/devices/140-0050/eeprom +eeprom_path_3_36=/sys/bus/i2c/devices/141-0050/eeprom +eeprom_path_3_37=/sys/bus/i2c/devices/142-0050/eeprom +eeprom_path_3_38=/sys/bus/i2c/devices/143-0050/eeprom +eeprom_path_3_39=/sys/bus/i2c/devices/144-0050/eeprom +eeprom_path_3_40=/sys/bus/i2c/devices/145-0050/eeprom +eeprom_path_3_41=/sys/bus/i2c/devices/146-0050/eeprom +eeprom_path_3_42=/sys/bus/i2c/devices/147-0050/eeprom +eeprom_path_3_43=/sys/bus/i2c/devices/148-0050/eeprom +eeprom_path_3_44=/sys/bus/i2c/devices/149-0050/eeprom +eeprom_path_3_45=/sys/bus/i2c/devices/150-0050/eeprom +eeprom_path_3_46=/sys/bus/i2c/devices/151-0050/eeprom +eeprom_path_3_47=/sys/bus/i2c/devices/152-0050/eeprom +eeprom_path_3_48=/sys/bus/i2c/devices/153-0050/eeprom +eeprom_path_3_49=/sys/bus/i2c/devices/154-0050/eeprom +eeprom_path_3_50=/sys/bus/i2c/devices/155-0050/eeprom +eeprom_path_3_51=/sys/bus/i2c/devices/156-0050/eeprom +eeprom_path_3_52=/sys/bus/i2c/devices/157-0050/eeprom +eeprom_path_3_53=/sys/bus/i2c/devices/158-0050/eeprom +eeprom_path_3_54=/sys/bus/i2c/devices/159-0050/eeprom +eeprom_path_3_55=/sys/bus/i2c/devices/160-0050/eeprom +eeprom_path_3_56=/sys/bus/i2c/devices/161-0050/eeprom +eeprom_path_3_57=/sys/bus/i2c/devices/162-0050/eeprom +eeprom_path_3_58=/sys/bus/i2c/devices/163-0050/eeprom +eeprom_path_3_59=/sys/bus/i2c/devices/164-0050/eeprom +eeprom_path_3_60=/sys/bus/i2c/devices/165-0050/eeprom +eeprom_path_3_61=/sys/bus/i2c/devices/166-0050/eeprom +eeprom_path_3_62=/sys/bus/i2c/devices/167-0050/eeprom +eeprom_path_3_63=/sys/bus/i2c/devices/168-0050/eeprom +eeprom_path_3_64=/sys/bus/i2c/devices/169-0050/eeprom +eeprom_path_3_65=/sys/bus/i2c/devices/59-0050/eeprom +eeprom_path_3_66=/sys/bus/i2c/devices/60-0050/eeprom + + +# Configuration items: Optical module CPLD register +# Description: Format sff_cpld_reg_[sff_index]_[cpld_reg] +# Note: sff_index indicates the optical module number, starting from 1. 0 indicates that the power_on register is useful +# cpld_reg 1:power_on 2:tx_fault, 3:tx_dis 4:reserve 5:rx_los +# 6:reset 7:lpmode 8:module_present 9:interrupt + + +# 800G module reset signal +sff_cpld_reg.mode_1_6=config +sff_cpld_reg.src_1_6=cpld +sff_cpld_reg.frmt_1_6=bit +sff_cpld_reg.pola_1_6=negative +sff_cpld_reg.addr_1_6=0x00020072 +sff_cpld_reg.len_1_6=1 +sff_cpld_reg.bit_offset_1_6=0 + +sff_cpld_reg.mode_2_6=config +sff_cpld_reg.src_2_6=cpld +sff_cpld_reg.frmt_2_6=bit +sff_cpld_reg.pola_2_6=negative +sff_cpld_reg.addr_2_6=0x00020072 +sff_cpld_reg.len_2_6=1 +sff_cpld_reg.bit_offset_2_6=1 + +sff_cpld_reg.mode_3_6=config +sff_cpld_reg.src_3_6=cpld +sff_cpld_reg.frmt_3_6=bit +sff_cpld_reg.pola_3_6=negative +sff_cpld_reg.addr_3_6=0x00020072 +sff_cpld_reg.len_3_6=1 +sff_cpld_reg.bit_offset_3_6=2 + +sff_cpld_reg.mode_4_6=config +sff_cpld_reg.src_4_6=cpld +sff_cpld_reg.frmt_4_6=bit +sff_cpld_reg.pola_4_6=negative +sff_cpld_reg.addr_4_6=0x00020072 +sff_cpld_reg.len_4_6=1 +sff_cpld_reg.bit_offset_4_6=3 + +sff_cpld_reg.mode_5_6=config +sff_cpld_reg.src_5_6=cpld +sff_cpld_reg.frmt_5_6=bit +sff_cpld_reg.pola_5_6=negative +sff_cpld_reg.addr_5_6=0x00020072 +sff_cpld_reg.len_5_6=1 +sff_cpld_reg.bit_offset_5_6=4 + +sff_cpld_reg.mode_6_6=config +sff_cpld_reg.src_6_6=cpld +sff_cpld_reg.frmt_6_6=bit +sff_cpld_reg.pola_6_6=negative +sff_cpld_reg.addr_6_6=0x00020072 +sff_cpld_reg.len_6_6=1 +sff_cpld_reg.bit_offset_6_6=5 + +sff_cpld_reg.mode_7_6=config +sff_cpld_reg.src_7_6=cpld +sff_cpld_reg.frmt_7_6=bit +sff_cpld_reg.pola_7_6=negative +sff_cpld_reg.addr_7_6=0x00020072 +sff_cpld_reg.len_7_6=1 +sff_cpld_reg.bit_offset_7_6=6 + +sff_cpld_reg.mode_8_6=config +sff_cpld_reg.src_8_6=cpld +sff_cpld_reg.frmt_8_6=bit +sff_cpld_reg.pola_8_6=negative +sff_cpld_reg.addr_8_6=0x00020072 +sff_cpld_reg.len_8_6=1 +sff_cpld_reg.bit_offset_8_6=7 + +sff_cpld_reg.mode_9_6=config +sff_cpld_reg.src_9_6=cpld +sff_cpld_reg.frmt_9_6=bit +sff_cpld_reg.pola_9_6=negative +sff_cpld_reg.addr_9_6=0x00020071 +sff_cpld_reg.len_9_6=1 +sff_cpld_reg.bit_offset_9_6=0 + +sff_cpld_reg.mode_10_6=config +sff_cpld_reg.src_10_6=cpld +sff_cpld_reg.frmt_10_6=bit +sff_cpld_reg.pola_10_6=negative +sff_cpld_reg.addr_10_6=0x00020071 +sff_cpld_reg.len_10_6=1 +sff_cpld_reg.bit_offset_10_6=1 + +sff_cpld_reg.mode_11_6=config +sff_cpld_reg.src_11_6=cpld +sff_cpld_reg.frmt_11_6=bit +sff_cpld_reg.pola_11_6=negative +sff_cpld_reg.addr_11_6=0x00020071 +sff_cpld_reg.len_11_6=1 +sff_cpld_reg.bit_offset_11_6=2 + +sff_cpld_reg.mode_12_6=config +sff_cpld_reg.src_12_6=cpld +sff_cpld_reg.frmt_12_6=bit +sff_cpld_reg.pola_12_6=negative +sff_cpld_reg.addr_12_6=0x00020071 +sff_cpld_reg.len_12_6=1 +sff_cpld_reg.bit_offset_12_6=3 + +sff_cpld_reg.mode_13_6=config +sff_cpld_reg.src_13_6=cpld +sff_cpld_reg.frmt_13_6=bit +sff_cpld_reg.pola_13_6=negative +sff_cpld_reg.addr_13_6=0x00020071 +sff_cpld_reg.len_13_6=1 +sff_cpld_reg.bit_offset_13_6=4 + +sff_cpld_reg.mode_14_6=config +sff_cpld_reg.src_14_6=cpld +sff_cpld_reg.frmt_14_6=bit +sff_cpld_reg.pola_14_6=negative +sff_cpld_reg.addr_14_6=0x00020071 +sff_cpld_reg.len_14_6=1 +sff_cpld_reg.bit_offset_14_6=5 + +sff_cpld_reg.mode_15_6=config +sff_cpld_reg.src_15_6=cpld +sff_cpld_reg.frmt_15_6=bit +sff_cpld_reg.pola_15_6=negative +sff_cpld_reg.addr_15_6=0x00020071 +sff_cpld_reg.len_15_6=1 +sff_cpld_reg.bit_offset_15_6=6 + +sff_cpld_reg.mode_16_6=config +sff_cpld_reg.src_16_6=cpld +sff_cpld_reg.frmt_16_6=bit +sff_cpld_reg.pola_16_6=negative +sff_cpld_reg.addr_16_6=0x00020071 +sff_cpld_reg.len_16_6=1 +sff_cpld_reg.bit_offset_16_6=7 + +sff_cpld_reg.mode_17_6=config +sff_cpld_reg.src_17_6=cpld +sff_cpld_reg.frmt_17_6=bit +sff_cpld_reg.pola_17_6=negative +sff_cpld_reg.addr_17_6=0x00020070 +sff_cpld_reg.len_17_6=1 +sff_cpld_reg.bit_offset_17_6=0 + +sff_cpld_reg.mode_18_6=config +sff_cpld_reg.src_18_6=cpld +sff_cpld_reg.frmt_18_6=bit +sff_cpld_reg.pola_18_6=negative +sff_cpld_reg.addr_18_6=0x00020070 +sff_cpld_reg.len_18_6=1 +sff_cpld_reg.bit_offset_18_6=1 + +sff_cpld_reg.mode_19_6=config +sff_cpld_reg.src_19_6=cpld +sff_cpld_reg.frmt_19_6=bit +sff_cpld_reg.pola_19_6=negative +sff_cpld_reg.addr_19_6=0x00020070 +sff_cpld_reg.len_19_6=1 +sff_cpld_reg.bit_offset_19_6=2 + +sff_cpld_reg.mode_20_6=config +sff_cpld_reg.src_20_6=cpld +sff_cpld_reg.frmt_20_6=bit +sff_cpld_reg.pola_20_6=negative +sff_cpld_reg.addr_20_6=0x00020070 +sff_cpld_reg.len_20_6=1 +sff_cpld_reg.bit_offset_20_6=3 + +sff_cpld_reg.mode_21_6=config +sff_cpld_reg.src_21_6=cpld +sff_cpld_reg.frmt_21_6=bit +sff_cpld_reg.pola_21_6=negative +sff_cpld_reg.addr_21_6=0x00020070 +sff_cpld_reg.len_21_6=1 +sff_cpld_reg.bit_offset_21_6=4 + +sff_cpld_reg.mode_22_6=config +sff_cpld_reg.src_22_6=cpld +sff_cpld_reg.frmt_22_6=bit +sff_cpld_reg.pola_22_6=negative +sff_cpld_reg.addr_22_6=0x00020070 +sff_cpld_reg.len_22_6=1 +sff_cpld_reg.bit_offset_22_6=5 + +sff_cpld_reg.mode_23_6=config +sff_cpld_reg.src_23_6=cpld +sff_cpld_reg.frmt_23_6=bit +sff_cpld_reg.pola_23_6=negative +sff_cpld_reg.addr_23_6=0x00020070 +sff_cpld_reg.len_23_6=1 +sff_cpld_reg.bit_offset_23_6=6 + +sff_cpld_reg.mode_24_6=config +sff_cpld_reg.src_24_6=cpld +sff_cpld_reg.frmt_24_6=bit +sff_cpld_reg.pola_24_6=negative +sff_cpld_reg.addr_24_6=0x00020070 +sff_cpld_reg.len_24_6=1 +sff_cpld_reg.bit_offset_24_6=7 + +sff_cpld_reg.mode_25_6=config +sff_cpld_reg.src_25_6=cpld +sff_cpld_reg.frmt_25_6=bit +sff_cpld_reg.pola_25_6=negative +sff_cpld_reg.addr_25_6=0x00030074 +sff_cpld_reg.len_25_6=1 +sff_cpld_reg.bit_offset_25_6=0 + +sff_cpld_reg.mode_26_6=config +sff_cpld_reg.src_26_6=cpld +sff_cpld_reg.frmt_26_6=bit +sff_cpld_reg.pola_26_6=negative +sff_cpld_reg.addr_26_6=0x00030074 +sff_cpld_reg.len_26_6=1 +sff_cpld_reg.bit_offset_26_6=1 + +sff_cpld_reg.mode_27_6=config +sff_cpld_reg.src_27_6=cpld +sff_cpld_reg.frmt_27_6=bit +sff_cpld_reg.pola_27_6=negative +sff_cpld_reg.addr_27_6=0x00030074 +sff_cpld_reg.len_27_6=1 +sff_cpld_reg.bit_offset_27_6=2 + +sff_cpld_reg.mode_28_6=config +sff_cpld_reg.src_28_6=cpld +sff_cpld_reg.frmt_28_6=bit +sff_cpld_reg.pola_28_6=negative +sff_cpld_reg.addr_28_6=0x00030074 +sff_cpld_reg.len_28_6=1 +sff_cpld_reg.bit_offset_28_6=3 + +sff_cpld_reg.mode_29_6=config +sff_cpld_reg.src_29_6=cpld +sff_cpld_reg.frmt_29_6=bit +sff_cpld_reg.pola_29_6=negative +sff_cpld_reg.addr_29_6=0x00030074 +sff_cpld_reg.len_29_6=1 +sff_cpld_reg.bit_offset_29_6=4 + +sff_cpld_reg.mode_30_6=config +sff_cpld_reg.src_30_6=cpld +sff_cpld_reg.frmt_30_6=bit +sff_cpld_reg.pola_30_6=negative +sff_cpld_reg.addr_30_6=0x00030074 +sff_cpld_reg.len_30_6=1 +sff_cpld_reg.bit_offset_30_6=5 + +sff_cpld_reg.mode_31_6=config +sff_cpld_reg.src_31_6=cpld +sff_cpld_reg.frmt_31_6=bit +sff_cpld_reg.pola_31_6=negative +sff_cpld_reg.addr_31_6=0x00030074 +sff_cpld_reg.len_31_6=1 +sff_cpld_reg.bit_offset_31_6=6 + +sff_cpld_reg.mode_32_6=config +sff_cpld_reg.src_32_6=cpld +sff_cpld_reg.frmt_32_6=bit +sff_cpld_reg.pola_32_6=negative +sff_cpld_reg.addr_32_6=0x00030074 +sff_cpld_reg.len_32_6=1 +sff_cpld_reg.bit_offset_32_6=7 + +sff_cpld_reg.mode_33_6=config +sff_cpld_reg.src_33_6=cpld +sff_cpld_reg.frmt_33_6=bit +sff_cpld_reg.pola_33_6=negative +sff_cpld_reg.addr_33_6=0x00030073 +sff_cpld_reg.len_33_6=1 +sff_cpld_reg.bit_offset_33_6=0 + +sff_cpld_reg.mode_34_6=config +sff_cpld_reg.src_34_6=cpld +sff_cpld_reg.frmt_34_6=bit +sff_cpld_reg.pola_34_6=negative +sff_cpld_reg.addr_34_6=0x00030073 +sff_cpld_reg.len_34_6=1 +sff_cpld_reg.bit_offset_34_6=1 + +sff_cpld_reg.mode_35_6=config +sff_cpld_reg.src_35_6=cpld +sff_cpld_reg.frmt_35_6=bit +sff_cpld_reg.pola_35_6=negative +sff_cpld_reg.addr_35_6=0x00030073 +sff_cpld_reg.len_35_6=1 +sff_cpld_reg.bit_offset_35_6=2 + +sff_cpld_reg.mode_36_6=config +sff_cpld_reg.src_36_6=cpld +sff_cpld_reg.frmt_36_6=bit +sff_cpld_reg.pola_36_6=negative +sff_cpld_reg.addr_36_6=0x00030073 +sff_cpld_reg.len_36_6=1 +sff_cpld_reg.bit_offset_36_6=3 + +sff_cpld_reg.mode_37_6=config +sff_cpld_reg.src_37_6=cpld +sff_cpld_reg.frmt_37_6=bit +sff_cpld_reg.pola_37_6=negative +sff_cpld_reg.addr_37_6=0x00030073 +sff_cpld_reg.len_37_6=1 +sff_cpld_reg.bit_offset_37_6=4 + +sff_cpld_reg.mode_38_6=config +sff_cpld_reg.src_38_6=cpld +sff_cpld_reg.frmt_38_6=bit +sff_cpld_reg.pola_38_6=negative +sff_cpld_reg.addr_38_6=0x00030073 +sff_cpld_reg.len_38_6=1 +sff_cpld_reg.bit_offset_38_6=5 + +sff_cpld_reg.mode_39_6=config +sff_cpld_reg.src_39_6=cpld +sff_cpld_reg.frmt_39_6=bit +sff_cpld_reg.pola_39_6=negative +sff_cpld_reg.addr_39_6=0x00030073 +sff_cpld_reg.len_39_6=1 +sff_cpld_reg.bit_offset_39_6=6 + +sff_cpld_reg.mode_40_6=config +sff_cpld_reg.src_40_6=cpld +sff_cpld_reg.frmt_40_6=bit +sff_cpld_reg.pola_40_6=negative +sff_cpld_reg.addr_40_6=0x00030073 +sff_cpld_reg.len_40_6=1 +sff_cpld_reg.bit_offset_40_6=7 + +sff_cpld_reg.mode_41_6=config +sff_cpld_reg.src_41_6=cpld +sff_cpld_reg.frmt_41_6=bit +sff_cpld_reg.pola_41_6=negative +sff_cpld_reg.addr_41_6=0x00030072 +sff_cpld_reg.len_41_6=1 +sff_cpld_reg.bit_offset_41_6=0 + +sff_cpld_reg.mode_42_6=config +sff_cpld_reg.src_42_6=cpld +sff_cpld_reg.frmt_42_6=bit +sff_cpld_reg.pola_42_6=negative +sff_cpld_reg.addr_42_6=0x00030072 +sff_cpld_reg.len_42_6=1 +sff_cpld_reg.bit_offset_42_6=1 + +sff_cpld_reg.mode_43_6=config +sff_cpld_reg.src_43_6=cpld +sff_cpld_reg.frmt_43_6=bit +sff_cpld_reg.pola_43_6=negative +sff_cpld_reg.addr_43_6=0x00030072 +sff_cpld_reg.len_43_6=1 +sff_cpld_reg.bit_offset_43_6=2 + +sff_cpld_reg.mode_44_6=config +sff_cpld_reg.src_44_6=cpld +sff_cpld_reg.frmt_44_6=bit +sff_cpld_reg.pola_44_6=negative +sff_cpld_reg.addr_44_6=0x00030072 +sff_cpld_reg.len_44_6=1 +sff_cpld_reg.bit_offset_44_6=3 + +sff_cpld_reg.mode_45_6=config +sff_cpld_reg.src_45_6=cpld +sff_cpld_reg.frmt_45_6=bit +sff_cpld_reg.pola_45_6=negative +sff_cpld_reg.addr_45_6=0x00030072 +sff_cpld_reg.len_45_6=1 +sff_cpld_reg.bit_offset_45_6=4 + +sff_cpld_reg.mode_46_6=config +sff_cpld_reg.src_46_6=cpld +sff_cpld_reg.frmt_46_6=bit +sff_cpld_reg.pola_46_6=negative +sff_cpld_reg.addr_46_6=0x00030072 +sff_cpld_reg.len_46_6=1 +sff_cpld_reg.bit_offset_46_6=5 + +sff_cpld_reg.mode_47_6=config +sff_cpld_reg.src_47_6=cpld +sff_cpld_reg.frmt_47_6=bit +sff_cpld_reg.pola_47_6=negative +sff_cpld_reg.addr_47_6=0x00030072 +sff_cpld_reg.len_47_6=1 +sff_cpld_reg.bit_offset_47_6=6 + +sff_cpld_reg.mode_48_6=config +sff_cpld_reg.src_48_6=cpld +sff_cpld_reg.frmt_48_6=bit +sff_cpld_reg.pola_48_6=negative +sff_cpld_reg.addr_48_6=0x00030072 +sff_cpld_reg.len_48_6=1 +sff_cpld_reg.bit_offset_48_6=7 + +sff_cpld_reg.mode_49_6=config +sff_cpld_reg.src_49_6=cpld +sff_cpld_reg.frmt_49_6=bit +sff_cpld_reg.pola_49_6=negative +sff_cpld_reg.addr_49_6=0x00030071 +sff_cpld_reg.len_49_6=1 +sff_cpld_reg.bit_offset_49_6=0 + +sff_cpld_reg.mode_50_6=config +sff_cpld_reg.src_50_6=cpld +sff_cpld_reg.frmt_50_6=bit +sff_cpld_reg.pola_50_6=negative +sff_cpld_reg.addr_50_6=0x00030071 +sff_cpld_reg.len_50_6=1 +sff_cpld_reg.bit_offset_50_6=1 + +sff_cpld_reg.mode_51_6=config +sff_cpld_reg.src_51_6=cpld +sff_cpld_reg.frmt_51_6=bit +sff_cpld_reg.pola_51_6=negative +sff_cpld_reg.addr_51_6=0x00030071 +sff_cpld_reg.len_51_6=1 +sff_cpld_reg.bit_offset_51_6=2 + +sff_cpld_reg.mode_52_6=config +sff_cpld_reg.src_52_6=cpld +sff_cpld_reg.frmt_52_6=bit +sff_cpld_reg.pola_52_6=negative +sff_cpld_reg.addr_52_6=0x00030071 +sff_cpld_reg.len_52_6=1 +sff_cpld_reg.bit_offset_52_6=3 + +sff_cpld_reg.mode_53_6=config +sff_cpld_reg.src_53_6=cpld +sff_cpld_reg.frmt_53_6=bit +sff_cpld_reg.pola_53_6=negative +sff_cpld_reg.addr_53_6=0x00030071 +sff_cpld_reg.len_53_6=1 +sff_cpld_reg.bit_offset_53_6=4 + +sff_cpld_reg.mode_54_6=config +sff_cpld_reg.src_54_6=cpld +sff_cpld_reg.frmt_54_6=bit +sff_cpld_reg.pola_54_6=negative +sff_cpld_reg.addr_54_6=0x00030071 +sff_cpld_reg.len_54_6=1 +sff_cpld_reg.bit_offset_54_6=5 + +sff_cpld_reg.mode_55_6=config +sff_cpld_reg.src_55_6=cpld +sff_cpld_reg.frmt_55_6=bit +sff_cpld_reg.pola_55_6=negative +sff_cpld_reg.addr_55_6=0x00030071 +sff_cpld_reg.len_55_6=1 +sff_cpld_reg.bit_offset_55_6=6 + +sff_cpld_reg.mode_56_6=config +sff_cpld_reg.src_56_6=cpld +sff_cpld_reg.frmt_56_6=bit +sff_cpld_reg.pola_56_6=negative +sff_cpld_reg.addr_56_6=0x00030071 +sff_cpld_reg.len_56_6=1 +sff_cpld_reg.bit_offset_56_6=7 + +sff_cpld_reg.mode_57_6=config +sff_cpld_reg.src_57_6=cpld +sff_cpld_reg.frmt_57_6=bit +sff_cpld_reg.pola_57_6=negative +sff_cpld_reg.addr_57_6=0x00030070 +sff_cpld_reg.len_57_6=1 +sff_cpld_reg.bit_offset_57_6=0 + +sff_cpld_reg.mode_58_6=config +sff_cpld_reg.src_58_6=cpld +sff_cpld_reg.frmt_58_6=bit +sff_cpld_reg.pola_58_6=negative +sff_cpld_reg.addr_58_6=0x00030070 +sff_cpld_reg.len_58_6=1 +sff_cpld_reg.bit_offset_58_6=1 + +sff_cpld_reg.mode_59_6=config +sff_cpld_reg.src_59_6=cpld +sff_cpld_reg.frmt_59_6=bit +sff_cpld_reg.pola_59_6=negative +sff_cpld_reg.addr_59_6=0x00030070 +sff_cpld_reg.len_59_6=1 +sff_cpld_reg.bit_offset_59_6=2 + +sff_cpld_reg.mode_60_6=config +sff_cpld_reg.src_60_6=cpld +sff_cpld_reg.frmt_60_6=bit +sff_cpld_reg.pola_60_6=negative +sff_cpld_reg.addr_60_6=0x00030070 +sff_cpld_reg.len_60_6=1 +sff_cpld_reg.bit_offset_60_6=3 + +sff_cpld_reg.mode_61_6=config +sff_cpld_reg.src_61_6=cpld +sff_cpld_reg.frmt_61_6=bit +sff_cpld_reg.pola_61_6=negative +sff_cpld_reg.addr_61_6=0x00030070 +sff_cpld_reg.len_61_6=1 +sff_cpld_reg.bit_offset_61_6=4 + +sff_cpld_reg.mode_62_6=config +sff_cpld_reg.src_62_6=cpld +sff_cpld_reg.frmt_62_6=bit +sff_cpld_reg.pola_62_6=negative +sff_cpld_reg.addr_62_6=0x00030070 +sff_cpld_reg.len_62_6=1 +sff_cpld_reg.bit_offset_62_6=5 + +sff_cpld_reg.mode_63_6=config +sff_cpld_reg.src_63_6=cpld +sff_cpld_reg.frmt_63_6=bit +sff_cpld_reg.pola_63_6=negative +sff_cpld_reg.addr_63_6=0x00030070 +sff_cpld_reg.len_63_6=1 +sff_cpld_reg.bit_offset_63_6=6 + +sff_cpld_reg.mode_64_6=config +sff_cpld_reg.src_64_6=cpld +sff_cpld_reg.frmt_64_6=bit +sff_cpld_reg.pola_64_6=negative +sff_cpld_reg.addr_64_6=0x00030070 +sff_cpld_reg.len_64_6=1 +sff_cpld_reg.bit_offset_64_6=7 + +# 800G module lpmode signal +sff_cpld_reg.mode_1_7=config +sff_cpld_reg.src_1_7=cpld +sff_cpld_reg.frmt_1_7=bit +sff_cpld_reg.pola_1_7=positive +sff_cpld_reg.addr_1_7=0x00020078 +sff_cpld_reg.len_1_7=1 +sff_cpld_reg.bit_offset_1_7=0 + +sff_cpld_reg.mode_2_7=config +sff_cpld_reg.src_2_7=cpld +sff_cpld_reg.frmt_2_7=bit +sff_cpld_reg.pola_2_7=positive +sff_cpld_reg.addr_2_7=0x00020078 +sff_cpld_reg.len_2_7=1 +sff_cpld_reg.bit_offset_2_7=1 + +sff_cpld_reg.mode_3_7=config +sff_cpld_reg.src_3_7=cpld +sff_cpld_reg.frmt_3_7=bit +sff_cpld_reg.pola_3_7=positive +sff_cpld_reg.addr_3_7=0x00020078 +sff_cpld_reg.len_3_7=1 +sff_cpld_reg.bit_offset_3_7=2 + +sff_cpld_reg.mode_4_7=config +sff_cpld_reg.src_4_7=cpld +sff_cpld_reg.frmt_4_7=bit +sff_cpld_reg.pola_4_7=positive +sff_cpld_reg.addr_4_7=0x00020078 +sff_cpld_reg.len_4_7=1 +sff_cpld_reg.bit_offset_4_7=3 + +sff_cpld_reg.mode_5_7=config +sff_cpld_reg.src_5_7=cpld +sff_cpld_reg.frmt_5_7=bit +sff_cpld_reg.pola_5_7=positive +sff_cpld_reg.addr_5_7=0x00020078 +sff_cpld_reg.len_5_7=1 +sff_cpld_reg.bit_offset_5_7=4 + +sff_cpld_reg.mode_6_7=config +sff_cpld_reg.src_6_7=cpld +sff_cpld_reg.frmt_6_7=bit +sff_cpld_reg.pola_6_7=positive +sff_cpld_reg.addr_6_7=0x00020078 +sff_cpld_reg.len_6_7=1 +sff_cpld_reg.bit_offset_6_7=5 + +sff_cpld_reg.mode_7_7=config +sff_cpld_reg.src_7_7=cpld +sff_cpld_reg.frmt_7_7=bit +sff_cpld_reg.pola_7_7=positive +sff_cpld_reg.addr_7_7=0x00020078 +sff_cpld_reg.len_7_7=1 +sff_cpld_reg.bit_offset_7_7=6 + +sff_cpld_reg.mode_8_7=config +sff_cpld_reg.src_8_7=cpld +sff_cpld_reg.frmt_8_7=bit +sff_cpld_reg.pola_8_7=positive +sff_cpld_reg.addr_8_7=0x00020078 +sff_cpld_reg.len_8_7=1 +sff_cpld_reg.bit_offset_8_7=7 + +sff_cpld_reg.mode_9_7=config +sff_cpld_reg.src_9_7=cpld +sff_cpld_reg.frmt_9_7=bit +sff_cpld_reg.pola_9_7=positive +sff_cpld_reg.addr_9_7=0x00020077 +sff_cpld_reg.len_9_7=1 +sff_cpld_reg.bit_offset_9_7=0 + +sff_cpld_reg.mode_10_7=config +sff_cpld_reg.src_10_7=cpld +sff_cpld_reg.frmt_10_7=bit +sff_cpld_reg.pola_10_7=positive +sff_cpld_reg.addr_10_7=0x00020077 +sff_cpld_reg.len_10_7=1 +sff_cpld_reg.bit_offset_10_7=1 + +sff_cpld_reg.mode_11_7=config +sff_cpld_reg.src_11_7=cpld +sff_cpld_reg.frmt_11_7=bit +sff_cpld_reg.pola_11_7=positive +sff_cpld_reg.addr_11_7=0x00020077 +sff_cpld_reg.len_11_7=1 +sff_cpld_reg.bit_offset_11_7=2 + +sff_cpld_reg.mode_12_7=config +sff_cpld_reg.src_12_7=cpld +sff_cpld_reg.frmt_12_7=bit +sff_cpld_reg.pola_12_7=positive +sff_cpld_reg.addr_12_7=0x00020077 +sff_cpld_reg.len_12_7=1 +sff_cpld_reg.bit_offset_12_7=3 + +sff_cpld_reg.mode_13_7=config +sff_cpld_reg.src_13_7=cpld +sff_cpld_reg.frmt_13_7=bit +sff_cpld_reg.pola_13_7=positive +sff_cpld_reg.addr_13_7=0x00020077 +sff_cpld_reg.len_13_7=1 +sff_cpld_reg.bit_offset_13_7=4 + +sff_cpld_reg.mode_14_7=config +sff_cpld_reg.src_14_7=cpld +sff_cpld_reg.frmt_14_7=bit +sff_cpld_reg.pola_14_7=positive +sff_cpld_reg.addr_14_7=0x00020077 +sff_cpld_reg.len_14_7=1 +sff_cpld_reg.bit_offset_14_7=5 + +sff_cpld_reg.mode_15_7=config +sff_cpld_reg.src_15_7=cpld +sff_cpld_reg.frmt_15_7=bit +sff_cpld_reg.pola_15_7=positive +sff_cpld_reg.addr_15_7=0x00020077 +sff_cpld_reg.len_15_7=1 +sff_cpld_reg.bit_offset_15_7=6 + +sff_cpld_reg.mode_16_7=config +sff_cpld_reg.src_16_7=cpld +sff_cpld_reg.frmt_16_7=bit +sff_cpld_reg.pola_16_7=positive +sff_cpld_reg.addr_16_7=0x00020077 +sff_cpld_reg.len_16_7=1 +sff_cpld_reg.bit_offset_16_7=7 + +sff_cpld_reg.mode_17_7=config +sff_cpld_reg.src_17_7=cpld +sff_cpld_reg.frmt_17_7=bit +sff_cpld_reg.pola_17_7=positive +sff_cpld_reg.addr_17_7=0x00020076 +sff_cpld_reg.len_17_7=1 +sff_cpld_reg.bit_offset_17_7=0 + +sff_cpld_reg.mode_18_7=config +sff_cpld_reg.src_18_7=cpld +sff_cpld_reg.frmt_18_7=bit +sff_cpld_reg.pola_18_7=positive +sff_cpld_reg.addr_18_7=0x00020076 +sff_cpld_reg.len_18_7=1 +sff_cpld_reg.bit_offset_18_7=1 + +sff_cpld_reg.mode_19_7=config +sff_cpld_reg.src_19_7=cpld +sff_cpld_reg.frmt_19_7=bit +sff_cpld_reg.pola_19_7=positive +sff_cpld_reg.addr_19_7=0x00020076 +sff_cpld_reg.len_19_7=1 +sff_cpld_reg.bit_offset_19_7=2 + +sff_cpld_reg.mode_20_7=config +sff_cpld_reg.src_20_7=cpld +sff_cpld_reg.frmt_20_7=bit +sff_cpld_reg.pola_20_7=positive +sff_cpld_reg.addr_20_7=0x00020076 +sff_cpld_reg.len_20_7=1 +sff_cpld_reg.bit_offset_20_7=3 + +sff_cpld_reg.mode_21_7=config +sff_cpld_reg.src_21_7=cpld +sff_cpld_reg.frmt_21_7=bit +sff_cpld_reg.pola_21_7=positive +sff_cpld_reg.addr_21_7=0x00020076 +sff_cpld_reg.len_21_7=1 +sff_cpld_reg.bit_offset_21_7=4 + +sff_cpld_reg.mode_22_7=config +sff_cpld_reg.src_22_7=cpld +sff_cpld_reg.frmt_22_7=bit +sff_cpld_reg.pola_22_7=positive +sff_cpld_reg.addr_22_7=0x00020076 +sff_cpld_reg.len_22_7=1 +sff_cpld_reg.bit_offset_22_7=5 + +sff_cpld_reg.mode_23_7=config +sff_cpld_reg.src_23_7=cpld +sff_cpld_reg.frmt_23_7=bit +sff_cpld_reg.pola_23_7=positive +sff_cpld_reg.addr_23_7=0x00020076 +sff_cpld_reg.len_23_7=1 +sff_cpld_reg.bit_offset_23_7=6 + +sff_cpld_reg.mode_24_7=config +sff_cpld_reg.src_24_7=cpld +sff_cpld_reg.frmt_24_7=bit +sff_cpld_reg.pola_24_7=positive +sff_cpld_reg.addr_24_7=0x00020076 +sff_cpld_reg.len_24_7=1 +sff_cpld_reg.bit_offset_24_7=7 + +sff_cpld_reg.mode_25_7=config +sff_cpld_reg.src_25_7=cpld +sff_cpld_reg.frmt_25_7=bit +sff_cpld_reg.pola_25_7=positive +sff_cpld_reg.addr_25_7=0x00030084 +sff_cpld_reg.len_25_7=1 +sff_cpld_reg.bit_offset_25_7=0 + +sff_cpld_reg.mode_26_7=config +sff_cpld_reg.src_26_7=cpld +sff_cpld_reg.frmt_26_7=bit +sff_cpld_reg.pola_26_7=positive +sff_cpld_reg.addr_26_7=0x00030084 +sff_cpld_reg.len_26_7=1 +sff_cpld_reg.bit_offset_26_7=1 + +sff_cpld_reg.mode_27_7=config +sff_cpld_reg.src_27_7=cpld +sff_cpld_reg.frmt_27_7=bit +sff_cpld_reg.pola_27_7=positive +sff_cpld_reg.addr_27_7=0x00030084 +sff_cpld_reg.len_27_7=1 +sff_cpld_reg.bit_offset_27_7=2 + +sff_cpld_reg.mode_28_7=config +sff_cpld_reg.src_28_7=cpld +sff_cpld_reg.frmt_28_7=bit +sff_cpld_reg.pola_28_7=positive +sff_cpld_reg.addr_28_7=0x00030084 +sff_cpld_reg.len_28_7=1 +sff_cpld_reg.bit_offset_28_7=3 + +sff_cpld_reg.mode_29_7=config +sff_cpld_reg.src_29_7=cpld +sff_cpld_reg.frmt_29_7=bit +sff_cpld_reg.pola_29_7=positive +sff_cpld_reg.addr_29_7=0x00030084 +sff_cpld_reg.len_29_7=1 +sff_cpld_reg.bit_offset_29_7=4 + +sff_cpld_reg.mode_30_7=config +sff_cpld_reg.src_30_7=cpld +sff_cpld_reg.frmt_30_7=bit +sff_cpld_reg.pola_30_7=positive +sff_cpld_reg.addr_30_7=0x00030084 +sff_cpld_reg.len_30_7=1 +sff_cpld_reg.bit_offset_30_7=5 + +sff_cpld_reg.mode_31_7=config +sff_cpld_reg.src_31_7=cpld +sff_cpld_reg.frmt_31_7=bit +sff_cpld_reg.pola_31_7=positive +sff_cpld_reg.addr_31_7=0x00030084 +sff_cpld_reg.len_31_7=1 +sff_cpld_reg.bit_offset_31_7=6 + +sff_cpld_reg.mode_32_7=config +sff_cpld_reg.src_32_7=cpld +sff_cpld_reg.frmt_32_7=bit +sff_cpld_reg.pola_32_7=positive +sff_cpld_reg.addr_32_7=0x00030084 +sff_cpld_reg.len_32_7=1 +sff_cpld_reg.bit_offset_32_7=7 + +sff_cpld_reg.mode_33_7=config +sff_cpld_reg.src_33_7=cpld +sff_cpld_reg.frmt_33_7=bit +sff_cpld_reg.pola_33_7=positive +sff_cpld_reg.addr_33_7=0x00030083 +sff_cpld_reg.len_33_7=1 +sff_cpld_reg.bit_offset_33_7=0 + +sff_cpld_reg.mode_34_7=config +sff_cpld_reg.src_34_7=cpld +sff_cpld_reg.frmt_34_7=bit +sff_cpld_reg.pola_34_7=positive +sff_cpld_reg.addr_34_7=0x00030083 +sff_cpld_reg.len_34_7=1 +sff_cpld_reg.bit_offset_34_7=1 + +sff_cpld_reg.mode_35_7=config +sff_cpld_reg.src_35_7=cpld +sff_cpld_reg.frmt_35_7=bit +sff_cpld_reg.pola_35_7=positive +sff_cpld_reg.addr_35_7=0x00030083 +sff_cpld_reg.len_35_7=1 +sff_cpld_reg.bit_offset_35_7=2 + +sff_cpld_reg.mode_36_7=config +sff_cpld_reg.src_36_7=cpld +sff_cpld_reg.frmt_36_7=bit +sff_cpld_reg.pola_36_7=positive +sff_cpld_reg.addr_36_7=0x00030083 +sff_cpld_reg.len_36_7=1 +sff_cpld_reg.bit_offset_36_7=3 + +sff_cpld_reg.mode_37_7=config +sff_cpld_reg.src_37_7=cpld +sff_cpld_reg.frmt_37_7=bit +sff_cpld_reg.pola_37_7=positive +sff_cpld_reg.addr_37_7=0x00030083 +sff_cpld_reg.len_37_7=1 +sff_cpld_reg.bit_offset_37_7=4 + +sff_cpld_reg.mode_38_7=config +sff_cpld_reg.src_38_7=cpld +sff_cpld_reg.frmt_38_7=bit +sff_cpld_reg.pola_38_7=positive +sff_cpld_reg.addr_38_7=0x00030083 +sff_cpld_reg.len_38_7=1 +sff_cpld_reg.bit_offset_38_7=5 + +sff_cpld_reg.mode_39_7=config +sff_cpld_reg.src_39_7=cpld +sff_cpld_reg.frmt_39_7=bit +sff_cpld_reg.pola_39_7=positive +sff_cpld_reg.addr_39_7=0x00030083 +sff_cpld_reg.len_39_7=1 +sff_cpld_reg.bit_offset_39_7=6 + +sff_cpld_reg.mode_40_7=config +sff_cpld_reg.src_40_7=cpld +sff_cpld_reg.frmt_40_7=bit +sff_cpld_reg.pola_40_7=positive +sff_cpld_reg.addr_40_7=0x00030083 +sff_cpld_reg.len_40_7=1 +sff_cpld_reg.bit_offset_40_7=7 + +sff_cpld_reg.mode_41_7=config +sff_cpld_reg.src_41_7=cpld +sff_cpld_reg.frmt_41_7=bit +sff_cpld_reg.pola_41_7=positive +sff_cpld_reg.addr_41_7=0x00030082 +sff_cpld_reg.len_41_7=1 +sff_cpld_reg.bit_offset_41_7=0 + +sff_cpld_reg.mode_42_7=config +sff_cpld_reg.src_42_7=cpld +sff_cpld_reg.frmt_42_7=bit +sff_cpld_reg.pola_42_7=positive +sff_cpld_reg.addr_42_7=0x00030082 +sff_cpld_reg.len_42_7=1 +sff_cpld_reg.bit_offset_42_7=1 + +sff_cpld_reg.mode_43_7=config +sff_cpld_reg.src_43_7=cpld +sff_cpld_reg.frmt_43_7=bit +sff_cpld_reg.pola_43_7=positive +sff_cpld_reg.addr_43_7=0x00030082 +sff_cpld_reg.len_43_7=1 +sff_cpld_reg.bit_offset_43_7=2 + +sff_cpld_reg.mode_44_7=config +sff_cpld_reg.src_44_7=cpld +sff_cpld_reg.frmt_44_7=bit +sff_cpld_reg.pola_44_7=positive +sff_cpld_reg.addr_44_7=0x00030082 +sff_cpld_reg.len_44_7=1 +sff_cpld_reg.bit_offset_44_7=3 + +sff_cpld_reg.mode_45_7=config +sff_cpld_reg.src_45_7=cpld +sff_cpld_reg.frmt_45_7=bit +sff_cpld_reg.pola_45_7=positive +sff_cpld_reg.addr_45_7=0x00030082 +sff_cpld_reg.len_45_7=1 +sff_cpld_reg.bit_offset_45_7=4 + +sff_cpld_reg.mode_46_7=config +sff_cpld_reg.src_46_7=cpld +sff_cpld_reg.frmt_46_7=bit +sff_cpld_reg.pola_46_7=positive +sff_cpld_reg.addr_46_7=0x00030082 +sff_cpld_reg.len_46_7=1 +sff_cpld_reg.bit_offset_46_7=5 + +sff_cpld_reg.mode_47_7=config +sff_cpld_reg.src_47_7=cpld +sff_cpld_reg.frmt_47_7=bit +sff_cpld_reg.pola_47_7=positive +sff_cpld_reg.addr_47_7=0x00030082 +sff_cpld_reg.len_47_7=1 +sff_cpld_reg.bit_offset_47_7=6 + +sff_cpld_reg.mode_48_7=config +sff_cpld_reg.src_48_7=cpld +sff_cpld_reg.frmt_48_7=bit +sff_cpld_reg.pola_48_7=positive +sff_cpld_reg.addr_48_7=0x00030082 +sff_cpld_reg.len_48_7=1 +sff_cpld_reg.bit_offset_48_7=7 + +sff_cpld_reg.mode_49_7=config +sff_cpld_reg.src_49_7=cpld +sff_cpld_reg.frmt_49_7=bit +sff_cpld_reg.pola_49_7=positive +sff_cpld_reg.addr_49_7=0x00030081 +sff_cpld_reg.len_49_7=1 +sff_cpld_reg.bit_offset_49_7=0 + +sff_cpld_reg.mode_50_7=config +sff_cpld_reg.src_50_7=cpld +sff_cpld_reg.frmt_50_7=bit +sff_cpld_reg.pola_50_7=positive +sff_cpld_reg.addr_50_7=0x00030081 +sff_cpld_reg.len_50_7=1 +sff_cpld_reg.bit_offset_50_7=1 + +sff_cpld_reg.mode_51_7=config +sff_cpld_reg.src_51_7=cpld +sff_cpld_reg.frmt_51_7=bit +sff_cpld_reg.pola_51_7=positive +sff_cpld_reg.addr_51_7=0x00030081 +sff_cpld_reg.len_51_7=1 +sff_cpld_reg.bit_offset_51_7=2 + +sff_cpld_reg.mode_52_7=config +sff_cpld_reg.src_52_7=cpld +sff_cpld_reg.frmt_52_7=bit +sff_cpld_reg.pola_52_7=positive +sff_cpld_reg.addr_52_7=0x00030081 +sff_cpld_reg.len_52_7=1 +sff_cpld_reg.bit_offset_52_7=3 + +sff_cpld_reg.mode_53_7=config +sff_cpld_reg.src_53_7=cpld +sff_cpld_reg.frmt_53_7=bit +sff_cpld_reg.pola_53_7=positive +sff_cpld_reg.addr_53_7=0x00030081 +sff_cpld_reg.len_53_7=1 +sff_cpld_reg.bit_offset_53_7=4 + +sff_cpld_reg.mode_54_7=config +sff_cpld_reg.src_54_7=cpld +sff_cpld_reg.frmt_54_7=bit +sff_cpld_reg.pola_54_7=positive +sff_cpld_reg.addr_54_7=0x00030081 +sff_cpld_reg.len_54_7=1 +sff_cpld_reg.bit_offset_54_7=5 + +sff_cpld_reg.mode_55_7=config +sff_cpld_reg.src_55_7=cpld +sff_cpld_reg.frmt_55_7=bit +sff_cpld_reg.pola_55_7=positive +sff_cpld_reg.addr_55_7=0x00030081 +sff_cpld_reg.len_55_7=1 +sff_cpld_reg.bit_offset_55_7=6 + +sff_cpld_reg.mode_56_7=config +sff_cpld_reg.src_56_7=cpld +sff_cpld_reg.frmt_56_7=bit +sff_cpld_reg.pola_56_7=positive +sff_cpld_reg.addr_56_7=0x00030081 +sff_cpld_reg.len_56_7=1 +sff_cpld_reg.bit_offset_56_7=7 + +sff_cpld_reg.mode_57_7=config +sff_cpld_reg.src_57_7=cpld +sff_cpld_reg.frmt_57_7=bit +sff_cpld_reg.pola_57_7=positive +sff_cpld_reg.addr_57_7=0x00030080 +sff_cpld_reg.len_57_7=1 +sff_cpld_reg.bit_offset_57_7=0 + +sff_cpld_reg.mode_58_7=config +sff_cpld_reg.src_58_7=cpld +sff_cpld_reg.frmt_58_7=bit +sff_cpld_reg.pola_58_7=positive +sff_cpld_reg.addr_58_7=0x00030080 +sff_cpld_reg.len_58_7=1 +sff_cpld_reg.bit_offset_58_7=1 + +sff_cpld_reg.mode_59_7=config +sff_cpld_reg.src_59_7=cpld +sff_cpld_reg.frmt_59_7=bit +sff_cpld_reg.pola_59_7=positive +sff_cpld_reg.addr_59_7=0x00030080 +sff_cpld_reg.len_59_7=1 +sff_cpld_reg.bit_offset_59_7=2 + +sff_cpld_reg.mode_60_7=config +sff_cpld_reg.src_60_7=cpld +sff_cpld_reg.frmt_60_7=bit +sff_cpld_reg.pola_60_7=positive +sff_cpld_reg.addr_60_7=0x00030080 +sff_cpld_reg.len_60_7=1 +sff_cpld_reg.bit_offset_60_7=3 + +sff_cpld_reg.mode_61_7=config +sff_cpld_reg.src_61_7=cpld +sff_cpld_reg.frmt_61_7=bit +sff_cpld_reg.pola_61_7=positive +sff_cpld_reg.addr_61_7=0x00030080 +sff_cpld_reg.len_61_7=1 +sff_cpld_reg.bit_offset_61_7=4 + +sff_cpld_reg.mode_62_7=config +sff_cpld_reg.src_62_7=cpld +sff_cpld_reg.frmt_62_7=bit +sff_cpld_reg.pola_62_7=positive +sff_cpld_reg.addr_62_7=0x00030080 +sff_cpld_reg.len_62_7=1 +sff_cpld_reg.bit_offset_62_7=5 + +sff_cpld_reg.mode_63_7=config +sff_cpld_reg.src_63_7=cpld +sff_cpld_reg.frmt_63_7=bit +sff_cpld_reg.pola_63_7=positive +sff_cpld_reg.addr_63_7=0x00030080 +sff_cpld_reg.len_63_7=1 +sff_cpld_reg.bit_offset_63_7=6 + +sff_cpld_reg.mode_64_7=config +sff_cpld_reg.src_64_7=cpld +sff_cpld_reg.frmt_64_7=bit +sff_cpld_reg.pola_64_7=positive +sff_cpld_reg.addr_64_7=0x00030080 +sff_cpld_reg.len_64_7=1 +sff_cpld_reg.bit_offset_64_7=7 + + +# 800G module module_present signal +sff_cpld_reg.mode_1_8=config +sff_cpld_reg.src_1_8=cpld +sff_cpld_reg.frmt_1_8=bit +sff_cpld_reg.pola_1_8=negative +sff_cpld_reg.addr_1_8=0x00020075 +sff_cpld_reg.len_1_8=1 +sff_cpld_reg.bit_offset_1_8=0 + +sff_cpld_reg.mode_2_8=config +sff_cpld_reg.src_2_8=cpld +sff_cpld_reg.frmt_2_8=bit +sff_cpld_reg.pola_2_8=negative +sff_cpld_reg.addr_2_8=0x00020075 +sff_cpld_reg.len_2_8=1 +sff_cpld_reg.bit_offset_2_8=1 + +sff_cpld_reg.mode_3_8=config +sff_cpld_reg.src_3_8=cpld +sff_cpld_reg.frmt_3_8=bit +sff_cpld_reg.pola_3_8=negative +sff_cpld_reg.addr_3_8=0x00020075 +sff_cpld_reg.len_3_8=1 +sff_cpld_reg.bit_offset_3_8=2 + +sff_cpld_reg.mode_4_8=config +sff_cpld_reg.src_4_8=cpld +sff_cpld_reg.frmt_4_8=bit +sff_cpld_reg.pola_4_8=negative +sff_cpld_reg.addr_4_8=0x00020075 +sff_cpld_reg.len_4_8=1 +sff_cpld_reg.bit_offset_4_8=3 + +sff_cpld_reg.mode_5_8=config +sff_cpld_reg.src_5_8=cpld +sff_cpld_reg.frmt_5_8=bit +sff_cpld_reg.pola_5_8=negative +sff_cpld_reg.addr_5_8=0x00020075 +sff_cpld_reg.len_5_8=1 +sff_cpld_reg.bit_offset_5_8=4 + +sff_cpld_reg.mode_6_8=config +sff_cpld_reg.src_6_8=cpld +sff_cpld_reg.frmt_6_8=bit +sff_cpld_reg.pola_6_8=negative +sff_cpld_reg.addr_6_8=0x00020075 +sff_cpld_reg.len_6_8=1 +sff_cpld_reg.bit_offset_6_8=5 + +sff_cpld_reg.mode_7_8=config +sff_cpld_reg.src_7_8=cpld +sff_cpld_reg.frmt_7_8=bit +sff_cpld_reg.pola_7_8=negative +sff_cpld_reg.addr_7_8=0x00020075 +sff_cpld_reg.len_7_8=1 +sff_cpld_reg.bit_offset_7_8=6 + +sff_cpld_reg.mode_8_8=config +sff_cpld_reg.src_8_8=cpld +sff_cpld_reg.frmt_8_8=bit +sff_cpld_reg.pola_8_8=negative +sff_cpld_reg.addr_8_8=0x00020075 +sff_cpld_reg.len_8_8=1 +sff_cpld_reg.bit_offset_8_8=7 + +sff_cpld_reg.mode_9_8=config +sff_cpld_reg.src_9_8=cpld +sff_cpld_reg.frmt_9_8=bit +sff_cpld_reg.pola_9_8=negative +sff_cpld_reg.addr_9_8=0x00020074 +sff_cpld_reg.len_9_8=1 +sff_cpld_reg.bit_offset_9_8=0 + +sff_cpld_reg.mode_10_8=config +sff_cpld_reg.src_10_8=cpld +sff_cpld_reg.frmt_10_8=bit +sff_cpld_reg.pola_10_8=negative +sff_cpld_reg.addr_10_8=0x00020074 +sff_cpld_reg.len_10_8=1 +sff_cpld_reg.bit_offset_10_8=1 + +sff_cpld_reg.mode_11_8=config +sff_cpld_reg.src_11_8=cpld +sff_cpld_reg.frmt_11_8=bit +sff_cpld_reg.pola_11_8=negative +sff_cpld_reg.addr_11_8=0x00020074 +sff_cpld_reg.len_11_8=1 +sff_cpld_reg.bit_offset_11_8=2 + +sff_cpld_reg.mode_12_8=config +sff_cpld_reg.src_12_8=cpld +sff_cpld_reg.frmt_12_8=bit +sff_cpld_reg.pola_12_8=negative +sff_cpld_reg.addr_12_8=0x00020074 +sff_cpld_reg.len_12_8=1 +sff_cpld_reg.bit_offset_12_8=3 + +sff_cpld_reg.mode_13_8=config +sff_cpld_reg.src_13_8=cpld +sff_cpld_reg.frmt_13_8=bit +sff_cpld_reg.pola_13_8=negative +sff_cpld_reg.addr_13_8=0x00020074 +sff_cpld_reg.len_13_8=1 +sff_cpld_reg.bit_offset_13_8=4 + +sff_cpld_reg.mode_14_8=config +sff_cpld_reg.src_14_8=cpld +sff_cpld_reg.frmt_14_8=bit +sff_cpld_reg.pola_14_8=negative +sff_cpld_reg.addr_14_8=0x00020074 +sff_cpld_reg.len_14_8=1 +sff_cpld_reg.bit_offset_14_8=5 + +sff_cpld_reg.mode_15_8=config +sff_cpld_reg.src_15_8=cpld +sff_cpld_reg.frmt_15_8=bit +sff_cpld_reg.pola_15_8=negative +sff_cpld_reg.addr_15_8=0x00020074 +sff_cpld_reg.len_15_8=1 +sff_cpld_reg.bit_offset_15_8=6 + +sff_cpld_reg.mode_16_8=config +sff_cpld_reg.src_16_8=cpld +sff_cpld_reg.frmt_16_8=bit +sff_cpld_reg.pola_16_8=negative +sff_cpld_reg.addr_16_8=0x00020074 +sff_cpld_reg.len_16_8=1 +sff_cpld_reg.bit_offset_16_8=7 + +sff_cpld_reg.mode_17_8=config +sff_cpld_reg.src_17_8=cpld +sff_cpld_reg.frmt_17_8=bit +sff_cpld_reg.pola_17_8=negative +sff_cpld_reg.addr_17_8=0x00020073 +sff_cpld_reg.len_17_8=1 +sff_cpld_reg.bit_offset_17_8=0 + +sff_cpld_reg.mode_18_8=config +sff_cpld_reg.src_18_8=cpld +sff_cpld_reg.frmt_18_8=bit +sff_cpld_reg.pola_18_8=negative +sff_cpld_reg.addr_18_8=0x00020073 +sff_cpld_reg.len_18_8=1 +sff_cpld_reg.bit_offset_18_8=1 + +sff_cpld_reg.mode_19_8=config +sff_cpld_reg.src_19_8=cpld +sff_cpld_reg.frmt_19_8=bit +sff_cpld_reg.pola_19_8=negative +sff_cpld_reg.addr_19_8=0x00020073 +sff_cpld_reg.len_19_8=1 +sff_cpld_reg.bit_offset_19_8=2 + +sff_cpld_reg.mode_20_8=config +sff_cpld_reg.src_20_8=cpld +sff_cpld_reg.frmt_20_8=bit +sff_cpld_reg.pola_20_8=negative +sff_cpld_reg.addr_20_8=0x00020073 +sff_cpld_reg.len_20_8=1 +sff_cpld_reg.bit_offset_20_8=3 + +sff_cpld_reg.mode_21_8=config +sff_cpld_reg.src_21_8=cpld +sff_cpld_reg.frmt_21_8=bit +sff_cpld_reg.pola_21_8=negative +sff_cpld_reg.addr_21_8=0x00020073 +sff_cpld_reg.len_21_8=1 +sff_cpld_reg.bit_offset_21_8=4 + +sff_cpld_reg.mode_22_8=config +sff_cpld_reg.src_22_8=cpld +sff_cpld_reg.frmt_22_8=bit +sff_cpld_reg.pola_22_8=negative +sff_cpld_reg.addr_22_8=0x00020073 +sff_cpld_reg.len_22_8=1 +sff_cpld_reg.bit_offset_22_8=5 + +sff_cpld_reg.mode_23_8=config +sff_cpld_reg.src_23_8=cpld +sff_cpld_reg.frmt_23_8=bit +sff_cpld_reg.pola_23_8=negative +sff_cpld_reg.addr_23_8=0x00020073 +sff_cpld_reg.len_23_8=1 +sff_cpld_reg.bit_offset_23_8=6 + +sff_cpld_reg.mode_24_8=config +sff_cpld_reg.src_24_8=cpld +sff_cpld_reg.frmt_24_8=bit +sff_cpld_reg.pola_24_8=negative +sff_cpld_reg.addr_24_8=0x00020073 +sff_cpld_reg.len_24_8=1 +sff_cpld_reg.bit_offset_24_8=7 + +sff_cpld_reg.mode_25_8=config +sff_cpld_reg.src_25_8=cpld +sff_cpld_reg.frmt_25_8=bit +sff_cpld_reg.pola_25_8=negative +sff_cpld_reg.addr_25_8=0x0003007a +sff_cpld_reg.len_25_8=1 +sff_cpld_reg.bit_offset_25_8=0 + +sff_cpld_reg.mode_26_8=config +sff_cpld_reg.src_26_8=cpld +sff_cpld_reg.frmt_26_8=bit +sff_cpld_reg.pola_26_8=negative +sff_cpld_reg.addr_26_8=0x0003007a +sff_cpld_reg.len_26_8=1 +sff_cpld_reg.bit_offset_26_8=1 + +sff_cpld_reg.mode_27_8=config +sff_cpld_reg.src_27_8=cpld +sff_cpld_reg.frmt_27_8=bit +sff_cpld_reg.pola_27_8=negative +sff_cpld_reg.addr_27_8=0x0003007a +sff_cpld_reg.len_27_8=1 +sff_cpld_reg.bit_offset_27_8=2 + +sff_cpld_reg.mode_28_8=config +sff_cpld_reg.src_28_8=cpld +sff_cpld_reg.frmt_28_8=bit +sff_cpld_reg.pola_28_8=negative +sff_cpld_reg.addr_28_8=0x0003007a +sff_cpld_reg.len_28_8=1 +sff_cpld_reg.bit_offset_28_8=3 + +sff_cpld_reg.mode_29_8=config +sff_cpld_reg.src_29_8=cpld +sff_cpld_reg.frmt_29_8=bit +sff_cpld_reg.pola_29_8=negative +sff_cpld_reg.addr_29_8=0x0003007a +sff_cpld_reg.len_29_8=1 +sff_cpld_reg.bit_offset_29_8=4 + +sff_cpld_reg.mode_30_8=config +sff_cpld_reg.src_30_8=cpld +sff_cpld_reg.frmt_30_8=bit +sff_cpld_reg.pola_30_8=negative +sff_cpld_reg.addr_30_8=0x0003007a +sff_cpld_reg.len_30_8=1 +sff_cpld_reg.bit_offset_30_8=5 + +sff_cpld_reg.mode_31_8=config +sff_cpld_reg.src_31_8=cpld +sff_cpld_reg.frmt_31_8=bit +sff_cpld_reg.pola_31_8=negative +sff_cpld_reg.addr_31_8=0x0003007a +sff_cpld_reg.len_31_8=1 +sff_cpld_reg.bit_offset_31_8=6 + +sff_cpld_reg.mode_32_8=config +sff_cpld_reg.src_32_8=cpld +sff_cpld_reg.frmt_32_8=bit +sff_cpld_reg.pola_32_8=negative +sff_cpld_reg.addr_32_8=0x0003007a +sff_cpld_reg.len_32_8=1 +sff_cpld_reg.bit_offset_32_8=7 + +sff_cpld_reg.mode_33_8=config +sff_cpld_reg.src_33_8=cpld +sff_cpld_reg.frmt_33_8=bit +sff_cpld_reg.pola_33_8=negative +sff_cpld_reg.addr_33_8=0x00030079 +sff_cpld_reg.len_33_8=1 +sff_cpld_reg.bit_offset_33_8=0 + +sff_cpld_reg.mode_34_8=config +sff_cpld_reg.src_34_8=cpld +sff_cpld_reg.frmt_34_8=bit +sff_cpld_reg.pola_34_8=negative +sff_cpld_reg.addr_34_8=0x00030079 +sff_cpld_reg.len_34_8=1 +sff_cpld_reg.bit_offset_34_8=1 + +sff_cpld_reg.mode_35_8=config +sff_cpld_reg.src_35_8=cpld +sff_cpld_reg.frmt_35_8=bit +sff_cpld_reg.pola_35_8=negative +sff_cpld_reg.addr_35_8=0x00030079 +sff_cpld_reg.len_35_8=1 +sff_cpld_reg.bit_offset_35_8=2 + +sff_cpld_reg.mode_36_8=config +sff_cpld_reg.src_36_8=cpld +sff_cpld_reg.frmt_36_8=bit +sff_cpld_reg.pola_36_8=negative +sff_cpld_reg.addr_36_8=0x00030079 +sff_cpld_reg.len_36_8=1 +sff_cpld_reg.bit_offset_36_8=3 + +sff_cpld_reg.mode_37_8=config +sff_cpld_reg.src_37_8=cpld +sff_cpld_reg.frmt_37_8=bit +sff_cpld_reg.pola_37_8=negative +sff_cpld_reg.addr_37_8=0x00030079 +sff_cpld_reg.len_37_8=1 +sff_cpld_reg.bit_offset_37_8=4 + +sff_cpld_reg.mode_38_8=config +sff_cpld_reg.src_38_8=cpld +sff_cpld_reg.frmt_38_8=bit +sff_cpld_reg.pola_38_8=negative +sff_cpld_reg.addr_38_8=0x00030079 +sff_cpld_reg.len_38_8=1 +sff_cpld_reg.bit_offset_38_8=5 + +sff_cpld_reg.mode_39_8=config +sff_cpld_reg.src_39_8=cpld +sff_cpld_reg.frmt_39_8=bit +sff_cpld_reg.pola_39_8=negative +sff_cpld_reg.addr_39_8=0x00030079 +sff_cpld_reg.len_39_8=1 +sff_cpld_reg.bit_offset_39_8=6 + +sff_cpld_reg.mode_40_8=config +sff_cpld_reg.src_40_8=cpld +sff_cpld_reg.frmt_40_8=bit +sff_cpld_reg.pola_40_8=negative +sff_cpld_reg.addr_40_8=0x00030079 +sff_cpld_reg.len_40_8=1 +sff_cpld_reg.bit_offset_40_8=7 + +sff_cpld_reg.mode_41_8=config +sff_cpld_reg.src_41_8=cpld +sff_cpld_reg.frmt_41_8=bit +sff_cpld_reg.pola_41_8=negative +sff_cpld_reg.addr_41_8=0x00030078 +sff_cpld_reg.len_41_8=1 +sff_cpld_reg.bit_offset_41_8=0 + +sff_cpld_reg.mode_42_8=config +sff_cpld_reg.src_42_8=cpld +sff_cpld_reg.frmt_42_8=bit +sff_cpld_reg.pola_42_8=negative +sff_cpld_reg.addr_42_8=0x00030078 +sff_cpld_reg.len_42_8=1 +sff_cpld_reg.bit_offset_42_8=1 + +sff_cpld_reg.mode_43_8=config +sff_cpld_reg.src_43_8=cpld +sff_cpld_reg.frmt_43_8=bit +sff_cpld_reg.pola_43_8=negative +sff_cpld_reg.addr_43_8=0x00030078 +sff_cpld_reg.len_43_8=1 +sff_cpld_reg.bit_offset_43_8=2 + +sff_cpld_reg.mode_44_8=config +sff_cpld_reg.src_44_8=cpld +sff_cpld_reg.frmt_44_8=bit +sff_cpld_reg.pola_44_8=negative +sff_cpld_reg.addr_44_8=0x00030078 +sff_cpld_reg.len_44_8=1 +sff_cpld_reg.bit_offset_44_8=3 + +sff_cpld_reg.mode_45_8=config +sff_cpld_reg.src_45_8=cpld +sff_cpld_reg.frmt_45_8=bit +sff_cpld_reg.pola_45_8=negative +sff_cpld_reg.addr_45_8=0x00030078 +sff_cpld_reg.len_45_8=1 +sff_cpld_reg.bit_offset_45_8=4 + +sff_cpld_reg.mode_46_8=config +sff_cpld_reg.src_46_8=cpld +sff_cpld_reg.frmt_46_8=bit +sff_cpld_reg.pola_46_8=negative +sff_cpld_reg.addr_46_8=0x00030078 +sff_cpld_reg.len_46_8=1 +sff_cpld_reg.bit_offset_46_8=5 + +sff_cpld_reg.mode_47_8=config +sff_cpld_reg.src_47_8=cpld +sff_cpld_reg.frmt_47_8=bit +sff_cpld_reg.pola_47_8=negative +sff_cpld_reg.addr_47_8=0x00030078 +sff_cpld_reg.len_47_8=1 +sff_cpld_reg.bit_offset_47_8=6 + +sff_cpld_reg.mode_48_8=config +sff_cpld_reg.src_48_8=cpld +sff_cpld_reg.frmt_48_8=bit +sff_cpld_reg.pola_48_8=negative +sff_cpld_reg.addr_48_8=0x00030078 +sff_cpld_reg.len_48_8=1 +sff_cpld_reg.bit_offset_48_8=7 + +sff_cpld_reg.mode_49_8=config +sff_cpld_reg.src_49_8=cpld +sff_cpld_reg.frmt_49_8=bit +sff_cpld_reg.pola_49_8=negative +sff_cpld_reg.addr_49_8=0x00030077 +sff_cpld_reg.len_49_8=1 +sff_cpld_reg.bit_offset_49_8=0 + +sff_cpld_reg.mode_50_8=config +sff_cpld_reg.src_50_8=cpld +sff_cpld_reg.frmt_50_8=bit +sff_cpld_reg.pola_50_8=negative +sff_cpld_reg.addr_50_8=0x00030077 +sff_cpld_reg.len_50_8=1 +sff_cpld_reg.bit_offset_50_8=1 + +sff_cpld_reg.mode_51_8=config +sff_cpld_reg.src_51_8=cpld +sff_cpld_reg.frmt_51_8=bit +sff_cpld_reg.pola_51_8=negative +sff_cpld_reg.addr_51_8=0x00030077 +sff_cpld_reg.len_51_8=1 +sff_cpld_reg.bit_offset_51_8=2 + +sff_cpld_reg.mode_52_8=config +sff_cpld_reg.src_52_8=cpld +sff_cpld_reg.frmt_52_8=bit +sff_cpld_reg.pola_52_8=negative +sff_cpld_reg.addr_52_8=0x00030077 +sff_cpld_reg.len_52_8=1 +sff_cpld_reg.bit_offset_52_8=3 + +sff_cpld_reg.mode_53_8=config +sff_cpld_reg.src_53_8=cpld +sff_cpld_reg.frmt_53_8=bit +sff_cpld_reg.pola_53_8=negative +sff_cpld_reg.addr_53_8=0x00030077 +sff_cpld_reg.len_53_8=1 +sff_cpld_reg.bit_offset_53_8=4 + +sff_cpld_reg.mode_54_8=config +sff_cpld_reg.src_54_8=cpld +sff_cpld_reg.frmt_54_8=bit +sff_cpld_reg.pola_54_8=negative +sff_cpld_reg.addr_54_8=0x00030077 +sff_cpld_reg.len_54_8=1 +sff_cpld_reg.bit_offset_54_8=5 + +sff_cpld_reg.mode_55_8=config +sff_cpld_reg.src_55_8=cpld +sff_cpld_reg.frmt_55_8=bit +sff_cpld_reg.pola_55_8=negative +sff_cpld_reg.addr_55_8=0x00030077 +sff_cpld_reg.len_55_8=1 +sff_cpld_reg.bit_offset_55_8=6 + +sff_cpld_reg.mode_56_8=config +sff_cpld_reg.src_56_8=cpld +sff_cpld_reg.frmt_56_8=bit +sff_cpld_reg.pola_56_8=negative +sff_cpld_reg.addr_56_8=0x00030077 +sff_cpld_reg.len_56_8=1 +sff_cpld_reg.bit_offset_56_8=7 + +sff_cpld_reg.mode_57_8=config +sff_cpld_reg.src_57_8=cpld +sff_cpld_reg.frmt_57_8=bit +sff_cpld_reg.pola_57_8=negative +sff_cpld_reg.addr_57_8=0x00030076 +sff_cpld_reg.len_57_8=1 +sff_cpld_reg.bit_offset_57_8=0 + +sff_cpld_reg.mode_58_8=config +sff_cpld_reg.src_58_8=cpld +sff_cpld_reg.frmt_58_8=bit +sff_cpld_reg.pola_58_8=negative +sff_cpld_reg.addr_58_8=0x00030076 +sff_cpld_reg.len_58_8=1 +sff_cpld_reg.bit_offset_58_8=1 + +sff_cpld_reg.mode_59_8=config +sff_cpld_reg.src_59_8=cpld +sff_cpld_reg.frmt_59_8=bit +sff_cpld_reg.pola_59_8=negative +sff_cpld_reg.addr_59_8=0x00030076 +sff_cpld_reg.len_59_8=1 +sff_cpld_reg.bit_offset_59_8=2 + +sff_cpld_reg.mode_60_8=config +sff_cpld_reg.src_60_8=cpld +sff_cpld_reg.frmt_60_8=bit +sff_cpld_reg.pola_60_8=negative +sff_cpld_reg.addr_60_8=0x00030076 +sff_cpld_reg.len_60_8=1 +sff_cpld_reg.bit_offset_60_8=3 + +sff_cpld_reg.mode_61_8=config +sff_cpld_reg.src_61_8=cpld +sff_cpld_reg.frmt_61_8=bit +sff_cpld_reg.pola_61_8=negative +sff_cpld_reg.addr_61_8=0x00030076 +sff_cpld_reg.len_61_8=1 +sff_cpld_reg.bit_offset_61_8=4 + +sff_cpld_reg.mode_62_8=config +sff_cpld_reg.src_62_8=cpld +sff_cpld_reg.frmt_62_8=bit +sff_cpld_reg.pola_62_8=negative +sff_cpld_reg.addr_62_8=0x00030076 +sff_cpld_reg.len_62_8=1 +sff_cpld_reg.bit_offset_62_8=5 + +sff_cpld_reg.mode_63_8=config +sff_cpld_reg.src_63_8=cpld +sff_cpld_reg.frmt_63_8=bit +sff_cpld_reg.pola_63_8=negative +sff_cpld_reg.addr_63_8=0x00030076 +sff_cpld_reg.len_63_8=1 +sff_cpld_reg.bit_offset_63_8=6 + +sff_cpld_reg.mode_64_8=config +sff_cpld_reg.src_64_8=cpld +sff_cpld_reg.frmt_64_8=bit +sff_cpld_reg.pola_64_8=negative +sff_cpld_reg.addr_64_8=0x00030076 +sff_cpld_reg.len_64_8=1 +sff_cpld_reg.bit_offset_64_8=7 + +sff_cpld_reg.mode_65_8=config +sff_cpld_reg.src_65_8=cpld +sff_cpld_reg.frmt_65_8=bit +sff_cpld_reg.pola_65_8=negative +sff_cpld_reg.addr_65_8=0x00050069 +sff_cpld_reg.len_65_8=1 +sff_cpld_reg.bit_offset_65_8=0 + +sff_cpld_reg.mode_66_8=config +sff_cpld_reg.src_66_8=cpld +sff_cpld_reg.frmt_66_8=bit +sff_cpld_reg.pola_66_8=negative +sff_cpld_reg.addr_66_8=0x00050069 +sff_cpld_reg.len_66_8=1 +sff_cpld_reg.bit_offset_66_8=1 + + +# 800G module power_on signal +sff_cpld_reg.mode_1_1=config +sff_cpld_reg.src_1_1=cpld +sff_cpld_reg.frmt_1_1=bit +sff_cpld_reg.addr_1_1=0x00040080 +sff_cpld_reg.len_1_1=1 +sff_cpld_reg.bit_offset_1_1=0 + +sff_cpld_reg.mode_2_1=config +sff_cpld_reg.src_2_1=cpld +sff_cpld_reg.frmt_2_1=bit +sff_cpld_reg.addr_2_1=0x00040080 +sff_cpld_reg.len_2_1=1 +sff_cpld_reg.bit_offset_2_1=0 + +sff_cpld_reg.mode_3_1=config +sff_cpld_reg.src_3_1=cpld +sff_cpld_reg.frmt_3_1=bit +sff_cpld_reg.addr_3_1=0x00040080 +sff_cpld_reg.len_3_1=1 +sff_cpld_reg.bit_offset_3_1=0 + +sff_cpld_reg.mode_4_1=config +sff_cpld_reg.src_4_1=cpld +sff_cpld_reg.frmt_4_1=bit +sff_cpld_reg.addr_4_1=0x00040080 +sff_cpld_reg.len_4_1=1 +sff_cpld_reg.bit_offset_4_1=0 + +sff_cpld_reg.mode_5_1=config +sff_cpld_reg.src_5_1=cpld +sff_cpld_reg.frmt_5_1=bit +sff_cpld_reg.addr_5_1=0x00040081 +sff_cpld_reg.len_5_1=1 +sff_cpld_reg.bit_offset_5_1=0 + +sff_cpld_reg.mode_6_1=config +sff_cpld_reg.src_6_1=cpld +sff_cpld_reg.frmt_6_1=bit +sff_cpld_reg.addr_6_1=0x00040081 +sff_cpld_reg.len_6_1=1 +sff_cpld_reg.bit_offset_6_1=0 + +sff_cpld_reg.mode_7_1=config +sff_cpld_reg.src_7_1=cpld +sff_cpld_reg.frmt_7_1=bit +sff_cpld_reg.addr_7_1=0x00040081 +sff_cpld_reg.len_7_1=1 +sff_cpld_reg.bit_offset_7_1=0 + +sff_cpld_reg.mode_8_1=config +sff_cpld_reg.src_8_1=cpld +sff_cpld_reg.frmt_8_1=bit +sff_cpld_reg.addr_8_1=0x00040081 +sff_cpld_reg.len_8_1=1 +sff_cpld_reg.bit_offset_8_1=0 + +sff_cpld_reg.mode_9_1=config +sff_cpld_reg.src_9_1=cpld +sff_cpld_reg.frmt_9_1=bit +sff_cpld_reg.addr_9_1=0x00040080 +sff_cpld_reg.len_9_1=1 +sff_cpld_reg.bit_offset_9_1=1 + +sff_cpld_reg.mode_10_1=config +sff_cpld_reg.src_10_1=cpld +sff_cpld_reg.frmt_10_1=bit +sff_cpld_reg.addr_10_1=0x00040080 +sff_cpld_reg.len_10_1=1 +sff_cpld_reg.bit_offset_10_1=1 + +sff_cpld_reg.mode_11_1=config +sff_cpld_reg.src_11_1=cpld +sff_cpld_reg.frmt_11_1=bit +sff_cpld_reg.addr_11_1=0x00040080 +sff_cpld_reg.len_11_1=1 +sff_cpld_reg.bit_offset_11_1=1 + +sff_cpld_reg.mode_12_1=config +sff_cpld_reg.src_12_1=cpld +sff_cpld_reg.frmt_12_1=bit +sff_cpld_reg.addr_12_1=0x00040080 +sff_cpld_reg.len_12_1=1 +sff_cpld_reg.bit_offset_12_1=1 + +sff_cpld_reg.mode_13_1=config +sff_cpld_reg.src_13_1=cpld +sff_cpld_reg.frmt_13_1=bit +sff_cpld_reg.addr_13_1=0x00040081 +sff_cpld_reg.len_13_1=1 +sff_cpld_reg.bit_offset_13_1=1 + +sff_cpld_reg.mode_14_1=config +sff_cpld_reg.src_14_1=cpld +sff_cpld_reg.frmt_14_1=bit +sff_cpld_reg.addr_14_1=0x00040081 +sff_cpld_reg.len_14_1=1 +sff_cpld_reg.bit_offset_14_1=1 + +sff_cpld_reg.mode_15_1=config +sff_cpld_reg.src_15_1=cpld +sff_cpld_reg.frmt_15_1=bit +sff_cpld_reg.addr_15_1=0x00040081 +sff_cpld_reg.len_15_1=1 +sff_cpld_reg.bit_offset_15_1=1 + +sff_cpld_reg.mode_16_1=config +sff_cpld_reg.src_16_1=cpld +sff_cpld_reg.frmt_16_1=bit +sff_cpld_reg.addr_16_1=0x00040081 +sff_cpld_reg.len_16_1=1 +sff_cpld_reg.bit_offset_16_1=1 + +sff_cpld_reg.mode_17_1=config +sff_cpld_reg.src_17_1=cpld +sff_cpld_reg.frmt_17_1=bit +sff_cpld_reg.addr_17_1=0x00040080 +sff_cpld_reg.len_17_1=1 +sff_cpld_reg.bit_offset_17_1=2 + +sff_cpld_reg.mode_18_1=config +sff_cpld_reg.src_18_1=cpld +sff_cpld_reg.frmt_18_1=bit +sff_cpld_reg.addr_18_1=0x00040080 +sff_cpld_reg.len_18_1=1 +sff_cpld_reg.bit_offset_18_1=2 + +sff_cpld_reg.mode_19_1=config +sff_cpld_reg.src_19_1=cpld +sff_cpld_reg.frmt_19_1=bit +sff_cpld_reg.addr_19_1=0x00040080 +sff_cpld_reg.len_19_1=1 +sff_cpld_reg.bit_offset_19_1=2 + +sff_cpld_reg.mode_20_1=config +sff_cpld_reg.src_20_1=cpld +sff_cpld_reg.frmt_20_1=bit +sff_cpld_reg.addr_20_1=0x00040080 +sff_cpld_reg.len_20_1=1 +sff_cpld_reg.bit_offset_20_1=2 + +sff_cpld_reg.mode_21_1=config +sff_cpld_reg.src_21_1=cpld +sff_cpld_reg.frmt_21_1=bit +sff_cpld_reg.addr_21_1=0x00040081 +sff_cpld_reg.len_21_1=1 +sff_cpld_reg.bit_offset_21_1=2 + +sff_cpld_reg.mode_22_1=config +sff_cpld_reg.src_22_1=cpld +sff_cpld_reg.frmt_22_1=bit +sff_cpld_reg.addr_22_1=0x00040081 +sff_cpld_reg.len_22_1=1 +sff_cpld_reg.bit_offset_22_1=2 + +sff_cpld_reg.mode_23_1=config +sff_cpld_reg.src_23_1=cpld +sff_cpld_reg.frmt_23_1=bit +sff_cpld_reg.addr_23_1=0x00040081 +sff_cpld_reg.len_23_1=1 +sff_cpld_reg.bit_offset_23_1=2 + +sff_cpld_reg.mode_24_1=config +sff_cpld_reg.src_24_1=cpld +sff_cpld_reg.frmt_24_1=bit +sff_cpld_reg.addr_24_1=0x00040081 +sff_cpld_reg.len_24_1=1 +sff_cpld_reg.bit_offset_24_1=2 + +sff_cpld_reg.mode_25_1=config +sff_cpld_reg.src_25_1=cpld +sff_cpld_reg.frmt_25_1=bit +sff_cpld_reg.addr_25_1=0x00040080 +sff_cpld_reg.len_25_1=1 +sff_cpld_reg.bit_offset_25_1=3 + +sff_cpld_reg.mode_26_1=config +sff_cpld_reg.src_26_1=cpld +sff_cpld_reg.frmt_26_1=bit +sff_cpld_reg.addr_26_1=0x00040080 +sff_cpld_reg.len_26_1=1 +sff_cpld_reg.bit_offset_26_1=3 + +sff_cpld_reg.mode_27_1=config +sff_cpld_reg.src_27_1=cpld +sff_cpld_reg.frmt_27_1=bit +sff_cpld_reg.addr_27_1=0x00040080 +sff_cpld_reg.len_27_1=1 +sff_cpld_reg.bit_offset_27_1=3 + +sff_cpld_reg.mode_28_1=config +sff_cpld_reg.src_28_1=cpld +sff_cpld_reg.frmt_28_1=bit +sff_cpld_reg.addr_28_1=0x00040080 +sff_cpld_reg.len_28_1=1 +sff_cpld_reg.bit_offset_28_1=3 + +sff_cpld_reg.mode_29_1=config +sff_cpld_reg.src_29_1=cpld +sff_cpld_reg.frmt_29_1=bit +sff_cpld_reg.addr_29_1=0x00040081 +sff_cpld_reg.len_29_1=1 +sff_cpld_reg.bit_offset_29_1=3 + +sff_cpld_reg.mode_30_1=config +sff_cpld_reg.src_30_1=cpld +sff_cpld_reg.frmt_30_1=bit +sff_cpld_reg.addr_30_1=0x00040081 +sff_cpld_reg.len_30_1=1 +sff_cpld_reg.bit_offset_30_1=3 + +sff_cpld_reg.mode_31_1=config +sff_cpld_reg.src_31_1=cpld +sff_cpld_reg.frmt_31_1=bit +sff_cpld_reg.addr_31_1=0x00040081 +sff_cpld_reg.len_31_1=1 +sff_cpld_reg.bit_offset_31_1=3 + +sff_cpld_reg.mode_32_1=config +sff_cpld_reg.src_32_1=cpld +sff_cpld_reg.frmt_32_1=bit +sff_cpld_reg.addr_32_1=0x00040081 +sff_cpld_reg.len_32_1=1 +sff_cpld_reg.bit_offset_32_1=3 + +sff_cpld_reg.mode_33_1=config +sff_cpld_reg.src_33_1=cpld +sff_cpld_reg.frmt_33_1=bit +sff_cpld_reg.addr_33_1=0x00040080 +sff_cpld_reg.len_33_1=1 +sff_cpld_reg.bit_offset_33_1=4 + +sff_cpld_reg.mode_34_1=config +sff_cpld_reg.src_34_1=cpld +sff_cpld_reg.frmt_34_1=bit +sff_cpld_reg.addr_34_1=0x00040080 +sff_cpld_reg.len_34_1=1 +sff_cpld_reg.bit_offset_34_1=4 + +sff_cpld_reg.mode_35_1=config +sff_cpld_reg.src_35_1=cpld +sff_cpld_reg.frmt_35_1=bit +sff_cpld_reg.addr_35_1=0x00040080 +sff_cpld_reg.len_35_1=1 +sff_cpld_reg.bit_offset_35_1=4 + +sff_cpld_reg.mode_36_1=config +sff_cpld_reg.src_36_1=cpld +sff_cpld_reg.frmt_36_1=bit +sff_cpld_reg.addr_36_1=0x00040080 +sff_cpld_reg.len_36_1=1 +sff_cpld_reg.bit_offset_36_1=4 + +sff_cpld_reg.mode_37_1=config +sff_cpld_reg.src_37_1=cpld +sff_cpld_reg.frmt_37_1=bit +sff_cpld_reg.addr_37_1=0x00040081 +sff_cpld_reg.len_37_1=1 +sff_cpld_reg.bit_offset_37_1=4 + +sff_cpld_reg.mode_38_1=config +sff_cpld_reg.src_38_1=cpld +sff_cpld_reg.frmt_38_1=bit +sff_cpld_reg.addr_38_1=0x00040081 +sff_cpld_reg.len_38_1=1 +sff_cpld_reg.bit_offset_38_1=4 + +sff_cpld_reg.mode_39_1=config +sff_cpld_reg.src_39_1=cpld +sff_cpld_reg.frmt_39_1=bit +sff_cpld_reg.addr_39_1=0x00040081 +sff_cpld_reg.len_39_1=1 +sff_cpld_reg.bit_offset_39_1=4 + +sff_cpld_reg.mode_40_1=config +sff_cpld_reg.src_40_1=cpld +sff_cpld_reg.frmt_40_1=bit +sff_cpld_reg.addr_40_1=0x00040081 +sff_cpld_reg.len_40_1=1 +sff_cpld_reg.bit_offset_40_1=4 + +sff_cpld_reg.mode_41_1=config +sff_cpld_reg.src_41_1=cpld +sff_cpld_reg.frmt_41_1=bit +sff_cpld_reg.addr_41_1=0x00040080 +sff_cpld_reg.len_41_1=1 +sff_cpld_reg.bit_offset_41_1=5 + +sff_cpld_reg.mode_42_1=config +sff_cpld_reg.src_42_1=cpld +sff_cpld_reg.frmt_42_1=bit +sff_cpld_reg.addr_42_1=0x00040080 +sff_cpld_reg.len_42_1=1 +sff_cpld_reg.bit_offset_42_1=5 + +sff_cpld_reg.mode_43_1=config +sff_cpld_reg.src_43_1=cpld +sff_cpld_reg.frmt_43_1=bit +sff_cpld_reg.addr_43_1=0x00040080 +sff_cpld_reg.len_43_1=1 +sff_cpld_reg.bit_offset_43_1=5 + +sff_cpld_reg.mode_44_1=config +sff_cpld_reg.src_44_1=cpld +sff_cpld_reg.frmt_44_1=bit +sff_cpld_reg.addr_44_1=0x00040080 +sff_cpld_reg.len_44_1=1 +sff_cpld_reg.bit_offset_44_1=5 + +sff_cpld_reg.mode_45_1=config +sff_cpld_reg.src_45_1=cpld +sff_cpld_reg.frmt_45_1=bit +sff_cpld_reg.addr_45_1=0x00040081 +sff_cpld_reg.len_45_1=1 +sff_cpld_reg.bit_offset_45_1=5 + +sff_cpld_reg.mode_46_1=config +sff_cpld_reg.src_46_1=cpld +sff_cpld_reg.frmt_46_1=bit +sff_cpld_reg.addr_46_1=0x00040081 +sff_cpld_reg.len_46_1=1 +sff_cpld_reg.bit_offset_46_1=5 + +sff_cpld_reg.mode_47_1=config +sff_cpld_reg.src_47_1=cpld +sff_cpld_reg.frmt_47_1=bit +sff_cpld_reg.addr_47_1=0x00040081 +sff_cpld_reg.len_47_1=1 +sff_cpld_reg.bit_offset_47_1=5 + +sff_cpld_reg.mode_48_1=config +sff_cpld_reg.src_48_1=cpld +sff_cpld_reg.frmt_48_1=bit +sff_cpld_reg.addr_48_1=0x00040081 +sff_cpld_reg.len_48_1=1 +sff_cpld_reg.bit_offset_48_1=5 + +sff_cpld_reg.mode_49_1=config +sff_cpld_reg.src_49_1=cpld +sff_cpld_reg.frmt_49_1=bit +sff_cpld_reg.addr_49_1=0x00040080 +sff_cpld_reg.len_49_1=1 +sff_cpld_reg.bit_offset_49_1=6 + +sff_cpld_reg.mode_50_1=config +sff_cpld_reg.src_50_1=cpld +sff_cpld_reg.frmt_50_1=bit +sff_cpld_reg.addr_50_1=0x00040080 +sff_cpld_reg.len_50_1=1 +sff_cpld_reg.bit_offset_50_1=6 + +sff_cpld_reg.mode_51_1=config +sff_cpld_reg.src_51_1=cpld +sff_cpld_reg.frmt_51_1=bit +sff_cpld_reg.addr_51_1=0x00040080 +sff_cpld_reg.len_51_1=1 +sff_cpld_reg.bit_offset_51_1=6 + +sff_cpld_reg.mode_52_1=config +sff_cpld_reg.src_52_1=cpld +sff_cpld_reg.frmt_52_1=bit +sff_cpld_reg.addr_52_1=0x00040080 +sff_cpld_reg.len_52_1=1 +sff_cpld_reg.bit_offset_52_1=6 + +sff_cpld_reg.mode_53_1=config +sff_cpld_reg.src_53_1=cpld +sff_cpld_reg.frmt_53_1=bit +sff_cpld_reg.addr_53_1=0x00040081 +sff_cpld_reg.len_53_1=1 +sff_cpld_reg.bit_offset_53_1=6 + +sff_cpld_reg.mode_54_1=config +sff_cpld_reg.src_54_1=cpld +sff_cpld_reg.frmt_54_1=bit +sff_cpld_reg.addr_54_1=0x00040081 +sff_cpld_reg.len_54_1=1 +sff_cpld_reg.bit_offset_54_1=6 + +sff_cpld_reg.mode_55_1=config +sff_cpld_reg.src_55_1=cpld +sff_cpld_reg.frmt_55_1=bit +sff_cpld_reg.addr_55_1=0x00040081 +sff_cpld_reg.len_55_1=1 +sff_cpld_reg.bit_offset_55_1=6 + +sff_cpld_reg.mode_56_1=config +sff_cpld_reg.src_56_1=cpld +sff_cpld_reg.frmt_56_1=bit +sff_cpld_reg.addr_56_1=0x00040081 +sff_cpld_reg.len_56_1=1 +sff_cpld_reg.bit_offset_56_1=6 + +sff_cpld_reg.mode_57_1=config +sff_cpld_reg.src_57_1=cpld +sff_cpld_reg.frmt_57_1=bit +sff_cpld_reg.addr_57_1=0x00040080 +sff_cpld_reg.len_57_1=1 +sff_cpld_reg.bit_offset_57_1=7 + +sff_cpld_reg.mode_58_1=config +sff_cpld_reg.src_58_1=cpld +sff_cpld_reg.frmt_58_1=bit +sff_cpld_reg.addr_58_1=0x00040080 +sff_cpld_reg.len_58_1=1 +sff_cpld_reg.bit_offset_58_1=7 + +sff_cpld_reg.mode_59_1=config +sff_cpld_reg.src_59_1=cpld +sff_cpld_reg.frmt_59_1=bit +sff_cpld_reg.addr_59_1=0x00040080 +sff_cpld_reg.len_59_1=1 +sff_cpld_reg.bit_offset_59_1=7 + +sff_cpld_reg.mode_60_1=config +sff_cpld_reg.src_60_1=cpld +sff_cpld_reg.frmt_60_1=bit +sff_cpld_reg.addr_60_1=0x00040080 +sff_cpld_reg.len_60_1=1 +sff_cpld_reg.bit_offset_60_1=7 + +sff_cpld_reg.mode_61_1=config +sff_cpld_reg.src_61_1=cpld +sff_cpld_reg.frmt_61_1=bit +sff_cpld_reg.addr_61_1=0x00040081 +sff_cpld_reg.len_61_1=1 +sff_cpld_reg.bit_offset_61_1=7 + +sff_cpld_reg.mode_62_1=config +sff_cpld_reg.src_62_1=cpld +sff_cpld_reg.frmt_62_1=bit +sff_cpld_reg.addr_62_1=0x00040081 +sff_cpld_reg.len_62_1=1 +sff_cpld_reg.bit_offset_62_1=7 + +sff_cpld_reg.mode_63_1=config +sff_cpld_reg.src_63_1=cpld +sff_cpld_reg.frmt_63_1=bit +sff_cpld_reg.addr_63_1=0x00040081 +sff_cpld_reg.len_63_1=1 +sff_cpld_reg.bit_offset_63_1=7 + +sff_cpld_reg.mode_64_1=config +sff_cpld_reg.src_64_1=cpld +sff_cpld_reg.frmt_64_1=bit +sff_cpld_reg.addr_64_1=0x00040081 +sff_cpld_reg.len_64_1=1 +sff_cpld_reg.bit_offset_64_1=7 + + +# interrupt +sff_cpld_reg.mode_1_9=config +sff_cpld_reg.src_1_9=cpld +sff_cpld_reg.frmt_1_9=bit +sff_cpld_reg.pola_1_9=negative +sff_cpld_reg.addr_1_9=0x00020062 +sff_cpld_reg.len_1_9=1 +sff_cpld_reg.bit_offset_1_9=0 + +sff_cpld_reg.mode_2_9=config +sff_cpld_reg.src_2_9=cpld +sff_cpld_reg.frmt_2_9=bit +sff_cpld_reg.pola_2_9=negative +sff_cpld_reg.addr_2_9=0x00020062 +sff_cpld_reg.len_2_9=1 +sff_cpld_reg.bit_offset_2_9=1 + +sff_cpld_reg.mode_3_9=config +sff_cpld_reg.src_3_9=cpld +sff_cpld_reg.frmt_3_9=bit +sff_cpld_reg.pola_3_9=negative +sff_cpld_reg.addr_3_9=0x00020062 +sff_cpld_reg.len_3_9=1 +sff_cpld_reg.bit_offset_3_9=2 + +sff_cpld_reg.mode_4_9=config +sff_cpld_reg.src_4_9=cpld +sff_cpld_reg.frmt_4_9=bit +sff_cpld_reg.pola_4_9=negative +sff_cpld_reg.addr_4_9=0x00020062 +sff_cpld_reg.len_4_9=1 +sff_cpld_reg.bit_offset_4_9=3 + +sff_cpld_reg.mode_5_9=config +sff_cpld_reg.src_5_9=cpld +sff_cpld_reg.frmt_5_9=bit +sff_cpld_reg.pola_5_9=negative +sff_cpld_reg.addr_5_9=0x00020062 +sff_cpld_reg.len_5_9=1 +sff_cpld_reg.bit_offset_5_9=4 + +sff_cpld_reg.mode_6_9=config +sff_cpld_reg.src_6_9=cpld +sff_cpld_reg.frmt_6_9=bit +sff_cpld_reg.pola_6_9=negative +sff_cpld_reg.addr_6_9=0x00020062 +sff_cpld_reg.len_6_9=1 +sff_cpld_reg.bit_offset_6_9=5 + +sff_cpld_reg.mode_7_9=config +sff_cpld_reg.src_7_9=cpld +sff_cpld_reg.frmt_7_9=bit +sff_cpld_reg.pola_7_9=negative +sff_cpld_reg.addr_7_9=0x00020062 +sff_cpld_reg.len_7_9=1 +sff_cpld_reg.bit_offset_7_9=6 + +sff_cpld_reg.mode_8_9=config +sff_cpld_reg.src_8_9=cpld +sff_cpld_reg.frmt_8_9=bit +sff_cpld_reg.pola_8_9=negative +sff_cpld_reg.addr_8_9=0x00020062 +sff_cpld_reg.len_8_9=1 +sff_cpld_reg.bit_offset_8_9=7 + +sff_cpld_reg.mode_9_9=config +sff_cpld_reg.src_9_9=cpld +sff_cpld_reg.frmt_9_9=bit +sff_cpld_reg.pola_9_9=negative +sff_cpld_reg.addr_9_9=0x00020061 +sff_cpld_reg.len_9_9=1 +sff_cpld_reg.bit_offset_9_9=0 + +sff_cpld_reg.mode_10_9=config +sff_cpld_reg.src_10_9=cpld +sff_cpld_reg.frmt_10_9=bit +sff_cpld_reg.pola_10_9=negative +sff_cpld_reg.addr_10_9=0x00020061 +sff_cpld_reg.len_10_9=1 +sff_cpld_reg.bit_offset_10_9=1 + +sff_cpld_reg.mode_11_9=config +sff_cpld_reg.src_11_9=cpld +sff_cpld_reg.frmt_11_9=bit +sff_cpld_reg.pola_11_9=negative +sff_cpld_reg.addr_11_9=0x00020061 +sff_cpld_reg.len_11_9=1 +sff_cpld_reg.bit_offset_11_9=2 + +sff_cpld_reg.mode_12_9=config +sff_cpld_reg.src_12_9=cpld +sff_cpld_reg.frmt_12_9=bit +sff_cpld_reg.pola_12_9=negative +sff_cpld_reg.addr_12_9=0x00020061 +sff_cpld_reg.len_12_9=1 +sff_cpld_reg.bit_offset_12_9=3 + +sff_cpld_reg.mode_13_9=config +sff_cpld_reg.src_13_9=cpld +sff_cpld_reg.frmt_13_9=bit +sff_cpld_reg.pola_13_9=negative +sff_cpld_reg.addr_13_9=0x00020061 +sff_cpld_reg.len_13_9=1 +sff_cpld_reg.bit_offset_13_9=4 + +sff_cpld_reg.mode_14_9=config +sff_cpld_reg.src_14_9=cpld +sff_cpld_reg.frmt_14_9=bit +sff_cpld_reg.pola_14_9=negative +sff_cpld_reg.addr_14_9=0x00020061 +sff_cpld_reg.len_14_9=1 +sff_cpld_reg.bit_offset_14_9=5 + +sff_cpld_reg.mode_15_9=config +sff_cpld_reg.src_15_9=cpld +sff_cpld_reg.frmt_15_9=bit +sff_cpld_reg.pola_15_9=negative +sff_cpld_reg.addr_15_9=0x00020061 +sff_cpld_reg.len_15_9=1 +sff_cpld_reg.bit_offset_15_9=6 + +sff_cpld_reg.mode_16_9=config +sff_cpld_reg.src_16_9=cpld +sff_cpld_reg.frmt_16_9=bit +sff_cpld_reg.pola_16_9=negative +sff_cpld_reg.addr_16_9=0x00020061 +sff_cpld_reg.len_16_9=1 +sff_cpld_reg.bit_offset_16_9=7 + +sff_cpld_reg.mode_17_9=config +sff_cpld_reg.src_17_9=cpld +sff_cpld_reg.frmt_17_9=bit +sff_cpld_reg.pola_17_9=negative +sff_cpld_reg.addr_17_9=0x00020060 +sff_cpld_reg.len_17_9=1 +sff_cpld_reg.bit_offset_17_9=0 + +sff_cpld_reg.mode_18_9=config +sff_cpld_reg.src_18_9=cpld +sff_cpld_reg.frmt_18_9=bit +sff_cpld_reg.pola_18_9=negative +sff_cpld_reg.addr_18_9=0x00020060 +sff_cpld_reg.len_18_9=1 +sff_cpld_reg.bit_offset_18_9=1 + +sff_cpld_reg.mode_19_9=config +sff_cpld_reg.src_19_9=cpld +sff_cpld_reg.frmt_19_9=bit +sff_cpld_reg.pola_19_9=negative +sff_cpld_reg.addr_19_9=0x00020060 +sff_cpld_reg.len_19_9=1 +sff_cpld_reg.bit_offset_19_9=2 + +sff_cpld_reg.mode_20_9=config +sff_cpld_reg.src_20_9=cpld +sff_cpld_reg.frmt_20_9=bit +sff_cpld_reg.pola_20_9=negative +sff_cpld_reg.addr_20_9=0x00020060 +sff_cpld_reg.len_20_9=1 +sff_cpld_reg.bit_offset_20_9=3 + +sff_cpld_reg.mode_21_9=config +sff_cpld_reg.src_21_9=cpld +sff_cpld_reg.frmt_21_9=bit +sff_cpld_reg.pola_21_9=negative +sff_cpld_reg.addr_21_9=0x00020060 +sff_cpld_reg.len_21_9=1 +sff_cpld_reg.bit_offset_21_9=4 + +sff_cpld_reg.mode_22_9=config +sff_cpld_reg.src_22_9=cpld +sff_cpld_reg.frmt_22_9=bit +sff_cpld_reg.pola_22_9=negative +sff_cpld_reg.addr_22_9=0x00020060 +sff_cpld_reg.len_22_9=1 +sff_cpld_reg.bit_offset_22_9=5 + +sff_cpld_reg.mode_23_9=config +sff_cpld_reg.src_23_9=cpld +sff_cpld_reg.frmt_23_9=bit +sff_cpld_reg.pola_23_9=negative +sff_cpld_reg.addr_23_9=0x00020060 +sff_cpld_reg.len_23_9=1 +sff_cpld_reg.bit_offset_23_9=6 + +sff_cpld_reg.mode_24_9=config +sff_cpld_reg.src_24_9=cpld +sff_cpld_reg.frmt_24_9=bit +sff_cpld_reg.pola_24_9=negative +sff_cpld_reg.addr_24_9=0x00020060 +sff_cpld_reg.len_24_9=1 +sff_cpld_reg.bit_offset_24_9=7 + +sff_cpld_reg.mode_25_9=config +sff_cpld_reg.src_25_9=cpld +sff_cpld_reg.frmt_25_9=bit +sff_cpld_reg.pola_25_9=negative +sff_cpld_reg.addr_25_9=0x00030064 +sff_cpld_reg.len_25_9=1 +sff_cpld_reg.bit_offset_25_9=0 + +sff_cpld_reg.mode_26_9=config +sff_cpld_reg.src_26_9=cpld +sff_cpld_reg.frmt_26_9=bit +sff_cpld_reg.pola_26_9=negative +sff_cpld_reg.addr_26_9=0x00030064 +sff_cpld_reg.len_26_9=1 +sff_cpld_reg.bit_offset_26_9=1 + +sff_cpld_reg.mode_27_9=config +sff_cpld_reg.src_27_9=cpld +sff_cpld_reg.frmt_27_9=bit +sff_cpld_reg.pola_27_9=negative +sff_cpld_reg.addr_27_9=0x00030064 +sff_cpld_reg.len_27_9=1 +sff_cpld_reg.bit_offset_27_9=2 + +sff_cpld_reg.mode_28_9=config +sff_cpld_reg.src_28_9=cpld +sff_cpld_reg.frmt_28_9=bit +sff_cpld_reg.pola_28_9=negative +sff_cpld_reg.addr_28_9=0x00030064 +sff_cpld_reg.len_28_9=1 +sff_cpld_reg.bit_offset_28_9=3 + +sff_cpld_reg.mode_29_9=config +sff_cpld_reg.src_29_9=cpld +sff_cpld_reg.frmt_29_9=bit +sff_cpld_reg.pola_29_9=negative +sff_cpld_reg.addr_29_9=0x00030064 +sff_cpld_reg.len_29_9=1 +sff_cpld_reg.bit_offset_29_9=4 + +sff_cpld_reg.mode_30_9=config +sff_cpld_reg.src_30_9=cpld +sff_cpld_reg.frmt_30_9=bit +sff_cpld_reg.pola_30_9=negative +sff_cpld_reg.addr_30_9=0x00030064 +sff_cpld_reg.len_30_9=1 +sff_cpld_reg.bit_offset_30_9=5 + +sff_cpld_reg.mode_31_9=config +sff_cpld_reg.src_31_9=cpld +sff_cpld_reg.frmt_31_9=bit +sff_cpld_reg.pola_31_9=negative +sff_cpld_reg.addr_31_9=0x00030064 +sff_cpld_reg.len_31_9=1 +sff_cpld_reg.bit_offset_31_9=6 + +sff_cpld_reg.mode_32_9=config +sff_cpld_reg.src_32_9=cpld +sff_cpld_reg.frmt_32_9=bit +sff_cpld_reg.pola_32_9=negative +sff_cpld_reg.addr_32_9=0x00030064 +sff_cpld_reg.len_32_9=1 +sff_cpld_reg.bit_offset_32_9=7 + +sff_cpld_reg.mode_33_9=config +sff_cpld_reg.src_33_9=cpld +sff_cpld_reg.frmt_33_9=bit +sff_cpld_reg.pola_33_9=negative +sff_cpld_reg.addr_33_9=0x00030063 +sff_cpld_reg.len_33_9=1 +sff_cpld_reg.bit_offset_33_9=0 + +sff_cpld_reg.mode_34_9=config +sff_cpld_reg.src_34_9=cpld +sff_cpld_reg.frmt_34_9=bit +sff_cpld_reg.pola_34_9=negative +sff_cpld_reg.addr_34_9=0x00030063 +sff_cpld_reg.len_34_9=1 +sff_cpld_reg.bit_offset_34_9=1 + +sff_cpld_reg.mode_35_9=config +sff_cpld_reg.src_35_9=cpld +sff_cpld_reg.frmt_35_9=bit +sff_cpld_reg.pola_35_9=negative +sff_cpld_reg.addr_35_9=0x00030063 +sff_cpld_reg.len_35_9=1 +sff_cpld_reg.bit_offset_35_9=2 + +sff_cpld_reg.mode_36_9=config +sff_cpld_reg.src_36_9=cpld +sff_cpld_reg.frmt_36_9=bit +sff_cpld_reg.pola_36_9=negative +sff_cpld_reg.addr_36_9=0x00030063 +sff_cpld_reg.len_36_9=1 +sff_cpld_reg.bit_offset_36_9=3 + +sff_cpld_reg.mode_37_9=config +sff_cpld_reg.src_37_9=cpld +sff_cpld_reg.frmt_37_9=bit +sff_cpld_reg.pola_37_9=negative +sff_cpld_reg.addr_37_9=0x00030063 +sff_cpld_reg.len_37_9=1 +sff_cpld_reg.bit_offset_37_9=4 + +sff_cpld_reg.mode_38_9=config +sff_cpld_reg.src_38_9=cpld +sff_cpld_reg.frmt_38_9=bit +sff_cpld_reg.pola_38_9=negative +sff_cpld_reg.addr_38_9=0x00030063 +sff_cpld_reg.len_38_9=1 +sff_cpld_reg.bit_offset_38_9=5 + +sff_cpld_reg.mode_39_9=config +sff_cpld_reg.src_39_9=cpld +sff_cpld_reg.frmt_39_9=bit +sff_cpld_reg.pola_39_9=negative +sff_cpld_reg.addr_39_9=0x00030063 +sff_cpld_reg.len_39_9=1 +sff_cpld_reg.bit_offset_39_9=6 + +sff_cpld_reg.mode_40_9=config +sff_cpld_reg.src_40_9=cpld +sff_cpld_reg.frmt_40_9=bit +sff_cpld_reg.pola_40_9=negative +sff_cpld_reg.addr_40_9=0x00030063 +sff_cpld_reg.len_40_9=1 +sff_cpld_reg.bit_offset_40_9=7 + +sff_cpld_reg.mode_41_9=config +sff_cpld_reg.src_41_9=cpld +sff_cpld_reg.frmt_41_9=bit +sff_cpld_reg.pola_41_9=negative +sff_cpld_reg.addr_41_9=0x00030062 +sff_cpld_reg.len_41_9=1 +sff_cpld_reg.bit_offset_41_9=0 + +sff_cpld_reg.mode_42_9=config +sff_cpld_reg.src_42_9=cpld +sff_cpld_reg.frmt_42_9=bit +sff_cpld_reg.pola_42_9=negative +sff_cpld_reg.addr_42_9=0x00030062 +sff_cpld_reg.len_42_9=1 +sff_cpld_reg.bit_offset_42_9=1 + +sff_cpld_reg.mode_43_9=config +sff_cpld_reg.src_43_9=cpld +sff_cpld_reg.frmt_43_9=bit +sff_cpld_reg.pola_43_9=negative +sff_cpld_reg.addr_43_9=0x00030062 +sff_cpld_reg.len_43_9=1 +sff_cpld_reg.bit_offset_43_9=2 + +sff_cpld_reg.mode_44_9=config +sff_cpld_reg.src_44_9=cpld +sff_cpld_reg.frmt_44_9=bit +sff_cpld_reg.pola_44_9=negative +sff_cpld_reg.addr_44_9=0x00030062 +sff_cpld_reg.len_44_9=1 +sff_cpld_reg.bit_offset_44_9=3 + +sff_cpld_reg.mode_45_9=config +sff_cpld_reg.src_45_9=cpld +sff_cpld_reg.frmt_45_9=bit +sff_cpld_reg.pola_45_9=negative +sff_cpld_reg.addr_45_9=0x00030062 +sff_cpld_reg.len_45_9=1 +sff_cpld_reg.bit_offset_45_9=4 + +sff_cpld_reg.mode_46_9=config +sff_cpld_reg.src_46_9=cpld +sff_cpld_reg.frmt_46_9=bit +sff_cpld_reg.pola_46_9=negative +sff_cpld_reg.addr_46_9=0x00030062 +sff_cpld_reg.len_46_9=1 +sff_cpld_reg.bit_offset_46_9=5 + +sff_cpld_reg.mode_47_9=config +sff_cpld_reg.src_47_9=cpld +sff_cpld_reg.frmt_47_9=bit +sff_cpld_reg.pola_47_9=negative +sff_cpld_reg.addr_47_9=0x00030062 +sff_cpld_reg.len_47_9=1 +sff_cpld_reg.bit_offset_47_9=6 + +sff_cpld_reg.mode_48_9=config +sff_cpld_reg.src_48_9=cpld +sff_cpld_reg.frmt_48_9=bit +sff_cpld_reg.pola_48_9=negative +sff_cpld_reg.addr_48_9=0x00030062 +sff_cpld_reg.len_48_9=1 +sff_cpld_reg.bit_offset_48_9=7 + +sff_cpld_reg.mode_49_9=config +sff_cpld_reg.src_49_9=cpld +sff_cpld_reg.frmt_49_9=bit +sff_cpld_reg.pola_49_9=negative +sff_cpld_reg.addr_49_9=0x00030061 +sff_cpld_reg.len_49_9=1 +sff_cpld_reg.bit_offset_49_9=0 + +sff_cpld_reg.mode_50_9=config +sff_cpld_reg.src_50_9=cpld +sff_cpld_reg.frmt_50_9=bit +sff_cpld_reg.pola_50_9=negative +sff_cpld_reg.addr_50_9=0x00030061 +sff_cpld_reg.len_50_9=1 +sff_cpld_reg.bit_offset_50_9=1 + +sff_cpld_reg.mode_51_9=config +sff_cpld_reg.src_51_9=cpld +sff_cpld_reg.frmt_51_9=bit +sff_cpld_reg.pola_51_9=negative +sff_cpld_reg.addr_51_9=0x00030061 +sff_cpld_reg.len_51_9=1 +sff_cpld_reg.bit_offset_51_9=2 + +sff_cpld_reg.mode_52_9=config +sff_cpld_reg.src_52_9=cpld +sff_cpld_reg.frmt_52_9=bit +sff_cpld_reg.pola_52_9=negative +sff_cpld_reg.addr_52_9=0x00030061 +sff_cpld_reg.len_52_9=1 +sff_cpld_reg.bit_offset_52_9=3 + +sff_cpld_reg.mode_53_9=config +sff_cpld_reg.src_53_9=cpld +sff_cpld_reg.frmt_53_9=bit +sff_cpld_reg.pola_53_9=negative +sff_cpld_reg.addr_53_9=0x00030061 +sff_cpld_reg.len_53_9=1 +sff_cpld_reg.bit_offset_53_9=4 + +sff_cpld_reg.mode_54_9=config +sff_cpld_reg.src_54_9=cpld +sff_cpld_reg.frmt_54_9=bit +sff_cpld_reg.pola_54_9=negative +sff_cpld_reg.addr_54_9=0x00030061 +sff_cpld_reg.len_54_9=1 +sff_cpld_reg.bit_offset_54_9=5 + +sff_cpld_reg.mode_55_9=config +sff_cpld_reg.src_55_9=cpld +sff_cpld_reg.frmt_55_9=bit +sff_cpld_reg.pola_55_9=negative +sff_cpld_reg.addr_55_9=0x00030061 +sff_cpld_reg.len_55_9=1 +sff_cpld_reg.bit_offset_55_9=6 + +sff_cpld_reg.mode_56_9=config +sff_cpld_reg.src_56_9=cpld +sff_cpld_reg.frmt_56_9=bit +sff_cpld_reg.pola_56_9=negative +sff_cpld_reg.addr_56_9=0x00030061 +sff_cpld_reg.len_56_9=1 +sff_cpld_reg.bit_offset_56_9=7 + +sff_cpld_reg.mode_57_9=config +sff_cpld_reg.src_57_9=cpld +sff_cpld_reg.frmt_57_9=bit +sff_cpld_reg.pola_57_9=negative +sff_cpld_reg.addr_57_9=0x00030060 +sff_cpld_reg.len_57_9=1 +sff_cpld_reg.bit_offset_57_9=0 + +sff_cpld_reg.mode_58_9=config +sff_cpld_reg.src_58_9=cpld +sff_cpld_reg.frmt_58_9=bit +sff_cpld_reg.pola_58_9=negative +sff_cpld_reg.addr_58_9=0x00030060 +sff_cpld_reg.len_58_9=1 +sff_cpld_reg.bit_offset_58_9=1 + +sff_cpld_reg.mode_59_9=config +sff_cpld_reg.src_59_9=cpld +sff_cpld_reg.frmt_59_9=bit +sff_cpld_reg.pola_59_9=negative +sff_cpld_reg.addr_59_9=0x00030060 +sff_cpld_reg.len_59_9=1 +sff_cpld_reg.bit_offset_59_9=2 + +sff_cpld_reg.mode_60_9=config +sff_cpld_reg.src_60_9=cpld +sff_cpld_reg.frmt_60_9=bit +sff_cpld_reg.pola_60_9=negative +sff_cpld_reg.addr_60_9=0x00030060 +sff_cpld_reg.len_60_9=1 +sff_cpld_reg.bit_offset_60_9=3 + +sff_cpld_reg.mode_61_9=config +sff_cpld_reg.src_61_9=cpld +sff_cpld_reg.frmt_61_9=bit +sff_cpld_reg.pola_61_9=negative +sff_cpld_reg.addr_61_9=0x00030060 +sff_cpld_reg.len_61_9=1 +sff_cpld_reg.bit_offset_61_9=4 + +sff_cpld_reg.mode_62_9=config +sff_cpld_reg.src_62_9=cpld +sff_cpld_reg.frmt_62_9=bit +sff_cpld_reg.pola_62_9=negative +sff_cpld_reg.addr_62_9=0x00030060 +sff_cpld_reg.len_62_9=1 +sff_cpld_reg.bit_offset_62_9=5 + +sff_cpld_reg.mode_63_9=config +sff_cpld_reg.src_63_9=cpld +sff_cpld_reg.frmt_63_9=bit +sff_cpld_reg.pola_63_9=negative +sff_cpld_reg.addr_63_9=0x00030060 +sff_cpld_reg.len_63_9=1 +sff_cpld_reg.bit_offset_63_9=6 + +sff_cpld_reg.mode_64_9=config +sff_cpld_reg.src_64_9=cpld +sff_cpld_reg.frmt_64_9=bit +sff_cpld_reg.pola_64_9=negative +sff_cpld_reg.addr_64_9=0x00030060 +sff_cpld_reg.len_64_9=1 +sff_cpld_reg.bit_offset_64_9=7 + diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/WATCHDOG.cfg b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/WATCHDOG.cfg new file mode 100644 index 000000000000..e087fee62045 --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/cfg_file/WATCHDOG.cfg @@ -0,0 +1,20 @@ + +watchdog_dev.mode_0_4=config +watchdog_dev.src_0_4=cpld +watchdog_dev.frmt_0_4=bit +watchdog_dev.addr_0_4=0x000100b0 +watchdog_dev.len_0_4=1 +watchdog_dev.bit_offset_0_4=0 + +watchdog_dev.mode_0_3=config +watchdog_dev.src_0_3=cpld +watchdog_dev.frmt_0_3=byte +watchdog_dev.addr_0_3=0x000100b1 +watchdog_dev.len_0_3=1 + +watchdog_dev.mode_0_5=config +watchdog_dev.src_0_5=cpld +watchdog_dev.frmt_0_5=bit +watchdog_dev.addr_0_5=0x000100b0 +watchdog_dev.len_0_5=1 +watchdog_dev.bit_offset_0_5=0 diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/file_name/0x40d7 b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/file_name/0x40d7 new file mode 100644 index 000000000000..3944674a473a --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/s3ip_sysfs_cfg/file_name/0x40d7 @@ -0,0 +1,8 @@ +CPLD +FAN +LED +PSU +SENSOR +SFF +FPGA +WATCHDOG diff --git a/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/setup.py b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/setup.py new file mode 100755 index 000000000000..6c3916921abb --- /dev/null +++ b/platform/broadcom/sonic-platform-modules-micas/m2-w6940-64oc/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup + +setup( + name='sonic-platform', + version='1.0', + description='SONiC platform API implementation', + license='Apache 2.0', + author='SONiC Team', + author_email='support', + url='', + maintainer='support', + maintainer_email='', + packages=[ + 'sonic_platform', + 'plat_hal', + 'wbutil', + 'eepromutil', + 'hal-config', + 'config', + ], + py_modules=[ + 'hal_pltfm', + 'platform_util', + 'platform_intf', + ], + classifiers=[ + 'Development Status :: 3 - Alpha', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'Intended Audience :: Information Technology', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Natural Language :: English', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.7', + 'Topic :: Utilities', + ], + keywords='sonic SONiC platform PLATFORM', +) diff --git a/platform/centec-arm64/platform-modules-fs.mk b/platform/centec-arm64/platform-modules-fs.mk index 5942eabe2069..8bfff5c9dad0 100644 --- a/platform/centec-arm64/platform-modules-fs.mk +++ b/platform/centec-arm64/platform-modules-fs.mk @@ -9,4 +9,8 @@ FS_S5800_48T4S_PLATFORM_MODULE = platform-modules-s5800-48t4s_$(FS_S5800_48T4S_P $(FS_S5800_48T4S_PLATFORM_MODULE)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-modules-fs $(FS_S5800_48T4S_PLATFORM_MODULE)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) $(FS_S5800_48T4S_PLATFORM_MODULE)_PLATFORM = arm64-fs_s5800_48t4s-r0 +# Both this and the e530 modules compile ../centec/centec-dal/, which causes a problem +# if both are being compiled at the same time. To get around that, add an artificial +# dependency here so that this part is serialized. +$(FS_S5800_48T4S_PLATFORM_MODULE)_AFTER = $(CENTEC_E530_48T4X_P_PLATFORM_MODULE) SONIC_DPKG_DEBS += $(FS_S5800_48T4S_PLATFORM_MODULE) diff --git a/platform/checkout/cisco-8000.ini b/platform/checkout/cisco-8000.ini index fcb26512c35b..5efe23c4dcfd 100644 --- a/platform/checkout/cisco-8000.ini +++ b/platform/checkout/cisco-8000.ini @@ -1,3 +1,3 @@ [module] repo=git@github.com:Cisco-8000-sonic/platform-cisco-8000.git -ref=202405.0.8 +ref=202405.0.14 diff --git a/platform/innovium/docker-saiserver-invm.dep b/platform/innovium/docker-saiserver-invm.dep deleted file mode 100644 index cf8cc4b6b0f8..000000000000 --- a/platform/innovium/docker-saiserver-invm.dep +++ /dev/null @@ -1,8 +0,0 @@ -DPATH := $($(DOCKER_SAISERVER_INVM)_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/innovium/docker-saiserver-invm.mk platform/innovium/docker-saiserver-invm.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files $(DPATH)) - -$(DOCKER_SAISERVER_INVM)_CACHE_MODE := GIT_CONTENT_SHA -$(DOCKER_SAISERVER_INVM)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) -$(DOCKER_SAISERVER_INVM)_DEP_FILES := $(DEP_FILES) diff --git a/platform/innovium/docker-saiserver-invm.mk b/platform/innovium/docker-saiserver-invm.mk deleted file mode 100644 index 1f30efc6b1c8..000000000000 --- a/platform/innovium/docker-saiserver-invm.mk +++ /dev/null @@ -1,14 +0,0 @@ -# docker image for invm saiserver - -DOCKER_SAISERVER_INVM = docker-saiserver$(SAITHRIFT_VER)-invm.gz -$(DOCKER_SAISERVER_INVM)_PATH = $(PLATFORM_PATH)/docker-saiserver-invm -$(DOCKER_SAISERVER_INVM)_DEPENDS += $(SAISERVER) -$(DOCKER_SAISERVER_INVM)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BOOKWORM) -SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_INVM) - -$(DOCKER_SAISERVER_INVM)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) -$(DOCKER_SAISERVER_INVM)_RUN_OPT += --privileged -t -$(DOCKER_SAISERVER_INVM)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf -$(DOCKER_SAISERVER_INVM)_RUN_OPT += -v /var/run/docker-saiserver:/var/run/sswsyncd -$(DOCKER_SAISERVER_INVM)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro -$(DOCKER_SAISERVER_INVM)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/platform/innovium/docker-syncd-invm-rpc.mk b/platform/innovium/docker-syncd-invm-rpc.mk deleted file mode 100755 index c4e1c8762876..000000000000 --- a/platform/innovium/docker-syncd-invm-rpc.mk +++ /dev/null @@ -1,22 +0,0 @@ -# docker image for innovium syncd with rpc - -DOCKER_SYNCD_INVM_RPC = docker-syncd-invm-rpc.gz -$(DOCKER_SYNCD_INVM_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-invm-rpc -$(DOCKER_SYNCD_INVM_RPC)_DEPENDS += $(SYNCD_RPC) $(INVM_LIBSAI) $(INVM_SHELL) -$(DOCKER_SYNCD_INVM_RPC)_PYTHON_WHEELS += $(PTF_PY3) -$(DOCKER_SYNCD_INVM_RPC)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) -$(DOCKER_SYNCD_INVM_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_BASE) -SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_INVM_RPC) -SONIC_BOOKWORM_DOCKERS += $(DOCKER_SYNCD_INVM_RPC) -ifeq ($(ENABLE_SYNCD_RPC),y) -SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_INVM_RPC) -endif - -$(DOCKER_SYNCD_INVM_RPC)_CONTAINER_NAME = syncd -$(DOCKER_SYNCD_INVM_RPC)_VERSION = 1.0.0-rpc -$(DOCKER_SYNCD_INVM_RPC)_PACKAGE_NAME = syncd -$(DOCKER_SYNCD_INVM_RPC)_RUN_OPT += --privileged -t -$(DOCKER_SYNCD_INVM_RPC)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf -$(DOCKER_SYNCD_INVM_RPC)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd -$(DOCKER_SYNCD_INVM_RPC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro -$(DOCKER_SYNCD_INVM_RPC)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/platform/innovium/invm-sai.mk b/platform/innovium/invm-sai.mk deleted file mode 100755 index fa3e8abad9ad..000000000000 --- a/platform/innovium/invm-sai.mk +++ /dev/null @@ -1,17 +0,0 @@ -# INVM SAI - -INVM_SAI_ONLINE = https://github.com/Innovium/SONiC/raw/master/debian/master - -INVM_LIBSAI = isai.deb -INVM_HSAI = saihdr.deb -INVM_DRV = ipd.deb -INVM_SHELL = ishell.deb - -$(INVM_LIBSAI)_URL = $(INVM_SAI_ONLINE)/$(INVM_LIBSAI) -$(INVM_HSAI)_URL = $(INVM_SAI_ONLINE)/$(INVM_HSAI) -$(INVM_DRV)_URL = $(INVM_SAI_ONLINE)/$(INVM_DRV) -$(INVM_SHELL)_URL = $(INVM_SAI_ONLINE)/$(INVM_SHELL) - -$(eval $(call add_conflict_package,$(INVM_HSAI),$(LIBSAIVS_DEV))) - -SONIC_ONLINE_DEBS += $(INVM_LIBSAI) $(INVM_HSAI) $(INVM_DRV) $(INVM_SHELL) diff --git a/platform/innovium/python-saithrift.mk b/platform/innovium/python-saithrift.mk deleted file mode 100755 index 23d7df188346..000000000000 --- a/platform/innovium/python-saithrift.mk +++ /dev/null @@ -1,6 +0,0 @@ -# python-saithrift package - -PYTHON_SAITHRIFT_INVM = python-saithrift_1.2.1_$(CONFIGURED_ARCH).deb -$(PYTHON_SAITHRIFT_INVM)_SRC_PATH = $(SRC_PATH)/SAI -$(PYTHON_SAITHRIFT_INVM)_DEPENDS += $(INVM_LIBSAI) $(INVM_HSAI) $(THRIFT_COMPILER) $(PYTHON_THRIFT) $(LIBTHRIFT_DEV) -SONIC_DPKG_DEBS += $(PYTHON_SAITHRIFT_INVM) diff --git a/platform/innovium/rules.mk b/platform/innovium/rules.mk deleted file mode 100755 index 906d0619d5f5..000000000000 --- a/platform/innovium/rules.mk +++ /dev/null @@ -1,28 +0,0 @@ -include $(PLATFORM_PATH)/invm-sai.mk -include $(PLATFORM_PATH)/platform-modules-cel.mk -include $(PLATFORM_PATH)/platform-modules-supermicro.mk -include $(PLATFORM_PATH)/platform-modules-wistron.mk -include $(PLATFORM_PATH)/platform-modules-marvell.mk -include $(PLATFORM_PATH)/docker-syncd-invm.mk -include $(PLATFORM_PATH)/docker-syncd-invm-rpc.mk -include $(PLATFORM_PATH)/one-image.mk -include $(PLATFORM_PATH)/docker-saiserver-invm.mk -include $(PLATFORM_PATH)/libsaithrift-dev.mk -include $(PLATFORM_PATH)/python-saithrift.mk - -SONIC_ALL += $(SONIC_INVM_ONE_IMAGE) \ - $(DOCKER_FPM) \ - $(DOCKER_PTF_INVM) \ - $(DOCKER_SYNCD_INVM_RPC) - -# Inject invm sai into syncd -$(SYNCD)_DEPENDS += $(INVM_HSAI) $(INVM_LIBSAI) $(INVM_SHELL) -$(SYNCD)_UNINSTALLS += $(INVM_HSAI) - -ifeq ($(ENABLE_SYNCD_RPC),y) -$(SYNCD)_DEPENDS := $(filter-out $(LIBTHRIFT_DEV),$($(SYNCD)_DEPENDS)) -$(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) -endif - -# Runtime dependency on invm sai is set only for syncd -$(SYNCD)_RDEPENDS += $(INVM_HSAI) diff --git a/platform/innovium/sonic-platform-marvell b/platform/innovium/sonic-platform-marvell deleted file mode 160000 index a6e250959b4e..000000000000 --- a/platform/innovium/sonic-platform-marvell +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a6e250959b4e98f443e759179ac25f93cc891c9a diff --git a/platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.init b/platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.init deleted file mode 100755 index 7074d2b58125..000000000000 --- a/platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.init +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -### BEGIN INIT INFO -# Provides: setup-board -# Required-Start: $portmap -# Required-Stop: -# Should-Start: -# Should-Stop: -# Default-Start: S -# Default-Stop: 0 6 -# Short-Description: Setup 200i board. -### END INIT INFO - -case "$1" in -start) - echo -n "Setting up board... " - - # Attach TLV 0x56 eeprom - echo 24lc64t 0x56 > /sys/bus/i2c/devices/i2c-0/new_device - sleep 2 - - modprobe 200i-cpld - sleep 2 - - # Turn off/down lpmod by defult (0 - Normal, 1 - Low Pow) - echo 0x00 > /sys/devices/platform/ms200i_cpld/qsfp_lpmode - - # Attach 64 instances of EEPROM driver QSFP ports - for ((n=1;n<=66;n++)); - do - echo sff8436 0x50 > /sys/bus/i2c/devices/i2c-$n/new_device - sleep 0.1 - done - - echo "done." - ;; - -stop) - echo "done." - ;; - -force-reload|restart) - echo "Not supported" - ;; - -*) - echo "Usage: /etc/init.d/platform-modules-200i.init {start|stop}" - exit 1 - ;; -esac - -exit 0 diff --git a/platform/innovium/sonic-platform-modules-delta/debian/platform-modules-et-c032if.init b/platform/innovium/sonic-platform-modules-delta/debian/platform-modules-et-c032if.init deleted file mode 100755 index f2d24b04a0d4..000000000000 --- a/platform/innovium/sonic-platform-modules-delta/debian/platform-modules-et-c032if.init +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -### BEGIN INIT INFO -# Provides: setup-board -# Required-Start: -# Required-Stop: -# Should-Start: -# Should-Stop: -# Default-Start: S -# Default-Stop: 0 6 -# Short-Description: Setup et-c032if board. -### END INIT INFO - -case "$1" in -start) - echo -n "Setting up board... " - modprobe optoe - modprobe delta_et-c032if_platform - - /usr/local/bin/et-c032if_platform_init.sh - echo "done." - ;; - -stop) - echo "done." - - ;; - -force-reload|restart) - echo "Not supported" - ;; - -*) - echo "Usage: /etc/init.d/platform-modules-et-c032if.init {start|stop}" - exit 1 - ;; -esac - -exit 0 diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/netberg_platform_version.sh b/platform/innovium/sonic-platform-modules-netberg/debian/netberg_platform_version.sh deleted file mode 100755 index 17c6ff4cdd76..000000000000 --- a/platform/innovium/sonic-platform-modules-netberg/debian/netberg_platform_version.sh +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh -# driver version - -PLATFROM=$1 -PLATFROM_PATH=$2 - -export PLATFORM_DRIVER_VER='"0.3.16"' - -echo "PLATFORM_DRIVER_VER = $PLATFORM_DRIVER_VER" - -util_name=$(echo $PLATFROM) - -j2 $PLATFROM_PATH/templates/netberg_${util_name}_util.py.j2 -o $PLATFROM_PATH/utils/netberg_${util_name}_util.py -chmod 775 $PLATFROM_PATH/utils/netberg_${util_name}_util.py diff --git a/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.dep b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.dep new file mode 100644 index 000000000000..5fa3dd443899 --- /dev/null +++ b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.dep @@ -0,0 +1,8 @@ +DPATH := $($(DOCKER_SAISERVER_MRVL_TERALYNX)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.mk platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_SAISERVER_MRVL_TERALYNX)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_SAISERVER_MRVL_TERALYNX)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_SAISERVER_MRVL_TERALYNX)_DEP_FILES := $(DEP_FILES) diff --git a/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.mk b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.mk new file mode 100644 index 000000000000..3c01455d4c67 --- /dev/null +++ b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx.mk @@ -0,0 +1,14 @@ +# docker image for mrvl-teralynx saiserver + +DOCKER_SAISERVER_MRVL_TERALYNX = docker-saiserver$(SAITHRIFT_VER)-mrvl-teralynx.gz +$(DOCKER_SAISERVER_MRVL_TERALYNX)_PATH = $(PLATFORM_PATH)/docker-saiserver-mrvl-teralynx +$(DOCKER_SAISERVER_MRVL_TERALYNX)_DEPENDS += $(SAISERVER) +$(DOCKER_SAISERVER_MRVL_TERALYNX)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BOOKWORM) +SONIC_DOCKER_IMAGES += $(DOCKER_SAISERVER_MRVL_TERALYNX) + +$(DOCKER_SAISERVER_MRVL_TERALYNX)_CONTAINER_NAME = saiserver$(SAITHRIFT_VER) +$(DOCKER_SAISERVER_MRVL_TERALYNX)_RUN_OPT += --privileged -t +$(DOCKER_SAISERVER_MRVL_TERALYNX)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf +$(DOCKER_SAISERVER_MRVL_TERALYNX)_RUN_OPT += -v /var/run/docker-saiserver:/var/run/sswsyncd +$(DOCKER_SAISERVER_MRVL_TERALYNX)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_SAISERVER_MRVL_TERALYNX)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/platform/innovium/docker-saiserver-invm/Dockerfile.j2 b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/Dockerfile.j2 similarity index 88% rename from platform/innovium/docker-saiserver-invm/Dockerfile.j2 rename to platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/Dockerfile.j2 index c6d0ada17e36..2dd04f57f4e7 100644 --- a/platform/innovium/docker-saiserver-invm/Dockerfile.j2 +++ b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/Dockerfile.j2 @@ -21,13 +21,13 @@ RUN pip3 install numpy RUN pip3 install yamlordereddictloader COPY \ -{% for deb in docker_saiserver_invm_debs.split(' ') -%} +{% for deb in docker_saiserver_mrvl_teralynx_debs.split(' ') -%} debs/{{ deb }}{{' '}} {%- endfor -%} debs/ RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_saiserver_invm_debs.split(' ') -%} +{% for deb in docker_saiserver_mrvl_teralynx_debs.split(' ') -%} dpkg_apt debs/{{ deb }}{{'; '}} {%- endfor %} diff --git a/platform/innovium/docker-saiserver-invm/start.sh b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/start.sh similarity index 100% rename from platform/innovium/docker-saiserver-invm/start.sh rename to platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/start.sh diff --git a/platform/innovium/docker-saiserver-invm/supervisord.conf b/platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/supervisord.conf similarity index 100% rename from platform/innovium/docker-saiserver-invm/supervisord.conf rename to platform/marvell-teralynx/docker-saiserver-mrvl-teralynx/supervisord.conf diff --git a/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc.mk b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc.mk new file mode 100755 index 000000000000..c0ba78183dcf --- /dev/null +++ b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc.mk @@ -0,0 +1,22 @@ +# docker image for marvell-teralynx syncd with rpc + +DOCKER_SYNCD_MRVL_TERALYNX_RPC = docker-syncd-mrvl-teralynx-rpc.gz +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-mrvl-teralynx-rpc +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_DEPENDS += $(SYNCD_RPC) $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_SHELL) +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_PYTHON_WHEELS += $(PTF_PY3) +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_BASE) +SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_MRVL_TERALYNX_RPC) +SONIC_BOOKWORM_DOCKERS += $(DOCKER_SYNCD_MRVL_TERALYNX_RPC) +ifeq ($(ENABLE_SYNCD_RPC),y) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_MRVL_TERALYNX_RPC) +endif + +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_CONTAINER_NAME = syncd +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_VERSION = 1.0.0-rpc +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_PACKAGE_NAME = syncd +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_RUN_OPT += --privileged -t +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_SYNCD_MRVL_TERALYNX_RPC)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/platform/innovium/docker-syncd-invm-rpc/Dockerfile.j2 b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc/Dockerfile.j2 similarity index 77% rename from platform/innovium/docker-syncd-invm-rpc/Dockerfile.j2 rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc/Dockerfile.j2 index b5e00c0a8118..39fe5a21e2ed 100755 --- a/platform/innovium/docker-syncd-invm-rpc/Dockerfile.j2 +++ b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc/Dockerfile.j2 @@ -1,11 +1,11 @@ -FROM docker-syncd-invm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-syncd-mrvl-teralynx-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} {% from "dockers/dockerfile-macros.j2" import install_python_wheels, copy_files %} ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive COPY \ -{% for deb in docker_syncd_invm_rpc_debs.split(' ') -%} +{% for deb in docker_syncd_mrvl_teralynx_rpc_debs.split(' ') -%} debs/{{ deb }}{{' '}} {%- endfor -%} debs/ @@ -34,7 +34,7 @@ RUN apt-get update \ libnanomsg-dev RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ -{% for deb in docker_syncd_invm_rpc_debs.split(' ') -%} +{% for deb in docker_syncd_mrvl_teralynx_rpc_debs.split(' ') -%} dpkg_apt debs/{{ deb }}{{'; '}} {%- endfor %} @@ -46,12 +46,12 @@ RUN pip3 install cffi \ COPY ["ptf_nn_agent.conf", "/etc/supervisor/conf.d/"] -{% if docker_syncd_invm_rpc_whls.strip() -%} +{% if docker_syncd_mrvl_teralynx_rpc_whls.strip() -%} # Copy locally-built Python wheel dependencies -{{ copy_files("python-wheels/", docker_syncd_invm_rpc_whls.split(' '), "/python-wheels/") }} +{{ copy_files("python-wheels/", docker_syncd_mrvl_teralynx_rpc_whls.split(' '), "/python-wheels/") }} # Install locally-built Python wheel dependencies -{{ install_python_wheels(docker_syncd_invm_rpc_whls.split(' ')) }} +{{ install_python_wheels(docker_syncd_mrvl_teralynx_rpc_whls.split(' ')) }} {% endif %} diff --git a/platform/innovium/docker-syncd-invm-rpc/ptf_nn_agent.conf b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc/ptf_nn_agent.conf similarity index 100% rename from platform/innovium/docker-syncd-invm-rpc/ptf_nn_agent.conf rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx-rpc/ptf_nn_agent.conf diff --git a/platform/innovium/docker-syncd-invm.mk b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx.mk similarity index 63% rename from platform/innovium/docker-syncd-invm.mk rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx.mk index 572680721f07..d95e2efbf766 100755 --- a/platform/innovium/docker-syncd-invm.mk +++ b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx.mk @@ -1,9 +1,9 @@ -# docker image for innovium syncd +# docker image for marvell-teralynx syncd -DOCKER_SYNCD_PLATFORM_CODE = invm +DOCKER_SYNCD_PLATFORM_CODE = mrvl-teralynx include $(PLATFORM_PATH)/../template/docker-syncd-bookworm.mk -$(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD) $(PYTHON_SDK_API) $(INVM_LIBSAI) $(INVM_SHELL) +$(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD) $(PYTHON_SDK_API) $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_SHELL) $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ $(LIBSWSSCOMMON_DBG) \ @@ -12,6 +12,6 @@ $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ $(DOCKER_SYNCD_BASE)_VERSION = 1.0.0 $(DOCKER_SYNCD_BASE)_PACKAGE_NAME = syncd -$(DOCKER_SYNCD_BASE)_MACHINE = innovium +$(DOCKER_SYNCD_BASE)_MACHINE = marvell-teralynx $(DOCKER_SYNCD_BASE)_RUN_OPT += -v /host/warmboot:/var/warmboot diff --git a/platform/innovium/docker-syncd-invm/Dockerfile.j2 b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/Dockerfile.j2 similarity index 84% rename from platform/innovium/docker-syncd-invm/Dockerfile.j2 rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx/Dockerfile.j2 index 3abe009d0afa..0e93cab95b3b 100755 --- a/platform/innovium/docker-syncd-invm/Dockerfile.j2 +++ b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/Dockerfile.j2 @@ -9,12 +9,12 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update COPY \ -{% for deb in docker_syncd_invm_debs.split(' ') -%} +{% for deb in docker_syncd_mrvl_teralynx_debs.split(' ') -%} debs/{{ deb }}{{' '}} {%- endfor -%} debs/ -# Needed for Innovium Debug Shell +# Needed for Marvell Teralynx Debug Shell RUN apt-get install -y net-tools RUN apt-get install -y libjansson4 RUN apt-get install -y libyaml-dev @@ -23,7 +23,7 @@ RUN pip3 install numpy RUN pip3 install yamlordereddictloader RUN dpkg -i \ -{% for deb in docker_syncd_invm_debs.split(' ') -%} +{% for deb in docker_syncd_mrvl_teralynx_debs.split(' ') -%} debs/{{ deb }}{{' '}} {%- endfor %} diff --git a/platform/innovium/docker-syncd-invm/critical_processes b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/critical_processes similarity index 100% rename from platform/innovium/docker-syncd-invm/critical_processes rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx/critical_processes diff --git a/platform/innovium/docker-syncd-invm/ivm_start.sh b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/ivm_start.sh similarity index 100% rename from platform/innovium/docker-syncd-invm/ivm_start.sh rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx/ivm_start.sh diff --git a/platform/innovium/docker-syncd-invm/start.sh b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/start.sh similarity index 100% rename from platform/innovium/docker-syncd-invm/start.sh rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx/start.sh diff --git a/platform/innovium/docker-syncd-invm/supervisord.conf b/platform/marvell-teralynx/docker-syncd-mrvl-teralynx/supervisord.conf similarity index 100% rename from platform/innovium/docker-syncd-invm/supervisord.conf rename to platform/marvell-teralynx/docker-syncd-mrvl-teralynx/supervisord.conf diff --git a/platform/innovium/libsaithrift-dev.dep b/platform/marvell-teralynx/libsaithrift-dev.dep similarity index 82% rename from platform/innovium/libsaithrift-dev.dep rename to platform/marvell-teralynx/libsaithrift-dev.dep index eee628b5f235..6655bf6d0b4d 100644 --- a/platform/innovium/libsaithrift-dev.dep +++ b/platform/marvell-teralynx/libsaithrift-dev.dep @@ -1,6 +1,6 @@ #DPKG FRK SPATH := $($(LIBSAITHRIFT_DEV)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/innovium/libsaithrift-dev.mk platform/innovium/libsaithrift-dev.dep +DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/marvell-teralynx/libsaithrift-dev.mk platform/marvell-teralynx/libsaithrift-dev.dep DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) SMDEP_PATHS := $(SPATH) $(SPATH)/test/ptf $(SPATH)/test/saithrift/ctypesgen $(foreach path, $(SMDEP_PATHS), $(eval $(path) :=$(filter-out $(SMDEP_PATHS),$(addprefix $(path)/, $(shell cd $(path) && git ls-files | grep -Ev " " ))))) diff --git a/platform/innovium/libsaithrift-dev.mk b/platform/marvell-teralynx/libsaithrift-dev.mk similarity index 59% rename from platform/innovium/libsaithrift-dev.mk rename to platform/marvell-teralynx/libsaithrift-dev.mk index 2a8b6bf137c4..17972dd7e851 100755 --- a/platform/innovium/libsaithrift-dev.mk +++ b/platform/marvell-teralynx/libsaithrift-dev.mk @@ -4,22 +4,20 @@ SAI_VER = 0.9.4 LIBSAITHRIFT_DEV = libsaithrift$(SAITHRIFT_VER)-dev_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(LIBSAITHRIFT_DEV)_SRC_PATH = $(SRC_PATH)/sonic-sairedis/SAI ifeq ($(SAITHRIFT_V2),y) -$(LIBSAITHRIFT_DEV)_DEPENDS += $(INVM_LIBSAI) $(INVM_HSAI) $(LIBSAIMETADATA) $(LIBSAIMETADATA_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(INVM_HSAI) $(LIBSAIMETADATA) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_SHELL) $(LIBSAIMETADATA) $(LIBSAIMETADATA_DEV) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_SHELL) $(LIBSAIMETADATA) $(LIBSAITHRIFT_DEV)_BUILD_ENV = SAITHRIFTV2=true SAITHRIFT_VER=v2 else -$(LIBSAITHRIFT_DEV)_DEPENDS += $(INVM_LIBSAI) $(INVM_HSAI) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(INVM_HSAI) +$(LIBSAITHRIFT_DEV)_DEPENDS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_SHELL) +$(LIBSAITHRIFT_DEV)_RDEPENDS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_SHELL) endif -$(LIBSAITHRIFT_DEV)_DEPENDS += $(LIBSAIMETADATA) $(LIBSAIMETADATA_DEV) -$(LIBSAITHRIFT_DEV)_RDEPENDS += $(LIBSAIMETADATA) $(INVM_LIBSAI) $(INVM_SHELL) SONIC_DPKG_DEBS += $(LIBSAITHRIFT_DEV) PYTHON_SAITHRIFT = python-saithrift$(SAITHRIFT_VER)_$(SAI_VER)_$(CONFIGURED_ARCH).deb $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(PYTHON_SAITHRIFT))) SAISERVER = saiserver$(SAITHRIFT_VER)_$(SAI_VER)_$(CONFIGURED_ARCH).deb -$(SAISERVER)_RDEPENDS += $(LIBSAITHRIFT_DEV) $(INVM_LIBSAI) $(INVM_HSAI) $(INVM_SHELL) +$(SAISERVER)_RDEPENDS += $(LIBSAITHRIFT_DEV) $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_SHELL) $(eval $(call add_extra_package,$(LIBSAITHRIFT_DEV),$(SAISERVER))) SAISERVER_DBG = saiserver$(SAITHRIFT_VER)-dbg_$(SAI_VER)_$(CONFIGURED_ARCH).deb diff --git a/platform/innovium/one-image.mk b/platform/marvell-teralynx/one-image.mk similarity index 76% rename from platform/innovium/one-image.mk rename to platform/marvell-teralynx/one-image.mk index b1abcf613aa4..f62c9aecec31 100755 --- a/platform/innovium/one-image.mk +++ b/platform/marvell-teralynx/one-image.mk @@ -1,7 +1,7 @@ -# sonic innovium ONE image installer +# sonic marvell-teralynx ONE image installer -SONIC_ONE_IMAGE = sonic-innovium.bin -$(SONIC_ONE_IMAGE)_MACHINE = innovium +SONIC_ONE_IMAGE = sonic-marvell-teralynx.bin +$(SONIC_ONE_IMAGE)_MACHINE = marvell-teralynx $(SONIC_ONE_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR) $(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(CEL_MIDSTONE_200I_PLATFORM_MODULE) @@ -10,6 +10,6 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(NETBERG_AURORA_715_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(SMCI_SSE_T7132S_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(WISTRON_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(TL10_DBMVTX9180_PLATFORM) -$(SONIC_ONE_IMAGE)_INSTALLS += $(INVM_DRV) +$(SONIC_ONE_IMAGE)_INSTALLS += $(MRVL_TERALYNX_DRV) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_IMAGES) SONIC_INSTALLERS += $(SONIC_ONE_IMAGE) diff --git a/platform/innovium/platform-modules-cel.mk b/platform/marvell-teralynx/platform-modules-cel.mk similarity index 100% rename from platform/innovium/platform-modules-cel.mk rename to platform/marvell-teralynx/platform-modules-cel.mk diff --git a/platform/innovium/platform-modules-delta.mk b/platform/marvell-teralynx/platform-modules-delta.mk similarity index 100% rename from platform/innovium/platform-modules-delta.mk rename to platform/marvell-teralynx/platform-modules-delta.mk diff --git a/platform/innovium/platform-modules-marvell.mk b/platform/marvell-teralynx/platform-modules-marvell.mk similarity index 95% rename from platform/innovium/platform-modules-marvell.mk rename to platform/marvell-teralynx/platform-modules-marvell.mk index b3d720e64dde..eadd190deb11 100644 --- a/platform/innovium/platform-modules-marvell.mk +++ b/platform/marvell-teralynx/platform-modules-marvell.mk @@ -5,7 +5,7 @@ TL10_DBMVTX9180_VERSION = 1.0 export TL10_DBMVTX9180_VERSION TL10_DBMVTX9180_PLATFORM = sonic-platform-marvell-dbmvtx9180_$(TL10_DBMVTX9180_VERSION)_$(CONFIGURED_ARCH).deb -$(TL10_DBMVTX9180_PLATFORM)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-marvell +$(TL10_DBMVTX9180_PLATFORM)_SRC_PATH = $(PLATFORM_PATH)/sonic-platform-marvell-teralynx $(TL10_DBMVTX9180_PLATFORM)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) $(TL10_DBMVTX9180_PLATFORM)_PLATFORM = x86_64-marvell_dbmvtx9180-r0 diff --git a/platform/innovium/platform-modules-netberg.mk b/platform/marvell-teralynx/platform-modules-netberg.mk similarity index 100% rename from platform/innovium/platform-modules-netberg.mk rename to platform/marvell-teralynx/platform-modules-netberg.mk diff --git a/platform/innovium/platform-modules-supermicro.mk b/platform/marvell-teralynx/platform-modules-supermicro.mk similarity index 100% rename from platform/innovium/platform-modules-supermicro.mk rename to platform/marvell-teralynx/platform-modules-supermicro.mk diff --git a/platform/innovium/platform-modules-wistron.mk b/platform/marvell-teralynx/platform-modules-wistron.mk similarity index 100% rename from platform/innovium/platform-modules-wistron.mk rename to platform/marvell-teralynx/platform-modules-wistron.mk diff --git a/src/sonic-bmpcfgd/__init__.py b/platform/marvell-teralynx/platform.conf old mode 100644 new mode 100755 similarity index 100% rename from src/sonic-bmpcfgd/__init__.py rename to platform/marvell-teralynx/platform.conf diff --git a/platform/marvell-teralynx/python-saithrift.mk b/platform/marvell-teralynx/python-saithrift.mk new file mode 100755 index 000000000000..f220ebc2bae8 --- /dev/null +++ b/platform/marvell-teralynx/python-saithrift.mk @@ -0,0 +1,6 @@ +# python-saithrift package + +PYTHON_SAITHRIFT_MRVL_TERALYNX = python-saithrift_1.2.1_$(CONFIGURED_ARCH).deb +$(PYTHON_SAITHRIFT_MRVL_TERALYNX)_SRC_PATH = $(SRC_PATH)/SAI +$(PYTHON_SAITHRIFT_MRVL_TERALYNX)_DEPENDS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(THRIFT_COMPILER) $(PYTHON_THRIFT) $(LIBTHRIFT_DEV) +SONIC_DPKG_DEBS += $(PYTHON_SAITHRIFT_MRVL_TERALYNX) diff --git a/platform/marvell-teralynx/rules.mk b/platform/marvell-teralynx/rules.mk new file mode 100755 index 000000000000..3ba96af2f66b --- /dev/null +++ b/platform/marvell-teralynx/rules.mk @@ -0,0 +1,28 @@ +include $(PLATFORM_PATH)/sai.mk +include $(PLATFORM_PATH)/platform-modules-cel.mk +include $(PLATFORM_PATH)/platform-modules-supermicro.mk +include $(PLATFORM_PATH)/platform-modules-wistron.mk +include $(PLATFORM_PATH)/platform-modules-marvell.mk +include $(PLATFORM_PATH)/docker-syncd-mrvl-teralynx.mk +include $(PLATFORM_PATH)/docker-syncd-mrvl-teralynx-rpc.mk +include $(PLATFORM_PATH)/one-image.mk +include $(PLATFORM_PATH)/docker-saiserver-mrvl-teralynx.mk +include $(PLATFORM_PATH)/libsaithrift-dev.mk +include $(PLATFORM_PATH)/python-saithrift.mk + +SONIC_ALL += $(SONIC_MRVL_TERALYNX_ONE_IMAGE) \ + $(DOCKER_FPM) \ + $(DOCKER_PTF_MRVL_TERALYNX) \ + $(DOCKER_SYNCD_MRVL_TERALYNX_RPC) + +# Inject mrvl-teralynx sai into syncd +$(SYNCD)_DEPENDS += $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_SHELL) +$(SYNCD)_UNINSTALLS += $(MRVL_TERALYNX_HSAI) + +ifeq ($(ENABLE_SYNCD_RPC),y) +$(SYNCD)_DEPENDS := $(filter-out $(LIBTHRIFT_DEV),$($(SYNCD)_DEPENDS)) +$(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) +endif + +# Runtime dependency on mrvl-teralynx sai is set only for syncd +$(SYNCD)_RDEPENDS += $(MRVL_TERALYNX_HSAI) diff --git a/platform/marvell-teralynx/sai.mk b/platform/marvell-teralynx/sai.mk new file mode 100755 index 000000000000..272ddc269a39 --- /dev/null +++ b/platform/marvell-teralynx/sai.mk @@ -0,0 +1,17 @@ +# MRVL_TERALYNX SAI + +MRVL_TERALYNX_SAI_ONLINE = https://github.com/Marvell-switching/sonic-marvell-teralynx-binaries/raw/main/debian/master + +MRVL_TERALYNX_LIBSAI = isai.deb +MRVL_TERALYNX_HSAI = saihdr.deb +MRVL_TERALYNX_DRV = ipd.deb +MRVL_TERALYNX_SHELL = ishell.deb + +$(MRVL_TERALYNX_LIBSAI)_URL = $(MRVL_TERALYNX_SAI_ONLINE)/$(MRVL_TERALYNX_LIBSAI) +$(MRVL_TERALYNX_HSAI)_URL = $(MRVL_TERALYNX_SAI_ONLINE)/$(MRVL_TERALYNX_HSAI) +$(MRVL_TERALYNX_DRV)_URL = $(MRVL_TERALYNX_SAI_ONLINE)/$(MRVL_TERALYNX_DRV) +$(MRVL_TERALYNX_SHELL)_URL = $(MRVL_TERALYNX_SAI_ONLINE)/$(MRVL_TERALYNX_SHELL) + +$(eval $(call add_conflict_package,$(MRVL_TERALYNX_HSAI),$(LIBSAIVS_DEV))) + +SONIC_ONLINE_DEBS += $(MRVL_TERALYNX_LIBSAI) $(MRVL_TERALYNX_HSAI) $(MRVL_TERALYNX_DRV) $(MRVL_TERALYNX_SHELL) diff --git a/platform/marvell-teralynx/sonic-platform-marvell-teralynx b/platform/marvell-teralynx/sonic-platform-marvell-teralynx new file mode 160000 index 000000000000..dafbe124ef14 --- /dev/null +++ b/platform/marvell-teralynx/sonic-platform-marvell-teralynx @@ -0,0 +1 @@ +Subproject commit dafbe124ef14e7b9f1e0a52076ce8b8d14c88d6b diff --git a/platform/innovium/sonic-platform-modules-cel/.gitignore b/platform/marvell-teralynx/sonic-platform-modules-cel/.gitignore similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/.gitignore rename to platform/marvell-teralynx/sonic-platform-modules-cel/.gitignore diff --git a/platform/innovium/sonic-platform-modules-cel/LICENSE b/platform/marvell-teralynx/sonic-platform-modules-cel/LICENSE similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/LICENSE rename to platform/marvell-teralynx/sonic-platform-modules-cel/LICENSE diff --git a/platform/innovium/sonic-platform-modules-cel/README.md b/platform/marvell-teralynx/sonic-platform-modules-cel/README.md similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/README.md rename to platform/marvell-teralynx/sonic-platform-modules-cel/README.md diff --git a/platform/innovium/sonic-platform-modules-cel/debian/changelog b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/changelog similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/changelog rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/changelog diff --git a/platform/innovium/sonic-platform-modules-cel/debian/compat b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/compat similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/compat rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/compat diff --git a/platform/innovium/sonic-platform-modules-cel/debian/control b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/control similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/control rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/control diff --git a/platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.install b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.install similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.install rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.install diff --git a/platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.postinst b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.postinst similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.postinst rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/platform-modules-midstone-200i.postinst diff --git a/platform/innovium/sonic-platform-modules-cel/debian/rules b/platform/marvell-teralynx/sonic-platform-modules-cel/debian/rules similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/debian/rules rename to platform/marvell-teralynx/sonic-platform-modules-cel/debian/rules diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/cfg/midstone-200i-modules.conf b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/cfg/midstone-200i-modules.conf similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/cfg/midstone-200i-modules.conf rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/cfg/midstone-200i-modules.conf diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/200i_cpld.c b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/200i_cpld.c similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/200i_cpld.c rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/200i_cpld.c diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/200i_wdt.c b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/200i_wdt.c similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/200i_wdt.c rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/200i_wdt.c diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/mc24lc64t.c b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/mc24lc64t.c similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/modules/mc24lc64t.c rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/modules/mc24lc64t.c diff --git a/platform/innovium/sonic-platform-modules-cel/midstone-200i/systemd/platform-modules-midstone-200i.service b/platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/systemd/platform-modules-midstone-200i.service similarity index 100% rename from platform/innovium/sonic-platform-modules-cel/midstone-200i/systemd/platform-modules-midstone-200i.service rename to platform/marvell-teralynx/sonic-platform-modules-cel/midstone-200i/systemd/platform-modules-midstone-200i.service diff --git a/platform/innovium/sonic-platform-modules-delta/LICENSE b/platform/marvell-teralynx/sonic-platform-modules-delta/LICENSE similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/LICENSE rename to platform/marvell-teralynx/sonic-platform-modules-delta/LICENSE diff --git a/platform/innovium/sonic-platform-modules-delta/common/modules/dni_emc2305.c b/platform/marvell-teralynx/sonic-platform-modules-delta/common/modules/dni_emc2305.c similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/common/modules/dni_emc2305.c rename to platform/marvell-teralynx/sonic-platform-modules-delta/common/modules/dni_emc2305.c diff --git a/platform/innovium/sonic-platform-modules-delta/debian/changelog b/platform/marvell-teralynx/sonic-platform-modules-delta/debian/changelog similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/debian/changelog rename to platform/marvell-teralynx/sonic-platform-modules-delta/debian/changelog diff --git a/platform/innovium/sonic-platform-modules-delta/debian/compat b/platform/marvell-teralynx/sonic-platform-modules-delta/debian/compat similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/debian/compat rename to platform/marvell-teralynx/sonic-platform-modules-delta/debian/compat diff --git a/platform/innovium/sonic-platform-modules-delta/debian/control b/platform/marvell-teralynx/sonic-platform-modules-delta/debian/control similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/debian/control rename to platform/marvell-teralynx/sonic-platform-modules-delta/debian/control diff --git a/platform/innovium/sonic-platform-modules-delta/debian/platform-modules-et-c032if.install b/platform/marvell-teralynx/sonic-platform-modules-delta/debian/platform-modules-et-c032if.install similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/debian/platform-modules-et-c032if.install rename to platform/marvell-teralynx/sonic-platform-modules-delta/debian/platform-modules-et-c032if.install diff --git a/platform/innovium/sonic-platform-modules-delta/debian/rules b/platform/marvell-teralynx/sonic-platform-modules-delta/debian/rules similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/debian/rules rename to platform/marvell-teralynx/sonic-platform-modules-delta/debian/rules diff --git a/platform/innovium/sonic-platform-modules-delta/et-c032if/cfg/et-c032if-modules.conf b/platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/cfg/et-c032if-modules.conf similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/et-c032if/cfg/et-c032if-modules.conf rename to platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/cfg/et-c032if-modules.conf diff --git a/platform/innovium/sonic-platform-modules-delta/et-c032if/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/et-c032if/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-delta/et-c032if/modules/delta_et-c032if_platform.c b/platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/modules/delta_et-c032if_platform.c similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/et-c032if/modules/delta_et-c032if_platform.c rename to platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/modules/delta_et-c032if_platform.c diff --git a/platform/innovium/sonic-platform-modules-delta/et-c032if/scripts/et-c032if_platform_init.sh b/platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/scripts/et-c032if_platform_init.sh similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/et-c032if/scripts/et-c032if_platform_init.sh rename to platform/marvell-teralynx/sonic-platform-modules-delta/et-c032if/scripts/et-c032if_platform_init.sh diff --git a/platform/innovium/sonic-platform-modules-delta/systemd/platform-modules-et-c032if.service b/platform/marvell-teralynx/sonic-platform-modules-delta/systemd/platform-modules-et-c032if.service similarity index 100% rename from platform/innovium/sonic-platform-modules-delta/systemd/platform-modules-et-c032if.service rename to platform/marvell-teralynx/sonic-platform-modules-delta/systemd/platform-modules-et-c032if.service diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c index f73295f832bf..466968c92449 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-common.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c index 4cb4d7ebfa55..12d82161ac7e 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-fan.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c similarity index 98% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c index df4957212d1d..940f9e0aaec1 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-led.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c index 1913d1716bbe..1b5c24431141 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-power.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c index 97525e629842..e66d8677f35c 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-qsfp.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c index 6ee287b9ef6e..1e9169398b83 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-sys.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c similarity index 99% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c index 8e288f4aa329..e35c3eb221e3 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.c @@ -1,4 +1,4 @@ -/* An hwmon driver for Netberg Aurora 715 Innovium i2c Module */ +/* An hwmon driver for Netberg Aurora 715 Marvell Teralynx i2c Module */ #pragma GCC diagnostic ignored "-Wformat-zero-length" #include "x86-64-netberg-aurora-715.h" #include "x86-64-netberg-aurora-715-common.h" diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715-thermal.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715.h b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715.h similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715.h rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/modules/x86-64-netberg-aurora-715.h diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/scripts/sensors b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/scripts/sensors similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/scripts/sensors rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/scripts/sensors diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service similarity index 83% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service index 6f019485ee82..339ca7a8ea0a 100644 --- a/platform/innovium/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service +++ b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/service/nba715-platform-init.service @@ -1,6 +1,6 @@ [Unit] Description=Netberg Aurora 715 Platform initialization service -After=local-fs.target innovium_platform_driver.service +After=local-fs.target teralynx_platform_driver.service Before=pmon.service diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/setup.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/setup.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/setup.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/setup.py diff --git a/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/__init__.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/chassis.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/chassis.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/chassis.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/chassis.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/component.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/component.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/component.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/component.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/eeprom.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/eeprom.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/eeprom.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/eeprom.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/fan.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/fan.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/fan.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/fan.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/platDev.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/platDev.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/platDev.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/platDev.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/platform.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/platform.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/platform.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/platform.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/psu.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/psu.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/psu.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/psu.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/sfp.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/sfp.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/sfp.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/sfp.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/thermal.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/thermal.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/sonic_platform/thermal.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/sonic_platform/thermal.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/templates/netberg_aurora-715_util.py.j2 b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/templates/netberg_aurora-715_util.py.j2 similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/templates/netberg_aurora-715_util.py.j2 rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/templates/netberg_aurora-715_util.py.j2 diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/halt b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/halt similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/halt rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/halt diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_platform.sh b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_platform.sh similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_platform.sh rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_platform.sh diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_sensors.py b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_sensors.py similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_sensors.py rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_sensors.py diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_startup b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_startup similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_startup rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/netberg_nba715_startup diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/poweroff b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/poweroff similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/poweroff rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/poweroff diff --git a/platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/shutdown b/platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/shutdown similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/aurora-715/utils/shutdown rename to platform/marvell-teralynx/sonic-platform-modules-netberg/aurora-715/utils/shutdown diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/changelog b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/changelog similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/changelog rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/changelog diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/compat b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/compat similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/compat rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/compat diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/control b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/control similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/control rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/control diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/rules b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/rules similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/rules rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/rules diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.install b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.install similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.install rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.install diff --git a/platform/innovium/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.postinst b/platform/marvell-teralynx/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.postinst similarity index 100% rename from platform/innovium/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.postinst rename to platform/marvell-teralynx/sonic-platform-modules-netberg/debian/sonic-platform-netberg-aurora-715.postinst diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/changelog b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/changelog similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/changelog rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/changelog diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/compat b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/compat similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/compat rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/compat diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/control b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/control similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/control rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/control diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.install b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.install similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.install rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.install diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.postinst b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.postinst similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.postinst rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/platform-modules-sse-t7132s.postinst diff --git a/platform/innovium/sonic-platform-modules-supermicro/debian/rules b/platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/rules similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/debian/rules rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/debian/rules diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/cfg/iTCO_wdt.conf b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/cfg/iTCO_wdt.conf similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/cfg/iTCO_wdt.conf rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/cfg/iTCO_wdt.conf diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/cfg/t7132s-modules.conf b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/cfg/t7132s-modules.conf similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/cfg/t7132s-modules.conf rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/cfg/t7132s-modules.conf diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/modules/t7132s.c b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/modules/t7132s.c similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/modules/t7132s.c rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/modules/t7132s.c diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/health_checker_thermal.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/health_checker_thermal.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/health_checker_thermal.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/health_checker_thermal.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/platform.sh b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/platform.sh similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/platform.sh rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/platform.sh diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/sysledctl.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/sysledctl.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/sysledctl.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/sysledctl.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/test_cpld.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/test_cpld.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/scripts/test_cpld.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/scripts/test_cpld.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/setup.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/setup.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/setup.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/setup.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/__init__.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/__init__.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/__init__.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/__init__.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/chassis.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/chassis.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/chassis.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/chassis.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/component.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/component.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/component.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/component.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/eeprom.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/eeprom.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/eeprom.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/eeprom.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan_drawer.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan_drawer.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan_drawer.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/fan_drawer.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/helper.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/helper.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/helper.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/helper.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/pcie.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/pcie.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/pcie.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/pcie.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/platform.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/platform.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/platform.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/platform.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/psu.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/psu.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/psu.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/psu.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/sfp.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/sfp.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/sfp.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/sfp.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/thermal.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/thermal.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/thermal.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/thermal.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/watchdog.py b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/watchdog.py similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/watchdog.py rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/sonic_platform/watchdog.py diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/systemd/platform-modules-sse-t7132s.service b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/systemd/platform-modules-sse-t7132s.service similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/systemd/platform-modules-sse-t7132s.service rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/systemd/platform-modules-sse-t7132s.service diff --git a/platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/systemd/sysled.service b/platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/systemd/sysled.service similarity index 100% rename from platform/innovium/sonic-platform-modules-supermicro/sse-t7132s/systemd/sysled.service rename to platform/marvell-teralynx/sonic-platform-modules-supermicro/sse-t7132s/systemd/sysled.service diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/i2c-imc.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/i2c-imc.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/i2c-imc.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/i2c-imc.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/oldjc42.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/oldjc42.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/oldjc42.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/oldjc42.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_cpld.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_cpld.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_cpld.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_cpld.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_fan.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_fan.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_fan.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_fan.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_leds.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_leds.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_leds.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_leds.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_oom.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_oom.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_oom.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_oom.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_psu.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_psu.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_psu.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_psu.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_syseeprom.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_syseeprom.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_syseeprom.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_syseeprom.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_thermal.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_thermal.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_thermal.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/modules/wistron_6512_32r_thermal.c diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-firmware_ver.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-firmware_ver.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-firmware_ver.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-firmware_ver.service diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-platform.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-platform.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-platform.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-platform.service diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-syseeprom.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-syseeprom.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/service/6512-32r-syseeprom.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/6512-32r-syseeprom.service diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/service/platform-modules-6512-32r.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/platform-modules-6512-32r.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/service/platform-modules-6512-32r.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/service/platform-modules-6512-32r.service diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/setup.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/setup.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/setup.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/setup.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/__init__.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/__init__.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/__init__.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/__init__.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/chassis.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/chassis.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/chassis.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/chassis.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/component.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/component.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/component.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/component.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/eeprom.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/eeprom.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/eeprom.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/eeprom.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan_drawer.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan_drawer.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan_drawer.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan_drawer.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/platform.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/platform.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/platform.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/platform.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/psu.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/psu.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/psu.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/psu.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/sfp.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/sfp.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/sfp.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/sfp.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/thermal.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/thermal.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/thermal.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/thermal.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/watchdog.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/watchdog.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/watchdog.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/sonic_platform/watchdog.py diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_firmware_version b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_firmware_version similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_firmware_version rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_firmware_version diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_sync b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_sync similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_sync rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_sync diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_syseeprom b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_syseeprom similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/platform_syseeprom rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/platform_syseeprom diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-fanthrml-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-fanthrml-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-fanthrml-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-fanthrml-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-led-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-led-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-led-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-led-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-psu-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-psu-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-psu-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-psu-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-eeprom-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-eeprom-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-eeprom-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-eeprom-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-qsfp-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-send-temp-to-bmc b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-send-temp-to-bmc similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/sonic-send-temp-to-bmc rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/sonic-send-temp-to-bmc diff --git a/platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/wistron_6512_32r_util.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/wistron_6512_32r_util.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/6512-32r/utils/wistron_6512_32r_util.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/6512-32r/utils/wistron_6512_32r_util.py diff --git a/platform/innovium/sonic-platform-modules-wistron/LICENSE b/platform/marvell-teralynx/sonic-platform-modules-wistron/LICENSE similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/LICENSE rename to platform/marvell-teralynx/sonic-platform-modules-wistron/LICENSE diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/changelog b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/changelog similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/changelog rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/changelog diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/compat b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/compat similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/compat rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/compat diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/control b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/control similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/control rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/control diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/rules b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/rules similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/rules rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/rules diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.install b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.install similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.install rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.install diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.postinst b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.postinst similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.postinst rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-6512-32r.postinst diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.install b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.install similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.install rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.install diff --git a/platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.postinst b/platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.postinst similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.postinst rename to platform/marvell-teralynx/sonic-platform-modules-wistron/debian/sonic-platform-wistron-sw-to3200k.postinst diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/cfg/sw-to3200k-modules.conf b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/cfg/sw-to3200k-modules.conf similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/cfg/sw-to3200k-modules.conf rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/cfg/sw-to3200k-modules.conf diff --git a/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/classes/__init__.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/classes/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/Makefile b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/Makefile similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/Makefile rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/Makefile diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_i2c_psu.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_i2c_psu.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_i2c_psu.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_i2c_psu.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_cpld.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_cpld.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_cpld.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_cpld.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_fan.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_fan.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_fan.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_fan.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_leds.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_leds.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_leds.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_leds.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_oom.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_oom.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_oom.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_oom.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_psu.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_psu.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_psu.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_psu.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_thermal.c b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_thermal.c similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_thermal.c rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/modules/wistron_sw_to3200k_thermal.c diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/platform-modules-sw-to3200k.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/platform-modules-sw-to3200k.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/platform-modules-sw-to3200k.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/platform-modules-sw-to3200k.service diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/sw-to3200k-firmware_ver.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/sw-to3200k-firmware_ver.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/sw-to3200k-firmware_ver.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/sw-to3200k-firmware_ver.service diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-led.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-led.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-led.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-led.service diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-platform.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-platform.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-platform.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-platform.service diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-pld.service b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-pld.service similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-pld.service rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/service/to3200k-pld.service diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/setup.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/setup.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/setup.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/setup.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/__init__.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/__init__.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/__init__.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/__init__.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/chassis.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/chassis.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/chassis.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/chassis.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/component.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/component.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/component.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/component.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/eeprom.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/eeprom.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/eeprom.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/eeprom.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan_drawer.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan_drawer.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan_drawer.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/fan_drawer.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/platform.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/platform.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/platform.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/platform.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/psu.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/psu.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/psu.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/psu.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/sfp.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/sfp.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/sfp.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/sfp.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/thermal.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/thermal.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/thermal.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/thermal.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/watchdog.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/watchdog.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/watchdog.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/sonic_platform/watchdog.py diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_firmware_version b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_firmware_version similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_firmware_version rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_firmware_version diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_led b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_led similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_led rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_led diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_pld b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_pld similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_pld rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_pld diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_sync b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_sync similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/platform_sync rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/platform_sync diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-fanthrml-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-fanthrml-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-fanthrml-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-fanthrml-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-led-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-led-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-led-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-led-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-psu-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-psu-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-psu-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-psu-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-qsfp-monitor b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-qsfp-monitor similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-qsfp-monitor rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sonic-qsfp-monitor diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sw_to3200k_watchdog.sh b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sw_to3200k_watchdog.sh similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/sw_to3200k_watchdog.sh rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/sw_to3200k_watchdog.sh diff --git a/platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/wistron_sw_to3200k_util.py b/platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/wistron_sw_to3200k_util.py similarity index 100% rename from platform/innovium/sonic-platform-modules-wistron/sw-to3200k/utils/wistron_sw_to3200k_util.py rename to platform/marvell-teralynx/sonic-platform-modules-wistron/sw-to3200k/utils/wistron_sw_to3200k_util.py diff --git a/platform/marvell/mrvl-prestera b/platform/marvell/mrvl-prestera index 9608c8c41e46..f3735bec489c 160000 --- a/platform/marvell/mrvl-prestera +++ b/platform/marvell/mrvl-prestera @@ -1 +1 @@ -Subproject commit 9608c8c41e462998cd144ed34780e34f1b48e081 +Subproject commit f3735bec489c8475d2dcc0b0b5d5a810a6ee919e diff --git a/platform/marvell/one-image.mk b/platform/marvell/one-image.mk index b58a6179c255..be282e921abb 100644 --- a/platform/marvell/one-image.mk +++ b/platform/marvell/one-image.mk @@ -21,6 +21,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(AC5X_RD98DX35xx_PLATFORM) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FALCON_DB98CX8580_32CD_PLATFORM) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FALCON_DB98CX8540_16CD_PLATFORM) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FALCON_DB98CX8514_10CC_PLATFORM) +$(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(FALCON_DB98CX8522_10CC_PLATFORM) endif ifeq ($(INSTALL_DEBUG_TOOLS),y) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES) diff --git a/platform/marvell/platform-marvell.mk b/platform/marvell/platform-marvell.mk index c4f237757c95..eec94d18a11c 100644 --- a/platform/marvell/platform-marvell.mk +++ b/platform/marvell/platform-marvell.mk @@ -36,4 +36,7 @@ FALCON_DB98CX8514_10CC_PLATFORM = sonic-platform-db98cx8514-10cc_$(FALCON_PLATFO $(FALCON_DB98CX8514_10CC_PLATFORM)_PLATFORM = x86_64-marvell_db98cx8514_10cc-r0 $(eval $(call add_extra_package,$(AC5X_RD98DX35xx_PLATFORM),$(FALCON_DB98CX8514_10CC_PLATFORM))) +FALCON_DB98CX8522_10CC_PLATFORM = sonic-platform-db98cx8522-10cc_$(FALCON_PLATFORM_MODULE_VERSION)_$(CONFIGURED_ARCH).deb +$(FALCON_DB98CX8522_10CC_PLATFORM)_PLATFORM = x86_64-marvell_db98cx8522_10cc-r0 +$(eval $(call add_extra_package,$(AC5X_RD98DX35xx_PLATFORM),$(FALCON_DB98CX8522_10CC_PLATFORM))) endif diff --git a/platform/marvell/platform_arm64.conf b/platform/marvell/platform_arm64.conf index 4c55dd3ae78c..ee417e9cd3ac 100644 --- a/platform/marvell/platform_arm64.conf +++ b/platform/marvell/platform_arm64.conf @@ -222,7 +222,7 @@ prepare_boot_menu() { fw_setenv ${FW_ARG} print_menu "$BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER" > /dev/null fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG ${ONIE_PLATFORM_EXTRA_CMDLINE_LINUX}" > /dev/null - sonic_bootargs_old='setenv bootargs root='$demo_dev' rw rootwait panic=1 console=ttyS0,${baudrate} ${othbootargs} ${mtdparts} ${linuxargs_old}' + sonic_bootargs_old='setenv bootargs root='$demo_dev' rw rootwait panic=1 console=ttyS0,${baudrate} ${linuxargs_old}' fw_setenv ${FW_ARG} sonic_bootargs_old "$sonic_bootargs_old" > /dev/null || true sonic_boot_load_old=$(fw_printenv -n sonic_boot_load || true) old_str="_old" @@ -237,7 +237,7 @@ prepare_boot_menu() { fw_setenv ${FW_ARG} sonic_boot_load "$MMC_LOAD" > /dev/null SONIC_BOOT_CMD='run sonic_bootargs; run sonic_boot_load; bootm $fit_addr${fit_conf_name}' SONIC_BOOT_CMD_OLD='run sonic_bootargs_old; run sonic_boot_load_old; bootm $fit_addr${fit_conf_name}' - BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait panic=1 console=ttyS0,${baudrate} ${othbootargs} ${mtdparts} ${linuxargs}' + BOOTARGS='setenv bootargs root='$demo_dev' rw rootwait panic=1 console=ttyS0,${baudrate} ${linuxargs}' fw_setenv ${FW_ARG} sonic_bootargs "$BOOTARGS" > /dev/null fw_setenv ${FW_ARG} sonic_image_2 "$SONIC_BOOT_CMD_OLD" > /dev/null fw_setenv ${FW_ARG} sonic_image_1 "$SONIC_BOOT_CMD" > /dev/null diff --git a/platform/marvell/sonic-platform-marvell b/platform/marvell/sonic-platform-marvell index be63e9c4b330..f6224ee910e4 160000 --- a/platform/marvell/sonic-platform-marvell +++ b/platform/marvell/sonic-platform-marvell @@ -1 +1 @@ -Subproject commit be63e9c4b330fd5eabfc5c694fe0231cf25b4425 +Subproject commit f6224ee910e4a7cdb2cc7c245480ec4e21817a27 diff --git a/platform/mellanox/component-versions.dep b/platform/mellanox/component-versions.dep deleted file mode 100644 index 5457ab3d4919..000000000000 --- a/platform/mellanox/component-versions.dep +++ /dev/null @@ -1,10 +0,0 @@ -# DPKG FRK - -SPATH := $($(COMPONENT_VERSIONS_FILE)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/component-versions.mk $(PLATFORM_PATH)/component-versions.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(COMPONENT_VERSIONS_FILE)_CACHE_MODE := GIT_CONTENT_SHA -$(COMPONENT_VERSIONS_FILE)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) -$(COMPONENT_VERSIONS_FILE)_DEP_FILES := $(DEP_FILES) diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index 8a3f45c0350a..1f36ad96ef52 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -21,33 +21,33 @@ MLNX_FW_BASE_PATH = $(MLNX_SDK_BASE_PATH) # Place an URL here to FW if you want to download FW instead MLNX_FW_BASE_URL = -SIMX_VERSION = 24.7-1154 +SIMX_VERSION = 24.10-1100 FW_FROM_URL = y -MLNX_FW_ASSETS_RELEASE_TAG = fw-2014.1150 +MLNX_FW_ASSETS_RELEASE_TAG = fw-2014.2110 MLNX_FW_ASSETS_URL = $(MLNX_ASSETS_GITHUB_URL)/releases/download/$(MLNX_FW_ASSETS_RELEASE_TAG) ifeq ($(MLNX_FW_BASE_URL), ) MLNX_FW_BASE_URL = $(MLNX_FW_ASSETS_URL) endif -MLNX_SPC_FW_VERSION = 13.2014.1150 +MLNX_SPC_FW_VERSION = 13.2014.2110 MLNX_SPC_FW_FILE = fw-SPC-rel-$(subst .,_,$(MLNX_SPC_FW_VERSION))-EVB.mfa $(MLNX_SPC_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC_FW_FILE) -MLNX_SPC2_FW_VERSION = 29.2014.1150 +MLNX_SPC2_FW_VERSION = 29.2014.2110 MLNX_SPC2_FW_FILE = fw-SPC2-rel-$(subst .,_,$(MLNX_SPC2_FW_VERSION))-EVB.mfa $(MLNX_SPC2_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC2_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC2_FW_FILE) -MLNX_SPC3_FW_VERSION = 30.2014.1150 +MLNX_SPC3_FW_VERSION = 30.2014.2110 MLNX_SPC3_FW_FILE = fw-SPC3-rel-$(subst .,_,$(MLNX_SPC3_FW_VERSION))-EVB.mfa $(MLNX_SPC3_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC3_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC3_FW_FILE) -MLNX_SPC4_FW_VERSION = 34.2014.1150 +MLNX_SPC4_FW_VERSION = 34.2014.2110 MLNX_SPC4_FW_FILE = fw-SPC4-rel-$(subst .,_,$(MLNX_SPC4_FW_VERSION))-EVB.mfa $(MLNX_SPC4_FW_FILE)_PATH = $(MLNX_FW_BASE_PATH) $(MLNX_SPC4_FW_FILE)_URL = $(MLNX_FW_BASE_URL)/$(MLNX_SPC4_FW_FILE) diff --git a/platform/mellanox/hw-management.mk b/platform/mellanox/hw-management.mk index 6255e17cef33..ce6e883af3de 100644 --- a/platform/mellanox/hw-management.mk +++ b/platform/mellanox/hw-management.mk @@ -1,5 +1,6 @@ # -# Copyright (c) 2016-2023 NVIDIA CORPORATION & AFFILIATES. +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -16,7 +17,7 @@ # # Mellanox HW Management -MLNX_HW_MANAGEMENT_VERSION = 7.0040.1011 +MLNX_HW_MANAGEMENT_VERSION = 7.0040.2000 export MLNX_HW_MANAGEMENT_VERSION diff --git a/platform/mellanox/hw-management/0001-Make-SONiC-determine-reboot-cause-service-start-afte.patch b/platform/mellanox/hw-management/0001-Make-SONiC-determine-reboot-cause-service-start-afte.patch index a8fb95786bdb..8642d8fa3469 100644 --- a/platform/mellanox/hw-management/0001-Make-SONiC-determine-reboot-cause-service-start-afte.patch +++ b/platform/mellanox/hw-management/0001-Make-SONiC-determine-reboot-cause-service-start-afte.patch @@ -1,7 +1,7 @@ -From 5a7bf8934772b94a2414f54cb3e343d0d1d81efd Mon Sep 17 00:00:00 2001 -From: keboliu -Date: Fri, 15 Jan 2021 14:41:16 +0800 -Subject: [PATCH 1/3] Make SONiC determine-reboot-cause service start after +From e588b87a2e80de284ea6e63563e27684acb2f56e Mon Sep 17 00:00:00 2001 +From: davidza +Date: Tue, 15 Oct 2024 09:44:05 +0300 +Subject: [PATCH 1/3] Make SONiC determine-reboot-cause service start after hw-mgmt service Signed-off-by: Kebo Liu @@ -10,17 +10,17 @@ Signed-off-by: Kebo Liu 1 file changed, 1 insertion(+) diff --git a/debian/hw-management.hw-management.service b/debian/hw-management.hw-management.service -index 8bdcaef5..1c25ffb2 100755 +index 4bc1780e..1a50dc3c 100755 --- a/debian/hw-management.hw-management.service +++ b/debian/hw-management.hw-management.service -@@ -1,6 +1,7 @@ - [Unit] +@@ -2,6 +2,7 @@ Description=Chassis HW management service of Mellanox systems Documentation=man:hw-management.service(8) + Wants=hw-management-sync.service +Before=determine-reboot-cause.service [Service] Type=oneshot -- -2.30.2 +2.34.1 diff --git a/platform/mellanox/hw-management/0003-Make-system-health-service-starts-after-hw-managemen.patch b/platform/mellanox/hw-management/0003-Make-system-health-service-starts-after-hw-managemen.patch index 5cbecf742955..18efb60f2821 100644 --- a/platform/mellanox/hw-management/0003-Make-system-health-service-starts-after-hw-managemen.patch +++ b/platform/mellanox/hw-management/0003-Make-system-health-service-starts-after-hw-managemen.patch @@ -1,7 +1,7 @@ -From e45320c61765b07f5d73f6c207f9f1d3b4d21721 Mon Sep 17 00:00:00 2001 -From: Stephen Sun -Date: Mon, 28 Nov 2022 03:55:14 +0000 -Subject: [PATCH 3/3] Make system-health service starts after hw-management to +From 69d083e05e39dc82567a338a59a2cefdcd022034 Mon Sep 17 00:00:00 2001 +From: davidza +Date: Tue, 15 Oct 2024 09:51:11 +0300 +Subject: [PATCH 3/3] Make system-health service starts after hw-management to avoid failures On SN2410, it can fail to read the file led_status_capability if it starts from ONIE @@ -12,18 +12,18 @@ Signed-off-by: Stephen Sun 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/hw-management.hw-management.service b/debian/hw-management.hw-management.service -index 1c25ffb2..639bd3cd 100755 +index 1a50dc3c..8a5c0423 100755 --- a/debian/hw-management.hw-management.service +++ b/debian/hw-management.hw-management.service -@@ -1,7 +1,7 @@ - [Unit] +@@ -2,7 +2,7 @@ Description=Chassis HW management service of Mellanox systems Documentation=man:hw-management.service(8) + Wants=hw-management-sync.service -Before=determine-reboot-cause.service +Before=determine-reboot-cause.service system-health.service watchdog-control.service [Service] Type=oneshot -- -2.30.2 +2.34.1 diff --git a/platform/mellanox/hw-management/hw-mgmt b/platform/mellanox/hw-management/hw-mgmt index 164c9ef66b10..6e2f3609d968 160000 --- a/platform/mellanox/hw-management/hw-mgmt +++ b/platform/mellanox/hw-management/hw-mgmt @@ -1 +1 @@ -Subproject commit 164c9ef66b10eb88bad20225d200c048449033cb +Subproject commit 6e2f3609d968e68ae9355339c4478c185ada8896 diff --git a/platform/mellanox/issu-version.mk b/platform/mellanox/issu-version.mk index ee0855c56ced..756ebfb2019f 100644 --- a/platform/mellanox/issu-version.mk +++ b/platform/mellanox/issu-version.mk @@ -19,7 +19,7 @@ ISSU_VERSION_FILE = issu-version $(ISSU_VERSION_FILE)_SRC_PATH = $(PLATFORM_PATH)/issu-version -$(ISSU_VERSION_FILE)_DEPENDS += $(APPLIBS) +$(ISSU_VERSION_FILE)_DEPENDS += $(SYSSDK) SONIC_MAKE_FILES += $(ISSU_VERSION_FILE) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index bb7eb6a43288..74b096c1e8ce 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -1198,3 +1198,155 @@ def get_sfp(self, index): return None return module.get_sfp(sfp_index - 1) + +class SmartSwitchChassis(Chassis): + def __init__(self): + super(SmartSwitchChassis, self).__init__() + self.module_initialized_count = 0 + self.module_name_index_map = {} + self.initialize_modules() + + def is_modular_chassis(self): + """ + Retrieves whether the sonic instance is part of modular chassis + + Returns: + A bool value, should return False by default or for fixed-platforms. + Should return True for supervisor-cards, line-cards etc running as part + of modular-chassis. + For SmartSwitch platforms this should return True even if they are + fixed-platforms, as they are treated like a modular chassis as the + DPU cards are treated like line-cards of a modular-chassis. + """ + return False + + ############################################## + # Module methods + ############################################## + def initialize_single_module(self, index): + count = self.get_num_modules() + if index < 0: + raise RuntimeError(f"Invalid index = {index} for module initialization with total module count = {count}") + if index >= count: + return + if not self._module_list: + self._module_list = [None] * count + if not self._module_list[index]: + from .module import DpuModule + module = DpuModule(index) + self._module_list[index] = module + self.module_name_index_map[module.get_name()] = index + self.module_initialized_count += 1 + + def initialize_modules(self): + count = self.get_num_modules() + for index in range(count): + self.initialize_single_module(index=index) + + def get_num_modules(self): + """ + Retrieves the number of modules available on this chassis + On a SmarSwitch chassis this includes the number of DPUs. + + Returns: + An integer, the number of modules available on this chassis + """ + return DeviceDataManager.get_dpu_count() + + def get_all_modules(self): + """ + Retrieves all modules available on this chassis. On a SmarSwitch + chassis this includes the number of DPUs. + + Returns: + A list of objects derived from ModuleBase representing all + modules available on this chassis + """ + self.initialize_modules() + return self._module_list + + def get_module(self, index): + """ + Retrieves module represented by (0-based) index + On a SmartSwitch index:0 will fetch switch, index:1 will fetch + DPU0 and so on + + Args: + index: An integer, the index (0-based) of the module to + retrieve + + Returns: + An object dervied from ModuleBase representing the specified + module + """ + self.initialize_single_module(index) + return super(SmartSwitchChassis, self).get_module(index) + + def get_module_index(self, module_name): + """ + Retrieves module index from the module name + + Args: + module_name: A string, prefixed by SUPERVISOR, LINE-CARD or FABRIC-CARD + Ex. SUPERVISOR0, LINE-CARD1, FABRIC-CARD5 + SmartSwitch Example: SWITCH, DPU1, DPU2 ... DPUX + + Returns: + An integer, the index of the ModuleBase object in the module_list + """ + return self.module_name_index_map[module_name.upper()] + + ############################################## + # SmartSwitch methods + ############################################## + + def get_dpu_id(self, name): + """ + Retrieves the DPU ID for the given dpu-module name. + Returns None for non-smartswitch chassis. + Returns: + An integer, indicating the DPU ID Ex: name:DPU0 return value 1, + name:DPU1 return value 2, name:DPUX return value X+1 + """ + module = self.get_module(self.get_module_index(name)) + return module.get_dpu_id() + + def is_smartswitch(self): + """ + Retrieves whether the sonic instance is part of smartswitch + Returns: + Returns:True for SmartSwitch and False for other platforms + """ + return True + + def init_midplane_switch(self): + """ + Initializes the midplane functionality of the modular chassis. For + example, any validation of midplane, populating any lookup tables etc + can be done here. The expectation is that the required kernel modules, + ip-address assignment etc are done before the pmon, database dockers + are up. + + Returns: + A bool value, should return True if the midplane initialized + successfully. + """ + return True + + def get_module_dpu_data_port(self, index): + """ + Retrieves the DPU data port NPU-DPU association represented for + the DPU index. Platforms that need to overwrite the platform.json + file will use this API. This is valid only on the Switch and not on DPUs + Args: + index: An integer, the index of the module to retrieve + Returns: + A string giving the NPU-DPU port association: + Ex: For index: 1 will return the dup0 port association which is + "Ethernet-BP0: Ethernet0" where the string left of ":" (Ethernet-BP0) + is the NPU port and the string right of ":" (Ethernet0) is the DPU port + """ + platform_dpus_data = DeviceDataManager.get_platform_dpus_data() + module = self._module_list[index] + module_name = module.get_name() + return platform_dpus_data[module_name.lower()]["interface"] diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py index e0592fd58feb..2f2eee7b871c 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2020-2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2020-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,12 +20,22 @@ import os import time import re +from enum import Enum from . import utils from sonic_py_common.general import check_output_pipe DEFAULT_WD_PERIOD = 65535 + +class DpuInterfaceEnum(Enum): + MIDPLANE_INT = "midplane_interface" + RSHIM_INT = "rshim_info" + PCIE_INT = "bus_info" + + +dpu_interface_values = [item.value for item in DpuInterfaceEnum] + DEVICE_DATA = { 'x86_64-mlnx_msn2700-r0': { 'thermal': { @@ -271,16 +282,26 @@ def get_linecard_max_port_count(cls): @classmethod @utils.read_only_cache() def get_platform_dpus_data(cls): - json_data = cls.get_platform_json_data() + from sonic_py_common import device_info + platform_path = device_info.get_path_to_platform_dir() + platform_json_path = os.path.join(platform_path, 'platform.json') + json_data = utils.load_json_file(platform_json_path) return json_data.get('DPUS', None) + @classmethod + def get_dpu_interface(cls, dpu, interface): + dpu_data = cls.get_platform_dpus_data() + if (not dpu_data) or (interface not in dpu_interface_values): + return None + return dpu_data.get(dpu, {}).get(interface) + @classmethod @utils.read_only_cache() - def get_platform_json_data(cls): - from sonic_py_common import device_info - platform_path = device_info.get_path_to_platform_dir() - platform_json_path = os.path.join(platform_path, 'platform.json') - return utils.load_json_file(platform_json_path) + def get_dpu_count(cls): + dpu_data = cls.get_platform_dpus_data() + if not dpu_data: + return 0 + return len(dpu_data) @classmethod def get_bios_component(cls): diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/dpu_vpd_parser.py b/platform/mellanox/mlnx-platform-api/sonic_platform/dpu_vpd_parser.py new file mode 100644 index 000000000000..3347a55aa560 --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/dpu_vpd_parser.py @@ -0,0 +1,46 @@ +# +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from .vpd_parser import VpdParser + + +class DpuVpdParser(VpdParser): + """DPU Specific VPD parser""" + def __init__(self, file_path, dpu_name): + super(DpuVpdParser, self).__init__(file_path=file_path) + self.dpu_name = dpu_name + + def get_dpu_data(self, key=None): + """Retrieves VPD Entry for DPU Specific Key""" + return self.get_entry_value(f"{self.dpu_name}_{key}") + + def get_dpu_base_mac(self): + """Retrieves VPD Entry for DPU Specific Mac Address""" + return self.get_dpu_data("BASE_MAC") + + def get_dpu_serial(self): + """Retrieves VPD Entry for DPU Specific Serial Number""" + return self.get_dpu_data("SN") + + def get_dpu_revision(self): + """Retrieves VPD Entry for DPU Specific Revision""" + return self.get_dpu_data("REV") + + def get_dpu_model(self): + """Retrieves VPD Entry for DPU Specific Model Number""" + return self.get_dpu_data("PN") diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/dpuctlplat.py b/platform/mellanox/mlnx-platform-api/sonic_platform/dpuctlplat.py index 12281db1e789..b66f1be2daad 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/dpuctlplat.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/dpuctlplat.py @@ -1,5 +1,6 @@ # -# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -28,6 +29,7 @@ from .inotify_helper import InotifyHelper from sonic_py_common.syslogger import SysLogger from . import utils + from .device_data import DeviceDataManager, DpuInterfaceEnum except ImportError as e: raise ImportError(str(e)) from e @@ -48,6 +50,7 @@ class OperationType(Enum): CLR = "0" SET = "1" + class BootProgEnum(Enum): RST = 0 BL2 = 1 @@ -63,20 +66,13 @@ class BootProgEnum(Enum): FW_FAULT_DONE = 11 SW_INACTIVE = 15 -# The rshim services are in a different order as compared to the DPU names -dpu_map = { - "dpu1": {"pci_id": "0000:08:00.0", "rshim": "rshim@0"}, - "dpu2": {"pci_id": "0000:07:00.0", "rshim": "rshim@1"}, - "dpu3": {"pci_id": "0000:01:00.0", "rshim": "rshim@2"}, - "dpu4": {"pci_id": "0000:02:00.0", "rshim": "rshim@3"}, -} - class DpuCtlPlat(): """Class for Per DPU API Call""" def __init__(self, dpu_name): self.dpu_name = dpu_name self._name = self.get_hwmgmt_name() + self.dpu_id = int(self.dpu_name[3:]) self.rst_path = os.path.join(SYSTEM_BASE, f"{self._name}_rst") self.pwr_path = os.path.join(SYSTEM_BASE, @@ -89,9 +85,6 @@ def __init__(self, dpu_name): f"{self._name}_shtdn_ready") self.boot_prog_path = os.path.join(HW_BASE, f"{self._name}/system/boot_progress") - self.pci_dev_path = os.path.join(PCI_DEV_BASE, - dpu_map[self._name]["pci_id"], - "remove") self.boot_prog_map = { BootProgEnum.RST.value: "Reset/Boot-ROM", BootProgEnum.BL2.value: "BL2 (from ATF image on eMMC partition)", @@ -111,6 +104,10 @@ def __init__(self, dpu_name): self.shtdn_state = None self.dpu_ready_state = None self.setup_logger() + self.pci_dev_path = None + self.rshim_interface = None + # Use systemd dbus to execute start and stop rshim service + os.environ['DBUS_SESSION_BUS_ADDRESS'] = 'unix:path=/run/dbus/system_bus_socket' self.verbosity = False def setup_logger(self, use_print=False): @@ -125,8 +122,7 @@ def setup_logger(self, use_print=False): def log_debug(self, msg=None): # Print only in verbose mode - if self.verbosity: - self.logger_debug(f"{self.dpu_name}: {msg}") + self.logger_debug(f"{self.dpu_name}: {msg}") def log_info(self, msg=None): self.logger_info(f"{self.dpu_name}: {msg}") @@ -134,32 +130,56 @@ def log_info(self, msg=None): def log_error(self, msg=None): self.logger_error(f"{self.dpu_name}: {msg}") - def run_cmd_output(self, cmd): + def run_cmd_output(self, cmd, raise_exception=True): try: - subprocess.check_output(cmd) + return subprocess.check_output(cmd).decode().strip() except Exception as err: - self.log_error(f"Failed to run cmd {' '.join(cmd)}") - raise err + if raise_exception: + raise err + else: + self.log_debug(f"Failed to run cmd {' '.join(cmd)}") def dpu_pre_shutdown(self): """Method to execute shutdown activities for the DPU""" - self.dpu_rshim_service_control("stop") - self.dpu_pci_remove() + rshim_op = self.dpu_rshim_service_control("stop") + pci_rem_op = self.dpu_pci_remove() + return rshim_op and pci_rem_op def dpu_post_startup(self): """Method to execute all post startup activities for the DPU""" - self.dpu_pci_scan() - self.wait_for_pci() - self.dpu_rshim_service_control("start") - - def dpu_rshim_service_control(self, set_state): + pci_scan_op = self.dpu_pci_scan() + rshim_op = None + if self.wait_for_pci(): + rshim_op = self.dpu_rshim_service_control("start") + if rshim_op and pci_scan_op: + return True + return False + + def get_rshim_interface(self): + """Parse the rshim interface from platform.json, raise Runtime error if the device id is not available""" + if not self.rshim_interface: + interface_name = DeviceDataManager.get_dpu_interface(self.dpu_name, DpuInterfaceEnum.RSHIM_INT.value) + if not interface_name: + raise RuntimeError(f"Unable to Parse rshim information for {self.dpu_name} from Platform.json") + # rshim1 -> rshim@1 + self.rshim_interface = interface_name[:5] + "@" + interface_name[5:] + return self.rshim_interface + + def dpu_rshim_service_control(self, op): """Start/Stop the RSHIM service for the current DPU""" try: - cmd = ['systemctl', set_state, dpu_map[self.get_hwmgmt_name()]['rshim'] + ".service"] - self.run_cmd_output(cmd) - self.log_debug(f"Executed rshim service command: {' '.join(cmd)}") - except Exception: - self.log_error(f"Failed to start rshim!") + rshim_cmd = ["dbus-send", "--dest=org.freedesktop.systemd1", "--type=method_call", + "--print-reply", "--reply-timeout=2000", + "/org/freedesktop/systemd1", + f"org.freedesktop.systemd1.Manager.{op.capitalize()}Unit", + f"string:{self.get_rshim_interface()}.service", + "string:replace"] + self.run_cmd_output(rshim_cmd) + # If command fails execution exception is raised , return true if control is still in try block + return True + except Exception as e: + self.log_error(f"Failed to {op} rshim!: {e}") + return False @contextmanager def get_open_fd(self, path, flag): @@ -169,11 +189,20 @@ def get_open_fd(self, path, flag): finally: os.close(fd) + def get_pci_dev_path(self): + """Parse the PCIE device ID from platform.json, raise Runtime error if the device id is not available""" + if not self.pci_dev_path: + pci_dev_id = DeviceDataManager.get_dpu_interface(self.dpu_name, DpuInterfaceEnum.PCIE_INT.value) + if not pci_dev_id: + raise RuntimeError(f"Unable to obtain pci device id for {self.dpu_name} from platform.json") + self.pci_dev_path = os.path.join(PCI_DEV_BASE, pci_dev_id, "remove") + return self.pci_dev_path + def wait_for_pci(self): """Wait for the PCI device folder in the PCI Path, required before starting rshim""" try: with self.get_open_fd(PCI_DEV_BASE, os.O_RDONLY) as dir_fd: - if os.path.exists(os.path.dirname(self.pci_dev_path)): + if os.path.exists(os.path.dirname(self.get_pci_dev_path())): return True poll_obj = poll() poll_obj.register(dir_fd, POLLIN) @@ -181,11 +210,11 @@ def wait_for_pci(self): while (time.time() - start) < WAIT_FOR_PCI_DEV: events = poll_obj.poll(WAIT_FOR_PCI_DEV * 1000) if events: - if os.path.exists(os.path.dirname(self.pci_dev_path)): + if os.path.exists(os.path.dirname(self.get_pci_dev_path())): return True - return os.path.exists(os.path.dirname(self.pci_dev_path)) - except Exception: - self.log_error("Unable to wait for PCI device") + return os.path.exists(os.path.dirname(self.get_pci_dev_path())) + except Exception as e: + self.log_error(f"Unable to wait for PCI device:{e}") def write_file(self, file_name, content_towrite): """Write given value to file only if file exists""" @@ -229,12 +258,15 @@ def _power_off_force(self): self.log_info(f"Force Power Off complete") return True - def _power_on_force(self, count=4): + def _power_on_force(self, count=4, no_wait=False): """Per DPU Power on with force private function""" if count < 4: self.log_error(f"Failed Force Power on! Retry {4-count}..") self.write_file(self.pwr_f_path, OperationType.SET.value) self.write_file(self.rst_path, OperationType.SET.value) + if no_wait: + self.log_debug("Exiting without checking result of reboot command") + return True get_rdy_inotify = InotifyHelper(self.dpu_rdy_path) with self.time_check_context("power on force"): dpu_rdy = get_rdy_inotify.wait_watch(WAIT_FOR_DPU_READY, 1) @@ -265,20 +297,30 @@ def _power_on(self): def dpu_pci_remove(self): """Per DPU PCI remove API""" try: - self.write_file(self.pci_dev_path, OperationType.SET.value) + self.write_file(self.get_pci_dev_path(), OperationType.SET.value) + return True except Exception: self.log_info(f"Failed PCI Removal!") + return False def dpu_pci_scan(self): """PCI Scan API""" - pci_scan_path = "/sys/bus/pci/rescan" - self.write_file(pci_scan_path, OperationType.SET.value) + try: + pci_scan_path = "/sys/bus/pci/rescan" + self.write_file(pci_scan_path, OperationType.SET.value) + return True + except Exception: + self.log_info(f"Failed to rescan") + return False def dpu_power_on(self, forced=False): """Per DPU Power on API""" with self.boot_prog_context(): self.log_info(f"Power on with force = {forced}") - if forced: + if self.read_boot_prog() == BootProgEnum.OS_RUN.value: + self.log_info(f"Skipping DPU power on as DPU is already powered on") + return_value = True + elif forced: return_value = self._power_on_force() else: return_value = self._power_on() @@ -290,18 +332,24 @@ def dpu_power_off(self, forced=False): with self.boot_prog_context(): self.dpu_pre_shutdown() self.log_info(f"Power off with force = {forced}") - if forced: + if self.read_boot_prog() == BootProgEnum.RST.value: + self.log_info(f"Skipping DPU power off as DPU is already powered off") + return True + elif forced: return self._power_off_force() elif self.read_boot_prog() != BootProgEnum.OS_RUN.value: self.log_info(f"Power off with force = True since since OS is not in running state on DPU") return self._power_off_force() return self._power_off() - def _reboot(self): + def _reboot(self, no_wait): """Per DPU Reboot Private function API""" if not self.dpu_go_down(): self._power_off_force() self.write_file(self.rst_path, OperationType.SET.value) + if no_wait: + self.log_debug("Exiting without checking result of reboot command") + return True get_rdy_inotify = InotifyHelper(self.dpu_rdy_path) with self.time_check_context("power on"): dpu_rdy = get_rdy_inotify.wait_watch(WAIT_FOR_DPU_READY, 1) @@ -311,25 +359,28 @@ def _reboot(self): return_value = self._power_on_force() return return_value - def _reboot_force(self): + def _reboot_force(self, no_wait): """Per DPU Force Reboot Private function API""" self._power_off_force() - return_value = self._power_on_force() + return_value = self._power_on_force(no_wait=no_wait) return return_value - def dpu_reboot(self, forced=False): + def dpu_reboot(self, forced=False, no_wait=False, skip_pre_post=False): """Per DPU Power on API""" with self.boot_prog_context(): - self.dpu_pre_shutdown() + if not skip_pre_post: + self.dpu_pre_shutdown() self.log_info(f"Reboot with force = {forced}") if forced: - return_value = self._reboot_force() + return_value = self._reboot_force(no_wait) elif self.read_boot_prog() != BootProgEnum.OS_RUN.value: self.log_info(f"Reboot with force = True since OS is not in running state on DPU") - return_value = self._reboot_force() + return_value = self._reboot_force(no_wait) else: - return_value = self._reboot() - self.dpu_post_startup() + return_value = self._reboot(no_wait) + # No Post startup as well for no_wait call + if (not no_wait) and (not skip_pre_post): + self.dpu_post_startup() if return_value: self.log_info("Reboot Complete") return return_value diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/module.py b/platform/mellanox/mlnx-platform-api/sonic_platform/module.py index 765314d7baf0..7dc5167473e5 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/module.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/module.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,14 +19,19 @@ import redis import threading from sonic_platform_base.module_base import ModuleBase -from sonic_py_common.logger import Logger +from sonic_platform_base.chassis_base import ChassisBase +from sonic_py_common.syslogger import SysLogger +from .dpuctlplat import DpuCtlPlat, BootProgEnum +import subprocess from . import utils -from .device_data import DeviceDataManager +from .device_data import DeviceDataManager, DpuInterfaceEnum from .vpd_parser import VpdParser +from .dpu_vpd_parser import DpuVpdParser +from swsscommon.swsscommon import ConfigDBConnector, SonicV2Connector # Global logger class instance -logger = Logger() +logger = SysLogger() class Module(ModuleBase): @@ -247,3 +253,290 @@ def get_sfp(self, index): with self.lock: self.initialize_single_sfp(index) return super(Module, self).get_sfp(index) + + +class DpuModule(ModuleBase): + + def __init__(self, dpu_id): + super(DpuModule, self).__init__() + self.dpu_id = dpu_id + self._name = f"DPU{self.dpu_id}" + self.dpuctl_obj = DpuCtlPlat(self._name.lower()) + self.fault_state = False + self.dpu_vpd_parser = DpuVpdParser('/var/run/hw-management/eeprom/vpd_data', self.dpuctl_obj._name.upper()) + self.CONFIG_DB_NAME = "CONFIG_DB" + self.DHCP_SERVER_HASH = f"DHCP_SERVER_IPV4_PORT|bridge-midplane|{self._name.lower()}" + self.DHCP_IP_ADDRESS_KEY = "ips@" + self.config_db = ConfigDBConnector(use_unix_socket_path=True) + self.config_db.connect() + self.midplane_ip = None + self.midplane_interface = None + self.bus_info = None + self.reboot_base_path = f"/var/run/hw-management/{self.dpuctl_obj._name}/system/" + self.reboot_cause_map = { + f'{self.reboot_base_path}reset_aux_pwr_or_reload': + (ChassisBase.REBOOT_CAUSE_POWER_LOSS, 'power auxiliary outage or reload'), + f'{self.reboot_base_path}reset_comex_pwr_fail': + (ChassisBase.REBOOT_CAUSE_POWER_LOSS, 'Power failed to comex module'), + f'{self.reboot_base_path}reset_from_main_board': + (ChassisBase.REBOOT_CAUSE_NON_HARDWARE, 'Reset from Main board'), + f'{self.reboot_base_path}reset_dpu_thermal': + (ChassisBase.REBOOT_CAUSE_THERMAL_OVERLOAD_OTHER, 'Thermal shutdown of the DPU'), + } + self.chassis_state_db = SonicV2Connector(host="127.0.0.1") + self.chassis_state_db.connect(self.chassis_state_db.CHASSIS_STATE_DB) + + def get_base_mac(self): + """ + Retrieves the base MAC address for the module + + Returns: + A string containing the MAC address in the format + 'XX:XX:XX:XX:XX:XX' + """ + return self.dpu_vpd_parser.get_dpu_base_mac() + + def get_model(self): + """ + Retrieves the model number (or part number) of the device + + Returns: + string: Model/part number of device + """ + return self.dpu_vpd_parser.get_dpu_model() + + def get_serial(self): + """ + Retrieves the serial number of the device + + Returns: + string: Serial number of device + """ + return self.dpu_vpd_parser.get_dpu_serial() + + def get_revision(self): + """ + Retrieves the hardware revision of the device + + Returns: + string: Revision value of device + """ + return self.dpu_vpd_parser.get_dpu_revision() + + def reboot(self, reboot_type=ModuleBase.MODULE_REBOOT_DPU): + """ + Request to reboot the module + + Args: + reboot_type: A string, the type of reboot requested from one of the + predefined reboot types: MODULE_REBOOT_DEFAULT, MODULE_REBOOT_CPU_COMPLEX, + MODULE_REBOOT_FPGA_COMPLEX or MODULE_REBOOT_DPU + + MODULE_REBOOT_DPU is only applicable for smartswitch chassis. + + Returns: + bool: True if the request has been issued successfully, False if not + """ + # Skip pre shutdown and Post startup, handled by pci_detach and pci_reattach + if reboot_type == ModuleBase.MODULE_REBOOT_DPU: + return self.dpuctl_obj.dpu_reboot(skip_pre_post=True) + elif reboot_type == ModuleBase.MODULE_REBOOT_SMARTSWITCH: + # Do not wait for result if we are rebooting NPU + DPUs + return self.dpuctl_obj.dpu_reboot(no_wait=True, skip_pre_post=True) + raise RuntimeError(f"Invalid Reboot Type provided for {self._name}: {reboot_type}") + + def set_admin_state(self, up): + """ + Request to keep the card in administratively up/down state. + The down state will power down the module and the status should show + MODULE_STATUS_OFFLINE. + The up state will take the module to MODULE_STATUS_FAULT or + MODULE_STATUS_ONLINE states. + + Args: + up: A boolean, True to set the admin-state to UP. False to set the + admin-state to DOWN. + + Returns: + bool: True if the request has been issued successfully, False if not + """ + if up: + if self.dpuctl_obj.dpu_power_on(): + return True + logger.log_error(f"Failed to set the admin state for {self._name}") + return False + return self.dpuctl_obj.dpu_power_off() + + def get_type(self): + """ + Retrieves the type of the module. + + Returns: + A string, the module-type from one of the predefined types: + MODULE_TYPE_SUPERVISOR, MODULE_TYPE_LINE or MODULE_TYPE_FABRIC + or MODULE_TYPE_DPU or MODULE_TYPE_SWITCH + """ + return ModuleBase.MODULE_TYPE_DPU + + def get_name(self): + """ + Retrieves the type of the module. + + Returns: + A string, the module-type from one of the predefined types: + MODULE_TYPE_SUPERVISOR, MODULE_TYPE_LINE or MODULE_TYPE_FABRIC + or MODULE_TYPE_DPU + """ + return self._name + + def get_description(self): + """ + Retrieves the platform vendor's product description of the module + + Returns: + A string, providing the vendor's product description of the module. + """ + return "NVIDIA BlueField-3 DPU" + + def get_oper_status(self): + boot_prog = self.dpuctl_obj.read_boot_prog() + if boot_prog == BootProgEnum.OS_RUN.value: + return ModuleBase.MODULE_STATUS_ONLINE + return ModuleBase.MODULE_STATUS_OFFLINE + + ############################################## + # SmartSwitch methods + ############################################## + + def get_dpu_id(self): + """ + Retrieves the DPU ID. Returns None for non-smartswitch chassis. + + Returns: + An integer, indicating the DPU ID. DPU0 returns 0, DPUX returns X + DPU ID can be greater than or equal to 0. + """ + return self.dpu_id + + def get_reboot_cause(self): + """ + Retrieves the cause of the previous reboot of the DPU module + Returns: + A tuple (string, string) where the first element is a string + containing the cause of the previous reboot. This string must + be one of the predefined strings in this class. If the first + string is "REBOOT_CAUSE_HARDWARE_OTHER", the second string can be + used to pass a description of the reboot cause. + Some more causes are appended to the existing list to handle other + modules such as DPUs. + Ex: REBOOT_CAUSE_POWER_LOSS, REBOOT_CAUSE_HOST_RESET_DPU, + REBOOT_CAUSE_HOST_POWERCYCLED_DPU, REBOOT_CAUSE_SW_THERMAL, + REBOOT_CAUSE_DPU_SELF_REBOOT + """ + for f, rd in self.reboot_cause_map.items(): + if utils.read_int_from_file(f) == 1: + return rd + return ChassisBase.REBOOT_CAUSE_NON_HARDWARE, '' + + def get_midplane_ip(self): + """ + Retrieves the midplane IP-address of the module in a modular chassis + When called from the Supervisor, the module could represent the + line-card and return the midplane IP-address of the line-card. + When called from the line-card, the module will represent the + Supervisor and return its midplane IP-address. + When called from the DPU, returns the midplane IP-address of the dpu-card. + When called from the Switch returns the midplane IP-address of Switch. + Returns: + A string, the IP-address of the module reachable over the midplane + """ + if not self.midplane_ip: + self.midplane_ip = self.config_db.get(self.CONFIG_DB_NAME, self.DHCP_SERVER_HASH, self.DHCP_IP_ADDRESS_KEY) + return self.midplane_ip + + def is_midplane_reachable(self): + """ + Retrieves the reachability status of the module from the Supervisor or + of the Supervisor from the module via the midplane of the modular chassis + Returns: + A bool value, should return True if module is reachable via midplane + """ + if not self._is_midplane_up(): + return False + command = ['ping', '-c', '1', '-W', '1', self.get_midplane_ip()] + try: + return subprocess.call(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) == 0 + except Exception as e: + logger.log_error(f"Failed to check midplane reachability for {self.get_name()}! {e}") + return False + + def get_midplane_interface(self): + if not self.midplane_interface: + # Cache the data to prevent multiple platform.json parsing + self.midplane_interface = DeviceDataManager.get_dpu_interface(self.get_name().lower(), DpuInterfaceEnum.MIDPLANE_INT.value) + # If we are unable to parse platform.json for midplane interface raise RunTimeError + if not self.midplane_interface: + raise RuntimeError(f"Unable to obtain midplane interface information from platform.json for {self.get_name()}") + return self.midplane_interface + + def _is_midplane_up(self): + # If rshim is not activated then the interface does not exist, do not log the error + return utils.read_int_from_file(f'/sys/class/net/{self.get_midplane_interface()}/carrier', log_func=None) == 1 + + def get_pci_bus_info(self): + """ + Retrieves the bus information. + + Returns: + Returns the PCI bus information in BDF format like "[DDDD:]BB:SS:F" + """ + if not self.bus_info: + # Cache the data to prevent multiple platform.json parsing + self.bus_info = DeviceDataManager.get_dpu_interface(self.get_name().lower(), DpuInterfaceEnum.PCIE_INT.value) + # If we are unable to parse platform.json for midplane interface raise RunTimeError + if not self.bus_info: + raise RuntimeError(f"Unable to obtain bus info from platform.json for {self.get_name()}") + return self.bus_info + + def pci_detach(self): + """ + Detaches the DPU PCI device specified by "module_name" on a SmartSwitch. + + Returns: True once the PCI is successfully detached. + """ + return self.dpuctl_obj.dpu_pre_shutdown() + + def pci_reattach(self): + """ + Rescans and reconnects the DPU PCI device specified by "module_name" on a SmartSwitch. + + Returns: True once the PCI is successfully reconnected. + """ + return self.dpuctl_obj.dpu_post_startup() + + def get_hw_mgmt_id(self): + """ + Obtains the id used by hw-mgmt API, so that we can use different APIs and access sysfs files provided + """ + return self.dpu_id + 1 + + def get_temperature_dict(self): + """ + This function is used to obtain the TEMPERATURE INFO TABLE from CHASSIS_STATE_DB + """ + chassis_state_db_name = "CHASSIS_STATE_DB" + ddr = "DDR" + nvme = "NVME" + cpu = "CPU" + dpu_ddr_temperature_info_table = f"TEMPERATURE_INFO_{self.dpu_id}|{ddr}" + dpu_cpu_temperature_info_table = f"TEMPERATURE_INFO_{self.dpu_id}|{cpu}" + dpu_drive_temperature_info_table = f"TEMPERATURE_INFO_{self.dpu_id}|{nvme}" + return_dict = {} + try: + return_dict[ddr] = self.chassis_state_db.get_all(chassis_state_db_name, dpu_ddr_temperature_info_table) + return_dict[cpu] = self.chassis_state_db.get_all(chassis_state_db_name, dpu_cpu_temperature_info_table) + return_dict[nvme] = self.chassis_state_db.get_all(chassis_state_db_name, dpu_drive_temperature_info_table) + except Exception as e: + logger.log_error(f"Failed to check obtain DPU temperature informatoin for {self.get_name()}! {e}") + return {} + return return_dict diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/platform.py b/platform/mellanox/mlnx-platform-api/sonic_platform/platform.py index 9100e8fb2f26..eb60329e7e04 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/platform.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/platform.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2019-2021 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2019-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,7 +23,7 @@ try: from sonic_platform_base.platform_base import PlatformBase - from .chassis import Chassis, ModularChassis + from .chassis import Chassis, ModularChassis, SmartSwitchChassis from .device_data import DeviceDataManager except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -30,7 +31,9 @@ class Platform(PlatformBase): def __init__(self): PlatformBase.__init__(self) - if DeviceDataManager.get_linecard_count() == 0: + if DeviceDataManager.get_dpu_count(): + self._chassis = SmartSwitchChassis() + elif DeviceDataManager.get_linecard_count() == 0: self._chassis = Chassis() else: self._chassis = ModularChassis() diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index aa3e188ae5f7..0e76f947b839 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -1,5 +1,6 @@ # -# Copyright (c) 2019-2024 NVIDIA CORPORATION & AFFILIATES. +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2019-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -675,7 +676,8 @@ def get_error_description(self): """ try: if self.is_sw_control(): - return 'Not supported' + api = self.get_xcvr_api() + return api.get_error_description() if api else None except: return self.SFP_STATUS_INITIALIZING diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/smartswitch_thermal_updater.py b/platform/mellanox/mlnx-platform-api/sonic_platform/smartswitch_thermal_updater.py new file mode 100644 index 000000000000..da2253e77c3e --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/smartswitch_thermal_updater.py @@ -0,0 +1,152 @@ +# +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from . import utils +from .thermal_updater import ThermalUpdater +from sonic_py_common import logger + +import sys + +sys.path.append('/run/hw-management/bin') + +try: + import hw_management_dpu_thermal_update +except ImportError: + # For unit test and for non-smartswitch systems, these functions should not be called + from unittest import mock + hw_management_dpu_thermal_update = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear = mock.MagicMock() + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear = mock.MagicMock() + +CRIT_THRESH = "critical_high_threshold" +HIGH_THRESH = "high_threshold" +TEMPERATURE_DATA = "temperature" +DPU_STATUS_OFFLINE = "Offline" +DPU_STATUS_ONLINE = "Online" +CPU_FIELD = "CPU" +NVME_FIELD = "NVME" +DDR_FIELD = "DDR" +dpu_func_dict = { + CPU_FIELD: hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set, + NVME_FIELD: hw_management_dpu_thermal_update.thermal_data_dpu_drive_set, + DDR_FIELD: hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set, + } + +ERROR_READ_THERMAL_DATA = 254000 + +TC_CONFIG_FILE = '/run/hw-management/config/tc_config.json' +logger = logger.Logger('smart-switch-thermal-updater') + + +class SmartswitchThermalUpdater(ThermalUpdater): + def __init__(self, sfp_list, dpu_list, is_host_mgmt_mode=True): + super().__init__(sfp_list=sfp_list) + self._dpu_list = dpu_list + self._dpu_status = {} + self.host_mgmt_mode = is_host_mgmt_mode + + def load_tc_config_dpu(self): + dpu_poll_interval = 3 + data = utils.load_json_file(TC_CONFIG_FILE, log_func=None) + if data: + dev_parameters = data.get('dev_parameters', {}) + dpu_parameter = dev_parameters.get('dpu\\d+_module', {}) + dpu_poll_interval_config = dpu_parameter.get('poll_time') + dpu_poll_interval = int(dpu_poll_interval_config) / 2 if dpu_poll_interval_config else dpu_poll_interval + else: + logger.log_notice(f'{TC_CONFIG_FILE} does not exist, use default polling interval') + logger.log_notice(f'DPU polling interval: {dpu_poll_interval}') + self._timer.schedule(dpu_poll_interval, self.update_dpu) + + def start(self): + self.clean_thermal_data_dpu() + self.load_tc_config_dpu() + if self.host_mgmt_mode: + super().start() + else: + self._timer.start() + + def stop(self): + if self.host_mgmt_mode: + super().stop() + else: + self._timer.stop() + + def clean_thermal_data_dpu(self): + for dpu in self._dpu_list: + self.thermal_data_dpu_clear(dpu.get_hw_mgmt_id()) + + def thermal_data_dpu_clear(self, dpu_index): + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear(dpu_index) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear(dpu_index) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear(dpu_index) + + def get_dpu_temperature_data_from_dict_obj(self, dpu_component_temperature_data, field_name): + value = dpu_component_temperature_data.get(field_name) + fault_state = False + if not value: + fault_state = True + return 0, fault_state + try: + int_value = int(float(value)) + except ValueError: + logger.log_error(f"Unable to obtain temperature data for DPU {field_name}: {value}") + int_value = 0 + fault_state = True + return int_value, fault_state + + def get_dpu_component_temperature_data(self, dpu_temperature_data, component_name): + dpu_component_temperature_data = dpu_temperature_data.get(component_name, {}) + output_dict = {} + output_false_state = False + for value in [TEMPERATURE_DATA, HIGH_THRESH, CRIT_THRESH]: + output_dict[value], fault_state = self.get_dpu_temperature_data_from_dict_obj(dpu_component_temperature_data, value) + output_false_state = output_false_state or fault_state + return output_dict[TEMPERATURE_DATA], output_dict[HIGH_THRESH], output_dict[CRIT_THRESH], ERROR_READ_THERMAL_DATA if output_false_state else 0 + + def update_dpu_temperature(self, dpu, fault_state=False): + dpu_temperature_data = dpu.get_temperature_dict() if not fault_state else {} + for key, func in dpu_func_dict.items(): + temp_data, temp_thresh, temp_crit_thresh, fault_val = self.get_dpu_component_temperature_data(dpu_temperature_data, key) + return_val = func(dpu.get_hw_mgmt_id(), temp_data, temp_thresh, temp_crit_thresh, fault_val) + if not return_val: + logger.log_error(f"Unable to update Temperature data to hw-mgmt for {key} for {dpu.get_name()}") + + def update_single_dpu(self, dpu): + try: + dpu_oper_status = dpu.get_oper_status() + pre_oper_status = self._dpu_status.get(dpu.get_name()) + if dpu_oper_status == DPU_STATUS_ONLINE: + self.update_dpu_temperature(dpu) + elif pre_oper_status != dpu_oper_status: + # If dpu is shutdown from previous execution + self.thermal_data_dpu_clear(dpu.get_hw_mgmt_id()) + if pre_oper_status != dpu_oper_status: + # If there is a change in oper_status (irrespective of type of change) + self._dpu_status[dpu.get_name()] = dpu_oper_status + except Exception as e: + logger.log_error(f'Failed to update DPU {dpu.get_hw_mgmt_id()} thermal data - {e}') + self.update_dpu_temperature(dpu, fault_state=True) + + def update_dpu(self): + for dpu in self._dpu_list: + self.update_single_dpu(dpu) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py index 3512a0cf52e5..813c5e8eefb0 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal_manager.py @@ -15,7 +15,8 @@ # limitations under the License. # from sonic_platform_base.sonic_thermal_control.thermal_manager_base import ThermalManagerBase -from . import thermal_updater +from . import thermal_updater +from . import smartswitch_thermal_updater from .device_data import DeviceDataManager @@ -33,12 +34,21 @@ def initialize(cls): and any other vendor specific initialization. :return: """ - if DeviceDataManager.is_module_host_management_mode(): + dpus_present = DeviceDataManager.get_platform_dpus_data() + host_mgmt_mode = DeviceDataManager.is_module_host_management_mode() + if not dpus_present and host_mgmt_mode: + # Non smart switch behaviour has highest priority from .chassis import Chassis - cls.thermal_updater_task = thermal_updater.ThermalUpdater(Chassis.chassis_instance.get_all_sfps()) + cls.thermal_updater_task = thermal_updater.ThermalUpdater(sfp_list=Chassis.chassis_instance.get_all_sfps()) + elif dpus_present: + from .chassis import Chassis + dpus = Chassis.chassis_instance.get_all_modules() + cls.thermal_updater_task = smartswitch_thermal_updater.SmartswitchThermalUpdater(sfp_list=Chassis.chassis_instance.get_all_sfps(), + dpu_list=dpus, + is_host_mgmt_mode=host_mgmt_mode) + if cls.thermal_updater_task: cls.thermal_updater_task.start() - @classmethod def deinitialize(cls): """ @@ -46,5 +56,5 @@ def deinitialize(cls): is a no-op. :return: """ - if DeviceDataManager.is_module_host_management_mode() and cls.thermal_updater_task: + if cls.thermal_updater_task: cls.thermal_updater_task.stop() diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py index 77aad4a315c7..190299d3733e 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/utils.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2020-2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2020-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -105,7 +106,7 @@ def read_float_from_file(file_path, default=0.0, raise_exception=False, log_func def _key_value_converter(content, delimeter): ret = {} for line in content.splitlines(): - k,v = line.split(delimeter) + k,v = line.split(delimeter, 1) ret[k.strip()] = v.strip() return ret diff --git a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py index 19ceb7f29951..f07f164b7305 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_chassis.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_chassis.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,6 +21,7 @@ import sys import subprocess import threading +import pytest from mock import MagicMock if sys.version_info.major == 3: @@ -33,7 +35,7 @@ import sonic_platform.chassis from sonic_platform_base.sfp_base import SfpBase -from sonic_platform.chassis import Chassis +from sonic_platform.chassis import Chassis, SmartSwitchChassis from sonic_platform.device_data import DeviceDataManager sonic_platform.chassis.extract_RJ45_ports_index = mock.MagicMock(return_value=[]) @@ -342,3 +344,77 @@ def test_parse_vpd(self): chassis = Chassis() content = chassis._parse_vpd_data(os.path.join(test_path, 'vpd_data_file')) assert content.get('REV') == 'A7' + + @mock.patch('sonic_platform.module.SonicV2Connector', mock.MagicMock()) + @mock.patch('sonic_platform.module.ConfigDBConnector', mock.MagicMock()) + def test_smartswitch(self): + orig_dpu_count = DeviceDataManager.get_dpu_count + DeviceDataManager.get_dpu_count = mock.MagicMock(return_value=4) + chassis = SmartSwitchChassis() + + assert not chassis.is_modular_chassis() + assert chassis.is_smartswitch() + assert chassis.init_midplane_switch() + + chassis._module_list = None + chassis.module_initialized_count = 0 + chassis.module_name_index_map = {} + with pytest.raises(RuntimeError, match="Invalid index = -1 for module" + " initialization with total module count = 4"): + chassis.initialize_single_module(-1) + chassis.get_module(-1) + with pytest.raises(KeyError): + chassis.get_module_index('DPU1') + chassis.get_module_index('DPU2') + chassis.get_dpu_id("DPU1") + chassis.get_dpu_id("DPU2") + chassis.get_dpu_id("DPU3") + + DeviceDataManager.get_dpu_count = mock.MagicMock(return_value=0) + assert chassis.get_num_modules() == 0 + with pytest.raises(TypeError): + chassis.get_module(0) + chassis.initialize_modules() + assert chassis.get_all_modules() is None + + DeviceDataManager.get_dpu_count = mock.MagicMock(return_value=4) + from sonic_platform.module import DpuModule + assert isinstance(chassis.get_module(0), DpuModule) + assert chassis.get_module(4) is None + + chassis.initialize_modules() + assert chassis.get_module_index('DPU0') == 0 + assert chassis.get_module_index('DPU3') == 3 + with pytest.raises(KeyError): + chassis.get_module_index('DPU10') + chassis.get_module_index('ABC') + + assert chassis.get_num_modules() == 4 + module_list = chassis.get_all_modules() + assert len(module_list) == 4 + pl_data = { + "dpu0": { + "interface": {"Ethernet224": "Ethernet0"} + }, + "dpu1": { + "interface": {"Ethernet232": "Ethernet0"} + }, + "dpu2": { + "interface": {"EthernetX": "EthernetY"} + } + } + orig_dpus_data = DeviceDataManager.get_platform_dpus_data + DeviceDataManager.get_platform_dpus_data = mock.MagicMock(return_value=pl_data) + chassis.get_module_dpu_data_port(0) == str({"Ethernet232": "Ethernet0"}) + with pytest.raises(IndexError): + assert chassis.get_module_dpu_data_port(5) + assert chassis.get_module_dpu_data_port(-1) + + assert chassis.get_dpu_id("DPU1") == 1 + assert chassis.get_dpu_id("DPU3") == 3 + assert chassis.get_dpu_id("DPU2") == 2 + with pytest.raises(KeyError): + chassis.get_dpu_id('DPU15') + chassis.get_dpu_id('ABC') + DeviceDataManager.get_platform_dpus_data = orig_dpus_data + DeviceDataManager.get_dpu_count = orig_dpu_count diff --git a/platform/mellanox/mlnx-platform-api/tests/test_device_data.py b/platform/mellanox/mlnx-platform-api/tests/test_device_data.py index f67793419091..f34cb4e471e7 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_device_data.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_device_data.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,7 +29,7 @@ modules_path = os.path.dirname(test_path) sys.path.insert(0, modules_path) -from sonic_platform.device_data import DeviceDataManager +from sonic_platform.device_data import DeviceDataManager, DpuInterfaceEnum, dpu_interface_values class TestDeviceData: @@ -83,3 +84,77 @@ def test_wait_platform_ready(self, mock_is_indep, mock_exists): assert DeviceDataManager.wait_platform_ready() mock_exists.return_value = False assert not DeviceDataManager.wait_platform_ready() + + @mock.patch('sonic_py_common.device_info.get_path_to_platform_dir', mock.MagicMock(return_value='/tmp')) + @mock.patch('sonic_platform.device_data.utils.load_json_file') + def test_dpu_count(self, mock_load_json): + mock_value = { + "DPUS": { + "dpu1": { + "interface": {"Ethernet224": "Ethernet0"} + }, + "dpu2": { + "interface": {"Ethernet232": "Ethernet0"} + }, + "dpu3": { + "interface": {"EthernetX": "EthernetY"} + } + }, + } + mock_load_json.return_value = mock_value + return_dict = DeviceDataManager.get_platform_dpus_data() + dpu_data = mock_value["DPUS"] + assert dpu_data == return_dict + mock_load_json.return_value = {} + # Data is Cached + assert DeviceDataManager.get_platform_dpus_data() == mock_value["DPUS"] + assert DeviceDataManager.get_dpu_count() == 3 + + @mock.patch('sonic_py_common.device_info.get_path_to_platform_dir', mock.MagicMock(return_value='/tmp')) + @mock.patch('sonic_platform.device_data.DeviceDataManager.get_platform_dpus_data') + def test_dpu_interface_data(self, mock_load_json): + mock_value = { + "dpu0": { + "midplane_interface": "dpu0", + "interface": { + "Ethernet224": "Ethernet0" + }, + "rshim_info": "rshim0", + "bus_info": "0000:08:00.0" + }, + "dpu1": { + "midplane_interface": "dpu1", + "interface": { + "Ethernet232": "Ethernet0" + }, + "rshim_info": "rshim1", + "bus_info": "0000:07:00.0" + }, + "dpu2": { + "midplane_interface": "dpu2", + "interface": { + "Ethernet240": "Ethernet0" + }, + "rshim_info": "rshim2", + "bus_info": "0000:01:00.0" + }, + "dpu3": { + "midplane_interface": "dpu3", + "interface": { + "Ethernet248": "Ethernet0" + }, + "rshim_info": "rshim3", + "bus_info": "0000:02:00.0" + } + } + mock_load_json.return_value = mock_value + for dpu_name in mock_value: + for dpu_interface in dpu_interface_values: + assert DeviceDataManager.get_dpu_interface(dpu_name, dpu_interface) == mock_value[dpu_name][dpu_interface] + invalid_dpu_names = ["dpu4", "", "dpu"] + invalid_interface_names = ["midplane", "rshim", "bus"] + for interface_name in invalid_interface_names: + assert not DeviceDataManager.get_dpu_interface("dpu0", interface_name) + for dpu_name in invalid_dpu_names: + assert not DeviceDataManager.get_dpu_interface(dpu_name, DpuInterfaceEnum.MIDPLANE_INT.value) + assert not DeviceDataManager.get_dpu_interface("", "") diff --git a/platform/mellanox/mlnx-platform-api/tests/test_dpuctlplat.py b/platform/mellanox/mlnx-platform-api/tests/test_dpuctlplat.py index 7340a0041953..34c7870cfd85 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_dpuctlplat.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_dpuctlplat.py @@ -1,5 +1,6 @@ # -# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +20,8 @@ import os import sys import pytest -from sonic_platform.dpuctlplat import DpuCtlPlat, dpu_map, BootProgEnum +import sonic_platform +from sonic_platform.dpuctlplat import DpuCtlPlat, BootProgEnum, PCI_DEV_BASE from unittest.mock import MagicMock, patch, Mock, call @@ -45,6 +47,9 @@ def create_dpu_list(): obj = create_dpu_list() +rshim_interface = "rshim@0" +pci_dev_path = os.path.join(PCI_DEV_BASE, "0000:08:00.0", 'remove') + class TestDpuClass: """Tests for dpuctl Platform API Wrapper""" @@ -53,6 +58,9 @@ def setup_class(cls): """Setup function for all tests for dpuctl implementation""" os.environ["PATH"] += os.pathsep + scripts_path os.environ["MLNX_PLATFORM_API_DPUCTL_UNIT_TESTING"] = "2" + dpuctl_obj = obj["dpuctl_list"][0] + dpuctl_obj.rshim_interface = rshim_interface + dpuctl_obj.pci_dev_path = pci_dev_path @patch('os.path.exists', MagicMock(return_value=True)) @patch('multiprocessing.Process.start', MagicMock(return_value=True)) @@ -74,8 +82,8 @@ def mock_write_file(file_name, content_towrite): with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ patch.object(dpuctl_obj, 'read_boot_prog', MagicMock(return_value=BootProgEnum.OS_RUN.value)): assert dpuctl_obj.dpu_power_off(True) - assert written_data[0]["file"].endswith( - f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + print(f"{written_data}") + assert written_data[0]["file"].endswith(f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert "0" == written_data[1]["data"] assert written_data[1]["file"].endswith( @@ -88,7 +96,7 @@ def mock_write_file(file_name, content_towrite): assert mock_inotify.call_args.args[0].endswith( f"{dpuctl_obj.get_hwmgmt_name()}_shtdn_ready") assert written_data[0]["file"].endswith( - f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -100,7 +108,7 @@ def mock_write_file(file_name, content_towrite): assert mock_inotify.call_args.args[0].endswith( f"{dpuctl_obj.get_hwmgmt_name()}_shtdn_ready") assert written_data[0]["file"].endswith( - f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -108,7 +116,7 @@ def mock_write_file(file_name, content_towrite): assert "0" == written_data[2]["data"] assert written_data[3]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_pwr_force") assert "0" == written_data[3]["data"] - # Test whether value of boot_progress changes power off to force_power_off + # Test whether value of boot_progress skips power off with patch.object(dpuctl_obj, 'read_boot_prog') as mock_boot_prog, \ patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ patch.object(dpuctl_obj, '_power_off_force') as mock_power_off_force, \ @@ -117,6 +125,16 @@ def mock_write_file(file_name, content_towrite): mock_boot_prog.return_value = BootProgEnum.RST.value mock_add_watch.return_value = True assert dpuctl_obj.dpu_power_off(False) + assert mock_obj.call_args_list[1].args[0] == "Skipping DPU power off as DPU is already powered off" + # Test whether value of boot_progress changes power off to force_power_off + with patch.object(dpuctl_obj, 'read_boot_prog') as mock_boot_prog, \ + patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ + patch.object(dpuctl_obj, '_power_off_force') as mock_power_off_force, \ + patch.object(dpuctl_obj, '_power_off') as mock_power_off, \ + patch.object(dpuctl_obj, 'log_info') as mock_obj: + mock_boot_prog.return_value = BootProgEnum.OS_CRASH_PROG.value + mock_add_watch.return_value = True + assert dpuctl_obj.dpu_power_off(False) assert mock_obj.call_args_list[1].args[0] == "Power off with force = True since since OS is not in running state on DPU" mock_power_off_force.assert_called_once() mock_power_off.assert_not_called() @@ -126,7 +144,6 @@ def mock_write_file(file_name, content_towrite): assert dpuctl_obj.dpu_power_off(False) mock_power_off_force.assert_not_called() mock_power_off.assert_called_once() - @patch('os.path.exists', MagicMock(return_value=True)) @patch('multiprocessing.Process.start', MagicMock(return_value=True)) @@ -147,7 +164,8 @@ def mock_write_file(file_name, content_towrite): return True with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ patch.object(dpuctl_obj, 'wait_for_pci', wraps=MagicMock(return_value=None)), \ - patch.object(dpuctl_obj, 'dpu_rshim_service_control', wraps=MagicMock(return_value=None)): + patch.object(dpuctl_obj, 'dpu_rshim_service_control', wraps=MagicMock(return_value=None)), \ + patch.object(dpuctl_obj, 'read_boot_prog', wraps=MagicMock(return_value=BootProgEnum.RST.value)): assert dpuctl_obj.dpu_power_on(True) assert mock_inotify.call_args.args[0].endswith( f"{dpuctl_obj.get_hwmgmt_name()}_ready") @@ -186,7 +204,7 @@ def mock_write_file(file_name, content_towrite): assert "1" == written_data[18]["data"] @patch('os.path.exists', MagicMock(return_value=True)) - @patch('multiprocessing.Process.start', MagicMock(return_value=True)) + @patch('multiprocessing.Process.start', MagicMock(return_value=None)) @patch('multiprocessing.Process.is_alive', MagicMock(return_value=False)) @patch('sonic_platform.inotify_helper.InotifyHelper.wait_watch') @patch('sonic_platform.inotify_helper.InotifyHelper.__init__') @@ -207,7 +225,7 @@ def mock_write_file(file_name, content_towrite): dpuctl_obj.write_file = mock_write_file assert dpuctl_obj.dpu_reboot(False) assert len(written_data) == 4 - assert written_data[0]["file"].endswith(f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + assert written_data[0]["file"].endswith(f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -221,7 +239,7 @@ def mock_write_file(file_name, content_towrite): written_data = [] assert not dpuctl_obj.dpu_reboot() assert len(written_data) == 22 - assert written_data[0]["file"].endswith(f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + assert written_data[0]["file"].endswith(f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -246,7 +264,7 @@ def mock_write_file(file_name, content_towrite): mock_inotify.reset_mock() mock_add_watch.return_value = True mock_inotify.return_value = None - written_data=[] + written_data = [] with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ patch.object(dpuctl_obj, 'read_boot_prog', MagicMock(return_value=BootProgEnum.OS_RUN.value)), \ patch.object(dpuctl_obj, 'dpu_rshim_service_control', wraps=MagicMock(return_value=None)): @@ -254,7 +272,7 @@ def mock_write_file(file_name, content_towrite): assert dpuctl_obj.dpu_reboot(True) mock_add_watch.return_value = None assert len(written_data) == 6 - assert written_data[0]["file"].endswith(f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + assert written_data[0]["file"].endswith(f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -272,7 +290,7 @@ def mock_write_file(file_name, content_towrite): written_data = [] assert not dpuctl_obj.dpu_reboot(True) assert len(written_data) == 18 - assert written_data[0]["file"].endswith(f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}/remove") + assert written_data[0]["file"].endswith(f"{pci_dev_path}") assert "1" == written_data[0]["data"] assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") assert "0" == written_data[1]["data"] @@ -312,6 +330,60 @@ def mock_write_file(file_name, content_towrite): assert dpuctl_obj.dpu_reboot(False) mock_reset_force.assert_not_called() mock_reset.assert_called_once() + written_data = [] + mock_inotify.reset_mock() + mock_add_watch.reset_mock() + mock_inotify.return_value = None + mock_add_watch.return_value = True + with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ + patch.object(dpuctl_obj, 'read_boot_prog', MagicMock(return_value=BootProgEnum.OS_RUN.value)), \ + patch.object(dpuctl_obj, 'dpu_rshim_service_control') as mock_rshim: + assert dpuctl_obj.dpu_reboot(forced=False, no_wait=True) + # Rshim service is only stopped and not started + mock_rshim.assert_called_once() + mock_rshim.call_args.args[0] == "stop" + assert written_data[0]["file"].endswith(f"{pci_dev_path}") + assert "1" == written_data[0]["data"] + assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") + assert "0" == written_data[1]["data"] + assert written_data[2]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") + assert "1" == written_data[2]["data"] + mock_inotify.called_once() + mock_add_watch.called_once() + written_data = [] + mock_inotify.reset_mock() + mock_add_watch.reset_mock() + mock_inotify.return_value = None + mock_add_watch.return_value = True + with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ + patch.object(dpuctl_obj, 'read_boot_prog', MagicMock(return_value=BootProgEnum.OS_START.value)), \ + patch.object(dpuctl_obj, 'dpu_rshim_service_control') as mock_rshim: + assert dpuctl_obj.dpu_reboot(forced=False, no_wait=True) + mock_rshim.assert_called_once() + mock_rshim.call_args.args[0] == "stop" + assert written_data[0]["file"].endswith(f"{pci_dev_path}") + assert "1" == written_data[0]["data"] + assert written_data[1]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") + assert "0" == written_data[1]["data"] + assert written_data[2]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_pwr_force") + assert "0" == written_data[2]["data"] + assert written_data[3]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_pwr_force") + assert "1" == written_data[3]["data"] + assert written_data[4]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") + assert "1" == written_data[4]["data"] + mock_inotify.called_once() + mock_add_watch.called_once() + # Skip pre startup and post shutdown + written_data = [] + with patch.object(dpuctl_obj, 'write_file', wraps=mock_write_file), \ + patch.object(dpuctl_obj, 'read_boot_prog', MagicMock(return_value=BootProgEnum.OS_START.value)), \ + patch.object(dpuctl_obj, 'dpu_rshim_service_control') as mock_rshim: + assert dpuctl_obj.dpu_reboot(skip_pre_post=True) + mock_rshim.assert_not_called() + # We skip writing PCI data + assert written_data[0]["file"].endswith(f"{dpuctl_obj.get_hwmgmt_name()}_rst") + assert "0" == written_data[0]["data"] + assert not written_data[-1]["file"].endswith("rescan") def test_prog_update(self): dpuctl_obj = obj["dpuctl_list"][0] @@ -392,7 +464,8 @@ def mock_time_diff(): with patch("time.time", wraps=mock_time_diff): # PCI Device is not recognized assert not dpuctl_obj.wait_for_pci() - assert f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}" in mock_exists.call_args.args[0] + pci_parent_path = os.path.dirname(pci_dev_path) + assert pci_parent_path == mock_exists.call_args.args[0] mock_obj.register.assert_called_once() mock_obj.poll.assert_called_once() # PCI device is recognized immediately @@ -400,7 +473,7 @@ def mock_time_diff(): mock_exists.reset_mock() mock_exists.return_value = True assert dpuctl_obj.wait_for_pci() - assert f"{dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('pci_id')}" in mock_exists.call_args.args[0] + assert pci_parent_path == mock_exists.call_args.args[0] mock_obj.register.assert_not_called() mock_obj.poll.assert_not_called() # PCI device is added later (Detected in Loop) @@ -420,9 +493,22 @@ def mock_time_diff(): assert dpuctl_obj.wait_for_pci() mock_obj.register.assert_called_once() mock_obj.poll.assert_not_called() - with patch.object(dpuctl_obj, '_name', "dpua"), patch.object(dpuctl_obj, 'log_error') as mock_obj: + with patch.object(dpuctl_obj, 'pci_dev_path', None), \ + patch('sonic_platform.device_data.DeviceDataManager.get_dpu_interface') as mock_int,\ + patch.object(dpuctl_obj, 'log_error') as mock_obj: + mock_int.return_value = None + dpuctl_obj.wait_for_pci() + mock_obj.assert_called_once_with("Unable to wait for PCI device:Unable to obtain pci device id for dpu0 from platform.json") + new_pci_dev_id = "0000:05:00.0" + mock_int.return_value = new_pci_dev_id + dpuctl_obj.wait_for_pci() + assert dpuctl_obj.pci_dev_path.endswith(f"{new_pci_dev_id}/remove") + # pci dev_path is cached + mock_int.reset_mock() + mock_int.return_value = "None" dpuctl_obj.wait_for_pci() - mock_obj.assert_called_once_with("Unable to wait for PCI device") + mock_int.assert_not_called() + assert dpuctl_obj.pci_dev_path.endswith(f"{new_pci_dev_id}/remove") def test_rshim_service(self): dpuctl_obj = obj["dpuctl_list"][0] @@ -430,16 +516,32 @@ def test_rshim_service(self): dpuctl_obj.dpu_rshim_service_control('start') mock_method.assert_called_once() cmd_string = ' '.join(mock_method.call_args.args[0]) - cmd_string == f"systemctl start {dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('rshim')}.service" + service_name = rshim_interface + operation = "Start" + assert (operation in cmd_string) and (service_name in cmd_string) mock_method.reset_mock() + operation = "Stop" dpuctl_obj.dpu_rshim_service_control('stop') - cmd_string == f"systemctl stop {dpu_map.get(dpuctl_obj.get_hwmgmt_name()).get('rshim')}.service" + cmd_string = ' '.join(mock_method.call_args.args[0]) + assert (operation in cmd_string) and (service_name in cmd_string) mock_method.assert_called_once() with pytest.raises(TypeError): dpuctl_obj.dpu_rshim_service_control() - with patch.object(dpuctl_obj, 'get_hwmgmt_name', return_value="dpu5"), patch.object(dpuctl_obj, 'log_error') as mock_obj: + with patch.object(dpuctl_obj, 'rshim_interface', None), \ + patch('sonic_platform.device_data.DeviceDataManager.get_dpu_interface') as mock_int,\ + patch.object(dpuctl_obj, 'log_error') as mock_obj: + mock_int.return_value = None + dpuctl_obj.dpu_rshim_service_control('start') + mock_obj.assert_called_once_with("Failed to start rshim!: Unable to Parse rshim information for dpu0 from Platform.json") + mock_int.return_value = "rshim1" + dpuctl_obj.dpu_rshim_service_control('start') + assert dpuctl_obj.rshim_interface == "rshim@1" + mock_int.reset_mock() + mock_int.return_value = "rshim20" dpuctl_obj.dpu_rshim_service_control('start') - mock_obj.assert_called_once_with("Failed to start rshim!") + # Rshim name is cached + mock_int.assert_not_called() + assert dpuctl_obj.rshim_interface == "rshim@1" def test_pre_and_post(self): dpuctl_obj = obj["dpuctl_list"][0] @@ -447,12 +549,17 @@ def test_pre_and_post(self): manager_mock = Mock() manager_mock.attach_mock(mock_rshim, 'rshim') manager_mock.attach_mock(mock_write, 'write') - dpuctl_obj.dpu_pre_shutdown() + mock_rshim.return_value = True + mock_write.return_value = True + assert dpuctl_obj.dpu_pre_shutdown() mock_rshim.assert_called_once() mock_write.assert_called_once() # Confirm the order of calls and the parameters manager_mock.mock_calls[0] == call.rshim('stop') manager_mock.mock_calls[1] == call.rshim(dpuctl_obj.pci_dev_path, '1') + mock_rshim.return_value = False + assert not dpuctl_obj.dpu_pre_shutdown() + mock_rshim.return_value = True # Test post startup mock_rshim.reset_mock() mock_write.reset_mock() @@ -469,6 +576,22 @@ def test_pre_and_post(self): manager_mock.mock_calls[0] == call.rshim('/sys/bus/pci/rescan', '1') manager_mock.mock_calls[1] == call.pci() manager_mock.mock_calls[2] == call.rshim('start') + mock_rshim.return_value = False + assert not dpuctl_obj.dpu_post_startup() + with patch.object(dpuctl_obj, 'write_file', side_effect=Exception("Mock")), \ + patch.object(dpuctl_obj, 'run_cmd_output', MagicMock(return_value=True)): + assert not dpuctl_obj.dpu_pre_shutdown() + with patch.object(dpuctl_obj, 'run_cmd_output', side_effect=Exception("Mock")), \ + patch.object(dpuctl_obj, 'dpu_pci_remove', MagicMock(return_value=True)): + assert not dpuctl_obj.dpu_pre_shutdown() + with patch.object(dpuctl_obj, 'write_file', side_effect=Exception("Mock")), \ + patch.object(dpuctl_obj, 'wait_for_pci', MagicMock(return_value=True)), \ + patch.object(dpuctl_obj, 'run_cmd_output', MagicMock(return_value=True)): + assert not dpuctl_obj.dpu_post_startup() + with patch.object(dpuctl_obj, 'run_cmd_output', side_effect=Exception("Mock")), \ + patch.object(dpuctl_obj, 'wait_for_pci', MagicMock(return_value=True)), \ + patch.object(dpuctl_obj, 'dpu_pci_scan', MagicMock(return_value=True)): + assert not dpuctl_obj.dpu_post_startup() @classmethod def teardown_class(cls): diff --git a/platform/mellanox/mlnx-platform-api/tests/test_module.py b/platform/mellanox/mlnx-platform-api/tests/test_module.py index 4cba90ac95f4..f80eb602053a 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_module.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_module.py @@ -1,6 +1,7 @@ # -# Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. -# Apache-2.0 +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,6 +18,10 @@ import os import sys +import pytest +import sonic_platform.utils +import subprocess +from mock import patch if sys.version_info.major == 3: from unittest import mock else: @@ -28,9 +33,12 @@ import sonic_platform.chassis from sonic_platform import utils -from sonic_platform.chassis import ModularChassis +from sonic_platform.chassis import ModularChassis, SmartSwitchChassis from sonic_platform.device_data import DeviceDataManager from sonic_platform.module import Module +from sonic_platform_base.module_base import ModuleBase +from sonic_platform_base.chassis_base import ChassisBase + class TestModule: @@ -39,6 +47,7 @@ def setup_class(cls): DeviceDataManager.get_linecard_sfp_count = mock.MagicMock(return_value=2) DeviceDataManager.get_linecard_count = mock.MagicMock(return_value=2) sonic_platform.chassis.extract_RJ45_ports_index = mock.MagicMock(return_value=[]) + DeviceDataManager.get_dpu_count = mock.MagicMock(return_value=4) def test_chassis_get_num_sfp(self): chassis = ModularChassis() @@ -49,6 +58,12 @@ def test_chassis_get_all_sfps(self): chassis = ModularChassis() assert len(chassis.get_all_sfps()) == 4 + @patch('sonic_platform.module.SonicV2Connector', mock.MagicMock()) + @patch('sonic_platform.module.ConfigDBConnector', mock.MagicMock()) + def test_chassis_get_num_modules(self): + chassis = SmartSwitchChassis() + assert chassis.get_num_modules() == 4 + @mock.patch('sonic_platform.device_data.DeviceDataManager.get_linecard_max_port_count', mock.MagicMock(return_value=16)) def test_chassis_get_sfp(self): utils.read_int_from_file = mock.MagicMock(return_value=1) @@ -167,6 +182,8 @@ def test_check_state(self): assert len(m._sfp_list) == 0 assert len(m._thermal_list) == 0 + @patch('sonic_platform.module.SonicV2Connector', mock.MagicMock()) + @patch('sonic_platform.module.ConfigDBConnector', mock.MagicMock()) def test_module_vpd(self): m = Module(1) m.vpd_parser.vpd_file = os.path.join(test_path, 'mock_psu_vpd') @@ -185,3 +202,215 @@ def test_module_vpd(self): assert m.get_model() == 'MTEF-PSF-AC-C' assert m.get_serial() == 'MT1946X07684' assert m.get_revision() == 'A3' + + from sonic_platform.module import DpuModule + dm = DpuModule(2) + dm.dpu_vpd_parser.vpd_file_last_mtime = None + dm.dpu_vpd_parser.vpd_file = os.path.join(test_path, 'mock_psu_vpd_dpu') + # dpu2 in pmon = DPU3 in eeprom (1 based indexing is used in HW) + dpu_data = { + "DPU3_SN": "MT4431X26022", + "DPU3_PN": "SN4280BF3DPU2", + "DPU3_REV": "A0", + "DPU3_BASE_MAC": "90:0A:84:C6:00:B1" + } + dm.dpu_vpd_parser.vpd_data = dpu_data + with patch.object(dm.dpu_vpd_parser, '_get_data', wraps=mock.MagicMock(return_value=True)): + assert dm.get_base_mac() == "90:0A:84:C6:00:B1" + assert dm.get_model() == "SN4280BF3DPU2" + assert dm.get_serial() == "MT4431X26022" + assert dm.get_revision() == "A0" + + dm.dpu_vpd_parser = None + with pytest.raises(AttributeError): + dm.get_base_mac() + dm.get_model() + dm.get_serial() + dm.get_revision() + + dm = DpuModule(3) + # DPU4 is not present in the VPD Parser output + dm.dpu_vpd_parser.vpd_data = dpu_data + assert dm.get_base_mac() == "N/A" + assert dm.get_model() == "N/A" + assert dm.get_serial() == "N/A" + assert dm.get_revision() == "N/A" + + @patch('sonic_platform.module.SonicV2Connector', mock.MagicMock()) + @patch('swsscommon.swsscommon.ConfigDBConnector.connect', mock.MagicMock()) + @mock.patch('swsscommon.swsscommon.ConfigDBConnector.get') + @mock.patch('subprocess.call') + def test_dpu_module(self, mock_call, mock_get): + from sonic_platform.module import DpuModule + m = DpuModule(3) + assert m.get_type() == ModuleBase.MODULE_TYPE_DPU + assert m.get_name() == "DPU3" + assert m.get_description() == "NVIDIA BlueField-3 DPU" + assert m.get_dpu_id() == 3 + with patch.object(m.dpuctl_obj, "dpu_reboot") as mock_obj: + mock_obj.return_value = True + assert m.reboot() is True + mock_obj.assert_called_once_with(skip_pre_post=True) + mock_obj.reset_mock() + m.reboot(reboot_type=ModuleBase.MODULE_REBOOT_SMARTSWITCH) + mock_obj.assert_called_once_with(no_wait=True, skip_pre_post=True) + with pytest.raises(RuntimeError): + m.reboot("None") + with patch('sonic_py_common.syslogger.SysLogger.log_error') as mock_method: + m.dpuctl_obj.dpu_power_on = mock.MagicMock(return_value=True) + assert m.set_admin_state(True) + mock_method.assert_not_called() + m.dpuctl_obj.dpu_power_on = mock.MagicMock(return_value=False) + assert not m.set_admin_state(True) + mock_method.assert_called_once_with("Failed to set the admin state for DPU3") + m.dpuctl_obj.dpu_power_off = mock.MagicMock(return_value=True) + assert m.set_admin_state(False) + midplane_ips = { + "dpu0": "169.254.200.1", + "dpu1": "169.254.200.2", + "dpu2": "169.254.200.3", + "dpu3": "169.254.200.4" + } + def get_midplane_ip(DB_NAME, _hash, key): + dpu_name = _hash.split("|")[-1] + return midplane_ips.get(dpu_name) + mock_get.side_effect = get_midplane_ip + assert m.get_midplane_ip() == "169.254.200.4" + assert m.midplane_ip == "169.254.200.4" + mock_get.assert_called_with('CONFIG_DB', 'DHCP_SERVER_IPV4_PORT|bridge-midplane|dpu3', 'ips@') + m1 = DpuModule(2) + assert m1.get_midplane_ip() == "169.254.200.3" + assert m1.midplane_ip == "169.254.200.3" + mock_get.assert_called_with('CONFIG_DB', 'DHCP_SERVER_IPV4_PORT|bridge-midplane|dpu2', 'ips@') + mock_get.reset_mock() + mock_get.return_value = None + mock_get.side_effect = None + # We check for the IP only once in CONFIG_DB after initialization + assert m.get_midplane_ip() == "169.254.200.4" + mock_get.assert_not_called() + m.midplane_ip = None + m1.midplane_ip = None + assert not m.get_midplane_ip() + assert not m1.get_midplane_ip() + mock_get.side_effect = get_midplane_ip + with patch.object(m, '_is_midplane_up', ) as mock_midplane_m, \ + patch.object(m1, '_is_midplane_up',) as mock_midplane_m1: + mock_midplane_m.return_value = True + mock_midplane_m1.return_value = True + m.midplane_ip = None + midplane_ips["dpu3"] = "169.254.200.244" + command = ['ping', '-c', '1', '-W', '1', "169.254.200.244"] + mock_call.return_value = 0 + assert m.is_midplane_reachable() + mock_call.assert_called_with(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + mock_call.return_value = 1 + assert not m.is_midplane_reachable() + mock_call.assert_called_with(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + mock_call.side_effect = subprocess.CalledProcessError(1, command) + assert not m.is_midplane_reachable() + assert not m1.is_midplane_reachable() + mock_call.reset_mock() + mock_call.side_effect = None + mock_midplane_m.return_value = False + mock_midplane_m1.return_value = False + assert not m.is_midplane_reachable() + assert not m1.is_midplane_reachable() + mock_call.assert_not_called() + + m.fault_state = False + test_file_path = "" + pl_data = { + "dpu0": { + "interface": {"Ethernet224": "Ethernet0"}, + "midplane_interface": "dpu0_mid", + "bus_info": "0000:08:0.0" + }, + "dpu1": { + "interface": {"Ethernet232": "Ethernet1"}, + "midplane_interface": "dpu1_mid", + "bus_info": "0000:08:0.0" + }, + "dpu2": { + "interface": {"Ethernet236": "Ethernet2"}, + "midplane_interface": "dpu2_mid", + "bus_info": "0000:08:0.0" + }, + } + DeviceDataManager.get_platform_dpus_data = mock.MagicMock(return_value=pl_data) + + def mock_read_int_from_file(file_path, default=0, raise_exception=False, log_func=None): + if file_path.endswith(test_file_path): + return 1 + else: + return 0 + file_name_list = ['reset_aux_pwr_or_reload', 'reset_comex_pwr_fail', 'reset_from_main_board', 'reset_dpu_thermal', 'None'] + reboot_cause_list = [ + (ChassisBase.REBOOT_CAUSE_POWER_LOSS, 'power auxiliary outage or reload'), + (ChassisBase.REBOOT_CAUSE_POWER_LOSS, 'Power failed to comex module'), + (ChassisBase.REBOOT_CAUSE_NON_HARDWARE, 'Reset from Main board'), + (ChassisBase.REBOOT_CAUSE_THERMAL_OVERLOAD_OTHER, 'Thermal shutdown of the DPU'), + (ChassisBase.REBOOT_CAUSE_NON_HARDWARE, ''), + ] + with patch("sonic_platform.utils.read_int_from_file", wraps=mock_read_int_from_file): + for index, file_name in enumerate(file_name_list): + test_file_path = file_name + assert m.get_reboot_cause() == reboot_cause_list[index] + m1 = DpuModule(0) + m2 = DpuModule(1) + m3 = DpuModule(2) + m4 = DpuModule(3) + # DPU0 in PMON = dpu1 in hw-mgmt + m1.get_hw_mgmt_id() == 1 + m2.get_hw_mgmt_id() == 2 + m3.get_hw_mgmt_id() == 3 + m4.get_hw_mgmt_id() == 4 + assert not m1.midplane_interface + with patch("sonic_platform.utils.read_int_from_file", wraps=mock.MagicMock(return_value=1)): + assert m1._is_midplane_up() + assert m2._is_midplane_up() + assert m3._is_midplane_up() + assert m1.get_pci_bus_info() == pl_data["dpu0"]['bus_info'] + assert m2.get_pci_bus_info() == pl_data["dpu1"]['bus_info'] + assert m3.get_pci_bus_info() == pl_data["dpu2"]['bus_info'] + with pytest.raises(RuntimeError): + m4._is_midplane_up() + m4.get_pci_bus_info() + assert m1.midplane_interface == "dpu0_mid" + assert m2.midplane_interface == "dpu1_mid" + assert m3.midplane_interface == "dpu2_mid" + with patch("sonic_platform.utils.read_str_from_file", wraps=mock.MagicMock(return_value=0)): + assert not m1._is_midplane_up() + assert not m2._is_midplane_up() + assert not m3._is_midplane_up() + + with patch.object(m1.dpuctl_obj, "read_boot_prog") as mock_obj: + mock_obj.return_value = 5 + m1.get_oper_status() == ModuleBase.MODULE_STATUS_ONLINE + mock_obj.return_value = 0 + m1.get_oper_status() == ModuleBase.MODULE_STATUS_OFFLINE + mock_obj.return_value = 2 + m1.get_oper_status() == ModuleBase.MODULE_STATUS_OFFLINE + mock_obj.return_value = 4 + m1.get_oper_status() == ModuleBase.MODULE_STATUS_OFFLINE + + temp_data = { + f"TEMPERATURE_INFO_{m.get_dpu_id()}|DDR": {"temperature": "45.0", "high_threshold":"90", "critical_high_threshold": "100"}, + f"TEMPERATURE_INFO_{m.get_dpu_id()}|NVME": {"temperature": "100.0", "high_threshold":"85", "critical_high_threshold": "110"}, + f"TEMPERATURE_INFO_{m.get_dpu_id()}|CPU": {"temperature": "75.0", "high_threshold":"80", "critical_high_threshold": "95"} + } + def new_get_all(db_name, table_name): + return temp_data[table_name] + + with patch.object(m.chassis_state_db, 'get_all', wraps=new_get_all): + output_dict = m.get_temperature_dict() + assert output_dict['DDR'] == temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|DDR"] + assert output_dict['CPU'] == temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|CPU"] + assert output_dict['NVME'] == temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|NVME"] + temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|CPU"] = {} + output_dict = m.get_temperature_dict() + assert output_dict['DDR'] == temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|DDR"] + assert output_dict['CPU'] == {} + assert output_dict['NVME'] == temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|NVME"] + del temp_data[f"TEMPERATURE_INFO_{m.get_dpu_id()}|CPU"] + assert m.get_temperature_dict() == {} + diff --git a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py index 092179f03fff..fecfadc1d93c 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_sfp.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_sfp.py @@ -1,5 +1,6 @@ # -# Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2019-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -59,6 +60,7 @@ def test_sfp_index(self, mock_max_port): @mock.patch('sonic_platform.sfp.SFP._get_module_info') @mock.patch('sonic_platform.chassis.Chassis.get_num_sfps', mock.MagicMock(return_value=2)) @mock.patch('sonic_platform.chassis.extract_RJ45_ports_index', mock.MagicMock(return_value=[])) + @mock.patch('sonic_platform.sfp.SFP.get_xcvr_api', mock.MagicMock(return_value=None)) def test_sfp_get_error_status(self, mock_get_error_code, mock_control): sfp = SFP(1) mock_control.return_value = False @@ -87,7 +89,7 @@ def test_sfp_get_error_status(self, mock_get_error_code, mock_control): mock_control.return_value = True description = sfp.get_error_description() - assert description == 'Not supported' + assert description == None mock_control.side_effect = RuntimeError('') description = sfp.get_error_description() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_smartswsitch_thermal_updater.py b/platform/mellanox/mlnx-platform-api/tests/test_smartswsitch_thermal_updater.py new file mode 100644 index 000000000000..ce87afa6dddb --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/tests/test_smartswsitch_thermal_updater.py @@ -0,0 +1,220 @@ +# +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from unittest import mock +import copy + +from sonic_platform.thermal_updater import hw_management_independent_mode_update +from sonic_platform.smartswitch_thermal_updater import SmartswitchThermalUpdater, hw_management_dpu_thermal_update +from sonic_platform.thermal_updater import ERROR_READ_THERMAL_DATA + + +mock_tc_config = """ +{ + "dev_parameters": { + "asic": { + "pwm_min": 20, + "pwm_max": 100, + "val_min": "!70000", + "val_max": "!105000", + "poll_time": 3 + }, + "module\\\\d+": { + "pwm_min": 20, + "pwm_max": 100, + "val_min": 60000, + "val_max": 80000, + "poll_time": 20 + }, + "dpu\\\\d+_module": { + "child_sensors_list": ["cx_amb", "voltmon1", "voltmon2"], + "poll_time": 24 + } + } +} +""" + + +class TestSmartSwitchThermalUpdater: + @mock.patch('sonic_platform.utils.write_file') + def test_configuration(self, mock_write): + dpu = mock.MagicMock() + mock_sfp = mock.MagicMock() + mock_sfp.sdk_index = 1 + self.reset_hw_mgmt_mocks() + mock_os_open = mock.mock_open(read_data=mock_tc_config) + updater = SmartswitchThermalUpdater([mock_sfp], dpu_list=[dpu]) + """ Expectation on start - Clean is called for sfp, asic, DPU + suspend -> 1 and load config for all 3 along with start of timer""" + updater._timer = mock.MagicMock() + mock_os_open = mock.mock_open(read_data=mock_tc_config) + with mock.patch('sonic_platform.utils.open', mock_os_open): + updater.start() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_independent_mode_update.thermal_data_clean_asic.assert_called_once() + hw_management_independent_mode_update.thermal_data_clean_module.assert_called_once() + mock_write.assert_called_once_with('/run/hw-management/config/suspend', 0) + assert updater._timer.schedule.call_count == 3 + # Called for DPU with time 24/2 = 12 + assert updater._timer.schedule.call_args_list[0][0][0] == 12 + # Expectation on stop - timer stop and suspend = 1 + mock_write.reset_mock() + updater.stop() + updater._timer.stop.assert_called_once() + mock_write.assert_called_once_with('/run/hw-management/config/suspend', 1) + mock_write.reset_mock() + self.reset_hw_mgmt_mocks() + updater = SmartswitchThermalUpdater(None, dpu_list=[dpu], is_host_mgmt_mode=False) + """ Expectation on start - Clean is called for DPU + load config for DPU along with start of timer""" + updater._timer = mock.MagicMock() + updater.start() + mock_write.assert_not_called() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear.assert_called_once_with(dpu.get_hw_mgmt_id()) + hw_management_independent_mode_update.thermal_data_clean_asic.assert_not_called() + hw_management_independent_mode_update.thermal_data_clean_module.assert_not_called() + # Expectation on stop - timer stop + updater.stop() + updater._timer.stop.assert_called_once() + mock_write.assert_not_called() + + def test_update_dpu(self): + self.reset_hw_mgmt_mocks() + mock_dpu = mock.MagicMock() + mock_dpu.get_hw_mgmt_id = mock.MagicMock(return_value=1) + mock_dpu.get_name = mock.MagicMock(return_value="DPU0") + mock_dpu.get_oper_status = mock.MagicMock(return_value="Online") + temp_data = { + "DDR": {'temperature': '75.0', 'high_threshold': '95', 'critical_high_threshold': '100'}, + "CPU": {'temperature': '82.0', 'high_threshold': '90', 'critical_high_threshold': '100'}, + "NVME": {'temperature': '91', 'high_threshold': '95', 'critical_high_threshold': '98'} + } + mock_dpu.get_temperature_dict = mock.MagicMock(return_value=temp_data) + print(f"{mock_dpu.get_temperature_dict()}") + updater = SmartswitchThermalUpdater(sfp_list=None, dpu_list=[mock_dpu], is_host_mgmt_mode=False) + updater.update_dpu() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.assert_called_once_with(1, 75, 95, 100, 0) + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.assert_called_once_with(1, 82, 90, 100, 0) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.assert_called_once_with(1, 91, 95, 98, 0) + mock_dpu.get_temperature_dict = mock.MagicMock(return_value={}) + self.reset_hw_mgmt_mocks() + updater.update_dpu() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.assert_called_once_with(1, 0, 0, 0, ERROR_READ_THERMAL_DATA) + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.assert_called_once_with(1, 0, 0, 0, ERROR_READ_THERMAL_DATA) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.assert_called_once_with(1, 0, 0, 0, ERROR_READ_THERMAL_DATA) + func_dict = { + "DDR": hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set, + "CPU": hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set, + "NVME": hw_management_dpu_thermal_update.thermal_data_dpu_drive_set, + } + for value in ["DDR", "CPU", "NVME"]: + temp_data_without_entry = copy.deepcopy(temp_data) + # One of the values in DDR, CPU and NVME is set to empty + temp_data_without_entry[value] = {} + mock_dpu.get_temperature_dict = mock.MagicMock(return_value=temp_data_without_entry) + self.reset_hw_mgmt_mocks() + updater.update_dpu() + for key, func in func_dict.items(): + if key == value: + func.assert_called_once_with(1, 0, 0, 0, ERROR_READ_THERMAL_DATA) + else: + func.assert_called_once_with( + 1, + int(float(temp_data[key]['temperature'])), + int(float(temp_data[key]['high_threshold'])), + int(float(temp_data[key]['critical_high_threshold'])), + 0) + # One of the values in DDR, CPU and NVME is set to a string, can not convert to integer + for field in ["temperature", "high_threshold", "critical_high_threshold"]: + temp_data_invalid = copy.deepcopy(temp_data) + temp_data_orig = copy.deepcopy(temp_data) + temp_data_invalid[value][field] = "N/A" + mock_dpu.get_temperature_dict = mock.MagicMock(return_value=temp_data_invalid) + self.reset_hw_mgmt_mocks() + updater.update_dpu() + for key, func in func_dict.items(): + temp_data_orig[value][field] = 0 + func.assert_called_once_with( + 1, + int(float(temp_data_orig[key]['temperature'])), + int(float(temp_data_orig[key]['high_threshold'])), + int(float(temp_data_orig[key]['critical_high_threshold'])), + ERROR_READ_THERMAL_DATA if value == key else 0) + self.reset_hw_mgmt_mocks() + mock_dpu.get_oper_status = mock.MagicMock(return_value="Offline") + updater.update_dpu() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear.assert_called_once_with(1) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear.assert_called_once_with(1) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear.assert_called_once_with(1) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.assert_not_called() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.assert_not_called() + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.assert_not_called() + # Clear is called only once + updater.update_dpu() + updater.update_dpu() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear.assert_called_once_with(1) + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_clear.assert_called_once_with(1) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear.assert_called_once_with(1) + self.reset_hw_mgmt_mocks() + mock_dpu.get_oper_status = mock.MagicMock(return_value="Online") + mock_dpu.get_temperature_dict = mock.MagicMock(return_value=temp_data) + updater.update_dpu() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.assert_called_once_with(1, 75, 95, 100, 0) + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.assert_called_once_with(1, 82, 90, 100, 0) + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.assert_called_once_with(1, 91, 95, 98, 0) + # Multiple dpus + mock_dpu1 = mock.MagicMock() + mock_dpu1.get_hw_mgmt_id = mock.MagicMock(return_value=2) + mock_dpu1.get_name = mock.MagicMock(return_value="DPU1") + mock_dpu1.get_oper_status = mock.MagicMock(return_value="Online") + temp_data_1 = copy.deepcopy(temp_data) + temp_data_1["DDR"]["temperature"] = "52.0" + temp_data_1["CPU"]["temperature"] = "20.0" + temp_data_1["NVME"]["temperature"] = "100.0" + mock_dpu1.get_temperature_dict = mock.MagicMock(return_value=temp_data_1) + updater = SmartswitchThermalUpdater(sfp_list=None, dpu_list=[mock_dpu, mock_dpu1], is_host_mgmt_mode=False) + self.reset_hw_mgmt_mocks() + updater.update_dpu() + assert hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.call_count == 2 + assert hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.call_count == 2 + assert hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.call_count == 2 + assert hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.call_args_list \ + == [mock.call(1, 75, 95, 100, 0), mock.call(2, 52, 95, 100, 0)] + assert hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.call_args_list \ + == [mock.call(1, 82, 90, 100, 0), mock.call(2, 20, 90, 100, 0)] + assert hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.call_args_list \ + == [mock.call(1, 91, 95, 98, 0), mock.call(2, 100, 95, 98, 0)] + + def reset_hw_mgmt_mocks(self): + hw_management_independent_mode_update.reset_mock() + hw_management_independent_mode_update.thermal_data_clean_module.reset_mock() + hw_management_independent_mode_update.thermal_data_clean_asic.reset_mock() + hw_management_independent_mode_update.module_data_set_module_counter.reset_mock() + hw_management_independent_mode_update.thermal_data_set_asic.reset_mock() + hw_management_independent_mode_update.thermal_data_set_module.reset_mock() + hw_management_dpu_thermal_update.reset_mock() + hw_management_dpu_thermal_update.thermal_data_clean_module.reset_mock() + hw_management_dpu_thermal_update.thermal_data_dpu_drive_clear.reset_mock() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_clear.reset_mock() + hw_management_dpu_thermal_update.thermal_data_dpu_ddr_set.reset_mock() + hw_management_dpu_thermal_update.thermal_data_dpu_cpu_core_set.reset_mock() + hw_management_dpu_thermal_update.thermal_data_dpu_drive_set.reset_mock() diff --git a/platform/mellanox/mlnx-platform-api/tests/test_thermal_manager.py b/platform/mellanox/mlnx-platform-api/tests/test_thermal_manager.py new file mode 100644 index 000000000000..2f39b1cd1a8b --- /dev/null +++ b/platform/mellanox/mlnx-platform-api/tests/test_thermal_manager.py @@ -0,0 +1,67 @@ +# +# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from unittest import mock +from sonic_platform.thermal_manager import ThermalManager + + +class TestThermalManager: + + @mock.patch('sonic_platform.chassis.Chassis.chassis_instance', new_callable=mock.MagicMock) + @mock.patch('sonic_platform.device_data.DeviceDataManager.is_module_host_management_mode') + @mock.patch('sonic_platform.device_data.DeviceDataManager.get_platform_dpus_data') + def test_updater_init(self, mock_dpus_data, mock_management_mode, mock_chassis_instance): + mock_dpus_data.return_value = {} + mock_management_mode.return_value = True + sfp_mock = mock.MagicMock() + mod_mock = mock.MagicMock() + mock_chassis_instance.get_all_sfps = sfp_mock + mock_chassis_instance.get_all_modules = mod_mock + sfp_mock.return_value = ['sfp1', 'sfp2'] + mod_mock.return_value = ['dpu1', 'dpu2'] + + with mock.patch('sonic_platform.thermal_updater.ThermalUpdater') as mock_thermal, \ + mock.patch('sonic_platform.smartswitch_thermal_updater.SmartswitchThermalUpdater') as mock_sm_thermal: + # Host mgmt mode, no DPUs are used for init + mgr = ThermalManager() + mgr.initialize() + mock_thermal.assert_called_once_with(sfp_list=['sfp1', 'sfp2']) + mgr.deinitialize() + mgr.thermal_updater_task.stop.assert_called_once() + # Not initialized if no DPUs and not in host mgmt mode + mock_management_mode.return_value = False + mock_thermal.reset_mock() + mgr.initialize() + mock_thermal.assert_not_called() + mgr.deinitialize() + mgr.thermal_updater_task.stop.assert_called_once() + # Initialized with DPUs if DPUs are present + mock_dpus_data.return_value = {'DPUS': 'dpu1'} + mock_thermal.reset_mock() + mgr.initialize() + mock_sm_thermal.assert_called_once_with(sfp_list=['sfp1', 'sfp2'], dpu_list=['dpu1', 'dpu2'], is_host_mgmt_mode=False) + mgr.deinitialize() + mgr.thermal_updater_task.stop.assert_called_once() + # Host mgmt mode, with DPUS + mock_thermal.reset_mock() + mock_sm_thermal.reset_mock() + mock_management_mode.return_value = True + mgr.initialize() + mock_sm_thermal.assert_called_once_with(sfp_list=['sfp1', 'sfp2'], dpu_list=['dpu1', 'dpu2'], is_host_mgmt_mode=True) + mgr.deinitialize() + mgr.thermal_updater_task.stop.assert_called_once() diff --git a/platform/mellanox/mlnx-sai.mk b/platform/mellanox/mlnx-sai.mk index 6e184f670328..92b6382312f7 100644 --- a/platform/mellanox/mlnx-sai.mk +++ b/platform/mellanox/mlnx-sai.mk @@ -1,6 +1,6 @@ # Mellanox SAI -MLNX_SAI_VERSION = SAIBuild2405.28.0.33 +MLNX_SAI_VERSION = SAIBuild2405.30.0.1 MLNX_SAI_ASSETS_GITHUB_URL = https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins MLNX_SAI_ASSETS_RELEASE_TAG = sai-$(MLNX_SAI_VERSION)-$(BLDENV)-$(CONFIGURED_ARCH) MLNX_SAI_ASSETS_URL = $(MLNX_SAI_ASSETS_GITHUB_URL)/releases/download/$(MLNX_SAI_ASSETS_RELEASE_TAG) diff --git a/platform/mellanox/rules.dep b/platform/mellanox/rules.dep index 725331b0f526..cffb61f0da1c 100644 --- a/platform/mellanox/rules.dep +++ b/platform/mellanox/rules.dep @@ -16,5 +16,4 @@ include $(PLATFORM_PATH)/issu-version.dep include $(PLATFORM_PATH)/mlnx-onie-fw-update.dep include $(PLATFORM_PATH)/mlnx-ssd-fw-update.dep include $(PLATFORM_PATH)/install-pending-fw.dep -include $(PLATFORM_PATH)/component-versions.dep include $(PLATFORM_PATH)/rshim.dep diff --git a/platform/mellanox/sdk-src/applibs/Makefile b/platform/mellanox/sdk-src/applibs/Makefile deleted file mode 100644 index 47e4f5388dbe..000000000000 --- a/platform/mellanox/sdk-src/applibs/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = applibs_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = applibs-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb applibs-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = applibs - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - sed -i "s/sx-libnl/$(LIBNL3)/g" ./debian/control - sed -i "s/-Werror//g" ./configure.in - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-acl-helper/Makefile b/platform/mellanox/sdk-src/sx-acl-helper/Makefile deleted file mode 100644 index 42109c74e0bb..000000000000 --- a/platform/mellanox/sdk-src/sx-acl-helper/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-acl-helper_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-acl-helper-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-acl-helper-dev-static_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-acl-helper-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_acl_helper - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-complib/Makefile b/platform/mellanox/sdk-src/sx-complib/Makefile deleted file mode 100644 index c717ffda93c0..000000000000 --- a/platform/mellanox/sdk-src/sx-complib/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-complib_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-complib-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-complib-dev-static_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-complib-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_complib - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-examples/Makefile b/platform/mellanox/sdk-src/sx-examples/Makefile deleted file mode 100644 index 2084e397f981..000000000000 --- a/platform/mellanox/sdk-src/sx-examples/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-examples_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-examples-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb sx-examples-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_examples - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-gen-utils/Makefile b/platform/mellanox/sdk-src/sx-gen-utils/Makefile deleted file mode 100644 index 66d2fb6b453e..000000000000 --- a/platform/mellanox/sdk-src/sx-gen-utils/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-gen-utils_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-gen-utils-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb sx-gen-utils-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_gen_utils - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-hash-calc/Makefile b/platform/mellanox/sdk-src/sx-hash-calc/Makefile deleted file mode 100644 index 927d4bc892a7..000000000000 --- a/platform/mellanox/sdk-src/sx-hash-calc/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-hash-calc_1.mlnx.$(MLNX_SDK_DEB_VERSION)_amd64.deb -DERIVED_TARGETS = sx-hash-calc-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_amd64.deb -PACKAGE_NAME = sx_hash_calc - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-obj-desc-lib/Makefile b/platform/mellanox/sdk-src/sx-obj-desc-lib/Makefile deleted file mode 100644 index 26d1f65ca720..000000000000 --- a/platform/mellanox/sdk-src/sx-obj-desc-lib/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-obj-desc-lib_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-obj-desc-lib-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-obj-desc-lib-dev-static_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-obj-desc-lib-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_obj_desc_lib - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sx-scew/Makefile b/platform/mellanox/sdk-src/sx-scew/Makefile deleted file mode 100644 index 8bb61fcda67c..000000000000 --- a/platform/mellanox/sdk-src/sx-scew/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sx-scew_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sx-scew-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-scew-dev-static_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sx-scew-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sx_scew - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sxd-libs/Makefile b/platform/mellanox/sdk-src/sxd-libs/Makefile deleted file mode 100644 index 0472056c9874..000000000000 --- a/platform/mellanox/sdk-src/sxd-libs/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.ONESHELL: -SHELL = /bin/bash - -MAIN_TARGET = sxd-libs_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = sxd-libs-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sxd-libs-dev-static_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb \ - sxd-libs-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -PACKAGE_NAME = sxd_libs - -$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # get sources - rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz - - # build - pushd $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) - - if [ -f autogen.sh ]; then - ./autogen.sh - fi - - debuild -e 'configure_options=--enable-sniffer=yes' -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) - - popd - - mv $(DERIVED_TARGETS) $* $(DEST)/ - -$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk-src/sys-sdk/Makefile b/platform/mellanox/sdk-src/sys-sdk/Makefile new file mode 100644 index 000000000000..0bd78f6901d8 --- /dev/null +++ b/platform/mellanox/sdk-src/sys-sdk/Makefile @@ -0,0 +1,30 @@ +.ONESHELL: +SHELL = /bin/bash + +MAIN_TARGET = sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb +DERIVED_TARGETS = sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH)-dev.deb sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH)-dbgsym.ddeb + +PACKAGE_NAME = sys_sdk + +$(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : + # get sources + rm -rf $(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION) + + @echo 'wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz' + + wget -c $(MLNX_SDK_SOURCE_BASE_URL)/$(PACKAGE_NAME)-$(MLNX_SDK_VERSION)-$(MLNX_SDK_ISSU_VERSION).tar.gz -O - | tar -xz + + # build + rm -rf builds/cmake + + cmake -B builds/cmake -DCMAKE_SYSTEM_VERSION=$(shell ls -t /lib/modules |head -1) -DPYTHON_INTERPRETERS=python3 -DSKIP_UNINSTALL_INSTALL_DEPENDENCY=on -DSKIP_DEPMOD_IN_INSTALL_PHASE=on -DUSE_API_TESTER=OFF -DUSE_KERNEL=OFF -DCMAKE_PROJECT_VERSION=$(MLNX_SDK_DEB_VERSION) + + cmake --build builds/cmake -j$(SONIC_CONFIG_MAKE_JOBS) + + cd builds/cmake + + cpack -G DEB + + mv $(DERIVED_TARGETS) $* $(DEST)/ + +$(addprefix $(DEST)/, $(DERIVED_TARGETS)): $(DEST)/% : $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/sdk.dep b/platform/mellanox/sdk.dep index 122548192c6c..97ad0b25acfa 100644 --- a/platform/mellanox/sdk.dep +++ b/platform/mellanox/sdk.dep @@ -10,204 +10,6 @@ # SONIC_OVERRIDE_BUILD_VARS. MLNX_SDK_COMMON_FLAGS_LIST = $(SONIC_COMMON_FLAGS_LIST) $(MLNX_SDK_DEB_VERSION) -# APPLIBS - -SPATH := $($(APPLIBS)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(APPLIBS)_CACHE_MODE := GIT_CONTENT_SHA -$(APPLIBS)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(APPLIBS)_DEP_FILES := $(DEP_FILES) - -$(APPLIBS_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(APPLIBS_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(APPLIBS_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(APPLIBS_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(APPLIBS_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(APPLIBS_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_COMPLIB - -SPATH := $($(SX_COMPLIB)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_COMPLIB)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_COMPLIB)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_COMPLIB)_DEP_FILES := $(DEP_FILES) - -$(SX_COMPLIB_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_COMPLIB_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_COMPLIB_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_COMPLIB_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_COMPLIB_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_COMPLIB_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_EXAMPLES - -SPATH := $($(SX_EXAMPLES)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_EXAMPLES)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_EXAMPLES)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_EXAMPLES)_DEP_FILES := $(DEP_FILES) - -$(SX_EXAMPLES_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_EXAMPLES_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_EXAMPLES_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_EXAMPLES_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_EXAMPLES_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_EXAMPLES_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_GEN_UTILS - -SPATH := $($(SX_GEN_UTILS)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_GEN_UTILS)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_GEN_UTILS)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_GEN_UTILS)_DEP_FILES := $(DEP_FILES) - -$(SX_GEN_UTILS_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_GEN_UTILS_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_GEN_UTILS_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_GEN_UTILS_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_GEN_UTILS_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_GEN_UTILS_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SXD_LIBS - -SPATH := $($(SXD_LIBS)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SXD_LIBS)_CACHE_MODE := GIT_CONTENT_SHA -$(SXD_LIBS)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SXD_LIBS)_DEP_FILES := $(DEP_FILES) - -$(SXD_LIBS_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(SXD_LIBS_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SXD_LIBS_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SXD_LIBS_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SXD_LIBS_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SXD_LIBS_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# PYTHON_SDK_API - -SPATH := $($(PYTHON_SDK_API)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(PYTHON_SDK_API)_CACHE_MODE := GIT_CONTENT_SHA -$(PYTHON_SDK_API)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(PYTHON_SDK_API)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(PYTHON_SDK_API_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(PYTHON_SDK_API_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(PYTHON_SDK_API_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_ACL_HELPER - -SPATH := $($(SX_ACL_HELPER)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_ACL_HELPER)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_ACL_HELPER)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_ACL_HELPER)_DEP_FILES := $(DEP_FILES) - -$(SX_ACL_HELPER_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_ACL_HELPER_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_ACL_HELPER_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_ACL_HELPER_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_ACL_HELPER_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_ACL_HELPER_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# WJH_LIBS - -SPATH := $($(WJH_LIBS)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(WJH_LIBS)_CACHE_MODE := GIT_CONTENT_SHA -$(WJH_LIBS)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(WJH_LIBS)_DEP_FILES := $(DEP_FILES) - -$(WJH_LIBS_DEV)_CACHE_MODE := GIT_CONTENT_SHA -$(WJH_LIBS_DEV)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(WJH_LIBS_DEV)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(WJH_LIBS_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(WJH_LIBS_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(WJH_LIBS_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_HASH_CALC - -SPATH := $($(SX_HASH_CALC)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_HASH_CALC)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_HASH_CALC)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_HASH_CALC)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_HASH_CALC_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_HASH_CALC_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_HASH_CALC_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - -# SX_OBJ_DESC_LIB - -SPATH := $($(SX_OBJ_DESC_LIB)_SRC_PATH) -DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/sdk.mk $(PLATFORM_PATH)/sdk.dep -DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) -DEP_FILES += $(shell git ls-files -- $(SPATH)) - -$(SX_OBJ_DESC_LIB)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_OBJ_DESC_LIB)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_OBJ_DESC_LIB)_DEP_FILES := $(DEP_FILES) - -ifeq ($(SDK_FROM_SRC),y) -$(SX_OBJ_DESC_LIB_DBGSYM)_CACHE_MODE := GIT_CONTENT_SHA -$(SX_OBJ_DESC_LIB_DBGSYM)_DEP_FLAGS := $(MLNX_SDK_COMMON_FLAGS_LIST) -$(SX_OBJ_DESC_LIB_DBGSYM)_DEP_FILES := $(DEP_FILES) -endif - # SX_KERNEL SPATH := $($(SX_KERNEL)_SRC_PATH) diff --git a/platform/mellanox/sdk.mk b/platform/mellanox/sdk.mk index 5346e8a44589..d7fc79a1c047 100644 --- a/platform/mellanox/sdk.mk +++ b/platform/mellanox/sdk.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2023 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # -MLNX_SDK_VERSION = 4.7.1150 +MLNX_SDK_VERSION = 4.7.2110 MLNX_SDK_ISSU_VERSION = 101 MLNX_SDK_DRIVERS_GITHUB_URL = https://github.com/Mellanox/Spectrum-SDK-Drivers @@ -34,123 +34,23 @@ endif export MLNX_SDK_SOURCE_BASE_URL MLNX_SDK_VERSION MLNX_SDK_ISSU_VERSION MLNX_SDK_DEB_VERSION MLNX_ASSETS_GITHUB_URL MLNX_SDK_DRIVERS_GITHUB_URL -MLNX_SDK_RDEBS += $(APPLIBS) $(SX_COMPLIB) $(SX_EXAMPLES) \ - $(SX_GEN_UTILS) $(SXD_LIBS) $(WJH_LIBS) $(SX_ACL_HELPER) \ - $(SX_HASH_CALC) $(SX_OBJ_DESC_LIB) - -MLNX_SDK_DEBS += $(APPLIBS_DEV) $(SX_COMPLIB_DEV) \ - $(SX_COMPLIB_DEV_STATIC) $(SX_EXAMPLES_DEV) $(SX_GEN_UTILS_DEV) \ - $(SXD_LIBS_DEV) $(SXD_LIBS_DEV_STATIC) $(WJH_LIBS_DEV) $(SX_ACL_HELPER_DEV) \ - $(SX_HASH_CALC) $(SX_OBJ_DESC_LIB_DEV) - -MLNX_SDK_DBG_DEBS += $(APPLIBS_DBGSYM) $(SX_COMPLIB_DBGSYM) \ - $(SX_EXAMPLES_DBGSYM) $(SX_GEN_UTILS_DBGSYM) \ - $(SXD_LIBS_DBGSYM) $(WJH_LIBS_DBGSYM) $(SX_ACL_HELPER_DBGSYM) \ - $(SX_HASH_CALC_DBGSYM) $(SX_OBJ_DESC_LIB_DBGSYM) - -APPLIBS = applibs_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(APPLIBS)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/applibs -$(APPLIBS)_DEPENDS += $(SX_COMPLIB_DEV) $(SX_GEN_UTILS_DEV) $(SXD_LIBS_DEV) $(LIBNL3_DEV) $(LIBNL_GENL3_DEV) -$(APPLIBS)_RDEPENDS += $(SX_COMPLIB) $(SX_GEN_UTILS) $(SXD_LIBS) $(LIBNL3) $(LIBNL_GENL3) -APPLIBS_DEV = applibs-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(APPLIBS),$(APPLIBS_DEV))) -APPLIBS_DBGSYM = applibs-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb +MLNX_SDK_RDEBS += $(SYSSDK) +MLNX_SDK_DEBS += $(SYSSDK_DEV) +MLNX_SDK_DBG_DEBS += $(SYSSDK_DBGSYM) + +SYSSDK = sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb +$(SYSSDK)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sys-sdk +$(SYSSDK)_DEPENDS += $(LIBNL3_DEV) $(LIBNL_GENL3_DEV) +$(SYSSDK)_RDEPENDS += $(LIBNL3) $(LIBNL_GENL3) +SYSSDK_DEV = sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH)-dev.deb +$(eval $(call add_derived_package,$(SYSSDK),$(SYSSDK_DEV))) +SYSSDK_DBGSYM = sys-sdk_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH)-dbgsym.ddeb ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(APPLIBS),$(APPLIBS_DBGSYM))) +$(eval $(call add_derived_package,$(SYSSDK),$(SYSSDK_DBGSYM))) endif -SX_COMPLIB = sx-complib_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SX_COMPLIB)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sx-complib -SX_COMPLIB_DEV = sx-complib-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SX_COMPLIB),$(SX_COMPLIB_DEV))) -SX_COMPLIB_DBGSYM = sx-complib-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_COMPLIB),$(SX_COMPLIB_DBGSYM))) -endif - -SX_EXAMPLES = sx-examples_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SX_EXAMPLES)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sx-examples -$(SX_EXAMPLES)_DEPENDS += $(APPLIBS_DEV) $(SXD_LIBS_DEV) -$(SX_EXAMPLES)_RDEPENDS += $(APPLIBS) $(SXD_LIBS) -SX_EXAMPLES_DEV = sx-examples-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SX_EXAMPLES),$(SX_EXAMPLES_DEV))) -SX_EXAMPLES_DBGSYM = sx-examples-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_EXAMPLES),$(SX_EXAMPLES_DBGSYM))) -endif - -SX_GEN_UTILS = sx-gen-utils_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SX_GEN_UTILS)_SRC_PATH += $(PLATFORM_PATH)/sdk-src/sx-gen-utils -$(SX_GEN_UTILS)_DEPENDS += $(SX_COMPLIB_DEV) -$(SX_GEN_UTILS)_RDEPENDS += $(SX_COMPLIB) -SX_GEN_UTILS_DEV = sx-gen-utils-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SX_GEN_UTILS),$(SX_GEN_UTILS_DEV))) -SX_GEN_UTILS_DBGSYM = sx-gen-utils-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_GEN_UTILS),$(SX_GEN_UTILS_DBGSYM))) -endif - -SXD_LIBS = sxd-libs_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SXD_LIBS)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sxd-libs -$(SXD_LIBS)_DEPENDS += $(SX_COMPLIB_DEV) $(SX_GEN_UTILS_DEV) -SXD_LIBS_DEV = sxd-libs-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SXD_LIBS),$(SXD_LIBS_DEV))) -SXD_LIBS_DBGSYM = sxd-libs-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SXD_LIBS),$(SXD_LIBS_DBGSYM))) -endif #packages that are required for runtime only -PYTHON_SDK_API = python-sdk-api_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(PYTHON_SDK_API)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/python-sdk-api -$(PYTHON_SDK_API)_DEPENDS += $(APPLIBS_DEV) $(SXD_LIBS_DEV) $(SWIG) -$(PYTHON_SDK_API)_RDEPENDS += $(APPLIBS) $(SXD_LIBS) -PYTHON_SDK_API_DBGSYM = python-sdk-api-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(PYTHON_SDK_API),$(PYTHON_SDK_API_DBGSYM))) -endif - -SX_ACL_HELPER = sx-acl-helper_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SX_ACL_HELPER)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sx-acl-helper -$(SX_ACL_HELPER)_DEPENDS += $(SX_COMPLIB_DEV) $(SXD_LIBS_DEV) $(APPLIBS_DEV) -$(SX_ACL_HELPER)_RDEPENDS += $(SX_COMPLIB) $(PYTHON_SDK_API) -SX_ACL_HELPER_DEV = sx-acl-helper-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SX_ACL_HELPER),$(SX_ACL_HELPER_DEV))) -SX_ACL_HELPER_DBGSYM = sx-acl-helper-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_ACL_HELPER),$(SX_ACL_HELPER_DBGSYM))) -endif - -SX_OBJ_DESC_LIB = sx-obj-desc-lib_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(SX_OBJ_DESC_LIB)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sx-obj-desc-lib -$(SX_OBJ_DESC_LIB)_DEPENDS += $(APPLIBS_DEV) $(SX_COMPLIB_DEV) $(SXD_LIBS_DEV) -$(SX_OBJ_DESC_LIB)_RDEPENDS += $(APPLIBS) $(SX_COMPLIB) $(PYTHON_SDK_API) -SX_OBJ_DESC_LIB_DEV = sx-obj-desc-lib-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(SX_OBJ_DESC_LIB),$(SX_OBJ_DESC_LIB_DEV))) -SX_OBJ_DESC_LIB_DBGSYM = sx-obj-desc-lib-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_OBJ_DESC_LIB),$(SX_OBJ_DESC_LIB_DBGSYM))) -endif - -WJH_LIBS = wjh-libs_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(WJH_LIBS)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/wjh-libs -$(WJH_LIBS)_DEPENDS += $(SX_COMPLIB_DEV) $(SXD_LIBS_DEV) $(APPLIBS_DEV) $(SX_ACL_HELPER_DEV) -$(WJH_LIBS)_RDEPENDS += $(SX_COMPLIB) $(PYTHON_SDK_API) $(SX_ACL_HELPER) -WJH_LIBS_DEV = wjh-libs-dev_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -$(eval $(call add_derived_package,$(WJH_LIBS),$(WJH_LIBS_DEV))) -WJH_LIBS_DBGSYM = wjh-libs-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(WJH_LIBS),$(WJH_LIBS_DBGSYM))) -endif - -SX_HASH_CALC = sx-hash-calc_1.mlnx.$(MLNX_SDK_DEB_VERSION)_amd64.deb -$(SX_HASH_CALC)_SRC_PATH = $(PLATFORM_PATH)/sdk-src/sx-hash-calc -$(SX_HASH_CALC)_DEPENDS += $(SX_COMPLIB_DEV) $(SXD_LIBS_DEV) $(APPLIBS_DEV) $(SX_GEN_UTILS_DEV) -$(SX_HASH_CALC)_RDEPENDS += $(SX_COMPLIB) $(SXD_LIBS) $(APPLIBS) -SX_HASH_CALC_DBGSYM = sx-hash-calc-dbgsym_1.mlnx.$(MLNX_SDK_DEB_VERSION)_amd64.deb -ifeq ($(SDK_FROM_SRC),y) -$(eval $(call add_derived_package,$(SX_HASH_CALC),$(SX_HASH_CALC_DBGSYM))) -endif SX_KERNEL = sx-kernel_1.mlnx.$(MLNX_SDK_DEB_VERSION)_$(CONFIGURED_ARCH).deb $(SX_KERNEL)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) diff --git a/platform/nvidia-bluefield/bluefield-platform-modules/bin/bfnet.sh b/platform/nvidia-bluefield/bluefield-platform-modules/bin/bfnet.sh index e05761675336..c82ce3023d4e 100755 --- a/platform/nvidia-bluefield/bluefield-platform-modules/bin/bfnet.sh +++ b/platform/nvidia-bluefield/bluefield-platform-modules/bin/bfnet.sh @@ -17,25 +17,6 @@ # pci_iface=eth0-midplane -cp_iface=Ethernet0 -pidfile=/run/dhcl-internal.$cp_iface.pid -leasefile=/var/lib/dhcp/dhcl-internal.$cp_iface.leases - -stop_cp_dhclient() -{ - if [[ -f $pidfile ]]; then - kill $(cat $pidfile) - rm -f $pidfile - fi - rm -f $leasefile -} - -start_cp_dhclient() -{ - stop_cp_dhclient - - /sbin/dhclient -pf $pidfile -lf $leasefile $cp_iface -nw -} start() { @@ -46,17 +27,10 @@ start() if [[ $? != "0" ]]; then exit 1 fi - - hwsku=$(sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]') - if [[ $hwsku == *"-C1" ]]; then - start_cp_dhclient - fi } stop() { - stop_cp_dhclient - /usr/bin/mst stop rmmod mlx5_ib mlx5_core } diff --git a/platform/vs/docker-gbsyncd-vs.mk b/platform/vs/docker-gbsyncd-vs.mk index f3cd8a139e8f..9433a28a06bb 100644 --- a/platform/vs/docker-gbsyncd-vs.mk +++ b/platform/vs/docker-gbsyncd-vs.mk @@ -3,7 +3,9 @@ DOCKER_GBSYNCD_PLATFORM_CODE = vs include $(PLATFORM_PATH)/../template/docker-gbsyncd-bookworm.mk -$(DOCKER_GBSYNCD_BASE)_DEPENDS += $(SYNCD_VS) +$(DOCKER_GBSYNCD_BASE)_DEPENDS += $(SYNCD_VS) \ + $(LIBNL3_DEV) \ + $(LIBNL3) $(DOCKER_GBSYNCD_BASE)_DBG_DEPENDS += $(SYNCD_VS_DBG) \ $(LIBSWSSCOMMON_DBG) \ diff --git a/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 b/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 index 1c28688ca7c3..59bafc9c920b 100644 --- a/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 +++ b/platform/vs/docker-gbsyncd-vs/Dockerfile.j2 @@ -11,8 +11,8 @@ RUN apt-get install -f -y iproute2 libcap2-bin # For DASH engine -COPY debs/libnl-3-dev_3.5.0-1_amd64.deb debs/libnl-route-3-dev_3.5.0-1_amd64.deb debs/ -RUN dpkg -i debs/libnl-3-dev_3.5.0-1_amd64.deb debs/libnl-route-3-dev_3.5.0-1_amd64.deb +COPY debs/libnl-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/libnl-route-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/ +RUN dpkg -i debs/libnl-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/libnl-route-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb RUN apt-get install -f -y libabsl20220623 libc-ares2 python3-six libboost-thread1.74.0 libboost-dev libboost-system-dev libboost-thread-dev libboost-filesystem1.74.0 libboost-program-options1.74.0 libboost-thread1.74.0 libnanomsg5 libpcap0.8 libthrift-0.17.0 libboost-dev libboost-filesystem-dev libboost-program-options-dev libgmp-dev libnanomsg-dev libpcap-dev libtool pkg-config libthrift-dev python3-thrift thrift-compiler libboost-iostreams1.74.0 libgc1 cpp libboost-dev libboost-all-dev libboost-graph-dev libboost-iostreams-dev libfl-dev libgc-dev libgmp-dev libbpf-dev tcpdump libelf-dev llvm clang python3-pyroute2 python3-ply python3-scapy python3-setuptools python3-thrift libthrift-0.17.0 libgrpc++1.51 libgrpc29 libprotobuf32 libboost-dev libboost-system-dev libboost-thread-dev libprotoc-dev protobuf-compiler python3-protobuf libgrpc++-dev libgrpc-dev protobuf-compiler-grpc python3-grpcio diff --git a/platform/vs/docker-sonic-vs.mk b/platform/vs/docker-sonic-vs.mk index 53735eb980cf..3e66e94546ad 100644 --- a/platform/vs/docker-sonic-vs.mk +++ b/platform/vs/docker-sonic-vs.mk @@ -46,7 +46,7 @@ $(DOCKER_SONIC_VS)_FILES += $(CONFIGDB_LOAD_SCRIPT) \ $(UPDATE_CHASSISDB_CONFIG_SCRIPT) \ $(COPP_CONFIG_TEMPLATE) -$(DOCKER_SONIC_VS)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BULLSEYE) +$(DOCKER_SONIC_VS)_LOAD_DOCKERS += $(DOCKER_SWSS_LAYER_BOOKWORM) SONIC_DOCKER_IMAGES += $(DOCKER_SONIC_VS) -SONIC_BULLSEYE_DOCKERS += $(DOCKER_SONIC_VS) +SONIC_BOOKWORM_DOCKERS += $(DOCKER_SONIC_VS) diff --git a/platform/vs/docker-sonic-vs/Dockerfile.j2 b/platform/vs/docker-sonic-vs/Dockerfile.j2 index 6caa69b301f9..92ba5b06dbd1 100644 --- a/platform/vs/docker-sonic-vs/Dockerfile.j2 +++ b/platform/vs/docker-sonic-vs/Dockerfile.j2 @@ -1,5 +1,5 @@ {% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %} -FROM docker-swss-layer-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} +FROM docker-swss-layer-bookworm-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}} ARG docker_container_name @@ -12,24 +12,18 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y gnupg RUN apt-get install -y net-tools \ + iproute2 \ arping \ ndisc6 \ ethtool \ tcpdump \ ifupdown \ bridge-utils \ - python-ply \ - libqt5core5a \ - libqt5network5 \ - libgmp10 \ libjudydebian1 \ openssh-client \ openssh-server \ libc-ares2 \ - grub2-common \ bash-completion \ - libelf1 \ - libmnl0 \ logrotate \ apt-utils \ psmisc \ @@ -37,7 +31,6 @@ RUN apt-get install -y net-tools \ conntrack \ iptables \ jq \ - libzmq5 \ uuid-dev \ # For installing Python m2crypto package # (these can be uninstalled after installation) @@ -67,9 +60,9 @@ RUN apt-get install -y net-tools \ # For libkrb5-dev comerr-dev \ libgssrpc4 \ - libkdb5-10 - -RUN apt-get install -y -t bullseye-backports iproute2 + libkdb5-10 \ + libprotobuf-c-dev \ + protobuf-c-compiler # For sonic-config-engine Python 3 package # Install pyangbind here, outside sonic-config-engine dependencies, as pyangbind causes enum34 to be installed. @@ -81,9 +74,8 @@ RUN pip3 uninstall -y enum34 # Dependencies of restore_neighbors.py RUN pip3 install \ - scapy==2.4.4 \ - pyroute2==0.5.14 \ - netifaces==0.10.9 + pyroute2==0.7.2 \ + netifaces==0.11.0 {% if docker_sonic_vs_debs.strip() -%} # Copy built Debian packages @@ -120,14 +112,15 @@ RUN apt-get autoclean -y RUN apt-get autoremove -y RUN rm -rf /debs ~/.cache -RUN sed -ri 's/^(save .*$)/# \1/g; \ - s/^daemonize yes$/daemonize no/; \ - s/^logfile .*$/logfile ""/; \ - s/^# syslog-enabled no$/syslog-enabled no/; \ - s/^# unixsocket/unixsocket/; \ - s/notify-keyspace-events ""/notify-keyspace-events AKE/; \ - s/redis-server.sock/redis.sock/g; \ - s/^client-output-buffer-limit pubsub [0-9]+mb [0-9]+mb [0-9]+/client-output-buffer-limit pubsub 0 0 0/ \ +RUN sed -ri 's/^# save ""$/save ""/g; \ + s/^daemonize yes$/daemonize no/; \ + s/^logfile .*$/logfile ""/; \ + s/^# syslog-enabled no$/syslog-enabled no/; \ + s/^# unixsocket/unixsocket/; \ + s/redis-server.sock/redis.sock/g; \ + s/^client-output-buffer-limit pubsub [0-9]+mb [0-9]+mb [0-9]+/client-output-buffer-limit pubsub 0 0 0/; \ + s/^notify-keyspace-events ""$/notify-keyspace-events AKE/; \ + s/^databases [0-9]+$/databases 100/ \ ' /etc/redis/redis.conf COPY ["50-default.conf", "/etc/rsyslog.d/"] diff --git a/platform/vs/docker-sonic-vs/start.sh b/platform/vs/docker-sonic-vs/start.sh index f28f05f3707d..f7dbde8dcff7 100755 --- a/platform/vs/docker-sonic-vs/start.sh +++ b/platform/vs/docker-sonic-vs/start.sh @@ -160,6 +160,8 @@ supervisorctl start vlanmgrd supervisorctl start zebra +supervisorctl start mgmtd + supervisorctl start staticd supervisorctl start buffermgrd diff --git a/platform/vs/docker-sonic-vs/supervisord.conf.j2 b/platform/vs/docker-sonic-vs/supervisord.conf.j2 index d8d9ce390cb8..8f0524338a09 100644 --- a/platform/vs/docker-sonic-vs/supervisord.conf.j2 +++ b/platform/vs/docker-sonic-vs/supervisord.conf.j2 @@ -29,7 +29,7 @@ stdout_logfile=syslog stderr_logfile=syslog [program:redis-chassis] -command=/bin/bash -c "{ [[ -s /var/lib/redis_chassis/dump.rdb ]] || rm -f /var/lib/redis_chassis/dump.rdb; } && mkdir -p /var/lib/redis_chassis && exec /usr/bin/redis-server /etc/redis/redis.conf --bind redis_chassis.server --port 6380 --unixsocket /var/run/redis/redis_chassis.sock --pidfile /var/run/redis/redis_chassis.pid --dir /var/lib/redis_chassis" +command=/bin/bash -c "{ [[ -s /var/lib/redis_chassis/dump.rdb ]] || rm -f /var/lib/redis_chassis/dump.rdb; } && mkdir -p /var/lib/redis_chassis && exec /usr/bin/redis-server /etc/redis/redis.conf --bind redis_chassis.server --port 6380 --protected-mode no --unixsocket /var/run/redis/redis_chassis.sock --pidfile /var/run/redis/redis_chassis.pid --dir /var/lib/redis_chassis" priority=3 autostart=false autorestart=false @@ -163,6 +163,14 @@ stderr_logfile=syslog environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log{{ asan_extra_options }}" {% endif %} +[program:mgmtd] +command=/usr/lib/frr/mgmtd -A 127.0.0.1 +priority=13 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + [program:zebra] command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_sonic --asic-offload=notify_on_offload priority=13 @@ -198,6 +206,14 @@ stderr_logfile=syslog environment=ASAN_OPTIONS="log_path=/var/log/asan/fpmsyncd-asan.log{{ asan_extra_options }}" {% endif %} +[program:pathd] +command=/usr/lib/frr/pathd -A 127.0.0.1 +priority=14 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog + [program:arp_update] command=/usr/bin/arp_update priority=16 diff --git a/platform/vs/docker-syncd-vs.mk b/platform/vs/docker-syncd-vs.mk index a9656f291f24..9ca9746bd7c4 100644 --- a/platform/vs/docker-syncd-vs.mk +++ b/platform/vs/docker-syncd-vs.mk @@ -3,7 +3,9 @@ DOCKER_SYNCD_PLATFORM_CODE = vs include $(PLATFORM_PATH)/../template/docker-syncd-bookworm.mk -$(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD_VS) +$(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD_VS) \ + $(LIBNL3_DEV) \ + $(LIBNL3) $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_VS_DBG) \ $(LIBSWSSCOMMON_DBG) \ diff --git a/platform/vs/docker-syncd-vs/Dockerfile.j2 b/platform/vs/docker-syncd-vs/Dockerfile.j2 index 6e40fd8225bf..b23c1c234817 100644 --- a/platform/vs/docker-syncd-vs/Dockerfile.j2 +++ b/platform/vs/docker-syncd-vs/Dockerfile.j2 @@ -12,8 +12,8 @@ RUN apt-get install -f -y iproute2 libcap2-bin # For DASH engine -COPY debs/libnl-3-dev_3.5.0-1_amd64.deb debs/libnl-route-3-dev_3.5.0-1_amd64.deb debs/ -RUN dpkg -i debs/libnl-3-dev_3.5.0-1_amd64.deb debs/libnl-route-3-dev_3.5.0-1_amd64.deb +COPY debs/libnl-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/libnl-route-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/ +RUN dpkg -i debs/libnl-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb debs/libnl-route-3-dev_{{ LIBNL3_VERSION_SONIC }}_{{ CONFIGURED_ARCH }}.deb RUN apt-get install -f -y libabsl20220623 libc-ares2 python3-six libboost-thread1.74.0 libboost-dev libboost-system-dev libboost-thread-dev libboost-filesystem1.74.0 libboost-program-options1.74.0 libboost-thread1.74.0 libnanomsg5 libpcap0.8 libthrift-0.17.0 libboost-dev libboost-filesystem-dev libboost-program-options-dev libgmp-dev libnanomsg-dev libpcap-dev libtool pkg-config libthrift-dev python3-thrift thrift-compiler libboost-iostreams1.74.0 libgc1 cpp libboost-dev libboost-all-dev libboost-graph-dev libboost-iostreams-dev libfl-dev libgc-dev libgmp-dev libbpf-dev tcpdump libelf-dev llvm clang python3-pyroute2 python3-ply python3-scapy python3-setuptools python3-thrift libthrift-0.17.0 libgrpc++1.51 libgrpc29 libprotobuf32 libboost-dev libboost-system-dev libboost-thread-dev libprotoc-dev protobuf-compiler python3-protobuf libgrpc++-dev libgrpc-dev protobuf-compiler-grpc python3-grpcio diff --git a/platform/vs/tests/bgp/files/gr_livelock/bgpd.conf b/platform/vs/tests/bgp/files/gr_livelock/bgpd.conf index dc861ed46934..e52c771a1dae 100644 --- a/platform/vs/tests/bgp/files/gr_livelock/bgpd.conf +++ b/platform/vs/tests/bgp/files/gr_livelock/bgpd.conf @@ -6,10 +6,10 @@ router bgp 65501 neighbor 10.0.0.1 remote-as 65502 address-family ipv4 neighbor 10.0.0.1 activate - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.3 remote-as 65503 address-family ipv4 neighbor 10.0.0.3 activate - maximum-paths 64 + maximum-paths 514 exit-address-family diff --git a/platform/vs/tests/bgp/files/no_export/bgpd.conf b/platform/vs/tests/bgp/files/no_export/bgpd.conf index cd87c330c299..be97c1c37abc 100644 --- a/platform/vs/tests/bgp/files/no_export/bgpd.conf +++ b/platform/vs/tests/bgp/files/no_export/bgpd.conf @@ -5,10 +5,10 @@ router bgp 65501 neighbor 10.0.0.1 remote-as 65502 address-family ipv4 neighbor 10.0.0.1 activate - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.3 remote-as 65503 address-family ipv4 neighbor 10.0.0.3 activate - maximum-paths 64 + maximum-paths 514 exit-address-family diff --git a/rules/config b/rules/config index 8229160b0d78..3b4fd5851a3b 100644 --- a/rules/config +++ b/rules/config @@ -124,6 +124,9 @@ DEFAULT_VS_PREPARE_MEM = yes # INCLUDE_SYSTEM_GNMI - build docker-sonic-gnmi for system gnmi support INCLUDE_SYSTEM_GNMI = y +# INCLUDE_SYSTEM_BMP - build docker-sonic-bmp for system bmp support +INCLUDE_SYSTEM_BMP = y + # INCLUDE_SYSTEM_EVENTD - build docker-eventd for system eventd support INCLUDE_SYSTEM_EVENTD = y @@ -261,7 +264,7 @@ TRUSTED_GPG_URLS = https://packages.trafficmanager.net/debian/public_key.gpg,htt # web : web packages, downloaded by wget, curl # git : git repositories, donloaded by git clone # docker: docker base images -SONIC_VERSION_CONTROL_COMPONENTS ?= none +SONIC_VERSION_CONTROL_COMPONENTS ?= deb,py2,py3,web,git,docker ifeq ($(SONIC_VERSION_CONTROL_COMPONENTS),all) override MIRROR_SNAPSHOT = y @@ -300,7 +303,7 @@ INCLUDE_MUX = y ENABLE_ASAN ?= n # reset default container registry from dockerhub to other -DEFAULT_CONTAINER_REGISTRY ?= +DEFAULT_CONTAINER_REGISTRY ?= publicmirror.azurecr.io # INCLUDE_BOOTCHART - install systemd-bootchart INCLUDE_BOOTCHART = y diff --git a/rules/docker-bmp.dep b/rules/docker-bmp.dep new file mode 100644 index 000000000000..09bd14d0dfc1 --- /dev/null +++ b/rules/docker-bmp.dep @@ -0,0 +1,10 @@ +DPATH := $($(DOCKER_BMP)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/docker-bmp.mk rules/docker-bmp.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_BMP)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_BMP)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_BMP)_DEP_FILES := $(DEP_FILES) + +$(eval $(call add_dbg_docker,$(DOCKER_BMP),$(DOCKER_BMP_DBG))) \ No newline at end of file diff --git a/rules/docker-bmp.mk b/rules/docker-bmp.mk new file mode 100644 index 000000000000..b38718a161c6 --- /dev/null +++ b/rules/docker-bmp.mk @@ -0,0 +1,46 @@ +# docker image for BMP agent + +DOCKER_BMP_STEM = docker-sonic-bmp +DOCKER_BMP = $(DOCKER_BMP_STEM).gz +DOCKER_BMP_DBG = $(DOCKER_BMP_STEM)-$(DBG_IMAGE_MARK).gz + +$(DOCKER_BMP)_PATH = $(DOCKERS_PATH)/$(DOCKER_BMP_STEM) + +$(DOCKER_BMP)_DEPENDS += $(LIBSWSSCOMMON) \ + $(SONIC_BMPD) + +$(DOCKER_BMP)_PYTHON_WHEELS = $(SONIC_BMPCFGD) +$(DOCKER_BMP)_INSTALL_DEBS = $(LIBSWSSCOMMON) \ + $(SONIC_BMPD) \ + $(PYTHON3_SWSSCOMMON) \ + $(LIBYANG_PY3) + +$(DOCKER_BMP)_DBG_DEPENDS = $($(DOCKER_CONFIG_ENGINE_BOOKWORM)_DBG_DEPENDS) + +$(DOCKER_BMP)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BOOKWORM) + +$(DOCKER_BMP)_VERSION = 1.0.0 +$(DOCKER_BMP)_PACKAGE_NAME = bmp + +$(DOCKER_BMP)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BOOKWORM)_DBG_IMAGE_PACKAGES) + +SONIC_DOCKER_IMAGES += $(DOCKER_BMP) +SONIC_BOOKWORM_DOCKERS += $(DOCKER_BMP) +ifeq ($(INCLUDE_SYSTEM_BMP), y) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_BMP) +endif + +SONIC_DOCKER_DBG_IMAGES += $(DOCKER_BMP_DBG) +SONIC_BOOKWORM_DBG_DOCKERS += $(DOCKER_BMP_DBG) +ifeq ($(INCLUDE_SYSTEM_BMP), y) +SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_BMP_DBG) +endif + +$(DOCKER_BMP)_CONTAINER_NAME = bmp +$(DOCKER_BMP)_RUN_OPT += -t +$(DOCKER_BMP)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_BMP)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro +$(DOCKER_BMP)_RUN_OPT += -v /var/run/dbus:/var/run/dbus:rw + +$(DOCKER_BMP)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) +$(DOCKER_BMP)_BASE_IMAGE_FILES += monit_bmp:/etc/monit/conf.d \ No newline at end of file diff --git a/rules/docker-iccpd.mk b/rules/docker-iccpd.mk index 39be9f5a53d4..a83f93642e98 100644 --- a/rules/docker-iccpd.mk +++ b/rules/docker-iccpd.mk @@ -21,7 +21,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_ICCPD_DBG) endif $(DOCKER_ICCPD)_CONTAINER_NAME = iccpd -$(DOCKER_ICCPD)_RUN_OPT += -t +$(DOCKER_ICCPD)_RUN_OPT += -t --cap-add=NET_ADMIN $(DOCKER_ICCPD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_ICCPD)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro diff --git a/rules/docker-platform-monitor.mk b/rules/docker-platform-monitor.mk index 71f9678b5f6a..baf4282517d3 100644 --- a/rules/docker-platform-monitor.mk +++ b/rules/docker-platform-monitor.mk @@ -54,6 +54,7 @@ $(DOCKER_PLATFORM_MONITOR)_CONTAINER_NAME = pmon $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += --privileged -t $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro +$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /host/reboot-cause:/host/reboot-cause:rw $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /host/pmon/stormond:/usr/share/stormond:rw $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /var/run/platform_cache:/var/run/platform_cache:ro $(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /usr/share/sonic/device/pddf:/usr/share/sonic/device/pddf:ro diff --git a/rules/frr.mk b/rules/frr.mk index da42179a0312..ff3c3ea4ab17 100644 --- a/rules/frr.mk +++ b/rules/frr.mk @@ -1,9 +1,9 @@ # FRRouting (frr) package -FRR_VERSION = 8.5.4 +FRR_VERSION = 10.0.1 FRR_SUBVERSION = 0 -FRR_BRANCH = frr/8.5 -FRR_TAG = frr-8.5.4 +FRR_BRANCH = frr-10.0.1 +FRR_TAG = frr-10.0.1 export FRR_VERSION FRR_SUBVERSION FRR_BRANCH FRR_TAG diff --git a/rules/libnl3.mk b/rules/libnl3.mk index cdd807b2f5c8..a40392e77840 100644 --- a/rules/libnl3.mk +++ b/rules/libnl3.mk @@ -1,49 +1,52 @@ # libnl3 -LIBNL3_VERSION_BASE = 3.5.0 -LIBNL3_VERSION = $(LIBNL3_VERSION_BASE)-1 +LIBNL3_VERSION_BASE = 3.7.0 +LIBNL3_VERSION = $(LIBNL3_VERSION_BASE)-0.2 +LIBNL3_VERSION_SONIC = $(LIBNL3_VERSION_BASE)-0.2+b1sonic1 export LIBNL3_VERSION_BASE export LIBNL3_VERSION +export LIBNL3_VERSION_SONIC -LIBNL3 = libnl-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL3 = libnl-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL3)_SRC_PATH = $(SRC_PATH)/libnl3 SONIC_MAKE_DEBS += $(LIBNL3) -LIBNL3_DEV = libnl-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL3_DEV = libnl-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb +$(LIBNL3_DEV)_DEPENDS += $(LIBNL3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL3_DEV))) -LIBNL_GENL3 = libnl-genl-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_GENL3 = libnl-genl-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_GENL3)_RDEPENDS += $(LIBNL3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_GENL3))) -LIBNL_GENL3_DEV = libnl-genl-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_GENL3_DEV = libnl-genl-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_GENL3_DEV)_DEPENDS += $(LIBNL_GENL3) $(LIBNL3_DEV) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_GENL3_DEV))) -LIBNL_ROUTE3 = libnl-route-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_ROUTE3 = libnl-route-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_ROUTE3)_RDEPENDS += $(LIBNL3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_ROUTE3))) -LIBNL_ROUTE3_DEV = libnl-route-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_ROUTE3_DEV = libnl-route-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_ROUTE3_DEV)_DEPENDS += $(LIBNL_ROUTE3) $(LIBNL3_DEV) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_ROUTE3_DEV))) -LIBNL_NF3 = libnl-nf-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_NF3 = libnl-nf-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_NF3)_DEPENDS += $(LIBNL_ROUTE3_DEV) $(LIBNL_NF3)_RDEPENDS += $(LIBNL_ROUTE3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_NF3))) -LIBNL_NF3_DEV = libnl-nf-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_NF3_DEV = libnl-nf-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_NF3_DEV)_DEPENDS += $(LIBNL_NF3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_NF3_DEV))) -LIBNL_CLI = libnl-cli-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_CLI = libnl-cli-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_CLI)_DEPENDS += $(LIBNL_GENL3_DEV) $(LIBNL_NF3_DEV) $(LIBNL_ROUTE3_DEV) $(LIBNL_CLI)_RDEPENDS += $(LIBNL_GENL3) $(LIBNL_NF3) $(LIBNL_ROUTE3) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_CLI))) -LIBNL_CLI_DEV = libnl-cli-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +LIBNL_CLI_DEV = libnl-cli-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(LIBNL_CLI_DEV)_DEPENDS += $(LIBNL_CLI) $(LIBNL_GENL3_DEV) $(LIBNL_NF3_DEV) $(LIBNL_ROUTE3_DEV) $(eval $(call add_derived_package,$(LIBNL3),$(LIBNL_CLI_DEV))) diff --git a/rules/libyang2.mk b/rules/libyang2.mk index ca6d611b52ee..e683ff05eb1f 100644 --- a/rules/libyang2.mk +++ b/rules/libyang2.mk @@ -1,8 +1,8 @@ # libyang2 -LIBYANG2_VERSION_BASE = 2.0 -LIBYANG2_VERSION = $(LIBYANG2_VERSION_BASE).112 -LIBYANG2_SUBVERSION = 6 +LIBYANG2_VERSION_BASE = 2.1 +LIBYANG2_VERSION = $(LIBYANG2_VERSION_BASE).148 +LIBYANG2_SUBVERSION = 0.2 LIBYANG2_FULLVERSION = $(LIBYANG2_VERSION)-$(LIBYANG2_SUBVERSION) export LIBYANG2_VERSION_BASE @@ -10,14 +10,14 @@ export LIBYANG2_VERSION export LIBYANG2_SUBVERSION export LIBYANG2_FULLVERSION -LIBYANG2 = libyang2_$(LIBYANG2_FULLVERSION)_$(CONFIGURED_ARCH).deb +LIBYANG2 = libyang2t64_$(LIBYANG2_FULLVERSION)_$(CONFIGURED_ARCH).deb $(LIBYANG2)_SRC_PATH = $(SRC_PATH)/libyang2 SONIC_MAKE_DEBS += $(LIBYANG2) LIBYANG2_DEV = libyang2-dev_$(LIBYANG2_FULLVERSION)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(LIBYANG2),$(LIBYANG2_DEV))) -LIBYANG2_DBG = libyang2-dbgsym_$(LIBYANG2_FULLVERSION)_$(CONFIGURED_ARCH).deb +LIBYANG2_DBG = libyang2t64-dbgsym_$(LIBYANG2_FULLVERSION)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(LIBYANG2),$(LIBYANG2_DBG))) diff --git a/rules/p4lang.dep b/rules/p4lang.dep index 01effeb6f078..a44106642f54 100644 --- a/rules/p4lang.dep +++ b/rules/p4lang.dep @@ -7,3 +7,21 @@ DEP_FILES += $(shell git ls-files $(SPATH)) $(P4LANG_PI)_CACHE_MODE := GIT_CONTENT_SHA $(P4LANG_PI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(P4LANG_PI)_DEP_FILES := $(DEP_FILES) + +SPATH := $($(P4LANG_BMV2)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/p4lang.mk rules/p4lang.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(SPATH)) + +$(P4LANG_BMV2)_CACHE_MODE := GIT_CONTENT_SHA +$(P4LANG_BMV2)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(P4LANG_BMV2)_DEP_FILES := $(DEP_FILES) + +SPATH := $($(P4LANG_P4C)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/p4lang.mk rules/p4lang.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(SPATH)) + +$(P4LANG_P4C)_CACHE_MODE := GIT_CONTENT_SHA +$(P4LANG_P4C)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(P4LANG_P4C)_DEP_FILES := $(DEP_FILES) diff --git a/rules/p4lang.mk b/rules/p4lang.mk index 2bca4e1f50bd..69bde5693e8a 100644 --- a/rules/p4lang.mk +++ b/rules/p4lang.mk @@ -8,13 +8,10 @@ export P4LANG_PI_VERSION export P4LANG_PI_VERSION_FULL P4LANG_PI = p4lang-pi_$(P4LANG_PI_VERSION_FULL)_$(CONFIGURED_ARCH).deb +$(P4LANG_PI)_SRC_PATH = $(SRC_PATH)/p4lang $(P4LANG_PI)_DEPENDS = $(PROTOBUF) $(PROTOBUF_LITE) $(PROTOC32) $(PYTHON3_PROTOBUF) $(GRPC) $(GRPC_CPP) $(PYTHON3_GRPC) $(PROTOBUF_DEV) $(PROTOC_DEV) $(PROTOBUF_COMPILER) $(GRPC_DEV) $(GRPC_CPP_DEV) $(GRPC_COMPILER) $(P4LANG_PI)_RDEPENDS = $(PROTOBUF) $(PROTOBUF_LITE) $(PROTOC32) $(PYTHON3_PROTOBUF) $(GRPC) $(GRPC_CPP) $(PYTHON3_GRPC) $(PROTOBUF_DEV) $(PROTOC_DEV) $(PROTOBUF_COMPILER) $(GRPC_DEV) $(GRPC_CPP_DEV) $(GRPC_COMPILER) - - -P4LANG = $(P4LANG_PI) -$(P4LANG)_SRC_PATH = $(SRC_PATH)/p4lang -SONIC_MAKE_DEBS += $(P4LANG) +SONIC_MAKE_DEBS += $(P4LANG_PI) # p4lang-bmv2 @@ -25,7 +22,7 @@ export P4LANG_BMV2_VERSION export P4LANG_BMV2_VERSION_FULL P4LANG_BMV2 = p4lang-bmv2_$(P4LANG_BMV2_VERSION_FULL)_$(CONFIGURED_ARCH).deb -$(P4LANG_BMV2)_SRC_PATH = $(SRC_PATH)/p4lang +$(P4LANG_BMV2)_SRC_PATH = $($(P4LANG_PI)_SRC_PATH) $(P4LANG_BMV2)_DEPENDS = $(P4LANG_PI) $(P4LANG_BMV2)_RDEPENDS = $(P4LANG_PI) SONIC_MAKE_DEBS += $(P4LANG_BMV2) @@ -39,7 +36,7 @@ export P4LANG_P4C_VERSION export P4LANG_P4C_VERSION_FULL P4LANG_P4C = p4lang-p4c_$(P4LANG_P4C_VERSION_FULL)_$(CONFIGURED_ARCH).deb -$(P4LANG_P4C)_SRC_PATH = $(SRC_PATH)/p4lang +$(P4LANG_P4C)_SRC_PATH = $($(P4LANG_PI)_SRC_PATH) $(P4LANG_P4C)_DEPENDS = $(P4LANG_BMV2) $(P4LANG_P4C)_RDEPENDS = $(P4LANG_BMV2) SONIC_MAKE_DEBS += $(P4LANG_P4C) diff --git a/rules/sonic-bmp.dep b/rules/sonic-bmp.dep new file mode 100644 index 000000000000..ff0a10222be3 --- /dev/null +++ b/rules/sonic-bmp.dep @@ -0,0 +1,10 @@ +SPATH := $($(SONIC_BMPD)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/sonic-bmp.mk rules/sonic-bmp.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files)) + +$(SONIC_BMPD)_CACHE_MODE := GIT_CONTENT_SHA +$(SONIC_BMPD)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(SONIC_BMPD)_DEP_FILES := $(DEP_FILES) +$(SONIC_BMPD)_SMDEP_FILES := $(SMDEP_FILES) +$(SONIC_BMPD)_SMDEP_PATHS := $(SPATH) \ No newline at end of file diff --git a/rules/sonic-bmp.mk b/rules/sonic-bmp.mk new file mode 100644 index 000000000000..1d9f6b1a00c4 --- /dev/null +++ b/rules/sonic-bmp.mk @@ -0,0 +1,6 @@ +# sonic-bmp package +SONIC_BMPD = sonic-bmp_0.1_$(CONFIGURED_ARCH).deb +$(SONIC_BMPD)_SRC_PATH = $(SRC_PATH)/sonic-bmp +$(SONIC_BMPD)_DEPENDS = $(LIBSWSSCOMMON_DEV) $(LIBSWSSCOMMON) +$(SONIC_BMPD)_RDEPENDS = $(LIBSWSSCOMMON) +SONIC_DPKG_DEBS += $(SONIC_BMPD) \ No newline at end of file diff --git a/rules/sonic-utilities.mk b/rules/sonic-utilities.mk index 64db62c49f53..d0dec73e90e5 100644 --- a/rules/sonic-utilities.mk +++ b/rules/sonic-utilities.mk @@ -21,4 +21,7 @@ $(SONIC_UTILITIES_PY3)_DEBS_DEPENDS = $(LIBYANG) \ $(LIBYANG_PY3) \ $(LIBSWSSCOMMON) \ $(PYTHON3_SWSSCOMMON) +ifeq ($(CONFIGURED_PLATFORM),nvidia-bluefield) +$(SONIC_UTILITIES_PY3)_DEBS_DEPENDS += $(LIB_SONIC_DASH_API) +endif SONIC_PYTHON_WHEELS += $(SONIC_UTILITIES_PY3) diff --git a/rules/sonic_bmpcfgd.dep b/rules/sonic_bmpcfgd.dep new file mode 100644 index 000000000000..b5360b7ad05f --- /dev/null +++ b/rules/sonic_bmpcfgd.dep @@ -0,0 +1,13 @@ + +SPATH := $($(SONIC_BMPCFGD)_SRC_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) rules/sonic_bmpcfgd.mk rules/sonic_bmpcfgd.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(SPATH)) +SMDEP_FILES := $(addprefix $(SPATH)/,$(shell cd $(SPATH) && git ls-files)) + +$(SONIC_BMPCFGD)_CACHE_MODE := GIT_CONTENT_SHA +$(SONIC_BMPCFGD)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(SONIC_BMPCFGD)_DEP_FILES := $(DEP_FILES) +$(SONIC_BMPCFGD)_SMDEP_FILES := $(SMDEP_FILES) +$(SONIC_BMPCFGD)_SMDEP_PATHS := $(SPATH) + diff --git a/rules/sonic_bmpcfgd.mk b/rules/sonic_bmpcfgd.mk new file mode 100644 index 000000000000..ac39175773da --- /dev/null +++ b/rules/sonic_bmpcfgd.mk @@ -0,0 +1,10 @@ +# sonic-bmpcfgd package + +SONIC_BMPCFGD = sonic_bmpcfgd_services-1.0-py3-none-any.whl +$(SONIC_BMPCFGD)_SRC_PATH = $(SRC_PATH)/sonic-bmpcfgd +$(SONIC_BMPCFGD)_PYTHON_VERSION = 3 +$(SONIC_BMPCFGD)_DEPENDS += $(SONIC_PY_COMMON_PY3) \ + $(SONIC_UTILITIES_PY3) +$(SONIC_BMPCFGD)_DEBS_DEPENDS = $(LIBSWSSCOMMON) \ + $(PYTHON3_SWSSCOMMON) +SONIC_PYTHON_WHEELS += $(SONIC_BMPCFGD) \ No newline at end of file diff --git a/slave.mk b/slave.mk index 22b13a5ad452..f3d9ad3e237e 100644 --- a/slave.mk +++ b/slave.mk @@ -170,6 +170,10 @@ ifeq ($(SONIC_INCLUDE_SYSTEM_GNMI),y) INCLUDE_SYSTEM_GNMI = y endif +ifeq ($(SONIC_INCLUDE_SYSTEM_BMP),y) +INCLUDE_SYSTEM_BMP = y +endif + ifeq ($(SONIC_INCLUDE_SYSTEM_EVENTD),y) INCLUDE_SYSTEM_EVENTD = y endif @@ -439,6 +443,7 @@ $(info "INCLUDE_MGMT_FRAMEWORK" : "$(INCLUDE_MGMT_FRAMEWORK)") $(info "INCLUDE_ICCPD" : "$(INCLUDE_ICCPD)") $(info "INCLUDE_SYSTEM_TELEMETRY" : "$(INCLUDE_SYSTEM_TELEMETRY)") $(info "INCLUDE_SYSTEM_GNMI" : "$(INCLUDE_SYSTEM_GNMI)") +$(info "INCLUDE_SYSTEM_BMP" : "$(INCLUDE_SYSTEM_BMP)") $(info "INCLUDE_SYSTEM_EVENTD" : "$(INCLUDE_SYSTEM_EVENTD)") $(info "ENABLE_HOST_SERVICE_ON_START" : "$(ENABLE_HOST_SERVICE_ON_START)") $(info "INCLUDE_RESTAPI" : "$(INCLUDE_RESTAPI)") @@ -472,6 +477,7 @@ $(info "CROSS_BUILD_ENVIRON" : "$(CROSS_BUILD_ENVIRON)") $(info "LEGACY_SONIC_MGMT_DOCKER" : "$(LEGACY_SONIC_MGMT_DOCKER)") $(info "INCLUDE_EXTERNAL_PATCHES" : "$(INCLUDE_EXTERNAL_PATCHES)") $(info "PTF_ENV_PY_VER" : "$(PTF_ENV_PY_VER)") +$(info "ENABLE_MULTIDB" : "$(ENABLE_MULTIDB)") $(info ) else $(info SONiC Build System for $(CONFIGURED_PLATFORM):$(CONFIGURED_ARCH)) @@ -1432,6 +1438,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export sonic_su_prod_signing_tool="/sonic/scripts/$(shell basename -- $(SECURE_UPGRADE_PROD_SIGNING_TOOL))" export include_system_telemetry="$(INCLUDE_SYSTEM_TELEMETRY)" export include_system_gnmi="$(INCLUDE_SYSTEM_GNMI)" + export include_system_bmp="$(INCLUDE_SYSTEM_BMP)" export include_system_eventd="$(INCLUDE_SYSTEM_EVENTD)" export build_reduce_image_size="$(BUILD_REDUCE_IMAGE_SIZE)" export include_restapi="$(INCLUDE_RESTAPI)" @@ -1491,6 +1498,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export include_mux="$(INCLUDE_MUX)" export include_bootchart="$(INCLUDE_BOOTCHART)" export enable_bootchart="$(ENABLE_BOOTCHART)" + export enable_multidb="$(ENABLE_MULTIDB)" $(foreach docker, $($*_DOCKERS),\ export docker_image="$(docker)" export docker_image_name="$(basename $(docker))" diff --git a/sonic-slave-bookworm/Dockerfile.j2 b/sonic-slave-bookworm/Dockerfile.j2 index e2fc37801217..4e2c5e1eb424 100644 --- a/sonic-slave-bookworm/Dockerfile.j2 +++ b/sonic-slave-bookworm/Dockerfile.j2 @@ -145,6 +145,8 @@ RUN apt-get update && apt-get install -y eatmydata && eatmydata apt-get install libjson-c-dev \ libsystemd-dev \ libcmocka-dev \ + libprotobuf-c-dev \ + protobuf-c-compiler \ #{%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ python3-all-dbg \ @@ -281,6 +283,10 @@ RUN apt-get update && apt-get install -y eatmydata && eatmydata apt-get install libbsd-dev \ pkg-config \ check \ +# For bmp + librdkafka-dev \ + libyaml-cpp-dev \ + libsasl2-dev \ # For mpdecimal docutils-common \ libjs-sphinxdoc \ @@ -483,6 +489,14 @@ RUN eatmydata apt-get install -y \ python3-thrift {%- endif %} +{%- if CONFIGURED_ARCH == "amd64" %} +# Upgrade CMAKE version +RUN wget https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6-linux-x86_64.sh +RUN chmod +x cmake-3.27.6-linux-x86_64.sh +RUN sudo ./cmake-3.27.6-linux-x86_64.sh --skip-license --prefix=/usr +RUN sudo apt-get update -y +{%- endif %} + {%- if CROSS_BUILD_ENVIRON == "y" %} # Arm vs. amd64 versions conflict - remove amd64 packages RUN apt-get remove -y libnl-3-200 diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index 1aca2a0ba5e3..06f8cb1e65a9 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -148,6 +148,8 @@ RUN apt-get update && apt-get install -y eatmydata && eatmydata apt-get install libsystemd-dev \ python3-ipaddr \ libcmocka-dev \ + libprotobuf-c-dev \ + protobuf-c-compiler \ #{%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ python3-all-dbg \ @@ -458,6 +460,14 @@ RUN eatmydata apt install -y \ libabsl20200923 libc-ares2 python3-six libboost-thread1.74.0 libboost-dev libboost-system-dev libboost-thread-dev libboost-filesystem1.74.0 libboost-program-options1.74.0 libboost-thread1.74.0 libnanomsg5 libpcap0.8 libthrift-0.13.0 libboost-dev libboost-filesystem-dev libboost-program-options-dev libgmp-dev libnanomsg-dev libpcap-dev libtool pkg-config libthrift-dev python3-thrift thrift-compiler libboost-iostreams1.74.0 libgc1 cpp libboost-dev libboost-all-dev libboost-graph-dev libboost-iostreams-dev libfl-dev libgc-dev libgmp-dev libbpf-dev tcpdump libelf-dev llvm clang python3-pyroute2 python3-ply python3-scapy python3-setuptools python3-thrift libthrift-0.13.0 {%- endif %} +{%- if CONFIGURED_ARCH == "amd64" %} +# Upgrade CMAKE version +RUN wget https://github.com/Kitware/CMake/releases/download/v3.27.6/cmake-3.27.6-linux-x86_64.sh +RUN chmod +x cmake-3.27.6-linux-x86_64.sh +RUN sudo ./cmake-3.27.6-linux-x86_64.sh --skip-license --prefix=/usr +RUN sudo apt-get update -y +{%- endif %} + {%- if CROSS_BUILD_ENVIRON == "y" %} # Arm vs. amd64 versions conflict - remove amd64 packages RUN apt-get remove -y libnl-3-200 diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index dce6daa520a0..b65a1a08957c 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -144,6 +144,8 @@ RUN apt-get update && apt-get install -y eatmydata && eatmydata apt-get install libsystemd-dev \ python-ipaddr \ libcmocka-dev \ + libprotobuf-c-dev \ + protobuf-c-compiler \ {%- if CROSS_BUILD_ENVIRON != "y" %} python3-all-dev \ python3-all-dbg \ diff --git a/src/libnl3/Makefile b/src/libnl3/Makefile index e510363df7e9..34a40d5d2371 100644 --- a/src/libnl3/Makefile +++ b/src/libnl3/Makefile @@ -2,33 +2,36 @@ SHELL = /bin/bash .SHELLFLAGS += -e -MAIN_TARGET = libnl-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = libnl-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-genl-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-genl-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-route-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-route-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-nf-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-nf-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-cli-3-200_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb \ - libnl-cli-3-dev_$(LIBNL3_VERSION)_$(CONFIGURED_ARCH).deb +MAIN_TARGET = libnl-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb +DERIVED_TARGETS = libnl-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-genl-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-genl-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-route-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-route-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-nf-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-nf-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-cli-3-200_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb \ + libnl-cli-3-dev_$(LIBNL3_VERSION_SONIC)_$(CONFIGURED_ARCH).deb $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : # Obtaining the libnl3 rm -rf ./libnl3-$(LIBNL3_VERSION_BASE) - git clone https://github.com/thom311/libnl libnl3-$(LIBNL3_VERSION_BASE) + dget https://deb.debian.org/debian/pool/main/libn/libnl3/libnl3_$(LIBNL3_VERSION).dsc pushd libnl3-$(LIBNL3_VERSION_BASE) - git checkout tags/libnl$(subst .,_,$(LIBNL3_VERSION_BASE)) - git checkout -b sonic + # Create a git repository here for stg to apply patches + git init + git add -f * + git commit -qm "initial commit" + + # Apply patch series stg init stg import -s ../patch/series - cp -r ../debian debian ifeq ($(CROSS_BUILD_ENVIRON), y) - dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + DPKG_GENSYMBOLS_CHECK_LEVEL=0 dpkg-buildpackage -rfakeroot -b -us -uc -a$(CONFIGURED_ARCH) -Pcross,nocheck -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) else - dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) + DPKG_GENSYMBOLS_CHECK_LEVEL=0 dpkg-buildpackage -rfakeroot -b -us -uc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $(SONIC_DPKG_ADMINDIR) endif popd diff --git a/src/libnl3/debian/README.Debian b/src/libnl3/debian/README.Debian deleted file mode 100644 index 002e249bbfcb..000000000000 --- a/src/libnl3/debian/README.Debian +++ /dev/null @@ -1,17 +0,0 @@ - -libnl versions explained -======================== - -Once libnl3 hits the archive there will exist 3 versions of libnl. -libnl1 with libnl-dev - up until March 2011 the stable version -libnl2 with libnl2-dev - development version that resulted in -libnl3 with libnl3-dev - the new stable (API and ABI wise) version - -libnl1 has currently a lot of users in the archive and a lot of changes -happened since its last upstream release in 2008-01. - -The plan is therefore to introduce libnl3, port the two users of libnl2 -(freesmartphone.org libs and powertop) to it, remove libnl2 and don't touch -libnl1 and libnl-dev for now. - - -- Heiko Stuebner Sat, 21 May 2011 19:25:13 +0200 diff --git a/src/libnl3/debian/README.source b/src/libnl3/debian/README.source deleted file mode 100644 index f6e8ee70da94..000000000000 --- a/src/libnl3/debian/README.source +++ /dev/null @@ -1,10 +0,0 @@ -This package uses the simple-patchsys of cdbs. - -The following patches are used: -0001: Fixes the header inclusion in the Makefiles. - This for example make distcheck -0002: Includes all generated libraries as linktargets in the pkg-config file. - Reason: Currently libnl3 generates a bunch of child libraries. - These don't get individual .pc files from upstream at the moment but - programs linking against libnl3 using the .pc file mostly need these - additional libraries too. diff --git a/src/libnl3/debian/changelog b/src/libnl3/debian/changelog deleted file mode 100644 index 58b68510576d..000000000000 --- a/src/libnl3/debian/changelog +++ /dev/null @@ -1,1043 +0,0 @@ -libnl3 (3.5.0-1) unstable; urgency=low - - [ skuklinski ] - * route/link: IFLA_VLAN_PROTOCOL added to vlan_put_attrs - - [ Thomas Haller ] - * rtnl/link: indicate capability NL_CAPABILITY_RTNL_LINK_VLAN_PROTOCOL_SERIALZE - - [ David Ahern ] - * route/vrf: add VRF support - * neigh: add support for NTF_SELF - - [ Beniamino Galvani ] - * route/link: fix parsing of 'remote' attribute for GRE links - - [ Thomas Haller ] - * route/vlan: allow clearing vlan ingress map - - [ David Ahern ] - * link/neigh: add flags option to link and neighbor caches - - [ Thomas Haller ] - * gitignore: ignore test binaries in "tests/" - - [ Beniamino Galvani ] - * route/link: add macvtap support - * route/link: fix dump of parent link for some link types - * route/link: add ipv6 support to vxlan links - - [ Tobias Jungel ] - * route/link: corrected array size for inet_policy - - [ David Ahern ] - * route/link: add link info compare operation - * route/link/vxlan: trivial rename VXLAN_HAS_ prefix and vxi_mask - * route/link/vxlan: add support for link_info compare - - [ Andrew Vagin ] - * libnl: don't use out-of-scope buffer in nl_send_iovec() - - [ David Ahern ] - * link: add AF operation to append attributes to a GETLINK message - * lib: handle family-based parsing of IFLA_AF_SPEC attribute - - [ Thomas Haller ] - * include/linux: update copy of kernel headers - - [ David Ahern ] - * bridge: add support for VLANs - - [ Tobias Jungel ] - * route/link: handle RTEXT_FILTER_BRVLAN_COMPRESSED - * route/link/bridge: fixed return type - - [ Quentin Armitage ] - * route/link: add support for IN6_ADDR_GEN_MODE_STABLE_PRIVACY - - [ Amit Khatri ] - * lib/route: potential memory leak in pktloc.c - - [ Nick Lewycky ] - * remove null dereference from netlink/link.h - - [ David Ahern ] - * lib: update ce-mask to uint64_t - - [ Thomas Haller ] - * libnl: add nl_object_diff64() to libnl-3.sym - * lib/utils: add NL_CAPABILITY_NL_OBJECT_DIFF64 capability - - [ Przemyslaw Szczerbik ] - * lib: add type casting for nla_for_each_nested macro - - [ Tobias Klauser ] - * build: move -rdynamic from CPPFLAGS to LDFLAGS - - [ Thomas Haller ] - * route: sort entries in libnl-route-3.sym by name - - [ Haishuang Yan ] - * ipgre: add support for gretap tunnel - - [ Thadeu Lima de Souza Cascardo ] - * sit: add 6RD support - - [ Thomas Haller ] - * sit/trivial: whitespace - * sit: don't print ip6rd_prefix as integer in sit_dump_details() - * sit: refactor IS_SIT_LINK_ASSERT() - * sit: fix invalid declaration of rtnl_link_sit_get_proto() in sit.h - * sit: add public API for sit 6RD support - - [ Jonas Johansson ] - * neigh: support neighbour flag NTF_SELF - * neigh: add function to look up neighbour (fdb) by ifindex, mac and vlan - - [ Jef Oliver ] - * link: support RTEXT_FILTER_VF - - [ Thomas Haller ] - * link: allow overwriting IFLA_EXT_MASK flag in ao_get_af() function - - [ Przemyslaw Szczerbik ] - * lib: return error on Netlink attribute length overflow - - [ Thomas Egerer ] - * xfrm: fix buffer overflow when copying keys - * xfrm: check length of alg_name before strcpying it - * xfrm: make character pointers in setters const - * xfrm: fix segfault when using encapsulation templates - - [ Thomas Haller ] - * xfrm: reuse encap data in xfrmnl_sa_set_encap_tmpl() - - [ Thomas Egerer ] - * xfrm: fix memory leak for encap original address - * xfrm: attach only one xfrm alg attribute to netlink message - - [ Thomas Haller ] - * xfrm: fix memleak in build_xfrm_sa_message() error-path - - [ Sabrina Dubroca ] - * pass flags through ->io_compare op - * vxlan: properly handle LOOSE_COMPARISON in ->io_compare - * import macsec uapi headers - * lib/route: add macsec support - - [ Thomas Haller ] - * xfrm: allow avoiding buffer overflow for key in xfrmnl_sa_get_*_params() - * route/addr: fix ID comparison for AF_INET and AF_INET6 addresses - * route/addr: fix handling peer addresses for IPv4 addresses - * route/addr: add capability NL_CAPABILITY_RTNL_ADDR_PEER_FIX to indicate address fixes - * build: fix adding macsec files to include/Makefile.am - * libnl-3.2.28-rc1 release - * libnl-3.2.28 release - - [ Craig Gallek ] - * build: fixup headers for C++ inclusion - - [ Peter Wu ] - * trivial: whitespace-only fixes for src and lib - * cli: add noreturn attributes - * xfrm: fix memleak in another error path of build_xfrm_sa_message - * exp: fix a GCC 6 -Wmisleading-indentation warning - * doc: fix URLs and typo - - [ Tobias Jungel ] - * route/addr: address attributes based on object - - [ Thomas Haller ] - * lib: capability NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX for ID comparison of v4 addresses - * nl-addr: avoid read-out-of-bound in nl_addr_fill_sockaddr() - - [ André Draszik ] - * lib: add utility function nl_strerror_l() - * lib: switch to using strerror_l() instead of strerror_r() - * src: switch to using strerror_l() instead of strerror_r() - - [ Jeff Squyres ] - * compat: add linux/socket.h for __kernel_sa_family_t - - [ Jef Oliver ] - * lib/route: allow override of message type during link change - * lib/route: set IFLA_PROTINFO attribute in request message - * lib/route: modify link/bridge to set attributes - - [ Davide Caratti ] - * macsec: fix endianness of 'sci' parameter - * macsec: fix maximum ICV length - * remove multiple implementations of htonll(), ntohll() - - [ Jef Oliver ] - * lib/route: Fix appending IFLA_BRPORT_FASTLEAVE - * lib/route: Add port state translation functions - * lib/route: Extend Bridge Flags - * lib/route: Allow override of IFLA_AF_SPEC nesting - * lib/route: Support IFLA_BRIDGE_MODE - - [ Thomas Haller ] - * trivial: whitespace - * bridge: change return values for rtnl_link_bridge_get_hwmode() - - [ Michael Braun ] - * macvlan: add support for "source" mode - - [ Thomas Haller ] - * macvlan: adjust types and merge MACVLAN_HAS_MACCOUNT and MACVLAN_HAS_MACDATA - - [ Brandon Carpenter ] - * vxlan: add support for additional VXLAN attributes. - - [ Thomas Haller ] - * vxlan: fix exporting new symbols - * vxlan: remove redundant enable/disable API from vxlan - * vxlan: restore previous VXLAN_ATTR flag values - * vxlan: don't store vxlan flags as ce_mask - * vxlan: refactor setting/getting vxlan flags - * vxlan: fix error code for missing attribute - - [ Jef Oliver ] - * lib/route: Export correct ipgre functionality - - [ Thomas Haller ] - * lib/route: preserve old ABI for rtnl_link_get_pmtudisc() - - [ Thomas Egerer ] - * xfrm: fix xfrm security context management - * xfrm: add capability reference to xfrmnl_sa_set_* - - [ Thomas Haller ] - * xfrm: remove unused struct xfrmnl_sec_ctx from header files - - [ Jef Oliver ] - * lib/route: SRIOV Parse and Read support - * lib/route: SRIOV Clone Support - * lib/route: SRIOV Utility Functions - * lib/route: SRIOV Info Dump Functions - * lib/route: SRIOV Set Functionality - - [ Thomas Haller ] - * route: remove symbols of internal API from ABI - - [ Tobias Klauser ] - * lib/route: keep link stats minlen compatible with kernel < 4.6 - - [ Thomas Haller ] - * utils: add internal _nl_offset_plus_sizeof() macro - * lib/route: use _nl_offset_plus_sizeof() macro for minlen field for rtln_link_policy - - [ Jonas Johansson ] - * Add PPP support - * ppp: update code after review - * ppp: rename local struct ppp_info* variables; pi -> info - * ppp: fix type of file descriptor; uint32_t -> int32_t - - [ Thomas Haller ] - * ppp: fix API in ppp.h header - - [ Sushma Sitaram ] - * route/cls: support setting of selector fields - - [ Tobias Klauser ] - * src: nl-link-stats: use correct rtnl link stats maximum - * lib/route: add rx_nohandler link stats field - - [ Thomas Haller ] - * nl-link-stats: prefer RTNL_LINK_STATS_MAX over __RTNL_LINK_STATS_MAX - * lib/route: pass sizeof() argument to nl_memcpy() - * link: set ifi_change flags for rtnl_link_build_add_request() - * lib: use MSG_PEEK by default for nl_recvmsgs() - - [ Tobias Jungel ] - * cache_mngr: add include callback v2 - - [ Tobias Klauser ] - * cache: fix GCC warning and avoid variable shadowing - - [ Sushma Sitaram ] - * route/act: add gact tc action - - [ Tobias Klauser ] - * link: add support for IFLA_CARRIER_CHANGES - * link: add support for IFLA_PHYS_PORT_NAME - * link: add support for IFLA_PHYS_SWITCH_ID - * link: add support for IFLA_GSO_MAX_SEGS and IFLA_GSO_MAX_SIZE - * link: fix documentation for rtnl_link_get_carrier_changes - - [ Thomas Haller ] - * libnl-3.2.29-rc1 release - * utils/trivial: rename internal _nl_offset_plus_sizeof() macro to _nl_offsetofend() - - [ Beniamino Galvani ] - * Revert "macsec: fix endianness of 'sci' parameter" - * macsec: document byte order for the SCI and port attributes - - [ Thomas Haller ] - * macsec: fix endianness of sci during dump() - * libnl-3.2.29 release - - [ Tobias Klauser ] - * route/tc: Remove unused function tca_set_kind() - - [ Laine Stump ] - * sriov: fix crash in rtnl_link_sriov_parse_vflist - - [ Thomas Haller ] - * sriov: avoid buffer overrun in rtnl_link_sriov_parse_vflist() - - [ Nick Kralevich ] - * lib/utils.c: lazy initialize user_hz and psched_hz - - [ Thomas Haller ] - * lib/utils.c: ensure calling get_psched_settings() for nl_us2ticks()/nl_ticks2us() - * lib/utils.c: add mutex to get_psched_settings() - - [ Nick Kralevich ] - * fopen: add O_CLOEXEC - - [ Thomas Haller ] - * lib/attr.c: check for valid length argument in nla_reserve() - - [ Tobias Klauser ] - * sit: Fix invalid function prototypes in public header - * sriov: Add missing prototype for rtnl_link_vf_vlan_free() - * qdisc/red: Add missing prototypes for rtnl_red_set_limit() and rtnl_red_get_limit() - * fib_lookup: Add missing prototypes to public header - * link/inet6: Include own public header for function prototypes - * link/ipip: Include own public header for function prototypes - * link/ipip: Add missing prototype for rtnl_link_is_ipip() - * link/ipvti: Include own public header for function prototypes - * link/ipvti: Fix and add function prototypes in public header - * link/macsec: Include own public header for function prototypes - * link/sit: Add missing prototype for rtnl_link_is_sit() - * link/ipgre: Add prototype for ABI-preserving wrapper rtnl_link_get_pmtudisc() - * netfilter/queue: Add missing prototype for nfnl_queue_msg_build_verdict_batch() - * netfilter/exp: Add missing function prototypes - * idiag/req: Add missing function prototype - * xfrm/ae: Include own public header for function prototypes - * xfrm/lifetime: Include own public header for function prototypes - * xfrm/sa: Include own public header for function prototypes - * xfrm/selector: Include own public header for function prototypes - * xfrm/template: Include own public header for function prototypes - * pktloc: Add missing function prototypes - * ematch: Add missing function prototypes - * build: Add -Wmissing-prototypes to CPPFLAGS - - [ Jeroen Roovers ] - * build: distribute in.h in6.h libc-compat.h - - [ Thomas Haller ] - * lib: fix comment for nl_recv() about return value for non-blocking read - * lib: check for integer-overflow in nlmsg_reserve() - * build: cleanup top-level Makefile.am - * build: merge include/Makefile.am into top-level makefile - * build: merge lib/Makefile.am into top-level makefile - * build: merge man/Makefile.am into top-level makefile - * build: merge python/Makefile.am into top-level makefile - * build: merge tests/Makefile.am into top-level makefile - * build: merge src/lib/Makefile.am into top-level makefile - * build: merge src/Makefile.am into top-level makefile - * build: enable building cli during tests - * build: move compiler warning flags to separate autoconf variable - * all: enable -Wmissing-prototype warning for all components - * build: enable more warnings - - [ Roopa Prabhu ] - * route: neigh: use NDA_MASTER for neigh->n_master if available - - [ Simon Buttgereit ] - * fix build_xfrm_sp_message index condition - * fix xfrmnl_sp_set_sec_ctx length attributes - * little style fixes. - * update sp_attr condition in build_xfrm_sp_message - * add possibity to delete policy without index - * update documentation of xfrmnl_sp_get_sec_ctx - * fix of boolean operators - - [ Thomas Haller ] - * xfrm: allow quering optional arguments from xfrmnl_sp_get_sec_ctx() - * xfrm: NUL terminate the ctx_str buffer in xfrmnl_sa_set_sec_ctx() - * build: ensure build directory for generated sources exist - * build: pass --disable-dependency-tracking to `make distcheck` - * build: fix creating directories for generated sources - * build: style cleanup in doc/Makefile.am - * build: reorder checks in configure.ac - * build: add tools/build_release.sh script - * include: don't include kernel headers in public libnl3 headers - * include: restore linux header includes in public headers - * libnl-3.3.0-rc1 release - - [ Alexey Brodkin ] - * lib: escape usage of strerror_l() if it doesn't exist in libc - - [ Thomas Haller ] - * all: don't use math.h or link with libm.so - * libnl-3.3.0 release - * tools: fix building doc in build_release.sh - - [ Markus Trapp ] - * route/link: add accessor API for IPv6 flags - - [ Santhosh Kumar ] - * Provide accessors for actions (rtnl_act). - * Do not increment refcount in rtnl_*_get_action APIs. - - [ Thomas Haller ] - * route: fix symbol versioning - - [ David Ahern ] - * route: Add support for netconf - * nl-monitor: All user to specify line format - * nl-monitor: Add support for netconf caches - * route: Add support for MPLS to netconf - * Update fib_rules.h to latest kernel - * rule: Add support for l3mdev in FIB rules - - [ Thomas Haller ] - * rule: change API for setting/getting l3mdev rule property - - [ Tobias Klauser ] - * addr: add AF_VSOCK to translation table - - [ Thomas Haller ] - * build: don't build cli libraries by default - * build: allow building cli without dynamic librarires support - - [ Tobias Klauser ] - * genl: drop usage of GENL_ID_GENERATE - - [ Rasmus Villemoes ] - * lib/cache_mngr.c: avoid memleak if realloc fails - * lib/cache_mgr.c: remove pointless goto - * lib/data.c: avoid memleak if realloc fails - * lib/route/cls/u32.c: remove pointless nl_data_append calls - * lib/route/cls/u32.c: avoid overflowing an unsigned char - * lib/route/cls/u32.c: let the compiler do pointer arithmetic - * lib/route/cls/u32.c: remove bogus comment - * lib/route/qdisc/netem.c: avoid memory leak if realloc fails - - [ Thomas Haller ] - * lib/route/cls/u32.c: use UCHAR_MAX define instead of numeric 255 - * lib/route/qdisc/netem.c/trivial: fix whitespace and indentation in netem_msg_fill_raw() - * lib/route/qdisc/netem.c/trivial: don't use braces for one-line blocks - - [ Rasmus Villemoes ] - * lib/xfrm/ae.c: fix memcpy(dst, dst) bug - * lib/genl/family.c: fix if (x) y; else y; - - [ Thomas Haller ] - * all: avoid compiler warnings -Wimplicit-fallthrough - * lib/route: add /usr/lib64/tc/ search path for netem dist file - - [ David Ahern ] - * Update rtnetlink.h from kernel tree - * Import mpls header from kernel tree - - [ Thomas Haller ] - * build: add include/linux-private/linux/mpls.h to Makefile.am - - [ David Ahern ] - * addr: Add implementations for mpls_ntop and mpls_pton - * addr: Add support for AF_MPLS - * route: Add support for MPLS address family - * route: Add support for ttl propagation in MPLS routes - * Add support for label stack in nl-route commands - * Import lwtunnel encap files from kernel - * route: Add support for lwtunnel encapsulations - * route: Add support for MPLS encap - - [ Thomas Haller ] - * build: add new include/netlink-private/route/*.h files to Makefile.am - - [ Amit Khatri ] - * Potential memory leak becaue of wrong variable check. - - [ Tobias Klauser ] - * cli: include sys/select.h for select(2) - - [ Thomas Haller ] - * libnl-3.4.0-rc1 release - - [ David Ahern ] - * netconf: Put nc reference in msg_parser - - [ Jeroen Roovers ] - * build: add missing headers for issue #152 - - [ Thomas Haller ] - * libnl-3.4.0 release - * nl: add "const" specifier for nla_policy argument of parse functions [ Roopa Prabhu ] - * route: link: add family to dump messages - * route: neigh: print family in neigh dumps - - [ Sebastian Bixl ] - * route/vlan: fix memory corruption in rtnl_link_vlan_set_egress_map - - [ Thomas Haller ] - * route/vlan: fix cloning vlan link in vlan_clone() - * route/vlan: grow buffer exponentially in rtnl_link_vlan_set_egress_map() - * route/vlan: add capability to indicate heap overflow fix in rtnl_link_vlan_set_egress_map() - * route: fix handling old_nh in rtnl_route_parse() and avoid leak - - [ Jef Oliver ] - * Change rtnl_link_af_ops.ao_override_rtm behavior - - [ Chris Grahn ] - * tests: fix bug in test-create-bridge.c - - [ Steffen Vogel ] - * route: add separate function to set netem qdisc delay distribution - - [ Thomas Haller ] - * all: declare all variables at the beginning of scope (-Wdeclaration-after-statement) - * route: add rtnl_netem_set_delay_distribution_data() to linker script - * route: mark data argument for rtnl_netem_set_delay_distribution_data() as const - * route: fix memleak in rtnl_netem_set_delay_distribution_data() - * route: free previous data in rtnl_netem_set_delay_distribution_data() - * travis: enable more warnings during build - - [ Marcos Paulo de Souza ] - * tests: Add test to {de}activate loopback interface - * lib/veth.c: Disassociate link name of peer name - - [ d0u9 ] - * Coding style format - * Add new function for setting ifindex and parent of a classifier cache. - - [ Thomas Haller ] - * route: rename rtnl_cls_cache_set_tcm_params() and fix symbol versioning - - [ d0u9 ] - * Fix for cgroup filter addition problem. - - [ Thomas Haller ] - * lib: merge implementations of nl_attr_end() and nl_attr_keep_empty() - - [ Wang Jian ] - * link: add Geneve support. - - [ Thomas Haller ] - * lib/rtnl: rename public define RTNL_GENEVE_ID_MAX - - [ Roopa Prabhu ] - * lib: route: rule: add rule_groups to cache ops - - [ Jonas Johansson ] - * route/vrf: initalize clone destination with NULL in vrf_clone() - - [ David Ahern ] - * Update fib_rules.h to latest kernel - * rule: Add support for protocol and port ranges - - [ Lukáš Karas ] - * add demo program for listen conntrack events - * nf-ct-add typo - - [ Thomas Haller ] - * build: sort entries in Makefile.am and .gitignore by name - * build: indent libnl-route-3.sym with tabs - - [ Tobias Jungel ] - * neigh: set correct AF for NDA_DST - * neigh: support bridge entries for vxlan interfaces - - [ Tuetuopay ] - * cache: make "result" output argument for nl_cache_mngr_add() optional - - [ Volodymyr Bendiuga ] - * include: copy entire pkt_cls.h from linux - * route:cls: add matchall classifier - - [ Thomas Haller ] - * route/mall: fix deep cloning mall - - [ Tuetuopay ] - * route/link: fix sequence number handling in rtnl_link_change() - - [ Thomas Haller ] - * route/link: assert in rtnl_link_change() that the sequence number is set as expected - * nl-msg: explicitly initialize nlmsg_seq and nlmsg_pid field in nlmsg_alloc_simple() - - [ d0u9 ] - * route/class: add new api rtnl_class_get_by_parent() - - [ Tobias Jungel ] - * neigh: correct symbol exposed - - [ Matthieu Baerts ] - * nl: fix function name in debug msg - - [ Tobias Jungel ] - * neigh: cache updates as well query AF_BRIDGE neigh - * whitespace cleanup - * nl-neigh-list: free allocated items - * neigh: add get/set functions for NEIGH_ATTR_MASTER - * neigh_dump_line: dump master as well - - [ d0u9 ] - * Add support for cloning cgroup filter object. - - [ Tuetuopay ] - * route/link/vxlan: Fix IPv4 set_local resetting ce_mask - - [ Tobias Jungel ] - * neigh: update neighbour.h and add missing flags - - [ Thomas Winter ] - * ipgre: Fix wrong array size initialization - * ipvti: Fix wrong array size initialization - * if_tunnel: Update IFLA defines up to FWMARK - - [ Thomas Haller ] - * include/linux: update copy of kernel headers - - [ Volodymyr Bendiuga ] - * include: import linux header pkt_sched.h - * route:qdisc: add MQPRIO Qdisc - - [ Thomas Haller ] - * build: cleanup Makefile.am - * lib/tc: ensure correct error code in rtnl_tc_msg_build() - * lib/qdisc: style fixes in "lib/route/qdisc/mqprio.c" - * lib/qdisc: avoid BUG() in "lib/route/qdisc/mqprio.c" - * build: sort entries in libnl-route-3.sym - * lib/tc: fix uninitalized err variable in rtnl_tc_msg_build() - - [ Volodymyr Bendiuga ] - * route:tc: allow to set chain index for tc objects - - [ Thomas Haller ] - * route/tc: return error code from rtnl_tc_get_chain() - - [ Volodymyr Bendiuga ] - * include: import tc_vlan.h - * route:act: add vlan action - - [ Thomas Haller ] - * route/act: style fixes in "lib/route/act/vlan.c" - * route/act: return error code from act-vlan getters - - [ Ilya Pronin ] - * route/cls: fix potential memory leak - - [ Patrick Havelange ] - * nla_ok: fix overrun in attribute iteration. - - [ Wang Jian ] - * link: macvlan fixes - - [ Thomas Haller ] - * route/macvlan: style fixes in "lib/route/link/macvlan.c" - - [ Tobias Jungel ] - * route/link: expose IFLA_INFO_SLAVE_KIND - - [ Thomas Haller ] - * route/link: avoid dangling pointer in rtnl_link_set_slave_type() - - [ Byeonggon Lee ] - * tests: use nl_send_auto() instead of deprecated nl_send_auto_complete() in test-genl.c - - [ Thomas Haller ] - * doc: fix typos in example in documentation - * attr: mark nested attributes as NLA_F_NESTED - - [ xinbao ] - * Add CTA_LABELS and CTA_LABELS_MASK to ctattr_type according to the new kernel - - [ Thomas Haller ] - * route: fix strncpy() warning from coverity about unterminated string - * link/sriov: fix memleak in rtnl_link_sriov_clone() - * utils: add internal helper macros for cleanup - * lib/genl: avoid VLA in cmd_msg_parser() - * travis: enable -Wvla compiler warning in tests - * travis: build tests with NL_MORE_ASSERTS enabled - * xfrm: fix memory corruption (dangling pointer) when when setting xfrmnl_sa - * route/inet6: fix strncpy() in inet6_dump_details() - * route/tc: ensure not string truncation in rtnl_tc_set_kind() - * genl: reject invalid group names in genl_family_add_grp() - - [ Yegor Yefremov ] - * Add SPDX identifiers - - [ Thomas Haller ] - * lib/genl: fix allocating buffer of too small size in cmd_msg_parser() - - [ Michael Forney ] - * dbg: Use __func__ instead of __PRETTY_FUNCTION__ - * all: Avoid pointer arithmetic on `void *` - * lib: Don't return expression in function returning void - * lib: Don't omit second operand to `?` operator - * all: Use __typeof__ instead of typeof - * route: Remove stray `;` at top-level - * Sync linux headers to 4.19.66 - - [ Thomas Haller ] - * idiag: workaround and add comment about idiagnl_send_simple() only handling 8 bit flags - * lib: accept %NULL arguments for nl_addr_cmp() - * lib: fix error code from nfnl_exp_build_message() - - [ Eyal Birger ] - * doc/route: fix example code comments - * xfrmi: introduce XFRM interfaces support - - [ Thomas Haller ] - * xfrmi: return error code from getters for XFRM links - * route/trivial: sort entries in "libnl-route-3.sym" asciibetically - - [ d0u9 ] - * Add 64bit rate/ceil support for htb class - - [ Thomas Haller ] - * route/qdisc: adjust API for 64 bit rate/ceil support for htb class - * libnl-3.5.0 release - - -- Tamer Ahmed Thu, 02 Jan 2020 10:25:18 -0800 - -libnl3 (3.2.27-2) unstable; urgency=low - - * Add upstream fix for CVE-2017-0553 (Closes: #859948) - - -- Heiko Stuebner Mon, 10 Apr 2017 11:48:23 +0200 - -libnl3 (3.2.27-1) unstable; urgency=low - - * New upstream release - Including fixes for unusable sockets after a failed portid - generation (Closes: #808213) - - -- Heiko Stuebner Sun, 24 Jan 2016 23:54:47 +0100 - -libnl3 (3.2.26-1) unstable; urgency=low - - * New upstream release - * Provide Multiarch:same dev packages - * Add new libnl-xfrm library handling packet transformations - * Update standards to 3.9.6 - - -- Heiko Stuebner Mon, 13 Jul 2015 14:16:22 +0200 - -libnl3 (3.2.24-2) unstable; urgency=low - - * Backport two upstream fixes to prevent issues with older kernels: - - dfd0a80ec845 (route: don't enforce minlen in inet6_parse_protinfo() - (IFLA_PROTINFO) and inet_parse_af() (IFLA_AF_SPEC) - - 5206c050504f (route/addr: only sent IFA_FLAGS when needed to workaround - picky older kernels) - - -- Heiko Stuebner Fri, 18 Apr 2014 17:19:37 +0200 - -libnl3 (3.2.24-1) unstable; urgency=low - - * New upstream release - * Add new libnl-idiag library handling inetdiag requests - - -- Heiko Stuebner Sun, 16 Feb 2014 14:23:26 +0100 - -libnl3 (3.2.21-1) unstable; urgency=low - - * New upstream release (Closes: #707081) - Including CAN support (Closes: #698954) - * Add symbols files (Closes: #654758) - * Provide static libraries (Closes: #693939, #693940) - * Update standards to 3.9.4 - * Removed doc package. Libnl3 documentation is released - separately now. - - -- Heiko Stuebner Tue, 21 May 2013 11:39:13 +0200 - -libnl3 (3.2.7-4) unstable; urgency=low - - * Add watch file (Closes: #679473) - * Use dh-autoreconf to update the build system (Closes: 679474) - - -- Heiko Stuebner Sat, 30 Jun 2012 15:54:25 +0200 - -libnl3 (3.2.7-3) unstable; urgency=low - - * Fix FTBFS due to failing gen-tags.sh (Closes: #674322) - * Convert to Multi-Arch (Closes: #676611) - * Update standards to 3.9.3 - no changes - * Switch to dpkg-source format 3.0 (quilt) - - -- Heiko Stuebner Mon, 18 Jun 2012 21:19:30 +0200 - -libnl3 (3.2.7-2) unstable; urgency=low - - * Force doxygen dot-threads to 1 to circumvent segfaults on armel - * Add missing build-dependency on ghostscript - - -- Heiko Stuebner Mon, 05 Mar 2012 23:29:10 +0100 - -libnl3 (3.2.7-1) unstable; urgency=low - - * New upstream release - * Build-depend on source-highlight (Closes: #657254) - - -- Heiko Stuebner Mon, 13 Feb 2012 18:59:30 +0100 - -libnl3 (3.2.3-2) unstable; urgency=low - - * Upload to unstable - * Split split udeb to be in line with regular packages - * Move libnl and libnl-genl to /lib for iw and wpa_supplicant. - - -- Heiko Stuebner Mon, 19 Dec 2011 20:43:21 +0100 - -libnl3 (3.2.3-1) experimental; urgency=low - - * Upload to experimental to not break debian-installer - * Split library and dev packages for the individual libraries - * Add utils package - - [Mathieu Trudel-Lapierre ] - * New upstream release (Closes: #648819) - * debian/patches/0001-fix-headers.patch, - debian/patches/0002-link-sub-libs.patch, - debian/patches/0003-fix-out-of-tree-build.patch: dropped. - * debian/patches/0004-more-out-of-tree-build-fixes.patch: new patch; adjust - Makefiles some more to properly deal with the out-of-tree build when - generating headers and documentation. - * debian/control: - - rename packages to follow upstream soname. - - add python-pygments, xmlstarlet, texlive-latex-base and asciidoc to - Build-Depends. - * debian/rules: update due to upstream soname changes. - * debian/*.install: rename and update due to upstream soname changes. - * debian/libnl-3-200.install: netlink config files should be installed to - /etc/libnl, not /etc/libnl3. - * debian/libnl-3-doc.install, - debian/libnl-3-doc.doc-base: update to take into account new paths. - - -- Heiko Stuebner Tue, 06 Nov 2011 21:23:12 +0200 - -libnl3 (3.0-2) unstable; urgency=low - - * Acknowledge NMU - * Install config-files to /etc/libnl3 (Closes: #632790) - - -- Heiko Stuebner Mon, 26 Sep 2011 20:27:45 +0200 - -libnl3 (3.0-1.1) unstable; urgency=low - - * Non-maintainer upload with agreement from Heiko Stuebner - * Add libnl3-udeb package with seperate build for - debian-installer (Closes: #635962). - - -- Gaudenz Steinlin Fri, 29 Jul 2011 23:25:48 +0200 - -libnl3 (3.0-1) unstable; urgency=low - - * New upstream release (Closes: #626098) - see README.Debian for version explanation. - * Update standards to 3.9.2 - - -- Heiko Stuebner Sat, 21 May 2011 19:25:13 +0200 - -libnl2 (2.0-1) unstable; urgency=low - - * New upstream release (Closes: #603765) - * Fix compilation with binutils-gold or ld --no-add-needed - (Closes: #615745) - * Update standards - * Update build dependencies - tetex-live is not necessary - anymore (Closes: #616260) - - -- Heiko Stuebner Sun, 06 Mar 2011 18:20:47 +0100 - -libnl2 (1.99+git20091216-2) unstable; urgency=low - - * add README.source describing the patches in use. - * remove libnl*-provides - libnl2 should stay sepparate - from libnl1 for now - - -- Heiko Stuebner Wed, 10 Mar 2010 18:03:35 +0100 - -libnl2 (1.99+git20091216-1) unstable; urgency=low - - * New upstream snapshot - * New source name to enable installing libnl and libnl2 side by side - * Set myself as new maintainer for libnl2 according to agreement - with Michael Biebl - * Add debug package - * README.Debian warns of possible breakage in this snapshot - * Add Patch 0001 which fixes some errors in the build system - * Add Patch 0002 which adds libnl-?? libs to linker statement - until I can resolve this with upstream - - -- Heiko Stuebner Mon, 15 Feb 2010 21:50:35 +0100 - -libnl (1.1-5) unstable; urgency=low - - * Add symbols file for libnl1. - - -- Michael Biebl Wed, 25 Feb 2009 00:26:05 +0100 - -libnl (1.1-4) unstable; urgency=low - - * debian/control - - Add ${misc:Depends} to all binary packages. - - Bump Build-Depends on debhelper to (>= 7). - * debian/compat - - Bump debhelper compat level to 7. - * debian/rules - - Include debhelper.mk before other files as recommended by the cdbs - documentation. - - -- Michael Biebl Wed, 18 Feb 2009 13:26:53 +0100 - -libnl (1.1-3) unstable; urgency=low - - * debian/control - - Bump Standards-Version to 3.8.0. - * Switch to quilt for patch management. - * Add README.source which refers to the quilt documentation. - * debian/patches/limits.patch - - Add missing include to limits.h. This is required when compiling against - glibc 2.8. Thanks to Kees Cook for the patch. Closes: #501485 - - -- Michael Biebl Wed, 08 Oct 2008 21:34:34 +0200 - -libnl (1.1-2) unstable; urgency=low - - * debian/libnl-doc.doc-base - - Register the API documentation with doc-base. - * debian/control - - Add Suggests: doc-base to libnl-doc. - - -- Michael Biebl Wed, 05 Mar 2008 00:42:54 +0100 - -libnl (1.1-1) unstable; urgency=low - - * New stable upstream release. - * debian/patches/01-ip_mg_alg_internal_only.patch - - Removed, merged upstream. - * debian/control - - Rename binary package libnl1-pre8 to libnl1. - - [libnl1] Add Conflicts/Replaces: libnl1-pre8. - - [libnl-dev] Change Depends to libnl1. - * Rename debian/libnl1-pre8.install to debian/libnl1.install - * debian/copyright - - Minor updates and additions. - - -- Michael Biebl Thu, 10 Jan 2008 16:58:12 +0100 - -libnl (1.0~pre8-1) unstable; urgency=low - - * New upstream release. Closes: #456175 - * debian/control - - Bump Standards-Version to 3.7.3. No further changes required. - - The Vcs-* fields are now officially supported, so remove the XS- prefix. - - Rename binary package libnl1-pre6 to libnl1-pre8. - - [libnl1-pre8] Add Conflicts/Replaces: libnl1-pre6. The two versions are - not coinstallable. - - [libnl-dev] Change Depends to libnl1-pre8. - * Rename debian/libnl1-pre6.install to debian/libnl1-pre8.install. - * debian/patches/10-amd64-linux-types.patch - - Removed, merged upstream. - * debian/patches/01-ip_mg_alg_internal_only.patch - - Pull a fix from upstream. The header linux/ip_mp_alg.h is no longer part - of the linux kernel headers (i.e. linux-libc-dev) so remove it from - netlink/netlink.h. - - -- Michael Biebl Thu, 20 Dec 2007 07:45:03 +0100 - -libnl (1.0~pre6-6) unstable; urgency=low - - * debian/control - - Use the new "Homepage:" field to specify the upstream URL. - - Replace deprecated ${Source-Version} substvar with ${binary:Version}. - - Change Build-Depends: gs-gpl | gs-esp to Build-Depends: ghostscript. - - -- Michael Biebl Mon, 22 Oct 2007 07:15:29 +0200 - -libnl (1.0~pre6-5) unstable; urgency=low - - * debian/control - - Add XS-Vcs-* fields. - - Replace Build-Depends: tetex-bin with texlive-latex-base. teTeX is now - gone, superseded by texlive. - - Add Build-Depends: graphviz, gs-gpl | gs-esp. - The "dot" program is needed for generating the diagram image and "gs" - for the ps to png conversion. - - -- Michael Biebl Sun, 15 Apr 2007 15:45:48 +0200 - -libnl (1.0~pre6-4) unstable; urgency=medium - - * Autobuilders do not distinguish between build-arch and build-indep, they - simply run build. So we have to move doxygen and tetex-bin from - Build-Depends-Indep to Build-Depends. Closes: #408719 - * Urgency medium, as it fixes a FTBFS bug. - - -- Michael Biebl Fri, 12 Jan 2007 11:23:52 +0100 - -libnl (1.0~pre6-3) unstable; urgency=low - - * Build and package the API documentation. Closes: #406497 - * debian/control - - Add Build-Depends-Indep on doxygen and tetex-bin (dvips). - - Add new package libnl-doc. - - Add a "Suggests: libnl-doc" to libnl-dev. - * debian/rules - - Call "make gendoc" to build the API documentation. - * debian/libnl-doc.install - - Added. List the files that should be installed. - - -- Michael Biebl Fri, 12 Jan 2007 10:30:40 +0100 - -libnl (1.0~pre6-2) unstable; urgency=low - - * Update maintainer email address to biebl@debian.org. - - -- Michael Biebl Thu, 19 Oct 2006 20:16:09 +0200 - -libnl (1.0~pre6-1) unstable; urgency=low - - * New upstream release. - * Removed 20-autoconf-dirs.patch, merged upstream. - * Updated debian/copyright, libnl is now licensed under the LGPL 2.1. - * Updated debian/watch. - - -- Michael Biebl Fri, 18 Aug 2006 00:40:34 +0200 - -libnl (1.0~pre6~svn30-1) unstable; urgency=low - - * Updated to svn revision 30. - * Bumped Standards-Version to 3.7.2, no further changes required. - * Now that dak officially supports ~ in the version number, let's make use - of it. - * Some install directories were not set correctly, 20-autoconf-dirs.patch - fixes that. - - -- Michael Biebl Thu, 10 Aug 2006 19:51:42 +0200 - -libnl (0.99+1.0.svn21-4) unstable; urgency=low - - * Do not create bogus /usr/lib/pkg-config directory. Closes: #364601 - - -- Michael Biebl Mon, 24 Apr 2006 15:40:23 +0200 - -libnl (0.99+1.0.svn21-3) unstable; urgency=low - - * Include simple-patchsys.mk in debian/rules. - * Merged debian/patches/10-amd64-linux-types.patch from Ubuntu which fixes - the FTBFS error on AMD64. Closes: #358887 - Thanks to Scott James Remnant for this patch. - - -- Michael Biebl Sat, 1 Apr 2006 04:52:13 +0200 - -libnl (0.99+1.0.svn21-2) unstable; urgency=low - - * Initial upload to unstable. - * Renamed libnl1 to libnl1-pre6 to match the currently used so-name. - Otherwise dependent packages like NM will break on upgrades of libnl. - - -- Michael Biebl Tue, 7 Mar 2006 21:22:09 +0100 - -libnl (0.99+1.0.svn21-1) experimental; urgency=low - - * Initial release. Closes: #286847 - - -- Michael Biebl Tue, 21 Feb 2006 18:36:35 +0100 diff --git a/src/libnl3/debian/compat b/src/libnl3/debian/compat deleted file mode 100644 index f599e28b8ab0..000000000000 --- a/src/libnl3/debian/compat +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/src/libnl3/debian/control b/src/libnl3/debian/control deleted file mode 100644 index 2431ad85cf2d..000000000000 --- a/src/libnl3/debian/control +++ /dev/null @@ -1,206 +0,0 @@ -Source: libnl3 -Section: net -Priority: optional -Maintainer: Heiko Stuebner -Build-Depends: debhelper (>= 9), dh-exec (>= 0.3), cdbs (>= 0.4.93~), bison, flex, - automake, autoconf, dh-autoreconf, linux-libc-dev (>= 3.2.41), pkg-config -Standards-Version: 3.9.6 -Homepage: http://www.infradead.org/~tgr/libnl/ -#Vcs-Git: https://github.com/thom311/libnl/ -#Vcs-Browser: https://github.com/thom311/libnl/ - -Package: libnl-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - -Package: libnl-cli-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), libnl-genl-3-200 (= ${binary:Version}), libnl-nf-3-200 (= ${binary:Version}), libnl-route-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - cli helpers - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - Library for cli helpers in libnl-utils. - -Package: libnl-utils -Architecture: linux-any -Section: libs -Depends: libnl-cli-3-200 (= ${binary:Version}), libnl-idiag-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Description: Utilities for dealing with netlink sockets - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - These utilities help dealing with netlink sockets. - -Package: libnl-genl-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - generic netlink - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - API to the generic netlink protocol, an extended version of the netlink - protocol. - -Package: libnl-idiag-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - inetdiag interface - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - API to the inetdiag netlink protocol, handling inetdiag requests - -Package: libnl-nf-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), libnl-route-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - netfilter interface - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - API to netlink based netfilter configuration and monitoring interfaces. - -Package: libnl-route-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - route interface - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - API to the configuration interfaces of the NETLINK_ROUTE family. - -Package: libnl-xfrm-3-200 -Architecture: linux-any -Section: libs -Pre-Depends: ${misc:Pre-Depends} -Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} -Multi-Arch: same -Description: library for dealing with netlink sockets - package transformations - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - API to netlink based package transformations (such as encrypting - their payloads). - -Package: libnl-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends} -Conflicts: libnl-dev, libnl2-dev -Breaks: libnl3-dev -Replaces: libnl3-dev -Multi-Arch: same -Description: development library and headers for libnl-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the headers needed by all libraries and the files - that are needed to build applications using libnl3. - -Package: libnl-cli-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-genl-3-dev (= ${binary:Version}), libnl-nf-3-dev (= ${binary:Version}), libnl-route-3-dev (= ${binary:Version}), libnl-cli-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-cli-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-cli-3. - -Package: libnl-genl-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-genl-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-genl-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-genl-3. - -Package: libnl-idiag-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-idiag-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-genl-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-idiag-3. - -Package: libnl-nf-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-route-3-dev (= ${binary:Version}), libnl-nf-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-nf-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-nf-3. - -Package: libnl-route-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-route-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-route-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-route-3. - -Package: libnl-xfrm-3-dev -Architecture: linux-any -Section: libdevel -Depends: libnl-3-dev (= ${binary:Version}), libnl-xfrm-3-200 (= ${binary:Version}), ${misc:Depends} -Multi-Arch: same -Description: development library and headers for libnl-xfrm-3 - This is a library for applications dealing with netlink sockets. - The library provides an interface for raw netlink messaging and various - netlink family specific interfaces. - . - This package contains the files that are needed to build applications using - libnl-xfrm-3. diff --git a/src/libnl3/debian/copyright b/src/libnl3/debian/copyright deleted file mode 100644 index a654869d8098..000000000000 --- a/src/libnl3/debian/copyright +++ /dev/null @@ -1,160 +0,0 @@ -This package was debianized by Tamer Ahmed on -Tue, 31 Decn 2019 12:00:46 +0000. -The packaging is based on Heiko Stuebner's original packaging -of libnl1. - -It was downloaded from https://github.com/thom311/libnl/releases - -Upstream Author: - Thomas Graf - - -Copyright: - -lib/route/addr.c -include/netlink/route/addr.h - - Copyright (c) Thomas Graf - Baruch Even - - -lib/route/cls/u32.c -lib/route/cls/fw.c -lib/route/sch/htb.c -include/netlink/route/cls/fw.h -include/netlink/route/sch/htb.h - - Copyright (c) Thomas Graf - Copyright (c) Petr Gotthard - Copyright (c) Siemens AG Oesterreich - - - -lib/netfilter/log_msg.c -lib/netfilter/ct.c -include/netlink/netfilter/log_msg.h -include/netlink/netfilter/log.h -lib/netfilter/log_obj.c - - Copyright (c) Thomas Graf - Copyright (c) Philip Craig - Copyright (c) Patrick McHardy - Copyright (c) Secure Computing Corporation - - - -include/netlink/netfilter/queue_msg.h -lib/netfilter/queue_msg_obj.c -lib/netfilter/queue_msg.c -lib/netfilter/queue.c -lib/netfilter/netfilter.c -lib/netfilter/queue_obj.c -include/netlink/netfilter/netfilter.h -include/netlink/netfilter/queue.h -src/nf-queue.c - - Copyright (c) Patrick McHardy - - - -include/netlink/xfrm/selector.h -include/netlink/xfrm/sa.h -include/netlink/xfrm/ae.h -include/netlink/xfrm/sp.h -include/netlink/xfrm/template.h -include/netlink/xfrm/lifetime.h -lib/xfrm/sa.c -lib/xfrm/template.c -lib/xfrm/ae.c -lib/xfrm/sp.c -lib/xfrm/selector.c -lib/xfrm/lifetime.c - - Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ - - -All other *.c and *.h files not mentioned above are copyright of: - - Copyright (c) 2003-2006 Thomas Graf - - -License: - -src/nl-addr-add.c -src/nl-addr-list.c -src/nl-cls-add.c -src/cls/utils.c -src/cls/cgroup.c -src/cls/utils.h -src/cls/basic.c -src/nl-addr-delete.c: - - This library 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 version 2 of the License. - - 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. - -On Debian GNU/Linux systems, the complete text of the GNU General -Public License can be found in /usr/share/common-licenses/GPL-2 - - -include/netlink/xfrm/selector.h -include/netlink/xfrm/sa.h -include/netlink/xfrm/ae.h -include/netlink/xfrm/sp.h -include/netlink/xfrm/template.h -include/netlink/xfrm/lifetime.h -lib/xfrm/sa.c -lib/xfrm/template.c -lib/xfrm/ae.c -lib/xfrm/sp.c -lib/xfrm/selector.c -lib/xfrm/lifetime.c - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the - distribution. - - Neither the name of Texas Instruments Incorporated nor the names of - its contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -All other *.c and *.h files not mentioned above: - - This library is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation version 2.1 of the License. - - 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. - -On Debian GNU/Linux systems, the complete text of the GNU Lesser General -Public License can be found in /usr/share/common-licenses/LGPL-2.1 - diff --git a/src/libnl3/debian/gbp.conf b/src/libnl3/debian/gbp.conf deleted file mode 100644 index a504bacc7748..000000000000 --- a/src/libnl3/debian/gbp.conf +++ /dev/null @@ -1,16 +0,0 @@ -# Configuration file for git-buildpackage and friends - -[DEFAULT] -# the default build command: -#builder = debuild -i -I -# the default clean command: -#cleaner = debuild clean -# the default branch for upstream sources: -upstream-branch = upstream-dist -# the default branch for the debian patch: -#debian-branch = master -# the default tag formats used: -#upstream-tag = upstream/%(version)s -#debian-tag = debian/%(version)s -# use pristine-tar: -pristine-tar = true diff --git a/src/libnl3/debian/libnl-3-200.install b/src/libnl3/debian/libnl-3-200.install deleted file mode 100755 index 0a6aa3850b2c..000000000000 --- a/src/libnl3/debian/libnl-3-200.install +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/dh-exec -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3*.so.* lib/${DEB_HOST_MULTIARCH}/ -debian/tmp/etc/libnl/* etc/libnl-3 diff --git a/src/libnl3/debian/libnl-3-200.symbols b/src/libnl3/debian/libnl-3-200.symbols deleted file mode 100644 index 119e0554920f..000000000000 --- a/src/libnl3/debian/libnl-3-200.symbols +++ /dev/null @@ -1,661 +0,0 @@ -libnl-3.so.200 libnl-3-200 #MINVER# - __flags2str@Base 3.5.0-1 - __flags2str@libnl_3 3.5.0-1 - __list_str2type@Base 3.5.0-1 - __list_str2type@libnl_3 3.5.0-1 - __list_type2str@Base 3.5.0-1 - __list_type2str@libnl_3 3.5.0-1 - __nl_cache_mngt_require@Base 3.5.0-1 - __nl_cache_mngt_require@libnl_3 3.5.0-1 - __nl_cache_ops_lookup@Base 3.5.0-1 - __nl_read_num_str_file@Base 3.5.0-1 - __nl_read_num_str_file@libnl_3 3.5.0-1 - __str2flags@Base 3.5.0-1 - __str2flags@libnl_3 3.5.0-1 - __str2type@Base 3.5.0-1 - __str2type@libnl_3 3.5.0-1 - __trans_list_add@Base 3.5.0-1 - __trans_list_add@libnl_3 3.5.0-1 - __trans_list_clear@Base 3.5.0-1 - __trans_list_clear@libnl_3 3.5.0-1 - __type2str@Base 3.5.0-1 - __type2str@libnl_3 3.5.0-1 - _nl_socket_generate_local_port_no_release@Base 3.5.0-1 - _nl_socket_is_local_port_unspecified@Base 3.5.0-1 - _nl_socket_set_local_port_no_release@Base 3.5.0-1 - _nl_socket_used_ports_release_all@Base 3.5.0-1 - _nl_socket_used_ports_set@Base 3.5.0-1 - dump_from_ops@Base 3.5.0-1 - libnl_3@libnl_3 3.5.0-1 - libnl_3_2_26@libnl_3_2_26 3.5.0-1 - libnl_3_2_27@libnl_3_2_27 3.5.0-1 - libnl_3_2_28@libnl_3_2_28 3.5.0-1 - libnl_3_2_29@libnl_3_2_29 3.5.0-1 - libnl_3_5@libnl_3_5 3.5.0-1 - nl_addr2str@Base 3.5.0-1 - nl_addr2str@libnl_3 3.5.0-1 - nl_addr_alloc@Base 3.5.0-1 - nl_addr_alloc@libnl_3 3.5.0-1 - nl_addr_alloc_attr@Base 3.5.0-1 - nl_addr_alloc_attr@libnl_3 3.5.0-1 - nl_addr_build@Base 3.5.0-1 - nl_addr_build@libnl_3 3.5.0-1 - nl_addr_clone@Base 3.5.0-1 - nl_addr_clone@libnl_3 3.5.0-1 - nl_addr_cmp@Base 3.5.0-1 - nl_addr_cmp@libnl_3 3.5.0-1 - nl_addr_cmp_prefix@Base 3.5.0-1 - nl_addr_cmp_prefix@libnl_3 3.5.0-1 - nl_addr_fill_sockaddr@Base 3.5.0-1 - nl_addr_fill_sockaddr@libnl_3 3.5.0-1 - nl_addr_get@Base 3.5.0-1 - nl_addr_get@libnl_3 3.5.0-1 - nl_addr_get_binary_addr@Base 3.5.0-1 - nl_addr_get_binary_addr@libnl_3 3.5.0-1 - nl_addr_get_family@Base 3.5.0-1 - nl_addr_get_family@libnl_3 3.5.0-1 - nl_addr_get_len@Base 3.5.0-1 - nl_addr_get_len@libnl_3 3.5.0-1 - nl_addr_get_prefixlen@Base 3.5.0-1 - nl_addr_get_prefixlen@libnl_3 3.5.0-1 - nl_addr_guess_family@Base 3.5.0-1 - nl_addr_guess_family@libnl_3 3.5.0-1 - nl_addr_info@Base 3.5.0-1 - nl_addr_info@libnl_3 3.5.0-1 - nl_addr_iszero@Base 3.5.0-1 - nl_addr_iszero@libnl_3 3.5.0-1 - nl_addr_parse@Base 3.5.0-1 - nl_addr_parse@libnl_3 3.5.0-1 - nl_addr_put@Base 3.5.0-1 - nl_addr_put@libnl_3 3.5.0-1 - nl_addr_resolve@Base 3.5.0-1 - nl_addr_resolve@libnl_3 3.5.0-1 - nl_addr_set_binary_addr@Base 3.5.0-1 - nl_addr_set_binary_addr@libnl_3 3.5.0-1 - nl_addr_set_family@Base 3.5.0-1 - nl_addr_set_family@libnl_3 3.5.0-1 - nl_addr_set_prefixlen@Base 3.5.0-1 - nl_addr_set_prefixlen@libnl_3 3.5.0-1 - nl_addr_shared@Base 3.5.0-1 - nl_addr_shared@libnl_3 3.5.0-1 - nl_addr_valid@Base 3.5.0-1 - nl_addr_valid@libnl_3 3.5.0-1 - nl_af2str@Base 3.5.0-1 - nl_af2str@libnl_3 3.5.0-1 - nl_auto_complete@Base 3.5.0-1 - nl_auto_complete@libnl_3 3.5.0-1 - nl_cache_add@Base 3.5.0-1 - nl_cache_add@libnl_3 3.5.0-1 - nl_cache_alloc@Base 3.5.0-1 - nl_cache_alloc@libnl_3 3.5.0-1 - nl_cache_alloc_and_fill@Base 3.5.0-1 - nl_cache_alloc_and_fill@libnl_3 3.5.0-1 - nl_cache_alloc_name@Base 3.5.0-1 - nl_cache_alloc_name@libnl_3 3.5.0-1 - nl_cache_clear@Base 3.5.0-1 - nl_cache_clear@libnl_3 3.5.0-1 - nl_cache_clone@Base 3.5.0-1 - nl_cache_clone@libnl_3 3.5.0-1 - nl_cache_dump@Base 3.5.0-1 - nl_cache_dump@libnl_3 3.5.0-1 - nl_cache_dump_filter@Base 3.5.0-1 - nl_cache_dump_filter@libnl_3 3.5.0-1 - nl_cache_find@Base 3.5.0-1 - nl_cache_find@libnl_3 3.5.0-1 - nl_cache_foreach@Base 3.5.0-1 - nl_cache_foreach@libnl_3 3.5.0-1 - nl_cache_foreach_filter@Base 3.5.0-1 - nl_cache_foreach_filter@libnl_3 3.5.0-1 - nl_cache_free@Base 3.5.0-1 - nl_cache_free@libnl_3 3.5.0-1 - nl_cache_get@Base 3.5.0-1 - nl_cache_get@libnl_3 3.5.0-1 - nl_cache_get_first@Base 3.5.0-1 - nl_cache_get_first@libnl_3 3.5.0-1 - nl_cache_get_last@Base 3.5.0-1 - nl_cache_get_last@libnl_3 3.5.0-1 - nl_cache_get_next@Base 3.5.0-1 - nl_cache_get_next@libnl_3 3.5.0-1 - nl_cache_get_ops@Base 3.5.0-1 - nl_cache_get_ops@libnl_3 3.5.0-1 - nl_cache_get_prev@Base 3.5.0-1 - nl_cache_get_prev@libnl_3 3.5.0-1 - nl_cache_include@Base 3.5.0-1 - nl_cache_include@libnl_3 3.5.0-1 - nl_cache_include_v2@libnl_3_2_29 3.5.0-1 - nl_cache_is_empty@Base 3.5.0-1 - nl_cache_is_empty@libnl_3 3.5.0-1 - nl_cache_mark_all@Base 3.5.0-1 - nl_cache_mark_all@libnl_3 3.5.0-1 - nl_cache_mngr_add@Base 3.5.0-1 - nl_cache_mngr_add@libnl_3 3.5.0-1 - nl_cache_mngr_add_cache@Base 3.5.0-1 - nl_cache_mngr_add_cache@libnl_3 3.5.0-1 - nl_cache_mngr_add_cache_v2@libnl_3_2_29 3.5.0-1 - nl_cache_mngr_alloc@Base 3.5.0-1 - nl_cache_mngr_alloc@libnl_3 3.5.0-1 - nl_cache_mngr_data_ready@Base 3.5.0-1 - nl_cache_mngr_data_ready@libnl_3 3.5.0-1 - nl_cache_mngr_free@Base 3.5.0-1 - nl_cache_mngr_free@libnl_3 3.5.0-1 - nl_cache_mngr_get_fd@Base 3.5.0-1 - nl_cache_mngr_get_fd@libnl_3 3.5.0-1 - nl_cache_mngr_info@Base 3.5.0-1 - nl_cache_mngr_info@libnl_3 3.5.0-1 - nl_cache_mngr_poll@Base 3.5.0-1 - nl_cache_mngr_poll@libnl_3 3.5.0-1 - nl_cache_mngt_provide@Base 3.5.0-1 - nl_cache_mngt_provide@libnl_3 3.5.0-1 - nl_cache_mngt_register@Base 3.5.0-1 - nl_cache_mngt_register@libnl_3 3.5.0-1 - nl_cache_mngt_require@Base 3.5.0-1 - nl_cache_mngt_require@libnl_3 3.5.0-1 - nl_cache_mngt_require_safe@Base 3.5.0-1 - nl_cache_mngt_require_safe@libnl_3 3.5.0-1 - nl_cache_mngt_unprovide@Base 3.5.0-1 - nl_cache_mngt_unprovide@libnl_3 3.5.0-1 - nl_cache_mngt_unregister@Base 3.5.0-1 - nl_cache_mngt_unregister@libnl_3 3.5.0-1 - nl_cache_move@Base 3.5.0-1 - nl_cache_move@libnl_3 3.5.0-1 - nl_cache_nitems@Base 3.5.0-1 - nl_cache_nitems@libnl_3 3.5.0-1 - nl_cache_nitems_filter@Base 3.5.0-1 - nl_cache_nitems_filter@libnl_3 3.5.0-1 - nl_cache_ops_associate@Base 3.5.0-1 - nl_cache_ops_associate@libnl_3 3.5.0-1 - nl_cache_ops_associate_safe@Base 3.5.0-1 - nl_cache_ops_associate_safe@libnl_3 3.5.0-1 - nl_cache_ops_foreach@Base 3.5.0-1 - nl_cache_ops_foreach@libnl_3 3.5.0-1 - nl_cache_ops_get@Base 3.5.0-1 - nl_cache_ops_get@libnl_3 3.5.0-1 - nl_cache_ops_lookup@Base 3.5.0-1 - nl_cache_ops_lookup@libnl_3 3.5.0-1 - nl_cache_ops_lookup_safe@Base 3.5.0-1 - nl_cache_ops_lookup_safe@libnl_3 3.5.0-1 - nl_cache_ops_put@Base 3.5.0-1 - nl_cache_ops_put@libnl_3 3.5.0-1 - nl_cache_ops_set_flags@Base 3.5.0-1 - nl_cache_ops_set_flags@libnl_3 3.5.0-1 - nl_cache_parse@Base 3.5.0-1 - nl_cache_parse@libnl_3 3.5.0-1 - nl_cache_parse_and_add@Base 3.5.0-1 - nl_cache_parse_and_add@libnl_3 3.5.0-1 - nl_cache_pickup@Base 3.5.0-1 - nl_cache_pickup@libnl_3 3.5.0-1 - nl_cache_pickup_checkdup@Base 3.5.0-1 - nl_cache_pickup_checkdup@libnl_3 3.5.0-1 - nl_cache_put@Base 3.5.0-1 - nl_cache_put@libnl_3 3.5.0-1 - nl_cache_refill@Base 3.5.0-1 - nl_cache_refill@libnl_3 3.5.0-1 - nl_cache_remove@Base 3.5.0-1 - nl_cache_remove@libnl_3 3.5.0-1 - nl_cache_resync@Base 3.5.0-1 - nl_cache_resync@libnl_3 3.5.0-1 - nl_cache_search@Base 3.5.0-1 - nl_cache_search@libnl_3 3.5.0-1 - nl_cache_set_arg1@Base 3.5.0-1 - nl_cache_set_arg1@libnl_3 3.5.0-1 - nl_cache_set_arg2@Base 3.5.0-1 - nl_cache_set_arg2@libnl_3 3.5.0-1 - nl_cache_set_flags@Base 3.5.0-1 - nl_cache_set_flags@libnl_3 3.5.0-1 - nl_cache_subset@Base 3.5.0-1 - nl_cache_subset@libnl_3 3.5.0-1 - nl_cancel_down_bits@Base 3.5.0-1 - nl_cancel_down_bits@libnl_3 3.5.0-1 - nl_cancel_down_bytes@Base 3.5.0-1 - nl_cancel_down_bytes@libnl_3 3.5.0-1 - nl_cancel_down_us@Base 3.5.0-1 - nl_cancel_down_us@libnl_3 3.5.0-1 - nl_cb_active_type@Base 3.5.0-1 - nl_cb_active_type@libnl_3 3.5.0-1 - nl_cb_alloc@Base 3.5.0-1 - nl_cb_alloc@libnl_3 3.5.0-1 - nl_cb_clone@Base 3.5.0-1 - nl_cb_clone@libnl_3 3.5.0-1 - nl_cb_err@Base 3.5.0-1 - nl_cb_err@libnl_3 3.5.0-1 - nl_cb_get@Base 3.5.0-1 - nl_cb_get@libnl_3 3.5.0-1 - nl_cb_overwrite_recv@Base 3.5.0-1 - nl_cb_overwrite_recv@libnl_3 3.5.0-1 - nl_cb_overwrite_recvmsgs@Base 3.5.0-1 - nl_cb_overwrite_recvmsgs@libnl_3 3.5.0-1 - nl_cb_overwrite_send@Base 3.5.0-1 - nl_cb_overwrite_send@libnl_3 3.5.0-1 - nl_cb_put@Base 3.5.0-1 - nl_cb_put@libnl_3 3.5.0-1 - nl_cb_set@Base 3.5.0-1 - nl_cb_set@libnl_3 3.5.0-1 - nl_cb_set_all@Base 3.5.0-1 - nl_cb_set_all@libnl_3 3.5.0-1 - nl_close@Base 3.5.0-1 - nl_close@libnl_3 3.5.0-1 - nl_complete_msg@Base 3.5.0-1 - nl_complete_msg@libnl_3 3.5.0-1 - nl_connect@Base 3.5.0-1 - nl_connect@libnl_3 3.5.0-1 - nl_data_alloc@Base 3.5.0-1 - nl_data_alloc@libnl_3 3.5.0-1 - nl_data_alloc_attr@Base 3.5.0-1 - nl_data_alloc_attr@libnl_3 3.5.0-1 - nl_data_append@Base 3.5.0-1 - nl_data_append@libnl_3 3.5.0-1 - nl_data_clone@Base 3.5.0-1 - nl_data_clone@libnl_3 3.5.0-1 - nl_data_cmp@Base 3.5.0-1 - nl_data_cmp@libnl_3 3.5.0-1 - nl_data_free@Base 3.5.0-1 - nl_data_free@libnl_3 3.5.0-1 - nl_data_get@Base 3.5.0-1 - nl_data_get@libnl_3 3.5.0-1 - nl_data_get_size@Base 3.5.0-1 - nl_data_get_size@libnl_3 3.5.0-1 - nl_debug@Base 3.5.0-1 - nl_debug@libnl_3 3.5.0-1 - nl_debug_dp@Base 3.5.0-1 - nl_debug_dp@libnl_3 3.5.0-1 - nl_dump@Base 3.5.0-1 - nl_dump@libnl_3 3.5.0-1 - nl_dump_line@Base 3.5.0-1 - nl_dump_line@libnl_3 3.5.0-1 - nl_ether_proto2str@Base 3.5.0-1 - nl_ether_proto2str@libnl_3 3.5.0-1 - nl_get_psched_hz@Base 3.5.0-1 - nl_get_psched_hz@libnl_3 3.5.0-1 - nl_get_user_hz@Base 3.5.0-1 - nl_get_user_hz@libnl_3 3.5.0-1 - nl_geterror@Base 3.5.0-1 - nl_geterror@libnl_3 3.5.0-1 - nl_has_capability@Base 3.5.0-1 - nl_has_capability@libnl_3 3.5.0-1 - nl_hash@Base 3.5.0-1 - nl_hash@libnl_3 3.5.0-1 - nl_hash_any@Base 3.5.0-1 - nl_hash_any@libnl_3 3.5.0-1 - nl_hash_table_add@Base 3.5.0-1 - nl_hash_table_add@libnl_3 3.5.0-1 - nl_hash_table_alloc@Base 3.5.0-1 - nl_hash_table_alloc@libnl_3 3.5.0-1 - nl_hash_table_del@Base 3.5.0-1 - nl_hash_table_del@libnl_3 3.5.0-1 - nl_hash_table_free@Base 3.5.0-1 - nl_hash_table_free@libnl_3 3.5.0-1 - nl_hash_table_lookup@Base 3.5.0-1 - nl_hash_table_lookup@libnl_3 3.5.0-1 - nl_ip_proto2str@Base 3.5.0-1 - nl_ip_proto2str@libnl_3 3.5.0-1 - nl_join_groups@Base 3.5.0-1 - nl_join_groups@libnl_3 3.5.0-1 - nl_llproto2str@Base 3.5.0-1 - nl_llproto2str@libnl_3 3.5.0-1 - nl_msec2str@Base 3.5.0-1 - nl_msec2str@libnl_3 3.5.0-1 - nl_msg_dump@Base 3.5.0-1 - nl_msg_dump@libnl_3 3.5.0-1 - nl_msg_parse@Base 3.5.0-1 - nl_msg_parse@libnl_3 3.5.0-1 - nl_msgtype_lookup@Base 3.5.0-1 - nl_msgtype_lookup@libnl_3 3.5.0-1 - nl_new_line@Base 3.5.0-1 - nl_new_line@libnl_3 3.5.0-1 - nl_nlfamily2str@Base 3.5.0-1 - nl_nlfamily2str@libnl_3 3.5.0-1 - nl_nlmsg_flags2str@Base 3.5.0-1 - nl_nlmsg_flags2str@libnl_3 3.5.0-1 - nl_nlmsgtype2str@Base 3.5.0-1 - nl_nlmsgtype2str@libnl_3 3.5.0-1 - nl_object_alloc@Base 3.5.0-1 - nl_object_alloc@libnl_3 3.5.0-1 - nl_object_alloc_name@Base 3.5.0-1 - nl_object_alloc_name@libnl_3 3.5.0-1 - nl_object_attr_list@Base 3.5.0-1 - nl_object_attr_list@libnl_3 3.5.0-1 - nl_object_attrs2str@Base 3.5.0-1 - nl_object_attrs2str@libnl_3 3.5.0-1 - nl_object_clone@Base 3.5.0-1 - nl_object_clone@libnl_3 3.5.0-1 - nl_object_diff64@libnl_3_2_28 3.5.0-1 - nl_object_diff@Base 3.5.0-1 - nl_object_diff@libnl_3 3.5.0-1 - nl_object_dump@Base 3.5.0-1 - nl_object_dump@libnl_3 3.5.0-1 - nl_object_dump_buf@Base 3.5.0-1 - nl_object_dump_buf@libnl_3 3.5.0-1 - nl_object_free@Base 3.5.0-1 - nl_object_free@libnl_3 3.5.0-1 - nl_object_get@Base 3.5.0-1 - nl_object_get@libnl_3 3.5.0-1 - nl_object_get_cache@Base 3.5.0-1 - nl_object_get_cache@libnl_3 3.5.0-1 - nl_object_get_id_attrs@Base 3.5.0-1 - nl_object_get_id_attrs@libnl_3 3.5.0-1 - nl_object_get_msgtype@Base 3.5.0-1 - nl_object_get_msgtype@libnl_3 3.5.0-1 - nl_object_get_ops@Base 3.5.0-1 - nl_object_get_ops@libnl_3 3.5.0-1 - nl_object_get_refcnt@Base 3.5.0-1 - nl_object_get_refcnt@libnl_3 3.5.0-1 - nl_object_get_type@Base 3.5.0-1 - nl_object_get_type@libnl_3 3.5.0-1 - nl_object_identical@Base 3.5.0-1 - nl_object_identical@libnl_3 3.5.0-1 - nl_object_is_marked@Base 3.5.0-1 - nl_object_is_marked@libnl_3 3.5.0-1 - nl_object_keygen@Base 3.5.0-1 - nl_object_keygen@libnl_3 3.5.0-1 - nl_object_mark@Base 3.5.0-1 - nl_object_mark@libnl_3 3.5.0-1 - nl_object_match_filter@Base 3.5.0-1 - nl_object_match_filter@libnl_3 3.5.0-1 - nl_object_put@Base 3.5.0-1 - nl_object_put@libnl_3 3.5.0-1 - nl_object_shared@Base 3.5.0-1 - nl_object_shared@libnl_3 3.5.0-1 - nl_object_unmark@Base 3.5.0-1 - nl_object_unmark@libnl_3 3.5.0-1 - nl_object_update@Base 3.5.0-1 - nl_object_update@libnl_3 3.5.0-1 - nl_perror@Base 3.5.0-1 - nl_perror@libnl_3 3.5.0-1 - nl_pickup@Base 3.5.0-1 - nl_pickup@libnl_3 3.5.0-1 - nl_pickup_keep_syserr@Base 3.5.0-1 - nl_pickup_keep_syserr@libnl_3 3.5.0-1 - nl_prob2int@Base 3.5.0-1 - nl_prob2int@libnl_3 3.5.0-1 - nl_rate2str@Base 3.5.0-1 - nl_rate2str@libnl_3 3.5.0-1 - nl_recv@Base 3.5.0-1 - nl_recv@libnl_3 3.5.0-1 - nl_recvmsgs@Base 3.5.0-1 - nl_recvmsgs@libnl_3 3.5.0-1 - nl_recvmsgs_default@Base 3.5.0-1 - nl_recvmsgs_default@libnl_3 3.5.0-1 - nl_recvmsgs_report@Base 3.5.0-1 - nl_recvmsgs_report@libnl_3 3.5.0-1 - nl_send@Base 3.5.0-1 - nl_send@libnl_3 3.5.0-1 - nl_send_auto@Base 3.5.0-1 - nl_send_auto@libnl_3 3.5.0-1 - nl_send_auto_complete@Base 3.5.0-1 - nl_send_auto_complete@libnl_3 3.5.0-1 - nl_send_iovec@Base 3.5.0-1 - nl_send_iovec@libnl_3 3.5.0-1 - nl_send_simple@Base 3.5.0-1 - nl_send_simple@libnl_3 3.5.0-1 - nl_send_sync@Base 3.5.0-1 - nl_send_sync@libnl_3 3.5.0-1 - nl_sendmsg@Base 3.5.0-1 - nl_sendmsg@libnl_3 3.5.0-1 - nl_sendto@Base 3.5.0-1 - nl_sendto@libnl_3 3.5.0-1 - nl_size2int@Base 3.5.0-1 - nl_size2int@libnl_3 3.5.0-1 - nl_size2str@Base 3.5.0-1 - nl_size2str@libnl_3 3.5.0-1 - nl_socket_add_membership@Base 3.5.0-1 - nl_socket_add_membership@libnl_3 3.5.0-1 - nl_socket_add_memberships@Base 3.5.0-1 - nl_socket_add_memberships@libnl_3 3.5.0-1 - nl_socket_alloc@Base 3.5.0-1 - nl_socket_alloc@libnl_3 3.5.0-1 - nl_socket_alloc_cb@Base 3.5.0-1 - nl_socket_alloc_cb@libnl_3 3.5.0-1 - nl_socket_disable_auto_ack@Base 3.5.0-1 - nl_socket_disable_auto_ack@libnl_3 3.5.0-1 - nl_socket_disable_msg_peek@Base 3.5.0-1 - nl_socket_disable_msg_peek@libnl_3 3.5.0-1 - nl_socket_disable_seq_check@Base 3.5.0-1 - nl_socket_disable_seq_check@libnl_3 3.5.0-1 - nl_socket_drop_membership@Base 3.5.0-1 - nl_socket_drop_membership@libnl_3 3.5.0-1 - nl_socket_drop_memberships@Base 3.5.0-1 - nl_socket_drop_memberships@libnl_3 3.5.0-1 - nl_socket_enable_auto_ack@Base 3.5.0-1 - nl_socket_enable_auto_ack@libnl_3 3.5.0-1 - nl_socket_enable_msg_peek@Base 3.5.0-1 - nl_socket_enable_msg_peek@libnl_3 3.5.0-1 - nl_socket_free@Base 3.5.0-1 - nl_socket_free@libnl_3 3.5.0-1 - nl_socket_get_cb@Base 3.5.0-1 - nl_socket_get_cb@libnl_3 3.5.0-1 - nl_socket_get_fd@Base 3.5.0-1 - nl_socket_get_fd@libnl_3 3.5.0-1 - nl_socket_get_local_port@Base 3.5.0-1 - nl_socket_get_local_port@libnl_3 3.5.0-1 - nl_socket_get_msg_buf_size@Base 3.5.0-1 - nl_socket_get_msg_buf_size@libnl_3 3.5.0-1 - nl_socket_get_peer_groups@Base 3.5.0-1 - nl_socket_get_peer_groups@libnl_3 3.5.0-1 - nl_socket_get_peer_port@Base 3.5.0-1 - nl_socket_get_peer_port@libnl_3 3.5.0-1 - nl_socket_modify_cb@Base 3.5.0-1 - nl_socket_modify_cb@libnl_3 3.5.0-1 - nl_socket_modify_err_cb@Base 3.5.0-1 - nl_socket_modify_err_cb@libnl_3 3.5.0-1 - nl_socket_recv_pktinfo@Base 3.5.0-1 - nl_socket_recv_pktinfo@libnl_3 3.5.0-1 - nl_socket_set_buffer_size@Base 3.5.0-1 - nl_socket_set_buffer_size@libnl_3 3.5.0-1 - nl_socket_set_cb@Base 3.5.0-1 - nl_socket_set_cb@libnl_3 3.5.0-1 - nl_socket_set_fd@Base 3.5.0-1 - nl_socket_set_fd@libnl_3_2_26 3.5.0-1 - nl_socket_set_local_port@Base 3.5.0-1 - nl_socket_set_local_port@libnl_3 3.5.0-1 - nl_socket_set_msg_buf_size@Base 3.5.0-1 - nl_socket_set_msg_buf_size@libnl_3 3.5.0-1 - nl_socket_set_nonblocking@Base 3.5.0-1 - nl_socket_set_nonblocking@libnl_3 3.5.0-1 - nl_socket_set_passcred@Base 3.5.0-1 - nl_socket_set_passcred@libnl_3 3.5.0-1 - nl_socket_set_peer_groups@Base 3.5.0-1 - nl_socket_set_peer_groups@libnl_3 3.5.0-1 - nl_socket_set_peer_port@Base 3.5.0-1 - nl_socket_set_peer_port@libnl_3 3.5.0-1 - nl_socket_use_seq@Base 3.5.0-1 - nl_socket_use_seq@libnl_3 3.5.0-1 - nl_str2af@Base 3.5.0-1 - nl_str2af@libnl_3 3.5.0-1 - nl_str2ether_proto@Base 3.5.0-1 - nl_str2ether_proto@libnl_3 3.5.0-1 - nl_str2ip_proto@Base 3.5.0-1 - nl_str2ip_proto@libnl_3 3.5.0-1 - nl_str2llproto@Base 3.5.0-1 - nl_str2llproto@libnl_3 3.5.0-1 - nl_str2msec@Base 3.5.0-1 - nl_str2msec@libnl_3 3.5.0-1 - nl_str2nlfamily@Base 3.5.0-1 - nl_str2nlfamily@libnl_3 3.5.0-1 - nl_str2nlmsgtype@Base 3.5.0-1 - nl_str2nlmsgtype@libnl_3 3.5.0-1 - nl_strerror_l@libnl_3_2_29 3.5.0-1 - nl_syserr2nlerr@Base 3.5.0-1 - nl_syserr2nlerr@libnl_3 3.5.0-1 - nl_ticks2us@Base 3.5.0-1 - nl_ticks2us@libnl_3 3.5.0-1 - nl_us2ticks@Base 3.5.0-1 - nl_us2ticks@libnl_3 3.5.0-1 - nl_ver_maj@Base 3.5.0-1 - nl_ver_maj@libnl_3 3.5.0-1 - nl_ver_mic@Base 3.5.0-1 - nl_ver_mic@libnl_3 3.5.0-1 - nl_ver_min@Base 3.5.0-1 - nl_ver_min@libnl_3 3.5.0-1 - nl_ver_num@Base 3.5.0-1 - nl_ver_num@libnl_3 3.5.0-1 - nl_wait_for_ack@Base 3.5.0-1 - nl_wait_for_ack@libnl_3 3.5.0-1 - nla_attr_size@Base 3.5.0-1 - nla_attr_size@libnl_3 3.5.0-1 - nla_data@Base 3.5.0-1 - nla_data@libnl_3 3.5.0-1 - nla_find@Base 3.5.0-1 - nla_find@libnl_3 3.5.0-1 - nla_get_flag@Base 3.5.0-1 - nla_get_flag@libnl_3 3.5.0-1 - nla_get_msecs@Base 3.5.0-1 - nla_get_msecs@libnl_3 3.5.0-1 - nla_get_s16@Base 3.5.0-1 - nla_get_s16@libnl_3_2_27 3.5.0-1 - nla_get_s32@Base 3.5.0-1 - nla_get_s32@libnl_3_2_27 3.5.0-1 - nla_get_s64@Base 3.5.0-1 - nla_get_s64@libnl_3_2_27 3.5.0-1 - nla_get_s8@Base 3.5.0-1 - nla_get_s8@libnl_3_2_27 3.5.0-1 - nla_get_string@Base 3.5.0-1 - nla_get_string@libnl_3 3.5.0-1 - nla_get_u16@Base 3.5.0-1 - nla_get_u16@libnl_3 3.5.0-1 - nla_get_u32@Base 3.5.0-1 - nla_get_u32@libnl_3 3.5.0-1 - nla_get_u64@Base 3.5.0-1 - nla_get_u64@libnl_3 3.5.0-1 - nla_get_u8@Base 3.5.0-1 - nla_get_u8@libnl_3 3.5.0-1 - nla_is_nested@Base 3.5.0-1 - nla_is_nested@libnl_3 3.5.0-1 - nla_len@Base 3.5.0-1 - nla_len@libnl_3 3.5.0-1 - nla_memcmp@Base 3.5.0-1 - nla_memcmp@libnl_3 3.5.0-1 - nla_memcpy@Base 3.5.0-1 - nla_memcpy@libnl_3 3.5.0-1 - nla_nest_cancel@Base 3.5.0-1 - nla_nest_cancel@libnl_3 3.5.0-1 - nla_nest_end@Base 3.5.0-1 - nla_nest_end@libnl_3 3.5.0-1 - nla_nest_end_keep_empty@libnl_3_5 3.5.0-1 - nla_nest_start@Base 3.5.0-1 - nla_nest_start@libnl_3 3.5.0-1 - nla_next@Base 3.5.0-1 - nla_next@libnl_3 3.5.0-1 - nla_ok@Base 3.5.0-1 - nla_ok@libnl_3 3.5.0-1 - nla_padlen@Base 3.5.0-1 - nla_padlen@libnl_3 3.5.0-1 - nla_parse@Base 3.5.0-1 - nla_parse@libnl_3 3.5.0-1 - nla_parse_nested@Base 3.5.0-1 - nla_parse_nested@libnl_3 3.5.0-1 - nla_put@Base 3.5.0-1 - nla_put@libnl_3 3.5.0-1 - nla_put_addr@Base 3.5.0-1 - nla_put_addr@libnl_3 3.5.0-1 - nla_put_data@Base 3.5.0-1 - nla_put_data@libnl_3 3.5.0-1 - nla_put_flag@Base 3.5.0-1 - nla_put_flag@libnl_3 3.5.0-1 - nla_put_msecs@Base 3.5.0-1 - nla_put_msecs@libnl_3 3.5.0-1 - nla_put_nested@Base 3.5.0-1 - nla_put_nested@libnl_3 3.5.0-1 - nla_put_s16@Base 3.5.0-1 - nla_put_s16@libnl_3_2_27 3.5.0-1 - nla_put_s32@Base 3.5.0-1 - nla_put_s32@libnl_3_2_27 3.5.0-1 - nla_put_s64@Base 3.5.0-1 - nla_put_s64@libnl_3_2_27 3.5.0-1 - nla_put_s8@Base 3.5.0-1 - nla_put_s8@libnl_3_2_27 3.5.0-1 - nla_put_string@Base 3.5.0-1 - nla_put_string@libnl_3 3.5.0-1 - nla_put_u16@Base 3.5.0-1 - nla_put_u16@libnl_3 3.5.0-1 - nla_put_u32@Base 3.5.0-1 - nla_put_u32@libnl_3 3.5.0-1 - nla_put_u64@Base 3.5.0-1 - nla_put_u64@libnl_3 3.5.0-1 - nla_put_u8@Base 3.5.0-1 - nla_put_u8@libnl_3 3.5.0-1 - nla_reserve@Base 3.5.0-1 - nla_reserve@libnl_3 3.5.0-1 - nla_strcmp@Base 3.5.0-1 - nla_strcmp@libnl_3 3.5.0-1 - nla_strdup@Base 3.5.0-1 - nla_strdup@libnl_3 3.5.0-1 - nla_strlcpy@Base 3.5.0-1 - nla_strlcpy@libnl_3 3.5.0-1 - nla_total_size@Base 3.5.0-1 - nla_total_size@libnl_3 3.5.0-1 - nla_type@Base 3.5.0-1 - nla_type@libnl_3 3.5.0-1 - nla_validate@Base 3.5.0-1 - nla_validate@libnl_3 3.5.0-1 - nlmsg_alloc@Base 3.5.0-1 - nlmsg_alloc@libnl_3 3.5.0-1 - nlmsg_alloc_simple@Base 3.5.0-1 - nlmsg_alloc_simple@libnl_3 3.5.0-1 - nlmsg_alloc_size@Base 3.5.0-1 - nlmsg_alloc_size@libnl_3 3.5.0-1 - nlmsg_append@Base 3.5.0-1 - nlmsg_append@libnl_3 3.5.0-1 - nlmsg_attrdata@Base 3.5.0-1 - nlmsg_attrdata@libnl_3 3.5.0-1 - nlmsg_attrlen@Base 3.5.0-1 - nlmsg_attrlen@libnl_3 3.5.0-1 - nlmsg_convert@Base 3.5.0-1 - nlmsg_convert@libnl_3 3.5.0-1 - nlmsg_data@Base 3.5.0-1 - nlmsg_data@libnl_3 3.5.0-1 - nlmsg_datalen@Base 3.5.0-1 - nlmsg_datalen@libnl_3 3.5.0-1 - nlmsg_expand@Base 3.5.0-1 - nlmsg_expand@libnl_3 3.5.0-1 - nlmsg_find_attr@Base 3.5.0-1 - nlmsg_find_attr@libnl_3 3.5.0-1 - nlmsg_free@Base 3.5.0-1 - nlmsg_free@libnl_3 3.5.0-1 - nlmsg_get@Base 3.5.0-1 - nlmsg_get@libnl_3 3.5.0-1 - nlmsg_get_creds@Base 3.5.0-1 - nlmsg_get_creds@libnl_3 3.5.0-1 - nlmsg_get_dst@Base 3.5.0-1 - nlmsg_get_dst@libnl_3 3.5.0-1 - nlmsg_get_max_size@Base 3.5.0-1 - nlmsg_get_max_size@libnl_3 3.5.0-1 - nlmsg_get_proto@Base 3.5.0-1 - nlmsg_get_proto@libnl_3 3.5.0-1 - nlmsg_get_src@Base 3.5.0-1 - nlmsg_get_src@libnl_3 3.5.0-1 - nlmsg_hdr@Base 3.5.0-1 - nlmsg_hdr@libnl_3 3.5.0-1 - nlmsg_inherit@Base 3.5.0-1 - nlmsg_inherit@libnl_3 3.5.0-1 - nlmsg_next@Base 3.5.0-1 - nlmsg_next@libnl_3 3.5.0-1 - nlmsg_ok@Base 3.5.0-1 - nlmsg_ok@libnl_3 3.5.0-1 - nlmsg_padlen@Base 3.5.0-1 - nlmsg_padlen@libnl_3 3.5.0-1 - nlmsg_parse@Base 3.5.0-1 - nlmsg_parse@libnl_3 3.5.0-1 - nlmsg_put@Base 3.5.0-1 - nlmsg_put@libnl_3 3.5.0-1 - nlmsg_reserve@Base 3.5.0-1 - nlmsg_reserve@libnl_3 3.5.0-1 - nlmsg_set_creds@Base 3.5.0-1 - nlmsg_set_creds@libnl_3 3.5.0-1 - nlmsg_set_default_size@Base 3.5.0-1 - nlmsg_set_default_size@libnl_3 3.5.0-1 - nlmsg_set_dst@Base 3.5.0-1 - nlmsg_set_dst@libnl_3 3.5.0-1 - nlmsg_set_proto@Base 3.5.0-1 - nlmsg_set_proto@libnl_3 3.5.0-1 - nlmsg_set_src@Base 3.5.0-1 - nlmsg_set_src@libnl_3 3.5.0-1 - nlmsg_size@Base 3.5.0-1 - nlmsg_size@libnl_3 3.5.0-1 - nlmsg_tail@Base 3.5.0-1 - nlmsg_tail@libnl_3 3.5.0-1 - nlmsg_total_size@Base 3.5.0-1 - nlmsg_total_size@libnl_3 3.5.0-1 - nlmsg_valid_hdr@Base 3.5.0-1 - nlmsg_valid_hdr@libnl_3 3.5.0-1 - nlmsg_validate@Base 3.5.0-1 - nlmsg_validate@libnl_3 3.5.0-1 diff --git a/src/libnl3/debian/libnl-3-dev.install b/src/libnl3/debian/libnl-3-dev.install deleted file mode 100755 index 3715b8b22bbd..000000000000 --- a/src/libnl3/debian/libnl-3-dev.install +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/dh-exec -debian/tmp/usr/include/* -debian/tmp/usr/lib/*/pkgconfig/libnl-3* -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3.so lib/${DEB_HOST_MULTIARCH}/ -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3.a lib/${DEB_HOST_MULTIARCH}/ diff --git a/src/libnl3/debian/libnl-cli-3-200.install b/src/libnl3/debian/libnl-cli-3-200.install deleted file mode 100755 index 6735ec9d14b1..000000000000 --- a/src/libnl3/debian/libnl-cli-3-200.install +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/dh-exec -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-cli-3*.so.* -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/cls/*.so usr/lib/${DEB_HOST_MULTIARCH}/libnl-3/cli/cls -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/qdisc/*.so usr/lib/${DEB_HOST_MULTIARCH}/libnl-3/cli/qdisc diff --git a/src/libnl3/debian/libnl-cli-3-200.symbols b/src/libnl3/debian/libnl-cli-3-200.symbols deleted file mode 100644 index 2d21c139623c..000000000000 --- a/src/libnl3/debian/libnl-cli-3-200.symbols +++ /dev/null @@ -1,226 +0,0 @@ -basic.so libnl-cli-3-200 #MINVER# -bfifo.so libnl-cli-3-200 #MINVER# -blackhole.so libnl-cli-3-200 #MINVER# -cgroup.so libnl-cli-3-200 #MINVER# -fq_codel.so libnl-cli-3-200 #MINVER# -hfsc.so libnl-cli-3-200 #MINVER# -htb.so libnl-cli-3-200 #MINVER# -ingress.so libnl-cli-3-200 #MINVER# -libnl-cli-3.so.200 libnl-cli-3-200 #MINVER# - libnl_3@libnl_3 3.5.0-1 - libnl_3_2_28@libnl_3_2_28 3.5.0-1 - nl_cli_addr_alloc@Base 3.5.0-1 - nl_cli_addr_alloc@libnl_3 3.5.0-1 - nl_cli_addr_parse@Base 3.5.0-1 - nl_cli_addr_parse@libnl_3 3.5.0-1 - nl_cli_addr_parse_broadcast@Base 3.5.0-1 - nl_cli_addr_parse_broadcast@libnl_3 3.5.0-1 - nl_cli_addr_parse_dev@Base 3.5.0-1 - nl_cli_addr_parse_dev@libnl_3 3.5.0-1 - nl_cli_addr_parse_family@Base 3.5.0-1 - nl_cli_addr_parse_family@libnl_3 3.5.0-1 - nl_cli_addr_parse_label@Base 3.5.0-1 - nl_cli_addr_parse_label@libnl_3 3.5.0-1 - nl_cli_addr_parse_local@Base 3.5.0-1 - nl_cli_addr_parse_local@libnl_3 3.5.0-1 - nl_cli_addr_parse_peer@Base 3.5.0-1 - nl_cli_addr_parse_peer@libnl_3 3.5.0-1 - nl_cli_addr_parse_preferred@Base 3.5.0-1 - nl_cli_addr_parse_preferred@libnl_3 3.5.0-1 - nl_cli_addr_parse_scope@Base 3.5.0-1 - nl_cli_addr_parse_scope@libnl_3 3.5.0-1 - nl_cli_addr_parse_valid@Base 3.5.0-1 - nl_cli_addr_parse_valid@libnl_3 3.5.0-1 - nl_cli_alloc_cache@Base 3.5.0-1 - nl_cli_alloc_cache@libnl_3 3.5.0-1 - nl_cli_alloc_cache_flags@libnl_3_2_28 3.5.0-1 - nl_cli_alloc_socket@Base 3.5.0-1 - nl_cli_alloc_socket@libnl_3 3.5.0-1 - nl_cli_class_alloc@Base 3.5.0-1 - nl_cli_class_alloc@libnl_3 3.5.0-1 - nl_cli_class_alloc_cache@Base 3.5.0-1 - nl_cli_class_alloc_cache@libnl_3 3.5.0-1 - nl_cli_cls_alloc@Base 3.5.0-1 - nl_cli_cls_alloc@libnl_3 3.5.0-1 - nl_cli_cls_alloc_cache@Base 3.5.0-1 - nl_cli_cls_alloc_cache@libnl_3 3.5.0-1 - nl_cli_cls_parse_ematch@Base 3.5.0-1 - nl_cli_cls_parse_ematch@libnl_3 3.5.0-1 - nl_cli_cls_parse_proto@Base 3.5.0-1 - nl_cli_cls_parse_proto@libnl_3 3.5.0-1 - nl_cli_confirm@Base 3.5.0-1 - nl_cli_confirm@libnl_3 3.5.0-1 - nl_cli_connect@Base 3.5.0-1 - nl_cli_connect@libnl_3 3.5.0-1 - nl_cli_ct_alloc@Base 3.5.0-1 - nl_cli_ct_alloc@libnl_3 3.5.0-1 - nl_cli_ct_alloc_cache@Base 3.5.0-1 - nl_cli_ct_alloc_cache@libnl_3 3.5.0-1 - nl_cli_ct_parse_dst@Base 3.5.0-1 - nl_cli_ct_parse_dst@libnl_3 3.5.0-1 - nl_cli_ct_parse_dst_port@Base 3.5.0-1 - nl_cli_ct_parse_dst_port@libnl_3 3.5.0-1 - nl_cli_ct_parse_family@Base 3.5.0-1 - nl_cli_ct_parse_family@libnl_3 3.5.0-1 - nl_cli_ct_parse_id@Base 3.5.0-1 - nl_cli_ct_parse_id@libnl_3 3.5.0-1 - nl_cli_ct_parse_mark@Base 3.5.0-1 - nl_cli_ct_parse_mark@libnl_3 3.5.0-1 - nl_cli_ct_parse_protocol@Base 3.5.0-1 - nl_cli_ct_parse_protocol@libnl_3 3.5.0-1 - nl_cli_ct_parse_src@Base 3.5.0-1 - nl_cli_ct_parse_src@libnl_3 3.5.0-1 - nl_cli_ct_parse_src_port@Base 3.5.0-1 - nl_cli_ct_parse_src_port@libnl_3 3.5.0-1 - nl_cli_ct_parse_status@Base 3.5.0-1 - nl_cli_ct_parse_status@libnl_3 3.5.0-1 - nl_cli_ct_parse_tcp_state@Base 3.5.0-1 - nl_cli_ct_parse_tcp_state@libnl_3 3.5.0-1 - nl_cli_ct_parse_timeout@Base 3.5.0-1 - nl_cli_ct_parse_timeout@libnl_3 3.5.0-1 - nl_cli_ct_parse_use@Base 3.5.0-1 - nl_cli_ct_parse_use@libnl_3 3.5.0-1 - nl_cli_ct_parse_zone@Base 3.5.0-1 - nl_cli_ct_parse_zone@libnl_3 3.5.0-1 - nl_cli_exp_alloc@Base 3.5.0-1 - nl_cli_exp_alloc@libnl_3 3.5.0-1 - nl_cli_exp_alloc_cache@Base 3.5.0-1 - nl_cli_exp_alloc_cache@libnl_3 3.5.0-1 - nl_cli_exp_parse_class@Base 3.5.0-1 - nl_cli_exp_parse_class@libnl_3 3.5.0-1 - nl_cli_exp_parse_dst@Base 3.5.0-1 - nl_cli_exp_parse_dst@libnl_3 3.5.0-1 - nl_cli_exp_parse_dst_port@Base 3.5.0-1 - nl_cli_exp_parse_dst_port@libnl_3 3.5.0-1 - nl_cli_exp_parse_family@Base 3.5.0-1 - nl_cli_exp_parse_family@libnl_3 3.5.0-1 - nl_cli_exp_parse_flags@Base 3.5.0-1 - nl_cli_exp_parse_flags@libnl_3 3.5.0-1 - nl_cli_exp_parse_fn@Base 3.5.0-1 - nl_cli_exp_parse_fn@libnl_3 3.5.0-1 - nl_cli_exp_parse_helper_name@Base 3.5.0-1 - nl_cli_exp_parse_helper_name@libnl_3 3.5.0-1 - nl_cli_exp_parse_icmp_code@Base 3.5.0-1 - nl_cli_exp_parse_icmp_code@libnl_3 3.5.0-1 - nl_cli_exp_parse_icmp_id@Base 3.5.0-1 - nl_cli_exp_parse_icmp_id@libnl_3 3.5.0-1 - nl_cli_exp_parse_icmp_type@Base 3.5.0-1 - nl_cli_exp_parse_icmp_type@libnl_3 3.5.0-1 - nl_cli_exp_parse_id@Base 3.5.0-1 - nl_cli_exp_parse_id@libnl_3 3.5.0-1 - nl_cli_exp_parse_l4protonum@Base 3.5.0-1 - nl_cli_exp_parse_l4protonum@libnl_3 3.5.0-1 - nl_cli_exp_parse_nat_dir@Base 3.5.0-1 - nl_cli_exp_parse_nat_dir@libnl_3 3.5.0-1 - nl_cli_exp_parse_src@Base 3.5.0-1 - nl_cli_exp_parse_src@libnl_3 3.5.0-1 - nl_cli_exp_parse_src_port@Base 3.5.0-1 - nl_cli_exp_parse_src_port@libnl_3 3.5.0-1 - nl_cli_exp_parse_timeout@Base 3.5.0-1 - nl_cli_exp_parse_timeout@libnl_3 3.5.0-1 - nl_cli_exp_parse_zone@Base 3.5.0-1 - nl_cli_exp_parse_zone@libnl_3 3.5.0-1 - nl_cli_fatal@Base 3.5.0-1 - nl_cli_fatal@libnl_3 3.5.0-1 - nl_cli_link_alloc@Base 3.5.0-1 - nl_cli_link_alloc@libnl_3 3.5.0-1 - nl_cli_link_alloc_cache@Base 3.5.0-1 - nl_cli_link_alloc_cache@libnl_3 3.5.0-1 - nl_cli_link_alloc_cache_family@Base 3.5.0-1 - nl_cli_link_alloc_cache_family@libnl_3 3.5.0-1 - nl_cli_link_alloc_cache_family_flags@libnl_3_2_28 3.5.0-1 - nl_cli_link_alloc_cache_flags@libnl_3_2_28 3.5.0-1 - nl_cli_link_parse_family@Base 3.5.0-1 - nl_cli_link_parse_family@libnl_3 3.5.0-1 - nl_cli_link_parse_ifalias@Base 3.5.0-1 - nl_cli_link_parse_ifalias@libnl_3 3.5.0-1 - nl_cli_link_parse_ifindex@Base 3.5.0-1 - nl_cli_link_parse_ifindex@libnl_3 3.5.0-1 - nl_cli_link_parse_mtu@Base 3.5.0-1 - nl_cli_link_parse_mtu@libnl_3 3.5.0-1 - nl_cli_link_parse_name@Base 3.5.0-1 - nl_cli_link_parse_name@libnl_3 3.5.0-1 - nl_cli_link_parse_txqlen@Base 3.5.0-1 - nl_cli_link_parse_txqlen@libnl_3 3.5.0-1 - nl_cli_link_parse_weight@Base 3.5.0-1 - nl_cli_link_parse_weight@libnl_3 3.5.0-1 - nl_cli_load_module@Base 3.5.0-1 - nl_cli_load_module@libnl_3 3.5.0-1 - nl_cli_neigh_alloc@Base 3.5.0-1 - nl_cli_neigh_alloc@libnl_3 3.5.0-1 - nl_cli_neigh_parse_dev@Base 3.5.0-1 - nl_cli_neigh_parse_dev@libnl_3 3.5.0-1 - nl_cli_neigh_parse_dst@Base 3.5.0-1 - nl_cli_neigh_parse_dst@libnl_3 3.5.0-1 - nl_cli_neigh_parse_family@Base 3.5.0-1 - nl_cli_neigh_parse_family@libnl_3 3.5.0-1 - nl_cli_neigh_parse_lladdr@Base 3.5.0-1 - nl_cli_neigh_parse_lladdr@libnl_3 3.5.0-1 - nl_cli_neigh_parse_state@Base 3.5.0-1 - nl_cli_neigh_parse_state@libnl_3 3.5.0-1 - nl_cli_parse_dumptype@Base 3.5.0-1 - nl_cli_parse_dumptype@libnl_3 3.5.0-1 - nl_cli_parse_u32@Base 3.5.0-1 - nl_cli_parse_u32@libnl_3 3.5.0-1 - nl_cli_print_version@Base 3.5.0-1 - nl_cli_print_version@libnl_3 3.5.0-1 - nl_cli_qdisc_alloc@Base 3.5.0-1 - nl_cli_qdisc_alloc@libnl_3 3.5.0-1 - nl_cli_route_alloc@Base 3.5.0-1 - nl_cli_route_alloc@libnl_3 3.5.0-1 - nl_cli_route_alloc_cache@Base 3.5.0-1 - nl_cli_route_alloc_cache@libnl_3 3.5.0-1 - nl_cli_route_parse_dst@Base 3.5.0-1 - nl_cli_route_parse_dst@libnl_3 3.5.0-1 - nl_cli_route_parse_family@Base 3.5.0-1 - nl_cli_route_parse_family@libnl_3 3.5.0-1 - nl_cli_route_parse_iif@Base 3.5.0-1 - nl_cli_route_parse_iif@libnl_3 3.5.0-1 - nl_cli_route_parse_metric@Base 3.5.0-1 - nl_cli_route_parse_metric@libnl_3 3.5.0-1 - nl_cli_route_parse_nexthop@Base 3.5.0-1 - nl_cli_route_parse_nexthop@libnl_3 3.5.0-1 - nl_cli_route_parse_pref_src@Base 3.5.0-1 - nl_cli_route_parse_pref_src@libnl_3 3.5.0-1 - nl_cli_route_parse_prio@Base 3.5.0-1 - nl_cli_route_parse_prio@libnl_3 3.5.0-1 - nl_cli_route_parse_protocol@Base 3.5.0-1 - nl_cli_route_parse_protocol@libnl_3 3.5.0-1 - nl_cli_route_parse_scope@Base 3.5.0-1 - nl_cli_route_parse_scope@libnl_3 3.5.0-1 - nl_cli_route_parse_src@Base 3.5.0-1 - nl_cli_route_parse_src@libnl_3 3.5.0-1 - nl_cli_route_parse_table@Base 3.5.0-1 - nl_cli_route_parse_table@libnl_3 3.5.0-1 - nl_cli_route_parse_type@Base 3.5.0-1 - nl_cli_route_parse_type@libnl_3 3.5.0-1 - nl_cli_rule_alloc@Base 3.5.0-1 - nl_cli_rule_alloc@libnl_3 3.5.0-1 - nl_cli_rule_alloc_cache@Base 3.5.0-1 - nl_cli_rule_alloc_cache@libnl_3 3.5.0-1 - nl_cli_rule_parse_family@Base 3.5.0-1 - nl_cli_rule_parse_family@libnl_3 3.5.0-1 - nl_cli_tc_lookup@Base 3.5.0-1 - nl_cli_tc_lookup@libnl_3 3.5.0-1 - nl_cli_tc_parse_dev@Base 3.5.0-1 - nl_cli_tc_parse_dev@libnl_3 3.5.0-1 - nl_cli_tc_parse_handle@Base 3.5.0-1 - nl_cli_tc_parse_handle@libnl_3 3.5.0-1 - nl_cli_tc_parse_kind@Base 3.5.0-1 - nl_cli_tc_parse_kind@libnl_3 3.5.0-1 - nl_cli_tc_parse_linktype@Base 3.5.0-1 - nl_cli_tc_parse_linktype@libnl_3 3.5.0-1 - nl_cli_tc_parse_mpu@Base 3.5.0-1 - nl_cli_tc_parse_mpu@libnl_3 3.5.0-1 - nl_cli_tc_parse_mtu@Base 3.5.0-1 - nl_cli_tc_parse_mtu@libnl_3 3.5.0-1 - nl_cli_tc_parse_overhead@Base 3.5.0-1 - nl_cli_tc_parse_overhead@libnl_3 3.5.0-1 - nl_cli_tc_parse_parent@Base 3.5.0-1 - nl_cli_tc_parse_parent@libnl_3 3.5.0-1 - nl_cli_tc_register@Base 3.5.0-1 - nl_cli_tc_register@libnl_3 3.5.0-1 - nl_cli_tc_unregister@Base 3.5.0-1 - nl_cli_tc_unregister@libnl_3 3.5.0-1 -pfifo.so libnl-cli-3-200 #MINVER# -plug.so libnl-cli-3-200 #MINVER# diff --git a/src/libnl3/debian/libnl-cli-3-dev.install b/src/libnl3/debian/libnl-cli-3-dev.install deleted file mode 100644 index 66aa3b3d9457..000000000000 --- a/src/libnl3/debian/libnl-cli-3-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/*/pkgconfig/libnl-cli-3* -debian/tmp/usr/lib/*/libnl-cli-3*.so -debian/tmp/usr/lib/*/libnl-cli-3*.a diff --git a/src/libnl3/debian/libnl-genl-3-200.install b/src/libnl3/debian/libnl-genl-3-200.install deleted file mode 100755 index d9d6fae40b21..000000000000 --- a/src/libnl3/debian/libnl-genl-3-200.install +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/dh-exec -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.so.* lib/${DEB_HOST_MULTIARCH}/ diff --git a/src/libnl3/debian/libnl-genl-3-200.symbols b/src/libnl3/debian/libnl-genl-3-200.symbols deleted file mode 100644 index 0eb2e3be4460..000000000000 --- a/src/libnl3/debian/libnl-genl-3-200.symbols +++ /dev/null @@ -1,88 +0,0 @@ -libnl-genl-3.so.200 libnl-genl-3-200 #MINVER# - genl_connect@Base 3.5.0-1 - genl_connect@libnl_3 3.5.0-1 - genl_ctrl_alloc_cache@Base 3.5.0-1 - genl_ctrl_alloc_cache@libnl_3 3.5.0-1 - genl_ctrl_resolve@Base 3.5.0-1 - genl_ctrl_resolve@libnl_3 3.5.0-1 - genl_ctrl_resolve_grp@Base 3.5.0-1 - genl_ctrl_resolve_grp@libnl_3 3.5.0-1 - genl_ctrl_search@Base 3.5.0-1 - genl_ctrl_search@libnl_3 3.5.0-1 - genl_ctrl_search_by_name@Base 3.5.0-1 - genl_ctrl_search_by_name@libnl_3 3.5.0-1 - genl_family_add_grp@Base 3.5.0-1 - genl_family_add_grp@libnl_3 3.5.0-1 - genl_family_add_op@Base 3.5.0-1 - genl_family_add_op@libnl_3 3.5.0-1 - genl_family_alloc@Base 3.5.0-1 - genl_family_alloc@libnl_3 3.5.0-1 - genl_family_get_hdrsize@Base 3.5.0-1 - genl_family_get_hdrsize@libnl_3 3.5.0-1 - genl_family_get_id@Base 3.5.0-1 - genl_family_get_id@libnl_3 3.5.0-1 - genl_family_get_maxattr@Base 3.5.0-1 - genl_family_get_maxattr@libnl_3 3.5.0-1 - genl_family_get_name@Base 3.5.0-1 - genl_family_get_name@libnl_3 3.5.0-1 - genl_family_get_version@Base 3.5.0-1 - genl_family_get_version@libnl_3 3.5.0-1 - genl_family_ops@Base 3.5.0-1 - genl_family_ops@libnl_3 3.5.0-1 - genl_family_put@Base 3.5.0-1 - genl_family_put@libnl_3 3.5.0-1 - genl_family_set_hdrsize@Base 3.5.0-1 - genl_family_set_hdrsize@libnl_3 3.5.0-1 - genl_family_set_id@Base 3.5.0-1 - genl_family_set_id@libnl_3 3.5.0-1 - genl_family_set_maxattr@Base 3.5.0-1 - genl_family_set_maxattr@libnl_3 3.5.0-1 - genl_family_set_name@Base 3.5.0-1 - genl_family_set_name@libnl_3 3.5.0-1 - genl_family_set_version@Base 3.5.0-1 - genl_family_set_version@libnl_3 3.5.0-1 - genl_handle_msg@Base 3.5.0-1 - genl_handle_msg@libnl_3 3.5.0-1 - genl_mngt_resolve@Base 3.5.0-1 - genl_mngt_resolve@libnl_3 3.5.0-1 - genl_op2name@Base 3.5.0-1 - genl_op2name@libnl_3 3.5.0-1 - genl_ops_resolve@Base 3.5.0-1 - genl_ops_resolve@libnl_3 3.5.0-1 - genl_register@Base 3.5.0-1 - genl_register@libnl_3 3.5.0-1 - genl_register_family@Base 3.5.0-1 - genl_register_family@libnl_3 3.5.0-1 - genl_resolve_id@Base 3.5.0-1 - genl_resolve_id@libnl_3 3.5.0-1 - genl_send_simple@Base 3.5.0-1 - genl_send_simple@libnl_3 3.5.0-1 - genl_unregister@Base 3.5.0-1 - genl_unregister@libnl_3 3.5.0-1 - genl_unregister_family@Base 3.5.0-1 - genl_unregister_family@libnl_3 3.5.0-1 - genlmsg_attrdata@Base 3.5.0-1 - genlmsg_attrdata@libnl_3 3.5.0-1 - genlmsg_attrlen@Base 3.5.0-1 - genlmsg_attrlen@libnl_3 3.5.0-1 - genlmsg_data@Base 3.5.0-1 - genlmsg_data@libnl_3 3.5.0-1 - genlmsg_hdr@Base 3.5.0-1 - genlmsg_hdr@libnl_3 3.5.0-1 - genlmsg_len@Base 3.5.0-1 - genlmsg_len@libnl_3 3.5.0-1 - genlmsg_parse@Base 3.5.0-1 - genlmsg_parse@libnl_3 3.5.0-1 - genlmsg_put@Base 3.5.0-1 - genlmsg_put@libnl_3 3.5.0-1 - genlmsg_user_data@Base 3.5.0-1 - genlmsg_user_data@libnl_3 3.5.0-1 - genlmsg_user_datalen@Base 3.5.0-1 - genlmsg_user_datalen@libnl_3 3.5.0-1 - genlmsg_user_hdr@Base 3.5.0-1 - genlmsg_user_hdr@libnl_3 3.5.0-1 - genlmsg_valid_hdr@Base 3.5.0-1 - genlmsg_valid_hdr@libnl_3 3.5.0-1 - genlmsg_validate@Base 3.5.0-1 - genlmsg_validate@libnl_3 3.5.0-1 - libnl_3@libnl_3 3.5.0-1 diff --git a/src/libnl3/debian/libnl-genl-3-dev.install b/src/libnl3/debian/libnl-genl-3-dev.install deleted file mode 100755 index cbc6b51ef474..000000000000 --- a/src/libnl3/debian/libnl-genl-3-dev.install +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/dh-exec -debian/tmp/usr/lib/*/pkgconfig/libnl-genl-3* -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.so lib/${DEB_HOST_MULTIARCH}/ -debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.a lib/${DEB_HOST_MULTIARCH}/ diff --git a/src/libnl3/debian/libnl-idiag-3-200.install b/src/libnl3/debian/libnl-idiag-3-200.install deleted file mode 100644 index f6d6b8064e5f..000000000000 --- a/src/libnl3/debian/libnl-idiag-3-200.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/*/libnl-idiag-3*.so.* diff --git a/src/libnl3/debian/libnl-idiag-3-200.symbols b/src/libnl3/debian/libnl-idiag-3-200.symbols deleted file mode 100644 index 13cf27c7c8ac..000000000000 --- a/src/libnl3/debian/libnl-idiag-3-200.symbols +++ /dev/null @@ -1,206 +0,0 @@ -libnl-idiag-3.so.200 libnl-idiag-3-200 #MINVER# - idiagnl_attrs2str@Base 3.5.0-1 - idiagnl_attrs2str@libnl_3 3.5.0-1 - idiagnl_connect@Base 3.5.0-1 - idiagnl_connect@libnl_3 3.5.0-1 - idiagnl_exts2str@Base 3.5.0-1 - idiagnl_exts2str@libnl_3 3.5.0-1 - idiagnl_meminfo_alloc@Base 3.5.0-1 - idiagnl_meminfo_alloc@libnl_3 3.5.0-1 - idiagnl_meminfo_get@Base 3.5.0-1 - idiagnl_meminfo_get@libnl_3 3.5.0-1 - idiagnl_meminfo_get_fmem@Base 3.5.0-1 - idiagnl_meminfo_get_fmem@libnl_3 3.5.0-1 - idiagnl_meminfo_get_rmem@Base 3.5.0-1 - idiagnl_meminfo_get_rmem@libnl_3 3.5.0-1 - idiagnl_meminfo_get_tmem@Base 3.5.0-1 - idiagnl_meminfo_get_tmem@libnl_3 3.5.0-1 - idiagnl_meminfo_get_wmem@Base 3.5.0-1 - idiagnl_meminfo_get_wmem@libnl_3 3.5.0-1 - idiagnl_meminfo_obj_ops@Base 3.5.0-1 - idiagnl_meminfo_obj_ops@libnl_3 3.5.0-1 - idiagnl_meminfo_put@Base 3.5.0-1 - idiagnl_meminfo_put@libnl_3 3.5.0-1 - idiagnl_meminfo_set_fmem@Base 3.5.0-1 - idiagnl_meminfo_set_fmem@libnl_3 3.5.0-1 - idiagnl_meminfo_set_rmem@Base 3.5.0-1 - idiagnl_meminfo_set_rmem@libnl_3 3.5.0-1 - idiagnl_meminfo_set_tmem@Base 3.5.0-1 - idiagnl_meminfo_set_tmem@libnl_3 3.5.0-1 - idiagnl_meminfo_set_wmem@Base 3.5.0-1 - idiagnl_meminfo_set_wmem@libnl_3 3.5.0-1 - idiagnl_msg_alloc@Base 3.5.0-1 - idiagnl_msg_alloc@libnl_3 3.5.0-1 - idiagnl_msg_alloc_cache@Base 3.5.0-1 - idiagnl_msg_alloc_cache@libnl_3 3.5.0-1 - idiagnl_msg_get@Base 3.5.0-1 - idiagnl_msg_get@libnl_3 3.5.0-1 - idiagnl_msg_get_cong@Base 3.5.0-1 - idiagnl_msg_get_cong@libnl_3 3.5.0-1 - idiagnl_msg_get_dport@Base 3.5.0-1 - idiagnl_msg_get_dport@libnl_3 3.5.0-1 - idiagnl_msg_get_dst@Base 3.5.0-1 - idiagnl_msg_get_dst@libnl_3 3.5.0-1 - idiagnl_msg_get_expires@Base 3.5.0-1 - idiagnl_msg_get_expires@libnl_3 3.5.0-1 - idiagnl_msg_get_family@Base 3.5.0-1 - idiagnl_msg_get_family@libnl_3 3.5.0-1 - idiagnl_msg_get_ifindex@Base 3.5.0-1 - idiagnl_msg_get_ifindex@libnl_3 3.5.0-1 - idiagnl_msg_get_inode@Base 3.5.0-1 - idiagnl_msg_get_inode@libnl_3 3.5.0-1 - idiagnl_msg_get_meminfo@Base 3.5.0-1 - idiagnl_msg_get_meminfo@libnl_3 3.5.0-1 - idiagnl_msg_get_retrans@Base 3.5.0-1 - idiagnl_msg_get_retrans@libnl_3 3.5.0-1 - idiagnl_msg_get_rqueue@Base 3.5.0-1 - idiagnl_msg_get_rqueue@libnl_3 3.5.0-1 - idiagnl_msg_get_shutdown@Base 3.5.0-1 - idiagnl_msg_get_shutdown@libnl_3 3.5.0-1 - idiagnl_msg_get_sport@Base 3.5.0-1 - idiagnl_msg_get_sport@libnl_3 3.5.0-1 - idiagnl_msg_get_src@Base 3.5.0-1 - idiagnl_msg_get_src@libnl_3 3.5.0-1 - idiagnl_msg_get_state@Base 3.5.0-1 - idiagnl_msg_get_state@libnl_3 3.5.0-1 - idiagnl_msg_get_tclass@Base 3.5.0-1 - idiagnl_msg_get_tclass@libnl_3 3.5.0-1 - idiagnl_msg_get_tcpinfo@Base 3.5.0-1 - idiagnl_msg_get_tcpinfo@libnl_3 3.5.0-1 - idiagnl_msg_get_timer@Base 3.5.0-1 - idiagnl_msg_get_timer@libnl_3 3.5.0-1 - idiagnl_msg_get_tos@Base 3.5.0-1 - idiagnl_msg_get_tos@libnl_3 3.5.0-1 - idiagnl_msg_get_uid@Base 3.5.0-1 - idiagnl_msg_get_uid@libnl_3 3.5.0-1 - idiagnl_msg_get_vegasinfo@Base 3.5.0-1 - idiagnl_msg_get_vegasinfo@libnl_3 3.5.0-1 - idiagnl_msg_get_wqueue@Base 3.5.0-1 - idiagnl_msg_get_wqueue@libnl_3 3.5.0-1 - idiagnl_msg_obj_ops@Base 3.5.0-1 - idiagnl_msg_obj_ops@libnl_3 3.5.0-1 - idiagnl_msg_parse@Base 3.5.0-1 - idiagnl_msg_parse@libnl_3 3.5.0-1 - idiagnl_msg_put@Base 3.5.0-1 - idiagnl_msg_put@libnl_3 3.5.0-1 - idiagnl_msg_set_cong@Base 3.5.0-1 - idiagnl_msg_set_cong@libnl_3 3.5.0-1 - idiagnl_msg_set_dport@Base 3.5.0-1 - idiagnl_msg_set_dport@libnl_3 3.5.0-1 - idiagnl_msg_set_dst@Base 3.5.0-1 - idiagnl_msg_set_dst@libnl_3 3.5.0-1 - idiagnl_msg_set_expires@Base 3.5.0-1 - idiagnl_msg_set_expires@libnl_3 3.5.0-1 - idiagnl_msg_set_family@Base 3.5.0-1 - idiagnl_msg_set_family@libnl_3 3.5.0-1 - idiagnl_msg_set_ifindex@Base 3.5.0-1 - idiagnl_msg_set_ifindex@libnl_3 3.5.0-1 - idiagnl_msg_set_inode@Base 3.5.0-1 - idiagnl_msg_set_inode@libnl_3 3.5.0-1 - idiagnl_msg_set_meminfo@Base 3.5.0-1 - idiagnl_msg_set_meminfo@libnl_3 3.5.0-1 - idiagnl_msg_set_retrans@Base 3.5.0-1 - idiagnl_msg_set_retrans@libnl_3 3.5.0-1 - idiagnl_msg_set_rqueue@Base 3.5.0-1 - idiagnl_msg_set_rqueue@libnl_3 3.5.0-1 - idiagnl_msg_set_shutdown@Base 3.5.0-1 - idiagnl_msg_set_shutdown@libnl_3 3.5.0-1 - idiagnl_msg_set_sport@Base 3.5.0-1 - idiagnl_msg_set_sport@libnl_3 3.5.0-1 - idiagnl_msg_set_src@Base 3.5.0-1 - idiagnl_msg_set_src@libnl_3 3.5.0-1 - idiagnl_msg_set_state@Base 3.5.0-1 - idiagnl_msg_set_state@libnl_3 3.5.0-1 - idiagnl_msg_set_tclass@Base 3.5.0-1 - idiagnl_msg_set_tclass@libnl_3 3.5.0-1 - idiagnl_msg_set_tcpinfo@Base 3.5.0-1 - idiagnl_msg_set_tcpinfo@libnl_3 3.5.0-1 - idiagnl_msg_set_timer@Base 3.5.0-1 - idiagnl_msg_set_timer@libnl_3 3.5.0-1 - idiagnl_msg_set_tos@Base 3.5.0-1 - idiagnl_msg_set_tos@libnl_3 3.5.0-1 - idiagnl_msg_set_uid@Base 3.5.0-1 - idiagnl_msg_set_uid@libnl_3 3.5.0-1 - idiagnl_msg_set_vegasinfo@Base 3.5.0-1 - idiagnl_msg_set_vegasinfo@libnl_3 3.5.0-1 - idiagnl_msg_set_wqueue@Base 3.5.0-1 - idiagnl_msg_set_wqueue@libnl_3 3.5.0-1 - idiagnl_req_alloc@Base 3.5.0-1 - idiagnl_req_alloc@libnl_3 3.5.0-1 - idiagnl_req_get@Base 3.5.0-1 - idiagnl_req_get@libnl_3 3.5.0-1 - idiagnl_req_get_dbs@Base 3.5.0-1 - idiagnl_req_get_dbs@libnl_3 3.5.0-1 - idiagnl_req_get_dst@Base 3.5.0-1 - idiagnl_req_get_dst@libnl_3 3.5.0-1 - idiagnl_req_get_ext@Base 3.5.0-1 - idiagnl_req_get_ext@libnl_3 3.5.0-1 - idiagnl_req_get_family@Base 3.5.0-1 - idiagnl_req_get_family@libnl_3 3.5.0-1 - idiagnl_req_get_ifindex@Base 3.5.0-1 - idiagnl_req_get_ifindex@libnl_3 3.5.0-1 - idiagnl_req_get_src@Base 3.5.0-1 - idiagnl_req_get_src@libnl_3 3.5.0-1 - idiagnl_req_get_states@Base 3.5.0-1 - idiagnl_req_get_states@libnl_3 3.5.0-1 - idiagnl_req_obj_ops@Base 3.5.0-1 - idiagnl_req_obj_ops@libnl_3 3.5.0-1 - idiagnl_req_parse@Base 3.5.0-1 - idiagnl_req_parse@libnl_3 3.5.0-1 - idiagnl_req_put@Base 3.5.0-1 - idiagnl_req_put@libnl_3 3.5.0-1 - idiagnl_req_set_dbs@Base 3.5.0-1 - idiagnl_req_set_dbs@libnl_3 3.5.0-1 - idiagnl_req_set_dst@Base 3.5.0-1 - idiagnl_req_set_dst@libnl_3 3.5.0-1 - idiagnl_req_set_ext@Base 3.5.0-1 - idiagnl_req_set_ext@libnl_3 3.5.0-1 - idiagnl_req_set_family@Base 3.5.0-1 - idiagnl_req_set_family@libnl_3 3.5.0-1 - idiagnl_req_set_ifindex@Base 3.5.0-1 - idiagnl_req_set_ifindex@libnl_3 3.5.0-1 - idiagnl_req_set_src@Base 3.5.0-1 - idiagnl_req_set_src@libnl_3 3.5.0-1 - idiagnl_req_set_states@Base 3.5.0-1 - idiagnl_req_set_states@libnl_3 3.5.0-1 - idiagnl_send_simple@Base 3.5.0-1 - idiagnl_send_simple@libnl_3 3.5.0-1 - idiagnl_shutdown2str@Base 3.5.0-1 - idiagnl_shutdown2str@libnl_3 3.5.0-1 - idiagnl_state2str@Base 3.5.0-1 - idiagnl_state2str@libnl_3 3.5.0-1 - idiagnl_str2state@Base 3.5.0-1 - idiagnl_str2state@libnl_3 3.5.0-1 - idiagnl_str2timer@Base 3.5.0-1 - idiagnl_str2timer@libnl_3 3.5.0-1 - idiagnl_tcpopts2str@Base 3.5.0-1 - idiagnl_tcpopts2str@libnl_3 3.5.0-1 - idiagnl_tcpstate2str@Base 3.5.0-1 - idiagnl_tcpstate2str@libnl_3 3.5.0-1 - idiagnl_timer2str@Base 3.5.0-1 - idiagnl_timer2str@libnl_3 3.5.0-1 - idiagnl_vegasinfo_alloc@Base 3.5.0-1 - idiagnl_vegasinfo_alloc@libnl_3 3.5.0-1 - idiagnl_vegasinfo_get@Base 3.5.0-1 - idiagnl_vegasinfo_get@libnl_3 3.5.0-1 - idiagnl_vegasinfo_get_enabled@Base 3.5.0-1 - idiagnl_vegasinfo_get_enabled@libnl_3 3.5.0-1 - idiagnl_vegasinfo_get_minrtt@Base 3.5.0-1 - idiagnl_vegasinfo_get_minrtt@libnl_3 3.5.0-1 - idiagnl_vegasinfo_get_rtt@Base 3.5.0-1 - idiagnl_vegasinfo_get_rtt@libnl_3 3.5.0-1 - idiagnl_vegasinfo_get_rttcnt@Base 3.5.0-1 - idiagnl_vegasinfo_get_rttcnt@libnl_3 3.5.0-1 - idiagnl_vegasinfo_obj_ops@Base 3.5.0-1 - idiagnl_vegasinfo_obj_ops@libnl_3 3.5.0-1 - idiagnl_vegasinfo_put@Base 3.5.0-1 - idiagnl_vegasinfo_put@libnl_3 3.5.0-1 - idiagnl_vegasinfo_set_enabled@Base 3.5.0-1 - idiagnl_vegasinfo_set_enabled@libnl_3 3.5.0-1 - idiagnl_vegasinfo_set_minrtt@Base 3.5.0-1 - idiagnl_vegasinfo_set_minrtt@libnl_3 3.5.0-1 - idiagnl_vegasinfo_set_rtt@Base 3.5.0-1 - idiagnl_vegasinfo_set_rtt@libnl_3 3.5.0-1 - idiagnl_vegasinfo_set_rttcnt@Base 3.5.0-1 - idiagnl_vegasinfo_set_rttcnt@libnl_3 3.5.0-1 - libnl_3@libnl_3 3.5.0-1 diff --git a/src/libnl3/debian/libnl-idiag-3-dev.install b/src/libnl3/debian/libnl-idiag-3-dev.install deleted file mode 100644 index 6f19a6e83d61..000000000000 --- a/src/libnl3/debian/libnl-idiag-3-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/*/pkgconfig/libnl-idiag-3* -debian/tmp/usr/lib/*/libnl-idiag-3*.so -debian/tmp/usr/lib/*/libnl-idiag-3*.a diff --git a/src/libnl3/debian/libnl-nf-3-200.install b/src/libnl3/debian/libnl-nf-3-200.install deleted file mode 100644 index 6d65611ed34e..000000000000 --- a/src/libnl3/debian/libnl-nf-3-200.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/*/libnl-nf-3*.so.* diff --git a/src/libnl3/debian/libnl-nf-3-200.symbols b/src/libnl3/debian/libnl-nf-3-200.symbols deleted file mode 100644 index 2ce4d2ad0ffc..000000000000 --- a/src/libnl3/debian/libnl-nf-3-200.symbols +++ /dev/null @@ -1,620 +0,0 @@ -libnl-nf-3.so.200 libnl-nf-3-200 #MINVER# - ct_obj_ops@Base 3.5.0-1 - ct_obj_ops@libnl_3 3.5.0-1 - exp_obj_ops@Base 3.5.0-1 - exp_obj_ops@libnl_3 3.5.0-1 - libnl_3@libnl_3 3.5.0-1 - log_msg_obj_ops@Base 3.5.0-1 - log_msg_obj_ops@libnl_3 3.5.0-1 - log_obj_ops@Base 3.5.0-1 - log_obj_ops@libnl_3 3.5.0-1 - nfnl_connect@Base 3.5.0-1 - nfnl_connect@libnl_3 3.5.0-1 - nfnl_ct_add@Base 3.5.0-1 - nfnl_ct_add@libnl_3 3.5.0-1 - nfnl_ct_alloc@Base 3.5.0-1 - nfnl_ct_alloc@libnl_3 3.5.0-1 - nfnl_ct_alloc_cache@Base 3.5.0-1 - nfnl_ct_alloc_cache@libnl_3 3.5.0-1 - nfnl_ct_build_add_request@Base 3.5.0-1 - nfnl_ct_build_add_request@libnl_3 3.5.0-1 - nfnl_ct_build_delete_request@Base 3.5.0-1 - nfnl_ct_build_delete_request@libnl_3 3.5.0-1 - nfnl_ct_build_query_request@Base 3.5.0-1 - nfnl_ct_build_query_request@libnl_3 3.5.0-1 - nfnl_ct_del@Base 3.5.0-1 - nfnl_ct_del@libnl_3 3.5.0-1 - nfnl_ct_dump_request@Base 3.5.0-1 - nfnl_ct_dump_request@libnl_3 3.5.0-1 - nfnl_ct_get@Base 3.5.0-1 - nfnl_ct_get@libnl_3 3.5.0-1 - nfnl_ct_get_bytes@Base 3.5.0-1 - nfnl_ct_get_bytes@libnl_3 3.5.0-1 - nfnl_ct_get_dst@Base 3.5.0-1 - nfnl_ct_get_dst@libnl_3 3.5.0-1 - nfnl_ct_get_dst_port@Base 3.5.0-1 - nfnl_ct_get_dst_port@libnl_3 3.5.0-1 - nfnl_ct_get_family@Base 3.5.0-1 - nfnl_ct_get_family@libnl_3 3.5.0-1 - nfnl_ct_get_icmp_code@Base 3.5.0-1 - nfnl_ct_get_icmp_code@libnl_3 3.5.0-1 - nfnl_ct_get_icmp_id@Base 3.5.0-1 - nfnl_ct_get_icmp_id@libnl_3 3.5.0-1 - nfnl_ct_get_icmp_type@Base 3.5.0-1 - nfnl_ct_get_icmp_type@libnl_3 3.5.0-1 - nfnl_ct_get_id@Base 3.5.0-1 - nfnl_ct_get_id@libnl_3 3.5.0-1 - nfnl_ct_get_mark@Base 3.5.0-1 - nfnl_ct_get_mark@libnl_3 3.5.0-1 - nfnl_ct_get_packets@Base 3.5.0-1 - nfnl_ct_get_packets@libnl_3 3.5.0-1 - nfnl_ct_get_proto@Base 3.5.0-1 - nfnl_ct_get_proto@libnl_3 3.5.0-1 - nfnl_ct_get_src@Base 3.5.0-1 - nfnl_ct_get_src@libnl_3 3.5.0-1 - nfnl_ct_get_src_port@Base 3.5.0-1 - nfnl_ct_get_src_port@libnl_3 3.5.0-1 - nfnl_ct_get_status@Base 3.5.0-1 - nfnl_ct_get_status@libnl_3 3.5.0-1 - nfnl_ct_get_tcp_state@Base 3.5.0-1 - nfnl_ct_get_tcp_state@libnl_3 3.5.0-1 - nfnl_ct_get_timeout@Base 3.5.0-1 - nfnl_ct_get_timeout@libnl_3 3.5.0-1 - nfnl_ct_get_timestamp@Base 3.5.0-1 - nfnl_ct_get_timestamp@libnl_3 3.5.0-1 - nfnl_ct_get_use@Base 3.5.0-1 - nfnl_ct_get_use@libnl_3 3.5.0-1 - nfnl_ct_get_zone@Base 3.5.0-1 - nfnl_ct_get_zone@libnl_3 3.5.0-1 - nfnl_ct_put@Base 3.5.0-1 - nfnl_ct_put@libnl_3 3.5.0-1 - nfnl_ct_query@Base 3.5.0-1 - nfnl_ct_query@libnl_3 3.5.0-1 - nfnl_ct_set_bytes@Base 3.5.0-1 - nfnl_ct_set_bytes@libnl_3 3.5.0-1 - nfnl_ct_set_dst@Base 3.5.0-1 - nfnl_ct_set_dst@libnl_3 3.5.0-1 - nfnl_ct_set_dst_port@Base 3.5.0-1 - nfnl_ct_set_dst_port@libnl_3 3.5.0-1 - nfnl_ct_set_family@Base 3.5.0-1 - nfnl_ct_set_family@libnl_3 3.5.0-1 - nfnl_ct_set_icmp_code@Base 3.5.0-1 - nfnl_ct_set_icmp_code@libnl_3 3.5.0-1 - nfnl_ct_set_icmp_id@Base 3.5.0-1 - nfnl_ct_set_icmp_id@libnl_3 3.5.0-1 - nfnl_ct_set_icmp_type@Base 3.5.0-1 - nfnl_ct_set_icmp_type@libnl_3 3.5.0-1 - nfnl_ct_set_id@Base 3.5.0-1 - nfnl_ct_set_id@libnl_3 3.5.0-1 - nfnl_ct_set_mark@Base 3.5.0-1 - nfnl_ct_set_mark@libnl_3 3.5.0-1 - nfnl_ct_set_packets@Base 3.5.0-1 - nfnl_ct_set_packets@libnl_3 3.5.0-1 - nfnl_ct_set_proto@Base 3.5.0-1 - nfnl_ct_set_proto@libnl_3 3.5.0-1 - nfnl_ct_set_src@Base 3.5.0-1 - nfnl_ct_set_src@libnl_3 3.5.0-1 - nfnl_ct_set_src_port@Base 3.5.0-1 - nfnl_ct_set_src_port@libnl_3 3.5.0-1 - nfnl_ct_set_status@Base 3.5.0-1 - nfnl_ct_set_status@libnl_3 3.5.0-1 - nfnl_ct_set_tcp_state@Base 3.5.0-1 - nfnl_ct_set_tcp_state@libnl_3 3.5.0-1 - nfnl_ct_set_timeout@Base 3.5.0-1 - nfnl_ct_set_timeout@libnl_3 3.5.0-1 - nfnl_ct_set_timestamp@Base 3.5.0-1 - nfnl_ct_set_timestamp@libnl_3 3.5.0-1 - nfnl_ct_set_use@Base 3.5.0-1 - nfnl_ct_set_use@libnl_3 3.5.0-1 - nfnl_ct_set_zone@Base 3.5.0-1 - nfnl_ct_set_zone@libnl_3 3.5.0-1 - nfnl_ct_status2str@Base 3.5.0-1 - nfnl_ct_status2str@libnl_3 3.5.0-1 - nfnl_ct_str2status@Base 3.5.0-1 - nfnl_ct_str2status@libnl_3 3.5.0-1 - nfnl_ct_str2tcp_state@Base 3.5.0-1 - nfnl_ct_str2tcp_state@libnl_3 3.5.0-1 - nfnl_ct_tcp_state2str@Base 3.5.0-1 - nfnl_ct_tcp_state2str@libnl_3 3.5.0-1 - nfnl_ct_test_bytes@Base 3.5.0-1 - nfnl_ct_test_bytes@libnl_3 3.5.0-1 - nfnl_ct_test_dst_port@Base 3.5.0-1 - nfnl_ct_test_dst_port@libnl_3 3.5.0-1 - nfnl_ct_test_icmp_code@Base 3.5.0-1 - nfnl_ct_test_icmp_code@libnl_3 3.5.0-1 - nfnl_ct_test_icmp_id@Base 3.5.0-1 - nfnl_ct_test_icmp_id@libnl_3 3.5.0-1 - nfnl_ct_test_icmp_type@Base 3.5.0-1 - nfnl_ct_test_icmp_type@libnl_3 3.5.0-1 - nfnl_ct_test_id@Base 3.5.0-1 - nfnl_ct_test_id@libnl_3 3.5.0-1 - nfnl_ct_test_mark@Base 3.5.0-1 - nfnl_ct_test_mark@libnl_3 3.5.0-1 - nfnl_ct_test_packets@Base 3.5.0-1 - nfnl_ct_test_packets@libnl_3 3.5.0-1 - nfnl_ct_test_proto@Base 3.5.0-1 - nfnl_ct_test_proto@libnl_3 3.5.0-1 - nfnl_ct_test_src_port@Base 3.5.0-1 - nfnl_ct_test_src_port@libnl_3 3.5.0-1 - nfnl_ct_test_status@Base 3.5.0-1 - nfnl_ct_test_status@libnl_3 3.5.0-1 - nfnl_ct_test_tcp_state@Base 3.5.0-1 - nfnl_ct_test_tcp_state@libnl_3 3.5.0-1 - nfnl_ct_test_timeout@Base 3.5.0-1 - nfnl_ct_test_timeout@libnl_3 3.5.0-1 - nfnl_ct_test_timestamp@Base 3.5.0-1 - nfnl_ct_test_timestamp@libnl_3 3.5.0-1 - nfnl_ct_test_use@Base 3.5.0-1 - nfnl_ct_test_use@libnl_3 3.5.0-1 - nfnl_ct_test_zone@Base 3.5.0-1 - nfnl_ct_test_zone@libnl_3 3.5.0-1 - nfnl_ct_unset_status@Base 3.5.0-1 - nfnl_ct_unset_status@libnl_3 3.5.0-1 - nfnl_exp_add@Base 3.5.0-1 - nfnl_exp_add@libnl_3 3.5.0-1 - nfnl_exp_alloc@Base 3.5.0-1 - nfnl_exp_alloc@libnl_3 3.5.0-1 - nfnl_exp_alloc_cache@Base 3.5.0-1 - nfnl_exp_alloc_cache@libnl_3 3.5.0-1 - nfnl_exp_build_add_request@Base 3.5.0-1 - nfnl_exp_build_add_request@libnl_3 3.5.0-1 - nfnl_exp_build_delete_request@Base 3.5.0-1 - nfnl_exp_build_delete_request@libnl_3 3.5.0-1 - nfnl_exp_build_query_request@Base 3.5.0-1 - nfnl_exp_build_query_request@libnl_3 3.5.0-1 - nfnl_exp_del@Base 3.5.0-1 - nfnl_exp_del@libnl_3 3.5.0-1 - nfnl_exp_dump_request@Base 3.5.0-1 - nfnl_exp_dump_request@libnl_3 3.5.0-1 - nfnl_exp_flags2str@Base 3.5.0-1 - nfnl_exp_flags2str@libnl_3 3.5.0-1 - nfnl_exp_get@Base 3.5.0-1 - nfnl_exp_get@libnl_3 3.5.0-1 - nfnl_exp_get_class@Base 3.5.0-1 - nfnl_exp_get_class@libnl_3 3.5.0-1 - nfnl_exp_get_dst@Base 3.5.0-1 - nfnl_exp_get_dst@libnl_3 3.5.0-1 - nfnl_exp_get_dst_port@Base 3.5.0-1 - nfnl_exp_get_dst_port@libnl_3 3.5.0-1 - nfnl_exp_get_family@Base 3.5.0-1 - nfnl_exp_get_family@libnl_3 3.5.0-1 - nfnl_exp_get_flags@Base 3.5.0-1 - nfnl_exp_get_flags@libnl_3 3.5.0-1 - nfnl_exp_get_fn@Base 3.5.0-1 - nfnl_exp_get_fn@libnl_3 3.5.0-1 - nfnl_exp_get_helper_name@Base 3.5.0-1 - nfnl_exp_get_helper_name@libnl_3 3.5.0-1 - nfnl_exp_get_icmp_code@Base 3.5.0-1 - nfnl_exp_get_icmp_code@libnl_3 3.5.0-1 - nfnl_exp_get_icmp_id@Base 3.5.0-1 - nfnl_exp_get_icmp_id@libnl_3 3.5.0-1 - nfnl_exp_get_icmp_type@Base 3.5.0-1 - nfnl_exp_get_icmp_type@libnl_3 3.5.0-1 - nfnl_exp_get_id@Base 3.5.0-1 - nfnl_exp_get_id@libnl_3 3.5.0-1 - nfnl_exp_get_l4protonum@Base 3.5.0-1 - nfnl_exp_get_l4protonum@libnl_3 3.5.0-1 - nfnl_exp_get_nat_dir@Base 3.5.0-1 - nfnl_exp_get_nat_dir@libnl_3 3.5.0-1 - nfnl_exp_get_src@Base 3.5.0-1 - nfnl_exp_get_src@libnl_3 3.5.0-1 - nfnl_exp_get_src_port@Base 3.5.0-1 - nfnl_exp_get_src_port@libnl_3 3.5.0-1 - nfnl_exp_get_timeout@Base 3.5.0-1 - nfnl_exp_get_timeout@libnl_3 3.5.0-1 - nfnl_exp_get_zone@Base 3.5.0-1 - nfnl_exp_get_zone@libnl_3 3.5.0-1 - nfnl_exp_put@Base 3.5.0-1 - nfnl_exp_put@libnl_3 3.5.0-1 - nfnl_exp_query@Base 3.5.0-1 - nfnl_exp_query@libnl_3 3.5.0-1 - nfnl_exp_set_class@Base 3.5.0-1 - nfnl_exp_set_class@libnl_3 3.5.0-1 - nfnl_exp_set_dst@Base 3.5.0-1 - nfnl_exp_set_dst@libnl_3 3.5.0-1 - nfnl_exp_set_family@Base 3.5.0-1 - nfnl_exp_set_family@libnl_3 3.5.0-1 - nfnl_exp_set_flags@Base 3.5.0-1 - nfnl_exp_set_flags@libnl_3 3.5.0-1 - nfnl_exp_set_fn@Base 3.5.0-1 - nfnl_exp_set_fn@libnl_3 3.5.0-1 - nfnl_exp_set_helper_name@Base 3.5.0-1 - nfnl_exp_set_helper_name@libnl_3 3.5.0-1 - nfnl_exp_set_icmp@Base 3.5.0-1 - nfnl_exp_set_icmp@libnl_3 3.5.0-1 - nfnl_exp_set_id@Base 3.5.0-1 - nfnl_exp_set_id@libnl_3 3.5.0-1 - nfnl_exp_set_l4protonum@Base 3.5.0-1 - nfnl_exp_set_l4protonum@libnl_3 3.5.0-1 - nfnl_exp_set_nat_dir@Base 3.5.0-1 - nfnl_exp_set_nat_dir@libnl_3 3.5.0-1 - nfnl_exp_set_ports@Base 3.5.0-1 - nfnl_exp_set_ports@libnl_3 3.5.0-1 - nfnl_exp_set_src@Base 3.5.0-1 - nfnl_exp_set_src@libnl_3 3.5.0-1 - nfnl_exp_set_timeout@Base 3.5.0-1 - nfnl_exp_set_timeout@libnl_3 3.5.0-1 - nfnl_exp_set_zone@Base 3.5.0-1 - nfnl_exp_set_zone@libnl_3 3.5.0-1 - nfnl_exp_str2flags@Base 3.5.0-1 - nfnl_exp_str2flags@libnl_3 3.5.0-1 - nfnl_exp_test_class@Base 3.5.0-1 - nfnl_exp_test_class@libnl_3 3.5.0-1 - nfnl_exp_test_dst@Base 3.5.0-1 - nfnl_exp_test_dst@libnl_3 3.5.0-1 - nfnl_exp_test_flags@Base 3.5.0-1 - nfnl_exp_test_flags@libnl_3 3.5.0-1 - nfnl_exp_test_fn@Base 3.5.0-1 - nfnl_exp_test_fn@libnl_3 3.5.0-1 - nfnl_exp_test_helper_name@Base 3.5.0-1 - nfnl_exp_test_helper_name@libnl_3 3.5.0-1 - nfnl_exp_test_icmp@Base 3.5.0-1 - nfnl_exp_test_icmp@libnl_3 3.5.0-1 - nfnl_exp_test_id@Base 3.5.0-1 - nfnl_exp_test_id@libnl_3 3.5.0-1 - nfnl_exp_test_l4protonum@Base 3.5.0-1 - nfnl_exp_test_l4protonum@libnl_3 3.5.0-1 - nfnl_exp_test_nat_dir@Base 3.5.0-1 - nfnl_exp_test_nat_dir@libnl_3 3.5.0-1 - nfnl_exp_test_ports@Base 3.5.0-1 - nfnl_exp_test_ports@libnl_3 3.5.0-1 - nfnl_exp_test_src@Base 3.5.0-1 - nfnl_exp_test_src@libnl_3 3.5.0-1 - nfnl_exp_test_timeout@Base 3.5.0-1 - nfnl_exp_test_timeout@libnl_3 3.5.0-1 - nfnl_exp_test_zone@Base 3.5.0-1 - nfnl_exp_test_zone@libnl_3 3.5.0-1 - nfnl_exp_unset_flags@Base 3.5.0-1 - nfnl_exp_unset_flags@libnl_3 3.5.0-1 - nfnl_inet_hook2str@Base 3.5.0-1 - nfnl_inet_hook2str@libnl_3 3.5.0-1 - nfnl_log_alloc@Base 3.5.0-1 - nfnl_log_alloc@libnl_3 3.5.0-1 - nfnl_log_build_change_request@Base 3.5.0-1 - nfnl_log_build_change_request@libnl_3 3.5.0-1 - nfnl_log_build_create_request@Base 3.5.0-1 - nfnl_log_build_create_request@libnl_3 3.5.0-1 - nfnl_log_build_delete_request@Base 3.5.0-1 - nfnl_log_build_delete_request@libnl_3 3.5.0-1 - nfnl_log_build_pf_bind@Base 3.5.0-1 - nfnl_log_build_pf_bind@libnl_3 3.5.0-1 - nfnl_log_build_pf_unbind@Base 3.5.0-1 - nfnl_log_build_pf_unbind@libnl_3 3.5.0-1 - nfnl_log_change@Base 3.5.0-1 - nfnl_log_change@libnl_3 3.5.0-1 - nfnl_log_copy_mode2str@Base 3.5.0-1 - nfnl_log_copy_mode2str@libnl_3 3.5.0-1 - nfnl_log_create@Base 3.5.0-1 - nfnl_log_create@libnl_3 3.5.0-1 - nfnl_log_delete@Base 3.5.0-1 - nfnl_log_delete@libnl_3 3.5.0-1 - nfnl_log_flags2str@Base 3.5.0-1 - nfnl_log_flags2str@libnl_3 3.5.0-1 - nfnl_log_get@Base 3.5.0-1 - nfnl_log_get@libnl_3 3.5.0-1 - nfnl_log_get_alloc_size@Base 3.5.0-1 - nfnl_log_get_alloc_size@libnl_3 3.5.0-1 - nfnl_log_get_copy_mode@Base 3.5.0-1 - nfnl_log_get_copy_mode@libnl_3 3.5.0-1 - nfnl_log_get_copy_range@Base 3.5.0-1 - nfnl_log_get_copy_range@libnl_3 3.5.0-1 - nfnl_log_get_flush_timeout@Base 3.5.0-1 - nfnl_log_get_flush_timeout@libnl_3 3.5.0-1 - nfnl_log_get_group@Base 3.5.0-1 - nfnl_log_get_group@libnl_3 3.5.0-1 - nfnl_log_get_queue_threshold@Base 3.5.0-1 - nfnl_log_get_queue_threshold@libnl_3 3.5.0-1 - nfnl_log_msg_alloc@Base 3.5.0-1 - nfnl_log_msg_alloc@libnl_3 3.5.0-1 - nfnl_log_msg_get@Base 3.5.0-1 - nfnl_log_msg_get@libnl_3 3.5.0-1 - nfnl_log_msg_get_family@Base 3.5.0-1 - nfnl_log_msg_get_family@libnl_3 3.5.0-1 - nfnl_log_msg_get_gid@Base 3.5.0-1 - nfnl_log_msg_get_gid@libnl_3 3.5.0-1 - nfnl_log_msg_get_hook@Base 3.5.0-1 - nfnl_log_msg_get_hook@libnl_3 3.5.0-1 - nfnl_log_msg_get_hwaddr@Base 3.5.0-1 - nfnl_log_msg_get_hwaddr@libnl_3 3.5.0-1 - nfnl_log_msg_get_hwproto@Base 3.5.0-1 - nfnl_log_msg_get_hwproto@libnl_3 3.5.0-1 - nfnl_log_msg_get_indev@Base 3.5.0-1 - nfnl_log_msg_get_indev@libnl_3 3.5.0-1 - nfnl_log_msg_get_mark@Base 3.5.0-1 - nfnl_log_msg_get_mark@libnl_3 3.5.0-1 - nfnl_log_msg_get_outdev@Base 3.5.0-1 - nfnl_log_msg_get_outdev@libnl_3 3.5.0-1 - nfnl_log_msg_get_payload@Base 3.5.0-1 - nfnl_log_msg_get_payload@libnl_3 3.5.0-1 - nfnl_log_msg_get_physindev@Base 3.5.0-1 - nfnl_log_msg_get_physindev@libnl_3 3.5.0-1 - nfnl_log_msg_get_physoutdev@Base 3.5.0-1 - nfnl_log_msg_get_physoutdev@libnl_3 3.5.0-1 - nfnl_log_msg_get_prefix@Base 3.5.0-1 - nfnl_log_msg_get_prefix@libnl_3 3.5.0-1 - nfnl_log_msg_get_seq@Base 3.5.0-1 - nfnl_log_msg_get_seq@libnl_3 3.5.0-1 - nfnl_log_msg_get_seq_global@Base 3.5.0-1 - nfnl_log_msg_get_seq_global@libnl_3 3.5.0-1 - nfnl_log_msg_get_timestamp@Base 3.5.0-1 - nfnl_log_msg_get_timestamp@libnl_3 3.5.0-1 - nfnl_log_msg_get_uid@Base 3.5.0-1 - nfnl_log_msg_get_uid@libnl_3 3.5.0-1 - nfnl_log_msg_put@Base 3.5.0-1 - nfnl_log_msg_put@libnl_3 3.5.0-1 - nfnl_log_msg_set_family@Base 3.5.0-1 - nfnl_log_msg_set_family@libnl_3 3.5.0-1 - nfnl_log_msg_set_gid@Base 3.5.0-1 - nfnl_log_msg_set_gid@libnl_3 3.5.0-1 - nfnl_log_msg_set_hook@Base 3.5.0-1 - nfnl_log_msg_set_hook@libnl_3 3.5.0-1 - nfnl_log_msg_set_hwaddr@Base 3.5.0-1 - nfnl_log_msg_set_hwaddr@libnl_3 3.5.0-1 - nfnl_log_msg_set_hwproto@Base 3.5.0-1 - nfnl_log_msg_set_hwproto@libnl_3 3.5.0-1 - nfnl_log_msg_set_indev@Base 3.5.0-1 - nfnl_log_msg_set_indev@libnl_3 3.5.0-1 - nfnl_log_msg_set_mark@Base 3.5.0-1 - nfnl_log_msg_set_mark@libnl_3 3.5.0-1 - nfnl_log_msg_set_outdev@Base 3.5.0-1 - nfnl_log_msg_set_outdev@libnl_3 3.5.0-1 - nfnl_log_msg_set_payload@Base 3.5.0-1 - nfnl_log_msg_set_payload@libnl_3 3.5.0-1 - nfnl_log_msg_set_physindev@Base 3.5.0-1 - nfnl_log_msg_set_physindev@libnl_3 3.5.0-1 - nfnl_log_msg_set_physoutdev@Base 3.5.0-1 - nfnl_log_msg_set_physoutdev@libnl_3 3.5.0-1 - nfnl_log_msg_set_prefix@Base 3.5.0-1 - nfnl_log_msg_set_prefix@libnl_3 3.5.0-1 - nfnl_log_msg_set_seq@Base 3.5.0-1 - nfnl_log_msg_set_seq@libnl_3 3.5.0-1 - nfnl_log_msg_set_seq_global@Base 3.5.0-1 - nfnl_log_msg_set_seq_global@libnl_3 3.5.0-1 - nfnl_log_msg_set_timestamp@Base 3.5.0-1 - nfnl_log_msg_set_timestamp@libnl_3 3.5.0-1 - nfnl_log_msg_set_uid@Base 3.5.0-1 - nfnl_log_msg_set_uid@libnl_3 3.5.0-1 - nfnl_log_msg_test_gid@Base 3.5.0-1 - nfnl_log_msg_test_gid@libnl_3 3.5.0-1 - nfnl_log_msg_test_hook@Base 3.5.0-1 - nfnl_log_msg_test_hook@libnl_3 3.5.0-1 - nfnl_log_msg_test_hwproto@Base 3.5.0-1 - nfnl_log_msg_test_hwproto@libnl_3 3.5.0-1 - nfnl_log_msg_test_mark@Base 3.5.0-1 - nfnl_log_msg_test_mark@libnl_3 3.5.0-1 - nfnl_log_msg_test_seq@Base 3.5.0-1 - nfnl_log_msg_test_seq@libnl_3 3.5.0-1 - nfnl_log_msg_test_seq_global@Base 3.5.0-1 - nfnl_log_msg_test_seq_global@libnl_3 3.5.0-1 - nfnl_log_msg_test_uid@Base 3.5.0-1 - nfnl_log_msg_test_uid@libnl_3 3.5.0-1 - nfnl_log_pf_bind@Base 3.5.0-1 - nfnl_log_pf_bind@libnl_3 3.5.0-1 - nfnl_log_pf_unbind@Base 3.5.0-1 - nfnl_log_pf_unbind@libnl_3 3.5.0-1 - nfnl_log_put@Base 3.5.0-1 - nfnl_log_put@libnl_3 3.5.0-1 - nfnl_log_set_alloc_size@Base 3.5.0-1 - nfnl_log_set_alloc_size@libnl_3 3.5.0-1 - nfnl_log_set_copy_mode@Base 3.5.0-1 - nfnl_log_set_copy_mode@libnl_3 3.5.0-1 - nfnl_log_set_copy_range@Base 3.5.0-1 - nfnl_log_set_copy_range@libnl_3 3.5.0-1 - nfnl_log_set_flags@Base 3.5.0-1 - nfnl_log_set_flags@libnl_3 3.5.0-1 - nfnl_log_set_flush_timeout@Base 3.5.0-1 - nfnl_log_set_flush_timeout@libnl_3 3.5.0-1 - nfnl_log_set_group@Base 3.5.0-1 - nfnl_log_set_group@libnl_3 3.5.0-1 - nfnl_log_set_queue_threshold@Base 3.5.0-1 - nfnl_log_set_queue_threshold@libnl_3 3.5.0-1 - nfnl_log_str2copy_mode@Base 3.5.0-1 - nfnl_log_str2copy_mode@libnl_3 3.5.0-1 - nfnl_log_str2flags@Base 3.5.0-1 - nfnl_log_str2flags@libnl_3 3.5.0-1 - nfnl_log_test_alloc_size@Base 3.5.0-1 - nfnl_log_test_alloc_size@libnl_3 3.5.0-1 - nfnl_log_test_copy_mode@Base 3.5.0-1 - nfnl_log_test_copy_mode@libnl_3 3.5.0-1 - nfnl_log_test_copy_range@Base 3.5.0-1 - nfnl_log_test_copy_range@libnl_3 3.5.0-1 - nfnl_log_test_flush_timeout@Base 3.5.0-1 - nfnl_log_test_flush_timeout@libnl_3 3.5.0-1 - nfnl_log_test_group@Base 3.5.0-1 - nfnl_log_test_group@libnl_3 3.5.0-1 - nfnl_log_test_queue_threshold@Base 3.5.0-1 - nfnl_log_test_queue_threshold@libnl_3 3.5.0-1 - nfnl_log_unset_flags@Base 3.5.0-1 - nfnl_log_unset_flags@libnl_3 3.5.0-1 - nfnl_queue_alloc@Base 3.5.0-1 - nfnl_queue_alloc@libnl_3 3.5.0-1 - nfnl_queue_build_change_request@Base 3.5.0-1 - nfnl_queue_build_change_request@libnl_3 3.5.0-1 - nfnl_queue_build_create_request@Base 3.5.0-1 - nfnl_queue_build_create_request@libnl_3 3.5.0-1 - nfnl_queue_build_delete_request@Base 3.5.0-1 - nfnl_queue_build_delete_request@libnl_3 3.5.0-1 - nfnl_queue_build_pf_bind@Base 3.5.0-1 - nfnl_queue_build_pf_bind@libnl_3 3.5.0-1 - nfnl_queue_build_pf_unbind@Base 3.5.0-1 - nfnl_queue_build_pf_unbind@libnl_3 3.5.0-1 - nfnl_queue_change@Base 3.5.0-1 - nfnl_queue_change@libnl_3 3.5.0-1 - nfnl_queue_copy_mode2str@Base 3.5.0-1 - nfnl_queue_copy_mode2str@libnl_3 3.5.0-1 - nfnl_queue_create@Base 3.5.0-1 - nfnl_queue_create@libnl_3 3.5.0-1 - nfnl_queue_delete@Base 3.5.0-1 - nfnl_queue_delete@libnl_3 3.5.0-1 - nfnl_queue_get@Base 3.5.0-1 - nfnl_queue_get@libnl_3 3.5.0-1 - nfnl_queue_get_copy_mode@Base 3.5.0-1 - nfnl_queue_get_copy_mode@libnl_3 3.5.0-1 - nfnl_queue_get_copy_range@Base 3.5.0-1 - nfnl_queue_get_copy_range@libnl_3 3.5.0-1 - nfnl_queue_get_group@Base 3.5.0-1 - nfnl_queue_get_group@libnl_3 3.5.0-1 - nfnl_queue_get_maxlen@Base 3.5.0-1 - nfnl_queue_get_maxlen@libnl_3 3.5.0-1 - nfnl_queue_msg_alloc@Base 3.5.0-1 - nfnl_queue_msg_alloc@libnl_3 3.5.0-1 - nfnl_queue_msg_build_verdict@Base 3.5.0-1 - nfnl_queue_msg_build_verdict@libnl_3 3.5.0-1 - nfnl_queue_msg_build_verdict_batch@Base 3.5.0-1 - nfnl_queue_msg_build_verdict_batch@libnl_3 3.5.0-1 - nfnl_queue_msg_get@Base 3.5.0-1 - nfnl_queue_msg_get@libnl_3 3.5.0-1 - nfnl_queue_msg_get_family@Base 3.5.0-1 - nfnl_queue_msg_get_family@libnl_3 3.5.0-1 - nfnl_queue_msg_get_group@Base 3.5.0-1 - nfnl_queue_msg_get_group@libnl_3 3.5.0-1 - nfnl_queue_msg_get_hook@Base 3.5.0-1 - nfnl_queue_msg_get_hook@libnl_3 3.5.0-1 - nfnl_queue_msg_get_hwaddr@Base 3.5.0-1 - nfnl_queue_msg_get_hwaddr@libnl_3 3.5.0-1 - nfnl_queue_msg_get_hwproto@Base 3.5.0-1 - nfnl_queue_msg_get_hwproto@libnl_3 3.5.0-1 - nfnl_queue_msg_get_indev@Base 3.5.0-1 - nfnl_queue_msg_get_indev@libnl_3 3.5.0-1 - nfnl_queue_msg_get_mark@Base 3.5.0-1 - nfnl_queue_msg_get_mark@libnl_3 3.5.0-1 - nfnl_queue_msg_get_outdev@Base 3.5.0-1 - nfnl_queue_msg_get_outdev@libnl_3 3.5.0-1 - nfnl_queue_msg_get_packetid@Base 3.5.0-1 - nfnl_queue_msg_get_packetid@libnl_3 3.5.0-1 - nfnl_queue_msg_get_payload@Base 3.5.0-1 - nfnl_queue_msg_get_payload@libnl_3 3.5.0-1 - nfnl_queue_msg_get_physindev@Base 3.5.0-1 - nfnl_queue_msg_get_physindev@libnl_3 3.5.0-1 - nfnl_queue_msg_get_physoutdev@Base 3.5.0-1 - nfnl_queue_msg_get_physoutdev@libnl_3 3.5.0-1 - nfnl_queue_msg_get_timestamp@Base 3.5.0-1 - nfnl_queue_msg_get_timestamp@libnl_3 3.5.0-1 - nfnl_queue_msg_get_verdict@Base 3.5.0-1 - nfnl_queue_msg_get_verdict@libnl_3 3.5.0-1 - nfnl_queue_msg_put@Base 3.5.0-1 - nfnl_queue_msg_put@libnl_3 3.5.0-1 - nfnl_queue_msg_send_verdict@Base 3.5.0-1 - nfnl_queue_msg_send_verdict@libnl_3 3.5.0-1 - nfnl_queue_msg_send_verdict_batch@Base 3.5.0-1 - nfnl_queue_msg_send_verdict_batch@libnl_3 3.5.0-1 - nfnl_queue_msg_send_verdict_payload@Base 3.5.0-1 - nfnl_queue_msg_send_verdict_payload@libnl_3 3.5.0-1 - nfnl_queue_msg_set_family@Base 3.5.0-1 - nfnl_queue_msg_set_family@libnl_3 3.5.0-1 - nfnl_queue_msg_set_group@Base 3.5.0-1 - nfnl_queue_msg_set_group@libnl_3 3.5.0-1 - nfnl_queue_msg_set_hook@Base 3.5.0-1 - nfnl_queue_msg_set_hook@libnl_3 3.5.0-1 - nfnl_queue_msg_set_hwaddr@Base 3.5.0-1 - nfnl_queue_msg_set_hwaddr@libnl_3 3.5.0-1 - nfnl_queue_msg_set_hwproto@Base 3.5.0-1 - nfnl_queue_msg_set_hwproto@libnl_3 3.5.0-1 - nfnl_queue_msg_set_indev@Base 3.5.0-1 - nfnl_queue_msg_set_indev@libnl_3 3.5.0-1 - nfnl_queue_msg_set_mark@Base 3.5.0-1 - nfnl_queue_msg_set_mark@libnl_3 3.5.0-1 - nfnl_queue_msg_set_outdev@Base 3.5.0-1 - nfnl_queue_msg_set_outdev@libnl_3 3.5.0-1 - nfnl_queue_msg_set_packetid@Base 3.5.0-1 - nfnl_queue_msg_set_packetid@libnl_3 3.5.0-1 - nfnl_queue_msg_set_payload@Base 3.5.0-1 - nfnl_queue_msg_set_payload@libnl_3 3.5.0-1 - nfnl_queue_msg_set_physindev@Base 3.5.0-1 - nfnl_queue_msg_set_physindev@libnl_3 3.5.0-1 - nfnl_queue_msg_set_physoutdev@Base 3.5.0-1 - nfnl_queue_msg_set_physoutdev@libnl_3 3.5.0-1 - nfnl_queue_msg_set_timestamp@Base 3.5.0-1 - nfnl_queue_msg_set_timestamp@libnl_3 3.5.0-1 - nfnl_queue_msg_set_verdict@Base 3.5.0-1 - nfnl_queue_msg_set_verdict@libnl_3 3.5.0-1 - nfnl_queue_msg_test_family@Base 3.5.0-1 - nfnl_queue_msg_test_family@libnl_3 3.5.0-1 - nfnl_queue_msg_test_group@Base 3.5.0-1 - nfnl_queue_msg_test_group@libnl_3 3.5.0-1 - nfnl_queue_msg_test_hook@Base 3.5.0-1 - nfnl_queue_msg_test_hook@libnl_3 3.5.0-1 - nfnl_queue_msg_test_hwaddr@Base 3.5.0-1 - nfnl_queue_msg_test_hwaddr@libnl_3 3.5.0-1 - nfnl_queue_msg_test_hwproto@Base 3.5.0-1 - nfnl_queue_msg_test_hwproto@libnl_3 3.5.0-1 - nfnl_queue_msg_test_indev@Base 3.5.0-1 - nfnl_queue_msg_test_indev@libnl_3 3.5.0-1 - nfnl_queue_msg_test_mark@Base 3.5.0-1 - nfnl_queue_msg_test_mark@libnl_3 3.5.0-1 - nfnl_queue_msg_test_outdev@Base 3.5.0-1 - nfnl_queue_msg_test_outdev@libnl_3 3.5.0-1 - nfnl_queue_msg_test_packetid@Base 3.5.0-1 - nfnl_queue_msg_test_packetid@libnl_3 3.5.0-1 - nfnl_queue_msg_test_payload@Base 3.5.0-1 - nfnl_queue_msg_test_payload@libnl_3 3.5.0-1 - nfnl_queue_msg_test_physindev@Base 3.5.0-1 - nfnl_queue_msg_test_physindev@libnl_3 3.5.0-1 - nfnl_queue_msg_test_physoutdev@Base 3.5.0-1 - nfnl_queue_msg_test_physoutdev@libnl_3 3.5.0-1 - nfnl_queue_msg_test_timestamp@Base 3.5.0-1 - nfnl_queue_msg_test_timestamp@libnl_3 3.5.0-1 - nfnl_queue_msg_test_verdict@Base 3.5.0-1 - nfnl_queue_msg_test_verdict@libnl_3 3.5.0-1 - nfnl_queue_pf_bind@Base 3.5.0-1 - nfnl_queue_pf_bind@libnl_3 3.5.0-1 - nfnl_queue_pf_unbind@Base 3.5.0-1 - nfnl_queue_pf_unbind@libnl_3 3.5.0-1 - nfnl_queue_put@Base 3.5.0-1 - nfnl_queue_put@libnl_3 3.5.0-1 - nfnl_queue_set_copy_mode@Base 3.5.0-1 - nfnl_queue_set_copy_mode@libnl_3 3.5.0-1 - nfnl_queue_set_copy_range@Base 3.5.0-1 - nfnl_queue_set_copy_range@libnl_3 3.5.0-1 - nfnl_queue_set_group@Base 3.5.0-1 - nfnl_queue_set_group@libnl_3 3.5.0-1 - nfnl_queue_set_maxlen@Base 3.5.0-1 - nfnl_queue_set_maxlen@libnl_3 3.5.0-1 - nfnl_queue_socket_alloc@Base 3.5.0-1 - nfnl_queue_socket_alloc@libnl_3 3.5.0-1 - nfnl_queue_str2copy_mode@Base 3.5.0-1 - nfnl_queue_str2copy_mode@libnl_3 3.5.0-1 - nfnl_queue_test_copy_mode@Base 3.5.0-1 - nfnl_queue_test_copy_mode@libnl_3 3.5.0-1 - nfnl_queue_test_copy_range@Base 3.5.0-1 - nfnl_queue_test_copy_range@libnl_3 3.5.0-1 - nfnl_queue_test_group@Base 3.5.0-1 - nfnl_queue_test_group@libnl_3 3.5.0-1 - nfnl_queue_test_maxlen@Base 3.5.0-1 - nfnl_queue_test_maxlen@libnl_3 3.5.0-1 - nfnl_send_simple@Base 3.5.0-1 - nfnl_send_simple@libnl_3 3.5.0-1 - nfnl_str2inet_hook@Base 3.5.0-1 - nfnl_str2inet_hook@libnl_3 3.5.0-1 - nfnl_str2verdict@Base 3.5.0-1 - nfnl_str2verdict@libnl_3 3.5.0-1 - nfnl_verdict2str@Base 3.5.0-1 - nfnl_verdict2str@libnl_3 3.5.0-1 - nfnlmsg_alloc_simple@Base 3.5.0-1 - nfnlmsg_alloc_simple@libnl_3 3.5.0-1 - nfnlmsg_ct_group@Base 3.5.0-1 - nfnlmsg_ct_group@libnl_3 3.5.0-1 - nfnlmsg_ct_parse@Base 3.5.0-1 - nfnlmsg_ct_parse@libnl_3 3.5.0-1 - nfnlmsg_exp_group@Base 3.5.0-1 - nfnlmsg_exp_group@libnl_3 3.5.0-1 - nfnlmsg_exp_parse@Base 3.5.0-1 - nfnlmsg_exp_parse@libnl_3 3.5.0-1 - nfnlmsg_family@Base 3.5.0-1 - nfnlmsg_family@libnl_3 3.5.0-1 - nfnlmsg_log_msg_parse@Base 3.5.0-1 - nfnlmsg_log_msg_parse@libnl_3 3.5.0-1 - nfnlmsg_put@Base 3.5.0-1 - nfnlmsg_put@libnl_3 3.5.0-1 - nfnlmsg_queue_msg_parse@Base 3.5.0-1 - nfnlmsg_queue_msg_parse@libnl_3 3.5.0-1 - nfnlmsg_res_id@Base 3.5.0-1 - nfnlmsg_res_id@libnl_3 3.5.0-1 - nfnlmsg_subsys@Base 3.5.0-1 - nfnlmsg_subsys@libnl_3 3.5.0-1 - nfnlmsg_subtype@Base 3.5.0-1 - nfnlmsg_subtype@libnl_3 3.5.0-1 - queue_msg_obj_ops@Base 3.5.0-1 - queue_msg_obj_ops@libnl_3 3.5.0-1 - queue_obj_ops@Base 3.5.0-1 - queue_obj_ops@libnl_3 3.5.0-1 diff --git a/src/libnl3/debian/libnl-nf-3-dev.install b/src/libnl3/debian/libnl-nf-3-dev.install deleted file mode 100644 index d1307c751b84..000000000000 --- a/src/libnl3/debian/libnl-nf-3-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/*/pkgconfig/libnl-nf-3* -debian/tmp/usr/lib/*/libnl-nf-3*.so -debian/tmp/usr/lib/*/libnl-nf-3*.a diff --git a/src/libnl3/debian/libnl-route-3-200.install b/src/libnl3/debian/libnl-route-3-200.install deleted file mode 100644 index 44c7ec8cdfad..000000000000 --- a/src/libnl3/debian/libnl-route-3-200.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/*/libnl-route-3*.so.* diff --git a/src/libnl3/debian/libnl-route-3-200.symbols b/src/libnl3/debian/libnl-route-3-200.symbols deleted file mode 100644 index e11157ba4e88..000000000000 --- a/src/libnl3/debian/libnl-route-3-200.symbols +++ /dev/null @@ -1,2051 +0,0 @@ -libnl-route-3.so.200 libnl-route-3-200 #MINVER# - ematch__create_buffer@Base 3.5.0-1 - ematch__delete_buffer@Base 3.5.0-1 - ematch__flush_buffer@Base 3.5.0-1 - ematch__scan_buffer@Base 3.5.0-1 - ematch__scan_bytes@Base 3.5.0-1 - ematch__scan_string@Base 3.5.0-1 - ematch__switch_to_buffer@Base 3.5.0-1 - ematch_alloc@Base 3.5.0-1 - ematch_free@Base 3.5.0-1 - ematch_get_column@Base 3.5.0-1 - ematch_get_debug@Base 3.5.0-1 - ematch_get_extra@Base 3.5.0-1 - ematch_get_in@Base 3.5.0-1 - ematch_get_leng@Base 3.5.0-1 - ematch_get_lineno@Base 3.5.0-1 - ematch_get_lval@Base 3.5.0-1 - ematch_get_out@Base 3.5.0-1 - ematch_get_text@Base 3.5.0-1 - ematch_lex@Base 3.5.0-1 - ematch_lex_destroy@Base 3.5.0-1 - ematch_lex_init@Base 3.5.0-1 - ematch_lex_init_extra@Base 3.5.0-1 - ematch_parse@Base 3.5.0-1 - ematch_pop_buffer_state@Base 3.5.0-1 - ematch_push_buffer_state@Base 3.5.0-1 - ematch_realloc@Base 3.5.0-1 - ematch_restart@Base 3.5.0-1 - ematch_set_column@Base 3.5.0-1 - ematch_set_debug@Base 3.5.0-1 - ematch_set_extra@Base 3.5.0-1 - ematch_set_in@Base 3.5.0-1 - ematch_set_lineno@Base 3.5.0-1 - ematch_set_lval@Base 3.5.0-1 - ematch_set_out@Base 3.5.0-1 - flnl_lookup@Base 3.5.0-1 - flnl_lookup@libnl_3 3.5.0-1 - flnl_lookup_build_request@Base 3.5.0-1 - flnl_lookup_build_request@libnl_3 3.5.0-1 - flnl_request_alloc@Base 3.5.0-1 - flnl_request_alloc@libnl_3 3.5.0-1 - flnl_request_get_addr@Base 3.5.0-1 - flnl_request_get_addr@libnl_3 3.5.0-1 - flnl_request_get_fwmark@Base 3.5.0-1 - flnl_request_get_fwmark@libnl_3 3.5.0-1 - flnl_request_get_scope@Base 3.5.0-1 - flnl_request_get_scope@libnl_3 3.5.0-1 - flnl_request_get_table@Base 3.5.0-1 - flnl_request_get_table@libnl_3 3.5.0-1 - flnl_request_get_tos@Base 3.5.0-1 - flnl_request_get_tos@libnl_3 3.5.0-1 - flnl_request_set_addr@Base 3.5.0-1 - flnl_request_set_addr@libnl_3 3.5.0-1 - flnl_request_set_fwmark@Base 3.5.0-1 - flnl_request_set_fwmark@libnl_3 3.5.0-1 - flnl_request_set_scope@Base 3.5.0-1 - flnl_request_set_scope@libnl_3 3.5.0-1 - flnl_request_set_table@Base 3.5.0-1 - flnl_request_set_table@libnl_3 3.5.0-1 - flnl_request_set_tos@Base 3.5.0-1 - flnl_request_set_tos@libnl_3 3.5.0-1 - flnl_result_alloc@Base 3.5.0-1 - flnl_result_alloc@libnl_3 3.5.0-1 - flnl_result_alloc_cache@Base 3.5.0-1 - flnl_result_alloc_cache@libnl_3 3.5.0-1 - flnl_result_get_error@Base 3.5.0-1 - flnl_result_get_error@libnl_3 3.5.0-1 - flnl_result_get_nexthop_sel@Base 3.5.0-1 - flnl_result_get_nexthop_sel@libnl_3 3.5.0-1 - flnl_result_get_prefixlen@Base 3.5.0-1 - flnl_result_get_prefixlen@libnl_3 3.5.0-1 - flnl_result_get_scope@Base 3.5.0-1 - flnl_result_get_scope@libnl_3 3.5.0-1 - flnl_result_get_table_id@Base 3.5.0-1 - flnl_result_get_table_id@libnl_3 3.5.0-1 - flnl_result_get_type@Base 3.5.0-1 - flnl_result_get_type@libnl_3 3.5.0-1 - flnl_result_put@Base 3.5.0-1 - flnl_result_put@libnl_3 3.5.0-1 - libnl_3@libnl_3 3.5.0-1 - libnl_3_2_26@libnl_3_2_26 3.5.0-1 - libnl_3_2_27@libnl_3_2_27 3.5.0-1 - libnl_3_2_28@libnl_3_2_28 3.5.0-1 - libnl_3_2_29@libnl_3_2_29 3.5.0-1 - libnl_3_4@libnl_3_4 3.5.0-1 - libnl_3_5@libnl_3_5 3.5.0-1 - nl_ovl_strategy2str@Base 3.5.0-1 - nl_ovl_strategy2str@libnl_3 3.5.0-1 - nl_police2str@Base 3.5.0-1 - nl_police2str@libnl_3 3.5.0-1 - nl_rtgen_request@Base 3.5.0-1 - nl_rtgen_request@libnl_3 3.5.0-1 - nl_rtntype2str@Base 3.5.0-1 - nl_rtntype2str@libnl_3 3.5.0-1 - nl_str2ovl_strategy@Base 3.5.0-1 - nl_str2ovl_strategy@libnl_3 3.5.0-1 - nl_str2police@Base 3.5.0-1 - nl_str2police@libnl_3 3.5.0-1 - nl_str2rtntype@Base 3.5.0-1 - nl_str2rtntype@libnl_3 3.5.0-1 - pktloc__create_buffer@Base 3.5.0-1 - pktloc__delete_buffer@Base 3.5.0-1 - pktloc__flush_buffer@Base 3.5.0-1 - pktloc__scan_buffer@Base 3.5.0-1 - pktloc__scan_bytes@Base 3.5.0-1 - pktloc__scan_string@Base 3.5.0-1 - pktloc__switch_to_buffer@Base 3.5.0-1 - pktloc_alloc@Base 3.5.0-1 - pktloc_free@Base 3.5.0-1 - pktloc_get_column@Base 3.5.0-1 - pktloc_get_debug@Base 3.5.0-1 - pktloc_get_extra@Base 3.5.0-1 - pktloc_get_in@Base 3.5.0-1 - pktloc_get_leng@Base 3.5.0-1 - pktloc_get_lineno@Base 3.5.0-1 - pktloc_get_lloc@Base 3.5.0-1 - pktloc_get_lval@Base 3.5.0-1 - pktloc_get_out@Base 3.5.0-1 - pktloc_get_text@Base 3.5.0-1 - pktloc_lex@Base 3.5.0-1 - pktloc_lex_destroy@Base 3.5.0-1 - pktloc_lex_init@Base 3.5.0-1 - pktloc_lex_init_extra@Base 3.5.0-1 - pktloc_parse@Base 3.5.0-1 - pktloc_pop_buffer_state@Base 3.5.0-1 - pktloc_push_buffer_state@Base 3.5.0-1 - pktloc_realloc@Base 3.5.0-1 - pktloc_restart@Base 3.5.0-1 - pktloc_set_column@Base 3.5.0-1 - pktloc_set_debug@Base 3.5.0-1 - pktloc_set_extra@Base 3.5.0-1 - pktloc_set_in@Base 3.5.0-1 - pktloc_set_lineno@Base 3.5.0-1 - pktloc_set_lloc@Base 3.5.0-1 - - pktloc_set_lval@Base 3.5.0-1 - pktloc_set_out@Base 3.5.0-1 - route_obj_ops@Base 3.5.0-1 - route_obj_ops@libnl_3 3.5.0-1 - rtln_link_policy@Base 3.5.0-1 - rtln_link_policy@libnl_3 3.5.0-1 - rtnl_act_add@Base 3.5.0-1 - rtnl_act_add@libnl_3 3.5.0-1 - rtnl_act_alloc@Base 3.5.0-1 - rtnl_act_alloc@libnl_3 3.5.0-1 - rtnl_act_append@Base 3.5.0-1 - rtnl_act_append@libnl_3 3.5.0-1 - rtnl_act_build_add_request@Base 3.5.0-1 - rtnl_act_build_add_request@libnl_3 3.5.0-1 - rtnl_act_build_change_request@Base 3.5.0-1 - rtnl_act_build_change_request@libnl_3 3.5.0-1 - rtnl_act_build_delete_request@Base 3.5.0-1 - rtnl_act_build_delete_request@libnl_3 3.5.0-1 - rtnl_act_change@Base 3.5.0-1 - rtnl_act_change@libnl_3 3.5.0-1 - rtnl_act_delete@Base 3.5.0-1 - rtnl_act_delete@libnl_3 3.5.0-1 - rtnl_act_fill@Base 3.5.0-1 - rtnl_act_fill@libnl_3 3.5.0-1 - rtnl_act_get@Base 3.5.0-1 - rtnl_act_get@libnl_3 3.5.0-1 - rtnl_act_next@libnl_3_4 3.5.0-1 - rtnl_act_parse@Base 3.5.0-1 - rtnl_act_parse@libnl_3 3.5.0-1 - rtnl_act_put@Base 3.5.0-1 - rtnl_act_put@libnl_3 3.5.0-1 - rtnl_act_put_all@Base 3.5.0-1 - rtnl_act_put_all@libnl_3 3.5.0-1 - rtnl_act_remove@Base 3.5.0-1 - rtnl_act_remove@libnl_3 3.5.0-1 - rtnl_addr_add@Base 3.5.0-1 - rtnl_addr_add@libnl_3 3.5.0-1 - rtnl_addr_alloc@Base 3.5.0-1 - rtnl_addr_alloc@libnl_3 3.5.0-1 - rtnl_addr_alloc_cache@Base 3.5.0-1 - rtnl_addr_alloc_cache@libnl_3 3.5.0-1 - rtnl_addr_build_add_request@Base 3.5.0-1 - rtnl_addr_build_add_request@libnl_3 3.5.0-1 - rtnl_addr_build_delete_request@Base 3.5.0-1 - rtnl_addr_build_delete_request@libnl_3 3.5.0-1 - rtnl_addr_delete@Base 3.5.0-1 - rtnl_addr_delete@libnl_3 3.5.0-1 - rtnl_addr_flags2str@Base 3.5.0-1 - rtnl_addr_flags2str@libnl_3 3.5.0-1 - rtnl_addr_get@Base 3.5.0-1 - rtnl_addr_get@libnl_3 3.5.0-1 - rtnl_addr_get_anycast@Base 3.5.0-1 - rtnl_addr_get_anycast@libnl_3 3.5.0-1 - rtnl_addr_get_broadcast@Base 3.5.0-1 - rtnl_addr_get_broadcast@libnl_3 3.5.0-1 - rtnl_addr_get_create_time@Base 3.5.0-1 - rtnl_addr_get_create_time@libnl_3 3.5.0-1 - rtnl_addr_get_family@Base 3.5.0-1 - rtnl_addr_get_family@libnl_3 3.5.0-1 - rtnl_addr_get_flags@Base 3.5.0-1 - rtnl_addr_get_flags@libnl_3 3.5.0-1 - rtnl_addr_get_ifindex@Base 3.5.0-1 - rtnl_addr_get_ifindex@libnl_3 3.5.0-1 - rtnl_addr_get_label@Base 3.5.0-1 - rtnl_addr_get_label@libnl_3 3.5.0-1 - rtnl_addr_get_last_update_time@Base 3.5.0-1 - rtnl_addr_get_last_update_time@libnl_3 3.5.0-1 - rtnl_addr_get_link@Base 3.5.0-1 - rtnl_addr_get_link@libnl_3 3.5.0-1 - rtnl_addr_get_local@Base 3.5.0-1 - rtnl_addr_get_local@libnl_3 3.5.0-1 - rtnl_addr_get_multicast@Base 3.5.0-1 - rtnl_addr_get_multicast@libnl_3 3.5.0-1 - rtnl_addr_get_peer@Base 3.5.0-1 - rtnl_addr_get_peer@libnl_3 3.5.0-1 - rtnl_addr_get_preferred_lifetime@Base 3.5.0-1 - rtnl_addr_get_preferred_lifetime@libnl_3 3.5.0-1 - rtnl_addr_get_prefixlen@Base 3.5.0-1 - rtnl_addr_get_prefixlen@libnl_3 3.5.0-1 - rtnl_addr_get_scope@Base 3.5.0-1 - rtnl_addr_get_scope@libnl_3 3.5.0-1 - rtnl_addr_get_valid_lifetime@Base 3.5.0-1 - rtnl_addr_get_valid_lifetime@libnl_3 3.5.0-1 - rtnl_addr_put@Base 3.5.0-1 - rtnl_addr_put@libnl_3 3.5.0-1 - rtnl_addr_set_anycast@Base 3.5.0-1 - rtnl_addr_set_anycast@libnl_3 3.5.0-1 - rtnl_addr_set_broadcast@Base 3.5.0-1 - rtnl_addr_set_broadcast@libnl_3 3.5.0-1 - rtnl_addr_set_family@Base 3.5.0-1 - rtnl_addr_set_family@libnl_3 3.5.0-1 - rtnl_addr_set_flags@Base 3.5.0-1 - rtnl_addr_set_flags@libnl_3 3.5.0-1 - rtnl_addr_set_ifindex@Base 3.5.0-1 - rtnl_addr_set_ifindex@libnl_3 3.5.0-1 - rtnl_addr_set_label@Base 3.5.0-1 - rtnl_addr_set_label@libnl_3 3.5.0-1 - rtnl_addr_set_link@Base 3.5.0-1 - rtnl_addr_set_link@libnl_3 3.5.0-1 - rtnl_addr_set_local@Base 3.5.0-1 - rtnl_addr_set_local@libnl_3 3.5.0-1 - rtnl_addr_set_multicast@Base 3.5.0-1 - rtnl_addr_set_multicast@libnl_3 3.5.0-1 - rtnl_addr_set_peer@Base 3.5.0-1 - rtnl_addr_set_peer@libnl_3 3.5.0-1 - rtnl_addr_set_preferred_lifetime@Base 3.5.0-1 - rtnl_addr_set_preferred_lifetime@libnl_3 3.5.0-1 - rtnl_addr_set_prefixlen@Base 3.5.0-1 - rtnl_addr_set_prefixlen@libnl_3 3.5.0-1 - rtnl_addr_set_scope@Base 3.5.0-1 - rtnl_addr_set_scope@libnl_3 3.5.0-1 - rtnl_addr_set_valid_lifetime@Base 3.5.0-1 - rtnl_addr_set_valid_lifetime@libnl_3 3.5.0-1 - rtnl_addr_str2flags@Base 3.5.0-1 - rtnl_addr_str2flags@libnl_3 3.5.0-1 - rtnl_addr_unset_flags@Base 3.5.0-1 - rtnl_addr_unset_flags@libnl_3 3.5.0-1 - rtnl_basic_add_action@Base 3.5.0-1 - rtnl_basic_add_action@libnl_3 3.5.0-1 - rtnl_basic_del_action@Base 3.5.0-1 - rtnl_basic_del_action@libnl_3 3.5.0-1 - rtnl_basic_get_action@libnl_3_4 3.5.0-1 - rtnl_basic_get_ematch@Base 3.5.0-1 - rtnl_basic_get_ematch@libnl_3 3.5.0-1 - rtnl_basic_get_target@Base 3.5.0-1 - rtnl_basic_get_target@libnl_3 3.5.0-1 - rtnl_basic_set_ematch@Base 3.5.0-1 - rtnl_basic_set_ematch@libnl_3 3.5.0-1 - rtnl_basic_set_target@Base 3.5.0-1 - rtnl_basic_set_target@libnl_3 3.5.0-1 - rtnl_cgroup_get_ematch@Base 3.5.0-1 - rtnl_cgroup_get_ematch@libnl_3 3.5.0-1 - rtnl_cgroup_set_ematch@Base 3.5.0-1 - rtnl_cgroup_set_ematch@libnl_3 3.5.0-1 - rtnl_class_add@Base 3.5.0-1 - rtnl_class_add@libnl_3 3.5.0-1 - rtnl_class_alloc@Base 3.5.0-1 - rtnl_class_alloc@libnl_3 3.5.0-1 - rtnl_class_alloc_cache@Base 3.5.0-1 - rtnl_class_alloc_cache@libnl_3 3.5.0-1 - rtnl_class_build_add_request@Base 3.5.0-1 - rtnl_class_build_add_request@libnl_3 3.5.0-1 - rtnl_class_build_delete_request@Base 3.5.0-1 - rtnl_class_build_delete_request@libnl_3 3.5.0-1 - rtnl_class_delete@Base 3.5.0-1 - rtnl_class_delete@libnl_3 3.5.0-1 - rtnl_class_dsmark_get_bitmask@Base 3.5.0-1 - rtnl_class_dsmark_get_bitmask@libnl_3 3.5.0-1 - rtnl_class_dsmark_get_value@Base 3.5.0-1 - rtnl_class_dsmark_get_value@libnl_3 3.5.0-1 - rtnl_class_dsmark_set_bitmask@Base 3.5.0-1 - rtnl_class_dsmark_set_bitmask@libnl_3 3.5.0-1 - rtnl_class_dsmark_set_value@Base 3.5.0-1 - rtnl_class_dsmark_set_value@libnl_3 3.5.0-1 - rtnl_class_foreach_child@Base 3.5.0-1 - rtnl_class_foreach_child@libnl_3 3.5.0-1 - rtnl_class_foreach_cls@Base 3.5.0-1 - rtnl_class_foreach_cls@libnl_3 3.5.0-1 - rtnl_class_get@Base 3.5.0-1 - rtnl_class_get@libnl_3 3.5.0-1 - rtnl_class_get_by_parent@libnl_3_5 3.5.0-1 - rtnl_class_hfsc_get_fsc@Base 3.5.0-1 - rtnl_class_hfsc_get_fsc@libnl_3 3.5.0-1 - rtnl_class_hfsc_get_rsc@Base 3.5.0-1 - rtnl_class_hfsc_get_rsc@libnl_3 3.5.0-1 - rtnl_class_hfsc_get_usc@Base 3.5.0-1 - rtnl_class_hfsc_get_usc@libnl_3 3.5.0-1 - rtnl_class_hfsc_set_fsc@Base 3.5.0-1 - rtnl_class_hfsc_set_fsc@libnl_3 3.5.0-1 - rtnl_class_hfsc_set_rsc@Base 3.5.0-1 - rtnl_class_hfsc_set_rsc@libnl_3 3.5.0-1 - rtnl_class_hfsc_set_usc@Base 3.5.0-1 - rtnl_class_hfsc_set_usc@libnl_3 3.5.0-1 - rtnl_class_leaf_qdisc@Base 3.5.0-1 - rtnl_class_leaf_qdisc@libnl_3 3.5.0-1 - rtnl_class_put@Base 3.5.0-1 - rtnl_class_put@libnl_3 3.5.0-1 - rtnl_classid_generate@Base 3.5.0-1 - rtnl_classid_generate@libnl_3 3.5.0-1 - rtnl_cls_add@Base 3.5.0-1 - rtnl_cls_add@libnl_3 3.5.0-1 - rtnl_cls_alloc@Base 3.5.0-1 - rtnl_cls_alloc@libnl_3 3.5.0-1 - rtnl_cls_alloc_cache@Base 3.5.0-1 - rtnl_cls_alloc_cache@libnl_3 3.5.0-1 - rtnl_cls_build_add_request@Base 3.5.0-1 - rtnl_cls_build_add_request@libnl_3 3.5.0-1 - rtnl_cls_build_change_request@Base 3.5.0-1 - rtnl_cls_build_change_request@libnl_3 3.5.0-1 - rtnl_cls_build_delete_request@Base 3.5.0-1 - rtnl_cls_build_delete_request@libnl_3 3.5.0-1 - rtnl_cls_cache_set_tc_params@libnl_3_5 3.5.0-1 - rtnl_cls_change@Base 3.5.0-1 - rtnl_cls_change@libnl_3 3.5.0-1 - rtnl_cls_delete@Base 3.5.0-1 - rtnl_cls_delete@libnl_3 3.5.0-1 - rtnl_cls_get_prio@Base 3.5.0-1 - rtnl_cls_get_prio@libnl_3 3.5.0-1 - rtnl_cls_get_protocol@Base 3.5.0-1 - rtnl_cls_get_protocol@libnl_3 3.5.0-1 - rtnl_cls_put@Base 3.5.0-1 - rtnl_cls_put@libnl_3 3.5.0-1 - rtnl_cls_set_prio@Base 3.5.0-1 - rtnl_cls_set_prio@libnl_3 3.5.0-1 - rtnl_cls_set_protocol@Base 3.5.0-1 - rtnl_cls_set_protocol@libnl_3 3.5.0-1 - rtnl_ematch_add_child@Base 3.5.0-1 - rtnl_ematch_add_child@libnl_3 3.5.0-1 - rtnl_ematch_alloc@Base 3.5.0-1 - rtnl_ematch_alloc@libnl_3 3.5.0-1 - rtnl_ematch_cmp_get@Base 3.5.0-1 - rtnl_ematch_cmp_get@libnl_3 3.5.0-1 - rtnl_ematch_cmp_set@Base 3.5.0-1 - rtnl_ematch_cmp_set@libnl_3 3.5.0-1 - rtnl_ematch_data@Base 3.5.0-1 - rtnl_ematch_data@libnl_3 3.5.0-1 - rtnl_ematch_fill_attr@Base 3.5.0-1 - rtnl_ematch_fill_attr@libnl_3 3.5.0-1 - rtnl_ematch_free@Base 3.5.0-1 - rtnl_ematch_free@libnl_3 3.5.0-1 - rtnl_ematch_get_flags@Base 3.5.0-1 - rtnl_ematch_get_flags@libnl_3 3.5.0-1 - rtnl_ematch_lookup_ops@Base 3.5.0-1 - rtnl_ematch_lookup_ops@libnl_3 3.5.0-1 - rtnl_ematch_lookup_ops_by_name@Base 3.5.0-1 - rtnl_ematch_lookup_ops_by_name@libnl_3 3.5.0-1 - rtnl_ematch_meta_set_lvalue@Base 3.5.0-1 - rtnl_ematch_meta_set_lvalue@libnl_3 3.5.0-1 - rtnl_ematch_meta_set_operand@Base 3.5.0-1 - rtnl_ematch_meta_set_operand@libnl_3 3.5.0-1 - rtnl_ematch_meta_set_rvalue@Base 3.5.0-1 - rtnl_ematch_meta_set_rvalue@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_get_layer@Base 3.5.0-1 - rtnl_ematch_nbyte_get_layer@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_get_len@Base 3.5.0-1 - rtnl_ematch_nbyte_get_len@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_get_offset@Base 3.5.0-1 - rtnl_ematch_nbyte_get_offset@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_get_pattern@Base 3.5.0-1 - rtnl_ematch_nbyte_get_pattern@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_set_offset@Base 3.5.0-1 - rtnl_ematch_nbyte_set_offset@libnl_3 3.5.0-1 - rtnl_ematch_nbyte_set_pattern@Base 3.5.0-1 - rtnl_ematch_nbyte_set_pattern@libnl_3 3.5.0-1 - rtnl_ematch_offset2txt@Base 3.5.0-1 - rtnl_ematch_offset2txt@libnl_3 3.5.0-1 - rtnl_ematch_opnd2txt@Base 3.5.0-1 - rtnl_ematch_opnd2txt@libnl_3 3.5.0-1 - rtnl_ematch_parse_attr@Base 3.5.0-1 - rtnl_ematch_parse_attr@libnl_3 3.5.0-1 - rtnl_ematch_parse_expr@Base 3.5.0-1 - rtnl_ematch_parse_expr@libnl_3 3.5.0-1 - rtnl_ematch_register@Base 3.5.0-1 - rtnl_ematch_register@libnl_3 3.5.0-1 - rtnl_ematch_set_flags@Base 3.5.0-1 - rtnl_ematch_set_flags@libnl_3 3.5.0-1 - rtnl_ematch_set_kind@Base 3.5.0-1 - rtnl_ematch_set_kind@libnl_3 3.5.0-1 - rtnl_ematch_set_name@Base 3.5.0-1 - rtnl_ematch_set_name@libnl_3 3.5.0-1 - rtnl_ematch_set_ops@Base 3.5.0-1 - rtnl_ematch_set_ops@libnl_3 3.5.0-1 - rtnl_ematch_text_get_algo@Base 3.5.0-1 - rtnl_ematch_text_get_algo@libnl_3 3.5.0-1 - rtnl_ematch_text_get_from_layer@Base 3.5.0-1 - rtnl_ematch_text_get_from_layer@libnl_3 3.5.0-1 - rtnl_ematch_text_get_from_offset@Base 3.5.0-1 - rtnl_ematch_text_get_from_offset@libnl_3 3.5.0-1 - rtnl_ematch_text_get_len@Base 3.5.0-1 - rtnl_ematch_text_get_len@libnl_3 3.5.0-1 - rtnl_ematch_text_get_pattern@Base 3.5.0-1 - rtnl_ematch_text_get_pattern@libnl_3 3.5.0-1 - rtnl_ematch_text_get_to_layer@Base 3.5.0-1 - rtnl_ematch_text_get_to_layer@libnl_3 3.5.0-1 - rtnl_ematch_text_get_to_offset@Base 3.5.0-1 - rtnl_ematch_text_get_to_offset@libnl_3 3.5.0-1 - rtnl_ematch_text_set_algo@Base 3.5.0-1 - rtnl_ematch_text_set_algo@libnl_3 3.5.0-1 - rtnl_ematch_text_set_from@Base 3.5.0-1 - rtnl_ematch_text_set_from@libnl_3 3.5.0-1 - rtnl_ematch_text_set_pattern@Base 3.5.0-1 - rtnl_ematch_text_set_pattern@libnl_3 3.5.0-1 - rtnl_ematch_text_set_to@Base 3.5.0-1 - rtnl_ematch_text_set_to@libnl_3 3.5.0-1 - rtnl_ematch_tree_add@Base 3.5.0-1 - rtnl_ematch_tree_add@libnl_3 3.5.0-1 - rtnl_ematch_tree_alloc@Base 3.5.0-1 - rtnl_ematch_tree_alloc@libnl_3 3.5.0-1 - rtnl_ematch_tree_clone@libnl_3_5 3.5.0-1 - rtnl_ematch_tree_dump@Base 3.5.0-1 - rtnl_ematch_tree_dump@libnl_3 3.5.0-1 - rtnl_ematch_tree_free@Base 3.5.0-1 - rtnl_ematch_tree_free@libnl_3 3.5.0-1 - rtnl_ematch_unlink@Base 3.5.0-1 - rtnl_ematch_unlink@libnl_3 3.5.0-1 - rtnl_ematch_unset_flags@Base 3.5.0-1 - rtnl_ematch_unset_flags@libnl_3 3.5.0-1 - rtnl_fw_set_classid@Base 3.5.0-1 - rtnl_fw_set_classid@libnl_3 3.5.0-1 - rtnl_fw_set_mask@Base 3.5.0-1 - rtnl_fw_set_mask@libnl_3 3.5.0-1 - rtnl_gact_get_action@libnl_3_2_29 3.5.0-1 - rtnl_gact_set_action@libnl_3_2_29 3.5.0-1 - rtnl_htb_get_cbuffer@Base 3.5.0-1 - rtnl_htb_get_cbuffer@libnl_3 3.5.0-1 - rtnl_htb_get_ceil64@libnl_3_5 3.5.0-1 - rtnl_htb_get_ceil@Base 3.5.0-1 - rtnl_htb_get_ceil@libnl_3 3.5.0-1 - rtnl_htb_get_defcls@Base 3.5.0-1 - rtnl_htb_get_defcls@libnl_3 3.5.0-1 - rtnl_htb_get_level@Base 3.5.0-1 - rtnl_htb_get_level@libnl_3 3.5.0-1 - rtnl_htb_get_prio@Base 3.5.0-1 - rtnl_htb_get_prio@libnl_3 3.5.0-1 - rtnl_htb_get_quantum@Base 3.5.0-1 - rtnl_htb_get_quantum@libnl_3 3.5.0-1 - rtnl_htb_get_rate2quantum@Base 3.5.0-1 - rtnl_htb_get_rate2quantum@libnl_3 3.5.0-1 - rtnl_htb_get_rate64@libnl_3_5 3.5.0-1 - rtnl_htb_get_rate@Base 3.5.0-1 - rtnl_htb_get_rate@libnl_3 3.5.0-1 - rtnl_htb_get_rbuffer@Base 3.5.0-1 - rtnl_htb_get_rbuffer@libnl_3 3.5.0-1 - rtnl_htb_set_cbuffer@Base 3.5.0-1 - rtnl_htb_set_cbuffer@libnl_3 3.5.0-1 - rtnl_htb_set_ceil64@libnl_3_5 3.5.0-1 - rtnl_htb_set_ceil@Base 3.5.0-1 - rtnl_htb_set_ceil@libnl_3 3.5.0-1 - rtnl_htb_set_defcls@Base 3.5.0-1 - rtnl_htb_set_defcls@libnl_3 3.5.0-1 - rtnl_htb_set_level@Base 3.5.0-1 - rtnl_htb_set_level@libnl_3 3.5.0-1 - rtnl_htb_set_prio@Base 3.5.0-1 - rtnl_htb_set_prio@libnl_3 3.5.0-1 - rtnl_htb_set_quantum@Base 3.5.0-1 - rtnl_htb_set_quantum@libnl_3 3.5.0-1 - rtnl_htb_set_rate2quantum@Base 3.5.0-1 - rtnl_htb_set_rate2quantum@libnl_3 3.5.0-1 - rtnl_htb_set_rate64@libnl_3_5 3.5.0-1 - rtnl_htb_set_rate@Base 3.5.0-1 - rtnl_htb_set_rate@libnl_3 3.5.0-1 - rtnl_htb_set_rbuffer@Base 3.5.0-1 - rtnl_htb_set_rbuffer@libnl_3 3.5.0-1 - rtnl_link_add@Base 3.5.0-1 - rtnl_link_add@libnl_3 3.5.0-1 - rtnl_link_af_alloc@Base 3.5.0-1 - rtnl_link_af_alloc@libnl_3 3.5.0-1 - rtnl_link_af_data@Base 3.5.0-1 - rtnl_link_af_data@libnl_3 3.5.0-1 - rtnl_link_af_data_compare@Base 3.5.0-1 - rtnl_link_af_data_compare@libnl_3 3.5.0-1 - rtnl_link_af_ops_lookup@Base 3.5.0-1 - rtnl_link_af_ops_lookup@libnl_3 3.5.0-1 - rtnl_link_af_ops_put@Base 3.5.0-1 - rtnl_link_af_ops_put@libnl_3 3.5.0-1 - rtnl_link_af_register@Base 3.5.0-1 - rtnl_link_af_register@libnl_3 3.5.0-1 - rtnl_link_af_unregister@Base 3.5.0-1 - rtnl_link_af_unregister@libnl_3 3.5.0-1 - rtnl_link_alloc@Base 3.5.0-1 - rtnl_link_alloc@libnl_3 3.5.0-1 - rtnl_link_alloc_cache@Base 3.5.0-1 - rtnl_link_alloc_cache@libnl_3 3.5.0-1 - rtnl_link_alloc_cache_flags@libnl_3_2_28 3.5.0-1 - rtnl_link_bond_add@Base 3.5.0-1 - rtnl_link_bond_add@libnl_3 3.5.0-1 - rtnl_link_bond_alloc@Base 3.5.0-1 - rtnl_link_bond_alloc@libnl_3 3.5.0-1 - rtnl_link_bond_enslave@Base 3.5.0-1 - rtnl_link_bond_enslave@libnl_3 3.5.0-1 - rtnl_link_bond_enslave_ifindex@Base 3.5.0-1 - rtnl_link_bond_enslave_ifindex@libnl_3 3.5.0-1 - rtnl_link_bond_release@Base 3.5.0-1 - rtnl_link_bond_release@libnl_3 3.5.0-1 - rtnl_link_bond_release_ifindex@Base 3.5.0-1 - rtnl_link_bond_release_ifindex@libnl_3 3.5.0-1 - rtnl_link_bridge_add@Base 3.5.0-1 - rtnl_link_bridge_add@libnl_3 3.5.0-1 - rtnl_link_bridge_alloc@Base 3.5.0-1 - rtnl_link_bridge_alloc@libnl_3 3.5.0-1 - rtnl_link_bridge_flags2str@Base 3.5.0-1 - rtnl_link_bridge_flags2str@libnl_3 3.5.0-1 - rtnl_link_bridge_get_cost@Base 3.5.0-1 - rtnl_link_bridge_get_cost@libnl_3 3.5.0-1 - rtnl_link_bridge_get_flags@Base 3.5.0-1 - rtnl_link_bridge_get_flags@libnl_3 3.5.0-1 - rtnl_link_bridge_get_hwmode@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_get_port_state@Base 3.5.0-1 - rtnl_link_bridge_get_port_state@libnl_3 3.5.0-1 - rtnl_link_bridge_get_port_vlan@libnl_3_2_28 3.5.0-1 - rtnl_link_bridge_get_priority@Base 3.5.0-1 - rtnl_link_bridge_get_priority@libnl_3 3.5.0-1 - rtnl_link_bridge_has_ext_info@Base 3.5.0-1 - rtnl_link_bridge_has_ext_info@libnl_3 3.5.0-1 - rtnl_link_bridge_has_vlan@libnl_3_2_28 3.5.0-1 - rtnl_link_bridge_hwmode2str@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_portstate2str@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_pvid@libnl_3_2_28 3.5.0-1 - rtnl_link_bridge_set_cost@Base 3.5.0-1 - rtnl_link_bridge_set_cost@libnl_3 3.5.0-1 - rtnl_link_bridge_set_flags@Base 3.5.0-1 - rtnl_link_bridge_set_flags@libnl_3 3.5.0-1 - rtnl_link_bridge_set_hwmode@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_set_port_state@Base 3.5.0-1 - rtnl_link_bridge_set_port_state@libnl_3 3.5.0-1 - rtnl_link_bridge_set_priority@Base 3.5.0-1 - rtnl_link_bridge_set_priority@libnl_3 3.5.0-1 - rtnl_link_bridge_set_self@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_str2flags@Base 3.5.0-1 - rtnl_link_bridge_str2flags@libnl_3 3.5.0-1 - rtnl_link_bridge_str2hwmode@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_str2portstate@libnl_3_2_29 3.5.0-1 - rtnl_link_bridge_unset_flags@Base 3.5.0-1 - rtnl_link_bridge_unset_flags@libnl_3 3.5.0-1 - rtnl_link_build_add_request@Base 3.5.0-1 - rtnl_link_build_add_request@libnl_3 3.5.0-1 - rtnl_link_build_change_request@Base 3.5.0-1 - rtnl_link_build_change_request@libnl_3 3.5.0-1 - rtnl_link_build_delete_request@Base 3.5.0-1 - rtnl_link_build_delete_request@libnl_3 3.5.0-1 - rtnl_link_build_get_request@Base 3.5.0-1 - rtnl_link_build_get_request@libnl_3 3.5.0-1 - rtnl_link_can_berr@Base 3.5.0-1 - rtnl_link_can_berr@libnl_3 3.5.0-1 - rtnl_link_can_berr_rx@Base 3.5.0-1 - rtnl_link_can_berr_rx@libnl_3 3.5.0-1 - rtnl_link_can_berr_tx@Base 3.5.0-1 - rtnl_link_can_berr_tx@libnl_3 3.5.0-1 - rtnl_link_can_ctrlmode2str@Base 3.5.0-1 - rtnl_link_can_ctrlmode2str@libnl_3 3.5.0-1 - rtnl_link_can_freq@Base 3.5.0-1 - rtnl_link_can_freq@libnl_3 3.5.0-1 - rtnl_link_can_get_bitrate@Base 3.5.0-1 - rtnl_link_can_get_bitrate@libnl_3 3.5.0-1 - rtnl_link_can_get_bittiming@Base 3.5.0-1 - rtnl_link_can_get_bittiming@libnl_3 3.5.0-1 - rtnl_link_can_get_bt_const@Base 3.5.0-1 - rtnl_link_can_get_bt_const@libnl_3 3.5.0-1 - rtnl_link_can_get_ctrlmode@Base 3.5.0-1 - rtnl_link_can_get_ctrlmode@libnl_3 3.5.0-1 - rtnl_link_can_get_restart_ms@Base 3.5.0-1 - rtnl_link_can_get_restart_ms@libnl_3 3.5.0-1 - rtnl_link_can_get_sample_point@Base 3.5.0-1 - rtnl_link_can_get_sample_point@libnl_3 3.5.0-1 - rtnl_link_can_restart@Base 3.5.0-1 - rtnl_link_can_restart@libnl_3 3.5.0-1 - rtnl_link_can_set_bitrate@Base 3.5.0-1 - rtnl_link_can_set_bitrate@libnl_3 3.5.0-1 - rtnl_link_can_set_bittiming@Base 3.5.0-1 - rtnl_link_can_set_bittiming@libnl_3 3.5.0-1 - rtnl_link_can_set_ctrlmode@Base 3.5.0-1 - rtnl_link_can_set_ctrlmode@libnl_3 3.5.0-1 - rtnl_link_can_set_restart_ms@Base 3.5.0-1 - rtnl_link_can_set_restart_ms@libnl_3 3.5.0-1 - rtnl_link_can_set_sample_point@Base 3.5.0-1 - rtnl_link_can_set_sample_point@libnl_3 3.5.0-1 - rtnl_link_can_state@Base 3.5.0-1 - rtnl_link_can_state@libnl_3 3.5.0-1 - rtnl_link_can_str2ctrlmode@Base 3.5.0-1 - rtnl_link_can_str2ctrlmode@libnl_3 3.5.0-1 - rtnl_link_can_unset_ctrlmode@Base 3.5.0-1 - rtnl_link_can_unset_ctrlmode@libnl_3 3.5.0-1 - rtnl_link_carrier2str@Base 3.5.0-1 - rtnl_link_carrier2str@libnl_3 3.5.0-1 - rtnl_link_change@Base 3.5.0-1 - rtnl_link_change@libnl_3 3.5.0-1 - rtnl_link_delete@Base 3.5.0-1 - rtnl_link_delete@libnl_3 3.5.0-1 - rtnl_link_enslave@Base 3.5.0-1 - rtnl_link_enslave@libnl_3 3.5.0-1 - rtnl_link_enslave_ifindex@Base 3.5.0-1 - rtnl_link_enslave_ifindex@libnl_3 3.5.0-1 - rtnl_link_fill_info@Base 3.5.0-1 - rtnl_link_fill_info@libnl_3 3.5.0-1 - rtnl_link_flags2str@Base 3.5.0-1 - rtnl_link_flags2str@libnl_3 3.5.0-1 - rtnl_link_geneve_alloc@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_flags@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_id@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_label@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_port@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_remote@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_tos@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_ttl@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_udp_csum@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_udp_zero_csum6_rx@libnl_3_5 3.5.0-1 - rtnl_link_geneve_get_udp_zero_csum6_tx@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_flags@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_id@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_label@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_port@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_remote@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_tos@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_ttl@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_udp_csum@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_udp_zero_csum6_rx@libnl_3_5 3.5.0-1 - rtnl_link_geneve_set_udp_zero_csum6_tx@libnl_3_5 3.5.0-1 - rtnl_link_get@Base 3.5.0-1 - rtnl_link_get@libnl_3 3.5.0-1 - rtnl_link_get_addr@Base 3.5.0-1 - rtnl_link_get_addr@libnl_3 3.5.0-1 - rtnl_link_get_arptype@Base 3.5.0-1 - rtnl_link_get_arptype@libnl_3 3.5.0-1 - rtnl_link_get_broadcast@Base 3.5.0-1 - rtnl_link_get_broadcast@libnl_3 3.5.0-1 - rtnl_link_get_by_name@Base 3.5.0-1 - rtnl_link_get_by_name@libnl_3 3.5.0-1 - rtnl_link_get_carrier@Base 3.5.0-1 - rtnl_link_get_carrier@libnl_3 3.5.0-1 - rtnl_link_get_carrier_changes@libnl_3_2_29 3.5.0-1 - rtnl_link_get_family@Base 3.5.0-1 - rtnl_link_get_family@libnl_3 3.5.0-1 - rtnl_link_get_flags@Base 3.5.0-1 - rtnl_link_get_flags@libnl_3 3.5.0-1 - rtnl_link_get_group@Base 3.5.0-1 - rtnl_link_get_group@libnl_3 3.5.0-1 - rtnl_link_get_gso_max_segs@libnl_3_2_29 3.5.0-1 - rtnl_link_get_gso_max_size@libnl_3_2_29 3.5.0-1 - rtnl_link_get_ifalias@Base 3.5.0-1 - rtnl_link_get_ifalias@libnl_3 3.5.0-1 - rtnl_link_get_ifindex@Base 3.5.0-1 - rtnl_link_get_ifindex@libnl_3 3.5.0-1 - rtnl_link_get_info_type@Base 3.5.0-1 - rtnl_link_get_info_type@libnl_3 3.5.0-1 - rtnl_link_get_kernel@Base 3.5.0-1 - rtnl_link_get_kernel@libnl_3 3.5.0-1 - rtnl_link_get_link@Base 3.5.0-1 - rtnl_link_get_link@libnl_3 3.5.0-1 - rtnl_link_get_link_netnsid@Base 3.5.0-1 - rtnl_link_get_link_netnsid@libnl_3_2_27 3.5.0-1 - rtnl_link_get_linkmode@Base 3.5.0-1 - rtnl_link_get_linkmode@libnl_3 3.5.0-1 - rtnl_link_get_master@Base 3.5.0-1 - rtnl_link_get_master@libnl_3 3.5.0-1 - rtnl_link_get_mtu@Base 3.5.0-1 - rtnl_link_get_mtu@libnl_3 3.5.0-1 - rtnl_link_get_name@Base 3.5.0-1 - rtnl_link_get_name@libnl_3 3.5.0-1 - rtnl_link_get_ns_fd@Base 3.5.0-1 - rtnl_link_get_ns_fd@libnl_3 3.5.0-1 - rtnl_link_get_ns_pid@Base 3.5.0-1 - rtnl_link_get_ns_pid@libnl_3 3.5.0-1 - rtnl_link_get_num_rx_queues@Base 3.5.0-1 - rtnl_link_get_num_rx_queues@libnl_3 3.5.0-1 - rtnl_link_get_num_tx_queues@Base 3.5.0-1 - rtnl_link_get_num_tx_queues@libnl_3 3.5.0-1 - rtnl_link_get_num_vf@Base 3.5.0-1 - rtnl_link_get_num_vf@libnl_3 3.5.0-1 - rtnl_link_get_operstate@Base 3.5.0-1 - rtnl_link_get_operstate@libnl_3 3.5.0-1 - rtnl_link_get_phys_port_id@Base 3.5.0-1 - rtnl_link_get_phys_port_id@libnl_3 3.5.0-1 - rtnl_link_get_phys_port_name@libnl_3_2_29 3.5.0-1 - rtnl_link_get_phys_switch_id@libnl_3_2_29 3.5.0-1 - rtnl_link_get_pmtudisc@Base 3.5.0-1 - rtnl_link_get_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_get_promiscuity@Base 3.5.0-1 - rtnl_link_get_promiscuity@libnl_3 3.5.0-1 - rtnl_link_get_qdisc@Base 3.5.0-1 - rtnl_link_get_qdisc@libnl_3 3.5.0-1 - rtnl_link_get_slave_type@libnl_3_5 3.5.0-1 - rtnl_link_get_stat@Base 3.5.0-1 - rtnl_link_get_stat@libnl_3 3.5.0-1 - rtnl_link_get_txqlen@Base 3.5.0-1 - rtnl_link_get_txqlen@libnl_3 3.5.0-1 - rtnl_link_get_type@Base 3.5.0-1 - rtnl_link_get_type@libnl_3 3.5.0-1 - rtnl_link_get_weight@Base 3.5.0-1 - rtnl_link_get_weight@libnl_3 3.5.0-1 - rtnl_link_has_vf_list@libnl_3_2_29 3.5.0-1 - rtnl_link_i2name@Base 3.5.0-1 - rtnl_link_i2name@libnl_3 3.5.0-1 - rtnl_link_inet6_addrgenmode2str@Base 3.5.0-1 - rtnl_link_inet6_addrgenmode2str@libnl_3 3.5.0-1 - rtnl_link_inet6_flags2str@libnl_3_4 3.5.0-1 - rtnl_link_inet6_get_addr_gen_mode@Base 3.5.0-1 - rtnl_link_inet6_get_addr_gen_mode@libnl_3 3.5.0-1 - rtnl_link_inet6_get_flags@libnl_3_4 3.5.0-1 - rtnl_link_inet6_get_token@Base 3.5.0-1 - rtnl_link_inet6_get_token@libnl_3 3.5.0-1 - rtnl_link_inet6_set_addr_gen_mode@Base 3.5.0-1 - rtnl_link_inet6_set_addr_gen_mode@libnl_3 3.5.0-1 - rtnl_link_inet6_set_flags@libnl_3_4 3.5.0-1 - rtnl_link_inet6_set_token@Base 3.5.0-1 - rtnl_link_inet6_set_token@libnl_3 3.5.0-1 - rtnl_link_inet6_str2addrgenmode@Base 3.5.0-1 - rtnl_link_inet6_str2addrgenmode@libnl_3 3.5.0-1 - rtnl_link_inet6_str2flags@libnl_3_4 3.5.0-1 - rtnl_link_inet_devconf2str@Base 3.5.0-1 - rtnl_link_inet_devconf2str@libnl_3 3.5.0-1 - rtnl_link_inet_get_conf@Base 3.5.0-1 - rtnl_link_inet_get_conf@libnl_3 3.5.0-1 - rtnl_link_inet_set_conf@Base 3.5.0-1 - rtnl_link_inet_set_conf@libnl_3 3.5.0-1 - rtnl_link_inet_str2devconf@Base 3.5.0-1 - rtnl_link_inet_str2devconf@libnl_3 3.5.0-1 - rtnl_link_info_ops_lookup@Base 3.5.0-1 - rtnl_link_info_ops_lookup@libnl_3 3.5.0-1 - rtnl_link_info_ops_put@Base 3.5.0-1 - rtnl_link_info_ops_put@libnl_3 3.5.0-1 - rtnl_link_info_parse@Base 3.5.0-1 - rtnl_link_info_parse@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_add@Base 3.5.0-1 - rtnl_link_ip6_tnl_add@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_alloc@Base 3.5.0-1 - rtnl_link_ip6_tnl_alloc@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_encaplimit@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_encaplimit@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_flags@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_flags@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_flowinfo@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_flowinfo@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_link@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_link@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_local@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_local@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_proto@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_proto@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_remote@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_remote@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_tos@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_tos@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_get_ttl@Base 3.5.0-1 - rtnl_link_ip6_tnl_get_ttl@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_encaplimit@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_encaplimit@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_flags@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_flags@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_flowinfo@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_flowinfo@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_link@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_link@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_local@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_local@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_proto@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_proto@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_remote@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_remote@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_tos@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_tos@libnl_3 3.5.0-1 - rtnl_link_ip6_tnl_set_ttl@Base 3.5.0-1 - rtnl_link_ip6_tnl_set_ttl@libnl_3 3.5.0-1 - rtnl_link_ipgre_add@Base 3.5.0-1 - rtnl_link_ipgre_add@libnl_3 3.5.0-1 - rtnl_link_ipgre_alloc@Base 3.5.0-1 - rtnl_link_ipgre_alloc@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_iflags@Base 3.5.0-1 - rtnl_link_ipgre_get_iflags@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_ikey@Base 3.5.0-1 - rtnl_link_ipgre_get_ikey@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_link@Base 3.5.0-1 - rtnl_link_ipgre_get_link@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_local@Base 3.5.0-1 - rtnl_link_ipgre_get_local@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_oflags@Base 3.5.0-1 - rtnl_link_ipgre_get_oflags@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_okey@Base 3.5.0-1 - rtnl_link_ipgre_get_okey@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_pmtudisc@libnl_3_2_29 3.5.0-1 - rtnl_link_ipgre_get_remote@Base 3.5.0-1 - rtnl_link_ipgre_get_remote@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_tos@Base 3.5.0-1 - rtnl_link_ipgre_get_tos@libnl_3 3.5.0-1 - rtnl_link_ipgre_get_ttl@Base 3.5.0-1 - rtnl_link_ipgre_get_ttl@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_iflags@Base 3.5.0-1 - rtnl_link_ipgre_set_iflags@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_ikey@Base 3.5.0-1 - rtnl_link_ipgre_set_ikey@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_link@Base 3.5.0-1 - rtnl_link_ipgre_set_link@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_local@Base 3.5.0-1 - rtnl_link_ipgre_set_local@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_oflags@Base 3.5.0-1 - rtnl_link_ipgre_set_oflags@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_okey@Base 3.5.0-1 - rtnl_link_ipgre_set_okey@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_pmtudisc@Base 3.5.0-1 - rtnl_link_ipgre_set_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_remote@Base 3.5.0-1 - rtnl_link_ipgre_set_remote@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_tos@Base 3.5.0-1 - rtnl_link_ipgre_set_tos@libnl_3 3.5.0-1 - rtnl_link_ipgre_set_ttl@Base 3.5.0-1 - rtnl_link_ipgre_set_ttl@libnl_3 3.5.0-1 - rtnl_link_ipgretap_add@libnl_3_2_28 3.5.0-1 - rtnl_link_ipgretap_alloc@libnl_3_2_28 3.5.0-1 - rtnl_link_ipip_add@Base 3.5.0-1 - rtnl_link_ipip_add@libnl_3 3.5.0-1 - rtnl_link_ipip_alloc@Base 3.5.0-1 - rtnl_link_ipip_alloc@libnl_3 3.5.0-1 - rtnl_link_ipip_get_link@Base 3.5.0-1 - rtnl_link_ipip_get_link@libnl_3 3.5.0-1 - rtnl_link_ipip_get_local@Base 3.5.0-1 - rtnl_link_ipip_get_local@libnl_3 3.5.0-1 - rtnl_link_ipip_get_pmtudisc@Base 3.5.0-1 - rtnl_link_ipip_get_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_ipip_get_remote@Base 3.5.0-1 - rtnl_link_ipip_get_remote@libnl_3 3.5.0-1 - rtnl_link_ipip_get_tos@Base 3.5.0-1 - rtnl_link_ipip_get_tos@libnl_3 3.5.0-1 - rtnl_link_ipip_get_ttl@Base 3.5.0-1 - rtnl_link_ipip_get_ttl@libnl_3 3.5.0-1 - rtnl_link_ipip_set_link@Base 3.5.0-1 - rtnl_link_ipip_set_link@libnl_3 3.5.0-1 - rtnl_link_ipip_set_local@Base 3.5.0-1 - rtnl_link_ipip_set_local@libnl_3 3.5.0-1 - rtnl_link_ipip_set_pmtudisc@Base 3.5.0-1 - rtnl_link_ipip_set_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_ipip_set_remote@Base 3.5.0-1 - rtnl_link_ipip_set_remote@libnl_3 3.5.0-1 - rtnl_link_ipip_set_tos@Base 3.5.0-1 - rtnl_link_ipip_set_tos@libnl_3 3.5.0-1 - rtnl_link_ipip_set_ttl@Base 3.5.0-1 - rtnl_link_ipip_set_ttl@libnl_3 3.5.0-1 - rtnl_link_ipvlan_alloc@Base 3.5.0-1 - rtnl_link_ipvlan_alloc@libnl_3_2_27 3.5.0-1 - rtnl_link_ipvlan_get_mode@Base 3.5.0-1 - rtnl_link_ipvlan_get_mode@libnl_3_2_27 3.5.0-1 - rtnl_link_ipvlan_mode2str@Base 3.5.0-1 - rtnl_link_ipvlan_mode2str@libnl_3_2_27 3.5.0-1 - rtnl_link_ipvlan_set_mode@Base 3.5.0-1 - rtnl_link_ipvlan_set_mode@libnl_3_2_27 3.5.0-1 - rtnl_link_ipvlan_str2mode@Base 3.5.0-1 - rtnl_link_ipvlan_str2mode@libnl_3_2_27 3.5.0-1 - rtnl_link_ipvti_add@Base 3.5.0-1 - rtnl_link_ipvti_add@libnl_3 3.5.0-1 - rtnl_link_ipvti_alloc@Base 3.5.0-1 - rtnl_link_ipvti_alloc@libnl_3 3.5.0-1 - rtnl_link_ipvti_get_ikey@Base 3.5.0-1 - rtnl_link_ipvti_get_ikey@libnl_3 3.5.0-1 - rtnl_link_ipvti_get_link@Base 3.5.0-1 - rtnl_link_ipvti_get_link@libnl_3 3.5.0-1 - rtnl_link_ipvti_get_local@Base 3.5.0-1 - rtnl_link_ipvti_get_local@libnl_3 3.5.0-1 - rtnl_link_ipvti_get_okey@Base 3.5.0-1 - rtnl_link_ipvti_get_okey@libnl_3 3.5.0-1 - rtnl_link_ipvti_get_remote@Base 3.5.0-1 - rtnl_link_ipvti_get_remote@libnl_3 3.5.0-1 - rtnl_link_ipvti_set_ikey@Base 3.5.0-1 - rtnl_link_ipvti_set_ikey@libnl_3 3.5.0-1 - rtnl_link_ipvti_set_link@Base 3.5.0-1 - rtnl_link_ipvti_set_link@libnl_3 3.5.0-1 - rtnl_link_ipvti_set_local@Base 3.5.0-1 - rtnl_link_ipvti_set_local@libnl_3 3.5.0-1 - rtnl_link_ipvti_set_okey@Base 3.5.0-1 - rtnl_link_ipvti_set_okey@libnl_3 3.5.0-1 - rtnl_link_ipvti_set_remote@Base 3.5.0-1 - rtnl_link_ipvti_set_remote@libnl_3 3.5.0-1 - rtnl_link_is_bridge@Base 3.5.0-1 - rtnl_link_is_bridge@libnl_3 3.5.0-1 - rtnl_link_is_can@Base 3.5.0-1 - rtnl_link_is_can@libnl_3 3.5.0-1 - rtnl_link_is_geneve@libnl_3_5 3.5.0-1 - rtnl_link_is_ip6_tnl@Base 3.5.0-1 - rtnl_link_is_ip6_tnl@libnl_3 3.5.0-1 - rtnl_link_is_ipgre@Base 3.5.0-1 - rtnl_link_is_ipgre@libnl_3 3.5.0-1 - rtnl_link_is_ipgretap@libnl_3_2_29 3.5.0-1 - rtnl_link_is_ipip@Base 3.5.0-1 - rtnl_link_is_ipip@libnl_3 3.5.0-1 - rtnl_link_is_ipvlan@Base 3.5.0-1 - rtnl_link_is_ipvlan@libnl_3_2_27 3.5.0-1 - rtnl_link_is_ipvti@Base 3.5.0-1 - rtnl_link_is_ipvti@libnl_3 3.5.0-1 - rtnl_link_is_macvlan@Base 3.5.0-1 - rtnl_link_is_macvlan@libnl_3 3.5.0-1 - rtnl_link_is_macvtap@libnl_3_2_28 3.5.0-1 - rtnl_link_is_sit@Base 3.5.0-1 - rtnl_link_is_sit@libnl_3 3.5.0-1 - rtnl_link_is_veth@Base 3.5.0-1 - rtnl_link_is_veth@libnl_3 3.5.0-1 - rtnl_link_is_vlan@Base 3.5.0-1 - rtnl_link_is_vlan@libnl_3 3.5.0-1 - rtnl_link_is_vrf@libnl_3_2_28 3.5.0-1 - rtnl_link_is_vxlan@Base 3.5.0-1 - rtnl_link_is_vxlan@libnl_3 3.5.0-1 - rtnl_link_is_xfrmi@libnl_3_5 3.5.0-1 - rtnl_link_macsec_alloc@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_cipher_suite@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_encoding_sa@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_encrypt@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_end_station@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_icv_len@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_port@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_protect@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_replay_protect@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_scb@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_sci@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_send_sci@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_validation_type@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_get_window@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_cipher_suite@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_encoding_sa@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_encrypt@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_end_station@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_icv_len@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_port@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_protect@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_replay_protect@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_scb@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_sci@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_send_sci@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_validation_type@libnl_3_2_28 3.5.0-1 - rtnl_link_macsec_set_window@libnl_3_2_28 3.5.0-1 - rtnl_link_macvlan_add_macaddr@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_alloc@Base 3.5.0-1 - rtnl_link_macvlan_alloc@libnl_3 3.5.0-1 - rtnl_link_macvlan_count_macaddr@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_del_macaddr@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_flags2str@Base 3.5.0-1 - rtnl_link_macvlan_flags2str@libnl_3 3.5.0-1 - rtnl_link_macvlan_get_flags@Base 3.5.0-1 - rtnl_link_macvlan_get_flags@libnl_3 3.5.0-1 - rtnl_link_macvlan_get_macaddr@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_get_macmode@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_get_mode@Base 3.5.0-1 - rtnl_link_macvlan_get_mode@libnl_3 3.5.0-1 - rtnl_link_macvlan_macmode2str@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_mode2str@Base 3.5.0-1 - rtnl_link_macvlan_mode2str@libnl_3 3.5.0-1 - rtnl_link_macvlan_set_flags@Base 3.5.0-1 - rtnl_link_macvlan_set_flags@libnl_3 3.5.0-1 - rtnl_link_macvlan_set_macmode@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_set_mode@Base 3.5.0-1 - rtnl_link_macvlan_set_mode@libnl_3 3.5.0-1 - rtnl_link_macvlan_str2flags@Base 3.5.0-1 - rtnl_link_macvlan_str2flags@libnl_3 3.5.0-1 - rtnl_link_macvlan_str2macmode@libnl_3_2_29 3.5.0-1 - rtnl_link_macvlan_str2mode@Base 3.5.0-1 - rtnl_link_macvlan_str2mode@libnl_3 3.5.0-1 - rtnl_link_macvlan_unset_flags@Base 3.5.0-1 - rtnl_link_macvlan_unset_flags@libnl_3 3.5.0-1 - rtnl_link_macvtap_alloc@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_flags2str@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_get_flags@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_get_mode@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_mode2str@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_set_flags@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_set_mode@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_str2flags@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_str2mode@libnl_3_2_28 3.5.0-1 - rtnl_link_macvtap_unset_flags@libnl_3_2_28 3.5.0-1 - rtnl_link_mode2str@Base 3.5.0-1 - rtnl_link_mode2str@libnl_3 3.5.0-1 - rtnl_link_name2i@Base 3.5.0-1 - rtnl_link_name2i@libnl_3 3.5.0-1 - rtnl_link_operstate2str@Base 3.5.0-1 - rtnl_link_operstate2str@libnl_3 3.5.0-1 - rtnl_link_ppp_alloc@libnl_3_2_29 3.5.0-1 - rtnl_link_ppp_get_fd@libnl_3_2_29 3.5.0-1 - rtnl_link_ppp_set_fd@libnl_3_2_29 3.5.0-1 - rtnl_link_put@Base 3.5.0-1 - rtnl_link_put@libnl_3 3.5.0-1 - rtnl_link_register_info@Base 3.5.0-1 - rtnl_link_register_info@libnl_3 3.5.0-1 - rtnl_link_release@Base 3.5.0-1 - rtnl_link_release@libnl_3 3.5.0-1 - rtnl_link_release_ifindex@Base 3.5.0-1 - rtnl_link_release_ifindex@libnl_3 3.5.0-1 - rtnl_link_set_addr@Base 3.5.0-1 - rtnl_link_set_addr@libnl_3 3.5.0-1 - rtnl_link_set_arptype@Base 3.5.0-1 - rtnl_link_set_arptype@libnl_3 3.5.0-1 - rtnl_link_set_broadcast@Base 3.5.0-1 - rtnl_link_set_broadcast@libnl_3 3.5.0-1 - rtnl_link_set_carrier@Base 3.5.0-1 - rtnl_link_set_carrier@libnl_3 3.5.0-1 - rtnl_link_set_family@Base 3.5.0-1 - rtnl_link_set_family@libnl_3 3.5.0-1 - rtnl_link_set_flags@Base 3.5.0-1 - rtnl_link_set_flags@libnl_3 3.5.0-1 - rtnl_link_set_group@Base 3.5.0-1 - rtnl_link_set_group@libnl_3 3.5.0-1 - rtnl_link_set_ifalias@Base 3.5.0-1 - rtnl_link_set_ifalias@libnl_3 3.5.0-1 - rtnl_link_set_ifindex@Base 3.5.0-1 - rtnl_link_set_ifindex@libnl_3 3.5.0-1 - rtnl_link_set_info_type@Base 3.5.0-1 - rtnl_link_set_info_type@libnl_3 3.5.0-1 - rtnl_link_set_link@Base 3.5.0-1 - rtnl_link_set_link@libnl_3 3.5.0-1 - rtnl_link_set_link_netnsid@Base 3.5.0-1 - rtnl_link_set_link_netnsid@libnl_3_2_27 3.5.0-1 - rtnl_link_set_linkmode@Base 3.5.0-1 - rtnl_link_set_linkmode@libnl_3 3.5.0-1 - rtnl_link_set_master@Base 3.5.0-1 - rtnl_link_set_master@libnl_3 3.5.0-1 - rtnl_link_set_mtu@Base 3.5.0-1 - rtnl_link_set_mtu@libnl_3 3.5.0-1 - rtnl_link_set_name@Base 3.5.0-1 - rtnl_link_set_name@libnl_3 3.5.0-1 - rtnl_link_set_ns_fd@Base 3.5.0-1 - rtnl_link_set_ns_fd@libnl_3 3.5.0-1 - rtnl_link_set_ns_pid@Base 3.5.0-1 - rtnl_link_set_ns_pid@libnl_3 3.5.0-1 - rtnl_link_set_num_rx_queues@Base 3.5.0-1 - rtnl_link_set_num_rx_queues@libnl_3 3.5.0-1 - rtnl_link_set_num_tx_queues@Base 3.5.0-1 - rtnl_link_set_num_tx_queues@libnl_3 3.5.0-1 - rtnl_link_set_operstate@Base 3.5.0-1 - rtnl_link_set_operstate@libnl_3 3.5.0-1 - rtnl_link_set_promiscuity@Base 3.5.0-1 - rtnl_link_set_promiscuity@libnl_3 3.5.0-1 - rtnl_link_set_qdisc@Base 3.5.0-1 - rtnl_link_set_qdisc@libnl_3 3.5.0-1 - rtnl_link_set_slave_type@libnl_3_5 3.5.0-1 - rtnl_link_set_stat@Base 3.5.0-1 - rtnl_link_set_stat@libnl_3 3.5.0-1 - rtnl_link_set_txqlen@Base 3.5.0-1 - rtnl_link_set_txqlen@libnl_3 3.5.0-1 - rtnl_link_set_type@Base 3.5.0-1 - rtnl_link_set_type@libnl_3 3.5.0-1 - rtnl_link_set_vf_list@libnl_3_2_29 3.5.0-1 - rtnl_link_set_weight@Base 3.5.0-1 - rtnl_link_set_weight@libnl_3 3.5.0-1 - rtnl_link_sit_add@Base 3.5.0-1 - rtnl_link_sit_add@libnl_3 3.5.0-1 - rtnl_link_sit_alloc@Base 3.5.0-1 - rtnl_link_sit_alloc@libnl_3 3.5.0-1 - rtnl_link_sit_get_flags@Base 3.5.0-1 - rtnl_link_sit_get_flags@libnl_3 3.5.0-1 - rtnl_link_sit_get_ip6rd_prefix@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_get_ip6rd_prefixlen@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_get_ip6rd_relay_prefix@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_get_ip6rd_relay_prefixlen@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_get_link@Base 3.5.0-1 - rtnl_link_sit_get_link@libnl_3 3.5.0-1 - rtnl_link_sit_get_local@Base 3.5.0-1 - rtnl_link_sit_get_local@libnl_3 3.5.0-1 - rtnl_link_sit_get_pmtudisc@Base 3.5.0-1 - rtnl_link_sit_get_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_sit_get_proto@Base 3.5.0-1 - rtnl_link_sit_get_proto@libnl_3 3.5.0-1 - rtnl_link_sit_get_remote@Base 3.5.0-1 - rtnl_link_sit_get_remote@libnl_3 3.5.0-1 - rtnl_link_sit_get_tos@Base 3.5.0-1 - rtnl_link_sit_get_tos@libnl_3 3.5.0-1 - rtnl_link_sit_get_ttl@Base 3.5.0-1 - rtnl_link_sit_get_ttl@libnl_3 3.5.0-1 - rtnl_link_sit_set_flags@Base 3.5.0-1 - rtnl_link_sit_set_flags@libnl_3 3.5.0-1 - rtnl_link_sit_set_ip6rd_prefix@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_set_ip6rd_prefixlen@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_set_ip6rd_relay_prefix@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_set_ip6rd_relay_prefixlen@libnl_3_2_28 3.5.0-1 - rtnl_link_sit_set_link@Base 3.5.0-1 - rtnl_link_sit_set_link@libnl_3 3.5.0-1 - rtnl_link_sit_set_local@Base 3.5.0-1 - rtnl_link_sit_set_local@libnl_3 3.5.0-1 - rtnl_link_sit_set_pmtudisc@Base 3.5.0-1 - rtnl_link_sit_set_pmtudisc@libnl_3 3.5.0-1 - rtnl_link_sit_set_proto@Base 3.5.0-1 - rtnl_link_sit_set_proto@libnl_3 3.5.0-1 - rtnl_link_sit_set_remote@Base 3.5.0-1 - rtnl_link_sit_set_remote@libnl_3 3.5.0-1 - rtnl_link_sit_set_tos@Base 3.5.0-1 - rtnl_link_sit_set_tos@libnl_3 3.5.0-1 - rtnl_link_sit_set_ttl@Base 3.5.0-1 - rtnl_link_sit_set_ttl@libnl_3 3.5.0-1 - rtnl_link_stat2str@Base 3.5.0-1 - rtnl_link_stat2str@libnl_3 3.5.0-1 - rtnl_link_str2carrier@Base 3.5.0-1 - rtnl_link_str2carrier@libnl_3 3.5.0-1 - rtnl_link_str2flags@Base 3.5.0-1 - rtnl_link_str2flags@libnl_3 3.5.0-1 - rtnl_link_str2mode@Base 3.5.0-1 - rtnl_link_str2mode@libnl_3 3.5.0-1 - rtnl_link_str2operstate@Base 3.5.0-1 - rtnl_link_str2operstate@libnl_3 3.5.0-1 - rtnl_link_str2stat@Base 3.5.0-1 - rtnl_link_str2stat@libnl_3 3.5.0-1 - rtnl_link_unregister_info@Base 3.5.0-1 - rtnl_link_unregister_info@libnl_3 3.5.0-1 - rtnl_link_unset_flags@Base 3.5.0-1 - rtnl_link_unset_flags@libnl_3 3.5.0-1 - rtnl_link_unset_vf_list@libnl_3_2_29 3.5.0-1 - rtnl_link_veth_add@Base 3.5.0-1 - rtnl_link_veth_add@libnl_3 3.5.0-1 - rtnl_link_veth_alloc@Base 3.5.0-1 - rtnl_link_veth_alloc@libnl_3 3.5.0-1 - rtnl_link_veth_get_peer@Base 3.5.0-1 - rtnl_link_veth_get_peer@libnl_3 3.5.0-1 - rtnl_link_veth_release@Base 3.5.0-1 - rtnl_link_veth_release@libnl_3 3.5.0-1 - rtnl_link_vf_add@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_alloc@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_free@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_addr@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_index@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_linkstate@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_rate@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_rss_query_en@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_spoofchk@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_stat@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_trust@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_get_vlans@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_linkstate2str@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_put@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_addr@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_ib_node_guid@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_ib_port_guid@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_index@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_linkstate@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_rate@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_rss_query_en@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_spoofchk@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_trust@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_set_vlans@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_str2guid@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_str2linkstate@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_str2vlanproto@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_vlan_alloc@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_vlan_free@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_vlan_put@libnl_3_2_29 3.5.0-1 - rtnl_link_vf_vlanproto2str@libnl_3_2_29 3.5.0-1 - rtnl_link_vlan_alloc@Base 3.5.0-1 - rtnl_link_vlan_alloc@libnl_3 3.5.0-1 - rtnl_link_vlan_flags2str@Base 3.5.0-1 - rtnl_link_vlan_flags2str@libnl_3 3.5.0-1 - rtnl_link_vlan_get_egress_map@Base 3.5.0-1 - rtnl_link_vlan_get_egress_map@libnl_3 3.5.0-1 - rtnl_link_vlan_get_flags@Base 3.5.0-1 - rtnl_link_vlan_get_flags@libnl_3 3.5.0-1 - rtnl_link_vlan_get_id@Base 3.5.0-1 - rtnl_link_vlan_get_id@libnl_3 3.5.0-1 - rtnl_link_vlan_get_ingress_map@Base 3.5.0-1 - rtnl_link_vlan_get_ingress_map@libnl_3 3.5.0-1 - rtnl_link_vlan_get_protocol@Base 3.5.0-1 - rtnl_link_vlan_get_protocol@libnl_3 3.5.0-1 - rtnl_link_vlan_set_egress_map@Base 3.5.0-1 - rtnl_link_vlan_set_egress_map@libnl_3 3.5.0-1 - rtnl_link_vlan_set_flags@Base 3.5.0-1 - rtnl_link_vlan_set_flags@libnl_3 3.5.0-1 - rtnl_link_vlan_set_id@Base 3.5.0-1 - rtnl_link_vlan_set_id@libnl_3 3.5.0-1 - rtnl_link_vlan_set_ingress_map@Base 3.5.0-1 - rtnl_link_vlan_set_ingress_map@libnl_3 3.5.0-1 - rtnl_link_vlan_set_protocol@Base 3.5.0-1 - rtnl_link_vlan_set_protocol@libnl_3 3.5.0-1 - rtnl_link_vlan_str2flags@Base 3.5.0-1 - rtnl_link_vlan_str2flags@libnl_3 3.5.0-1 - rtnl_link_vlan_unset_flags@Base 3.5.0-1 - rtnl_link_vlan_unset_flags@libnl_3 3.5.0-1 - rtnl_link_vrf_alloc@libnl_3_2_28 3.5.0-1 - rtnl_link_vrf_get_tableid@libnl_3_2_28 3.5.0-1 - rtnl_link_vrf_set_tableid@libnl_3_2_28 3.5.0-1 - rtnl_link_vxlan_alloc@Base 3.5.0-1 - rtnl_link_vxlan_alloc@libnl_3 3.5.0-1 - rtnl_link_vxlan_disable_l2miss@Base 3.5.0-1 - rtnl_link_vxlan_disable_l2miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_disable_l3miss@Base 3.5.0-1 - rtnl_link_vxlan_disable_l3miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_disable_learning@Base 3.5.0-1 - rtnl_link_vxlan_disable_learning@libnl_3 3.5.0-1 - rtnl_link_vxlan_disable_proxy@Base 3.5.0-1 - rtnl_link_vxlan_disable_proxy@libnl_3 3.5.0-1 - rtnl_link_vxlan_disable_rsc@Base 3.5.0-1 - rtnl_link_vxlan_disable_rsc@libnl_3 3.5.0-1 - rtnl_link_vxlan_enable_l2miss@Base 3.5.0-1 - rtnl_link_vxlan_enable_l2miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_enable_l3miss@Base 3.5.0-1 - rtnl_link_vxlan_enable_l3miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_enable_learning@Base 3.5.0-1 - rtnl_link_vxlan_enable_learning@libnl_3 3.5.0-1 - rtnl_link_vxlan_enable_proxy@Base 3.5.0-1 - rtnl_link_vxlan_enable_proxy@libnl_3 3.5.0-1 - rtnl_link_vxlan_enable_rsc@Base 3.5.0-1 - rtnl_link_vxlan_enable_rsc@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_ageing@Base 3.5.0-1 - rtnl_link_vxlan_get_ageing@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_collect_metadata@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_flags@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_group@Base 3.5.0-1 - rtnl_link_vxlan_get_group@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_id@Base 3.5.0-1 - rtnl_link_vxlan_get_id@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_l2miss@Base 3.5.0-1 - rtnl_link_vxlan_get_l2miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_l3miss@Base 3.5.0-1 - rtnl_link_vxlan_get_l3miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_label@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_learning@Base 3.5.0-1 - rtnl_link_vxlan_get_learning@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_limit@Base 3.5.0-1 - rtnl_link_vxlan_get_limit@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_link@Base 3.5.0-1 - rtnl_link_vxlan_get_link@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_local@Base 3.5.0-1 - rtnl_link_vxlan_get_local@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_port@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_port_range@Base 3.5.0-1 - rtnl_link_vxlan_get_port_range@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_proxy@Base 3.5.0-1 - rtnl_link_vxlan_get_proxy@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_remcsum_rx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_remcsum_tx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_rsc@Base 3.5.0-1 - rtnl_link_vxlan_get_rsc@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_tos@Base 3.5.0-1 - rtnl_link_vxlan_get_tos@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_ttl@Base 3.5.0-1 - rtnl_link_vxlan_get_ttl@libnl_3 3.5.0-1 - rtnl_link_vxlan_get_udp_csum@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_udp_zero_csum6_rx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_get_udp_zero_csum6_tx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_ageing@Base 3.5.0-1 - rtnl_link_vxlan_set_ageing@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_collect_metadata@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_flags@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_group@Base 3.5.0-1 - rtnl_link_vxlan_set_group@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_id@Base 3.5.0-1 - rtnl_link_vxlan_set_id@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_l2miss@Base 3.5.0-1 - rtnl_link_vxlan_set_l2miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_l3miss@Base 3.5.0-1 - rtnl_link_vxlan_set_l3miss@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_label@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_learning@Base 3.5.0-1 - rtnl_link_vxlan_set_learning@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_limit@Base 3.5.0-1 - rtnl_link_vxlan_set_limit@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_link@Base 3.5.0-1 - rtnl_link_vxlan_set_link@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_local@Base 3.5.0-1 - rtnl_link_vxlan_set_local@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_port@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_port_range@Base 3.5.0-1 - rtnl_link_vxlan_set_port_range@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_proxy@Base 3.5.0-1 - rtnl_link_vxlan_set_proxy@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_remcsum_rx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_remcsum_tx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_rsc@Base 3.5.0-1 - rtnl_link_vxlan_set_rsc@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_tos@Base 3.5.0-1 - rtnl_link_vxlan_set_tos@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_ttl@Base 3.5.0-1 - rtnl_link_vxlan_set_ttl@libnl_3 3.5.0-1 - rtnl_link_vxlan_set_udp_csum@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_udp_zero_csum6_rx@libnl_3_2_29 3.5.0-1 - rtnl_link_vxlan_set_udp_zero_csum6_tx@libnl_3_2_29 3.5.0-1 - rtnl_link_xfrmi_alloc@libnl_3_5 3.5.0-1 - rtnl_link_xfrmi_get_if_id@libnl_3_5 3.5.0-1 - rtnl_link_xfrmi_get_link@libnl_3_5 3.5.0-1 - rtnl_link_xfrmi_set_if_id@libnl_3_5 3.5.0-1 - rtnl_link_xfrmi_set_link@libnl_3_5 3.5.0-1 - rtnl_mall_append_action@libnl_3_5 3.5.0-1 - rtnl_mall_del_action@libnl_3_5 3.5.0-1 - rtnl_mall_get_classid@libnl_3_5 3.5.0-1 - rtnl_mall_get_first_action@libnl_3_5 3.5.0-1 - rtnl_mall_get_flags@libnl_3_5 3.5.0-1 - rtnl_mall_set_classid@libnl_3_5 3.5.0-1 - rtnl_mall_set_flags@libnl_3_5 3.5.0-1 - rtnl_meta_value_alloc_id@Base 3.5.0-1 - rtnl_meta_value_alloc_id@libnl_3 3.5.0-1 - rtnl_meta_value_alloc_int@Base 3.5.0-1 - rtnl_meta_value_alloc_int@libnl_3 3.5.0-1 - rtnl_meta_value_alloc_var@Base 3.5.0-1 - rtnl_meta_value_alloc_var@libnl_3 3.5.0-1 - rtnl_meta_value_put@Base 3.5.0-1 - rtnl_meta_value_put@libnl_3 3.5.0-1 - rtnl_mirred_get_action@Base 3.5.0-1 - rtnl_mirred_get_action@libnl_3 3.5.0-1 - rtnl_mirred_get_ifindex@Base 3.5.0-1 - rtnl_mirred_get_ifindex@libnl_3 3.5.0-1 - rtnl_mirred_get_policy@Base 3.5.0-1 - rtnl_mirred_get_policy@libnl_3 3.5.0-1 - rtnl_mirred_set_action@Base 3.5.0-1 - rtnl_mirred_set_action@libnl_3 3.5.0-1 - rtnl_mirred_set_ifindex@Base 3.5.0-1 - rtnl_mirred_set_ifindex@libnl_3 3.5.0-1 - rtnl_mirred_set_policy@Base 3.5.0-1 - rtnl_mirred_set_policy@libnl_3 3.5.0-1 - rtnl_neigh_add@Base 3.5.0-1 - rtnl_neigh_add@libnl_3 3.5.0-1 - rtnl_neigh_alloc@Base 3.5.0-1 - rtnl_neigh_alloc@libnl_3 3.5.0-1 - rtnl_neigh_alloc_cache@Base 3.5.0-1 - rtnl_neigh_alloc_cache@libnl_3 3.5.0-1 - rtnl_neigh_alloc_cache_flags@libnl_3_2_28 3.5.0-1 - rtnl_neigh_build_add_request@Base 3.5.0-1 - rtnl_neigh_build_add_request@libnl_3 3.5.0-1 - rtnl_neigh_build_delete_request@Base 3.5.0-1 - rtnl_neigh_build_delete_request@libnl_3 3.5.0-1 - rtnl_neigh_delete@Base 3.5.0-1 - rtnl_neigh_delete@libnl_3 3.5.0-1 - rtnl_neigh_flags2str@Base 3.5.0-1 - rtnl_neigh_flags2str@libnl_3 3.5.0-1 - rtnl_neigh_get@Base 3.5.0-1 - rtnl_neigh_get@libnl_3 3.5.0-1 - rtnl_neigh_get_by_vlan@libnl_3_5 3.5.0-1 - rtnl_neigh_get_dst@Base 3.5.0-1 - rtnl_neigh_get_dst@libnl_3 3.5.0-1 - rtnl_neigh_get_family@Base 3.5.0-1 - rtnl_neigh_get_family@libnl_3 3.5.0-1 - rtnl_neigh_get_flags@Base 3.5.0-1 - rtnl_neigh_get_flags@libnl_3 3.5.0-1 - rtnl_neigh_get_ifindex@Base 3.5.0-1 - rtnl_neigh_get_ifindex@libnl_3 3.5.0-1 - rtnl_neigh_get_lladdr@Base 3.5.0-1 - rtnl_neigh_get_lladdr@libnl_3 3.5.0-1 - rtnl_neigh_get_master@libnl_3_5 3.5.0-1 - rtnl_neigh_get_state@Base 3.5.0-1 - rtnl_neigh_get_state@libnl_3 3.5.0-1 - rtnl_neigh_get_type@Base 3.5.0-1 - rtnl_neigh_get_type@libnl_3 3.5.0-1 - rtnl_neigh_get_vlan@Base 3.5.0-1 - rtnl_neigh_get_vlan@libnl_3_2_26 3.5.0-1 - rtnl_neigh_parse@Base 3.5.0-1 - rtnl_neigh_parse@libnl_3 3.5.0-1 - rtnl_neigh_put@Base 3.5.0-1 - rtnl_neigh_put@libnl_3 3.5.0-1 - rtnl_neigh_set_dst@Base 3.5.0-1 - rtnl_neigh_set_dst@libnl_3 3.5.0-1 - rtnl_neigh_set_family@Base 3.5.0-1 - rtnl_neigh_set_family@libnl_3 3.5.0-1 - rtnl_neigh_set_flags@Base 3.5.0-1 - rtnl_neigh_set_flags@libnl_3 3.5.0-1 - rtnl_neigh_set_ifindex@Base 3.5.0-1 - rtnl_neigh_set_ifindex@libnl_3 3.5.0-1 - rtnl_neigh_set_lladdr@Base 3.5.0-1 - rtnl_neigh_set_lladdr@libnl_3 3.5.0-1 - rtnl_neigh_set_master@libnl_3_5 3.5.0-1 - rtnl_neigh_set_state@Base 3.5.0-1 - rtnl_neigh_set_state@libnl_3 3.5.0-1 - rtnl_neigh_set_type@Base 3.5.0-1 - rtnl_neigh_set_type@libnl_3 3.5.0-1 - rtnl_neigh_set_vlan@Base 3.5.0-1 - rtnl_neigh_set_vlan@libnl_3_2_26 3.5.0-1 - rtnl_neigh_state2str@Base 3.5.0-1 - rtnl_neigh_state2str@libnl_3 3.5.0-1 - rtnl_neigh_str2flag@Base 3.5.0-1 - rtnl_neigh_str2flag@libnl_3 3.5.0-1 - rtnl_neigh_str2state@Base 3.5.0-1 - rtnl_neigh_str2state@libnl_3 3.5.0-1 - rtnl_neigh_unset_flags@Base 3.5.0-1 - rtnl_neigh_unset_flags@libnl_3 3.5.0-1 - rtnl_neigh_unset_state@Base 3.5.0-1 - rtnl_neigh_unset_state@libnl_3 3.5.0-1 - rtnl_neightbl_alloc@Base 3.5.0-1 - rtnl_neightbl_alloc@libnl_3 3.5.0-1 - rtnl_neightbl_alloc_cache@Base 3.5.0-1 - rtnl_neightbl_alloc_cache@libnl_3 3.5.0-1 - rtnl_neightbl_build_change_request@Base 3.5.0-1 - rtnl_neightbl_build_change_request@libnl_3 3.5.0-1 - rtnl_neightbl_change@Base 3.5.0-1 - rtnl_neightbl_change@libnl_3 3.5.0-1 - rtnl_neightbl_get@Base 3.5.0-1 - rtnl_neightbl_get@libnl_3 3.5.0-1 - rtnl_neightbl_put@Base 3.5.0-1 - rtnl_neightbl_put@libnl_3 3.5.0-1 - rtnl_neightbl_set_anycast_delay@Base 3.5.0-1 - rtnl_neightbl_set_anycast_delay@libnl_3 3.5.0-1 - rtnl_neightbl_set_app_probes@Base 3.5.0-1 - rtnl_neightbl_set_app_probes@libnl_3 3.5.0-1 - rtnl_neightbl_set_base_reachable_time@Base 3.5.0-1 - rtnl_neightbl_set_base_reachable_time@libnl_3 3.5.0-1 - rtnl_neightbl_set_delay_probe_time@Base 3.5.0-1 - rtnl_neightbl_set_delay_probe_time@libnl_3 3.5.0-1 - rtnl_neightbl_set_dev@Base 3.5.0-1 - rtnl_neightbl_set_dev@libnl_3 3.5.0-1 - rtnl_neightbl_set_family@Base 3.5.0-1 - rtnl_neightbl_set_family@libnl_3 3.5.0-1 - rtnl_neightbl_set_gc_interval@Base 3.5.0-1 - rtnl_neightbl_set_gc_interval@libnl_3 3.5.0-1 - rtnl_neightbl_set_gc_stale_time@Base 3.5.0-1 - rtnl_neightbl_set_gc_stale_time@libnl_3 3.5.0-1 - rtnl_neightbl_set_gc_tresh1@Base 3.5.0-1 - rtnl_neightbl_set_gc_tresh1@libnl_3 3.5.0-1 - rtnl_neightbl_set_gc_tresh2@Base 3.5.0-1 - rtnl_neightbl_set_gc_tresh2@libnl_3 3.5.0-1 - rtnl_neightbl_set_gc_tresh3@Base 3.5.0-1 - rtnl_neightbl_set_gc_tresh3@libnl_3 3.5.0-1 - rtnl_neightbl_set_locktime@Base 3.5.0-1 - rtnl_neightbl_set_locktime@libnl_3 3.5.0-1 - rtnl_neightbl_set_mcast_probes@Base 3.5.0-1 - rtnl_neightbl_set_mcast_probes@libnl_3 3.5.0-1 - rtnl_neightbl_set_name@Base 3.5.0-1 - rtnl_neightbl_set_name@libnl_3 3.5.0-1 - rtnl_neightbl_set_proxy_delay@Base 3.5.0-1 - rtnl_neightbl_set_proxy_delay@libnl_3 3.5.0-1 - rtnl_neightbl_set_proxy_queue_len@Base 3.5.0-1 - rtnl_neightbl_set_proxy_queue_len@libnl_3 3.5.0-1 - rtnl_neightbl_set_queue_len@Base 3.5.0-1 - rtnl_neightbl_set_queue_len@libnl_3 3.5.0-1 - rtnl_neightbl_set_retrans_time@Base 3.5.0-1 - rtnl_neightbl_set_retrans_time@libnl_3 3.5.0-1 - rtnl_neightbl_set_ucast_probes@Base 3.5.0-1 - rtnl_neightbl_set_ucast_probes@libnl_3 3.5.0-1 - rtnl_netconf_get_all@libnl_3_4 3.5.0-1 - rtnl_netconf_get_by_idx@libnl_3_4 3.5.0-1 - rtnl_netconf_get_default@libnl_3_4 3.5.0-1 - rtnl_netconf_get_family@libnl_3_4 3.5.0-1 - rtnl_netconf_get_forwarding@libnl_3_4 3.5.0-1 - rtnl_netconf_get_ifindex@libnl_3_4 3.5.0-1 - rtnl_netconf_get_input@libnl_3_4 3.5.0-1 - rtnl_netconf_get_mc_forwarding@libnl_3_4 3.5.0-1 - rtnl_netconf_get_rp_filter@libnl_3_4 3.5.0-1 - rtnl_netconf_put@libnl_3_4 3.5.0-1 - rtnl_netem_get_corruption_correlation@Base 3.5.0-1 - rtnl_netem_get_corruption_correlation@libnl_3 3.5.0-1 - rtnl_netem_get_corruption_probability@Base 3.5.0-1 - rtnl_netem_get_corruption_probability@libnl_3 3.5.0-1 - rtnl_netem_get_delay@Base 3.5.0-1 - rtnl_netem_get_delay@libnl_3 3.5.0-1 - rtnl_netem_get_delay_correlation@Base 3.5.0-1 - rtnl_netem_get_delay_correlation@libnl_3 3.5.0-1 - rtnl_netem_get_delay_distribution@Base 3.5.0-1 - rtnl_netem_get_delay_distribution@libnl_3 3.5.0-1 - rtnl_netem_get_delay_distribution_size@Base 3.5.0-1 - rtnl_netem_get_delay_distribution_size@libnl_3 3.5.0-1 - rtnl_netem_get_duplicate@Base 3.5.0-1 - rtnl_netem_get_duplicate@libnl_3 3.5.0-1 - rtnl_netem_get_duplicate_correlation@Base 3.5.0-1 - rtnl_netem_get_duplicate_correlation@libnl_3 3.5.0-1 - rtnl_netem_get_gap@Base 3.5.0-1 - rtnl_netem_get_gap@libnl_3 3.5.0-1 - rtnl_netem_get_jitter@Base 3.5.0-1 - rtnl_netem_get_jitter@libnl_3 3.5.0-1 - rtnl_netem_get_limit@Base 3.5.0-1 - rtnl_netem_get_limit@libnl_3 3.5.0-1 - rtnl_netem_get_loss@Base 3.5.0-1 - rtnl_netem_get_loss@libnl_3 3.5.0-1 - rtnl_netem_get_loss_correlation@Base 3.5.0-1 - rtnl_netem_get_loss_correlation@libnl_3 3.5.0-1 - rtnl_netem_get_reorder_correlation@Base 3.5.0-1 - rtnl_netem_get_reorder_correlation@libnl_3 3.5.0-1 - rtnl_netem_get_reorder_probability@Base 3.5.0-1 - rtnl_netem_get_reorder_probability@libnl_3 3.5.0-1 - rtnl_netem_set_corruption_correlation@Base 3.5.0-1 - rtnl_netem_set_corruption_correlation@libnl_3 3.5.0-1 - rtnl_netem_set_corruption_probability@Base 3.5.0-1 - rtnl_netem_set_corruption_probability@libnl_3 3.5.0-1 - rtnl_netem_set_delay@Base 3.5.0-1 - rtnl_netem_set_delay@libnl_3 3.5.0-1 - rtnl_netem_set_delay_correlation@Base 3.5.0-1 - rtnl_netem_set_delay_correlation@libnl_3 3.5.0-1 - rtnl_netem_set_delay_distribution@Base 3.5.0-1 - rtnl_netem_set_delay_distribution@libnl_3 3.5.0-1 - rtnl_netem_set_delay_distribution_data@libnl_3_5 3.5.0-1 - rtnl_netem_set_duplicate@Base 3.5.0-1 - rtnl_netem_set_duplicate@libnl_3 3.5.0-1 - rtnl_netem_set_duplicate_correlation@Base 3.5.0-1 - rtnl_netem_set_duplicate_correlation@libnl_3 3.5.0-1 - rtnl_netem_set_gap@Base 3.5.0-1 - rtnl_netem_set_gap@libnl_3 3.5.0-1 - rtnl_netem_set_jitter@Base 3.5.0-1 - rtnl_netem_set_jitter@libnl_3 3.5.0-1 - rtnl_netem_set_limit@Base 3.5.0-1 - rtnl_netem_set_limit@libnl_3 3.5.0-1 - rtnl_netem_set_loss@Base 3.5.0-1 - rtnl_netem_set_loss@libnl_3 3.5.0-1 - rtnl_netem_set_loss_correlation@Base 3.5.0-1 - rtnl_netem_set_loss_correlation@libnl_3 3.5.0-1 - rtnl_netem_set_reorder_correlation@Base 3.5.0-1 - rtnl_netem_set_reorder_correlation@libnl_3 3.5.0-1 - rtnl_netem_set_reorder_probability@Base 3.5.0-1 - rtnl_netem_set_reorder_probability@libnl_3 3.5.0-1 - rtnl_pktloc_add@Base 3.5.0-1 - rtnl_pktloc_add@libnl_3 3.5.0-1 - rtnl_pktloc_alloc@Base 3.5.0-1 - rtnl_pktloc_alloc@libnl_3 3.5.0-1 - rtnl_pktloc_foreach@Base 3.5.0-1 - rtnl_pktloc_foreach@libnl_3 3.5.0-1 - rtnl_pktloc_lookup@Base 3.5.0-1 - rtnl_pktloc_lookup@libnl_3 3.5.0-1 - rtnl_pktloc_put@Base 3.5.0-1 - rtnl_pktloc_put@libnl_3 3.5.0-1 - rtnl_prio2str@Base 3.5.0-1 - rtnl_prio2str@libnl_3 3.5.0-1 - rtnl_qdisc_add@Base 3.5.0-1 - rtnl_qdisc_add@libnl_3 3.5.0-1 - rtnl_qdisc_alloc@Base 3.5.0-1 - rtnl_qdisc_alloc@libnl_3 3.5.0-1 - rtnl_qdisc_alloc_cache@Base 3.5.0-1 - rtnl_qdisc_alloc_cache@libnl_3 3.5.0-1 - rtnl_qdisc_build_add_request@Base 3.5.0-1 - rtnl_qdisc_build_add_request@libnl_3 3.5.0-1 - rtnl_qdisc_build_change_request@Base 3.5.0-1 - rtnl_qdisc_build_change_request@libnl_3 3.5.0-1 - rtnl_qdisc_build_delete_request@Base 3.5.0-1 - rtnl_qdisc_build_delete_request@libnl_3 3.5.0-1 - rtnl_qdisc_build_update_request@Base 3.5.0-1 - rtnl_qdisc_build_update_request@libnl_3 3.5.0-1 - rtnl_qdisc_change@Base 3.5.0-1 - rtnl_qdisc_change@libnl_3 3.5.0-1 - rtnl_qdisc_delete@Base 3.5.0-1 - rtnl_qdisc_delete@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_get_default_index@Base 3.5.0-1 - rtnl_qdisc_dsmark_get_default_index@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_get_indices@Base 3.5.0-1 - rtnl_qdisc_dsmark_get_indices@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_get_set_tc_index@Base 3.5.0-1 - rtnl_qdisc_dsmark_get_set_tc_index@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_set_default_index@Base 3.5.0-1 - rtnl_qdisc_dsmark_set_default_index@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_set_indices@Base 3.5.0-1 - rtnl_qdisc_dsmark_set_indices@libnl_3 3.5.0-1 - rtnl_qdisc_dsmark_set_set_tc_index@Base 3.5.0-1 - rtnl_qdisc_dsmark_set_set_tc_index@libnl_3 3.5.0-1 - rtnl_qdisc_fifo_get_limit@Base 3.5.0-1 - rtnl_qdisc_fifo_get_limit@libnl_3 3.5.0-1 - rtnl_qdisc_fifo_set_limit@Base 3.5.0-1 - rtnl_qdisc_fifo_set_limit@libnl_3 3.5.0-1 - rtnl_qdisc_foreach_child@Base 3.5.0-1 - rtnl_qdisc_foreach_child@libnl_3 3.5.0-1 - rtnl_qdisc_foreach_cls@Base 3.5.0-1 - rtnl_qdisc_foreach_cls@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_ecn@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_ecn@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_flows@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_flows@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_interval@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_interval@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_limit@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_limit@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_quantum@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_quantum@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_get_target@Base 3.5.0-1 - rtnl_qdisc_fq_codel_get_target@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_ecn@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_ecn@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_flows@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_flows@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_interval@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_interval@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_limit@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_limit@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_quantum@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_quantum@libnl_3 3.5.0-1 - rtnl_qdisc_fq_codel_set_target@Base 3.5.0-1 - rtnl_qdisc_fq_codel_set_target@libnl_3 3.5.0-1 - rtnl_qdisc_get@Base 3.5.0-1 - rtnl_qdisc_get@libnl_3 3.5.0-1 - rtnl_qdisc_get_by_parent@Base 3.5.0-1 - rtnl_qdisc_get_by_parent@libnl_3 3.5.0-1 - rtnl_qdisc_hfsc_get_defcls@Base 3.5.0-1 - rtnl_qdisc_hfsc_get_defcls@libnl_3 3.5.0-1 - rtnl_qdisc_hfsc_set_defcls@Base 3.5.0-1 - rtnl_qdisc_hfsc_set_defcls@libnl_3 3.5.0-1 - rtnl_qdisc_mqprio_get_hw_offload@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_max_rate@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_min_rate@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_mode@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_num_tc@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_priomap@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_queue@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_get_shaper@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_hw_offload@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_max_rate@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_min_rate@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_mode@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_num_tc@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_priomap@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_queue@libnl_3_5 3.5.0-1 - rtnl_qdisc_mqprio_set_shaper@libnl_3_5 3.5.0-1 - rtnl_qdisc_plug_buffer@Base 3.5.0-1 - rtnl_qdisc_plug_buffer@libnl_3 3.5.0-1 - rtnl_qdisc_plug_release_indefinite@Base 3.5.0-1 - rtnl_qdisc_plug_release_indefinite@libnl_3 3.5.0-1 - rtnl_qdisc_plug_release_one@Base 3.5.0-1 - rtnl_qdisc_plug_release_one@libnl_3 3.5.0-1 - rtnl_qdisc_plug_set_limit@Base 3.5.0-1 - rtnl_qdisc_plug_set_limit@libnl_3 3.5.0-1 - rtnl_qdisc_prio_get_bands@Base 3.5.0-1 - rtnl_qdisc_prio_get_bands@libnl_3 3.5.0-1 - rtnl_qdisc_prio_get_priomap@Base 3.5.0-1 - rtnl_qdisc_prio_get_priomap@libnl_3 3.5.0-1 - rtnl_qdisc_prio_set_bands@Base 3.5.0-1 - rtnl_qdisc_prio_set_bands@libnl_3 3.5.0-1 - rtnl_qdisc_prio_set_priomap@Base 3.5.0-1 - rtnl_qdisc_prio_set_priomap@libnl_3 3.5.0-1 - rtnl_qdisc_put@Base 3.5.0-1 - rtnl_qdisc_put@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_limit@Base 3.5.0-1 - rtnl_qdisc_tbf_get_limit@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate@Base 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate_bucket@Base 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate_bucket@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate_cell@Base 3.5.0-1 - rtnl_qdisc_tbf_get_peakrate_cell@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_rate@Base 3.5.0-1 - rtnl_qdisc_tbf_get_rate@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_rate_bucket@Base 3.5.0-1 - rtnl_qdisc_tbf_get_rate_bucket@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_get_rate_cell@Base 3.5.0-1 - rtnl_qdisc_tbf_get_rate_cell@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_set_limit@Base 3.5.0-1 - rtnl_qdisc_tbf_set_limit@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_set_limit_by_latency@Base 3.5.0-1 - rtnl_qdisc_tbf_set_limit_by_latency@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_set_peakrate@Base 3.5.0-1 - rtnl_qdisc_tbf_set_peakrate@libnl_3 3.5.0-1 - rtnl_qdisc_tbf_set_rate@Base 3.5.0-1 - rtnl_qdisc_tbf_set_rate@libnl_3 3.5.0-1 - rtnl_qdisc_update@Base 3.5.0-1 - rtnl_qdisc_update@libnl_3 3.5.0-1 - rtnl_realms2str@Base 3.5.0-1 - rtnl_realms2str@libnl_3 3.5.0-1 - rtnl_red_get_limit@Base 3.5.0-1 - rtnl_red_get_limit@libnl_3 3.5.0-1 - rtnl_red_set_limit@Base 3.5.0-1 - rtnl_red_set_limit@libnl_3 3.5.0-1 - rtnl_route_add@Base 3.5.0-1 - rtnl_route_add@libnl_3 3.5.0-1 - rtnl_route_add_nexthop@Base 3.5.0-1 - rtnl_route_add_nexthop@libnl_3 3.5.0-1 - rtnl_route_alloc@Base 3.5.0-1 - rtnl_route_alloc@libnl_3 3.5.0-1 - rtnl_route_alloc_cache@Base 3.5.0-1 - rtnl_route_alloc_cache@libnl_3 3.5.0-1 - rtnl_route_build_add_request@Base 3.5.0-1 - rtnl_route_build_add_request@libnl_3 3.5.0-1 - rtnl_route_build_del_request@Base 3.5.0-1 - rtnl_route_build_del_request@libnl_3 3.5.0-1 - rtnl_route_build_msg@Base 3.5.0-1 - rtnl_route_build_msg@libnl_3 3.5.0-1 - rtnl_route_delete@Base 3.5.0-1 - rtnl_route_delete@libnl_3 3.5.0-1 - rtnl_route_foreach_nexthop@Base 3.5.0-1 - rtnl_route_foreach_nexthop@libnl_3 3.5.0-1 - rtnl_route_get@Base 3.5.0-1 - rtnl_route_get@libnl_3 3.5.0-1 - rtnl_route_get_dst@Base 3.5.0-1 - rtnl_route_get_dst@libnl_3 3.5.0-1 - rtnl_route_get_family@Base 3.5.0-1 - rtnl_route_get_family@libnl_3 3.5.0-1 - rtnl_route_get_flags@Base 3.5.0-1 - rtnl_route_get_flags@libnl_3 3.5.0-1 - rtnl_route_get_iif@Base 3.5.0-1 - rtnl_route_get_iif@libnl_3 3.5.0-1 - rtnl_route_get_metric@Base 3.5.0-1 - rtnl_route_get_metric@libnl_3 3.5.0-1 - rtnl_route_get_nexthops@Base 3.5.0-1 - rtnl_route_get_nexthops@libnl_3 3.5.0-1 - rtnl_route_get_nnexthops@Base 3.5.0-1 - rtnl_route_get_nnexthops@libnl_3 3.5.0-1 - rtnl_route_get_pref_src@Base 3.5.0-1 - rtnl_route_get_pref_src@libnl_3 3.5.0-1 - rtnl_route_get_priority@Base 3.5.0-1 - rtnl_route_get_priority@libnl_3 3.5.0-1 - rtnl_route_get_protocol@Base 3.5.0-1 - rtnl_route_get_protocol@libnl_3 3.5.0-1 - rtnl_route_get_scope@Base 3.5.0-1 - rtnl_route_get_scope@libnl_3 3.5.0-1 - rtnl_route_get_src@Base 3.5.0-1 - rtnl_route_get_src@libnl_3 3.5.0-1 - rtnl_route_get_table@Base 3.5.0-1 - rtnl_route_get_table@libnl_3 3.5.0-1 - rtnl_route_get_tos@Base 3.5.0-1 - rtnl_route_get_tos@libnl_3 3.5.0-1 - rtnl_route_get_ttl_propagate@libnl_3_4 3.5.0-1 - rtnl_route_get_type@Base 3.5.0-1 - rtnl_route_get_type@libnl_3 3.5.0-1 - rtnl_route_guess_scope@Base 3.5.0-1 - rtnl_route_guess_scope@libnl_3 3.5.0-1 - rtnl_route_metric2str@Base 3.5.0-1 - rtnl_route_metric2str@libnl_3 3.5.0-1 - rtnl_route_nexthop_n@Base 3.5.0-1 - rtnl_route_nexthop_n@libnl_3 3.5.0-1 - rtnl_route_nh_alloc@Base 3.5.0-1 - rtnl_route_nh_alloc@libnl_3 3.5.0-1 - rtnl_route_nh_clone@Base 3.5.0-1 - rtnl_route_nh_clone@libnl_3 3.5.0-1 - rtnl_route_nh_compare@Base 3.5.0-1 - rtnl_route_nh_compare@libnl_3 3.5.0-1 - rtnl_route_nh_dump@Base 3.5.0-1 - rtnl_route_nh_dump@libnl_3 3.5.0-1 - rtnl_route_nh_encap_mpls@libnl_3_4 3.5.0-1 - rtnl_route_nh_flags2str@Base 3.5.0-1 - rtnl_route_nh_flags2str@libnl_3 3.5.0-1 - rtnl_route_nh_free@Base 3.5.0-1 - rtnl_route_nh_free@libnl_3 3.5.0-1 - rtnl_route_nh_get_flags@Base 3.5.0-1 - rtnl_route_nh_get_flags@libnl_3 3.5.0-1 - rtnl_route_nh_get_gateway@Base 3.5.0-1 - rtnl_route_nh_get_gateway@libnl_3 3.5.0-1 - rtnl_route_nh_get_ifindex@Base 3.5.0-1 - rtnl_route_nh_get_ifindex@libnl_3 3.5.0-1 - rtnl_route_nh_get_newdst@libnl_3_4 3.5.0-1 - rtnl_route_nh_get_realms@Base 3.5.0-1 - rtnl_route_nh_get_realms@libnl_3 3.5.0-1 - rtnl_route_nh_get_via@libnl_3_4 3.5.0-1 - rtnl_route_nh_get_weight@Base 3.5.0-1 - rtnl_route_nh_get_weight@libnl_3 3.5.0-1 - rtnl_route_nh_set_flags@Base 3.5.0-1 - rtnl_route_nh_set_flags@libnl_3 3.5.0-1 - rtnl_route_nh_set_gateway@Base 3.5.0-1 - rtnl_route_nh_set_gateway@libnl_3 3.5.0-1 - rtnl_route_nh_set_ifindex@Base 3.5.0-1 - rtnl_route_nh_set_ifindex@libnl_3 3.5.0-1 - rtnl_route_nh_set_newdst@libnl_3_4 3.5.0-1 - rtnl_route_nh_set_realms@Base 3.5.0-1 - rtnl_route_nh_set_realms@libnl_3 3.5.0-1 - rtnl_route_nh_set_via@libnl_3_4 3.5.0-1 - rtnl_route_nh_set_weight@Base 3.5.0-1 - rtnl_route_nh_set_weight@libnl_3 3.5.0-1 - rtnl_route_nh_str2flags@Base 3.5.0-1 - rtnl_route_nh_str2flags@libnl_3 3.5.0-1 - rtnl_route_nh_unset_flags@Base 3.5.0-1 - rtnl_route_nh_unset_flags@libnl_3 3.5.0-1 - rtnl_route_parse@Base 3.5.0-1 - rtnl_route_parse@libnl_3 3.5.0-1 - rtnl_route_proto2str@Base 3.5.0-1 - rtnl_route_proto2str@libnl_3 3.5.0-1 - rtnl_route_put@Base 3.5.0-1 - rtnl_route_put@libnl_3 3.5.0-1 - rtnl_route_read_protocol_names@Base 3.5.0-1 - rtnl_route_read_protocol_names@libnl_3 3.5.0-1 - rtnl_route_read_table_names@Base 3.5.0-1 - rtnl_route_read_table_names@libnl_3 3.5.0-1 - rtnl_route_remove_nexthop@Base 3.5.0-1 - rtnl_route_remove_nexthop@libnl_3 3.5.0-1 - rtnl_route_set_dst@Base 3.5.0-1 - rtnl_route_set_dst@libnl_3 3.5.0-1 - rtnl_route_set_family@Base 3.5.0-1 - rtnl_route_set_family@libnl_3 3.5.0-1 - rtnl_route_set_flags@Base 3.5.0-1 - rtnl_route_set_flags@libnl_3 3.5.0-1 - rtnl_route_set_iif@Base 3.5.0-1 - rtnl_route_set_iif@libnl_3 3.5.0-1 - rtnl_route_set_metric@Base 3.5.0-1 - rtnl_route_set_metric@libnl_3 3.5.0-1 - rtnl_route_set_pref_src@Base 3.5.0-1 - rtnl_route_set_pref_src@libnl_3 3.5.0-1 - rtnl_route_set_priority@Base 3.5.0-1 - rtnl_route_set_priority@libnl_3 3.5.0-1 - rtnl_route_set_protocol@Base 3.5.0-1 - rtnl_route_set_protocol@libnl_3 3.5.0-1 - rtnl_route_set_scope@Base 3.5.0-1 - rtnl_route_set_scope@libnl_3 3.5.0-1 - rtnl_route_set_src@Base 3.5.0-1 - rtnl_route_set_src@libnl_3 3.5.0-1 - rtnl_route_set_table@Base 3.5.0-1 - rtnl_route_set_table@libnl_3 3.5.0-1 - rtnl_route_set_tos@Base 3.5.0-1 - rtnl_route_set_tos@libnl_3 3.5.0-1 - rtnl_route_set_ttl_propagate@libnl_3_4 3.5.0-1 - rtnl_route_set_type@Base 3.5.0-1 - rtnl_route_set_type@libnl_3 3.5.0-1 - rtnl_route_str2metric@Base 3.5.0-1 - rtnl_route_str2metric@libnl_3 3.5.0-1 - rtnl_route_str2proto@Base 3.5.0-1 - rtnl_route_str2proto@libnl_3 3.5.0-1 - rtnl_route_str2table@Base 3.5.0-1 - rtnl_route_str2table@libnl_3 3.5.0-1 - rtnl_route_table2str@Base 3.5.0-1 - rtnl_route_table2str@libnl_3 3.5.0-1 - rtnl_route_unset_flags@Base 3.5.0-1 - rtnl_route_unset_flags@libnl_3 3.5.0-1 - rtnl_route_unset_metric@Base 3.5.0-1 - rtnl_route_unset_metric@libnl_3 3.5.0-1 - rtnl_rule_add@Base 3.5.0-1 - rtnl_rule_add@libnl_3 3.5.0-1 - rtnl_rule_alloc@Base 3.5.0-1 - rtnl_rule_alloc@libnl_3 3.5.0-1 - rtnl_rule_alloc_cache@Base 3.5.0-1 - rtnl_rule_alloc_cache@libnl_3 3.5.0-1 - rtnl_rule_build_add_request@Base 3.5.0-1 - rtnl_rule_build_add_request@libnl_3 3.5.0-1 - rtnl_rule_build_delete_request@Base 3.5.0-1 - rtnl_rule_build_delete_request@libnl_3 3.5.0-1 - rtnl_rule_delete@Base 3.5.0-1 - rtnl_rule_delete@libnl_3 3.5.0-1 - rtnl_rule_get_action@Base 3.5.0-1 - rtnl_rule_get_action@libnl_3 3.5.0-1 - rtnl_rule_get_dport@libnl_3_5 3.5.0-1 - rtnl_rule_get_dsfield@Base 3.5.0-1 - rtnl_rule_get_dsfield@libnl_3 3.5.0-1 - rtnl_rule_get_dst@Base 3.5.0-1 - rtnl_rule_get_dst@libnl_3 3.5.0-1 - rtnl_rule_get_family@Base 3.5.0-1 - rtnl_rule_get_family@libnl_3 3.5.0-1 - rtnl_rule_get_goto@Base 3.5.0-1 - rtnl_rule_get_goto@libnl_3 3.5.0-1 - rtnl_rule_get_iif@Base 3.5.0-1 - rtnl_rule_get_iif@libnl_3 3.5.0-1 - rtnl_rule_get_ipproto@libnl_3_5 3.5.0-1 - rtnl_rule_get_l3mdev@libnl_3_4 3.5.0-1 - rtnl_rule_get_mark@Base 3.5.0-1 - rtnl_rule_get_mark@libnl_3 3.5.0-1 - rtnl_rule_get_mask@Base 3.5.0-1 - rtnl_rule_get_mask@libnl_3 3.5.0-1 - rtnl_rule_get_oif@Base 3.5.0-1 - rtnl_rule_get_oif@libnl_3 3.5.0-1 - rtnl_rule_get_prio@Base 3.5.0-1 - rtnl_rule_get_prio@libnl_3 3.5.0-1 - rtnl_rule_get_protocol@libnl_3_5 3.5.0-1 - rtnl_rule_get_realms@Base 3.5.0-1 - rtnl_rule_get_realms@libnl_3 3.5.0-1 - rtnl_rule_get_sport@libnl_3_5 3.5.0-1 - rtnl_rule_get_src@Base 3.5.0-1 - rtnl_rule_get_src@libnl_3 3.5.0-1 - rtnl_rule_get_table@Base 3.5.0-1 - rtnl_rule_get_table@libnl_3 3.5.0-1 - rtnl_rule_put@Base 3.5.0-1 - rtnl_rule_put@libnl_3 3.5.0-1 - rtnl_rule_set_action@Base 3.5.0-1 - rtnl_rule_set_action@libnl_3 3.5.0-1 - rtnl_rule_set_dport@libnl_3_5 3.5.0-1 - rtnl_rule_set_dport_range@libnl_3_5 3.5.0-1 - rtnl_rule_set_dsfield@Base 3.5.0-1 - rtnl_rule_set_dsfield@libnl_3 3.5.0-1 - rtnl_rule_set_dst@Base 3.5.0-1 - rtnl_rule_set_dst@libnl_3 3.5.0-1 - rtnl_rule_set_family@Base 3.5.0-1 - rtnl_rule_set_family@libnl_3 3.5.0-1 - rtnl_rule_set_goto@Base 3.5.0-1 - rtnl_rule_set_goto@libnl_3 3.5.0-1 - rtnl_rule_set_iif@Base 3.5.0-1 - rtnl_rule_set_iif@libnl_3 3.5.0-1 - rtnl_rule_set_ipproto@libnl_3_5 3.5.0-1 - rtnl_rule_set_l3mdev@libnl_3_4 3.5.0-1 - rtnl_rule_set_mark@Base 3.5.0-1 - rtnl_rule_set_mark@libnl_3 3.5.0-1 - rtnl_rule_set_mask@Base 3.5.0-1 - rtnl_rule_set_mask@libnl_3 3.5.0-1 - rtnl_rule_set_oif@Base 3.5.0-1 - rtnl_rule_set_oif@libnl_3 3.5.0-1 - rtnl_rule_set_prio@Base 3.5.0-1 - rtnl_rule_set_prio@libnl_3 3.5.0-1 - rtnl_rule_set_protocol@libnl_3_5 3.5.0-1 - rtnl_rule_set_realms@Base 3.5.0-1 - rtnl_rule_set_realms@libnl_3 3.5.0-1 - rtnl_rule_set_sport@libnl_3_5 3.5.0-1 - rtnl_rule_set_sport_range@libnl_3_5 3.5.0-1 - rtnl_rule_set_src@Base 3.5.0-1 - rtnl_rule_set_src@libnl_3 3.5.0-1 - rtnl_rule_set_table@Base 3.5.0-1 - rtnl_rule_set_table@libnl_3 3.5.0-1 - rtnl_scope2str@Base 3.5.0-1 - rtnl_scope2str@libnl_3 3.5.0-1 - rtnl_sfq_get_divisor@Base 3.5.0-1 - rtnl_sfq_get_divisor@libnl_3 3.5.0-1 - rtnl_sfq_get_limit@Base 3.5.0-1 - rtnl_sfq_get_limit@libnl_3 3.5.0-1 - rtnl_sfq_get_perturb@Base 3.5.0-1 - rtnl_sfq_get_perturb@libnl_3 3.5.0-1 - rtnl_sfq_get_quantum@Base 3.5.0-1 - rtnl_sfq_get_quantum@libnl_3 3.5.0-1 - rtnl_sfq_set_limit@Base 3.5.0-1 - rtnl_sfq_set_limit@libnl_3 3.5.0-1 - rtnl_sfq_set_perturb@Base 3.5.0-1 - rtnl_sfq_set_perturb@libnl_3 3.5.0-1 - rtnl_sfq_set_quantum@Base 3.5.0-1 - rtnl_sfq_set_quantum@libnl_3 3.5.0-1 - rtnl_skbedit_get_action@Base 3.5.0-1 - rtnl_skbedit_get_action@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_get_mark@Base 3.5.0-1 - rtnl_skbedit_get_mark@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_get_priority@Base 3.5.0-1 - rtnl_skbedit_get_priority@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_get_queue_mapping@Base 3.5.0-1 - rtnl_skbedit_get_queue_mapping@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_set_action@Base 3.5.0-1 - rtnl_skbedit_set_action@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_set_mark@Base 3.5.0-1 - rtnl_skbedit_set_mark@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_set_priority@Base 3.5.0-1 - rtnl_skbedit_set_priority@libnl_3_2_26 3.5.0-1 - rtnl_skbedit_set_queue_mapping@Base 3.5.0-1 - rtnl_skbedit_set_queue_mapping@libnl_3_2_26 3.5.0-1 - rtnl_str2prio@Base 3.5.0-1 - rtnl_str2prio@libnl_3 3.5.0-1 - rtnl_str2scope@Base 3.5.0-1 - rtnl_str2scope@libnl_3 3.5.0-1 - rtnl_tc_build_rate_table@Base 3.5.0-1 - rtnl_tc_build_rate_table@libnl_3 3.5.0-1 - rtnl_tc_calc_bufsize@Base 3.5.0-1 - rtnl_tc_calc_bufsize@libnl_3 3.5.0-1 - rtnl_tc_calc_cell_log@Base 3.5.0-1 - rtnl_tc_calc_cell_log@libnl_3 3.5.0-1 - rtnl_tc_calc_txtime@Base 3.5.0-1 - rtnl_tc_calc_txtime@libnl_3 3.5.0-1 - rtnl_tc_clone@Base 3.5.0-1 - rtnl_tc_clone@libnl_3 3.5.0-1 - rtnl_tc_compare@Base 3.5.0-1 - rtnl_tc_compare@libnl_3 3.5.0-1 - rtnl_tc_data@Base 3.5.0-1 - rtnl_tc_data@libnl_3 3.5.0-1 - rtnl_tc_data_check@Base 3.5.0-1 - rtnl_tc_data_check@libnl_3 3.5.0-1 - rtnl_tc_data_peek@Base 3.5.0-1 - rtnl_tc_dump_details@Base 3.5.0-1 - rtnl_tc_dump_details@libnl_3 3.5.0-1 - rtnl_tc_dump_line@Base 3.5.0-1 - rtnl_tc_dump_line@libnl_3 3.5.0-1 - rtnl_tc_dump_stats@Base 3.5.0-1 - rtnl_tc_dump_stats@libnl_3 3.5.0-1 - rtnl_tc_free_data@Base 3.5.0-1 - rtnl_tc_free_data@libnl_3 3.5.0-1 - rtnl_tc_get_chain@libnl_3_5 3.5.0-1 - rtnl_tc_get_handle@Base 3.5.0-1 - rtnl_tc_get_handle@libnl_3 3.5.0-1 - rtnl_tc_get_ifindex@Base 3.5.0-1 - rtnl_tc_get_ifindex@libnl_3 3.5.0-1 - rtnl_tc_get_kind@Base 3.5.0-1 - rtnl_tc_get_kind@libnl_3 3.5.0-1 - rtnl_tc_get_link@Base 3.5.0-1 - rtnl_tc_get_link@libnl_3 3.5.0-1 - rtnl_tc_get_linktype@Base 3.5.0-1 - rtnl_tc_get_linktype@libnl_3 3.5.0-1 - rtnl_tc_get_mpu@Base 3.5.0-1 - rtnl_tc_get_mpu@libnl_3 3.5.0-1 - rtnl_tc_get_mtu@Base 3.5.0-1 - rtnl_tc_get_mtu@libnl_3 3.5.0-1 - rtnl_tc_get_ops@Base 3.5.0-1 - rtnl_tc_get_ops@libnl_3 3.5.0-1 - rtnl_tc_get_overhead@Base 3.5.0-1 - rtnl_tc_get_overhead@libnl_3 3.5.0-1 - rtnl_tc_get_parent@Base 3.5.0-1 - rtnl_tc_get_parent@libnl_3 3.5.0-1 - rtnl_tc_get_stat@Base 3.5.0-1 - rtnl_tc_get_stat@libnl_3 3.5.0-1 - rtnl_tc_handle2str@Base 3.5.0-1 - rtnl_tc_handle2str@libnl_3 3.5.0-1 - rtnl_tc_lookup_ops@Base 3.5.0-1 - rtnl_tc_lookup_ops@libnl_3 3.5.0-1 - rtnl_tc_msg_build@Base 3.5.0-1 - rtnl_tc_msg_build@libnl_3 3.5.0-1 - rtnl_tc_msg_parse@Base 3.5.0-1 - rtnl_tc_msg_parse@libnl_3 3.5.0-1 - rtnl_tc_read_classid_file@Base 3.5.0-1 - rtnl_tc_read_classid_file@libnl_3 3.5.0-1 - rtnl_tc_register@Base 3.5.0-1 - rtnl_tc_register@libnl_3 3.5.0-1 - rtnl_tc_set_chain@libnl_3_5 3.5.0-1 - rtnl_tc_set_handle@Base 3.5.0-1 - rtnl_tc_set_handle@libnl_3 3.5.0-1 - rtnl_tc_set_ifindex@Base 3.5.0-1 - rtnl_tc_set_ifindex@libnl_3 3.5.0-1 - rtnl_tc_set_kind@Base 3.5.0-1 - rtnl_tc_set_kind@libnl_3 3.5.0-1 - rtnl_tc_set_link@Base 3.5.0-1 - rtnl_tc_set_link@libnl_3 3.5.0-1 - rtnl_tc_set_linktype@Base 3.5.0-1 - rtnl_tc_set_linktype@libnl_3 3.5.0-1 - rtnl_tc_set_mpu@Base 3.5.0-1 - rtnl_tc_set_mpu@libnl_3 3.5.0-1 - rtnl_tc_set_mtu@Base 3.5.0-1 - rtnl_tc_set_mtu@libnl_3 3.5.0-1 - rtnl_tc_set_overhead@Base 3.5.0-1 - rtnl_tc_set_overhead@libnl_3 3.5.0-1 - rtnl_tc_set_parent@Base 3.5.0-1 - rtnl_tc_set_parent@libnl_3 3.5.0-1 - rtnl_tc_stat2str@Base 3.5.0-1 - rtnl_tc_stat2str@libnl_3_2_26 3.5.0-1 - rtnl_tc_str2handle@Base 3.5.0-1 - rtnl_tc_str2handle@libnl_3 3.5.0-1 - rtnl_tc_str2stat@Base 3.5.0-1 - rtnl_tc_str2stat@libnl_3_2_26 3.5.0-1 - rtnl_tc_type_register@Base 3.5.0-1 - rtnl_tc_type_register@libnl_3 3.5.0-1 - rtnl_tc_type_unregister@Base 3.5.0-1 - rtnl_tc_type_unregister@libnl_3 3.5.0-1 - rtnl_tc_unregister@Base 3.5.0-1 - rtnl_tc_unregister@libnl_3 3.5.0-1 - rtnl_u32_add_action@Base 3.5.0-1 - rtnl_u32_add_action@libnl_3 3.5.0-1 - rtnl_u32_add_key@Base 3.5.0-1 - rtnl_u32_add_key@libnl_3 3.5.0-1 - rtnl_u32_add_key_in6_addr@Base 3.5.0-1 - rtnl_u32_add_key_in6_addr@libnl_3 3.5.0-1 - rtnl_u32_add_key_in_addr@Base 3.5.0-1 - rtnl_u32_add_key_in_addr@libnl_3 3.5.0-1 - rtnl_u32_add_key_uint16@Base 3.5.0-1 - rtnl_u32_add_key_uint16@libnl_3 3.5.0-1 - rtnl_u32_add_key_uint32@Base 3.5.0-1 - rtnl_u32_add_key_uint32@libnl_3 3.5.0-1 - rtnl_u32_add_key_uint8@Base 3.5.0-1 - rtnl_u32_add_key_uint8@libnl_3 3.5.0-1 - rtnl_u32_add_mark@Base 3.5.0-1 - rtnl_u32_add_mark@libnl_3 3.5.0-1 - rtnl_u32_del_action@Base 3.5.0-1 - rtnl_u32_del_action@libnl_3 3.5.0-1 - rtnl_u32_del_mark@Base 3.5.0-1 - rtnl_u32_del_mark@libnl_3 3.5.0-1 - rtnl_u32_get_action@libnl_3_4 3.5.0-1 - rtnl_u32_get_classid@Base 3.5.0-1 - rtnl_u32_get_classid@libnl_3_2_26 3.5.0-1 - rtnl_u32_get_key@Base 3.5.0-1 - rtnl_u32_get_key@libnl_3 3.5.0-1 - rtnl_u32_set_classid@Base 3.5.0-1 - rtnl_u32_set_classid@libnl_3 3.5.0-1 - rtnl_u32_set_cls_terminal@Base 3.5.0-1 - rtnl_u32_set_cls_terminal@libnl_3 3.5.0-1 - rtnl_u32_set_divisor@Base 3.5.0-1 - rtnl_u32_set_divisor@libnl_3 3.5.0-1 - rtnl_u32_set_flags@Base 3.5.0-1 - rtnl_u32_set_flags@libnl_3 3.5.0-1 - rtnl_u32_set_handle@Base 3.5.0-1 - rtnl_u32_set_handle@libnl_3 3.5.0-1 - rtnl_u32_set_hashmask@Base 3.5.0-1 - rtnl_u32_set_hashmask@libnl_3 3.5.0-1 - rtnl_u32_set_hashtable@Base 3.5.0-1 - rtnl_u32_set_hashtable@libnl_3 3.5.0-1 - rtnl_u32_set_link@Base 3.5.0-1 - rtnl_u32_set_link@libnl_3 3.5.0-1 - rtnl_u32_set_selector@libnl_3_2_29 3.5.0-1 - rtnl_vlan_get_action@libnl_3_5 3.5.0-1 - rtnl_vlan_get_mode@libnl_3_5 3.5.0-1 - rtnl_vlan_get_protocol@libnl_3_5 3.5.0-1 - rtnl_vlan_get_vlan_id@libnl_3_5 3.5.0-1 - rtnl_vlan_get_vlan_prio@libnl_3_5 3.5.0-1 - rtnl_vlan_set_action@libnl_3_5 3.5.0-1 - rtnl_vlan_set_mode@libnl_3_5 3.5.0-1 - rtnl_vlan_set_protocol@libnl_3_5 3.5.0-1 - rtnl_vlan_set_vlan_id@libnl_3_5 3.5.0-1 - rtnl_vlan_set_vlan_prio@libnl_3_5 3.5.0-1 - tc_groups@Base 3.5.0-1 - tca_parse@Base 3.5.0-1 - tca_set_kind@Base 3.5.0-1 diff --git a/src/libnl3/debian/libnl-route-3-dev.install b/src/libnl3/debian/libnl-route-3-dev.install deleted file mode 100644 index 37e248c3ed5b..000000000000 --- a/src/libnl3/debian/libnl-route-3-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/*/pkgconfig/libnl-route-3* -debian/tmp/usr/lib/*/libnl-route-3*.so -debian/tmp/usr/lib/*/libnl-route-3*.a diff --git a/src/libnl3/debian/libnl-utils.install b/src/libnl3/debian/libnl-utils.install deleted file mode 100644 index 8ffdce84e93a..000000000000 --- a/src/libnl3/debian/libnl-utils.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/bin/* diff --git a/src/libnl3/debian/libnl-utils.manpages b/src/libnl3/debian/libnl-utils.manpages deleted file mode 100644 index 0b2dcacf5b84..000000000000 --- a/src/libnl3/debian/libnl-utils.manpages +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/share/man/man8/* diff --git a/src/libnl3/debian/libnl-xfrm-3-200.install b/src/libnl3/debian/libnl-xfrm-3-200.install deleted file mode 100644 index 89b2d4e0c9e0..000000000000 --- a/src/libnl3/debian/libnl-xfrm-3-200.install +++ /dev/null @@ -1 +0,0 @@ -debian/tmp/usr/lib/*/libnl-xfrm-3*.so.* diff --git a/src/libnl3/debian/libnl-xfrm-3-200.symbols b/src/libnl3/debian/libnl-xfrm-3-200.symbols deleted file mode 100644 index 3704a7aa4384..000000000000 --- a/src/libnl3/debian/libnl-xfrm-3-200.symbols +++ /dev/null @@ -1,484 +0,0 @@ -libnl-xfrm-3.so.200 libnl-xfrm-3-200 #MINVER# - libnl_3@libnl_3 3.5.0-1 - xfrmnl_ae_alloc@Base 3.5.0-1 - xfrmnl_ae_alloc@libnl_3 3.5.0-1 - xfrmnl_ae_build_get_request@Base 3.5.0-1 - xfrmnl_ae_build_get_request@libnl_3 3.5.0-1 - xfrmnl_ae_flags2str@Base 3.5.0-1 - xfrmnl_ae_flags2str@libnl_3 3.5.0-1 - xfrmnl_ae_get_curlifetime@Base 3.5.0-1 - xfrmnl_ae_get_curlifetime@libnl_3 3.5.0-1 - xfrmnl_ae_get_daddr@Base 3.5.0-1 - xfrmnl_ae_get_daddr@libnl_3 3.5.0-1 - xfrmnl_ae_get_family@Base 3.5.0-1 - xfrmnl_ae_get_family@libnl_3 3.5.0-1 - xfrmnl_ae_get_flags@Base 3.5.0-1 - xfrmnl_ae_get_flags@libnl_3 3.5.0-1 - xfrmnl_ae_get_kernel@Base 3.5.0-1 - xfrmnl_ae_get_kernel@libnl_3 3.5.0-1 - xfrmnl_ae_get_mark@Base 3.5.0-1 - xfrmnl_ae_get_mark@libnl_3 3.5.0-1 - xfrmnl_ae_get_proto@Base 3.5.0-1 - xfrmnl_ae_get_proto@libnl_3 3.5.0-1 - xfrmnl_ae_get_replay_maxage@Base 3.5.0-1 - xfrmnl_ae_get_replay_maxage@libnl_3 3.5.0-1 - xfrmnl_ae_get_replay_maxdiff@Base 3.5.0-1 - xfrmnl_ae_get_replay_maxdiff@libnl_3 3.5.0-1 - xfrmnl_ae_get_replay_state@Base 3.5.0-1 - xfrmnl_ae_get_replay_state@libnl_3 3.5.0-1 - xfrmnl_ae_get_replay_state_esn@Base 3.5.0-1 - xfrmnl_ae_get_replay_state_esn@libnl_3 3.5.0-1 - xfrmnl_ae_get_reqid@Base 3.5.0-1 - xfrmnl_ae_get_reqid@libnl_3 3.5.0-1 - xfrmnl_ae_get_saddr@Base 3.5.0-1 - xfrmnl_ae_get_saddr@libnl_3 3.5.0-1 - xfrmnl_ae_get_spi@Base 3.5.0-1 - xfrmnl_ae_get_spi@libnl_3 3.5.0-1 - xfrmnl_ae_parse@Base 3.5.0-1 - xfrmnl_ae_parse@libnl_3 3.5.0-1 - xfrmnl_ae_put@Base 3.5.0-1 - xfrmnl_ae_put@libnl_3 3.5.0-1 - xfrmnl_ae_set@Base 3.5.0-1 - xfrmnl_ae_set@libnl_3 3.5.0-1 - xfrmnl_ae_set_curlifetime@Base 3.5.0-1 - xfrmnl_ae_set_curlifetime@libnl_3 3.5.0-1 - xfrmnl_ae_set_daddr@Base 3.5.0-1 - xfrmnl_ae_set_daddr@libnl_3 3.5.0-1 - xfrmnl_ae_set_family@Base 3.5.0-1 - xfrmnl_ae_set_family@libnl_3 3.5.0-1 - xfrmnl_ae_set_flags@Base 3.5.0-1 - xfrmnl_ae_set_flags@libnl_3 3.5.0-1 - xfrmnl_ae_set_mark@Base 3.5.0-1 - xfrmnl_ae_set_mark@libnl_3 3.5.0-1 - xfrmnl_ae_set_proto@Base 3.5.0-1 - xfrmnl_ae_set_proto@libnl_3 3.5.0-1 - xfrmnl_ae_set_replay_maxage@Base 3.5.0-1 - xfrmnl_ae_set_replay_maxage@libnl_3 3.5.0-1 - xfrmnl_ae_set_replay_maxdiff@Base 3.5.0-1 - xfrmnl_ae_set_replay_maxdiff@libnl_3 3.5.0-1 - xfrmnl_ae_set_replay_state@Base 3.5.0-1 - xfrmnl_ae_set_replay_state@libnl_3 3.5.0-1 - xfrmnl_ae_set_replay_state_esn@Base 3.5.0-1 - xfrmnl_ae_set_replay_state_esn@libnl_3 3.5.0-1 - xfrmnl_ae_set_reqid@Base 3.5.0-1 - xfrmnl_ae_set_reqid@libnl_3 3.5.0-1 - xfrmnl_ae_set_saddr@Base 3.5.0-1 - xfrmnl_ae_set_saddr@libnl_3 3.5.0-1 - xfrmnl_ae_set_spi@Base 3.5.0-1 - xfrmnl_ae_set_spi@libnl_3 3.5.0-1 - xfrmnl_ae_str2flag@Base 3.5.0-1 - xfrmnl_ae_str2flag@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_alloc@Base 3.5.0-1 - xfrmnl_ltime_cfg_alloc@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_clone@Base 3.5.0-1 - xfrmnl_ltime_cfg_clone@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_cmp@Base 3.5.0-1 - xfrmnl_ltime_cfg_cmp@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get@Base 3.5.0-1 - xfrmnl_ltime_cfg_get@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_addexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_addexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_bytelimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_bytelimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_packetlimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_packetlimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_useexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_hard_useexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_addexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_addexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_bytelimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_bytelimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_packetlimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_packetlimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_useexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_get_soft_useexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_put@Base 3.5.0-1 - xfrmnl_ltime_cfg_put@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_addexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_addexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_bytelimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_bytelimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_packetlimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_packetlimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_useexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_hard_useexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_addexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_addexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_bytelimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_bytelimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_packetlimit@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_packetlimit@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_useexpires@Base 3.5.0-1 - xfrmnl_ltime_cfg_set_soft_useexpires@libnl_3 3.5.0-1 - xfrmnl_ltime_cfg_shared@Base 3.5.0-1 - xfrmnl_ltime_cfg_shared@libnl_3 3.5.0-1 - xfrmnl_sa_add@Base 3.5.0-1 - xfrmnl_sa_add@libnl_3 3.5.0-1 - xfrmnl_sa_alloc@Base 3.5.0-1 - xfrmnl_sa_alloc@libnl_3 3.5.0-1 - xfrmnl_sa_alloc_cache@Base 3.5.0-1 - xfrmnl_sa_alloc_cache@libnl_3 3.5.0-1 - xfrmnl_sa_build_add_request@Base 3.5.0-1 - xfrmnl_sa_build_add_request@libnl_3 3.5.0-1 - xfrmnl_sa_build_delete_request@Base 3.5.0-1 - xfrmnl_sa_build_delete_request@libnl_3 3.5.0-1 - xfrmnl_sa_build_get_request@Base 3.5.0-1 - xfrmnl_sa_build_get_request@libnl_3 3.5.0-1 - xfrmnl_sa_build_update_request@Base 3.5.0-1 - xfrmnl_sa_build_update_request@libnl_3 3.5.0-1 - xfrmnl_sa_delete@Base 3.5.0-1 - xfrmnl_sa_delete@libnl_3 3.5.0-1 - xfrmnl_sa_flags2str@Base 3.5.0-1 - xfrmnl_sa_flags2str@libnl_3 3.5.0-1 - xfrmnl_sa_get@Base 3.5.0-1 - xfrmnl_sa_get@libnl_3 3.5.0-1 - xfrmnl_sa_get_aead_params@Base 3.5.0-1 - xfrmnl_sa_get_aead_params@libnl_3 3.5.0-1 - xfrmnl_sa_get_auth_params@Base 3.5.0-1 - xfrmnl_sa_get_auth_params@libnl_3 3.5.0-1 - xfrmnl_sa_get_coaddr@Base 3.5.0-1 - xfrmnl_sa_get_coaddr@libnl_3 3.5.0-1 - xfrmnl_sa_get_comp_params@Base 3.5.0-1 - xfrmnl_sa_get_comp_params@libnl_3 3.5.0-1 - xfrmnl_sa_get_crypto_params@Base 3.5.0-1 - xfrmnl_sa_get_crypto_params@libnl_3 3.5.0-1 - xfrmnl_sa_get_curlifetime@Base 3.5.0-1 - xfrmnl_sa_get_curlifetime@libnl_3 3.5.0-1 - xfrmnl_sa_get_daddr@Base 3.5.0-1 - xfrmnl_sa_get_daddr@libnl_3 3.5.0-1 - xfrmnl_sa_get_encap_tmpl@Base 3.5.0-1 - xfrmnl_sa_get_encap_tmpl@libnl_3 3.5.0-1 - xfrmnl_sa_get_family@Base 3.5.0-1 - xfrmnl_sa_get_family@libnl_3 3.5.0-1 - xfrmnl_sa_get_flags@Base 3.5.0-1 - xfrmnl_sa_get_flags@libnl_3 3.5.0-1 - xfrmnl_sa_get_kernel@Base 3.5.0-1 - xfrmnl_sa_get_kernel@libnl_3 3.5.0-1 - xfrmnl_sa_get_lifetime_cfg@Base 3.5.0-1 - xfrmnl_sa_get_lifetime_cfg@libnl_3 3.5.0-1 - xfrmnl_sa_get_mark@Base 3.5.0-1 - xfrmnl_sa_get_mark@libnl_3 3.5.0-1 - xfrmnl_sa_get_mode@Base 3.5.0-1 - xfrmnl_sa_get_mode@libnl_3 3.5.0-1 - xfrmnl_sa_get_proto@Base 3.5.0-1 - xfrmnl_sa_get_proto@libnl_3 3.5.0-1 - xfrmnl_sa_get_replay_maxage@Base 3.5.0-1 - xfrmnl_sa_get_replay_maxage@libnl_3 3.5.0-1 - xfrmnl_sa_get_replay_maxdiff@Base 3.5.0-1 - xfrmnl_sa_get_replay_maxdiff@libnl_3 3.5.0-1 - xfrmnl_sa_get_replay_state@Base 3.5.0-1 - xfrmnl_sa_get_replay_state@libnl_3 3.5.0-1 - xfrmnl_sa_get_replay_state_esn@Base 3.5.0-1 - xfrmnl_sa_get_replay_state_esn@libnl_3 3.5.0-1 - xfrmnl_sa_get_replay_window@Base 3.5.0-1 - xfrmnl_sa_get_replay_window@libnl_3 3.5.0-1 - xfrmnl_sa_get_reqid@Base 3.5.0-1 - xfrmnl_sa_get_reqid@libnl_3 3.5.0-1 - xfrmnl_sa_get_saddr@Base 3.5.0-1 - xfrmnl_sa_get_saddr@libnl_3 3.5.0-1 - xfrmnl_sa_get_sec_ctx@Base 3.5.0-1 - xfrmnl_sa_get_sec_ctx@libnl_3 3.5.0-1 - xfrmnl_sa_get_sel@Base 3.5.0-1 - xfrmnl_sa_get_sel@libnl_3 3.5.0-1 - xfrmnl_sa_get_seq@Base 3.5.0-1 - xfrmnl_sa_get_seq@libnl_3 3.5.0-1 - xfrmnl_sa_get_spi@Base 3.5.0-1 - xfrmnl_sa_get_spi@libnl_3 3.5.0-1 - xfrmnl_sa_get_stats@Base 3.5.0-1 - xfrmnl_sa_get_stats@libnl_3 3.5.0-1 - xfrmnl_sa_get_tfcpad@Base 3.5.0-1 - xfrmnl_sa_get_tfcpad@libnl_3 3.5.0-1 - xfrmnl_sa_is_expiry_reached@Base 3.5.0-1 - xfrmnl_sa_is_expiry_reached@libnl_3 3.5.0-1 - xfrmnl_sa_is_hardexpiry_reached@Base 3.5.0-1 - xfrmnl_sa_is_hardexpiry_reached@libnl_3 3.5.0-1 - xfrmnl_sa_mode2str@Base 3.5.0-1 - xfrmnl_sa_mode2str@libnl_3 3.5.0-1 - xfrmnl_sa_parse@Base 3.5.0-1 - xfrmnl_sa_parse@libnl_3 3.5.0-1 - xfrmnl_sa_put@Base 3.5.0-1 - xfrmnl_sa_put@libnl_3 3.5.0-1 - xfrmnl_sa_set_aead_params@Base 3.5.0-1 - xfrmnl_sa_set_aead_params@libnl_3 3.5.0-1 - xfrmnl_sa_set_auth_params@Base 3.5.0-1 - xfrmnl_sa_set_auth_params@libnl_3 3.5.0-1 - xfrmnl_sa_set_coaddr@Base 3.5.0-1 - xfrmnl_sa_set_coaddr@libnl_3 3.5.0-1 - xfrmnl_sa_set_comp_params@Base 3.5.0-1 - xfrmnl_sa_set_comp_params@libnl_3 3.5.0-1 - xfrmnl_sa_set_crypto_params@Base 3.5.0-1 - xfrmnl_sa_set_crypto_params@libnl_3 3.5.0-1 - xfrmnl_sa_set_daddr@Base 3.5.0-1 - xfrmnl_sa_set_daddr@libnl_3 3.5.0-1 - xfrmnl_sa_set_encap_tmpl@Base 3.5.0-1 - xfrmnl_sa_set_encap_tmpl@libnl_3 3.5.0-1 - xfrmnl_sa_set_family@Base 3.5.0-1 - xfrmnl_sa_set_family@libnl_3 3.5.0-1 - xfrmnl_sa_set_flags@Base 3.5.0-1 - xfrmnl_sa_set_flags@libnl_3 3.5.0-1 - xfrmnl_sa_set_lifetime_cfg@Base 3.5.0-1 - xfrmnl_sa_set_lifetime_cfg@libnl_3 3.5.0-1 - xfrmnl_sa_set_mark@Base 3.5.0-1 - xfrmnl_sa_set_mark@libnl_3 3.5.0-1 - xfrmnl_sa_set_mode@Base 3.5.0-1 - xfrmnl_sa_set_mode@libnl_3 3.5.0-1 - xfrmnl_sa_set_proto@Base 3.5.0-1 - xfrmnl_sa_set_proto@libnl_3 3.5.0-1 - xfrmnl_sa_set_replay_maxage@Base 3.5.0-1 - xfrmnl_sa_set_replay_maxage@libnl_3 3.5.0-1 - xfrmnl_sa_set_replay_maxdiff@Base 3.5.0-1 - xfrmnl_sa_set_replay_maxdiff@libnl_3 3.5.0-1 - xfrmnl_sa_set_replay_state@Base 3.5.0-1 - xfrmnl_sa_set_replay_state@libnl_3 3.5.0-1 - xfrmnl_sa_set_replay_state_esn@Base 3.5.0-1 - xfrmnl_sa_set_replay_state_esn@libnl_3 3.5.0-1 - xfrmnl_sa_set_replay_window@Base 3.5.0-1 - xfrmnl_sa_set_replay_window@libnl_3 3.5.0-1 - xfrmnl_sa_set_reqid@Base 3.5.0-1 - xfrmnl_sa_set_reqid@libnl_3 3.5.0-1 - xfrmnl_sa_set_saddr@Base 3.5.0-1 - xfrmnl_sa_set_saddr@libnl_3 3.5.0-1 - xfrmnl_sa_set_sec_ctx@Base 3.5.0-1 - xfrmnl_sa_set_sec_ctx@libnl_3 3.5.0-1 - xfrmnl_sa_set_sel@Base 3.5.0-1 - xfrmnl_sa_set_sel@libnl_3 3.5.0-1 - xfrmnl_sa_set_spi@Base 3.5.0-1 - xfrmnl_sa_set_spi@libnl_3 3.5.0-1 - xfrmnl_sa_set_tfcpad@Base 3.5.0-1 - xfrmnl_sa_set_tfcpad@libnl_3 3.5.0-1 - xfrmnl_sa_str2flag@Base 3.5.0-1 - xfrmnl_sa_str2flag@libnl_3 3.5.0-1 - xfrmnl_sa_str2mode@Base 3.5.0-1 - xfrmnl_sa_str2mode@libnl_3 3.5.0-1 - xfrmnl_sa_update@Base 3.5.0-1 - xfrmnl_sa_update@libnl_3 3.5.0-1 - xfrmnl_sel_alloc@Base 3.5.0-1 - xfrmnl_sel_alloc@libnl_3 3.5.0-1 - xfrmnl_sel_clone@Base 3.5.0-1 - xfrmnl_sel_clone@libnl_3 3.5.0-1 - xfrmnl_sel_cmp@Base 3.5.0-1 - xfrmnl_sel_cmp@libnl_3 3.5.0-1 - xfrmnl_sel_dump@Base 3.5.0-1 - xfrmnl_sel_dump@libnl_3 3.5.0-1 - xfrmnl_sel_get@Base 3.5.0-1 - xfrmnl_sel_get@libnl_3 3.5.0-1 - xfrmnl_sel_get_daddr@Base 3.5.0-1 - xfrmnl_sel_get_daddr@libnl_3 3.5.0-1 - xfrmnl_sel_get_dport@Base 3.5.0-1 - xfrmnl_sel_get_dport@libnl_3 3.5.0-1 - xfrmnl_sel_get_dportmask@Base 3.5.0-1 - xfrmnl_sel_get_dportmask@libnl_3 3.5.0-1 - xfrmnl_sel_get_family@Base 3.5.0-1 - xfrmnl_sel_get_family@libnl_3 3.5.0-1 - xfrmnl_sel_get_ifindex@Base 3.5.0-1 - xfrmnl_sel_get_ifindex@libnl_3 3.5.0-1 - xfrmnl_sel_get_prefixlen_d@Base 3.5.0-1 - xfrmnl_sel_get_prefixlen_d@libnl_3 3.5.0-1 - xfrmnl_sel_get_prefixlen_s@Base 3.5.0-1 - xfrmnl_sel_get_prefixlen_s@libnl_3 3.5.0-1 - xfrmnl_sel_get_proto@Base 3.5.0-1 - xfrmnl_sel_get_proto@libnl_3 3.5.0-1 - xfrmnl_sel_get_saddr@Base 3.5.0-1 - xfrmnl_sel_get_saddr@libnl_3 3.5.0-1 - xfrmnl_sel_get_sport@Base 3.5.0-1 - xfrmnl_sel_get_sport@libnl_3 3.5.0-1 - xfrmnl_sel_get_sportmask@Base 3.5.0-1 - xfrmnl_sel_get_sportmask@libnl_3 3.5.0-1 - xfrmnl_sel_get_userid@Base 3.5.0-1 - xfrmnl_sel_get_userid@libnl_3 3.5.0-1 - xfrmnl_sel_put@Base 3.5.0-1 - xfrmnl_sel_put@libnl_3 3.5.0-1 - xfrmnl_sel_set_daddr@Base 3.5.0-1 - xfrmnl_sel_set_daddr@libnl_3 3.5.0-1 - xfrmnl_sel_set_dport@Base 3.5.0-1 - xfrmnl_sel_set_dport@libnl_3 3.5.0-1 - xfrmnl_sel_set_dportmask@Base 3.5.0-1 - xfrmnl_sel_set_dportmask@libnl_3 3.5.0-1 - xfrmnl_sel_set_family@Base 3.5.0-1 - xfrmnl_sel_set_family@libnl_3 3.5.0-1 - xfrmnl_sel_set_ifindex@Base 3.5.0-1 - xfrmnl_sel_set_ifindex@libnl_3 3.5.0-1 - xfrmnl_sel_set_prefixlen_d@Base 3.5.0-1 - xfrmnl_sel_set_prefixlen_d@libnl_3 3.5.0-1 - xfrmnl_sel_set_prefixlen_s@Base 3.5.0-1 - xfrmnl_sel_set_prefixlen_s@libnl_3 3.5.0-1 - xfrmnl_sel_set_proto@Base 3.5.0-1 - xfrmnl_sel_set_proto@libnl_3 3.5.0-1 - xfrmnl_sel_set_saddr@Base 3.5.0-1 - xfrmnl_sel_set_saddr@libnl_3 3.5.0-1 - xfrmnl_sel_set_sport@Base 3.5.0-1 - xfrmnl_sel_set_sport@libnl_3 3.5.0-1 - xfrmnl_sel_set_sportmask@Base 3.5.0-1 - xfrmnl_sel_set_sportmask@libnl_3 3.5.0-1 - xfrmnl_sel_set_userid@Base 3.5.0-1 - xfrmnl_sel_set_userid@libnl_3 3.5.0-1 - xfrmnl_sel_shared@Base 3.5.0-1 - xfrmnl_sel_shared@libnl_3 3.5.0-1 - xfrmnl_sp_action2str@Base 3.5.0-1 - xfrmnl_sp_action2str@libnl_3 3.5.0-1 - xfrmnl_sp_add@Base 3.5.0-1 - xfrmnl_sp_add@libnl_3 3.5.0-1 - xfrmnl_sp_add_usertemplate@Base 3.5.0-1 - xfrmnl_sp_add_usertemplate@libnl_3 3.5.0-1 - xfrmnl_sp_alloc@Base 3.5.0-1 - xfrmnl_sp_alloc@libnl_3 3.5.0-1 - xfrmnl_sp_alloc_cache@Base 3.5.0-1 - xfrmnl_sp_alloc_cache@libnl_3 3.5.0-1 - xfrmnl_sp_build_add_request@Base 3.5.0-1 - xfrmnl_sp_build_add_request@libnl_3 3.5.0-1 - xfrmnl_sp_build_delete_request@Base 3.5.0-1 - xfrmnl_sp_build_delete_request@libnl_3 3.5.0-1 - xfrmnl_sp_build_get_request@Base 3.5.0-1 - xfrmnl_sp_build_get_request@libnl_3 3.5.0-1 - xfrmnl_sp_build_update_request@Base 3.5.0-1 - xfrmnl_sp_build_update_request@libnl_3 3.5.0-1 - xfrmnl_sp_delete@Base 3.5.0-1 - xfrmnl_sp_delete@libnl_3 3.5.0-1 - xfrmnl_sp_dir2str@Base 3.5.0-1 - xfrmnl_sp_dir2str@libnl_3 3.5.0-1 - xfrmnl_sp_flags2str@Base 3.5.0-1 - xfrmnl_sp_flags2str@libnl_3 3.5.0-1 - xfrmnl_sp_foreach_usertemplate@Base 3.5.0-1 - xfrmnl_sp_foreach_usertemplate@libnl_3 3.5.0-1 - xfrmnl_sp_get@Base 3.5.0-1 - xfrmnl_sp_get@libnl_3 3.5.0-1 - xfrmnl_sp_get_action@Base 3.5.0-1 - xfrmnl_sp_get_action@libnl_3 3.5.0-1 - xfrmnl_sp_get_curlifetime@Base 3.5.0-1 - xfrmnl_sp_get_curlifetime@libnl_3 3.5.0-1 - xfrmnl_sp_get_dir@Base 3.5.0-1 - xfrmnl_sp_get_dir@libnl_3 3.5.0-1 - xfrmnl_sp_get_flags@Base 3.5.0-1 - xfrmnl_sp_get_flags@libnl_3 3.5.0-1 - xfrmnl_sp_get_index@Base 3.5.0-1 - xfrmnl_sp_get_index@libnl_3 3.5.0-1 - xfrmnl_sp_get_kernel@Base 3.5.0-1 - xfrmnl_sp_get_kernel@libnl_3 3.5.0-1 - xfrmnl_sp_get_lifetime_cfg@Base 3.5.0-1 - xfrmnl_sp_get_lifetime_cfg@libnl_3 3.5.0-1 - xfrmnl_sp_get_mark@Base 3.5.0-1 - xfrmnl_sp_get_mark@libnl_3 3.5.0-1 - xfrmnl_sp_get_nusertemplates@Base 3.5.0-1 - xfrmnl_sp_get_nusertemplates@libnl_3 3.5.0-1 - xfrmnl_sp_get_priority@Base 3.5.0-1 - xfrmnl_sp_get_priority@libnl_3 3.5.0-1 - xfrmnl_sp_get_sec_ctx@Base 3.5.0-1 - xfrmnl_sp_get_sec_ctx@libnl_3 3.5.0-1 - xfrmnl_sp_get_sel@Base 3.5.0-1 - xfrmnl_sp_get_sel@libnl_3 3.5.0-1 - xfrmnl_sp_get_share@Base 3.5.0-1 - xfrmnl_sp_get_share@libnl_3 3.5.0-1 - xfrmnl_sp_get_userpolicy_type@Base 3.5.0-1 - xfrmnl_sp_get_userpolicy_type@libnl_3 3.5.0-1 - xfrmnl_sp_get_usertemplates@Base 3.5.0-1 - xfrmnl_sp_get_usertemplates@libnl_3 3.5.0-1 - xfrmnl_sp_index2dir@Base 3.5.0-1 - xfrmnl_sp_index2dir@libnl_3 3.5.0-1 - xfrmnl_sp_parse@Base 3.5.0-1 - xfrmnl_sp_parse@libnl_3 3.5.0-1 - xfrmnl_sp_put@Base 3.5.0-1 - xfrmnl_sp_put@libnl_3 3.5.0-1 - xfrmnl_sp_remove_usertemplate@Base 3.5.0-1 - xfrmnl_sp_remove_usertemplate@libnl_3 3.5.0-1 - xfrmnl_sp_set_action@Base 3.5.0-1 - xfrmnl_sp_set_action@libnl_3 3.5.0-1 - xfrmnl_sp_set_dir@Base 3.5.0-1 - xfrmnl_sp_set_dir@libnl_3 3.5.0-1 - xfrmnl_sp_set_flags@Base 3.5.0-1 - xfrmnl_sp_set_flags@libnl_3 3.5.0-1 - xfrmnl_sp_set_index@Base 3.5.0-1 - xfrmnl_sp_set_index@libnl_3 3.5.0-1 - xfrmnl_sp_set_lifetime_cfg@Base 3.5.0-1 - xfrmnl_sp_set_lifetime_cfg@libnl_3 3.5.0-1 - xfrmnl_sp_set_mark@Base 3.5.0-1 - xfrmnl_sp_set_mark@libnl_3 3.5.0-1 - xfrmnl_sp_set_priority@Base 3.5.0-1 - xfrmnl_sp_set_priority@libnl_3 3.5.0-1 - xfrmnl_sp_set_sec_ctx@Base 3.5.0-1 - xfrmnl_sp_set_sec_ctx@libnl_3 3.5.0-1 - xfrmnl_sp_set_sel@Base 3.5.0-1 - xfrmnl_sp_set_sel@libnl_3 3.5.0-1 - xfrmnl_sp_set_share@Base 3.5.0-1 - xfrmnl_sp_set_share@libnl_3 3.5.0-1 - xfrmnl_sp_set_userpolicy_type@Base 3.5.0-1 - xfrmnl_sp_set_userpolicy_type@libnl_3 3.5.0-1 - xfrmnl_sp_share2str@Base 3.5.0-1 - xfrmnl_sp_share2str@libnl_3 3.5.0-1 - xfrmnl_sp_str2action@Base 3.5.0-1 - xfrmnl_sp_str2action@libnl_3 3.5.0-1 - xfrmnl_sp_str2dir@Base 3.5.0-1 - xfrmnl_sp_str2dir@libnl_3 3.5.0-1 - xfrmnl_sp_str2flag@Base 3.5.0-1 - xfrmnl_sp_str2flag@libnl_3 3.5.0-1 - xfrmnl_sp_str2share@Base 3.5.0-1 - xfrmnl_sp_str2share@libnl_3 3.5.0-1 - xfrmnl_sp_str2type@Base 3.5.0-1 - xfrmnl_sp_str2type@libnl_3 3.5.0-1 - xfrmnl_sp_type2str@Base 3.5.0-1 - xfrmnl_sp_type2str@libnl_3 3.5.0-1 - xfrmnl_sp_update@Base 3.5.0-1 - xfrmnl_sp_update@libnl_3 3.5.0-1 - xfrmnl_sp_usertemplate_n@Base 3.5.0-1 - xfrmnl_sp_usertemplate_n@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_alloc@Base 3.5.0-1 - xfrmnl_user_tmpl_alloc@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_clone@Base 3.5.0-1 - xfrmnl_user_tmpl_clone@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_cmp@Base 3.5.0-1 - xfrmnl_user_tmpl_cmp@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_dump@Base 3.5.0-1 - xfrmnl_user_tmpl_dump@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_free@Base 3.5.0-1 - xfrmnl_user_tmpl_free@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_aalgos@Base 3.5.0-1 - xfrmnl_user_tmpl_get_aalgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_calgos@Base 3.5.0-1 - xfrmnl_user_tmpl_get_calgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_daddr@Base 3.5.0-1 - xfrmnl_user_tmpl_get_daddr@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_ealgos@Base 3.5.0-1 - xfrmnl_user_tmpl_get_ealgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_family@Base 3.5.0-1 - xfrmnl_user_tmpl_get_family@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_mode@Base 3.5.0-1 - xfrmnl_user_tmpl_get_mode@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_optional@Base 3.5.0-1 - xfrmnl_user_tmpl_get_optional@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_proto@Base 3.5.0-1 - xfrmnl_user_tmpl_get_proto@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_reqid@Base 3.5.0-1 - xfrmnl_user_tmpl_get_reqid@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_saddr@Base 3.5.0-1 - xfrmnl_user_tmpl_get_saddr@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_share@Base 3.5.0-1 - xfrmnl_user_tmpl_get_share@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_get_spi@Base 3.5.0-1 - xfrmnl_user_tmpl_get_spi@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_mode2str@Base 3.5.0-1 - xfrmnl_user_tmpl_mode2str@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_aalgos@Base 3.5.0-1 - xfrmnl_user_tmpl_set_aalgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_calgos@Base 3.5.0-1 - xfrmnl_user_tmpl_set_calgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_daddr@Base 3.5.0-1 - xfrmnl_user_tmpl_set_daddr@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_ealgos@Base 3.5.0-1 - xfrmnl_user_tmpl_set_ealgos@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_family@Base 3.5.0-1 - xfrmnl_user_tmpl_set_family@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_mode@Base 3.5.0-1 - xfrmnl_user_tmpl_set_mode@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_optional@Base 3.5.0-1 - xfrmnl_user_tmpl_set_optional@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_proto@Base 3.5.0-1 - xfrmnl_user_tmpl_set_proto@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_reqid@Base 3.5.0-1 - xfrmnl_user_tmpl_set_reqid@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_saddr@Base 3.5.0-1 - xfrmnl_user_tmpl_set_saddr@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_share@Base 3.5.0-1 - xfrmnl_user_tmpl_set_share@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_set_spi@Base 3.5.0-1 - xfrmnl_user_tmpl_set_spi@libnl_3 3.5.0-1 - xfrmnl_user_tmpl_str2mode@Base 3.5.0-1 - xfrmnl_user_tmpl_str2mode@libnl_3 3.5.0-1 diff --git a/src/libnl3/debian/libnl-xfrm-3-dev.install b/src/libnl3/debian/libnl-xfrm-3-dev.install deleted file mode 100644 index f57e152c5aae..000000000000 --- a/src/libnl3/debian/libnl-xfrm-3-dev.install +++ /dev/null @@ -1,3 +0,0 @@ -debian/tmp/usr/lib/*/pkgconfig/libnl-xfrm-3* -debian/tmp/usr/lib/*/libnl-xfrm-3*.so -debian/tmp/usr/lib/*/libnl-xfrm-3*.a diff --git a/src/libnl3/debian/rules b/src/libnl3/debian/rules deleted file mode 100755 index 2d33f6ac8992..000000000000 --- a/src/libnl3/debian/rules +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ diff --git a/src/libnl3/debian/source/format b/src/libnl3/debian/source/format deleted file mode 100644 index 163aaf8d82b6..000000000000 --- a/src/libnl3/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/src/libnl3/debian/watch b/src/libnl3/debian/watch deleted file mode 100644 index 9939913ca0e0..000000000000 --- a/src/libnl3/debian/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -https://github.com/thom311/libnl/releases/libnl-(.*)\.tar\.gz diff --git a/src/libnl3/patch/0001-mpls-encap-accessors.patch b/src/libnl3/patch/0001-mpls-encap-accessors.patch deleted file mode 100644 index 2fb6a19314ec..000000000000 --- a/src/libnl3/patch/0001-mpls-encap-accessors.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 701122c539d6da3fbd3367be6e62141328ebeb07 Mon Sep 17 00:00:00 2001 -From: Ann Pokora -Date: Tue, 25 May 2021 18:07:37 -0700 -Subject: [PATCH 1/2] mpls encap accessors - -Signed-off-by: Ann Pokora ---- - include/netlink/route/nexthop.h | 2 ++ - lib/route/nh_encap_mpls.c | 28 ++++++++++++++++++++++++++++ - libnl-route-3.sym | 2 ++ - 3 files changed, 32 insertions(+) - -diff --git a/include/netlink/route/nexthop.h b/include/netlink/route/nexthop.h -index 5b422dd..a502005 100644 ---- a/include/netlink/route/nexthop.h -+++ b/include/netlink/route/nexthop.h -@@ -70,6 +70,8 @@ extern int rtnl_route_nh_str2flags(const char *); - extern int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh, - struct nl_addr *addr, - uint8_t ttl); -+extern struct nl_addr * rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *); -+extern uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *); - #ifdef __cplusplus - } - #endif -diff --git a/lib/route/nh_encap_mpls.c b/lib/route/nh_encap_mpls.c -index 081661e..18336ac 100644 ---- a/lib/route/nh_encap_mpls.c -+++ b/lib/route/nh_encap_mpls.c -@@ -133,3 +133,31 @@ int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh, - - return 0; - } -+ -+struct nl_addr *rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *nh) -+{ -+ struct mpls_iptunnel_encap *mpls_encap; -+ -+ if (!nh->rtnh_encap || nh->rtnh_encap->ops->encap_type != LWTUNNEL_ENCAP_MPLS) -+ return NULL; -+ -+ mpls_encap = (struct mpls_iptunnel_encap *)nh->rtnh_encap->priv; -+ if (!mpls_encap) -+ return NULL; -+ -+ return mpls_encap->dst; -+} -+ -+uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *nh) -+{ -+ struct mpls_iptunnel_encap *mpls_encap; -+ -+ if (!nh->rtnh_encap || nh->rtnh_encap->ops->encap_type != LWTUNNEL_ENCAP_MPLS) -+ return 0; -+ -+ mpls_encap = (struct mpls_iptunnel_encap *)nh->rtnh_encap->priv; -+ if (!mpls_encap) -+ return 0; -+ -+ return mpls_encap->ttl; -+} -diff --git a/libnl-route-3.sym b/libnl-route-3.sym -index 4a65503..ce6d714 100644 ---- a/libnl-route-3.sym -+++ b/libnl-route-3.sym -@@ -1127,6 +1127,8 @@ global: - rtnl_qdisc_mqprio_set_priomap; - rtnl_qdisc_mqprio_set_queue; - rtnl_qdisc_mqprio_set_shaper; -+ rtnl_route_nh_get_encap_mpls_dst; -+ rtnl_route_nh_get_encap_mpls_ttl; - rtnl_rule_get_dport; - rtnl_rule_get_ipproto; - rtnl_rule_get_protocol; --- -2.7.4 - diff --git a/src/libnl3/patch/0002-mpls-remove-nl_addr_valid.patch b/src/libnl3/patch/0002-mpls-remove-nl_addr_valid.patch deleted file mode 100644 index 9231aa2cd983..000000000000 --- a/src/libnl3/patch/0002-mpls-remove-nl_addr_valid.patch +++ /dev/null @@ -1,63 +0,0 @@ -From c89d1a129f71d3d2f76e6cbadb11ef41d8941a73 Mon Sep 17 00:00:00 2001 -From: Ann Pokora -Date: Tue, 25 May 2021 18:10:04 -0700 -Subject: [PATCH 2/2] mpls remove nl_addr_valid - -The removed calls to nl_addr_valid() are passing in a pointer to a binary address -and the length of the binary address, which does not match expected arguments for -nl_addr_valid(). -nl_addr_valid() expects a pointer to an ASCII string and the address family of -the string format. -The incorrect arguments cause unexpected failures and the expected arguments are -not available in the context. - -Signed-off-by: Ann Pokora ---- - lib/route/nexthop.c | 8 -------- - lib/route/nh_encap_mpls.c | 4 ---- - 2 files changed, 12 deletions(-) - -diff --git a/lib/route/nexthop.c b/lib/route/nexthop.c -index 7a9904c..ac0095e 100644 ---- a/lib/route/nexthop.c -+++ b/lib/route/nexthop.c -@@ -351,10 +351,6 @@ int rtnl_route_nh_set_newdst(struct rtnl_nexthop *nh, struct nl_addr *addr) - { - struct nl_addr *old = nh->rtnh_newdst; - -- if (!nl_addr_valid(nl_addr_get_binary_addr(addr), -- nl_addr_get_len(addr))) -- return -NLE_INVAL; -- - if (addr) { - nh->rtnh_newdst = nl_addr_get(addr); - nh->ce_mask |= NH_ATTR_NEWDST; -@@ -378,10 +374,6 @@ int rtnl_route_nh_set_via(struct rtnl_nexthop *nh, struct nl_addr *addr) - { - struct nl_addr *old = nh->rtnh_via; - -- if (!nl_addr_valid(nl_addr_get_binary_addr(addr), -- nl_addr_get_len(addr))) -- return -NLE_INVAL; -- - if (addr) { - nh->rtnh_via = nl_addr_get(addr); - nh->ce_mask |= NH_ATTR_VIA; -diff --git a/lib/route/nh_encap_mpls.c b/lib/route/nh_encap_mpls.c -index 18336ac..6c5a3c7 100644 ---- a/lib/route/nh_encap_mpls.c -+++ b/lib/route/nh_encap_mpls.c -@@ -109,10 +109,6 @@ int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh, - if (!addr) - return -NLE_INVAL; - -- if (!nl_addr_valid(nl_addr_get_binary_addr(addr), -- nl_addr_get_len(addr))) -- return -NLE_INVAL; -- - rtnh_encap = calloc(1, sizeof(*rtnh_encap)); - if (!rtnh_encap) - return -NLE_NOMEM; --- -2.7.4 - diff --git a/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch b/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch index 80f94a2a02b7..3c1fa22cceac 100644 --- a/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch +++ b/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch @@ -98,7 +98,7 @@ index bacabe8..5d9d4ce 100644 static int parse_multipath(struct rtnl_route *route, struct nlattr *attr) @@ -1201,6 +1218,9 @@ int rtnl_route_parse(struct nlmsghdr *nlh, struct rtnl_route **result) - nl_addr_put(addr); + rtnl_route_set_pref_src(route, addr); } + if (tb[RTA_NH_ID]) diff --git a/src/libnl3/patch/keep-symbol-versions-in-libraries.patch b/src/libnl3/patch/keep-symbol-versions-in-libraries.patch new file mode 100644 index 000000000000..d4cef01e45a1 --- /dev/null +++ b/src/libnl3/patch/keep-symbol-versions-in-libraries.patch @@ -0,0 +1,91 @@ +From 3f7655c4e4ff042f77c0bbab8b3afc11470456b6 Mon Sep 17 00:00:00 2001 +From: Saikrishna Arcot +Date: Wed, 6 Nov 2024 13:45:13 -0800 +Subject: [PATCH] Keep symbol versions in libraries + +Libraries/binaries that were compiled against the older libnl3 library +(or for other environments) have the symbol versions, and removing them +will cause breakage. For now, kepp the symbol versions. + +Signed-off-by: Saikrishna Arcot +--- + Makefile.am | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 7debff9..58e9e87 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -370,7 +370,8 @@ EXTRA_lib_libnl_3_la_DEPENDENCIES = \ + lib_libnl_3_la_CPPFLAGS = \ + $(lib_cppflags) + lib_libnl_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-3.sym + + lib_LTLIBRARIES += lib/libnl-route-3.la + +@@ -466,7 +467,8 @@ EXTRA_lib_libnl_route_3_la_DEPENDENCIES = \ + lib_libnl_route_3_la_CPPFLAGS = \ + $(lib_cppflags) + lib_libnl_route_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-route-3.sym + lib_libnl_route_3_la_LIBADD = \ + lib/libnl-3.la + +@@ -486,7 +488,8 @@ EXTRA_lib_libnl_idiag_3_la_DEPENDENCIES = \ + lib_libnl_idiag_3_la_CPPFLAGS = \ + $(lib_cppflags) + lib_libnl_idiag_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-idiag-3.sym + lib_libnl_idiag_3_la_LIBADD = \ + lib/libnl-3.la + +@@ -503,7 +506,8 @@ EXTRA_lib_libnl_genl_3_la_DEPENDENCIES = \ + lib_libnl_genl_3_la_CPPFLAGS = \ + $(lib_cppflags) + lib_libnl_genl_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-genl-3.sym + lib_libnl_genl_3_la_LIBADD = \ + lib/libnl-3.la + +@@ -530,7 +534,8 @@ lib_libnl_nf_3_la_CPPFLAGS = \ + EXTRA_lib_libnl_nf_3_la_DEPENDENCIES = \ + libnl-nf-3.sym + lib_libnl_nf_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-nf-3.sym + lib_libnl_nf_3_la_LIBADD = \ + lib/libnl-3.la \ + lib/libnl-route-3.la +@@ -548,7 +553,8 @@ lib_libnl_xfrm_3_la_SOURCES = \ + lib_libnl_xfrm_3_la_CPPFLAGS = \ + $(lib_cppflags) + lib_libnl_xfrm_3_la_LDFLAGS = \ +- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) ++ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ ++ -Wl,--version-script=$(srcdir)/libnl-xfrm-3.sym + EXTRA_lib_libnl_xfrm_3_la_DEPENDENCIES = \ + libnl-xfrm-3.sym + lib_libnl_xfrm_3_la_LIBADD = \ +@@ -640,7 +646,8 @@ src_lib_libnl_cli_3_la_CPPFLAGS = \ + -I$(srcdir)/include \ + -I$(builddir)/include + src_lib_libnl_cli_3_la_LDFLAGS = \ +- $(src_lib_ldflags) ++ $(src_lib_ldflags) \ ++ -Wl,--version-script=$(srcdir)/libnl-cli-3.sym + src_lib_libnl_cli_3_la_LIBADD = \ + lib/libnl-3.la \ + lib/libnl-route-3.la \ +-- +2.34.1 + diff --git a/src/libnl3/patch/series b/src/libnl3/patch/series index 4c7c2d8e25a5..92317908c4f9 100644 --- a/src/libnl3/patch/series +++ b/src/libnl3/patch/series @@ -1,3 +1,4 @@ -0001-mpls-encap-accessors.patch -0002-mpls-remove-nl_addr_valid.patch 0003-Adding-support-for-RTA_NH_ID-attribute.patch +switch-to-debhelper.patch +keep-symbol-versions-in-libraries.patch +update-changelog.patch diff --git a/src/libnl3/patch/switch-to-debhelper.patch b/src/libnl3/patch/switch-to-debhelper.patch new file mode 100644 index 000000000000..4f6f1227f40f --- /dev/null +++ b/src/libnl3/patch/switch-to-debhelper.patch @@ -0,0 +1,263 @@ +From 051dc6f003bf57fd41f75317281ab3bab776e6f1 Mon Sep 17 00:00:00 2001 +From: Saikrishna Arcot +Date: Wed, 30 Oct 2024 09:16:47 -0700 +Subject: [PATCH] Switch to debhelper build infra + +This makes it easier to have it use the latest compat level when +building. + +Also remove the udeb packages, as SONiC doesn't need udeb packages here. +--- + debian/compat | 2 +- + debian/control | 40 +------------------------- + debian/libnl-3-200-udeb.install | 1 - + debian/libnl-3-200.install | 1 - + debian/libnl-3-dev.install | 3 +- + debian/libnl-cli-3-200.install | 1 - + debian/libnl-cli-3-dev.install | 8 ++++-- + debian/libnl-genl-3-200-udeb.install | 2 -- + debian/libnl-genl-3-200.install | 1 - + debian/libnl-genl-3-dev.install | 3 +- + debian/libnl-route-3-dev.install | 6 ++-- + debian/libnl-xfrm-3-dev.install | 6 ++-- + debian/not-installed | 3 ++ + debian/rules | 43 ++-------------------------- + 14 files changed, 20 insertions(+), 100 deletions(-) + delete mode 100644 debian/libnl-3-200-udeb.install + mode change 100755 => 100644 debian/libnl-3-200.install + mode change 100755 => 100644 debian/libnl-3-dev.install + mode change 100755 => 100644 debian/libnl-cli-3-200.install + delete mode 100755 debian/libnl-genl-3-200-udeb.install + mode change 100755 => 100644 debian/libnl-genl-3-200.install + mode change 100755 => 100644 debian/libnl-genl-3-dev.install + create mode 100644 debian/not-installed + +diff --git a/debian/compat b/debian/compat +index ec63514..b1bd38b 100644 +--- a/debian/compat ++++ b/debian/compat +@@ -1 +1 @@ +-9 ++13 +diff --git a/debian/control b/debian/control +index 7b22e69..c954b03 100644 +--- a/debian/control ++++ b/debian/control +@@ -2,7 +2,7 @@ Source: libnl3 + Section: net + Priority: optional + Maintainer: Heiko Stuebner +-Build-Depends: debhelper (>= 9), dh-exec (>= 0.3), cdbs (>= 0.4.93~), bison, flex, ++Build-Depends: debhelper (>= 13), bison, flex, + automake, autoconf, dh-autoreconf, linux-libc-dev (>= 3.2.41), pkg-config + Standards-Version: 4.1.4 + Homepage: http://www.infradead.org/~tgr/libnl/ +@@ -204,41 +204,3 @@ Description: development library and headers for libnl-xfrm-3 + . + This package contains the files that are needed to build applications using + libnl-xfrm-3. +- +-Package: libnl-3-200-dbg +-Architecture: linux-any +-Section: debug +-Depends: libnl-3-200 (= ${binary:Version}), ${misc:Depends} +-Description: debug symbols for libnl3 +- This is a library for applications dealing with netlink sockets. +- The library provides an interface for raw netlink messaging and various +- netlink family specific interfaces. +- . +- This package contains unstripped shared libraries. It is provided primarily +- to provide a backtrace with names in a debugger, this makes it somewhat easier +- to interpret core dumps. The libraries are installed in /usr/lib/debug and +- are automatically used by gdb. +- +-Package: libnl-3-200-udeb +-Architecture: linux-any +-XC-Package-Type: udeb +-Section: debian-installer +-Depends: ${misc:Depends}, ${shlibs:Depends} +-Description: library for dealing with netlink sockets +- This is a library for applications dealing with netlink sockets. +- The library provides an interface for raw netlink messaging and various +- netlink family specific interfaces. +- . +- This package is a udeb. It's only useful inside of debian-installer. +- +-Package: libnl-genl-3-200-udeb +-Architecture: linux-any +-XC-Package-Type: udeb +-Section: debian-installer +-Depends: libnl-3-200-udeb (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +-Description: library for dealing with netlink sockets - generic netlink +- This is a library for applications dealing with netlink sockets. +- The library provides an interface for raw netlink messaging and various +- netlink family specific interfaces. +- . +- This package is a udeb. It's only useful inside of debian-installer. +diff --git a/debian/libnl-3-200-udeb.install b/debian/libnl-3-200-udeb.install +deleted file mode 100644 +index 4b3a77c..0000000 +--- a/debian/libnl-3-200-udeb.install ++++ /dev/null +@@ -1 +0,0 @@ +-usr/lib/*/libnl-3.so.* lib +diff --git a/debian/libnl-3-200.install b/debian/libnl-3-200.install +old mode 100755 +new mode 100644 +index dab89da..4685c79 +--- a/debian/libnl-3-200.install ++++ b/debian/libnl-3-200.install +@@ -1,3 +1,2 @@ +-#!/usr/bin/dh-exec + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3*.so.* lib/${DEB_HOST_MULTIARCH}/ + debian/tmp/etc/libnl-3/* etc/libnl-3 +diff --git a/debian/libnl-3-dev.install b/debian/libnl-3-dev.install +old mode 100755 +new mode 100644 +index 3715b8b..5f56b4a +--- a/debian/libnl-3-dev.install ++++ b/debian/libnl-3-dev.install +@@ -1,5 +1,4 @@ +-#!/usr/bin/dh-exec + debian/tmp/usr/include/* +-debian/tmp/usr/lib/*/pkgconfig/libnl-3* ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libnl-3* + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3.so lib/${DEB_HOST_MULTIARCH}/ + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-3.a lib/${DEB_HOST_MULTIARCH}/ +diff --git a/debian/libnl-cli-3-200.install b/debian/libnl-cli-3-200.install +old mode 100755 +new mode 100644 +index 6735ec9..4e21828 +--- a/debian/libnl-cli-3-200.install ++++ b/debian/libnl-cli-3-200.install +@@ -1,4 +1,3 @@ +-#!/usr/bin/dh-exec + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-cli-3*.so.* + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/cls/*.so usr/lib/${DEB_HOST_MULTIARCH}/libnl-3/cli/cls + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/qdisc/*.so usr/lib/${DEB_HOST_MULTIARCH}/libnl-3/cli/qdisc +diff --git a/debian/libnl-cli-3-dev.install b/debian/libnl-cli-3-dev.install +index 66aa3b3..cfa7abe 100644 +--- a/debian/libnl-cli-3-dev.install ++++ b/debian/libnl-cli-3-dev.install +@@ -1,3 +1,5 @@ +-debian/tmp/usr/lib/*/pkgconfig/libnl-cli-3* +-debian/tmp/usr/lib/*/libnl-cli-3*.so +-debian/tmp/usr/lib/*/libnl-cli-3*.a ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libnl-cli-3* ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-cli-3*.so ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-cli-3*.a ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/cls/*.a ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/qdisc/*.a +diff --git a/debian/libnl-genl-3-200-udeb.install b/debian/libnl-genl-3-200-udeb.install +deleted file mode 100755 +index cb5597b..0000000 +--- a/debian/libnl-genl-3-200-udeb.install ++++ /dev/null +@@ -1,2 +0,0 @@ +-#!/usr/bin/dh-exec +-usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3.so.* lib/${DEB_HOST_MULTIARCH}/ +diff --git a/debian/libnl-genl-3-200.install b/debian/libnl-genl-3-200.install +old mode 100755 +new mode 100644 +index d9d6fae..e79fbf1 +--- a/debian/libnl-genl-3-200.install ++++ b/debian/libnl-genl-3-200.install +@@ -1,2 +1 @@ +-#!/usr/bin/dh-exec + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.so.* lib/${DEB_HOST_MULTIARCH}/ +diff --git a/debian/libnl-genl-3-dev.install b/debian/libnl-genl-3-dev.install +old mode 100755 +new mode 100644 +index cbc6b51..68148a0 +--- a/debian/libnl-genl-3-dev.install ++++ b/debian/libnl-genl-3-dev.install +@@ -1,4 +1,3 @@ +-#!/usr/bin/dh-exec +-debian/tmp/usr/lib/*/pkgconfig/libnl-genl-3* ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libnl-genl-3* + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.so lib/${DEB_HOST_MULTIARCH}/ + debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-genl-3*.a lib/${DEB_HOST_MULTIARCH}/ +diff --git a/debian/libnl-route-3-dev.install b/debian/libnl-route-3-dev.install +index 37e248c..c3f0e4e 100644 +--- a/debian/libnl-route-3-dev.install ++++ b/debian/libnl-route-3-dev.install +@@ -1,3 +1,3 @@ +-debian/tmp/usr/lib/*/pkgconfig/libnl-route-3* +-debian/tmp/usr/lib/*/libnl-route-3*.so +-debian/tmp/usr/lib/*/libnl-route-3*.a ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libnl-route-3* ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-route-3*.so ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-route-3*.a +diff --git a/debian/libnl-xfrm-3-dev.install b/debian/libnl-xfrm-3-dev.install +index f57e152..51d78d1 100644 +--- a/debian/libnl-xfrm-3-dev.install ++++ b/debian/libnl-xfrm-3-dev.install +@@ -1,3 +1,3 @@ +-debian/tmp/usr/lib/*/pkgconfig/libnl-xfrm-3* +-debian/tmp/usr/lib/*/libnl-xfrm-3*.so +-debian/tmp/usr/lib/*/libnl-xfrm-3*.a ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libnl-xfrm-3* ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-xfrm-3*.so ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-xfrm-3*.a +diff --git a/debian/not-installed b/debian/not-installed +new file mode 100644 +index 0000000..079a795 +--- /dev/null ++++ b/debian/not-installed +@@ -0,0 +1,3 @@ ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl-*.la ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/cls/*.la ++debian/tmp/usr/lib/${DEB_HOST_MULTIARCH}/libnl/cli/qdisc/*.la +diff --git a/debian/rules b/debian/rules +index aafca20..2d33f6a 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -1,43 +1,4 @@ + #!/usr/bin/make -f + +-DEB_BUILDDIR = debian/build +-DEB_MAKE_FLAVORS = main udeb +- +-udeb_libnl=libnl-3-200-udeb +-udeb_libnl_genl=libnl-genl-3-200-udeb +- +-TG_BRANCHES := debian/etc-libnl-3,debian/out-of-tree,debian/no-symvers +- +--include /usr/share/topgit/tg2quilt.mk +- +-# to export the patch series use +-# debian/rules tg-clean +-# debian/rules tg-export +- +- +-include /usr/share/cdbs/1/rules/debhelper.mk +-include /usr/share/cdbs/1/rules/autoreconf.mk +-include /usr/share/cdbs/1/class/autotools.mk +- +-# FIXME: not honoured +-#CFLAGS_udeb += $(CFLAGS) -Os +-CFLAGS += $(if $(findstring udeb,$(cdbs_make_curflavor)),-Os) +- +-DEB_DH_STRIP_ARGS := --dbg-package=libnl-3-200-dbg +-DEB_DH_MAKESHLIBS_ARGS_libnl-3-200 := --add-udeb=$(udeb_libnl) +-DEB_DH_MAKESHLIBS_ARGS_libnl-genl-3-200 := --add-udeb=$(udeb_libnl_genl) +- +-DEB_MAKE_DESTDIRSKEL = $(CURDIR)/debian/tmp +-DEB_MAKE_DESTDIRSKEL_udeb = $(CURDIR)/debian/tmp/udeb +- +-DEB_DH_INSTALL_ARGS_$(udeb) += --sourcedir=debian/tmp/udeb +- +-DEB_CONFIGURE_EXTRA_FLAGS += --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) +- +-# Dodge debhelper's #1015263, pulling sgml-base for udebs: +-DEB_DH_GENCONTROL_ARGS_$(udeb_libnl) = -- -Vmisc:Depends= +-DEB_DH_GENCONTROL_ARGS_$(udeb_libnl_genl) = -- -Vmisc:Depends= +- +-clean:: +- # from some unknown reason CDBS does not remove the builddir +- rm -rf $(DEB_BUILDDIR) ++%: ++ dh $@ +-- +2.34.1 + diff --git a/src/libnl3/patch/update-changelog.patch b/src/libnl3/patch/update-changelog.patch new file mode 100644 index 000000000000..75a6b263b91b --- /dev/null +++ b/src/libnl3/patch/update-changelog.patch @@ -0,0 +1,30 @@ +From 62e7fbb3b7f47c686d918f67bbba17f77e1ed217 Mon Sep 17 00:00:00 2001 +From: Saikrishna Arcot +Date: Mon, 4 Nov 2024 16:26:03 -0800 +Subject: [PATCH] Update changelog + +Add changelog entry to force different timestamps, so that docker's +overlay2 diff code doesn't have issues. + +Signed-off-by: Saikrishna Arcot +--- + debian/changelog | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/debian/changelog b/debian/changelog +index b8b08d7..48e33f0 100644 +--- a/debian/changelog ++++ b/debian/changelog +@@ -1,3 +1,9 @@ ++libnl3 (3.7.0-0.2+b1sonic1) unstable; urgency=medium ++ ++ * Add support to get/set the nexthop ID ++ ++ -- SONiC Build Tue, 05 Nov 2024 00:20:23 +0000 ++ + libnl3 (3.7.0-0.2) unstable; urgency=medium + + * Non-maintainer upload. +-- +2.34.1 + diff --git a/src/libyang2/Makefile b/src/libyang2/Makefile index fab24590a340..16d80587573e 100644 --- a/src/libyang2/Makefile +++ b/src/libyang2/Makefile @@ -5,7 +5,7 @@ SHELL = /bin/bash LIBYANG_URL = https://sonicstorage.blob.core.windows.net/debian/pool/main/liby/libyang DSC_FILE = libyang2_$(LIBYANG2_FULLVERSION).dsc -ORIG_FILE = libyang2_$(LIBYANG2_VERSION).orig.tar.gz +ORIG_FILE = libyang2_$(LIBYANG2_VERSION).orig.tar.xz DEBIAN_FILE = libyang2_$(LIBYANG2_FULLVERSION).debian.tar.xz DSC_FILE_URL = $(LIBYANG_URL)/$(DSC_FILE) @@ -26,6 +26,10 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : dpkg-source -x libyang2_$(LIBYANG2_FULLVERSION).dsc pushd libyang2-$(LIBYANG2_VERSION) + #The package libyang2.1.148 is taken from debian trixie, which only has dpkg-dev version 1.21.22 + #The bullseye package has dpkg-dev version 1.20.13 + #The VS package has dpkg-dev version 1.19.8 + sed -i 's/dpkg-dev (>= 1.22.5)/dpkg-dev (>= 1.19.8)/' debian/control #sed -i 's/set(LIBYANG_MAJOR_SOVERSION 1)/set(LIBYANG_MAJOR_SOVERSION 2)/' CMakeLists.txt #sed -i 's/libyang2/libyang2/' debian/libyang2.install # Enable large file support for 32-bit arch diff --git a/src/linkmgrd b/src/linkmgrd index f3fbf091ae64..ccd52d06acf8 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit f3fbf091ae644549675e68818f0dc8680483aff5 +Subproject commit ccd52d06acf802e960939bf7a29d819607985652 diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py index 0b07f9cbcda7..19e478578c1d 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py @@ -387,7 +387,7 @@ def load_peers(): Load peers from FRR. :return: set of peers, which are already installed in FRR """ - command = ["vtysh", "-c", "show bgp vrfs json"] + command = ["vtysh", "-H", "/dev/null", "-c", "show bgp vrfs json"] ret_code, out, err = run_command(command) if ret_code == 0: js_vrf = json.loads(out) diff --git a/src/sonic-bgpcfgd/bgpmon/bgpmon.py b/src/sonic-bgpcfgd/bgpmon/bgpmon.py index 26a5b245413e..2623ec62482f 100755 --- a/src/sonic-bgpcfgd/bgpmon/bgpmon.py +++ b/src/sonic-bgpcfgd/bgpmon/bgpmon.py @@ -77,7 +77,7 @@ def update_new_peer_states(self, peer_dict): # Get a new snapshot of BGP neighbors and store them in the "new" location def get_all_neigh_states(self): - cmd = ["vtysh", "-c", 'show bgp summary json'] + cmd = ["vtysh", "-H", "/dev/null", "-c", 'show bgp summary json'] retry_attempt = 0 while retry_attempt < self.MAX_RETRY_ATTEMPTS: diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_back.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_back.conf index da0e6b77339e..c6acef329eff 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_back.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_back.conf @@ -10,7 +10,6 @@ neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family address-family ipv6 neighbor INTERNAL_PEER_V6 route-reflector-client @@ -19,7 +18,6 @@ neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf index 64b30e514d8c..30d8ef576b33 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chasiss_packet.conf @@ -3,23 +3,23 @@ ! neighbor INTERNAL_PEER_V4 peer-group neighbor INTERNAL_PEER_V6 peer-group - neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 ttl-security hops 1 address-family ipv4 neighbor INTERNAL_PEER_V4 soft-reconfiguration inbound neighbor INTERNAL_PEER_V4 allowas-in 1 neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family - neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 ttl-security hops 1 address-family ipv6 neighbor INTERNAL_PEER_V6 soft-reconfiguration inbound neighbor INTERNAL_PEER_V6 allowas-in 1 neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_isolate.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_isolate.conf index cfb47916e655..1fcf6fab2be1 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_isolate.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_isolate.conf @@ -3,23 +3,23 @@ ! neighbor INTERNAL_PEER_V4 peer-group neighbor INTERNAL_PEER_V6 peer-group - neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 ttl-security hops 1 address-family ipv4 neighbor INTERNAL_PEER_V4 soft-reconfiguration inbound neighbor INTERNAL_PEER_V4 allowas-in 1 neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family - neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 ttl-security hops 1 address-family ipv6 neighbor INTERNAL_PEER_V6 soft-reconfiguration inbound neighbor INTERNAL_PEER_V6 allowas-in 1 neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_unisolate.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_unisolate.conf index 2711f46d567b..6842ce66ea6c 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_unisolate.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_chassis_packet_unisolate.conf @@ -3,23 +3,23 @@ ! neighbor INTERNAL_PEER_V4 peer-group neighbor INTERNAL_PEER_V6 peer-group - neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 update-source Loopback4096 + neighbor INTERNAL_PEER_V4 ttl-security hops 1 address-family ipv4 neighbor INTERNAL_PEER_V4 soft-reconfiguration inbound neighbor INTERNAL_PEER_V4 allowas-in 1 neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family - neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 update-source Loopback4096 + neighbor INTERNAL_PEER_V6 ttl-security hops 1 address-family ipv6 neighbor INTERNAL_PEER_V6 soft-reconfiguration inbound neighbor INTERNAL_PEER_V6 allowas-in 1 neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_front.conf b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_front.conf index 363040eb12f5..7b6ee2667de9 100644 --- a/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_front.conf +++ b/src/sonic-bgpcfgd/tests/data/internal/peer-group.conf/result_front.conf @@ -9,7 +9,6 @@ neighbor INTERNAL_PEER_V4 route-map FROM_BGP_INTERNAL_PEER_V4 in neighbor INTERNAL_PEER_V4 route-map TO_BGP_INTERNAL_PEER_V4 out neighbor INTERNAL_PEER_V4 send-community - neighbor INTERNAL_PEER_V4 ttl-security hops 1 exit-address-family address-family ipv6 neighbor INTERNAL_PEER_V6 soft-reconfiguration inbound @@ -17,7 +16,6 @@ neighbor INTERNAL_PEER_V6 route-map FROM_BGP_INTERNAL_PEER_V6 in neighbor INTERNAL_PEER_V6 route-map TO_BGP_INTERNAL_PEER_V6 out neighbor INTERNAL_PEER_V6 send-community - neighbor INTERNAL_PEER_V6 ttl-security hops 1 exit-address-family ! ! end of template: bgpd/templates/internal/peer-group.conf.j2 diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.spine_chassis_frontend_router.conf.j2/base.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.spine_chassis_frontend_router.conf.j2/base.conf index 581eb107ec23..b7e9e7101605 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.spine_chassis_frontend_router.conf.j2/base.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.spine_chassis_frontend_router.conf.j2/base.conf @@ -13,7 +13,7 @@ router bgp 555 vrf First address-family ipv4 unicast neighbor 10.10.10.1 activate neighbor 10.10.10.1 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family address-family l2vpn evpn advertise ipv4 unicast @@ -31,7 +31,7 @@ router bgp 555 vrf Second address-family ipv4 unicast neighbor 20.20.20.1 activate neighbor 20.20.20.1 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family address-family l2vpn evpn advertise ipv4 unicast diff --git a/src/sonic-bgpcfgd/tests/test_bgp.py b/src/sonic-bgpcfgd/tests/test_bgp.py index 5b494af4d79a..b9240cccb8e0 100644 --- a/src/sonic-bgpcfgd/tests/test_bgp.py +++ b/src/sonic-bgpcfgd/tests/test_bgp.py @@ -32,7 +32,7 @@ def constructor(constants_path, bgp_router_id="", peer_type="general", with_lo0_ } return_value_map = { - "['vtysh', '-c', 'show bgp vrfs json']": (0, "{\"vrfs\": {\"default\": {}}}", ""), + "['vtysh', '-H', '/dev/null', '-c', 'show bgp vrfs json']": (0, "{\"vrfs\": {\"default\": {}}}", ""), "['vtysh', '-c', 'show bgp vrf default neighbors json']": (0, "{\"10.10.10.1\": {}, \"20.20.20.1\": {}, \"fc00:10::1\": {}}", "") } diff --git a/src/sonic-bmp b/src/sonic-bmp index 8c4311d054f9..4dcef923824a 160000 --- a/src/sonic-bmp +++ b/src/sonic-bmp @@ -1 +1 @@ -Subproject commit 8c4311d054f9b7a9d8edb887546da153e3310034 +Subproject commit 4dcef923824ad199fe820d54a4aebd8ca1dbfd10 diff --git a/src/sonic-bmpcfgd/bmpcfgd/__init__.py b/src/sonic-bmpcfgd/bmpcfgd/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/sonic-bmpcfgd/scripts/bmpcfgd b/src/sonic-bmpcfgd/bmpcfgd/bmpcfgd.py similarity index 67% rename from src/sonic-bmpcfgd/scripts/bmpcfgd rename to src/sonic-bmpcfgd/bmpcfgd/bmpcfgd.py index 448ca5b24617..f8fa35fe253f 100644 --- a/src/sonic-bmpcfgd/scripts/bmpcfgd +++ b/src/sonic-bmpcfgd/bmpcfgd/bmpcfgd.py @@ -11,7 +11,7 @@ import signal from shutil import copy2 from datetime import datetime -from sonic_py_common import device_info +from sonic_py_common import logger from sonic_py_common.general import check_output_pipe from swsscommon.swsscommon import ConfigDBConnector, DBConnector, Table from swsscommon import swsscommon @@ -21,6 +21,8 @@ BMP_STATE_DB = "BMP_STATE_DB" REDIS_HOSTIP = "127.0.0.1" BMP_TABLE = "BMP" +SYSLOG_IDENTIFIER = "bmpcfgd" +logger = logger.Logger(SYSLOG_IDENTIFIER) def is_true(val): return str(val).lower() == 'true' @@ -36,11 +38,10 @@ def __init__(self, state_db_conn): def load(self, data={}): common_config = data.get('table', {}) - self.bgp_neighbor_table = is_true(common_config.get('bgp_neighbor_table', 'false')) self.bgp_rib_in_table = is_true(common_config.get('bgp_rib_in_table', 'false')) self.bgp_rib_out_table = is_true(common_config.get('bgp_rib_out_table', 'false')) - self.log_info(f'BMPCfg: update : {self.bgp_neighbor_table}, {self.bgp_rib_in_table}, {self.bgp_rib_out_table}') + logger.log_notice(f'bmpcfgd: config update : {self.bgp_neighbor_table}, {self.bgp_rib_in_table}, {self.bgp_rib_out_table}') # reset bmp table state once config is changed. self.stop_bmp() @@ -53,20 +54,20 @@ def cfg_handler(self, data): def stop_bmp(self): - self.log_info('BMPCfg: stop bmp daemon') - subprocess.call(["service", "openbmpd", "stop"]) + logger.log_notice('bmpcfgd: stop bmp daemon') + subprocess.call(["supervisorctl", "stop", "sonic-bmp:openbmpd"]) def reset_bmp_table(self): - self.log_info('BMPCfg: Reset bmp table from state_db') + logger.log_notice('bmpcfgd: Reset bmp table from state_db') self.state_db_conn.delete_all_by_pattern(BMP_STATE_DB, 'BGP_NEIGHBOR*') self.state_db_conn.delete_all_by_pattern(BMP_STATE_DB, 'BGP_RIB_IN_TABLE*') self.state_db_conn.delete_all_by_pattern(BMP_STATE_DB, 'BGP_RIB_OUT_TABLE*') def start_bmp(self): - self.log_info('BMPCfg: start bmp daemon') - subprocess.call(["service", "openbmpd", "start"]) + logger.log_notice('bmpcfgd: start bmp daemon') + subprocess.call(["supervisorctl", "start", "sonic-bmp:openbmpd"]) class BMPCfgDaemon: @@ -77,32 +78,17 @@ def __init__(self): self.config_db.connect(wait_for_init=True, retry_on=True) self.bmpcfg = BMPCfg(self.state_db_conn) - def bmp_handler(self, key, op, data): + def bmp_handler(self, key, data): data = self.config_db.get_table(BMP_TABLE) self.bmpcfg.cfg_handler(data) def register_callbacks(self): self.config_db.subscribe(BMP_TABLE, lambda table, key, data: - self.bmp_handler(key, op, data)) - -def signal_handler(sig, frame): - if sig == signal.SIGHUP: - self.log_info("bmpcfgd: signal 'SIGHUP' is caught and ignoring..") - elif sig == signal.SIGINT: - self.log_info("bmpcfgd: signal 'SIGINT' is caught and exiting...") - sys.exit(128 + sig) - elif sig == signal.SIGTERM: - self.log_info("bmpcfgd: signal 'SIGTERM' is caught and exiting...") - sys.exit(128 + sig) - else: - self.log_info("bmpcfgd: invalid signal - ignoring..") - + self.bmp_handler(key, data)) + self.config_db.listen(init_data_handler=self.bmpcfg.load) def main(): - signal.signal(signal.SIGTERM, signal_handler) - signal.signal(signal.SIGINT, signal_handler) - signal.signal(signal.SIGHUP, signal_handler) daemon = BMPCfgDaemon() daemon.register_callbacks() diff --git a/src/sonic-bmpcfgd/data/debian/sonic-services-data.bmpcfgd.service b/src/sonic-bmpcfgd/data/debian/sonic-services-data.bmpcfgd.service deleted file mode 100644 index 0a16edf77fe1..000000000000 --- a/src/sonic-bmpcfgd/data/debian/sonic-services-data.bmpcfgd.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=Process which monitors config_db and manage openbmpd daemon -Requires=database.service config-setup.service -After=database.service config-setup.service -BindsTo=sonic.target -After=sonic.target - -[Service] -Type=simple -ExecStart=/usr/local/bin/bmpcfgd -Restart=always - -[Install] -WantedBy=sonic.target diff --git a/src/sonic-bmpcfgd/setup.py b/src/sonic-bmpcfgd/setup.py index 33c3fd9803e7..193b2094722e 100644 --- a/src/sonic-bmpcfgd/setup.py +++ b/src/sonic-bmpcfgd/setup.py @@ -1,25 +1,11 @@ -from __future__ import print_function -import sys -from setuptools import setup -import pkg_resources -from packaging import version +import setuptools -# sonic_dependencies, version requirement only supports '>=' -sonic_dependencies = ['sonic-py-common', 'sonic-utilities'] -for package in sonic_dependencies: - try: - package_dist = pkg_resources.get_distribution(package.split(">=")[0]) - except pkg_resources.DistributionNotFound: - print(package + " is not found!", file=sys.stderr) - print("Please build and install SONiC python wheels dependencies from sonic-buildimage", file=sys.stderr) - exit(1) - if ">=" in package: - if version.parse(package_dist.version) >= version.parse(package.split(">=")[1]): - continue - print(package + " version not match!", file=sys.stderr) - exit(1) -setup( +dependencies = [ + 'sonic_py_common', +] + +setuptools.setup( name = 'sonic-bmpcfgd-services', version = '1.0', description = 'Python services which run in the bmp container', @@ -29,16 +15,21 @@ url = 'https://github.com/Azure/sonic-buildimage', maintainer = 'Feng Pan', maintainer_email = 'fenpan@microsoft.com', - packages = setuptools.find_packages(), - scripts = [ - 'scripts/bmpcfgd' + packages=[ + 'bmpcfgd', + 'tests' ], install_requires = [ 'jinja2>=2.10', 'netaddr==0.8.0', 'pyyaml==6.0.1', 'ipaddress==1.0.23' - ] + sonic_dependencies, + ], + entry_points={ + 'console_scripts': [ + 'bmpcfgd = bmpcfgd.bmpcfgd:main', + ] + }, setup_requires = [ 'pytest-runner', 'wheel' @@ -50,26 +41,4 @@ 'sonic-py-common', 'pytest-cov' ], - extras_require = { - "testing": [ - 'parameterized', - 'pytest', - 'pyfakefs', - 'sonic-py-common' - ] - }, - classifiers = [ - 'Development Status :: 3 - Alpha', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Intended Audience :: Information Technology', - 'Intended Audience :: System Administrators', - 'License :: OSI Approved :: Apache Software License', - 'Natural Language :: English', - 'Operating System :: POSIX :: Linux', - 'Programming Language :: Python :: 3.7', - 'Topic :: System', - ], - keywords = 'sonic SONiC bmp services', - test_suite = 'setup.get_test_suite' ) diff --git a/src/sonic-bmpcfgd/tests/bmpcfgd_test.py b/src/sonic-bmpcfgd/tests/bmpcfgd_test.py index a6abc6c3b703..f43ba77cf780 100644 --- a/src/sonic-bmpcfgd/tests/bmpcfgd_test.py +++ b/src/sonic-bmpcfgd/tests/bmpcfgd_test.py @@ -19,16 +19,14 @@ test_path = os.path.dirname(os.path.abspath(__file__)) modules_path = os.path.dirname(test_path) -scripts_path = os.path.join(modules_path, "scripts") +scripts_path = os.path.join(modules_path, "bmpcfgd") sys.path.insert(0, modules_path) # Load the file under test -bmpcfgd_path = os.path.join(scripts_path, 'bmpcfgd') +bmpcfgd_path = os.path.join(scripts_path, 'bmpcfgd.py') bmpcfgd = load_module_from_source('bmpcfgd', bmpcfgd_path) -from bmpcfgd import signal_handler - original_syslog = bmpcfgd.syslog # Mock swsscommon classes @@ -46,71 +44,42 @@ def setUp(self): self.test_data['BMP'] = {} self.test_data['BMP']['table'] = {'bgp_neighbor_table': 'false', 'bgp_rib_in_table': 'false', 'bgp_rib_out_table': 'false'} - @mock.patch('sonic_installer.bootloader.get_bootloader', side_effect=[MockBootloader()]) - @mock.patch('syslog.syslog') @mock.patch('subprocess.call') - def test_bmpcfgd_neighbor_enable(self, mock_check_call, mock_syslog, mock_get_bootloader): + @mock.patch('bmpcfgd.BMPCfg.log_info') + def test_bmpcfgd_neighbor_enable(self, mock_call, mock_log_info): self.test_data['BMP']['table']['bgp_neighbor_table'] = 'true' MockConfigDb.set_config_db(self.test_data) bmp_config_daemon = bmpcfgd.BMPCfgDaemon() bmp_config_daemon.register_callbacks() - bmp_config_daemon.bmp_handler("BMP", '', self.test_data) + bmp_config_daemon.bmp_handler("BMP", self.test_data) expected_calls = [ - mock.call(original_syslog.LOG_INFO, 'BMPCfg: update : True, False, False'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: stop bmp daemon'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: Reset bmp table from state_db'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: start bmp daemon'), + mock.call(["supervisorctl", "stop", "sonic-bmp:openbmpd"]), + mock.call(["supervisorctl", "start", "sonic-bmp:openbmpd"]) ] - mock_syslog.assert_has_calls(expected_calls) + mock_log_info.assert_has_calls(expected_calls) - @mock.patch('sonic_installer.bootloader.get_bootloader', side_effect=[MockBootloader()]) - @mock.patch('syslog.syslog') - @mock.patch('subprocess.check_call') - def test_bmpcfgd_bgp_rib_in_enable(self, mock_check_call, mock_syslog, mock_get_bootloader): + @mock.patch('subprocess.call') + @mock.patch('bmpcfgd.BMPCfg.log_info') + def test_bmpcfgd_bgp_rib_in_enable(self, mock_call, mock_log_info): self.test_data['BMP']['table']['bgp_rib_in_table'] = 'true' MockConfigDb.set_config_db(self.test_data) bmp_config_daemon = bmpcfgd.BMPCfgDaemon() - bmp_config_daemon.bmp_handler("BMP", '', self.test_data) + bmp_config_daemon.bmp_handler("BMP", self.test_data) expected_calls = [ - mock.call(original_syslog.LOG_INFO, 'BMPCfg: update : False, True, False'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: stop bmp daemon'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: Reset bmp table from state_db'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: start bmp daemon'), + mock.call(["supervisorctl", "stop", "sonic-bmp:openbmpd"]), + mock.call(["supervisorctl", "start", "sonic-bmp:openbmpd"]) ] - mock_syslog.assert_has_calls(expected_calls) + mock_log_info.assert_has_calls(expected_calls) - @mock.patch('sonic_installer.bootloader.get_bootloader', side_effect=[MockBootloader()]) - @mock.patch('syslog.syslog') - @mock.patch('subprocess.check_call') - def test_bmpcfgd_bgp_rib_out_enable(self, mock_check_call, mock_syslog, mock_get_bootloader): + @mock.patch('subprocess.call') + @mock.patch('bmpcfgd.BMPCfg.log_info') + def test_bmpcfgd_bgp_rib_out_enable(self, mock_call, mock_log_info): self.test_data['BMP']['table']['bgp_rib_out_table'] = 'true' MockConfigDb.set_config_db(self.test_data) bmp_config_daemon = bmpcfgd.BMPCfgDaemon() - bmp_config_daemon.bmp_handler("BMP", '', self.test_data) + bmp_config_daemon.bmp_handler("BMP", self.test_data) expected_calls = [ - mock.call(original_syslog.LOG_INFO, 'BMPCfg: update : False, False, True'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: stop bmp daemon'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: Reset bmp table from state_db'), - mock.call(original_syslog.LOG_INFO, 'BMPCfg: start bmp daemon'), + mock.call(["supervisorctl", "stop", "sonic-bmp:openbmpd"]), + mock.call(["supervisorctl", "start", "sonic-bmp:openbmpd"]) ] - mock_syslog.assert_has_calls(expected_calls) - - - @mock.patch('syslog.syslog') - @mock.patch.object(sys, 'exit') - def test_signal_handler(self, mock_exit, mock_syslog): - # Test SIGHUP signal - signal_handler(signal.SIGHUP, None) - mock_syslog.assert_called_with(original_syslog.LOG_INFO, "bmpcfgd: signal 'SIGHUP' is caught and ignoring..") - mock_exit.assert_not_called() - # Test SIGINT signal - signal_handler(signal.SIGINT, None) - mock_syslog.assert_called_with(original_syslog.LOG_INFO, "bmpcfgd: signal 'SIGINT' is caught and exiting...") - mock_exit.assert_called_once_with(128 + signal.SIGINT) - # Test SIGTERM signal - signal_handler(signal.SIGTERM, None) - mock_syslog.assert_called_with(original_syslog.LOG_INFO, "bmpcfgd: signal 'SIGTERM' is caught and exiting...") - mock_exit.assert_called_with(128 + signal.SIGTERM) - # Test invalid signal - signal_handler(999, None) - mock_syslog.assert_called_with(original_syslog.LOG_INFO, "bmpcfgd: invalid signal - ignoring..") + mock_log_info.assert_has_calls(expected_calls) \ No newline at end of file diff --git a/src/sonic-bmpcfgd/tests/common/mock_bootloader.py b/src/sonic-bmpcfgd/tests/common/mock_bootloader.py new file mode 100644 index 000000000000..37781ad14833 --- /dev/null +++ b/src/sonic-bmpcfgd/tests/common/mock_bootloader.py @@ -0,0 +1,13 @@ +class MockBootloader(object): + + def __init__(self, enforce=False): + self.enforce = enforce + + def get_next_image(self): + return "" + + def set_fips(self, image, enable): + self.enforce = enable + + def get_fips(self, image): + return self.enforce diff --git a/src/sonic-config-engine/config_samples.py b/src/sonic-config-engine/config_samples.py index d72925c843c0..353e28e94ace 100644 --- a/src/sonic-config-engine/config_samples.py +++ b/src/sonic-config-engine/config_samples.py @@ -16,7 +16,6 @@ def generate_common_config(data): data['FLEX_COUNTER_TABLE'] = { 'ACL': { 'FLEX_COUNTER_STATUS': 'disable', - 'FLEX_COUNTER_DELAY_STATUS': 'true', 'POLL_INTERVAL': '10000' } } @@ -270,4 +269,3 @@ def get_available_config(): def generate_sample_config(data, setting_name): data = generate_common_config(data) return _sample_generators[setting_name.lower()](data) - diff --git a/src/sonic-config-engine/data/l1intf.j2 b/src/sonic-config-engine/data/l1intf.j2 index 68ffc3ee4ece..b2f218ea82cb 100644 --- a/src/sonic-config-engine/data/l1intf.j2 +++ b/src/sonic-config-engine/data/l1intf.j2 @@ -7,7 +7,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } }, @@ -30,4 +29,3 @@ } } - diff --git a/src/sonic-config-engine/data/l2switch.j2 b/src/sonic-config-engine/data/l2switch.j2 index 37c343867a10..359525763f71 100644 --- a/src/sonic-config-engine/data/l2switch.j2 +++ b/src/sonic-config-engine/data/l2switch.j2 @@ -3,7 +3,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } }, diff --git a/src/sonic-config-engine/data/l3intf.j2 b/src/sonic-config-engine/data/l3intf.j2 index 45fba9f692ef..06cc720bc1b4 100644 --- a/src/sonic-config-engine/data/l3intf.j2 +++ b/src/sonic-config-engine/data/l3intf.j2 @@ -7,7 +7,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } }, diff --git a/src/sonic-config-engine/portconfig.py b/src/sonic-config-engine/portconfig.py index 788774d34969..b2550b12125f 100644 --- a/src/sonic-config-engine/portconfig.py +++ b/src/sonic-config-engine/portconfig.py @@ -430,7 +430,8 @@ def parse_platform_json_file(hwsku_json_file, platform_json_file): if child_port in hwsku_entry: for key, item in hwsku_entry[child_port].items(): if key in OPTIONAL_HWSKU_ATTRIBUTES: - child_ports.get(child_port)[key] = item + for child in child_ports: + child_ports.get(child)[key] = item ports.update(child_ports) diff --git a/src/sonic-config-engine/tests/data/rsyslog/config_db.json b/src/sonic-config-engine/tests/data/rsyslog/config_db.json index 7cc58a131576..ede8d7f6600a 100644 --- a/src/sonic-config-engine/tests/data/rsyslog/config_db.json +++ b/src/sonic-config-engine/tests/data/rsyslog/config_db.json @@ -393,7 +393,6 @@ }, "FLEX_COUNTER_TABLE": { "ACL": { - "FLEX_COUNTER_DELAY_STATUS": "false", "FLEX_COUNTER_STATUS": "enable", "POLL_INTERVAL": "10000" } @@ -911,4 +910,3 @@ } } } - diff --git a/src/sonic-config-engine/tests/sample_output/platform_output.json b/src/sonic-config-engine/tests/sample_output/platform_output.json index 51c26754e982..b820717499a1 100644 --- a/src/sonic-config-engine/tests/sample_output/platform_output.json +++ b/src/sonic-config-engine/tests/sample_output/platform_output.json @@ -976,7 +976,8 @@ "alias": "Eth36/1", "pfc_asym": "off", "subport": "1", - "speed": "25000" + "speed": "25000", + "role": "Dpc" }, "Ethernet141": { "index": "36", @@ -987,7 +988,8 @@ "alias": "Eth36/2", "pfc_asym": "off", "speed": "25000", - "subport": "2" + "subport": "2", + "role": "Dpc" }, "Ethernet142": { "index": "36", diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf index 3828af13fd71..11272757855b 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf @@ -67,10 +67,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf index 45cd03a540a8..ab7f99d43cdf 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf @@ -76,10 +76,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_bmp.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_bmp.conf new file mode 100644 index 000000000000..827b287e57f1 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_bmp.conf @@ -0,0 +1,89 @@ +! +! template: bgpd/bgpd.conf.j2 +! +! +! =========== Managed by sonic-cfggen DO NOT edit manually! ==================== +! generated by templates/quagga/bgpd.conf.j2 with config DB data +! file: bgpd.conf +! +! +! template: common/daemons.common.conf.j2 +! +hostname switch-t0 +password zebra +enable password zebra +! +log syslog informational +log facility local4 +! +! end of template: common/daemons.common.conf.j2! +agentx +! +! +! +! template: bgpd/bgpd.main.conf.j2 +! +! bgp multiple-instance +! +! BGP configuration +! +! TSA configuration +! +ip prefix-list PL_LoopbackV4 permit 10.1.0.32/32 +! +ipv6 prefix-list PL_LoopbackV6 permit fc00:1::/64 +! +ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 5 permit 192.168.0.0/27 +! +ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 +! +! +! +router bgp 65100 +! + bgp log-neighbor-changes + bgp suppress-fib-pending + no bgp default ipv4-unicast + no bgp ebgp-requires-policy +! + bgp bestpath as-path multipath-relax +! + bgp graceful-restart restart-time 240 + bgp graceful-restart + bgp graceful-restart preserve-fw-state + bgp graceful-restart select-defer-time 45 +! +! + bmp mirror buffer-limit 4294967214 +! + bmp targets sonic-bmp + bmp stats interval 1000 + bmp monitor ipv4 unicast pre-policy + bmp monitor ipv6 unicast pre-policy + bmp connect 127.0.0.1 port 5000 min-retry 1000 max-retry 2000 +! +! + bgp router-id 10.1.0.32 +! + network 10.1.0.32/32 +! + address-family ipv6 + network fc00:1::32/64 + exit-address-family +! + network 192.168.0.1/27 + network 192.168.200.1/27 +! +! +! + address-family ipv4 + maximum-paths 514 + exit-address-family + address-family ipv6 + maximum-paths 514 + exit-address-family +! +! end of template: bgpd/bgpd.main.conf.j2 +!! +! end of template: bgpd/bgpd.conf.j2 +! diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf index eda11ab9f285..fb1af604c40e 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf @@ -68,10 +68,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf index 8daeff2a61e9..b84ff10f590d 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf @@ -82,10 +82,10 @@ router bgp 65100 exit-address-family ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_quagga.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_quagga.conf index 43e8ade6a302..fb8bd1d9d9d9 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_quagga.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_quagga.conf @@ -35,7 +35,7 @@ router bgp 65100 neighbor 10.0.0.59 allowas-in 1 neighbor 10.0.0.59 activate neighbor 10.0.0.59 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.61 remote-as 64600 neighbor 10.0.0.61 description ARISTA03T1 @@ -43,7 +43,7 @@ router bgp 65100 neighbor 10.0.0.61 allowas-in 1 neighbor 10.0.0.61 activate neighbor 10.0.0.61 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.63 remote-as 64600 neighbor 10.0.0.63 description ARISTA04T1 @@ -51,7 +51,7 @@ router bgp 65100 neighbor 10.0.0.63 allowas-in 1 neighbor 10.0.0.63 activate neighbor 10.0.0.63 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::7e remote-as 64600 neighbor fc00::7e description ARISTA04T1 @@ -59,7 +59,7 @@ router bgp 65100 neighbor fc00::7e allowas-in 1 neighbor fc00::7e activate neighbor fc00::7e soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::7a remote-as 64600 neighbor fc00::7a description ARISTA03T1 @@ -67,7 +67,7 @@ router bgp 65100 neighbor fc00::7a allowas-in 1 neighbor fc00::7a activate neighbor fc00::7a soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.57 remote-as 64600 neighbor 10.0.0.57 description ARISTA01T1 @@ -75,7 +75,7 @@ router bgp 65100 neighbor 10.0.0.57 allowas-in 1 neighbor 10.0.0.57 activate neighbor 10.0.0.57 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::76 remote-as 64600 neighbor fc00::76 description ARISTA02T1 @@ -83,7 +83,7 @@ router bgp 65100 neighbor fc00::76 allowas-in 1 neighbor fc00::76 activate neighbor fc00::76 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::72 remote-as 64600 neighbor fc00::72 description ARISTA01T1 @@ -91,10 +91,10 @@ router bgp 65100 neighbor fc00::72 allowas-in 1 neighbor fc00::72 activate neighbor fc00::72 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family ! -maximum-paths 64 +maximum-paths 514 ! route-map ISOLATE permit 10 set as-path prepend 65100 diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json index 661fd8cc28c5..8a1163f95f72 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json @@ -57,7 +57,7 @@ "size": "6441610000", "type": "both", "mode": "dynamic", - "xoff": "20761804" + "xoff": "1056256819" } }, "BUFFER_PROFILE": { diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json index 1cb60747fc3e..2f6fa6584cb3 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffers-mellanox2410-dynamic.json @@ -1302,7 +1302,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/frr.conf b/src/sonic-config-engine/tests/sample_output/py2/frr.conf index 032adb8c5106..679871f68a2a 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/frr.conf @@ -87,10 +87,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py2/l1_intfs.json b/src/sonic-config-engine/tests/sample_output/py2/l1_intfs.json index 634b936fede0..b789c792069b 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/l1_intfs.json +++ b/src/sonic-config-engine/tests/sample_output/py2/l1_intfs.json @@ -261,7 +261,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/l2switch.json b/src/sonic-config-engine/tests/sample_output/py2/l2switch.json index 5c38ba7201fd..de774b0ae58d 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/l2switch.json +++ b/src/sonic-config-engine/tests/sample_output/py2/l2switch.json @@ -268,7 +268,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/l2switch_dualtor.json b/src/sonic-config-engine/tests/sample_output/py2/l2switch_dualtor.json index 606a30672d9e..f09874d6e645 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/l2switch_dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py2/l2switch_dualtor.json @@ -647,7 +647,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/l3_intfs.json b/src/sonic-config-engine/tests/sample_output/py2/l3_intfs.json index 7357c28fbef1..81dd3afeab33 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/l3_intfs.json +++ b/src/sonic-config-engine/tests/sample_output/py2/l3_intfs.json @@ -301,7 +301,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf b/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf index 32a9abf88bac..0b0446aad9e2 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf @@ -35,7 +35,7 @@ router bgp 4000 vrf VnetFE address-family ipv4 unicast neighbor 192.168.0.1 activate neighbor 192.168.0.1 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family address-family l2vpn evpn advertise ipv4 unicast @@ -74,10 +74,10 @@ router bgp 4000 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf index e5ad8964454a..5db248ab8521 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf @@ -67,10 +67,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf index 45cd03a540a8..ab7f99d43cdf 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf @@ -76,10 +76,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_bmp.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_bmp.conf new file mode 100644 index 000000000000..827b287e57f1 --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_bmp.conf @@ -0,0 +1,89 @@ +! +! template: bgpd/bgpd.conf.j2 +! +! +! =========== Managed by sonic-cfggen DO NOT edit manually! ==================== +! generated by templates/quagga/bgpd.conf.j2 with config DB data +! file: bgpd.conf +! +! +! template: common/daemons.common.conf.j2 +! +hostname switch-t0 +password zebra +enable password zebra +! +log syslog informational +log facility local4 +! +! end of template: common/daemons.common.conf.j2! +agentx +! +! +! +! template: bgpd/bgpd.main.conf.j2 +! +! bgp multiple-instance +! +! BGP configuration +! +! TSA configuration +! +ip prefix-list PL_LoopbackV4 permit 10.1.0.32/32 +! +ipv6 prefix-list PL_LoopbackV6 permit fc00:1::/64 +! +ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 5 permit 192.168.0.0/27 +! +ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 +! +! +! +router bgp 65100 +! + bgp log-neighbor-changes + bgp suppress-fib-pending + no bgp default ipv4-unicast + no bgp ebgp-requires-policy +! + bgp bestpath as-path multipath-relax +! + bgp graceful-restart restart-time 240 + bgp graceful-restart + bgp graceful-restart preserve-fw-state + bgp graceful-restart select-defer-time 45 +! +! + bmp mirror buffer-limit 4294967214 +! + bmp targets sonic-bmp + bmp stats interval 1000 + bmp monitor ipv4 unicast pre-policy + bmp monitor ipv6 unicast pre-policy + bmp connect 127.0.0.1 port 5000 min-retry 1000 max-retry 2000 +! +! + bgp router-id 10.1.0.32 +! + network 10.1.0.32/32 +! + address-family ipv6 + network fc00:1::32/64 + exit-address-family +! + network 192.168.0.1/27 + network 192.168.200.1/27 +! +! +! + address-family ipv4 + maximum-paths 514 + exit-address-family + address-family ipv6 + maximum-paths 514 + exit-address-family +! +! end of template: bgpd/bgpd.main.conf.j2 +!! +! end of template: bgpd/bgpd.conf.j2 +! diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf index 0ada9a4f8d60..2d769fc05dd1 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf @@ -68,10 +68,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf index 8daeff2a61e9..b84ff10f590d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf @@ -82,10 +82,10 @@ router bgp 65100 exit-address-family ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_quagga.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_quagga.conf index 72988e555261..6c2734473939 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_quagga.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_quagga.conf @@ -35,7 +35,7 @@ router bgp 65100 neighbor 10.0.0.57 allowas-in 1 neighbor 10.0.0.57 activate neighbor 10.0.0.57 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::72 remote-as 64600 neighbor fc00::72 description ARISTA01T1 @@ -43,7 +43,7 @@ router bgp 65100 neighbor fc00::72 allowas-in 1 neighbor fc00::72 activate neighbor fc00::72 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.59 remote-as 64600 neighbor 10.0.0.59 description ARISTA02T1 @@ -51,7 +51,7 @@ router bgp 65100 neighbor 10.0.0.59 allowas-in 1 neighbor 10.0.0.59 activate neighbor 10.0.0.59 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::76 remote-as 64600 neighbor fc00::76 description ARISTA02T1 @@ -59,7 +59,7 @@ router bgp 65100 neighbor fc00::76 allowas-in 1 neighbor fc00::76 activate neighbor fc00::76 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.61 remote-as 64600 neighbor 10.0.0.61 description ARISTA03T1 @@ -67,7 +67,7 @@ router bgp 65100 neighbor 10.0.0.61 allowas-in 1 neighbor 10.0.0.61 activate neighbor 10.0.0.61 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::7a remote-as 64600 neighbor fc00::7a description ARISTA03T1 @@ -75,7 +75,7 @@ router bgp 65100 neighbor fc00::7a allowas-in 1 neighbor fc00::7a activate neighbor fc00::7a soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor 10.0.0.63 remote-as 64600 neighbor 10.0.0.63 description ARISTA04T1 @@ -83,7 +83,7 @@ router bgp 65100 neighbor 10.0.0.63 allowas-in 1 neighbor 10.0.0.63 activate neighbor 10.0.0.63 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family neighbor fc00::7e remote-as 64600 neighbor fc00::7e description ARISTA04T1 @@ -91,10 +91,10 @@ router bgp 65100 neighbor fc00::7e allowas-in 1 neighbor fc00::7e activate neighbor fc00::7e soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family ! -maximum-paths 64 +maximum-paths 514 ! route-map ISOLATE permit 10 set as-path prepend 65100 diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json index 661fd8cc28c5..8a1163f95f72 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json @@ -57,7 +57,7 @@ "size": "6441610000", "type": "both", "mode": "dynamic", - "xoff": "20761804" + "xoff": "1056256819" } }, "BUFFER_PROFILE": { diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json index 109389c95047..40e57b993e37 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox2410-dynamic.json @@ -1302,7 +1302,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic-remap-disabled.json index c70d257b3a8d..44dce5912819 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic-remap-disabled.json @@ -2002,7 +2002,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic.json index a784d0e0cff3..d653ef10eacf 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t0-dynamic.json @@ -2038,7 +2038,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json index 4adfa363eed7..5d34084e44d1 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic-remap-disabled.json @@ -1475,7 +1475,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json index d036b2d723bb..670cb7cd1568 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffers-mellanox4600c-t1-dynamic.json @@ -1654,7 +1654,7 @@ "LOSSLESS_TRAFFIC_PATTERN": { "AZURE": { "mtu": "1024", - "small_packet_percentage": "100" + "small_packet_percentage": "50" } } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/frr.conf b/src/sonic-config-engine/tests/sample_output/py3/frr.conf index d0821f1b11ca..17d7f561db03 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/frr.conf @@ -87,10 +87,10 @@ router bgp 65100 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/py3/l1_intfs.json b/src/sonic-config-engine/tests/sample_output/py3/l1_intfs.json index 634b936fede0..b789c792069b 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/l1_intfs.json +++ b/src/sonic-config-engine/tests/sample_output/py3/l1_intfs.json @@ -261,7 +261,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/l2switch.json b/src/sonic-config-engine/tests/sample_output/py3/l2switch.json index fa3363ab749c..0ed50c624b25 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/l2switch.json +++ b/src/sonic-config-engine/tests/sample_output/py3/l2switch.json @@ -268,7 +268,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/l2switch_dualtor.json b/src/sonic-config-engine/tests/sample_output/py3/l2switch_dualtor.json index 606a30672d9e..f09874d6e645 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/l2switch_dualtor.json +++ b/src/sonic-config-engine/tests/sample_output/py3/l2switch_dualtor.json @@ -647,7 +647,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/l3_intfs.json b/src/sonic-config-engine/tests/sample_output/py3/l3_intfs.json index 7357c28fbef1..81dd3afeab33 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/l3_intfs.json +++ b/src/sonic-config-engine/tests/sample_output/py3/l3_intfs.json @@ -301,7 +301,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } } diff --git a/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf b/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf index 32a9abf88bac..0b0446aad9e2 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf @@ -35,7 +35,7 @@ router bgp 4000 vrf VnetFE address-family ipv4 unicast neighbor 192.168.0.1 activate neighbor 192.168.0.1 soft-reconfiguration inbound - maximum-paths 64 + maximum-paths 514 exit-address-family address-family l2vpn evpn advertise ipv4 unicast @@ -74,10 +74,10 @@ router bgp 4000 ! ! address-family ipv4 - maximum-paths 64 + maximum-paths 514 exit-address-family address-family ipv6 - maximum-paths 64 + maximum-paths 514 exit-address-family ! ! end of template: bgpd/bgpd.main.conf.j2 diff --git a/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json b/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json index 9421f40c3493..400d36127a7a 100644 --- a/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json +++ b/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json @@ -20,7 +20,6 @@ "FLEX_COUNTER_TABLE": { "ACL": { "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", "POLL_INTERVAL": "10000" } }, diff --git a/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json b/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json index fc305243fb0e..c6232d7f8be0 100644 --- a/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json +++ b/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json @@ -374,7 +374,6 @@ }, "FLEX_COUNTER_TABLE": { "ACL": { - "FLEX_COUNTER_DELAY_STATUS": "true", "FLEX_COUNTER_STATUS": "disable", "POLL_INTERVAL": "10000" } diff --git a/src/sonic-config-engine/tests/test_frr.py b/src/sonic-config-engine/tests/test_frr.py index 92deef922752..5a7ca109b30f 100644 --- a/src/sonic-config-engine/tests/test_frr.py +++ b/src/sonic-config-engine/tests/test_frr.py @@ -78,3 +78,7 @@ def test_bgpd_frr_dualtor(self): def test_zebra_frr_dualtor(self): extra_data = {"DEVICE_METADATA": {"localhost": {"subtype": "DualToR"}}} self.assertTrue(*self.run_case('zebra/zebra.conf.j2', 'zebra_frr_dualtor.conf', extra_data=extra_data)) + + def test_bgpd_frr_bmp(self): + extra_data = {"FEATURE": {"bmp": {"state": "enabled"}}} + self.assertTrue(*self.run_case('bgpd/bgpd.conf.j2', 'bgpd_frr_bmp.conf', extra_data=extra_data)) \ No newline at end of file diff --git a/src/sonic-dbsyncd b/src/sonic-dbsyncd index d5fa7937a4e3..b0ea01fb70a6 160000 --- a/src/sonic-dbsyncd +++ b/src/sonic-dbsyncd @@ -1 +1 @@ -Subproject commit d5fa7937a4e38ce0356368977ab4ba89090b2209 +Subproject commit b0ea01fb70a668b6d828f98a320a271dc76dc300 diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index a4c904a3e125..ff0f433b0917 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -351,3 +351,5 @@ cache_coherency_check core_clock_to_pm_clock_factor flowtracker_ipfix_observation_domain_id flowtracker_num_unique_user_entry_keys +sai_mmu_tc_to_pg_config +sai_hostif_netif_iff_up_set diff --git a/src/sonic-frr-mgmt-framework/frrcfgd/frrcfgd.py b/src/sonic-frr-mgmt-framework/frrcfgd/frrcfgd.py index bca005817371..ef74754ceda6 100755 --- a/src/sonic-frr-mgmt-framework/frrcfgd/frrcfgd.py +++ b/src/sonic-frr-mgmt-framework/frrcfgd/frrcfgd.py @@ -2078,7 +2078,7 @@ class BGPConfigDaemon: ('icmo_ttl', 'ttl {}', handle_ip_sla_common), ('icmp_tos', 'tos {}', handle_ip_sla_common), ] - srv6_locator_key_map = [(['opcode_prefix', 'opcode_act', 'opcode_vrf'], '{no:no-prefix}opcode {} {} vrf {}', hdl_srv6_locator)] + srv6_locator_key_map = [(['opcode_prefix', 'opcode_act', 'opcode_data'], '{no:no-prefix}opcode {} {} {}', hdl_srv6_locator)] tbl_to_key_map = {'BGP_GLOBALS': global_key_map, diff --git a/src/sonic-frr/Makefile b/src/sonic-frr/Makefile index 307089d91eae..6462af5ac6e4 100644 --- a/src/sonic-frr/Makefile +++ b/src/sonic-frr/Makefile @@ -36,6 +36,7 @@ endif ifeq ($(CROSS_BUILD_ENVIRON), y) git reset --hard endif + git branch -f master origin/$(FRR_BRANCH) git checkout master git branch -D $(FRR_BRANCH) popd diff --git a/src/sonic-frr/dplane_fpm_sonic/dplane_fpm_sonic.c b/src/sonic-frr/dplane_fpm_sonic/dplane_fpm_sonic.c index f01c647d4a67..6627e9331e87 100644 --- a/src/sonic-frr/dplane_fpm_sonic/dplane_fpm_sonic.c +++ b/src/sonic-frr/dplane_fpm_sonic/dplane_fpm_sonic.c @@ -32,6 +32,7 @@ #include #include "lib/zebra.h" +#include #include "lib/json.h" #include "lib/libfrr.h" #include "lib/frratomic.h" @@ -45,8 +46,6 @@ #include "zebra/zebra_dplane.h" #include "zebra/zebra_mpls.h" #include "zebra/zebra_router.h" -#include "zebra/zebra_evpn.h" -#include "zebra/zebra_evpn_mac.h" #include "zebra/zebra_vxlan_private.h" #include "zebra/kernel_netlink.h" #include "zebra/rt_netlink.h" @@ -165,22 +164,22 @@ struct fpm_nl_ctx { /* data plane events. */ struct zebra_dplane_provider *prov; struct frr_pthread *fthread; - struct thread *t_connect; - struct thread *t_read; - struct thread *t_write; - struct thread *t_event; - struct thread *t_nhg; - struct thread *t_dequeue; + struct event *t_connect; + struct event *t_read; + struct event *t_write; + struct event *t_event; + struct event *t_nhg; + struct event *t_dequeue; /* zebra events. */ - struct thread *t_lspreset; - struct thread *t_lspwalk; - struct thread *t_nhgreset; - struct thread *t_nhgwalk; - struct thread *t_ribreset; - struct thread *t_ribwalk; - struct thread *t_rmacreset; - struct thread *t_rmacwalk; + struct event *t_lspreset; + struct event *t_lspwalk; + struct event *t_nhgreset; + struct event *t_nhgwalk; + struct event *t_ribreset; + struct event *t_ribwalk; + struct event *t_rmacreset; + struct event *t_rmacwalk; /* Statistic counters. */ struct { @@ -238,26 +237,26 @@ enum fpm_nl_events { }; #define FPM_RECONNECT(fnc) \ - thread_add_event((fnc)->fthread->master, fpm_process_event, (fnc), \ + event_add_event((fnc)->fthread->master, fpm_process_event, (fnc), \ FNE_INTERNAL_RECONNECT, &(fnc)->t_event) #define WALK_FINISH(fnc, ev) \ - thread_add_event((fnc)->fthread->master, fpm_process_event, (fnc), \ + event_add_event((fnc)->fthread->master, fpm_process_event, (fnc), \ (ev), NULL) /* * Prototypes. */ -static void fpm_process_event(struct thread *t); +static void fpm_process_event(struct event *t); static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx); -static void fpm_lsp_send(struct thread *t); -static void fpm_lsp_reset(struct thread *t); -static void fpm_nhg_send(struct thread *t); -static void fpm_nhg_reset(struct thread *t); -static void fpm_rib_send(struct thread *t); -static void fpm_rib_reset(struct thread *t); -static void fpm_rmac_send(struct thread *t); -static void fpm_rmac_reset(struct thread *t); +static void fpm_lsp_send(struct event *t); +static void fpm_lsp_reset(struct event *t); +static void fpm_nhg_send(struct event *t); +static void fpm_nhg_reset(struct event *t); +static void fpm_rib_send(struct event *t); +static void fpm_rib_reset(struct event *t); +static void fpm_rmac_send(struct event *t); +static void fpm_rmac_reset(struct event *t); /* * CLI. @@ -313,7 +312,7 @@ DEFUN(fpm_set_address, fpm_set_address_cmd, memcpy(&sin6->sin6_addr, naddr, sizeof(sin6->sin6_addr)); ask_reconnect: - thread_add_event(gfnc->fthread->master, fpm_process_event, gfnc, + event_add_event(gfnc->fthread->master, fpm_process_event, gfnc, FNE_RECONNECT, &gfnc->t_event); return CMD_SUCCESS; } @@ -328,7 +327,7 @@ DEFUN(no_fpm_set_address, no_fpm_set_address_cmd, "FPM remote listening server port\n" "Remote FPM server port\n") { - thread_add_event(gfnc->fthread->master, fpm_process_event, gfnc, + event_add_event(gfnc->fthread->master, fpm_process_event, gfnc, FNE_DISABLE, &gfnc->t_event); return CMD_SUCCESS; } @@ -342,7 +341,7 @@ DEFUN(fpm_use_nhg, fpm_use_nhg_cmd, if (gfnc->use_nhg) return CMD_SUCCESS; - thread_add_event(gfnc->fthread->master, fpm_process_event, gfnc, + event_add_event(gfnc->fthread->master, fpm_process_event, gfnc, FNE_TOGGLE_NHG, &gfnc->t_nhg); return CMD_SUCCESS; @@ -358,7 +357,7 @@ DEFUN(no_fpm_use_nhg, no_fpm_use_nhg_cmd, if (!gfnc->use_nhg) return CMD_SUCCESS; - thread_add_event(gfnc->fthread->master, fpm_process_event, gfnc, + event_add_event(gfnc->fthread->master, fpm_process_event, gfnc, FNE_TOGGLE_NHG, &gfnc->t_nhg); return CMD_SUCCESS; @@ -370,7 +369,7 @@ DEFUN(fpm_reset_counters, fpm_reset_counters_cmd, FPM_STR "FPM statistic counters\n") { - thread_add_event(gfnc->fthread->master, fpm_process_event, gfnc, + event_add_event(gfnc->fthread->master, fpm_process_event, gfnc, FNE_RESET_COUNTERS, &gfnc->t_event); return CMD_SUCCESS; } @@ -491,19 +490,19 @@ static struct cmd_node fpm_node = { /* * FPM functions. */ -static void fpm_connect(struct thread *t); +static void fpm_connect(struct event *t); static void fpm_reconnect(struct fpm_nl_ctx *fnc) { /* Cancel all zebra threads first. */ - thread_cancel_async(zrouter.master, &fnc->t_lspreset, NULL); - thread_cancel_async(zrouter.master, &fnc->t_lspwalk, NULL); - thread_cancel_async(zrouter.master, &fnc->t_nhgreset, NULL); - thread_cancel_async(zrouter.master, &fnc->t_nhgwalk, NULL); - thread_cancel_async(zrouter.master, &fnc->t_ribreset, NULL); - thread_cancel_async(zrouter.master, &fnc->t_ribwalk, NULL); - thread_cancel_async(zrouter.master, &fnc->t_rmacreset, NULL); - thread_cancel_async(zrouter.master, &fnc->t_rmacwalk, NULL); + event_cancel_async(zrouter.master, &fnc->t_lspreset, NULL); + event_cancel_async(zrouter.master, &fnc->t_lspwalk, NULL); + event_cancel_async(zrouter.master, &fnc->t_nhgreset, NULL); + event_cancel_async(zrouter.master, &fnc->t_nhgwalk, NULL); + event_cancel_async(zrouter.master, &fnc->t_ribreset, NULL); + event_cancel_async(zrouter.master, &fnc->t_ribwalk, NULL); + event_cancel_async(zrouter.master, &fnc->t_rmacreset, NULL); + event_cancel_async(zrouter.master, &fnc->t_rmacwalk, NULL); /* * Grab the lock to empty the streams (data plane might try to @@ -519,20 +518,20 @@ static void fpm_reconnect(struct fpm_nl_ctx *fnc) stream_reset(fnc->ibuf); stream_reset(fnc->obuf); - THREAD_OFF(fnc->t_read); - THREAD_OFF(fnc->t_write); + EVENT_OFF(fnc->t_read); + EVENT_OFF(fnc->t_write); /* FPM is disabled, don't attempt to connect. */ if (fnc->disabled) return; - thread_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, + event_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, &fnc->t_connect); } -static void fpm_read(struct thread *t) +static void fpm_read(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); fpm_msg_hdr_t fpm; ssize_t rv; char buf[65535]; @@ -564,7 +563,7 @@ static void fpm_read(struct thread *t) } /* Schedule the next read */ - thread_add_read(fnc->fthread->master, fpm_read, fnc, fnc->socket, + event_add_read(fnc->fthread->master, fpm_read, fnc, fnc->socket, &fnc->t_read); /* We've got an interruption. */ @@ -693,9 +692,9 @@ static void fpm_read(struct thread *t) stream_reset(fnc->ibuf); } -static void fpm_write(struct thread *t) +static void fpm_write(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); socklen_t statuslen; ssize_t bwritten; int rv, status; @@ -729,11 +728,11 @@ static void fpm_write(struct thread *t) * Starting with LSPs walk all FPM objects, marking them * as unsent and then replaying them. */ - thread_add_timer(zrouter.master, fpm_lsp_reset, fnc, 0, + event_add_timer(zrouter.master, fpm_lsp_reset, fnc, 0, &fnc->t_lspreset); /* Permit receiving messages now. */ - thread_add_read(fnc->fthread->master, fpm_read, fnc, + event_add_read(fnc->fthread->master, fpm_read, fnc, fnc->socket, &fnc->t_read); } @@ -791,15 +790,15 @@ static void fpm_write(struct thread *t) /* Stream is not empty yet, we must schedule more writes. */ if (STREAM_READABLE(fnc->obuf)) { stream_pulldown(fnc->obuf); - thread_add_write(fnc->fthread->master, fpm_write, fnc, + event_add_write(fnc->fthread->master, fpm_write, fnc, fnc->socket, &fnc->t_write); return; } } -static void fpm_connect(struct thread *t) +static void fpm_connect(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); struct sockaddr_in *sin = (struct sockaddr_in *)&fnc->addr; struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&fnc->addr; socklen_t slen; @@ -810,7 +809,7 @@ static void fpm_connect(struct thread *t) if (sock == -1) { zlog_err("%s: fpm socket failed: %s", __func__, strerror(errno)); - thread_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, + event_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, &fnc->t_connect); return; } @@ -836,7 +835,7 @@ static void fpm_connect(struct thread *t) close(sock); zlog_warn("%s: fpm connection failed: %s", __func__, strerror(errno)); - thread_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, + event_add_timer(fnc->fthread->master, fpm_connect, fnc, 3, &fnc->t_connect); return; } @@ -844,9 +843,9 @@ static void fpm_connect(struct thread *t) fnc->connecting = (errno == EINPROGRESS); fnc->socket = sock; if (!fnc->connecting) - thread_add_read(fnc->fthread->master, fpm_read, fnc, sock, + event_add_read(fnc->fthread->master, fpm_read, fnc, sock, &fnc->t_read); - thread_add_write(fnc->fthread->master, fpm_write, fnc, sock, + event_add_write(fnc->fthread->master, fpm_write, fnc, sock, &fnc->t_write); /* @@ -856,7 +855,7 @@ static void fpm_connect(struct thread *t) * If we are not connected, then delay the objects reset/send. */ if (!fnc->connecting) - thread_add_timer(zrouter.master, fpm_lsp_reset, fnc, 0, + event_add_timer(zrouter.master, fpm_lsp_reset, fnc, 0, &fnc->t_lspreset); } @@ -886,9 +885,9 @@ static struct zebra_vrf *vrf_lookup_by_table_id(uint32_t table_id) /** * Resets the SRv6 routes FPM flags so we send all SRv6 routes again. */ -static void fpm_srv6_route_reset(struct thread *t) +static void fpm_srv6_route_reset(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); rib_dest_t *dest; struct route_node *rn; struct route_entry *re; @@ -910,14 +909,14 @@ static void fpm_srv6_route_reset(struct thread *t) nexthop = re->nhe->nhg.nexthop; if (nexthop && nexthop->nh_srv6 && - !sid_zero(&nexthop->nh_srv6->seg6_segs)) + !sid_zero((const struct seg6_seg_stack *)nexthop->nh_srv6->seg6_segs)) /* Unset FPM installation flag so it gets installed again. */ UNSET_FLAG(dest->flags, RIB_DEST_UPDATE_FPM); } } /* Schedule next step: send RIB routes. */ - thread_add_event(zrouter.master, fpm_rib_send, fnc, 0, &fnc->t_ribwalk); + event_add_event(zrouter.master, fpm_rib_send, fnc, 0, &fnc->t_ribwalk); } /* @@ -975,7 +974,7 @@ static ssize_t netlink_srv6_localsid_msg_encode(int cmd, req->n.nlmsg_flags = NLM_F_CREATE | NLM_F_REQUEST; if ((cmd == RTM_NEWSRV6LOCALSID) && - (v6_rr_semantics)) + (zrouter.v6_rr_semantics)) req->n.nlmsg_flags |= NLM_F_REPLACE; req->n.nlmsg_type = cmd; @@ -1202,8 +1201,9 @@ static ssize_t netlink_srv6_vpn_route_msg_encode(int cmd, uint32_t table_id; struct interface *ifp; struct in6_addr encap_src_addr = {}; - struct listnode *node; struct connected *connected; + struct vrf *vrf; + struct prefix *cp; struct { struct nlmsghdr n; @@ -1212,7 +1212,7 @@ static ssize_t netlink_srv6_vpn_route_msg_encode(int cmd, } *req = (void *)data; nexthop = dplane_ctx_get_ng(ctx)->nexthop; - if (!nexthop || !nexthop->nh_srv6 || sid_zero(&nexthop->nh_srv6->seg6_segs)) + if (!nexthop || !nexthop->nh_srv6 || sid_zero((const struct seg6_seg_stack *)nexthop->nh_srv6->seg6_segs)) return -1; p = dplane_ctx_get_dest(ctx); @@ -1230,7 +1230,7 @@ static ssize_t netlink_srv6_vpn_route_msg_encode(int cmd, req->n.nlmsg_flags = NLM_F_CREATE | NLM_F_REQUEST; if ((cmd == RTM_NEWROUTE) && - ((p->family == AF_INET) || v6_rr_semantics)) + ((p->family == AF_INET) || zrouter.v6_rr_semantics)) req->n.nlmsg_flags |= NLM_F_REPLACE; req->n.nlmsg_type = cmd; @@ -1291,13 +1291,19 @@ static ssize_t netlink_srv6_vpn_route_msg_encode(int cmd, * if it is valid */ ifp = if_lookup_by_name("lo", VRF_DEFAULT); + vrf = vrf_lookup_by_name(VRF_DEFAULT_NAME); + if (!vrf) + return false; if (ifp) { - FOR_ALL_INTERFACES_ADDRESSES(ifp, connected, node) { - if (connected->address->family == AF_INET6 && - !IN6_IS_ADDR_LOOPBACK(&connected->address->u.prefix6) && - !IN6_IS_ADDR_LINKLOCAL(&connected->address->u.prefix6)) { - encap_src_addr = connected->address->u.prefix6; - break; + FOR_ALL_INTERFACES (vrf, ifp) { + frr_each (if_connected, ifp->connected, connected) { + cp = connected->address; + if (cp->family == AF_INET6 && + !IN6_IS_ADDR_LOOPBACK(&cp->u.prefix6) && + !IN6_IS_ADDR_LINKLOCAL(&cp->u.prefix6)) { + encap_src_addr = cp->u.prefix6; + break; + } } } } @@ -1348,7 +1354,7 @@ static ssize_t netlink_srv6_msg_encode(int cmd, if (!netlink_srv6_localsid_msg_encode( cmd, ctx, data, datalen, fpm, force_nhg)) return 0; - } else if (!sid_zero(&nexthop->nh_srv6->seg6_segs)) { + } else if (!sid_zero(nexthop->nh_srv6->seg6_segs)) { if (!netlink_srv6_vpn_route_msg_encode( cmd, ctx, data, datalen, fpm, force_nhg)) return 0; @@ -1417,7 +1423,7 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) } else { rv = netlink_route_multipath_msg_encode(RTM_DELROUTE, ctx, nl_buf, sizeof(nl_buf), - true, fnc->use_nhg); + true, fnc->use_nhg, false); if (rv <= 0) { zlog_err( "%s: netlink_route_multipath_msg_encode failed", @@ -1448,7 +1454,7 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) } else { rv = netlink_route_multipath_msg_encode( RTM_NEWROUTE, ctx, &nl_buf[nl_buf_len], - sizeof(nl_buf) - nl_buf_len, true, fnc->use_nhg); + sizeof(nl_buf) - nl_buf_len, true, fnc->use_nhg, false); if (rv <= 0) { zlog_err( "%s: netlink_route_multipath_msg_encode failed", @@ -1513,7 +1519,7 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) case DPLANE_OP_ADDR_INSTALL: case DPLANE_OP_ADDR_UNINSTALL: if (strmatch(dplane_ctx_get_ifname(ctx), "lo")) - thread_add_timer(fnc->fthread->master, fpm_srv6_route_reset, + event_add_timer(fnc->fthread->master, fpm_srv6_route_reset, fnc, 0, &fnc->t_ribreset); break; @@ -1610,7 +1616,7 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) memory_order_relaxed); /* Tell the thread to start writing. */ - thread_add_write(fnc->fthread->master, fpm_write, fnc, fnc->socket, + event_add_write(fnc->fthread->master, fpm_write, fnc, fnc->socket, &fnc->t_write); return 0; @@ -1647,9 +1653,9 @@ static int fpm_lsp_send_cb(struct hash_bucket *bucket, void *arg) return HASHWALK_CONTINUE; } -static void fpm_lsp_send(struct thread *t) +static void fpm_lsp_send(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); struct zebra_vrf *zvrf = vrf_info_lookup(VRF_DEFAULT); struct fpm_lsp_arg fla; @@ -1665,11 +1671,11 @@ static void fpm_lsp_send(struct thread *t) WALK_FINISH(fnc, FNE_LSP_FINISHED); /* Now move onto routes */ - thread_add_timer(zrouter.master, fpm_nhg_reset, fnc, 0, + event_add_timer(zrouter.master, fpm_nhg_reset, fnc, 0, &fnc->t_nhgreset); } else { /* Didn't finish - reschedule LSP walk */ - thread_add_timer(zrouter.master, fpm_lsp_send, fnc, 0, + event_add_timer(zrouter.master, fpm_lsp_send, fnc, 0, &fnc->t_lspwalk); } } @@ -1707,9 +1713,9 @@ static int fpm_nhg_send_cb(struct hash_bucket *bucket, void *arg) return HASHWALK_CONTINUE; } -static void fpm_nhg_send(struct thread *t) +static void fpm_nhg_send(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); struct fpm_nhg_arg fna; fna.fnc = fnc; @@ -1726,19 +1732,19 @@ static void fpm_nhg_send(struct thread *t) /* We are done sending next hops, lets install the routes now. */ if (fna.complete) { WALK_FINISH(fnc, FNE_NHG_FINISHED); - thread_add_timer(zrouter.master, fpm_rib_reset, fnc, 0, + event_add_timer(zrouter.master, fpm_rib_reset, fnc, 0, &fnc->t_ribreset); } else /* Otherwise reschedule next hop group again. */ - thread_add_timer(zrouter.master, fpm_nhg_send, fnc, 0, + event_add_timer(zrouter.master, fpm_nhg_send, fnc, 0, &fnc->t_nhgwalk); } /** * Send all RIB installed routes to the connected data plane. */ -static void fpm_rib_send(struct thread *t) +static void fpm_rib_send(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); rib_dest_t *dest; struct route_node *rn; struct route_table *rt; @@ -1768,7 +1774,7 @@ static void fpm_rib_send(struct thread *t) /* Free the temporary allocated context. */ dplane_ctx_fini(&ctx); - thread_add_timer(zrouter.master, fpm_rib_send, + event_add_timer(zrouter.master, fpm_rib_send, fnc, 1, &fnc->t_ribwalk); return; } @@ -1785,7 +1791,7 @@ static void fpm_rib_send(struct thread *t) WALK_FINISH(fnc, FNE_RIB_FINISHED); /* Schedule next event: RMAC reset. */ - thread_add_event(zrouter.master, fpm_rmac_reset, fnc, 0, + event_add_event(zrouter.master, fpm_rmac_reset, fnc, 0, &fnc->t_rmacreset); } @@ -1805,6 +1811,7 @@ static void fpm_enqueue_rmac_table(struct hash_bucket *bucket, void *arg) struct zebra_mac *zrmac = bucket->data; struct zebra_if *zif = fra->zl3vni->vxlan_if->info; const struct zebra_l2info_vxlan *vxl = &zif->l2info.vxl; + struct zebra_vxlan_vni *vni; struct zebra_if *br_zif; vlanid_t vid; bool sticky; @@ -1816,16 +1823,17 @@ static void fpm_enqueue_rmac_table(struct hash_bucket *bucket, void *arg) sticky = !!CHECK_FLAG(zrmac->flags, (ZEBRA_MAC_STICKY | ZEBRA_MAC_REMOTE_DEF_GW)); br_zif = (struct zebra_if *)(zif->brslave_info.br_if->info); - vid = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(br_zif) ? vxl->access_vlan : 0; + vni = zebra_vxlan_if_vni_find(zif, fra->zl3vni->vni); + vid = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(br_zif) ? vxl->vni_info.vni.access_vlan : 0; dplane_ctx_reset(fra->ctx); dplane_ctx_set_op(fra->ctx, DPLANE_OP_MAC_INSTALL); dplane_mac_init(fra->ctx, fra->zl3vni->vxlan_if, zif->brslave_info.br_if, vid, - &zrmac->macaddr, zrmac->fwd_info.r_vtep_ip, sticky, + &zrmac->macaddr, vni->vni, zrmac->fwd_info.r_vtep_ip, sticky, 0 /*nhg*/, 0 /*update_flags*/); if (fpm_nl_enqueue(fra->fnc, fra->ctx) == -1) { - thread_add_timer(zrouter.master, fpm_rmac_send, + event_add_timer(zrouter.master, fpm_rmac_send, fra->fnc, 1, &fra->fnc->t_rmacwalk); fra->complete = false; } @@ -1840,11 +1848,11 @@ static void fpm_enqueue_l3vni_table(struct hash_bucket *bucket, void *arg) hash_iterate(zl3vni->rmac_table, fpm_enqueue_rmac_table, zl3vni); } -static void fpm_rmac_send(struct thread *t) +static void fpm_rmac_send(struct event *t) { struct fpm_rmac_arg fra; - fra.fnc = THREAD_ARG(t); + fra.fnc = EVENT_ARG(t); fra.ctx = dplane_ctx_alloc(); fra.complete = true; hash_iterate(zrouter.l3vni_table, fpm_enqueue_l3vni_table, &fra); @@ -1866,14 +1874,14 @@ static void fpm_nhg_reset_cb(struct hash_bucket *bucket, void *arg) UNSET_FLAG(nhe->flags, NEXTHOP_GROUP_FPM); } -static void fpm_nhg_reset(struct thread *t) +static void fpm_nhg_reset(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); hash_iterate(zrouter.nhgs_id, fpm_nhg_reset_cb, NULL); /* Schedule next step: send next hop groups. */ - thread_add_event(zrouter.master, fpm_nhg_send, fnc, 0, &fnc->t_nhgwalk); + event_add_event(zrouter.master, fpm_nhg_send, fnc, 0, &fnc->t_nhgwalk); } /* @@ -1886,23 +1894,23 @@ static void fpm_lsp_reset_cb(struct hash_bucket *bucket, void *arg) UNSET_FLAG(lsp->flags, LSP_FLAG_FPM); } -static void fpm_lsp_reset(struct thread *t) +static void fpm_lsp_reset(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); struct zebra_vrf *zvrf = vrf_info_lookup(VRF_DEFAULT); hash_iterate(zvrf->lsp_table, fpm_lsp_reset_cb, NULL); /* Schedule next step: send LSPs */ - thread_add_event(zrouter.master, fpm_lsp_send, fnc, 0, &fnc->t_lspwalk); + event_add_event(zrouter.master, fpm_lsp_send, fnc, 0, &fnc->t_lspwalk); } /** * Resets the RIB FPM flags so we send all routes again. */ -static void fpm_rib_reset(struct thread *t) +static void fpm_rib_reset(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); rib_dest_t *dest; struct route_node *rn; struct route_table *rt; @@ -1921,7 +1929,7 @@ static void fpm_rib_reset(struct thread *t) } /* Schedule next step: send RIB routes. */ - thread_add_event(zrouter.master, fpm_rib_send, fnc, 0, &fnc->t_ribwalk); + event_add_event(zrouter.master, fpm_rib_send, fnc, 0, &fnc->t_ribwalk); } /* @@ -1941,20 +1949,20 @@ static void fpm_unset_l3vni_table(struct hash_bucket *bucket, void *arg) hash_iterate(zl3vni->rmac_table, fpm_unset_rmac_table, zl3vni); } -static void fpm_rmac_reset(struct thread *t) +static void fpm_rmac_reset(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); hash_iterate(zrouter.l3vni_table, fpm_unset_l3vni_table, NULL); /* Schedule next event: send RMAC entries. */ - thread_add_event(zrouter.master, fpm_rmac_send, fnc, 0, + event_add_event(zrouter.master, fpm_rmac_send, fnc, 0, &fnc->t_rmacwalk); } -static void fpm_process_queue(struct thread *t) +static void fpm_process_queue(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); struct zebra_dplane_ctx *ctx; bool no_bufs = false; uint64_t processed_contexts = 0; @@ -1997,7 +2005,7 @@ static void fpm_process_queue(struct thread *t) /* Re-schedule if we ran out of buffer space */ if (no_bufs) - thread_add_timer(fnc->fthread->master, fpm_process_queue, + event_add_timer(fnc->fthread->master, fpm_process_queue, fnc, 0, &fnc->t_dequeue); /* @@ -2013,10 +2021,10 @@ static void fpm_process_queue(struct thread *t) /** * Handles external (e.g. CLI, data plane or others) events. */ -static void fpm_process_event(struct thread *t) +static void fpm_process_event(struct event *t) { - struct fpm_nl_ctx *fnc = THREAD_ARG(t); - enum fpm_nl_events event = THREAD_VAL(t); + struct fpm_nl_ctx *fnc = EVENT_ARG(t); + enum fpm_nl_events event = EVENT_VAL(t); switch (event) { case FNE_DISABLE: @@ -2100,19 +2108,19 @@ static int fpm_nl_start(struct zebra_dplane_provider *prov) static int fpm_nl_finish_early(struct fpm_nl_ctx *fnc) { /* Disable all events and close socket. */ - THREAD_OFF(fnc->t_lspreset); - THREAD_OFF(fnc->t_lspwalk); - THREAD_OFF(fnc->t_nhgreset); - THREAD_OFF(fnc->t_nhgwalk); - THREAD_OFF(fnc->t_ribreset); - THREAD_OFF(fnc->t_ribwalk); - THREAD_OFF(fnc->t_rmacreset); - THREAD_OFF(fnc->t_rmacwalk); - THREAD_OFF(fnc->t_event); - THREAD_OFF(fnc->t_nhg); - thread_cancel_async(fnc->fthread->master, &fnc->t_read, NULL); - thread_cancel_async(fnc->fthread->master, &fnc->t_write, NULL); - thread_cancel_async(fnc->fthread->master, &fnc->t_connect, NULL); + EVENT_OFF(fnc->t_lspreset); + EVENT_OFF(fnc->t_lspwalk); + EVENT_OFF(fnc->t_nhgreset); + EVENT_OFF(fnc->t_nhgwalk); + EVENT_OFF(fnc->t_ribreset); + EVENT_OFF(fnc->t_ribwalk); + EVENT_OFF(fnc->t_rmacreset); + EVENT_OFF(fnc->t_rmacwalk); + EVENT_OFF(fnc->t_event); + EVENT_OFF(fnc->t_nhg); + event_cancel_async(fnc->fthread->master, &fnc->t_read, NULL); + event_cancel_async(fnc->fthread->master, &fnc->t_write, NULL); + event_cancel_async(fnc->fthread->master, &fnc->t_connect, NULL); if (fnc->socket != -1) { close(fnc->socket); @@ -2201,7 +2209,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) if (atomic_load_explicit(&fnc->counters.ctxqueue_len, memory_order_relaxed) > 0) - thread_add_timer(fnc->fthread->master, fpm_process_queue, + event_add_timer(fnc->fthread->master, fpm_process_queue, fnc, 0, &fnc->t_dequeue); /* Ensure dataplane thread is rescheduled if we hit the work limit */ @@ -2211,7 +2219,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) return 0; } -static int fpm_nl_new(struct thread_master *tm) +static int fpm_nl_new(struct event_loop *tm) { struct zebra_dplane_provider *prov = NULL; int rv; diff --git a/src/sonic-frr/frr b/src/sonic-frr/frr index de0e358b877a..3fbd709d888a 160000 --- a/src/sonic-frr/frr +++ b/src/sonic-frr/frr @@ -1 +1 @@ -Subproject commit de0e358b877ac9b595e7fb387a302c960a4c02d1 +Subproject commit 3fbd709d888ab94db178e44a5b9d67c3653e0b17 diff --git a/src/sonic-frr/patch/0008-Use-vrf_id-for-vrf-not-tabled_id.patch b/src/sonic-frr/patch/0008-Use-vrf_id-for-vrf-not-tabled_id.patch index ae8b05f06bd0..bf5dce51c9a3 100644 --- a/src/sonic-frr/patch/0008-Use-vrf_id-for-vrf-not-tabled_id.patch +++ b/src/sonic-frr/patch/0008-Use-vrf_id-for-vrf-not-tabled_id.patch @@ -5,15 +5,14 @@ Subject: [PATCH] From 349e3f758860be0077b69919c39764d3486ec44a Mon Sep 17 00:00:00 2001 Subject: [PATCH] use vrf id instead of table id Signed-off-by: Stepan Blyschak - diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c -index 325199eff..587045eac 100644 +index b8d097e58..b81a9db6d 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c -@@ -406,6 +406,30 @@ vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) - return VRF_DEFAULT; +@@ -385,6 +385,31 @@ static inline int proto2zebra(int proto, int family, bool is_nexthop) + return proto; } - + +static uint32_t table_lookup_by_vrf(vrf_id_t vrf_id, ns_id_t ns_id) +{ + struct vrf *vrf; @@ -37,14 +36,15 @@ index 325199eff..587045eac 100644 + + return RT_TABLE_UNSPEC; +} ++ + /** * @parse_encap_mpls() - Parses encapsulated mpls attributes * @tb: Pointer to rtattr to look for nested items in. -@@ -782,14 +806,26 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, +@@ -817,14 +842,26 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, if (rtm->rtm_family == AF_MPLS) return 0; - + - /* Table corresponding to route. */ - if (tb[RTA_TABLE]) - table = *(int *)RTA_DATA(tb[RTA_TABLE]); @@ -58,7 +58,7 @@ index 325199eff..587045eac 100644 + table = rtm->rtm_table; + + /* Map to VRF */ -+ vrf_id = vrf_lookup_by_table(table, ns_id); ++ vrf_id = zebra_vrf_lookup_by_table(table, ns_id); + } else { + /* With FPM, rtm_table contains vrf id, see netlink_route_multipath_msg_encode */ + if (tb[RTA_TABLE]) @@ -69,14 +69,14 @@ index 325199eff..587045eac 100644 + /* Map to table */ + table = table_lookup_by_vrf(vrf_id, ns_id); + } - + - /* Map to VRF */ -- vrf_id = vrf_lookup_by_table(table, ns_id); +- vrf_id = zebra_vrf_lookup_by_table(table, ns_id); if (vrf_id == VRF_DEFAULT) { if (!is_zebra_valid_kernel_table(table) && !is_zebra_main_routing_table(table)) -@@ -2102,12 +2138,24 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, - +@@ -2283,13 +2320,25 @@ ssize_t netlink_route_multipath_msg_encode(int cmd, struct zebra_dplane_ctx *ctx + /* Table corresponding to this route. */ table_id = dplane_ctx_get_table(ctx); - if (table_id < 256) @@ -85,6 +85,7 @@ index 325199eff..587045eac 100644 - req->r.rtm_table = RT_TABLE_UNSPEC; - if (!nl_attr_put32(&req->n, datalen, RTA_TABLE, table_id)) - return 0; +- } + if (!fpm) { + if (table_id < 256) + req->r.rtm_table = table_id; @@ -103,9 +104,7 @@ index 325199eff..587045eac 100644 + if (!nl_attr_put32(&req->n, datalen, RTA_TABLE, vrf)) + return 0; + } - } - - if (IS_ZEBRA_DEBUG_KERNEL) --- -2.17.1 ++ } + if (IS_ZEBRA_DEBUG_KERNEL) + zlog_debug( diff --git a/src/sonic-frr/patch/0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch b/src/sonic-frr/patch/0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch deleted file mode 100644 index a276f9ba5b49..000000000000 --- a/src/sonic-frr/patch/0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch +++ /dev/null @@ -1,132 +0,0 @@ -From c4a198c977168a6bd420197d19c8a4c0f4eacc8a Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Wed, 22 Mar 2023 11:35:28 -0400 -Subject: [PATCH] From 5a1d3c9e24791ebdb7e375a02afe9c5f6146c488 Mon Sep 17 - 00:00:00 2001 Subject: [PATCH] bgpd: Ensure suppress-fib-pending works with - network statements - -The flag for telling BGP that a route is expected to be installed -first before notifying a peer was always being set upon receipt -of a path that could be accepted as bestpath. This is not correct: -imagine that you have a peer sending you a route and you have a -network statement that covers the same route. Irrelevant if the -network statement would win the flag on the dest was being set -in bgp_update. Thus you could get into a situation where -the network statement path wins but since the flag is set on -the node, it will never be announced to a peer. - -Let's just move the setting of the flag into bgp_zebra_announce -and _withdraw. In _announce set the flag to TRUE when suppress-fib -is enabled. In _withdraw just always unset the flag as that a withdrawal -does not need to wait for rib removal before announcing. This will -cover the case when a network statement is added after the route has -been learned from a peer. - -Signed-off-by: Donald Sharp - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index f00c54c40..a7a5c9849 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -3203,11 +3203,6 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - if (bgp_fibupd_safi(safi) - && !bgp_option_check(BGP_OPT_NO_FIB)) { - -- if (BGP_SUPPRESS_FIB_ENABLED(bgp) -- && new_select->sub_type == BGP_ROUTE_NORMAL) -- SET_FLAG(dest->flags, -- BGP_NODE_FIB_INSTALL_PENDING); -- - if (new_select->type == ZEBRA_ROUTE_BGP - && (new_select->sub_type == BGP_ROUTE_NORMAL - || new_select->sub_type -@@ -3313,10 +3308,6 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - || new_select->sub_type == BGP_ROUTE_AGGREGATE - || new_select->sub_type == BGP_ROUTE_IMPORTED)) { - -- if (BGP_SUPPRESS_FIB_ENABLED(bgp)) -- SET_FLAG(dest->flags, -- BGP_NODE_FIB_INSTALL_PENDING); -- - /* if this is an evpn imported type-5 prefix, - * we need to withdraw the route first to clear - * the nh neigh and the RMAC entry. -@@ -4261,18 +4252,6 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, - bgp_attr_flush(&new_attr); - goto filtered; - } -- /* The flag BGP_NODE_FIB_INSTALL_PENDING is for the following -- * condition : -- * Suppress fib is enabled -- * BGP_OPT_NO_FIB is not enabled -- * Route type is BGP_ROUTE_NORMAL (peer learnt routes) -- * Route is being installed first time (BGP_NODE_FIB_INSTALLED not set) -- */ -- if (bgp_fibupd_safi(safi) && BGP_SUPPRESS_FIB_ENABLED(bgp) -- && (sub_type == BGP_ROUTE_NORMAL) -- && (!bgp_option_check(BGP_OPT_NO_FIB)) -- && (!CHECK_FLAG(dest->flags, BGP_NODE_FIB_INSTALLED))) -- SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); - - /* If neighbor soo is configured, tag all incoming routes with - * this SoO tag and then filter out advertisements in -diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index 95e80ba1b..efcf49785 100644 ---- a/bgpd/bgp_zebra.c -+++ b/bgpd/bgp_zebra.c -@@ -1322,6 +1322,14 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, - uint32_t bos = 0; - uint32_t exp = 0; - -+ /* -+ * BGP is installing this route and bgp has been configured -+ * to suppress announcements until the route has been installed -+ * let's set the fact that we expect this route to be installed -+ */ -+ if (BGP_SUPPRESS_FIB_ENABLED(bgp)) -+ SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); -+ - /* Don't try to install if we're not connected to Zebra or Zebra doesn't - * know of this instance. - */ -@@ -1758,6 +1766,12 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, - struct zapi_route api; - struct peer *peer; - -+ /* -+ * If we are withdrawing the route, we don't need to have this -+ * flag set. So unset it. -+ */ -+ UNSET_FLAG(info->net->flags, BGP_NODE_FIB_INSTALL_PENDING); -+ - /* Don't try to install if we're not connected to Zebra or Zebra doesn't - * know of this instance. - */ -diff --git a/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py b/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py -index 6d2b65a61..7bcb28166 100644 ---- a/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py -+++ b/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py -@@ -230,6 +230,20 @@ def test_bgp_allow_as_in(): - assertmsg = '"r2" 192.168.1.1/32 route should be gone' - assert result is None, assertmsg - -+def test_local_vs_non_local(): -+ tgen = get_topogen() -+ -+ if tgen.routers_have_failure(): -+ pytest.skip(tgen.errors) -+ -+ r2 = tgen.gears["r2"] -+ -+ output = json.loads(r2.vtysh_cmd("show bgp ipv4 uni 60.0.0.0/24 json")) -+ paths = output["paths"] -+ for i in range(len(paths)): -+ if "fibPending" in paths[i]: -+ assert(False), "Route 60.0.0.0/24 should not have fibPending" -+ - - if __name__ == "__main__": - args = ["-s"] + sys.argv[1:] --- -2.17.1 - diff --git a/src/sonic-frr/patch/0010-bgpd-Change-log-level-for-graceful-restart-events.patch b/src/sonic-frr/patch/0010-bgpd-Change-log-level-for-graceful-restart-events.patch index 54fcc1575a75..be4bbb6a8602 100644 --- a/src/sonic-frr/patch/0010-bgpd-Change-log-level-for-graceful-restart-events.patch +++ b/src/sonic-frr/patch/0010-bgpd-Change-log-level-for-graceful-restart-events.patch @@ -3,49 +3,43 @@ From: stormliang Date: Mon, 19 Jun 2023 13:57:01 +0000 Subject: [PATCH] From c423bce4db804c1d07d65ce3d06a9e62c4eceb2b Mon Sep 17 00:00:00 2001 Subject: [PATCH] change log level for graceful restart events - - diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c -index 9624adfbe..74b4dfc4a 100644 +index 504343994..f58ab7c02 100644 --- a/bgpd/bgp_fsm.c +++ b/bgpd/bgp_fsm.c -@@ -778,10 +778,10 @@ static void bgp_graceful_restart_timer_expire(struct thread *thread) - - peer = THREAD_ARG(thread); - +@@ -739,9 +739,9 @@ static void bgp_graceful_restart_timer_expire(struct event *thread) + afi_t afi; + safi_t safi; + - if (bgp_debug_neighbor_events(peer)) { - zlog_debug("%pBP graceful restart timer expired", peer); - zlog_debug("%pBP graceful restart stalepath timer stopped", -- peer); + if (peer) { + zlog_info("%pBP graceful restart timer expired", peer); + zlog_info("%pBP graceful restart stalepath timer stopped", -+ peer); + peer); } - - FOREACH_AFI_SAFI (afi, safi) { -@@ -842,8 +842,8 @@ static void bgp_graceful_stale_timer_expire(struct thread *thread) - - peer = THREAD_ARG(thread); - + +@@ -801,8 +801,8 @@ static void bgp_graceful_stale_timer_expire(struct event *thread) + afi_t afi; + safi_t safi; + - if (bgp_debug_neighbor_events(peer)) - zlog_debug("%pBP graceful restart stalepath timer expired", + if (peer) + zlog_info("%pBP graceful restart stalepath timer expired", peer); - + /* NSF delete stale route */ -@@ -1412,20 +1412,17 @@ enum bgp_fsm_state_progress bgp_stop(struct peer *peer) +@@ -1380,20 +1380,17 @@ enum bgp_fsm_state_progress bgp_stop(struct peer_connection *connection) /* graceful restart */ - if (peer->t_gr_stale) { - THREAD_OFF(peer->t_gr_stale); + if (connection->t_gr_stale) { + EVENT_OFF(connection->t_gr_stale); - if (bgp_debug_neighbor_events(peer)) - zlog_debug( -- "%pBP graceful restart stalepath timer stopped", -- peer); -+ zlog_info( -+ "%pBP graceful restart stalepath timer stopped", -+ peer); ++ zlog_info( + "%pBP graceful restart stalepath timer stopped", + peer); } if (CHECK_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT)) { - if (bgp_debug_neighbor_events(peer)) { @@ -62,55 +56,46 @@ index 9624adfbe..74b4dfc4a 100644 + zlog_info( + "%pBP graceful restart stalepath timer started for %d sec", + peer, peer->bgp->stalepath_time); - BGP_TIMER_ON(peer->t_gr_restart, + BGP_TIMER_ON(connection->t_gr_restart, bgp_graceful_restart_timer_expire, peer->v_gr_restart); -@@ -2225,17 +2222,15 @@ static enum bgp_fsm_state_progress bgp_establish(struct peer *peer) +@@ -2216,8 +2213,7 @@ bgp_establish(struct peer_connection *connection) UNSET_FLAG(peer->sflags, PEER_STATUS_NSF_MODE); - if (peer->t_gr_stale) { - THREAD_OFF(peer->t_gr_stale); + if (connection->t_gr_stale) { + EVENT_OFF(connection->t_gr_stale); - if (bgp_debug_neighbor_events(peer)) - zlog_debug( -- "%pBP graceful restart stalepath timer stopped", -- peer); + zlog_info( -+ "%pBP graceful restart stalepath timer stopped", -+ peer); + "%pBP graceful restart stalepath timer stopped", + peer); } - } - - if (peer->t_gr_restart) { - THREAD_OFF(peer->t_gr_restart); +@@ -2225,8 +2221,7 @@ bgp_establish(struct peer_connection *connection) + + if (connection->t_gr_restart) { + EVENT_OFF(connection->t_gr_restart); - if (bgp_debug_neighbor_events(peer)) - zlog_debug("%pBP graceful restart timer stopped", peer); + zlog_info("%pBP graceful restart timer stopped", peer); } - + /* Reset uptime, turn on keepalives, send current table. */ diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 8b3a1e3dd..2f3b837a5 100644 +index d6d874be2..337879a2d 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c -@@ -2453,15 +2453,13 @@ void peer_nsf_stop(struct peer *peer) - - if (peer->t_gr_restart) { - THREAD_OFF(peer->t_gr_restart); +@@ -2629,13 +2629,11 @@ void peer_nsf_stop(struct peer *peer) + + if (peer->connection->t_gr_restart) { + EVENT_OFF(peer->connection->t_gr_restart); - if (bgp_debug_neighbor_events(peer)) - zlog_debug("%pBP graceful restart timer stopped", peer); + zlog_info("%pBP graceful restart timer stopped", peer); } - if (peer->t_gr_stale) { - THREAD_OFF(peer->t_gr_stale); + if (peer->connection->t_gr_stale) { + EVENT_OFF(peer->connection->t_gr_stale); - if (bgp_debug_neighbor_events(peer)) - zlog_debug( -- "%pBP graceful restart stalepath timer stopped", -- peer); + zlog_info( -+ "%pBP graceful restart stalepath timer stopped", -+ peer); + "%pBP graceful restart stalepath timer stopped", + peer); } - bgp_clear_route_all(peer); - } --- -2.17.1 - diff --git a/src/sonic-frr/patch/0011-zebra-Static-routes-async-notification-do-not-need-t.patch b/src/sonic-frr/patch/0011-zebra-Static-routes-async-notification-do-not-need-t.patch deleted file mode 100644 index 6b633badf97b..000000000000 --- a/src/sonic-frr/patch/0011-zebra-Static-routes-async-notification-do-not-need-t.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 56d349ef47ba24bcf838488b1e40474755655259 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 29 Jun 2023 09:35:00 -0400 -Subject: [PATCH] zebra: Static routes async notification do not need this test - -When using asic_offload with an asynchronous notification the -rib_route_match_ctx function is testing for distance and tag -being correct against the re. - -Normal route notification for static routes is this(well really all routes): -a) zebra dplane generates a ctx to send to the dplane for route install -b) dplane installs it in the kernel -c) if the dplane_fpm_nl.c module is being used it installs it. -d) The context's success code is set to it worked and passes the context -back up to zebra for processing. -e) Zebra master receives this and checks the distance and tag are correct -for static routes and accepts the route and marks it installed. - -If the operator is using a wait for install mechansim where the dplane -is asynchronously sending the result back up at a future time *and* -it is using the dplane_fpm_nl.c code where it uses the rt_netlink.c -route parsing code, then there is no way to set distance as that we -do not pass distance to the kernel. - -As such static routes were never being properly handled since the re and -context would not match and the route would still be marked as queued. - -Modify the code such that the asynchronous path notification for static -routes ignores the distance and tag's as that there is no way to test -for this data from that path at this point in time. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index fd6df441c6..039c44cc09 100644 ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -1465,7 +1465,7 @@ static void zebra_rib_evaluate_mpls(struct route_node *rn) - */ - static bool rib_route_match_ctx(const struct route_entry *re, - const struct zebra_dplane_ctx *ctx, -- bool is_update) -+ bool is_update, bool async) - { - bool result = false; - -@@ -1481,13 +1481,12 @@ static bool rib_route_match_ctx(const struct route_entry *re, - /* We use an extra test for statics, and another for - * kernel routes. - */ -- if (re->type == ZEBRA_ROUTE_STATIC && -+ if (re->type == ZEBRA_ROUTE_STATIC && !async && - (re->distance != dplane_ctx_get_old_distance(ctx) || - re->tag != dplane_ctx_get_old_tag(ctx))) { - result = false; - } else if (re->type == ZEBRA_ROUTE_KERNEL && -- re->metric != -- dplane_ctx_get_old_metric(ctx)) { -+ re->metric != dplane_ctx_get_old_metric(ctx)) { - result = false; - } - } -@@ -1509,7 +1508,7 @@ static bool rib_route_match_ctx(const struct route_entry *re, - /* We use an extra test for statics, and another for - * kernel routes. - */ -- if (re->type == ZEBRA_ROUTE_STATIC && -+ if (re->type == ZEBRA_ROUTE_STATIC && !async && - (re->distance != dplane_ctx_get_distance(ctx) || - re->tag != dplane_ctx_get_tag(ctx))) { - result = false; -@@ -1973,13 +1972,13 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx) - RNODE_FOREACH_RE(rn, rib) { - - if (re == NULL) { -- if (rib_route_match_ctx(rib, ctx, false)) -+ if (rib_route_match_ctx(rib, ctx, false, false)) - re = rib; - } - - /* Check for old route match */ - if (is_update && (old_re == NULL)) { -- if (rib_route_match_ctx(rib, ctx, true /*is_update*/)) -+ if (rib_route_match_ctx(rib, ctx, true, false)) - old_re = rib; - } - -@@ -2247,7 +2246,7 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx) - * info. - */ - RNODE_FOREACH_RE(rn, re) { -- if (rib_route_match_ctx(re, ctx, false /*!update*/)) -+ if (rib_route_match_ctx(re, ctx, false, true)) - break; - } - --- -2.17.1 - diff --git a/src/sonic-frr/patch/0012-zebra-Rename-vrf_lookup_by_tableid-to-zebra_vrf_look.patch b/src/sonic-frr/patch/0012-zebra-Rename-vrf_lookup_by_tableid-to-zebra_vrf_look.patch deleted file mode 100644 index ca6517fbf655..000000000000 --- a/src/sonic-frr/patch/0012-zebra-Rename-vrf_lookup_by_tableid-to-zebra_vrf_look.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 2b9c7592a9857ddccc77b9d3f178e0c5bd5f19ed Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Wed, 26 Apr 2023 23:25:27 -0400 -Subject: [PATCH] zebra: Rename vrf_lookup_by_tableid to zebra_vrf_lookup.. - -Rename the vrf_lookup_by_id function to zebra_vrf_lookup_by_id -and move to zebra_vrf.c where it nominally belongs, as that -we need zebra specific data to find this vrf_id and as such -it does not belong in vrf.c - -Signed-off-by: Donald Sharp - -diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c -index 81347b550a..4599121261 100644 ---- a/zebra/if_netlink.c -+++ b/zebra/if_netlink.c -@@ -342,7 +342,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, - if (!vrf_lookup_by_id((vrf_id_t)ifi->ifi_index)) { - vrf_id_t exist_id; - -- exist_id = vrf_lookup_by_table(nl_table_id, ns_id); -+ exist_id = -+ zebra_vrf_lookup_by_table(nl_table_id, ns_id); - if (exist_id != VRF_DEFAULT) { - vrf = vrf_lookup_by_id(exist_id); - -diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c -index 587045eac2..6b9b047858 100644 ---- a/zebra/rt_netlink.c -+++ b/zebra/rt_netlink.c -@@ -379,33 +379,6 @@ static inline int proto2zebra(int proto, int family, bool is_nexthop) - return proto; - } - --/* --Pending: create an efficient table_id (in a tree/hash) based lookup) -- */ --vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) --{ -- struct vrf *vrf; -- struct zebra_vrf *zvrf; -- -- RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { -- zvrf = vrf->info; -- if (zvrf == NULL) -- continue; -- /* case vrf with netns : match the netnsid */ -- if (vrf_is_backend_netns()) { -- if (ns_id == zvrf_id(zvrf)) -- return zvrf_id(zvrf); -- } else { -- /* VRF is VRF_BACKEND_VRF_LITE */ -- if (zvrf->table_id != table_id) -- continue; -- return zvrf_id(zvrf); -- } -- } -- -- return VRF_DEFAULT; --} -- - static uint32_t table_lookup_by_vrf(vrf_id_t vrf_id, ns_id_t ns_id) - { - struct vrf *vrf; -@@ -814,7 +787,7 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, - table = rtm->rtm_table; - - /* Map to VRF */ -- vrf_id = vrf_lookup_by_table(table, ns_id); -+ vrf_id = zebra_vrf_lookup_by_table(table, ns_id); - } else { - /* With FPM, rtm_table contains vrf id, see netlink_route_multipath_msg_encode */ - if (tb[RTA_TABLE]) -@@ -1114,7 +1087,7 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h, - else - table = rtm->rtm_table; - -- vrf = vrf_lookup_by_table(table, ns_id); -+ vrf = zebra_vrf_lookup_by_table(table, ns_id); - - if (tb[RTA_IIF]) - iif = *(int *)RTA_DATA(tb[RTA_IIF]); -diff --git a/zebra/rt_netlink.h b/zebra/rt_netlink.h -index 8506367ae4..364aac0f6b 100644 ---- a/zebra/rt_netlink.h -+++ b/zebra/rt_netlink.h -@@ -102,7 +102,6 @@ extern int netlink_macfdb_read_specific_mac(struct zebra_ns *zns, - uint16_t vid); - extern int netlink_neigh_read_specific_ip(const struct ipaddr *ip, - struct interface *vlan_if); --extern vrf_id_t vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id); - - struct nl_batch; - extern enum netlink_msg_status -diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c -index be5e91495f..c59cb7c0a7 100644 ---- a/zebra/zebra_vrf.c -+++ b/zebra/zebra_vrf.c -@@ -389,6 +389,33 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf) - return zvrf; - } - -+/* -+Pending: create an efficient table_id (in a tree/hash) based lookup) -+ */ -+vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) -+{ -+ struct vrf *vrf; -+ struct zebra_vrf *zvrf; -+ -+ RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { -+ zvrf = vrf->info; -+ if (zvrf == NULL) -+ continue; -+ /* case vrf with netns : match the netnsid */ -+ if (vrf_is_backend_netns()) { -+ if (ns_id == zvrf_id(zvrf)) -+ return zvrf_id(zvrf); -+ } else { -+ /* VRF is VRF_BACKEND_VRF_LITE */ -+ if (zvrf->table_id != table_id) -+ continue; -+ return zvrf_id(zvrf); -+ } -+ } -+ -+ return VRF_DEFAULT; -+} -+ - /* Lookup VRF by identifier. */ - struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id) - { -diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h -index 02e3c197c9..937e7fb144 100644 ---- a/zebra/zebra_vrf.h -+++ b/zebra/zebra_vrf.h -@@ -252,6 +252,7 @@ extern struct route_table *zebra_vrf_get_table_with_table_id(afi_t afi, - extern void zebra_vrf_update_all(struct zserv *client); - extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id); - extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *); -+extern vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id); - extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf); - extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t); - --- -2.17.1 - diff --git a/src/sonic-frr/patch/0013-zebra-Move-protodown_r_bit-to-a-better-spot.patch b/src/sonic-frr/patch/0013-zebra-Move-protodown_r_bit-to-a-better-spot.patch deleted file mode 100644 index cd88419fcbd6..000000000000 --- a/src/sonic-frr/patch/0013-zebra-Move-protodown_r_bit-to-a-better-spot.patch +++ /dev/null @@ -1,181 +0,0 @@ -From c43808ca6daa59d533e14790ffc7f2e11b508924 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 27 Apr 2023 07:37:58 -0400 -Subject: [PATCH] zebra: Move protodown_r_bit to a better spot - -Since we are moving some code handling out of the dataplane -and into zebra proper, lets move the protodown r bit as well. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c -index 4599121261..95889e22fd 100644 ---- a/zebra/if_netlink.c -+++ b/zebra/if_netlink.c -@@ -78,7 +78,6 @@ - #include "zebra/zebra_trace.h" - - extern struct zebra_privs_t zserv_privs; --uint8_t frr_protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT; - - /* Note: on netlink systems, there should be a 1-to-1 mapping between interface - names and ifindex values. */ -@@ -819,9 +818,7 @@ static int netlink_bridge_interface(struct nlmsghdr *h, int len, ns_id_t ns_id, - - static bool is_if_protodown_reason_only_frr(uint32_t rc_bitfield) - { -- /* This shouldn't be possible */ -- assert(frr_protodown_r_bit < 32); -- return (rc_bitfield == (((uint32_t)1) << frr_protodown_r_bit)); -+ return (rc_bitfield == (((uint32_t)1) << if_netlink_get_frr_protodown_r_bit())); - } - - /* -@@ -2247,9 +2244,10 @@ ssize_t netlink_intf_msg_encode(uint16_t cmd, - return -1; - - nl_attr_put32(&req->n, buflen, IFLA_PROTO_DOWN_REASON_MASK, -- (1 << frr_protodown_r_bit)); -+ (1 << if_netlink_get_frr_protodown_r_bit())); - nl_attr_put32(&req->n, buflen, IFLA_PROTO_DOWN_REASON_VALUE, -- ((int)pd_reason_val) << frr_protodown_r_bit); -+ ((int)pd_reason_val) -+ << if_netlink_get_frr_protodown_r_bit()); - - nl_attr_nest_end(&req->n, nest_protodown_reason); - -@@ -2274,37 +2272,6 @@ void interface_list(struct zebra_ns *zns) - interface_addr_lookup_netlink(zns); - } - --void if_netlink_set_frr_protodown_r_bit(uint8_t bit) --{ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Protodown reason bit index changed: bit-index %u -> bit-index %u", -- frr_protodown_r_bit, bit); -- -- frr_protodown_r_bit = bit; --} -- --void if_netlink_unset_frr_protodown_r_bit(void) --{ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Protodown reason bit index changed: bit-index %u -> bit-index %u", -- frr_protodown_r_bit, FRR_PROTODOWN_REASON_DEFAULT_BIT); -- -- frr_protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT; --} -- -- --bool if_netlink_frr_protodown_r_bit_is_set(void) --{ -- return (frr_protodown_r_bit != FRR_PROTODOWN_REASON_DEFAULT_BIT); --} -- --uint8_t if_netlink_get_frr_protodown_r_bit(void) --{ -- return frr_protodown_r_bit; --} -- - /** - * netlink_request_tunneldump() - Request all tunnels from the linux kernel - * -diff --git a/zebra/if_netlink.h b/zebra/if_netlink.h -index 21ae1713be..f5a170a609 100644 ---- a/zebra/if_netlink.h -+++ b/zebra/if_netlink.h -@@ -54,17 +54,6 @@ extern int netlink_tunneldump_read(struct zebra_ns *zns); - extern enum netlink_msg_status - netlink_put_intf_update_msg(struct nl_batch *bth, struct zebra_dplane_ctx *ctx); - --#define FRR_PROTODOWN_REASON_DEFAULT_BIT 7 --/* Protodown bit setter/getter -- * -- * Allow users to change the bit if it conflicts with another -- * on their system. -- */ --extern void if_netlink_set_frr_protodown_r_bit(uint8_t bit); --extern void if_netlink_unset_frr_protodown_r_bit(void); --extern bool if_netlink_frr_protodown_r_bit_is_set(void); --extern uint8_t if_netlink_get_frr_protodown_r_bit(void); -- - #ifdef __cplusplus - } - #endif -diff --git a/zebra/zebra_router.c b/zebra/zebra_router.c -index a9a7b66ce7..12689804ea 100644 ---- a/zebra/zebra_router.c -+++ b/zebra/zebra_router.c -@@ -280,6 +280,8 @@ void zebra_router_init(bool asic_offload, bool notify_on_ack) - { - zrouter.sequence_num = 0; - -+ zrouter.protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT; -+ - zrouter.allow_delete = false; - - zrouter.packets_to_process = ZEBRA_ZAPI_PACKETS_TO_PROCESS; -diff --git a/zebra/zebra_router.h b/zebra/zebra_router.h -index e0ef86f082..61bde4ac2a 100644 ---- a/zebra/zebra_router.h -+++ b/zebra/zebra_router.h -@@ -244,6 +244,8 @@ struct zebra_router { - - /* Should we allow non FRR processes to delete our routes */ - bool allow_delete; -+ -+ uint8_t protodown_r_bit; - }; - - #define GRACEFUL_RESTART_TIME 60 -@@ -302,6 +304,32 @@ static inline bool zebra_router_in_shutdown(void) - return atomic_load_explicit(&zrouter.in_shutdown, memory_order_relaxed); - } - -+#define FRR_PROTODOWN_REASON_DEFAULT_BIT 7 -+/* Protodown bit setter/getter -+ * -+ * Allow users to change the bit if it conflicts with another -+ * on their system. -+ */ -+static inline void if_netlink_set_frr_protodown_r_bit(uint8_t bit) -+{ -+ zrouter.protodown_r_bit = bit; -+} -+ -+static inline void if_netlink_unset_frr_protodown_r_bit(void) -+{ -+ zrouter.protodown_r_bit = FRR_PROTODOWN_REASON_DEFAULT_BIT; -+} -+ -+static inline bool if_netlink_frr_protodown_r_bit_is_set(void) -+{ -+ return (zrouter.protodown_r_bit != FRR_PROTODOWN_REASON_DEFAULT_BIT); -+} -+ -+static inline uint8_t if_netlink_get_frr_protodown_r_bit(void) -+{ -+ return zrouter.protodown_r_bit; -+} -+ - /* zebra_northbound.c */ - extern const struct frr_yang_module_info frr_zebra_info; - -diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c -index c59cb7c0a7..9c5b38b96b 100644 ---- a/zebra/zebra_vrf.c -+++ b/zebra/zebra_vrf.c -@@ -390,7 +390,7 @@ struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf) - } - - /* --Pending: create an efficient table_id (in a tree/hash) based lookup) -+ * Pending: create an efficient table_id (in a tree/hash) based lookup) - */ - vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id) - { --- -2.17.1 - diff --git a/src/sonic-frr/patch/0014-zebra-Remove-unused-dplane_intf_delete.patch b/src/sonic-frr/patch/0014-zebra-Remove-unused-dplane_intf_delete.patch deleted file mode 100644 index 756e0cf97419..000000000000 --- a/src/sonic-frr/patch/0014-zebra-Remove-unused-dplane_intf_delete.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 88f7441f56bf61008a52adda97525ffb20f9543d Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Fri, 14 Apr 2023 07:43:19 -0400 -Subject: [PATCH] zebra: Remove unused dplane_intf_delete - -There is no need for this functionality and it is -not used. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c -index 4927af5625..a6c08f7371 100644 ---- a/zebra/zebra_dplane.c -+++ b/zebra/zebra_dplane.c -@@ -4648,18 +4648,6 @@ enum zebra_dplane_result dplane_intf_update(const struct interface *ifp) - return ret; - } - --/* -- * Enqueue a interface delete for the dataplane. -- */ --enum zebra_dplane_result dplane_intf_delete(const struct interface *ifp) --{ -- enum zebra_dplane_result ret = ZEBRA_DPLANE_REQUEST_FAILURE; -- -- if (ifp) -- ret = dplane_intf_update_internal(ifp, DPLANE_OP_INTF_DELETE); -- return ret; --} -- - /* - * Enqueue vxlan/evpn mac add (or update). - */ -diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h -index ae13243a16..9ef0afd3a8 100644 ---- a/zebra/zebra_dplane.h -+++ b/zebra/zebra_dplane.h -@@ -758,7 +758,6 @@ enum zebra_dplane_result dplane_intf_addr_unset(const struct interface *ifp, - */ - enum zebra_dplane_result dplane_intf_add(const struct interface *ifp); - enum zebra_dplane_result dplane_intf_update(const struct interface *ifp); --enum zebra_dplane_result dplane_intf_delete(const struct interface *ifp); - - /* - * Enqueue tc link changes for the dataplane. --- -2.17.1 - diff --git a/src/sonic-frr/patch/0015-zebra-Remove-unused-add-variable.patch b/src/sonic-frr/patch/0015-zebra-Remove-unused-add-variable.patch deleted file mode 100644 index dc263d3d94c0..000000000000 --- a/src/sonic-frr/patch/0015-zebra-Remove-unused-add-variable.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 4cc6c7af6f7c72ddf18ab562f4e2c2b25e32f1b5 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Sat, 15 Apr 2023 08:04:51 -0400 -Subject: [PATCH] zebra: Remove unused add variable - -Function was not using the add variable. Remove it. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c -index 95889e22fd..e54fb09022 100644 ---- a/zebra/if_netlink.c -+++ b/zebra/if_netlink.c -@@ -670,7 +670,7 @@ static void netlink_interface_update_l2info(struct interface *ifp, - struct zebra_l2info_bridge bridge_info; - - netlink_extract_bridge_info(link_data, &bridge_info); -- zebra_l2_bridge_add_update(ifp, &bridge_info, add); -+ zebra_l2_bridge_add_update(ifp, &bridge_info); - } else if (IS_ZEBRA_IF_VLAN(ifp)) { - struct zebra_l2info_vlan vlan_info; - -diff --git a/zebra/zebra_l2.c b/zebra/zebra_l2.c -index 8a9f3dffe3..07bbc6e3bc 100644 ---- a/zebra/zebra_l2.c -+++ b/zebra/zebra_l2.c -@@ -258,8 +258,7 @@ void zebra_l2if_update_bond(struct interface *ifp, bool add) - * map slaves (if any) to the bridge. - */ - void zebra_l2_bridge_add_update(struct interface *ifp, -- struct zebra_l2info_bridge *bridge_info, -- int add) -+ struct zebra_l2info_bridge *bridge_info) - { - struct zebra_if *zif; - -diff --git a/zebra/zebra_l2.h b/zebra/zebra_l2.h -index 1c3e98158d..8fef008f52 100644 ---- a/zebra/zebra_l2.h -+++ b/zebra/zebra_l2.h -@@ -109,8 +109,7 @@ extern void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave, - extern void - zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave); - extern void zebra_l2_bridge_add_update(struct interface *ifp, -- struct zebra_l2info_bridge *bridge_info, -- int add); -+ struct zebra_l2info_bridge *bridge_info); - extern void zebra_l2_bridge_del(struct interface *ifp); - extern void zebra_l2_vlanif_update(struct interface *ifp, - struct zebra_l2info_vlan *vlan_info); --- -2.17.1 - diff --git a/src/sonic-frr/patch/0016-zebra-Remove-duplicate-function-for-netlink-interfac.patch b/src/sonic-frr/patch/0016-zebra-Remove-duplicate-function-for-netlink-interfac.patch deleted file mode 100644 index 8f13d20f0052..000000000000 --- a/src/sonic-frr/patch/0016-zebra-Remove-duplicate-function-for-netlink-interfac.patch +++ /dev/null @@ -1,301 +0,0 @@ -From e12ffa6871d33712b03fc2ca28de278913e95bce Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 13 Apr 2023 16:43:27 -0400 -Subject: [PATCH] zebra: Remove duplicate function for netlink interface - changes - -Turns out FRR has 2 functions one specifically for startup -and one for normal day to day operations. There were only -a couple of minor differences from what I could tell, and -where they were different the after startup functionality should -have been updated too. I cannot figure out why we have 2. - -Non-startup handling of bonds appears to be incorrect -so let's fix that. Additionally the speed was not -properly being set in non-startup situations. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c -index e54fb09022..ed5b3c4a66 100644 ---- a/zebra/if_netlink.c -+++ b/zebra/if_netlink.c -@@ -938,178 +938,6 @@ static void if_sweep_protodown(struct zebra_if *zif) - dplane_intf_update(zif->ifp); - } - --/* -- * Called from interface_lookup_netlink(). This function is only used -- * during bootstrap. -- */ --static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup) --{ -- int len; -- struct ifinfomsg *ifi; -- struct rtattr *tb[IFLA_MAX + 1]; -- struct rtattr *linkinfo[IFLA_MAX + 1]; -- struct interface *ifp; -- char *name = NULL; -- char *kind = NULL; -- char *desc = NULL; -- char *slave_kind = NULL; -- struct zebra_ns *zns = NULL; -- vrf_id_t vrf_id = VRF_DEFAULT; -- enum zebra_iftype zif_type = ZEBRA_IF_OTHER; -- enum zebra_slave_iftype zif_slave_type = ZEBRA_IF_SLAVE_NONE; -- ifindex_t bridge_ifindex = IFINDEX_INTERNAL; -- ifindex_t link_ifindex = IFINDEX_INTERNAL; -- ifindex_t bond_ifindex = IFINDEX_INTERNAL; -- struct zebra_if *zif; -- ns_id_t link_nsid = ns_id; -- uint8_t bypass = 0; -- -- frrtrace(3, frr_zebra, netlink_interface, h, ns_id, startup); -- -- zns = zebra_ns_lookup(ns_id); -- ifi = NLMSG_DATA(h); -- -- if (h->nlmsg_type != RTM_NEWLINK) -- return 0; -- -- len = h->nlmsg_len - NLMSG_LENGTH(sizeof(struct ifinfomsg)); -- if (len < 0) { -- zlog_err( -- "%s: Message received from netlink is of a broken size: %d %zu", -- __func__, h->nlmsg_len, -- (size_t)NLMSG_LENGTH(sizeof(struct ifinfomsg))); -- return -1; -- } -- -- /* We are interested in some AF_BRIDGE notifications. */ -- if (ifi->ifi_family == AF_BRIDGE) -- return netlink_bridge_interface(h, len, ns_id, startup); -- -- /* Looking up interface name. */ -- memset(linkinfo, 0, sizeof(linkinfo)); -- netlink_parse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(ifi), len, -- NLA_F_NESTED); -- -- /* check for wireless messages to ignore */ -- if ((tb[IFLA_WIRELESS] != NULL) && (ifi->ifi_change == 0)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("%s: ignoring IFLA_WIRELESS message", -- __func__); -- return 0; -- } -- -- if (tb[IFLA_IFNAME] == NULL) -- return -1; -- name = (char *)RTA_DATA(tb[IFLA_IFNAME]); -- -- if (tb[IFLA_IFALIAS]) -- desc = (char *)RTA_DATA(tb[IFLA_IFALIAS]); -- -- if (tb[IFLA_LINKINFO]) { -- netlink_parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, -- tb[IFLA_LINKINFO]); -- -- if (linkinfo[IFLA_INFO_KIND]) -- kind = RTA_DATA(linkinfo[IFLA_INFO_KIND]); -- -- if (linkinfo[IFLA_INFO_SLAVE_KIND]) -- slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]); -- -- if ((slave_kind != NULL) && strcmp(slave_kind, "bond") == 0) -- netlink_determine_zebra_iftype("bond_slave", &zif_type); -- else -- netlink_determine_zebra_iftype(kind, &zif_type); -- } -- -- /* If VRF, create the VRF structure itself. */ -- if (zif_type == ZEBRA_IF_VRF && !vrf_is_backend_netns()) { -- netlink_vrf_change(h, tb[IFLA_LINKINFO], ns_id, name); -- vrf_id = (vrf_id_t)ifi->ifi_index; -- } -- -- if (tb[IFLA_MASTER]) { -- if (slave_kind && (strcmp(slave_kind, "vrf") == 0) -- && !vrf_is_backend_netns()) { -- zif_slave_type = ZEBRA_IF_SLAVE_VRF; -- vrf_id = *(uint32_t *)RTA_DATA(tb[IFLA_MASTER]); -- } else if (slave_kind && (strcmp(slave_kind, "bridge") == 0)) { -- zif_slave_type = ZEBRA_IF_SLAVE_BRIDGE; -- bridge_ifindex = -- *(ifindex_t *)RTA_DATA(tb[IFLA_MASTER]); -- } else if (slave_kind && (strcmp(slave_kind, "bond") == 0)) { -- zif_slave_type = ZEBRA_IF_SLAVE_BOND; -- bond_ifindex = *(ifindex_t *)RTA_DATA(tb[IFLA_MASTER]); -- bypass = netlink_parse_lacp_bypass(linkinfo); -- } else -- zif_slave_type = ZEBRA_IF_SLAVE_OTHER; -- } -- if (vrf_is_backend_netns()) -- vrf_id = (vrf_id_t)ns_id; -- -- /* If linking to another interface, note it. */ -- if (tb[IFLA_LINK]) -- link_ifindex = *(ifindex_t *)RTA_DATA(tb[IFLA_LINK]); -- -- if (tb[IFLA_LINK_NETNSID]) { -- link_nsid = *(ns_id_t *)RTA_DATA(tb[IFLA_LINK_NETNSID]); -- link_nsid = ns_id_get_absolute(ns_id, link_nsid); -- } -- -- ifp = if_get_by_name(name, vrf_id, NULL); -- set_ifindex(ifp, ifi->ifi_index, zns); /* add it to ns struct */ -- -- ifp->flags = ifi->ifi_flags & 0x0000fffff; -- ifp->mtu6 = ifp->mtu = *(uint32_t *)RTA_DATA(tb[IFLA_MTU]); -- ifp->metric = 0; -- ifp->speed = get_iflink_speed(ifp, NULL); -- ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN; -- -- /* Set zebra interface type */ -- zebra_if_set_ziftype(ifp, zif_type, zif_slave_type); -- if (IS_ZEBRA_IF_VRF(ifp)) -- SET_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK); -- -- /* -- * Just set the @link/lower-device ifindex. During nldump interfaces are -- * not ordered in any fashion so we may end up getting upper devices -- * before lower devices. We will setup the real linkage once the dump -- * is complete. -- */ -- zif = (struct zebra_if *)ifp->info; -- zif->link_ifindex = link_ifindex; -- -- if (desc) { -- XFREE(MTYPE_ZIF_DESC, zif->desc); -- zif->desc = XSTRDUP(MTYPE_ZIF_DESC, desc); -- } -- -- /* Hardware type and address. */ -- ifp->ll_type = netlink_to_zebra_link_type(ifi->ifi_type); -- -- netlink_interface_update_hw_addr(tb, ifp); -- -- if_add_update(ifp); -- -- /* Extract and save L2 interface information, take additional actions. -- */ -- netlink_interface_update_l2info(ifp, linkinfo[IFLA_INFO_DATA], -- 1, link_nsid); -- if (IS_ZEBRA_IF_BOND(ifp)) -- zebra_l2if_update_bond(ifp, true); -- if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) -- zebra_l2if_update_bridge_slave(ifp, bridge_ifindex, ns_id, -- ZEBRA_BRIDGE_NO_ACTION); -- else if (IS_ZEBRA_IF_BOND_SLAVE(ifp)) -- zebra_l2if_update_bond_slave(ifp, bond_ifindex, !!bypass); -- -- if (tb[IFLA_PROTO_DOWN]) { -- netlink_proc_dplane_if_protodown(zif, tb); -- if_sweep_protodown(zif); -- } -- -- return 0; --} -- - /* Request for specific interface or address information from the kernel */ - static int netlink_request_intf_addr(struct nlsock *netlink_cmd, int family, - int type, uint32_t filter_mask) -@@ -1165,7 +993,7 @@ int interface_lookup_netlink(struct zebra_ns *zns) - ret = netlink_request_intf_addr(netlink_cmd, AF_PACKET, RTM_GETLINK, 0); - if (ret < 0) - return ret; -- ret = netlink_parse_info(netlink_interface, netlink_cmd, &dp_info, 0, -+ ret = netlink_parse_info(netlink_link_change, netlink_cmd, &dp_info, 0, - true); - if (ret < 0) - return ret; -@@ -1175,7 +1003,7 @@ int interface_lookup_netlink(struct zebra_ns *zns) - RTEXT_FILTER_BRVLAN); - if (ret < 0) - return ret; -- ret = netlink_parse_info(netlink_interface, netlink_cmd, &dp_info, 0, -+ ret = netlink_parse_info(netlink_link_change, netlink_cmd, &dp_info, 0, - true); - if (ret < 0) - return ret; -@@ -1816,6 +1644,8 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - ifindex_t master_infindex = IFINDEX_INTERNAL; - uint8_t bypass = 0; - -+ frrtrace(3, frr_zebra, netlink_interface, h, ns_id, startup); -+ - zns = zebra_ns_lookup(ns_id); - ifi = NLMSG_DATA(h); - -@@ -1884,7 +1714,10 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - if (linkinfo[IFLA_INFO_SLAVE_KIND]) - slave_kind = RTA_DATA(linkinfo[IFLA_INFO_SLAVE_KIND]); - -- netlink_determine_zebra_iftype(kind, &zif_type); -+ if ((slave_kind != NULL) && strcmp(slave_kind, "bond") == 0) -+ netlink_determine_zebra_iftype("bond_slave", &zif_type); -+ else -+ netlink_determine_zebra_iftype(kind, &zif_type); - } - - /* If linking to another interface, note it. */ -@@ -1961,6 +1794,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - } - ifp->mtu6 = ifp->mtu = *(int *)RTA_DATA(tb[IFLA_MTU]); - ifp->metric = 0; -+ ifp->speed = get_iflink_speed(ifp, NULL); - ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN; - - /* Set interface type */ -@@ -1972,6 +1806,16 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - /* Update link. */ - zebra_if_update_link(ifp, link_ifindex, link_nsid); - -+ /* -+ * Just set the @link/lower-device ifindex. During -+ * nldump interfaces are not ordered in any fashion so -+ * we may end up getting upper devices before lower -+ * devices. We will setup the real linkage once the dump -+ * is complete. -+ */ -+ zif = (struct zebra_if *)ifp->info; -+ zif->link_ifindex = link_ifindex; -+ - ifp->ll_type = - netlink_to_zebra_link_type(ifi->ifi_type); - netlink_interface_update_hw_addr(tb, ifp); -@@ -1984,6 +1828,8 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - netlink_interface_update_l2info( - ifp, linkinfo[IFLA_INFO_DATA], - 1, link_nsid); -+ if (IS_ZEBRA_IF_BOND(ifp)) -+ zebra_l2if_update_bond(ifp, true); - if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) - zebra_l2if_update_bridge_slave( - ifp, bridge_ifindex, ns_id, -@@ -1992,10 +1838,12 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - zebra_l2if_update_bond_slave(ifp, bond_ifindex, - !!bypass); - -- if (tb[IFLA_PROTO_DOWN]) -+ if (tb[IFLA_PROTO_DOWN]) { - netlink_proc_dplane_if_protodown(ifp->info, tb); -+ if (startup) -+ if_sweep_protodown(zif); -+ } - if (IS_ZEBRA_IF_BRIDGE(ifp)) { -- zif = ifp->info; - if (IS_ZEBRA_DEBUG_KERNEL) - zlog_debug( - "RTM_NEWLINK ADD for %s(%u), vlan-aware %d", -@@ -2329,7 +2177,7 @@ int netlink_tunneldump_read(struct zebra_ns *zns) - if (ret < 0) - return ret; - -- ret = netlink_parse_info(netlink_interface, netlink_cmd, -+ ret = netlink_parse_info(netlink_link_change, netlink_cmd, - &dp_info, 0, true); - - if (ret < 0) --- -2.17.1 - diff --git a/src/sonic-frr/patch/0017-zebra-Add-code-to-get-set-interface-to-pass-up-from-.patch b/src/sonic-frr/patch/0017-zebra-Add-code-to-get-set-interface-to-pass-up-from-.patch deleted file mode 100644 index c46c29737a0e..000000000000 --- a/src/sonic-frr/patch/0017-zebra-Add-code-to-get-set-interface-to-pass-up-from-.patch +++ /dev/null @@ -1,809 +0,0 @@ -From 1b576b080613cd545ecd742b6a16146ab781695f Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 20 Apr 2023 08:51:42 -0400 -Subject: [PATCH] zebra: Add code to get/set interface to pass up from dplane - -1) Add a bunch of get/set functions and associated data -structure in zebra_dplane to allow the setting and retrieval -of interface netlink data up into the master pthread. - -2) Add a bit of code to breakup startup into stages. This is -because FRR currently has a mix of dplane and non dplane interactions -and the code needs to be paused before continuing on. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/dplane_fpm_nl.c b/zebra/dplane_fpm_nl.c -index 804eb43a44..0d629fe0b9 100644 ---- a/zebra/dplane_fpm_nl.c -+++ b/zebra/dplane_fpm_nl.c -@@ -955,6 +955,7 @@ static int fpm_nl_enqueue(struct fpm_nl_ctx *fnc, struct zebra_dplane_ctx *ctx) - case DPLANE_OP_TC_FILTER_DELETE: - case DPLANE_OP_TC_FILTER_UPDATE: - case DPLANE_OP_NONE: -+ case DPLANE_OP_STARTUP_STAGE: - break; - - } -diff --git a/zebra/interface.c b/zebra/interface.c -index 84e52d4b43..a05b9690ef 100644 ---- a/zebra/interface.c -+++ b/zebra/interface.c -@@ -1590,6 +1590,7 @@ void zebra_if_dplane_result(struct zebra_dplane_ctx *ctx) - case DPLANE_OP_TC_FILTER_ADD: - case DPLANE_OP_TC_FILTER_DELETE: - case DPLANE_OP_TC_FILTER_UPDATE: -+ case DPLANE_OP_STARTUP_STAGE: - break; /* should never hit here */ - } - } -diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c -index 42afe61469..4cd84cada2 100644 ---- a/zebra/kernel_netlink.c -+++ b/zebra/kernel_netlink.c -@@ -1632,6 +1632,7 @@ static enum netlink_msg_status nl_put_msg(struct nl_batch *bth, - case DPLANE_OP_IPSET_DELETE: - case DPLANE_OP_IPSET_ENTRY_ADD: - case DPLANE_OP_IPSET_ENTRY_DELETE: -+ case DPLANE_OP_STARTUP_STAGE: - return FRR_NETLINK_ERROR; - - case DPLANE_OP_GRE_SET: -diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c -index 684ccc3ed5..f3462b9f22 100644 ---- a/zebra/kernel_socket.c -+++ b/zebra/kernel_socket.c -@@ -1631,6 +1631,7 @@ void kernel_update_multi(struct dplane_ctx_list_head *ctx_list) - case DPLANE_OP_GRE_SET: - case DPLANE_OP_INTF_ADDR_ADD: - case DPLANE_OP_INTF_ADDR_DEL: -+ case DPLANE_OP_STARTUP_STAGE: - zlog_err("Unhandled dplane data for %s", - dplane_op2str(dplane_ctx_get_op(ctx))); - res = ZEBRA_DPLANE_REQUEST_FAILURE; -diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c -index a6c08f7371..0b33a5189c 100644 ---- a/zebra/zebra_dplane.c -+++ b/zebra/zebra_dplane.c -@@ -193,10 +193,43 @@ struct dplane_br_port_info { - */ - struct dplane_intf_info { - -+ enum zebra_iftype zif_type; -+ ifindex_t bond_ifindex; -+ ifindex_t link_ifindex; -+ int32_t mtu; -+ vrf_id_t vrf_id; -+ enum zebra_slave_iftype zif_slave_type; -+ ifindex_t master_ifindex; -+ ifindex_t bridge_ifindex; -+ ns_id_t link_nsid; -+ enum zebra_slave_iftype zslave_type; -+ uint8_t bypass; -+ enum zebra_link_type zltype; -+ bool startup; -+ uint8_t family; -+ struct zebra_vxlan_vni_array *vniarray; -+ struct zebra_dplane_bridge_vlan_info bvinfo; -+ struct zebra_dplane_bridge_vlan_info_array *bvarray; -+ -+ char desc[128]; -+ -+ int32_t hw_addr_len; -+ uint8_t hw_addr[INTERFACE_HWADDR_MAX]; -+ -+ uint32_t table_id; -+ -+ struct zebra_l2info_bridge binfo; -+ struct zebra_l2info_vlan vinfo; -+ struct zebra_l2info_vxlan vxinfo; -+ struct zebra_l2info_gre grinfo; -+ -+ uint32_t rc_bitfield; -+ - uint32_t metric; - uint32_t flags; - - bool protodown; -+ bool protodown_set; - bool pd_reason_val; - - #define DPLANE_INTF_CONNECTED (1 << 0) /* Connected peer, p2p */ -@@ -408,6 +441,7 @@ struct zebra_dplane_ctx { - struct dplane_neigh_table neightable; - struct dplane_gre_ctx gre; - struct dplane_netconf_info netconf; -+ enum zebra_dplane_startup_notifications spot; - } u; - - /* Namespace info, used especially for netlink kernel communication */ -@@ -820,8 +854,14 @@ static void dplane_ctx_free_internal(struct zebra_dplane_ctx *ctx) - case DPLANE_OP_NONE: - case DPLANE_OP_IPSET_ADD: - case DPLANE_OP_IPSET_DELETE: -+ break; - case DPLANE_OP_INTF_INSTALL: - case DPLANE_OP_INTF_UPDATE: -+ if (ctx->u.intf.vniarray) -+ XFREE(MTYPE_TMP, ctx->u.intf.vniarray); -+ if (ctx->u.intf.bvarray) -+ XFREE(MTYPE_TMP, ctx->u.intf.bvarray); -+ break; - case DPLANE_OP_INTF_DELETE: - case DPLANE_OP_TC_QDISC_INSTALL: - case DPLANE_OP_TC_QDISC_UNINSTALL: -@@ -845,6 +885,7 @@ static void dplane_ctx_free_internal(struct zebra_dplane_ctx *ctx) - break; - case DPLANE_OP_GRE_SET: - case DPLANE_OP_INTF_NETCONFIG: -+ case DPLANE_OP_STARTUP_STAGE: - break; - } - } -@@ -1168,6 +1209,8 @@ const char *dplane_op2str(enum dplane_op_e op) - case DPLANE_OP_TC_FILTER_UPDATE: - ret = "TC__FILTER_UPDATE"; - break; -+ case DPLANE_OP_STARTUP_STAGE: -+ ret = "STARTUP_STAGE"; - } - - return ret; -@@ -1309,6 +1352,422 @@ const char *dplane_ctx_get_ifname(const struct zebra_dplane_ctx *ctx) - return ctx->zd_ifname; - } - -+void dplane_ctx_set_ifp_bridge_vlan_info_array( -+ struct zebra_dplane_ctx *ctx, -+ struct zebra_dplane_bridge_vlan_info_array *bvarray) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.bvarray = bvarray; -+} -+ -+const struct zebra_dplane_bridge_vlan_info_array * -+dplane_ctx_get_ifp_bridge_vlan_info_array(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.bvarray; -+} -+ -+void dplane_ctx_set_ifp_vxlan_vni_array(struct zebra_dplane_ctx *ctx, -+ struct zebra_vxlan_vni_array *vniarray) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.vniarray = vniarray; -+} -+ -+const struct zebra_vxlan_vni_array * -+dplane_ctx_get_ifp_vxlan_vni_array(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.vniarray; -+} -+ -+void dplane_ctx_set_ifp_bridge_vlan_info( -+ struct zebra_dplane_ctx *ctx, -+ struct zebra_dplane_bridge_vlan_info *bvinfo) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.bvinfo = *bvinfo; -+} -+ -+const struct zebra_dplane_bridge_vlan_info * -+dplane_ctx_get_ifp_bridge_vlan_info(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return &ctx->u.intf.bvinfo; -+} -+ -+void dplane_ctx_set_ifp_family(struct zebra_dplane_ctx *ctx, uint8_t family) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.family = family; -+} -+ -+uint8_t dplane_ctx_get_ifp_family(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.family; -+} -+ -+void dplane_ctx_set_ifp_zltype(struct zebra_dplane_ctx *ctx, -+ enum zebra_link_type zltype) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.zltype = zltype; -+} -+ -+enum zebra_link_type -+dplane_ctx_get_ifp_zltype(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.zltype; -+} -+ -+void dplane_ctx_set_ifp_link_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t link_ifindex) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.link_ifindex = link_ifindex; -+} -+ -+ifindex_t dplane_ctx_get_ifp_link_ifindex(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.link_ifindex; -+} -+ -+void dplane_ctx_set_ifp_desc(struct zebra_dplane_ctx *ctx, const char *desc) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ strlcpy(ctx->u.intf.desc, desc, sizeof(ctx->u.intf.desc)); -+} -+ -+char *dplane_ctx_get_ifp_desc(struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.desc; -+} -+ -+void dplane_ctx_set_ifp_flags(struct zebra_dplane_ctx *ctx, uint64_t flags) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.flags = flags; -+} -+ -+uint64_t dplane_ctx_get_ifp_flags(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.flags; -+} -+ -+void dplane_ctx_set_ifp_bypass(struct zebra_dplane_ctx *ctx, uint8_t bypass) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.bypass = bypass; -+} -+ -+uint8_t dplane_ctx_get_ifp_bypass(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.bypass; -+} -+ -+void dplane_ctx_set_ifp_bridge_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t bridge_ifindex) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.bridge_ifindex = bridge_ifindex; -+} -+ -+ifindex_t dplane_ctx_get_ifp_bridge_ifindex(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.bridge_ifindex; -+} -+ -+void dplane_ctx_set_ifp_zif_slave_type(struct zebra_dplane_ctx *ctx, -+ enum zebra_slave_iftype zslave_type) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.zslave_type = zslave_type; -+} -+ -+enum zebra_slave_iftype -+dplane_ctx_get_ifp_zif_slave_type(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.zslave_type; -+} -+ -+void dplane_ctx_set_ifp_master_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t master_ifindex) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.master_ifindex = master_ifindex; -+} -+ -+ifindex_t dplane_ctx_get_ifp_master_ifindex(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.master_ifindex; -+} -+ -+void dplane_ctx_set_ifp_mtu(struct zebra_dplane_ctx *ctx, uint32_t mtu) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.mtu = mtu; -+} -+ -+uint32_t dplane_ctx_get_ifp_mtu(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.mtu; -+} -+ -+void dplane_ctx_set_ifp_vrf_id(struct zebra_dplane_ctx *ctx, vrf_id_t vrf_id) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.vrf_id = vrf_id; -+} -+ -+vrf_id_t dplane_ctx_get_ifp_vrf_id(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.vrf_id; -+} -+ -+void dplane_ctx_set_ifp_link_nsid(struct zebra_dplane_ctx *ctx, -+ ns_id_t link_nsid) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.link_nsid = link_nsid; -+} -+ -+ns_id_t dplane_ctx_get_ifp_link_nsid(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.link_nsid; -+} -+ -+void dplane_ctx_set_ifp_startup(struct zebra_dplane_ctx *ctx, bool startup) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.startup = startup; -+} -+ -+bool dplane_ctx_get_ifp_startup(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.startup; -+} -+ -+void dplane_ctx_set_ifp_protodown_set(struct zebra_dplane_ctx *ctx, bool set) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.protodown_set = set; -+} -+ -+bool dplane_ctx_get_ifp_protodown_set(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.protodown_set; -+} -+ -+void dplane_ctx_set_ifp_protodown(struct zebra_dplane_ctx *ctx, bool protodown) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.protodown = protodown; -+} -+ -+bool dplane_ctx_get_ifp_protodown(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.protodown; -+} -+ -+ifindex_t dplane_ctx_get_ifp_bond_ifindex(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.bond_ifindex; -+} -+ -+void dplane_ctx_set_ifp_rc_bitfield(struct zebra_dplane_ctx *ctx, -+ uint32_t rc_bitfield) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.rc_bitfield = rc_bitfield; -+} -+ -+uint32_t dplane_ctx_get_ifp_rc_bitfield(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.rc_bitfield; -+} -+ -+void dplane_ctx_set_ifp_gre_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_gre *grinfo) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.grinfo = *grinfo; -+} -+ -+const struct zebra_l2info_gre * -+dplane_ctx_get_ifp_gre_info(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return &ctx->u.intf.grinfo; -+} -+ -+void dplane_ctx_set_ifp_vxlan_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_vxlan *vxinfo) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.vxinfo = *vxinfo; -+} -+ -+const struct zebra_l2info_vxlan * -+dplane_ctx_get_ifp_vxlan_info(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return &ctx->u.intf.vxinfo; -+} -+ -+void dplane_ctx_set_ifp_vlan_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_vlan *vinfo) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.vinfo = *vinfo; -+} -+ -+const struct zebra_l2info_vlan * -+dplane_ctx_get_ifp_vlan_info(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return &ctx->u.intf.vinfo; -+} -+ -+void dplane_ctx_set_ifp_bridge_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_bridge *binfo) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.binfo = *binfo; -+} -+ -+const struct zebra_l2info_bridge * -+dplane_ctx_get_ifp_bridge_info(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return &ctx->u.intf.binfo; -+} -+ -+void dplane_ctx_set_ifp_table_id(struct zebra_dplane_ctx *ctx, -+ uint32_t table_id) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.table_id = table_id; -+} -+ -+uint32_t dplane_ctx_get_ifp_table_id(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.table_id; -+} -+ -+void dplane_ctx_set_ifp_hw_addr(struct zebra_dplane_ctx *ctx, -+ int32_t hw_addr_len, uint8_t *hw_addr) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.hw_addr_len = hw_addr_len; -+ memcpy(ctx->u.intf.hw_addr, hw_addr, hw_addr_len); -+} -+ -+int32_t dplane_ctx_get_ifp_hw_addr_len(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.hw_addr_len; -+} -+ -+const uint8_t *dplane_ctx_get_ifp_hw_addr(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.hw_addr; -+} -+ -+void dplane_ctx_set_ifp_bond_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t bond_ifindex) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.bond_ifindex = bond_ifindex; -+} -+ -+enum zebra_iftype -+dplane_ctx_get_ifp_zif_type(const struct zebra_dplane_ctx *ctx) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ return ctx->u.intf.zif_type; -+} -+ -+void dplane_ctx_set_ifp_zif_type(struct zebra_dplane_ctx *ctx, -+ enum zebra_iftype zif_type) -+{ -+ DPLANE_CTX_VALID(ctx); -+ -+ ctx->u.intf.zif_type = zif_type; -+} -+ - void dplane_ctx_set_ifname(struct zebra_dplane_ctx *ctx, const char *ifname) - { - DPLANE_CTX_VALID(ctx); -@@ -6102,6 +6561,7 @@ static void kernel_dplane_log_detail(struct zebra_dplane_ctx *ctx) - case DPLANE_OP_TC_FILTER_ADD: - case DPLANE_OP_TC_FILTER_DELETE: - case DPLANE_OP_TC_FILTER_UPDATE: -+ case DPLANE_OP_STARTUP_STAGE: - break; - } - } -@@ -6274,6 +6734,7 @@ static void kernel_dplane_handle_result(struct zebra_dplane_ctx *ctx) - break; - - case DPLANE_OP_NONE: -+ case DPLANE_OP_STARTUP_STAGE: - if (res != ZEBRA_DPLANE_REQUEST_SUCCESS) - atomic_fetch_add_explicit(&zdplane_info.dg_other_errors, - 1, memory_order_relaxed); -@@ -6966,6 +7427,25 @@ void zebra_dplane_start(void) - frr_pthread_run(zdplane_info.dg_pthread, NULL); - } - -+enum zebra_dplane_startup_notifications -+dplane_ctx_get_startup_spot(struct zebra_dplane_ctx *ctx) -+{ -+ return ctx->u.spot; -+} -+ -+void zebra_dplane_startup_stage(struct zebra_ns *zns, -+ enum zebra_dplane_startup_notifications spot) -+{ -+ struct zebra_dplane_ctx *ctx = dplane_ctx_alloc(); -+ -+ ctx->zd_op = DPLANE_OP_STARTUP_STAGE; -+ ctx->zd_status = ZEBRA_DPLANE_REQUEST_QUEUED; -+ -+ ctx->u.spot = spot; -+ dplane_ctx_set_ns_id(ctx, zns->ns_id); -+ -+ dplane_provider_enqueue_to_zebra(ctx); -+} - /* - * Initialize the dataplane module at startup; called by zebra rib_init() - */ -diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h -index 9ef0afd3a8..c10482ed96 100644 ---- a/zebra/zebra_dplane.h -+++ b/zebra/zebra_dplane.h -@@ -100,6 +100,11 @@ enum zebra_dplane_result { - ZEBRA_DPLANE_REQUEST_FAILURE, - }; - -+enum zebra_dplane_startup_notifications { -+ ZEBRA_DPLANE_INTERFACES_READ, -+ ZEBRA_DPLANE_TUNNELS_READ, -+ ZEBRA_DPLANE_ADDRESSES_READ, -+}; - /* - * API between the zebra dataplane system and the main zebra processing - * context. -@@ -201,7 +206,10 @@ enum dplane_op_e { - DPLANE_OP_TC_CLASS_UPDATE, - DPLANE_OP_TC_FILTER_ADD, - DPLANE_OP_TC_FILTER_DELETE, -- DPLANE_OP_TC_FILTER_UPDATE -+ DPLANE_OP_TC_FILTER_UPDATE, -+ -+ /* Startup Control */ -+ DPLANE_OP_STARTUP_STAGE, - }; - - /* -@@ -336,6 +344,105 @@ const char *dplane_ctx_get_ifname(const struct zebra_dplane_ctx *ctx); - void dplane_ctx_set_ifname(struct zebra_dplane_ctx *ctx, const char *ifname); - ifindex_t dplane_ctx_get_ifindex(const struct zebra_dplane_ctx *ctx); - void dplane_ctx_set_ifindex(struct zebra_dplane_ctx *ctx, ifindex_t ifindex); -+void dplane_ctx_set_ifp_bond_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t ifindex); -+ifindex_t dplane_ctx_get_ifp_bond_ifindex(const struct zebra_dplane_ctx *ctx); -+enum zebra_iftype -+dplane_ctx_get_ifp_zif_type(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_zif_type(struct zebra_dplane_ctx *ctx, -+ enum zebra_iftype zif_type); -+void dplane_ctx_set_ifp_table_id(struct zebra_dplane_ctx *ctx, -+ uint32_t table_id); -+uint32_t dplane_ctx_get_ifp_table_id(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_hw_addr(struct zebra_dplane_ctx *ctx, -+ int32_t hw_addr_len, uint8_t *hw_addr); -+int32_t dplane_ctx_get_ifp_hw_addr_len(const struct zebra_dplane_ctx *ctx); -+const uint8_t *dplane_ctx_get_ifp_hw_addr(const struct zebra_dplane_ctx *ctx); -+struct zebra_l2info_bridge; -+void dplane_ctx_set_ifp_bridge_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_bridge *binfo); -+const struct zebra_l2info_bridge * -+dplane_ctx_get_ifp_bridge_info(const struct zebra_dplane_ctx *ctx); -+struct zebra_l2info_vlan; -+void dplane_ctx_set_ifp_vlan_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_vlan *vinfo); -+const struct zebra_l2info_vlan * -+dplane_ctx_get_ifp_vlan_info(const struct zebra_dplane_ctx *ctx); -+struct zebra_l2info_vxlan; -+void dplane_ctx_set_ifp_vxlan_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_vxlan *vxinfo); -+const struct zebra_l2info_vxlan * -+dplane_ctx_get_ifp_vxlan_info(const struct zebra_dplane_ctx *ctx); -+struct zebra_l2info_gre; -+void dplane_ctx_set_ifp_gre_info(struct zebra_dplane_ctx *ctx, -+ struct zebra_l2info_gre *greinfo); -+const struct zebra_l2info_gre * -+dplane_ctx_get_ifp_gre_info(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_zltype(struct zebra_dplane_ctx *ctx, -+ enum zebra_link_type zlt); -+enum zebra_link_type -+dplane_ctx_get_ifp_zltype(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_link_nsid(struct zebra_dplane_ctx *ctx, ns_id_t ns_id); -+ns_id_t dplane_ctx_get_ifp_link_nsid(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_desc(struct zebra_dplane_ctx *ctx, const char *desc); -+char *dplane_ctx_get_ifp_desc(struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_mtu(struct zebra_dplane_ctx *ctx, uint32_t mtu); -+uint32_t dplane_ctx_get_ifp_mtu(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_vrf_id(struct zebra_dplane_ctx *ctx, vrf_id_t vrf_id); -+vrf_id_t dplane_ctx_get_ifp_vrf_id(const struct zebra_dplane_ctx *ctx); -+enum zebra_slave_iftype; -+void dplane_ctx_set_ifp_zif_slave_type(struct zebra_dplane_ctx *ctx, -+ enum zebra_slave_iftype zslave_type); -+enum zebra_slave_iftype -+dplane_ctx_get_ifp_zif_slave_type(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_master_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t master_ifindex); -+ifindex_t dplane_ctx_get_ifp_master_ifindex(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_bridge_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t bridge_ifindex); -+ifindex_t dplane_ctx_get_ifp_bridge_ifindex(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_bypass(struct zebra_dplane_ctx *ctx, uint8_t bypass); -+uint8_t dplane_ctx_get_ifp_bypass(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_flags(struct zebra_dplane_ctx *ctx, uint64_t flags); -+uint64_t dplane_ctx_get_ifp_flags(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_protodown(struct zebra_dplane_ctx *ctx, bool protodown); -+bool dplane_ctx_get_ifp_protodown(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_startup(struct zebra_dplane_ctx *ctx, bool startup); -+bool dplane_ctx_get_ifp_startup(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_protodown_set(struct zebra_dplane_ctx *ctx, bool set); -+bool dplane_ctx_get_ifp_protodown_set(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_rc_bitfield(struct zebra_dplane_ctx *ctx, -+ uint32_t rc_bitfield); -+uint32_t dplane_ctx_get_ifp_rc_bitfield(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_link_ifindex(struct zebra_dplane_ctx *ctx, -+ ifindex_t link_ifindex); -+ifindex_t dplane_ctx_get_ifp_link_ifindex(const struct zebra_dplane_ctx *ctx); -+void dplane_ctx_set_ifp_family(struct zebra_dplane_ctx *ctx, uint8_t family); -+uint8_t dplane_ctx_get_ifp_family(const struct zebra_dplane_ctx *ctx); -+struct zebra_vxlan_vni_array; -+void dplane_ctx_set_ifp_vxlan_vni_array(struct zebra_dplane_ctx *ctx, -+ struct zebra_vxlan_vni_array *vniarray); -+const struct zebra_vxlan_vni_array * -+dplane_ctx_get_ifp_vxlan_vni_array(const struct zebra_dplane_ctx *ctx); -+struct zebra_dplane_bridge_vlan_info { -+ uint16_t flags; -+ uint16_t vid; -+}; -+void dplane_ctx_set_ifp_bridge_vlan_info( -+ struct zebra_dplane_ctx *ctx, -+ struct zebra_dplane_bridge_vlan_info *bvinfo); -+const struct zebra_dplane_bridge_vlan_info * -+dplane_ctx_get_ifp_bridge_vlan_info(const struct zebra_dplane_ctx *ctx); -+ -+struct zebra_dplane_bridge_vlan_info_array { -+ int count; -+ struct zebra_dplane_bridge_vlan_info array[0]; -+}; -+void dplane_ctx_set_ifp_bridge_vlan_info_array( -+ struct zebra_dplane_ctx *ctx, -+ struct zebra_dplane_bridge_vlan_info_array *bvarray); -+const struct zebra_dplane_bridge_vlan_info_array * -+dplane_ctx_get_ifp_bridge_vlan_info_array(const struct zebra_dplane_ctx *ctx); - - /* Retrieve last/current provider id */ - uint32_t dplane_ctx_get_provider(const struct zebra_dplane_ctx *ctx); -@@ -1083,6 +1190,9 @@ void zebra_dplane_pre_finish(void); - void zebra_dplane_finish(void); - void zebra_dplane_shutdown(void); - -+void zebra_dplane_startup_stage(struct zebra_ns *zns, -+ enum zebra_dplane_startup_notifications spot); -+ - /* - * decision point for sending a routing update through the old - * straight to zebra master pthread or through the dplane to -@@ -1093,6 +1203,9 @@ void dplane_rib_add_multipath(afi_t afi, safi_t safi, struct prefix *p, - struct nexthop_group *ng, int startup, - struct zebra_dplane_ctx *ctx); - -+enum zebra_dplane_startup_notifications -+dplane_ctx_get_startup_spot(struct zebra_dplane_ctx *ctx); -+ - #ifdef __cplusplus - } - #endif -diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c -index 758fed7280..8f686eb5f8 100644 ---- a/zebra/zebra_nhg.c -+++ b/zebra/zebra_nhg.c -@@ -3177,6 +3177,7 @@ void zebra_nhg_dplane_result(struct zebra_dplane_ctx *ctx) - case DPLANE_OP_TC_FILTER_ADD: - case DPLANE_OP_TC_FILTER_DELETE: - case DPLANE_OP_TC_FILTER_UPDATE: -+ case DPLANE_OP_STARTUP_STAGE: - break; - } - } -diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index 5e50d720a6..201fc761ae 100644 ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -4770,6 +4770,7 @@ static void rib_process_dplane_results(struct thread *thread) - case DPLANE_OP_NEIGH_TABLE_UPDATE: - case DPLANE_OP_GRE_SET: - case DPLANE_OP_NONE: -+ case DPLANE_OP_STARTUP_STAGE: - break; - - } /* Dispatch by op code */ -diff --git a/zebra/zebra_script.c b/zebra/zebra_script.c -index 5c67ad4f16..22c1824b5a 100644 ---- a/zebra/zebra_script.c -+++ b/zebra/zebra_script.c -@@ -428,6 +428,7 @@ void lua_pushzebra_dplane_ctx(lua_State *L, const struct zebra_dplane_ctx *ctx) - /* Not currently handled */ - case DPLANE_OP_INTF_NETCONFIG: /*NYI*/ - case DPLANE_OP_NONE: -+ case DPLANE_OP_STARTUP_STAGE: - break; - } /* Dispatch by op code */ - } --- -2.17.1 - diff --git a/src/sonic-frr/patch/0018-zebra-Use-zebra-dplane-for-RTM-link-and-addr.patch b/src/sonic-frr/patch/0018-zebra-Use-zebra-dplane-for-RTM-link-and-addr.patch deleted file mode 100644 index 98f3b224a75e..000000000000 --- a/src/sonic-frr/patch/0018-zebra-Use-zebra-dplane-for-RTM-link-and-addr.patch +++ /dev/null @@ -1,2154 +0,0 @@ -From 2c33b9ab847a53d8006687e89c0cbd589fe7071f Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Wed, 26 Apr 2023 23:02:09 -0400 -Subject: [PATCH] zebra: Use zebra dplane for RTM link and addr - -a) Move the reads of link and address information -into the dplane -b) Move the startup read of data into the dplane -as well. -c) Break up startup reading of the linux kernel data -into multiple phases. As that we have implied ordering -of data that must be read first and if the dplane has -taken over some data reading then we must delay initial -read-in of other data. - -Fixes: #13288 -Signed-off-by: Donald Sharp - -diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c -index ed5b3c4a66..7613f5fcc4 100644 ---- a/zebra/if_netlink.c -+++ b/zebra/if_netlink.c -@@ -79,64 +79,21 @@ - - extern struct zebra_privs_t zserv_privs; - --/* Note: on netlink systems, there should be a 1-to-1 mapping between interface -- names and ifindex values. */ --static void set_ifindex(struct interface *ifp, ifindex_t ifi_index, -- struct zebra_ns *zns) --{ -- struct interface *oifp; -- -- if (((oifp = if_lookup_by_index_per_ns(zns, ifi_index)) != NULL) -- && (oifp != ifp)) { -- if (ifi_index == IFINDEX_INTERNAL) -- flog_err( -- EC_LIB_INTERFACE, -- "Netlink is setting interface %s ifindex to reserved internal value %u", -- ifp->name, ifi_index); -- else { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "interface index %d was renamed from %s to %s", -- ifi_index, oifp->name, ifp->name); -- if (if_is_up(oifp)) -- flog_err( -- EC_LIB_INTERFACE, -- "interface rename detected on up interface: index %d was renamed from %s to %s, results are uncertain!", -- ifi_index, oifp->name, ifp->name); -- if_delete_update(&oifp); -- } -- } -- if_set_index(ifp, ifi_index); --} -- - /* Utility function to parse hardware link-layer address and update ifp */ - static void netlink_interface_update_hw_addr(struct rtattr **tb, -- struct interface *ifp) -+ struct zebra_dplane_ctx *ctx) - { -- int i; -- - if (tb[IFLA_ADDRESS]) { - int hw_addr_len; - - hw_addr_len = RTA_PAYLOAD(tb[IFLA_ADDRESS]); - - if (hw_addr_len > INTERFACE_HWADDR_MAX) -- zlog_debug("Hardware address is too large: %d", -- hw_addr_len); -- else { -- ifp->hw_addr_len = hw_addr_len; -- memcpy(ifp->hw_addr, RTA_DATA(tb[IFLA_ADDRESS]), -- hw_addr_len); -- -- for (i = 0; i < hw_addr_len; i++) -- if (ifp->hw_addr[i] != 0) -- break; -- -- if (i == hw_addr_len) -- ifp->hw_addr_len = 0; -- else -- ifp->hw_addr_len = hw_addr_len; -- } -+ zlog_warn("Hardware address is too large: %d", -+ hw_addr_len); -+ else -+ dplane_ctx_set_ifp_hw_addr(ctx, hw_addr_len, -+ RTA_DATA(tb[IFLA_ADDRESS])); - } - } - -@@ -251,26 +208,6 @@ static enum zebra_link_type netlink_to_zebra_link_type(unsigned int hwt) - } - } - --static inline void zebra_if_set_ziftype(struct interface *ifp, -- enum zebra_iftype zif_type, -- enum zebra_slave_iftype zif_slave_type) --{ -- struct zebra_if *zif; -- -- zif = (struct zebra_if *)ifp->info; -- zif->zif_slave_type = zif_slave_type; -- -- if (zif->zif_type != zif_type) { -- zif->zif_type = zif_type; -- /* If the if_type has been set to bond initialize ES info -- * against it. XXX - note that we don't handle the case where -- * a zif changes from bond to non-bond; it is really -- * an unexpected/error condition. -- */ -- zebra_evpn_if_init(zif); -- } --} -- - static void netlink_determine_zebra_iftype(const char *kind, - enum zebra_iftype *zif_type) - { -@@ -300,16 +237,11 @@ static void netlink_determine_zebra_iftype(const char *kind, - } - - static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, -- uint32_t ns_id, const char *name) -+ uint32_t ns_id, const char *name, -+ struct zebra_dplane_ctx *ctx) - { -- struct ifinfomsg *ifi; - struct rtattr *linkinfo[IFLA_INFO_MAX + 1]; - struct rtattr *attr[IFLA_VRF_MAX + 1]; -- struct vrf *vrf = NULL; -- struct zebra_vrf *zvrf; -- uint32_t nl_table_id; -- -- ifi = NLMSG_DATA(h); - - netlink_parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb); - -@@ -331,75 +263,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb, - return; - } - -- nl_table_id = *(uint32_t *)RTA_DATA(attr[IFLA_VRF_TABLE]); -- -- if (h->nlmsg_type == RTM_NEWLINK) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("RTM_NEWLINK for VRF %s(%u) table %u", name, -- ifi->ifi_index, nl_table_id); -- -- if (!vrf_lookup_by_id((vrf_id_t)ifi->ifi_index)) { -- vrf_id_t exist_id; -- -- exist_id = -- zebra_vrf_lookup_by_table(nl_table_id, ns_id); -- if (exist_id != VRF_DEFAULT) { -- vrf = vrf_lookup_by_id(exist_id); -- -- flog_err( -- EC_ZEBRA_VRF_MISCONFIGURED, -- "VRF %s id %u table id overlaps existing vrf %s, misconfiguration exiting", -- name, ifi->ifi_index, vrf->name); -- exit(-1); -- } -- } -- -- vrf = vrf_update((vrf_id_t)ifi->ifi_index, name); -- if (!vrf) { -- flog_err(EC_LIB_INTERFACE, "VRF %s id %u not created", -- name, ifi->ifi_index); -- return; -- } -- -- /* -- * This is the only place that we get the actual kernel table_id -- * being used. We need it to set the table_id of the routes -- * we are passing to the kernel.... And to throw some totally -- * awesome parties. that too. -- * -- * At this point we *must* have a zvrf because the vrf_create -- * callback creates one. We *must* set the table id -- * before the vrf_enable because of( at the very least ) -- * static routes being delayed for installation until -- * during the vrf_enable callbacks. -- */ -- zvrf = (struct zebra_vrf *)vrf->info; -- zvrf->table_id = nl_table_id; -- -- /* Enable the created VRF. */ -- if (!vrf_enable(vrf)) { -- flog_err(EC_LIB_INTERFACE, -- "Failed to enable VRF %s id %u", name, -- ifi->ifi_index); -- return; -- } -- -- } else // h->nlmsg_type == RTM_DELLINK -- { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("RTM_DELLINK for VRF %s(%u)", name, -- ifi->ifi_index); -- -- vrf = vrf_lookup_by_id((vrf_id_t)ifi->ifi_index); -- -- if (!vrf) { -- flog_warn(EC_ZEBRA_VRF_NOT_FOUND, "%s: vrf not found", -- __func__); -- return; -- } -- -- vrf_delete(vrf); -- } -+ dplane_ctx_set_ifp_table_id( -+ ctx, *(uint32_t *)RTA_DATA(attr[IFLA_VRF_TABLE])); - } - - static uint32_t get_iflink_speed(struct interface *interface, int *error) -@@ -659,58 +524,120 @@ static int netlink_extract_vxlan_info(struct rtattr *link_data, - * bridge interface is added or updated, take further actions to map - * its members. Likewise, for VxLAN interface. - */ --static void netlink_interface_update_l2info(struct interface *ifp, -+static void netlink_interface_update_l2info(struct zebra_dplane_ctx *ctx, -+ enum zebra_iftype zif_type, - struct rtattr *link_data, int add, - ns_id_t link_nsid) - { -+ struct zebra_l2info_bridge bridge_info; -+ struct zebra_l2info_vlan vlan_info; -+ struct zebra_l2info_vxlan vxlan_info; -+ struct zebra_l2info_gre gre_info; -+ - if (!link_data) - return; - -- if (IS_ZEBRA_IF_BRIDGE(ifp)) { -- struct zebra_l2info_bridge bridge_info; -- -+ switch (zif_type) { -+ case ZEBRA_IF_BRIDGE: - netlink_extract_bridge_info(link_data, &bridge_info); -- zebra_l2_bridge_add_update(ifp, &bridge_info); -- } else if (IS_ZEBRA_IF_VLAN(ifp)) { -- struct zebra_l2info_vlan vlan_info; -- -+ dplane_ctx_set_ifp_bridge_info(ctx, &bridge_info); -+ break; -+ case ZEBRA_IF_VLAN: - netlink_extract_vlan_info(link_data, &vlan_info); -- zebra_l2_vlanif_update(ifp, &vlan_info); -- zebra_evpn_acc_bd_svi_set(ifp->info, NULL, -- !!if_is_operative(ifp)); -- } else if (IS_ZEBRA_IF_VXLAN(ifp)) { -- struct zebra_l2info_vxlan vxlan_info; -- -+ dplane_ctx_set_ifp_vlan_info(ctx, &vlan_info); -+ break; -+ case ZEBRA_IF_VXLAN: - netlink_extract_vxlan_info(link_data, &vxlan_info); - vxlan_info.link_nsid = link_nsid; -- zebra_l2_vxlanif_add_update(ifp, &vxlan_info, add); -- if (link_nsid != NS_UNKNOWN && -- vxlan_info.ifindex_link) -- zebra_if_update_link(ifp, vxlan_info.ifindex_link, -- link_nsid); -- } else if (IS_ZEBRA_IF_GRE(ifp)) { -- struct zebra_l2info_gre gre_info; -- -+ dplane_ctx_set_ifp_vxlan_info(ctx, &vxlan_info); -+ break; -+ case ZEBRA_IF_GRE: - netlink_extract_gre_info(link_data, &gre_info); - gre_info.link_nsid = link_nsid; -- zebra_l2_greif_add_update(ifp, &gre_info, add); -- if (link_nsid != NS_UNKNOWN && -- gre_info.ifindex_link) -- zebra_if_update_link(ifp, gre_info.ifindex_link, -- link_nsid); -+ dplane_ctx_set_ifp_gre_info(ctx, &gre_info); -+ break; -+ case ZEBRA_IF_OTHER: -+ case ZEBRA_IF_VRF: -+ case ZEBRA_IF_MACVLAN: -+ case ZEBRA_IF_VETH: -+ case ZEBRA_IF_BOND: -+ case ZEBRA_IF_BOND_SLAVE: -+ break; - } - } - --static int netlink_bridge_vxlan_update(struct interface *ifp, -- struct rtattr *af_spec) -+#if 0 -+static int -+netlink_bridge_vxlan_vlan_vni_map_update(struct zebra_dplane_ctx *ctx, -+ struct rtattr *af_spec) -+{ -+ int rem; -+ uint16_t flags; -+ struct rtattr *i; -+ struct zebra_vxlan_vni_array *vniarray = NULL; -+ struct zebra_vxlan_vni vni_end; -+ struct zebra_vxlan_vni vni_start; -+ struct rtattr *aftb[IFLA_BRIDGE_VLAN_TUNNEL_MAX + 1]; -+ int32_t count = 0; -+ -+ memset(&vni_start, 0, sizeof(vni_start)); -+ memset(&vni_end, 0, sizeof(vni_end)); -+ -+ for (i = RTA_DATA(af_spec), rem = RTA_PAYLOAD(af_spec); RTA_OK(i, rem); -+ i = RTA_NEXT(i, rem)) { -+ -+ if (i->rta_type != IFLA_BRIDGE_VLAN_TUNNEL_INFO) -+ continue; -+ -+ memset(aftb, 0, sizeof(aftb)); -+ netlink_parse_rtattr_nested(aftb, IFLA_BRIDGE_VLAN_TUNNEL_MAX, -+ i); -+ if (!aftb[IFLA_BRIDGE_VLAN_TUNNEL_ID] || -+ !aftb[IFLA_BRIDGE_VLAN_TUNNEL_VID]) -+ /* vlan-vni info missing */ -+ return 0; -+ -+ count++; -+ flags = 0; -+ vniarray = XREALLOC( -+ MTYPE_TMP, vniarray, -+ sizeof(struct zebra_vxlan_vni_array) + -+ count * sizeof(struct zebra_vxlan_vni)); -+ -+ memset(&vniarray->vnis[count - 1], 0, -+ sizeof(struct zebra_vxlan_vni)); -+ -+ vniarray->vnis[count - 1].vni = -+ *(vni_t *)RTA_DATA(aftb[IFLA_BRIDGE_VLAN_TUNNEL_ID]); -+ vniarray->vnis[count - 1].access_vlan = *(vlanid_t *)RTA_DATA( -+ aftb[IFLA_BRIDGE_VLAN_TUNNEL_VID]); -+ -+ if (aftb[IFLA_BRIDGE_VLAN_TUNNEL_FLAGS]) -+ flags = *(uint16_t *)RTA_DATA( -+ aftb[IFLA_BRIDGE_VLAN_TUNNEL_FLAGS]); -+ -+ vniarray->vnis[count - 1].flags = flags; -+ } -+ -+ if (count) { -+ vniarray->count = count; -+ dplane_ctx_set_ifp_vxlan_vni_array(ctx, vniarray); -+ } -+ return 0; -+} -+#endif -+static int netlink_bridge_vxlan_update(struct zebra_dplane_ctx *ctx, -+ struct rtattr *af_spec) - { - struct rtattr *aftb[IFLA_BRIDGE_MAX + 1]; - struct bridge_vlan_info *vinfo; -- vlanid_t access_vlan; -+ struct zebra_dplane_bridge_vlan_info bvinfo; - - if (!af_spec) - return 0; - -+ //netlink_bridge_vxlan_vlan_vni_map_update(ctx, af_spec); -+ - /* There is a 1-to-1 mapping of VLAN to VxLAN - hence - * only 1 access VLAN is accepted. - */ -@@ -719,119 +646,73 @@ static int netlink_bridge_vxlan_update(struct interface *ifp, - return 0; - - vinfo = RTA_DATA(aftb[IFLA_BRIDGE_VLAN_INFO]); -- if (!(vinfo->flags & BRIDGE_VLAN_INFO_PVID)) -- return 0; -+ bvinfo.flags = vinfo->flags; -+ bvinfo.vid = vinfo->vid; - -- access_vlan = (vlanid_t)vinfo->vid; -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("Access VLAN %u for VxLAN IF %s(%u)", access_vlan, -- ifp->name, ifp->ifindex); -- zebra_l2_vxlanif_update_access_vlan(ifp, access_vlan); -+ dplane_ctx_set_ifp_bridge_vlan_info(ctx, &bvinfo); - return 0; - } - --static void netlink_bridge_vlan_update(struct interface *ifp, -- struct rtattr *af_spec) -+static void netlink_bridge_vlan_update(struct zebra_dplane_ctx *ctx, -+ struct rtattr *af_spec) - { - struct rtattr *i; - int rem; -- uint16_t vid_range_start = 0; -- struct zebra_if *zif; -- bitfield_t old_vlan_bitmap; - struct bridge_vlan_info *vinfo; -- -- zif = (struct zebra_if *)ifp->info; -- -- /* cache the old bitmap addrs */ -- old_vlan_bitmap = zif->vlan_bitmap; -- /* create a new bitmap space for re-eval */ -- bf_init(zif->vlan_bitmap, IF_VLAN_BITMAP_MAX); -+ struct zebra_dplane_bridge_vlan_info_array *bvarray = NULL; -+ int32_t count = 0; - - if (af_spec) { - for (i = RTA_DATA(af_spec), rem = RTA_PAYLOAD(af_spec); - RTA_OK(i, rem); i = RTA_NEXT(i, rem)) { -- - if (i->rta_type != IFLA_BRIDGE_VLAN_INFO) - continue; - -- vinfo = RTA_DATA(i); -- -- if (vinfo->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) { -- vid_range_start = vinfo->vid; -- continue; -- } -+ count++; -+ bvarray = XREALLOC( -+ MTYPE_TMP, bvarray, -+ sizeof(struct -+ zebra_dplane_bridge_vlan_info_array) + -+ count * sizeof(struct -+ zebra_dplane_bridge_vlan_info)); - -- if (!(vinfo->flags & BRIDGE_VLAN_INFO_RANGE_END)) -- vid_range_start = vinfo->vid; -- -- zebra_vlan_bitmap_compute(ifp, vid_range_start, -- vinfo->vid); -+ vinfo = RTA_DATA(i); -+ bvarray->array[count - 1].flags = vinfo->flags; -+ bvarray->array[count - 1].vid = vinfo->vid; - } - } - -- zebra_vlan_mbr_re_eval(ifp, old_vlan_bitmap); -- -- bf_free(old_vlan_bitmap); -+ if (count) { -+ bvarray->count = count; -+ dplane_ctx_set_ifp_bridge_vlan_info_array(ctx, bvarray); -+ } - } - --static int netlink_bridge_interface(struct nlmsghdr *h, int len, ns_id_t ns_id, -- int startup) -+static int netlink_bridge_interface(struct zebra_dplane_ctx *ctx, -+ struct rtattr *af_spec, int startup) - { -- char *name = NULL; -- struct ifinfomsg *ifi; -- struct rtattr *tb[IFLA_MAX + 1]; -- struct interface *ifp; -- struct zebra_if *zif; -- struct rtattr *af_spec; - -- /* Fetch name and ifindex */ -- ifi = NLMSG_DATA(h); -- netlink_parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), len); -- -- if (tb[IFLA_IFNAME] == NULL) -- return -1; -- name = (char *)RTA_DATA(tb[IFLA_IFNAME]); -- -- /* The interface should already be known, if not discard. */ -- ifp = if_lookup_by_index_per_ns(zebra_ns_lookup(ns_id), ifi->ifi_index); -- if (!ifp) { -- zlog_debug("Cannot find bridge IF %s(%u)", name, -- ifi->ifi_index); -- return 0; -- } -- -- /* We are only interested in the access VLAN i.e., AF_SPEC */ -- af_spec = tb[IFLA_AF_SPEC]; -- -- if (IS_ZEBRA_IF_VXLAN(ifp)) -- return netlink_bridge_vxlan_update(ifp, af_spec); -+ netlink_bridge_vxlan_update(ctx, af_spec); - - /* build vlan bitmap associated with this interface if that - * device type is interested in the vlans - */ -- zif = (struct zebra_if *)ifp->info; -- if (bf_is_inited(zif->vlan_bitmap)) -- netlink_bridge_vlan_update(ifp, af_spec); -+ netlink_bridge_vlan_update(ctx, af_spec); - -+ dplane_provider_enqueue_to_zebra(ctx); - return 0; - } - --static bool is_if_protodown_reason_only_frr(uint32_t rc_bitfield) --{ -- return (rc_bitfield == (((uint32_t)1) << if_netlink_get_frr_protodown_r_bit())); --} -- - /* - * Process interface protodown dplane update. - * - * If the interface is an es bond member then it must follow EVPN's - * protodown setting. - */ --static void netlink_proc_dplane_if_protodown(struct zebra_if *zif, -+static void netlink_proc_dplane_if_protodown(struct zebra_dplane_ctx *ctx, - struct rtattr **tb) - { - bool protodown; -- bool old_protodown; - uint32_t rc_bitfield = 0; - struct rtattr *pd_reason_info[IFLA_MAX + 1]; - -@@ -846,59 +727,9 @@ static void netlink_proc_dplane_if_protodown(struct zebra_if *zif, - pd_reason_info[IFLA_PROTO_DOWN_REASON_VALUE]); - } - -- /* -- * Set our reason code to note it wasn't us. -- * If the reason we got from the kernel is ONLY frr though, don't -- * set it. -- */ -- COND_FLAG(zif->protodown_rc, ZEBRA_PROTODOWN_EXTERNAL, -- protodown && rc_bitfield && -- !is_if_protodown_reason_only_frr(rc_bitfield)); -- -- -- old_protodown = !!ZEBRA_IF_IS_PROTODOWN(zif); -- if (protodown == old_protodown) -- return; -- -- if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("interface %s dplane change, protdown %s", -- zif->ifp->name, protodown ? "on" : "off"); -- -- /* Set protodown, respectively */ -- COND_FLAG(zif->flags, ZIF_FLAG_PROTODOWN, protodown); -- -- if (zebra_evpn_is_es_bond_member(zif->ifp)) { -- /* Check it's not already being sent to the dplane first */ -- if (protodown && -- CHECK_FLAG(zif->flags, ZIF_FLAG_SET_PROTODOWN)) { -- if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "bond mbr %s protodown on recv'd but already sent protodown on to the dplane", -- zif->ifp->name); -- return; -- } -- -- if (!protodown && -- CHECK_FLAG(zif->flags, ZIF_FLAG_UNSET_PROTODOWN)) { -- if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "bond mbr %s protodown off recv'd but already sent protodown off to the dplane", -- zif->ifp->name); -- return; -- } -- -- if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "bond mbr %s reinstate protodown %s in the dplane", -- zif->ifp->name, old_protodown ? "on" : "off"); -- -- if (old_protodown) -- SET_FLAG(zif->flags, ZIF_FLAG_SET_PROTODOWN); -- else -- SET_FLAG(zif->flags, ZIF_FLAG_UNSET_PROTODOWN); -- -- dplane_intf_update(zif->ifp); -- } -+ dplane_ctx_set_ifp_rc_bitfield(ctx, rc_bitfield); -+ dplane_ctx_set_ifp_protodown(ctx, protodown); -+ dplane_ctx_set_ifp_protodown_set(ctx, true); - } - - static uint8_t netlink_parse_lacp_bypass(struct rtattr **linkinfo) -@@ -915,29 +746,6 @@ static uint8_t netlink_parse_lacp_bypass(struct rtattr **linkinfo) - return bypass; - } - --/* -- * Only called at startup to cleanup leftover protodown reasons we may -- * have not cleaned up. We leave protodown set though. -- */ --static void if_sweep_protodown(struct zebra_if *zif) --{ -- bool protodown; -- -- protodown = !!ZEBRA_IF_IS_PROTODOWN(zif); -- -- if (!protodown) -- return; -- -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("interface %s sweeping protodown %s reason 0x%x", -- zif->ifp->name, protodown ? "on" : "off", -- zif->protodown_rc); -- -- /* Only clear our reason codes, leave external if it was set */ -- UNSET_FLAG(zif->protodown_rc, ZEBRA_PROTODOWN_ALL); -- dplane_intf_update(zif->ifp); --} -- - /* Request for specific interface or address information from the kernel */ - static int netlink_request_intf_addr(struct nlsock *netlink_cmd, int family, - int type, uint32_t filter_mask) -@@ -984,7 +792,7 @@ int interface_lookup_netlink(struct zebra_ns *zns) - { - int ret; - struct zebra_dplane_info dp_info; -- struct nlsock *netlink_cmd = &zns->netlink_cmd; -+ struct nlsock *netlink_cmd = &zns->netlink_dplane_out; - - /* Capture key info from ns struct */ - zebra_dplane_info_from_zns(&dp_info, zns, true /*is_cmd*/); -@@ -1008,6 +816,13 @@ int interface_lookup_netlink(struct zebra_ns *zns) - if (ret < 0) - return ret; - -+ return ret; -+} -+ -+void interface_list_tunneldump(struct zebra_ns *zns) -+{ -+ int ret; -+ - /* - * So netlink_tunneldump_read will initiate a request - * per tunnel to get data. If we are on a kernel that -@@ -1020,13 +835,12 @@ int interface_lookup_netlink(struct zebra_ns *zns) - */ - ret = netlink_tunneldump_read(zns); - if (ret < 0) -- return ret; -+ return; - -- /* fixup linkages */ -- zebra_if_update_all_links(zns); -- return 0; -+ zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_TUNNELS_READ); - } - -+ - /** - * interface_addr_lookup_netlink() - Look up interface addresses - * -@@ -1046,8 +860,8 @@ static int interface_addr_lookup_netlink(struct zebra_ns *zns) - ret = netlink_request_intf_addr(netlink_cmd, AF_INET, RTM_GETADDR, 0); - if (ret < 0) - return ret; -- ret = netlink_parse_info(netlink_interface_addr, netlink_cmd, &dp_info, -- 0, true); -+ ret = netlink_parse_info(netlink_interface_addr_dplane, netlink_cmd, -+ &dp_info, 0, true); - if (ret < 0) - return ret; - -@@ -1055,8 +869,8 @@ static int interface_addr_lookup_netlink(struct zebra_ns *zns) - ret = netlink_request_intf_addr(netlink_cmd, AF_INET6, RTM_GETADDR, 0); - if (ret < 0) - return ret; -- ret = netlink_parse_info(netlink_interface_addr, netlink_cmd, &dp_info, -- 0, true); -+ ret = netlink_parse_info(netlink_interface_addr_dplane, netlink_cmd, -+ &dp_info, 0, true); - if (ret < 0) - return ret; - -@@ -1616,7 +1430,6 @@ int netlink_interface_addr_dplane(struct nlmsghdr *h, ns_id_t ns_id, - - /* Enqueue ctx for main pthread to process */ - dplane_provider_enqueue_to_zebra(ctx); -- - return 0; - } - -@@ -1626,27 +1439,21 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - struct ifinfomsg *ifi; - struct rtattr *tb[IFLA_MAX + 1]; - struct rtattr *linkinfo[IFLA_MAX + 1]; -- struct interface *ifp; - char *name = NULL; - char *kind = NULL; -- char *desc = NULL; - char *slave_kind = NULL; -- struct zebra_ns *zns; - vrf_id_t vrf_id = VRF_DEFAULT; - enum zebra_iftype zif_type = ZEBRA_IF_OTHER; - enum zebra_slave_iftype zif_slave_type = ZEBRA_IF_SLAVE_NONE; - ifindex_t bridge_ifindex = IFINDEX_INTERNAL; - ifindex_t bond_ifindex = IFINDEX_INTERNAL; - ifindex_t link_ifindex = IFINDEX_INTERNAL; -- uint8_t old_hw_addr[INTERFACE_HWADDR_MAX]; -- struct zebra_if *zif; - ns_id_t link_nsid = ns_id; - ifindex_t master_infindex = IFINDEX_INTERNAL; - uint8_t bypass = 0; - - frrtrace(3, frr_zebra, netlink_interface, h, ns_id, startup); - -- zns = zebra_ns_lookup(ns_id); - ifi = NLMSG_DATA(h); - - /* assume if not default zns, then new VRF */ -@@ -1675,10 +1482,6 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - return -1; - } - -- /* We are interested in some AF_BRIDGE notifications. */ -- if (ifi->ifi_family == AF_BRIDGE) -- return netlink_bridge_interface(h, len, ns_id, startup); -- - /* Looking up interface name. */ - memset(linkinfo, 0, sizeof(linkinfo)); - netlink_parse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(ifi), len, -@@ -1728,18 +1531,47 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - link_nsid = *(ns_id_t *)RTA_DATA(tb[IFLA_LINK_NETNSID]); - link_nsid = ns_id_get_absolute(ns_id, link_nsid); - } -- if (tb[IFLA_IFALIAS]) { -- desc = (char *)RTA_DATA(tb[IFLA_IFALIAS]); -- } - -- /* See if interface is present. */ -- ifp = if_lookup_by_name_per_ns(zns, name); -+ struct zebra_dplane_ctx *ctx = dplane_ctx_alloc(); -+ dplane_ctx_set_ns_id(ctx, ns_id); -+ dplane_ctx_set_ifp_link_nsid(ctx, link_nsid); -+ dplane_ctx_set_ifp_zif_type(ctx, zif_type); -+ dplane_ctx_set_ifindex(ctx, ifi->ifi_index); -+ dplane_ctx_set_ifname(ctx, name); -+ dplane_ctx_set_ifp_startup(ctx, startup); -+ dplane_ctx_set_ifp_family(ctx, ifi->ifi_family); -+ -+ /* We are interested in some AF_BRIDGE notifications. */ -+#ifndef AF_BRIDGE -+#define AF_BRIDGE 7 -+#endif -+ if (ifi->ifi_family == AF_BRIDGE) { -+ dplane_ctx_set_op(ctx, DPLANE_OP_INTF_INSTALL); -+ return netlink_bridge_interface(ctx, tb[IFLA_AF_SPEC], startup); -+ } - - if (h->nlmsg_type == RTM_NEWLINK) { -+ dplane_ctx_set_ifp_link_ifindex(ctx, link_ifindex); -+ dplane_ctx_set_op(ctx, DPLANE_OP_INTF_INSTALL); -+ dplane_ctx_set_status(ctx, ZEBRA_DPLANE_REQUEST_QUEUED); -+ if (tb[IFLA_IFALIAS]) { -+ dplane_ctx_set_ifp_desc(ctx, -+ RTA_DATA(tb[IFLA_IFALIAS])); -+ } -+ if (!tb[IFLA_MTU]) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK for interface %s(%u) without MTU set", -+ name, ifi->ifi_index); -+ return 0; -+ } -+ dplane_ctx_set_ifp_mtu(ctx, *(int *)RTA_DATA(tb[IFLA_MTU])); -+ - /* If VRF, create or update the VRF structure itself. */ - if (zif_type == ZEBRA_IF_VRF && !vrf_is_backend_netns()) { -- netlink_vrf_change(h, tb[IFLA_LINKINFO], ns_id, name); -- vrf_id = (vrf_id_t)ifi->ifi_index; -+ netlink_vrf_change(h, tb[IFLA_LINKINFO], ns_id, name, -+ ctx); -+ vrf_id = ifi->ifi_index; - } - - if (tb[IFLA_MASTER]) { -@@ -1762,279 +1594,45 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) - } else - zif_slave_type = ZEBRA_IF_SLAVE_OTHER; - } -+ dplane_ctx_set_ifp_zif_slave_type(ctx, zif_slave_type); -+ dplane_ctx_set_ifp_vrf_id(ctx, vrf_id); -+ dplane_ctx_set_ifp_master_ifindex(ctx, master_infindex); -+ dplane_ctx_set_ifp_bridge_ifindex(ctx, bridge_ifindex); -+ dplane_ctx_set_ifp_bond_ifindex(ctx, bond_ifindex); -+ dplane_ctx_set_ifp_bypass(ctx, bypass); -+ dplane_ctx_set_ifp_zltype( -+ ctx, netlink_to_zebra_link_type(ifi->ifi_type)); -+ - if (vrf_is_backend_netns()) -- vrf_id = (vrf_id_t)ns_id; -- if (ifp == NULL -- || !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_ACTIVE)) { -- /* Add interface notification from kernel */ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_NEWLINK ADD for %s(%u) vrf_id %u type %d sl_type %d master %u flags 0x%x", -- name, ifi->ifi_index, vrf_id, zif_type, -- zif_slave_type, master_infindex, -- ifi->ifi_flags); -- -- if (ifp == NULL) { -- /* unknown interface */ -- ifp = if_get_by_name(name, vrf_id, NULL); -- } else { -- /* pre-configured interface, learnt now */ -- if (ifp->vrf->vrf_id != vrf_id) -- if_update_to_new_vrf(ifp, vrf_id); -- } -- -- /* Update interface information. */ -- set_ifindex(ifp, ifi->ifi_index, zns); -- ifp->flags = ifi->ifi_flags & 0x0000fffff; -- if (!tb[IFLA_MTU]) { -- zlog_debug( -- "RTM_NEWLINK for interface %s(%u) without MTU set", -- name, ifi->ifi_index); -- return 0; -- } -- ifp->mtu6 = ifp->mtu = *(int *)RTA_DATA(tb[IFLA_MTU]); -- ifp->metric = 0; -- ifp->speed = get_iflink_speed(ifp, NULL); -- ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN; -- -- /* Set interface type */ -- zebra_if_set_ziftype(ifp, zif_type, zif_slave_type); -- if (IS_ZEBRA_IF_VRF(ifp)) -- SET_FLAG(ifp->status, -- ZEBRA_INTERFACE_VRF_LOOPBACK); -- -- /* Update link. */ -- zebra_if_update_link(ifp, link_ifindex, link_nsid); -- -- /* -- * Just set the @link/lower-device ifindex. During -- * nldump interfaces are not ordered in any fashion so -- * we may end up getting upper devices before lower -- * devices. We will setup the real linkage once the dump -- * is complete. -- */ -- zif = (struct zebra_if *)ifp->info; -- zif->link_ifindex = link_ifindex; -- -- ifp->ll_type = -- netlink_to_zebra_link_type(ifi->ifi_type); -- netlink_interface_update_hw_addr(tb, ifp); -- -- /* Inform clients, install any configured addresses. */ -- if_add_update(ifp); -- -- /* Extract and save L2 interface information, take -- * additional actions. */ -- netlink_interface_update_l2info( -- ifp, linkinfo[IFLA_INFO_DATA], -- 1, link_nsid); -- if (IS_ZEBRA_IF_BOND(ifp)) -- zebra_l2if_update_bond(ifp, true); -- if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) -- zebra_l2if_update_bridge_slave( -- ifp, bridge_ifindex, ns_id, -- ZEBRA_BRIDGE_NO_ACTION); -- else if (IS_ZEBRA_IF_BOND_SLAVE(ifp)) -- zebra_l2if_update_bond_slave(ifp, bond_ifindex, -- !!bypass); -- -- if (tb[IFLA_PROTO_DOWN]) { -- netlink_proc_dplane_if_protodown(ifp->info, tb); -- if (startup) -- if_sweep_protodown(zif); -- } -- if (IS_ZEBRA_IF_BRIDGE(ifp)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_NEWLINK ADD for %s(%u), vlan-aware %d", -- name, ifp->ifindex, -- IS_ZEBRA_IF_BRIDGE_VLAN_AWARE( -- zif)); -- } -- } else if (ifp->vrf->vrf_id != vrf_id) { -- /* VRF change for an interface. */ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_NEWLINK vrf-change for %s(%u) vrf_id %u -> %u flags 0x%x", -- name, ifp->ifindex, ifp->vrf->vrf_id, -- vrf_id, ifi->ifi_flags); -+ dplane_ctx_set_ifp_vrf_id(ctx, ns_id); - -- if_handle_vrf_change(ifp, vrf_id); -- } else { -- bool was_bridge_slave, was_bond_slave; -- uint8_t chgflags = ZEBRA_BRIDGE_NO_ACTION; -- zif = ifp->info; -+ dplane_ctx_set_ifp_flags(ctx, ifi->ifi_flags & 0x0000fffff); - -- /* Interface update. */ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_NEWLINK update for %s(%u) sl_type %d master %u flags 0x%x", -- name, ifp->ifindex, zif_slave_type, -- master_infindex, ifi->ifi_flags); -+ if (tb[IFLA_PROTO_DOWN]) { -+ dplane_ctx_set_ifp_protodown_set(ctx, true); -+ netlink_proc_dplane_if_protodown(ctx, tb); -+ } else -+ dplane_ctx_set_ifp_protodown_set(ctx, false); - -- set_ifindex(ifp, ifi->ifi_index, zns); -- if (!tb[IFLA_MTU]) { -- zlog_debug( -- "RTM_NEWLINK for interface %s(%u) without MTU set", -- name, ifi->ifi_index); -- return 0; -- } -- ifp->mtu6 = ifp->mtu = *(int *)RTA_DATA(tb[IFLA_MTU]); -- ifp->metric = 0; -- -- /* Update interface type - NOTE: Only slave_type can -- * change. */ -- was_bridge_slave = IS_ZEBRA_IF_BRIDGE_SLAVE(ifp); -- was_bond_slave = IS_ZEBRA_IF_BOND_SLAVE(ifp); -- zebra_if_set_ziftype(ifp, zif_type, zif_slave_type); -- -- memcpy(old_hw_addr, ifp->hw_addr, INTERFACE_HWADDR_MAX); -- -- /* Update link. */ -- zebra_if_update_link(ifp, link_ifindex, link_nsid); -- -- ifp->ll_type = -- netlink_to_zebra_link_type(ifi->ifi_type); -- netlink_interface_update_hw_addr(tb, ifp); -- -- if (tb[IFLA_PROTO_DOWN]) -- netlink_proc_dplane_if_protodown(ifp->info, tb); -- -- if (if_is_no_ptm_operative(ifp)) { -- bool is_up = if_is_operative(ifp); -- ifp->flags = ifi->ifi_flags & 0x0000fffff; -- if (!if_is_no_ptm_operative(ifp) || -- CHECK_FLAG(zif->flags, -- ZIF_FLAG_PROTODOWN)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Intf %s(%u) has gone DOWN", -- name, ifp->ifindex); -- if_down(ifp); -- rib_update(RIB_UPDATE_KERNEL); -- } else if (if_is_operative(ifp)) { -- bool mac_updated = false; -- -- /* Must notify client daemons of new -- * interface status. */ -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Intf %s(%u) PTM up, notifying clients", -- name, ifp->ifindex); -- if_up(ifp, !is_up); -- -- /* Update EVPN VNI when SVI MAC change -- */ -- if (memcmp(old_hw_addr, ifp->hw_addr, -- INTERFACE_HWADDR_MAX)) -- mac_updated = true; -- if (IS_ZEBRA_IF_VLAN(ifp) -- && mac_updated) { -- struct interface *link_if; -- -- link_if = -- if_lookup_by_index_per_ns( -- zebra_ns_lookup(NS_DEFAULT), -- link_ifindex); -- if (link_if) -- zebra_vxlan_svi_up(ifp, -- link_if); -- } else if (mac_updated -- && IS_ZEBRA_IF_BRIDGE(ifp)) { -- zlog_debug( -- "Intf %s(%u) bridge changed MAC address", -- name, ifp->ifindex); -- chgflags = -- ZEBRA_BRIDGE_MASTER_MAC_CHANGE; -- } -- } -- } else { -- ifp->flags = ifi->ifi_flags & 0x0000fffff; -- if (if_is_operative(ifp) && -- !CHECK_FLAG(zif->flags, -- ZIF_FLAG_PROTODOWN)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Intf %s(%u) has come UP", -- name, ifp->ifindex); -- if_up(ifp, true); -- if (IS_ZEBRA_IF_BRIDGE(ifp)) -- chgflags = -- ZEBRA_BRIDGE_MASTER_UP; -- } else { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "Intf %s(%u) has gone DOWN", -- name, ifp->ifindex); -- if_down(ifp); -- rib_update(RIB_UPDATE_KERNEL); -- } -- } -- -- /* Extract and save L2 interface information, take -- * additional actions. */ -- netlink_interface_update_l2info( -- ifp, linkinfo[IFLA_INFO_DATA], -- 0, link_nsid); -- if (IS_ZEBRA_IF_BRIDGE(ifp)) -- zebra_l2if_update_bridge(ifp, chgflags); -- if (IS_ZEBRA_IF_BOND(ifp)) -- zebra_l2if_update_bond(ifp, true); -- if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp) || was_bridge_slave) -- zebra_l2if_update_bridge_slave( -- ifp, bridge_ifindex, ns_id, chgflags); -- else if (IS_ZEBRA_IF_BOND_SLAVE(ifp) || was_bond_slave) -- zebra_l2if_update_bond_slave(ifp, bond_ifindex, -- !!bypass); -- if (IS_ZEBRA_IF_BRIDGE(ifp)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_NEWLINK update for %s(%u), vlan-aware %d", -- name, ifp->ifindex, -- IS_ZEBRA_IF_BRIDGE_VLAN_AWARE( -- zif)); -- } -- } -+ netlink_interface_update_hw_addr(tb, ctx); - -- zif = ifp->info; -- if (zif) { -- XFREE(MTYPE_ZIF_DESC, zif->desc); -- if (desc) -- zif->desc = XSTRDUP(MTYPE_ZIF_DESC, desc); -- } -+ /* Extract and save L2 interface information, take -+ * additional actions. */ -+ netlink_interface_update_l2info( -+ ctx, zif_type, linkinfo[IFLA_INFO_DATA], 1, link_nsid); - } else { -- /* Delete interface notification from kernel */ -- if (ifp == NULL) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "RTM_DELLINK for unknown interface %s(%u)", -- name, ifi->ifi_index); -- return 0; -- } -- - if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug("RTM_DELLINK for %s(%u)", name, -- ifp->ifindex); -- -- UNSET_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK); -- -- if (IS_ZEBRA_IF_BOND(ifp)) -- zebra_l2if_update_bond(ifp, false); -- if (IS_ZEBRA_IF_BOND_SLAVE(ifp)) -- zebra_l2if_update_bond_slave(ifp, bond_ifindex, false); -- /* Special handling for bridge or VxLAN interfaces. */ -- if (IS_ZEBRA_IF_BRIDGE(ifp)) -- zebra_l2_bridge_del(ifp); -- else if (IS_ZEBRA_IF_VXLAN(ifp)) -- zebra_l2_vxlanif_del(ifp); -- -- if_delete_update(&ifp); -- -- /* If VRF, delete the VRF structure itself. */ -- if (zif_type == ZEBRA_IF_VRF && !vrf_is_backend_netns()) -- netlink_vrf_change(h, tb[IFLA_LINKINFO], ns_id, name); -+ zlog_debug("RTM_DELLINK for %s(%u), enqueuing to zebra", -+ name, ifi->ifi_index); -+ -+ dplane_ctx_set_op(ctx, DPLANE_OP_INTF_DELETE); -+ dplane_ctx_set_status(ctx, ZEBRA_DPLANE_REQUEST_QUEUED); -+ -+ dplane_ctx_set_ifp_bond_ifindex(ctx, bond_ifindex); - } - -+ dplane_provider_enqueue_to_zebra(ctx); -+ - return 0; - } - -@@ -2111,6 +1709,13 @@ ssize_t netlink_intf_msg_encode(uint16_t cmd, - void interface_list(struct zebra_ns *zns) - { - interface_lookup_netlink(zns); -+ -+ zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_INTERFACES_READ); -+} -+ -+void interface_list_second(struct zebra_ns *zns) -+{ -+ zebra_if_update_all_links(zns); - /* We add routes for interface address, - * so we need to get the nexthop info - * from the kernel before we can do that -@@ -2118,6 +1723,8 @@ void interface_list(struct zebra_ns *zns) - netlink_nexthop_read(zns); - - interface_addr_lookup_netlink(zns); -+ -+ zebra_dplane_startup_stage(zns, ZEBRA_DPLANE_ADDRESSES_READ); - } - - /** -diff --git a/zebra/interface.c b/zebra/interface.c -index a05b9690ef..bfe7a06896 100644 ---- a/zebra/interface.c -+++ b/zebra/interface.c -@@ -1298,6 +1298,9 @@ static void zebra_if_addr_update_ctx(struct zebra_dplane_ctx *ctx, - const struct prefix *addr, *dest = NULL; - enum dplane_op_e op; - -+ if (!ifp) -+ return; -+ - op = dplane_ctx_get_op(ctx); - addr = dplane_ctx_get_intf_addr(ctx); - -@@ -1416,6 +1419,13 @@ static void zebra_if_netconf_update_ctx(struct zebra_dplane_ctx *ctx, - enum dplane_netconf_status_e mpls, mcast_on, linkdown; - bool *mcast_set, *linkdown_set; - -+ if (!ifp && ifindex != -1 && ifindex != -2) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug("%s: Can't find ifp(%u)", __func__, ifindex); -+ -+ return; -+ } -+ - afi = dplane_ctx_get_afi(ctx); - mpls = dplane_ctx_get_netconf_mpls(ctx); - linkdown = dplane_ctx_get_netconf_linkdown(ctx); -@@ -1485,6 +1495,686 @@ static void zebra_if_netconf_update_ctx(struct zebra_dplane_ctx *ctx, - (*linkdown_set ? "ON" : "OFF")); - } - -+static void interface_vrf_change(enum dplane_op_e op, ifindex_t ifindex, -+ const char *name, uint32_t tableid, -+ ns_id_t ns_id) -+{ -+ struct vrf *vrf; -+ struct zebra_vrf *zvrf = NULL; -+ -+ if (op == DPLANE_OP_INTF_DELETE) { -+ if (IS_ZEBRA_DEBUG_DPLANE) -+ zlog_debug("DPLANE_OP_INTF_DELETE for VRF %s(%u)", name, -+ ifindex); -+ -+ vrf = vrf_lookup_by_id((vrf_id_t)ifindex); -+ if (!vrf) { -+ flog_warn(EC_ZEBRA_VRF_NOT_FOUND, -+ "%s(%u): vrf not found", name, ifindex); -+ return; -+ } -+ -+ vrf_delete(vrf); -+ } else { -+ if (IS_ZEBRA_DEBUG_DPLANE) -+ zlog_debug( -+ "DPLANE_OP_INTF_UPDATE for VRF %s(%u) table %u", -+ name, ifindex, tableid); -+ -+ if (!vrf_lookup_by_id((vrf_id_t)ifindex)) { -+ vrf_id_t exist_id; -+ -+ exist_id = zebra_vrf_lookup_by_table(tableid, ns_id); -+ if (exist_id != VRF_DEFAULT) { -+ vrf = vrf_lookup_by_id(exist_id); -+ -+ flog_err( -+ EC_ZEBRA_VRF_MISCONFIGURED, -+ "VRF %s id %u table id overlaps existing vrf %s(%d), misconfiguration exiting", -+ name, ifindex, vrf->name, vrf->vrf_id); -+ exit(-1); -+ } -+ } -+ -+ vrf = vrf_update((vrf_id_t)ifindex, name); -+ if (!vrf) { -+ flog_err(EC_LIB_INTERFACE, "VRF %s id %u not created", -+ name, ifindex); -+ return; -+ } -+ -+ /* -+ * This is the only place that we get the actual kernel table_id -+ * being used. We need it to set the table_id of the routes -+ * we are passing to the kernel.... And to throw some totally -+ * awesome parties. that too. -+ * -+ * At this point we *must* have a zvrf because the vrf_create -+ * callback creates one. We *must* set the table id -+ * before the vrf_enable because of( at the very least ) -+ * static routes being delayed for installation until -+ * during the vrf_enable callbacks. -+ */ -+ zvrf = (struct zebra_vrf *)vrf->info; -+ zvrf->table_id = tableid; -+ -+ /* Enable the created VRF. */ -+ if (!vrf_enable(vrf)) { -+ flog_err(EC_LIB_INTERFACE, -+ "Failed to enable VRF %s id %u", name, -+ ifindex); -+ return; -+ } -+ } -+} -+ -+/* -+ * Note: on netlink systems, there should be a 1-to-1 mapping -+ * between interface names and ifindex values. -+ */ -+static void set_ifindex(struct interface *ifp, ifindex_t ifi_index, -+ struct zebra_ns *zns) -+{ -+ struct interface *oifp; -+ -+ oifp = if_lookup_by_index_per_ns(zns, ifi_index); -+ if ((oifp != NULL) && (oifp != ifp)) { -+ if (ifi_index == IFINDEX_INTERNAL) -+ flog_err( -+ EC_LIB_INTERFACE, -+ "Netlink is setting interface %s ifindex to reserved internal value %u", -+ ifp->name, ifi_index); -+ else { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "interface index %d was renamed from %s to %s", -+ ifi_index, oifp->name, ifp->name); -+ if (if_is_up(oifp)) -+ flog_err( -+ EC_LIB_INTERFACE, -+ "interface rename detected on up interface: index %d was renamed from %s to %s, results are uncertain!", -+ ifi_index, oifp->name, ifp->name); -+ if_delete_update(&oifp); -+ } -+ } -+ if_set_index(ifp, ifi_index); -+} -+ -+static inline void zebra_if_set_ziftype(struct interface *ifp, -+ enum zebra_iftype zif_type, -+ enum zebra_slave_iftype zif_slave_type) -+{ -+ struct zebra_if *zif; -+ -+ zif = (struct zebra_if *)ifp->info; -+ zif->zif_slave_type = zif_slave_type; -+ -+ if (zif->zif_type != zif_type) { -+ zif->zif_type = zif_type; -+ /* If the if_type has been set to bond initialize ES info -+ * against it. XXX - note that we don't handle the case where -+ * a zif changes from bond to non-bond; it is really -+ * an unexpected/error condition. -+ */ -+ zebra_evpn_if_init(zif); -+ } -+} -+ -+static void interface_update_hw_addr(struct zebra_dplane_ctx *ctx, -+ struct interface *ifp) -+{ -+ int i; -+ -+ ifp->hw_addr_len = dplane_ctx_get_ifp_hw_addr_len(ctx); -+ memcpy(ifp->hw_addr, dplane_ctx_get_ifp_hw_addr(ctx), ifp->hw_addr_len); -+ -+ for (i = 0; i < ifp->hw_addr_len; i++) -+ if (ifp->hw_addr[i] != 0) -+ break; -+ -+ if (i == ifp->hw_addr_len) -+ ifp->hw_addr_len = 0; -+} -+ -+static void interface_update_l2info(struct zebra_dplane_ctx *ctx, -+ struct interface *ifp, -+ enum zebra_iftype zif_type, int add, -+ ns_id_t link_nsid) -+{ -+ const struct zebra_l2info_vxlan *vxlan_info; -+ const struct zebra_l2info_gre *gre_info; -+ -+ switch (zif_type) { -+ case ZEBRA_IF_BRIDGE: -+ zebra_l2_bridge_add_update(ifp, -+ dplane_ctx_get_ifp_bridge_info(ctx)); -+ break; -+ case ZEBRA_IF_VLAN: -+ zebra_l2_vlanif_update(ifp, dplane_ctx_get_ifp_vlan_info(ctx)); -+ zebra_evpn_acc_bd_svi_set(ifp->info, NULL, -+ !!if_is_operative(ifp)); -+ break; -+ case ZEBRA_IF_VXLAN: -+ vxlan_info = dplane_ctx_get_ifp_vxlan_info(ctx); -+ zebra_l2_vxlanif_add_update(ifp, vxlan_info, add); -+ if (link_nsid != NS_UNKNOWN && vxlan_info->ifindex_link) -+ zebra_if_update_link(ifp, vxlan_info->ifindex_link, -+ link_nsid); -+ break; -+ case ZEBRA_IF_GRE: -+ gre_info = dplane_ctx_get_ifp_gre_info(ctx); -+ zebra_l2_greif_add_update(ifp, gre_info, add); -+ if (link_nsid != NS_UNKNOWN && gre_info->ifindex_link) -+ zebra_if_update_link(ifp, gre_info->ifindex_link, -+ link_nsid); -+ break; -+ case ZEBRA_IF_OTHER: -+ case ZEBRA_IF_VRF: -+ case ZEBRA_IF_MACVLAN: -+ case ZEBRA_IF_VETH: -+ case ZEBRA_IF_BOND: -+ case ZEBRA_IF_BOND_SLAVE: -+ break; -+ } -+} -+ -+static bool is_if_protodown_reason_only_frr(uint32_t rc_bitfield) -+{ -+ uint8_t frr_protodown_r_bit = if_netlink_get_frr_protodown_r_bit(); -+ -+ return (rc_bitfield == (((uint32_t)1) << frr_protodown_r_bit)); -+} -+ -+static void interface_if_protodown(struct interface *ifp, bool protodown, -+ uint32_t rc_bitfield) -+{ -+ struct zebra_if *zif = ifp->info; -+ bool old_protodown; -+ -+ /* -+ * Set our reason code to note it wasn't us. -+ * If the reason we got from the kernel is ONLY frr though, don't -+ * set it. -+ */ -+ COND_FLAG(zif->protodown_rc, ZEBRA_PROTODOWN_EXTERNAL, -+ protodown && rc_bitfield && -+ !is_if_protodown_reason_only_frr(rc_bitfield)); -+ -+ -+ old_protodown = !!ZEBRA_IF_IS_PROTODOWN(zif); -+ if (protodown == old_protodown) -+ return; -+ -+ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_DPLANE) -+ zlog_debug("interface %s dplane change, protodown %s", -+ ifp->name, protodown ? "on" : "off"); -+ -+ /* Set protodown, respectively */ -+ COND_FLAG(zif->flags, ZIF_FLAG_PROTODOWN, protodown); -+ -+ if (zebra_evpn_is_es_bond_member(ifp)) { -+ /* Check it's not already being sent to the dplane first */ -+ if (protodown && -+ CHECK_FLAG(zif->flags, ZIF_FLAG_SET_PROTODOWN)) { -+ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "bond mbr %s protodown on recv'd but already sent protodown on to the dplane", -+ ifp->name); -+ return; -+ } -+ -+ if (!protodown && -+ CHECK_FLAG(zif->flags, ZIF_FLAG_UNSET_PROTODOWN)) { -+ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "bond mbr %s protodown off recv'd but already sent protodown off to the dplane", -+ ifp->name); -+ return; -+ } -+ -+ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "bond mbr %s reinstate protodown %s in the dplane", -+ ifp->name, old_protodown ? "on" : "off"); -+ -+ if (old_protodown) -+ SET_FLAG(zif->flags, ZIF_FLAG_SET_PROTODOWN); -+ else -+ SET_FLAG(zif->flags, ZIF_FLAG_UNSET_PROTODOWN); -+ -+ dplane_intf_update(zif->ifp); -+ } -+} -+ -+static void if_sweep_protodown(struct zebra_if *zif) -+{ -+ bool protodown; -+ -+ protodown = !!ZEBRA_IF_IS_PROTODOWN(zif); -+ -+ if (!protodown) -+ return; -+ -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug("interface %s sweeping protodown %s reason 0x%x", -+ zif->ifp->name, protodown ? "on" : "off", -+ zif->protodown_rc); -+ -+ /* Only clear our reason codes, leave external if it was set */ -+ UNSET_FLAG(zif->protodown_rc, ZEBRA_PROTODOWN_ALL); -+ dplane_intf_update(zif->ifp); -+} -+ -+static void interface_bridge_vxlan_update(struct zebra_dplane_ctx *ctx, -+ struct interface *ifp) -+{ -+ const struct zebra_dplane_bridge_vlan_info *bvinfo; -+ -+ bvinfo = dplane_ctx_get_ifp_bridge_vlan_info(ctx); -+ -+ if (!(bvinfo->flags & DPLANE_BRIDGE_VLAN_INFO_PVID)) -+ return; -+ -+ if (IS_ZEBRA_DEBUG_DPLANE) -+ zlog_debug("Access VLAN %u for VxLAN IF %s(%u)", bvinfo->vid, -+ ifp->name, ifp->ifindex); -+ -+ zebra_l2_vxlanif_update_access_vlan(ifp, bvinfo->vid); -+} -+ -+static void interface_bridge_vlan_update(struct zebra_dplane_ctx *ctx, -+ struct interface *ifp) -+{ -+ struct zebra_if *zif = ifp->info; -+ const struct zebra_dplane_bridge_vlan_info_array *bvarray; -+ struct zebra_dplane_bridge_vlan_info bvinfo; -+ bitfield_t old_vlan_bitmap; -+ uint16_t vid_range_start = 0; -+ int32_t i; -+ -+ /* cache the old bitmap addrs */ -+ old_vlan_bitmap = zif->vlan_bitmap; -+ /* create a new bitmap space for re-eval */ -+ bf_init(zif->vlan_bitmap, IF_VLAN_BITMAP_MAX); -+ -+ /* Could we have multiple bridge vlan infos? */ -+ bvarray = dplane_ctx_get_ifp_bridge_vlan_info_array(ctx); -+ if (!bvarray) -+ return; -+ -+ for (i = 0; i < bvarray->count; i++) { -+ bvinfo = bvarray->array[i]; -+ -+ if (bvinfo.flags & DPLANE_BRIDGE_VLAN_INFO_RANGE_BEGIN) { -+ vid_range_start = bvinfo.vid; -+ continue; -+ } -+ -+ if (!(bvinfo.flags & DPLANE_BRIDGE_VLAN_INFO_RANGE_END)) -+ vid_range_start = bvinfo.vid; -+ -+ zebra_vlan_bitmap_compute(ifp, vid_range_start, bvinfo.vid); -+ } -+ -+ zebra_vlan_mbr_re_eval(ifp, old_vlan_bitmap); -+ bf_free(old_vlan_bitmap); -+} -+ -+static void interface_bridge_handling(struct zebra_dplane_ctx *ctx, -+ struct interface *ifp, -+ enum zebra_iftype zif_type) -+{ -+ struct zebra_if *zif; -+ -+ if (!ifp) { -+ zlog_warn("Cannot find bridge if %s(%u)", -+ dplane_ctx_get_ifname(ctx), -+ dplane_ctx_get_ifindex(ctx)); -+ return; -+ } -+ -+ if (IS_ZEBRA_IF_VXLAN(ifp)) -+ return interface_bridge_vxlan_update(ctx, ifp); -+ -+ /* -+ * build vlan bitmap associated with this interface if that -+ * device type is interested in the vlans -+ */ -+ zif = ifp->info; -+ if (bf_is_inited(zif->vlan_bitmap)) -+ interface_bridge_vlan_update(ctx, ifp); -+} -+ -+static void zebra_if_dplane_ifp_handling(struct zebra_dplane_ctx *ctx) -+{ -+ enum dplane_op_e op = dplane_ctx_get_op(ctx); -+ const char *name = dplane_ctx_get_ifname(ctx); -+ ns_id_t ns_id = dplane_ctx_get_ns_id(ctx); -+ ifindex_t ifindex = dplane_ctx_get_ifindex(ctx); -+ ifindex_t bond_ifindex = dplane_ctx_get_ifp_bond_ifindex(ctx); -+ uint32_t tableid = dplane_ctx_get_ifp_table_id(ctx); -+ enum zebra_iftype zif_type = dplane_ctx_get_ifp_zif_type(ctx); -+ struct interface *ifp; -+ struct zebra_ns *zns; -+ -+ zns = zebra_ns_lookup(ns_id); -+ if (!zns) { -+ zlog_err("Where is our namespace?"); -+ return; -+ } -+ -+ if (IS_ZEBRA_DEBUG_DPLANE) -+ zlog_debug("%s for %s(%u)", dplane_op2str(op), name, ifindex); -+ -+ ifp = if_lookup_by_name_per_ns(zns, name); -+ if (op == DPLANE_OP_INTF_DELETE) { -+ /* Delete interface notification from kernel */ -+ if (ifp == NULL) { -+ if (IS_ZEBRA_DEBUG_EVENT) -+ zlog_debug( -+ "Delete LINK received for unknown interface %s(%u)", -+ name, ifindex); -+ return; -+ } -+ -+ if (IS_ZEBRA_IF_BOND(ifp)) -+ zebra_l2if_update_bond(ifp, false); -+ if (IS_ZEBRA_IF_BOND_SLAVE(ifp)) -+ zebra_l2if_update_bond_slave(ifp, bond_ifindex, false); -+ /* Special handling for bridge or VxLAN interfaces. */ -+ if (IS_ZEBRA_IF_BRIDGE(ifp)) -+ zebra_l2_bridge_del(ifp); -+ else if (IS_ZEBRA_IF_VXLAN(ifp)) -+ zebra_l2_vxlanif_del(ifp); -+ -+ if_delete_update(&ifp); -+ -+ if (zif_type == ZEBRA_IF_VRF && !vrf_is_backend_netns()) -+ interface_vrf_change(op, ifindex, name, tableid, ns_id); -+ } else { -+ ifindex_t master_ifindex, bridge_ifindex, bond_ifindex, -+ link_ifindex; -+ enum zebra_slave_iftype zif_slave_type; -+ uint8_t bypass; -+ uint64_t flags; -+ vrf_id_t vrf_id; -+ uint32_t mtu; -+ ns_id_t link_nsid; -+ struct zebra_if *zif; -+ bool protodown, protodown_set, startup; -+ uint32_t rc_bitfield; -+ uint8_t old_hw_addr[INTERFACE_HWADDR_MAX]; -+ char *desc; -+ uint8_t family; -+ -+ /* If VRF, create or update the VRF structure itself. */ -+ if (zif_type == ZEBRA_IF_VRF && !vrf_is_backend_netns()) -+ interface_vrf_change(op, ifindex, name, tableid, ns_id); -+ -+ master_ifindex = dplane_ctx_get_ifp_master_ifindex(ctx); -+ zif_slave_type = dplane_ctx_get_ifp_zif_slave_type(ctx); -+ bridge_ifindex = dplane_ctx_get_ifp_bridge_ifindex(ctx); -+ bond_ifindex = dplane_ctx_get_ifp_bond_ifindex(ctx); -+ bypass = dplane_ctx_get_ifp_bypass(ctx); -+ flags = dplane_ctx_get_ifp_flags(ctx); -+ vrf_id = dplane_ctx_get_ifp_vrf_id(ctx); -+ mtu = dplane_ctx_get_ifp_mtu(ctx); -+ link_ifindex = dplane_ctx_get_ifp_link_ifindex(ctx); -+ link_nsid = dplane_ctx_get_ifp_link_nsid(ctx); -+ protodown_set = dplane_ctx_get_ifp_protodown_set(ctx); -+ protodown = dplane_ctx_get_ifp_protodown(ctx); -+ rc_bitfield = dplane_ctx_get_ifp_rc_bitfield(ctx); -+ startup = dplane_ctx_get_ifp_startup(ctx); -+ desc = dplane_ctx_get_ifp_desc(ctx); -+ family = dplane_ctx_get_ifp_family(ctx); -+ -+#ifndef AF_BRIDGE -+ /* -+ * Work around to make free bsd happy at the moment -+ */ -+#define AF_BRIDGE 7 -+#endif -+ if (family == AF_BRIDGE) -+ return interface_bridge_handling(ctx, ifp, zif_type); -+ -+ if (ifp == NULL || -+ !CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_ACTIVE)) { -+ /* Add interface notification from kernel */ -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK ADD for %s(%u) vrf_id %u type %d sl_type %d master %u", -+ name, ifindex, vrf_id, zif_type, -+ zif_slave_type, master_ifindex); -+ -+ if (ifp == NULL) { -+ /* unknown interface */ -+ ifp = if_get_by_name(name, vrf_id, NULL); -+ } else { -+ /* pre-configured interface, learnt now */ -+ if (ifp->vrf->vrf_id != vrf_id) -+ if_update_to_new_vrf(ifp, vrf_id); -+ } -+ -+ /* Update interface information. */ -+ set_ifindex(ifp, ifindex, zns); -+ ifp->flags = flags; -+ ifp->mtu6 = ifp->mtu = mtu; -+ ifp->metric = 0; -+ ifp->speed = kernel_get_speed(ifp, NULL); -+ ifp->ptm_status = ZEBRA_PTM_STATUS_UNKNOWN; -+ -+ /* Set interface type */ -+ zebra_if_set_ziftype(ifp, zif_type, zif_slave_type); -+ if (IS_ZEBRA_IF_VRF(ifp)) -+ SET_FLAG(ifp->status, -+ ZEBRA_INTERFACE_VRF_LOOPBACK); -+ -+ /* Update link. */ -+ zebra_if_update_link(ifp, link_ifindex, link_nsid); -+ -+ /* -+ * Just set the @link/lower-device ifindex. During -+ * nldump interfaces are not ordered in any fashion so -+ * we may end up getting upper devices before lower -+ * devices. We will setup the real linkage once the dump -+ * is complete. -+ */ -+ zif = (struct zebra_if *)ifp->info; -+ zif->link_ifindex = link_ifindex; -+ -+ ifp->ll_type = dplane_ctx_get_ifp_zltype(ctx); -+ interface_update_hw_addr(ctx, ifp); -+ -+ /* Inform clients, install any configured addresses. */ -+ if_add_update(ifp); -+ -+ /* -+ * Extract and save L2 interface information, take -+ * additional actions. -+ */ -+ interface_update_l2info(ctx, ifp, zif_type, 1, -+ link_nsid); -+ if (IS_ZEBRA_IF_BOND(ifp)) -+ zebra_l2if_update_bond(ifp, true); -+ if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) -+ zebra_l2if_update_bridge_slave( -+ ifp, bridge_ifindex, ns_id, -+ ZEBRA_BRIDGE_NO_ACTION); -+ else if (IS_ZEBRA_IF_BOND_SLAVE(ifp)) -+ zebra_l2if_update_bond_slave(ifp, bond_ifindex, -+ !!bypass); -+ -+ if (protodown_set) { -+ interface_if_protodown(ifp, protodown, -+ rc_bitfield); -+ if (startup) -+ if_sweep_protodown(zif); -+ } -+ -+ if (IS_ZEBRA_IF_BRIDGE(ifp)) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK ADD for %s(%u), vlan-aware %d", -+ name, ifp->ifindex, -+ IS_ZEBRA_IF_BRIDGE_VLAN_AWARE( -+ zif)); -+ } -+ } else if (ifp->vrf->vrf_id != vrf_id) { -+ /* VRF change for an interface. */ -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK vrf-change for %s(%u) vrf_id %u -> %u", -+ name, ifp->ifindex, ifp->vrf->vrf_id, -+ vrf_id); -+ -+ if_handle_vrf_change(ifp, vrf_id); -+ } else { -+ bool was_bridge_slave, was_bond_slave; -+ uint8_t chgflags = ZEBRA_BRIDGE_NO_ACTION; -+ -+ zif = ifp->info; -+ -+ /* Interface update. */ -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK update for %s(%u) sl_type %d master %u", -+ name, ifp->ifindex, zif_slave_type, -+ master_ifindex); -+ -+ set_ifindex(ifp, ifindex, zns); -+ ifp->mtu6 = ifp->mtu = mtu; -+ ifp->metric = 0; -+ -+ /* -+ * Update interface type - NOTE: Only slave_type can -+ * change. -+ */ -+ was_bridge_slave = IS_ZEBRA_IF_BRIDGE_SLAVE(ifp); -+ was_bond_slave = IS_ZEBRA_IF_BOND_SLAVE(ifp); -+ zebra_if_set_ziftype(ifp, zif_type, zif_slave_type); -+ -+ memcpy(old_hw_addr, ifp->hw_addr, INTERFACE_HWADDR_MAX); -+ -+ /* Update link. */ -+ zebra_if_update_link(ifp, link_ifindex, link_nsid); -+ -+ ifp->ll_type = dplane_ctx_get_ifp_zltype(ctx); -+ interface_update_hw_addr(ctx, ifp); -+ -+ if (protodown_set) -+ interface_if_protodown(ifp, protodown, -+ rc_bitfield); -+ -+ if (if_is_no_ptm_operative(ifp)) { -+ bool is_up = if_is_operative(ifp); -+ -+ ifp->flags = flags; -+ if (!if_is_no_ptm_operative(ifp) || -+ CHECK_FLAG(zif->flags, -+ ZIF_FLAG_PROTODOWN)) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "Intf %s(%u) has gone DOWN", -+ name, ifp->ifindex); -+ if_down(ifp); -+ rib_update(RIB_UPDATE_KERNEL); -+ } else if (if_is_operative(ifp)) { -+ bool mac_updated = false; -+ -+ /* -+ * Must notify client daemons of new -+ * interface status. -+ */ -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "Intf %s(%u) PTM up, notifying clients", -+ name, ifp->ifindex); -+ if_up(ifp, !is_up); -+ -+ /* -+ * Update EVPN VNI when SVI MAC change -+ */ -+ if (memcmp(old_hw_addr, ifp->hw_addr, -+ INTERFACE_HWADDR_MAX)) -+ mac_updated = true; -+ if (IS_ZEBRA_IF_VLAN(ifp) && -+ mac_updated) { -+ struct interface *link_if; -+ -+ link_if = if_lookup_by_index_per_ns( -+ zebra_ns_lookup( -+ NS_DEFAULT), -+ link_ifindex); -+ if (link_if) -+ zebra_vxlan_svi_up( -+ ifp, link_if); -+ } else if (mac_updated && -+ IS_ZEBRA_IF_BRIDGE(ifp)) { -+ zlog_debug( -+ "Intf %s(%u) bridge changed MAC address", -+ name, ifp->ifindex); -+ chgflags = -+ ZEBRA_BRIDGE_MASTER_MAC_CHANGE; -+ } -+ } -+ } else { -+ ifp->flags = flags; -+ if (if_is_operative(ifp) && -+ !CHECK_FLAG(zif->flags, -+ ZIF_FLAG_PROTODOWN)) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "Intf %s(%u) has come UP", -+ name, ifp->ifindex); -+ if_up(ifp, true); -+ if (IS_ZEBRA_IF_BRIDGE(ifp)) -+ chgflags = -+ ZEBRA_BRIDGE_MASTER_UP; -+ } else { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "Intf %s(%u) has gone DOWN", -+ name, ifp->ifindex); -+ if_down(ifp); -+ rib_update(RIB_UPDATE_KERNEL); -+ } -+ } -+ -+ /* -+ * Extract and save L2 interface information, take -+ * additional actions. -+ */ -+ interface_update_l2info(ctx, ifp, zif_type, 0, -+ link_nsid); -+ if (IS_ZEBRA_IF_BRIDGE(ifp)) -+ zebra_l2if_update_bridge(ifp, chgflags); -+ if (IS_ZEBRA_IF_BOND(ifp)) -+ zebra_l2if_update_bond(ifp, true); -+ if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp) || was_bridge_slave) -+ zebra_l2if_update_bridge_slave( -+ ifp, bridge_ifindex, ns_id, chgflags); -+ else if (IS_ZEBRA_IF_BOND_SLAVE(ifp) || was_bond_slave) -+ zebra_l2if_update_bond_slave(ifp, bond_ifindex, -+ !!bypass); -+ if (IS_ZEBRA_IF_BRIDGE(ifp)) { -+ if (IS_ZEBRA_DEBUG_KERNEL) -+ zlog_debug( -+ "RTM_NEWLINK update for %s(%u), vlan-aware %d", -+ name, ifp->ifindex, -+ IS_ZEBRA_IF_BRIDGE_VLAN_AWARE( -+ zif)); -+ } -+ } -+ -+ zif = ifp->info; -+ if (zif) { -+ XFREE(MTYPE_ZIF_DESC, zif->desc); -+ if (desc[0]) -+ zif->desc = XSTRDUP(MTYPE_ZIF_DESC, desc); -+ } -+ } -+} -+ - void zebra_if_dplane_result(struct zebra_dplane_ctx *ctx) - { - struct zebra_ns *zns; -@@ -1514,17 +2204,6 @@ void zebra_if_dplane_result(struct zebra_dplane_ctx *ctx) - } - - ifp = if_lookup_by_index_per_ns(zns, ifindex); -- if (ifp == NULL) { -- if (op != DPLANE_OP_INTF_NETCONFIG || -- (ifindex != -1 && ifindex != -2)) { -- if (IS_ZEBRA_DEBUG_KERNEL) -- zlog_debug( -- "%s: can't find ifp at nsid %u index %d", -- __func__, ns_id, ifindex); -- -- return; -- } -- } - - switch (op) { - case DPLANE_OP_INTF_ADDR_ADD: -@@ -1535,7 +2214,15 @@ void zebra_if_dplane_result(struct zebra_dplane_ctx *ctx) - case DPLANE_OP_INTF_INSTALL: - case DPLANE_OP_INTF_UPDATE: - case DPLANE_OP_INTF_DELETE: -- zebra_if_update_ctx(ctx, ifp); -+ /* -+ * Queued from the dplane means it is something -+ * that we need to handle( create/delete the -+ * interface as needed ) -+ */ -+ if (dp_res == ZEBRA_DPLANE_REQUEST_QUEUED) -+ zebra_if_dplane_ifp_handling(ctx); -+ else -+ zebra_if_update_ctx(ctx, ifp); - break; - - case DPLANE_OP_INTF_NETCONFIG: -diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c -index 4cd84cada2..3756a4ab0c 100644 ---- a/zebra/kernel_netlink.c -+++ b/zebra/kernel_netlink.c -@@ -410,7 +410,7 @@ static int netlink_information_fetch(struct nlmsghdr *h, ns_id_t ns_id, - case RTM_NEWLINK: - return netlink_link_change(h, ns_id, startup); - case RTM_DELLINK: -- return netlink_link_change(h, ns_id, startup); -+ return 0; - case RTM_NEWNEIGH: - case RTM_DELNEIGH: - case RTM_GETNEIGH: -@@ -482,6 +482,7 @@ static int dplane_netlink_information_fetch(struct nlmsghdr *h, ns_id_t ns_id, - - case RTM_NEWLINK: - case RTM_DELLINK: -+ return netlink_link_change(h, ns_id, startup); - - default: - break; -@@ -1170,7 +1171,6 @@ int netlink_parse_info(int (*filter)(struct nlmsghdr *, ns_id_t, int), - h->nlmsg_type, h->nlmsg_len, - h->nlmsg_seq, h->nlmsg_pid); - -- - /* - * Ignore messages that maybe sent from - * other actors besides the kernel -@@ -1774,17 +1774,11 @@ void kernel_init(struct zebra_ns *zns) - * lead to confusion, so we need to convert the - * RTNLGRP_XXX to a bit position for ourself - */ -- groups = RTMGRP_LINK | -- RTMGRP_IPV4_ROUTE | -- RTMGRP_IPV4_IFADDR | -- RTMGRP_IPV6_ROUTE | -- RTMGRP_IPV6_IFADDR | -- RTMGRP_IPV4_MROUTE | -- RTMGRP_NEIGH | -- ((uint32_t) 1 << (RTNLGRP_IPV4_RULE - 1)) | -- ((uint32_t) 1 << (RTNLGRP_IPV6_RULE - 1)) | -- ((uint32_t) 1 << (RTNLGRP_NEXTHOP - 1)) | -- ((uint32_t) 1 << (RTNLGRP_TC - 1)); -+ groups = RTMGRP_IPV4_ROUTE | RTMGRP_IPV6_ROUTE | RTMGRP_IPV4_MROUTE | -+ RTMGRP_NEIGH | ((uint32_t)1 << (RTNLGRP_IPV4_RULE - 1)) | -+ ((uint32_t)1 << (RTNLGRP_IPV6_RULE - 1)) | -+ ((uint32_t)1 << (RTNLGRP_NEXTHOP - 1)) | -+ ((uint32_t)1 << (RTNLGRP_TC - 1)); - - dplane_groups = (RTMGRP_LINK | - RTMGRP_IPV4_IFADDR | -diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c -index f3462b9f22..98553edae6 100644 ---- a/zebra/kernel_socket.c -+++ b/zebra/kernel_socket.c -@@ -1482,6 +1482,14 @@ static void routing_socket(struct zebra_ns *zns) - thread_add_read(zrouter.master, kernel_read, NULL, routing_sock, NULL); - } - -+void interface_list_second(struct zebra_ns *zns) -+{ -+} -+ -+void interface_list_tunneldump(struct zebra_ns *zns) -+{ -+} -+ - /* Exported interface function. This function simply calls - routing_socket (). */ - void kernel_init(struct zebra_ns *zns) -diff --git a/zebra/rt.h b/zebra/rt.h -index 6f4dd48a54..3e91cdfffa 100644 ---- a/zebra/rt.h -+++ b/zebra/rt.h -@@ -99,6 +99,8 @@ extern int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *mroute); - * state. - */ - extern void interface_list(struct zebra_ns *zns); -+extern void interface_list_tunneldump(struct zebra_ns *zns); -+extern void interface_list_second(struct zebra_ns *zns); - extern void kernel_init(struct zebra_ns *zns); - extern void kernel_terminate(struct zebra_ns *zns, bool complete); - extern void macfdb_read(struct zebra_ns *zns); -diff --git a/zebra/rule_netlink.c b/zebra/rule_netlink.c -index 135f065428..4cc4281c1e 100644 ---- a/zebra/rule_netlink.c -+++ b/zebra/rule_netlink.c -@@ -416,6 +416,7 @@ int netlink_rules_read(struct zebra_ns *zns) - - ret = netlink_parse_info(netlink_rule_change, &zns->netlink_cmd, - &dp_info, 0, true); -+ - return ret; - } - -diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h -index c10482ed96..9f9496c8f4 100644 ---- a/zebra/zebra_dplane.h -+++ b/zebra/zebra_dplane.h -@@ -422,6 +422,19 @@ uint8_t dplane_ctx_get_ifp_family(const struct zebra_dplane_ctx *ctx); - struct zebra_vxlan_vni_array; - void dplane_ctx_set_ifp_vxlan_vni_array(struct zebra_dplane_ctx *ctx, - struct zebra_vxlan_vni_array *vniarray); -+ -+/* -+ * These defines mirror the values for bridge values in linux -+ * at this point since we only have a linux implementation -+ * we don't need to do any type of translation. Let's just -+ * pass these through and use them -+ */ -+#define DPLANE_BRIDGE_VLAN_INFO_PVID \ -+ (1 << 1) /* VLAN is PVID, ingress untagged */ -+#define DPLANE_BRIDGE_VLAN_INFO_RANGE_BEGIN \ -+ (1 << 3) /* VLAN is start of vlan range */ -+#define DPLANE_BRIDGE_VLAN_INFO_RANGE_END \ -+ (1 << 4) /* VLAN is end of vlan range */ - const struct zebra_vxlan_vni_array * - dplane_ctx_get_ifp_vxlan_vni_array(const struct zebra_dplane_ctx *ctx); - struct zebra_dplane_bridge_vlan_info { -diff --git a/zebra/zebra_l2.c b/zebra/zebra_l2.c -index 07bbc6e3bc..4ad262a21d 100644 ---- a/zebra/zebra_l2.c -+++ b/zebra/zebra_l2.c -@@ -258,7 +258,7 @@ void zebra_l2if_update_bond(struct interface *ifp, bool add) - * map slaves (if any) to the bridge. - */ - void zebra_l2_bridge_add_update(struct interface *ifp, -- struct zebra_l2info_bridge *bridge_info) -+ const struct zebra_l2info_bridge *bridge_info) - { - struct zebra_if *zif; - -@@ -293,7 +293,7 @@ void zebra_l2if_update_bridge(struct interface *ifp, uint8_t chgflags) - * VLAN Id and this cannot change. - */ - void zebra_l2_vlanif_update(struct interface *ifp, -- struct zebra_l2info_vlan *vlan_info) -+ const struct zebra_l2info_vlan *vlan_info) - { - struct zebra_if *zif; - -@@ -310,7 +310,7 @@ void zebra_l2_vlanif_update(struct interface *ifp, - * clients about GRE information. - */ - void zebra_l2_greif_add_update(struct interface *ifp, -- struct zebra_l2info_gre *gre_info, int add) -+ const struct zebra_l2info_gre *gre_info, int add) - { - struct zebra_if *zif; - struct in_addr old_vtep_ip; -@@ -337,7 +337,8 @@ void zebra_l2_greif_add_update(struct interface *ifp, - * IP and VLAN mapping, but the latter is handled separately. - */ - void zebra_l2_vxlanif_add_update(struct interface *ifp, -- struct zebra_l2info_vxlan *vxlan_info, int add) -+ const struct zebra_l2info_vxlan *vxlan_info, -+ int add) - { - struct zebra_if *zif; - struct in_addr old_vtep_ip; -diff --git a/zebra/zebra_l2.h b/zebra/zebra_l2.h -index 8fef008f52..e3c5544f8f 100644 ---- a/zebra/zebra_l2.h -+++ b/zebra/zebra_l2.h -@@ -71,6 +71,18 @@ struct zebra_l2info_gre { - ns_id_t link_nsid; - }; - -+struct zebra_vxlan_vni { -+ vni_t vni; /* VNI */ -+ vlanid_t access_vlan; /* Access VLAN - for VLAN-aware bridge. */ -+ struct in_addr mcast_grp; -+ uint16_t flags; -+}; -+ -+struct zebra_vxlan_vni_array { -+ uint16_t count; -+ struct zebra_vxlan_vni vnis[0]; -+}; -+ - /* zebra L2 interface information - VXLAN interface */ - struct zebra_l2info_vxlan { - vni_t vni; /* VNI */ -@@ -108,17 +120,19 @@ extern void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave, - struct zebra_ns *zns); - extern void - zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave); --extern void zebra_l2_bridge_add_update(struct interface *ifp, -- struct zebra_l2info_bridge *bridge_info); -+extern void -+zebra_l2_bridge_add_update(struct interface *ifp, -+ const struct zebra_l2info_bridge *bridge_info); - extern void zebra_l2_bridge_del(struct interface *ifp); - extern void zebra_l2_vlanif_update(struct interface *ifp, -- struct zebra_l2info_vlan *vlan_info); -+ const struct zebra_l2info_vlan *vlan_info); - extern void zebra_l2_greif_add_update(struct interface *ifp, -- struct zebra_l2info_gre *vxlan_info, -+ const struct zebra_l2info_gre *vxlan_info, - int add); --extern void zebra_l2_vxlanif_add_update(struct interface *ifp, -- struct zebra_l2info_vxlan *vxlan_info, -- int add); -+extern void -+zebra_l2_vxlanif_add_update(struct interface *ifp, -+ const struct zebra_l2info_vxlan *vxlan_info, -+ int add); - extern void zebra_l2_vxlanif_update_access_vlan(struct interface *ifp, - vlanid_t access_vlan); - extern void zebra_l2_greif_del(struct interface *ifp); -diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c -index 7b076b8a4a..4714cdbff8 100644 ---- a/zebra/zebra_ns.c -+++ b/zebra/zebra_ns.c -@@ -38,6 +38,7 @@ - #include "rib.h" - #include "table_manager.h" - #include "zebra_errors.h" -+#include "zebra_dplane.h" - - extern struct zebra_privs_t zserv_privs; - -@@ -116,6 +117,35 @@ int zebra_ns_disabled(struct ns *ns) - return zebra_ns_disable_internal(zns, true); - } - -+void zebra_ns_startup_continue(struct zebra_dplane_ctx *ctx) -+{ -+ struct zebra_ns *zns = zebra_ns_lookup(dplane_ctx_get_ns_id(ctx)); -+ enum zebra_dplane_startup_notifications spot; -+ -+ if (!zns) { -+ zlog_err("%s: No Namespace associated with %u", __func__, -+ dplane_ctx_get_ns_id(ctx)); -+ return; -+ } -+ -+ spot = dplane_ctx_get_startup_spot(ctx); -+ -+ switch (spot) { -+ case ZEBRA_DPLANE_INTERFACES_READ: -+ interface_list_tunneldump(zns); -+ break; -+ case ZEBRA_DPLANE_TUNNELS_READ: -+ interface_list_second(zns); -+ break; -+ case ZEBRA_DPLANE_ADDRESSES_READ: -+ route_read(zns); -+ -+ kernel_read_pbr_rules(zns); -+ kernel_read_tc_qdisc(zns); -+ break; -+ } -+} -+ - /* Do global enable actions - open sockets, read kernel config etc. */ - int zebra_ns_enable(ns_id_t ns_id, void **info) - { -@@ -126,9 +156,6 @@ int zebra_ns_enable(ns_id_t ns_id, void **info) - kernel_init(zns); - zebra_dplane_ns_enable(zns, true); - interface_list(zns); -- route_read(zns); -- kernel_read_pbr_rules(zns); -- kernel_read_tc_qdisc(zns); - - return 0; - } -diff --git a/zebra/zebra_ns.h b/zebra/zebra_ns.h -index 7a0ffbc1ee..3d7d96c83f 100644 ---- a/zebra/zebra_ns.h -+++ b/zebra/zebra_ns.h -@@ -83,6 +83,8 @@ int zebra_ns_final_shutdown(struct ns *ns, - void **param_out __attribute__((unused))); - int zebra_ns_config_write(struct vty *vty, struct ns *ns); - -+void zebra_ns_startup_continue(struct zebra_dplane_ctx *ctx); -+ - #ifdef __cplusplus - } - #endif -diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index 201fc761ae..fd6df441c6 100644 ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -4770,7 +4770,9 @@ static void rib_process_dplane_results(struct thread *thread) - case DPLANE_OP_NEIGH_TABLE_UPDATE: - case DPLANE_OP_GRE_SET: - case DPLANE_OP_NONE: -+ break; - case DPLANE_OP_STARTUP_STAGE: -+ zebra_ns_startup_continue(ctx); - break; - - } /* Dispatch by op code */ --- -2.17.1 - diff --git a/src/sonic-frr/patch/0019-zebra-remove-duplicated-nexthops-when-sending-fpm-msg.patch b/src/sonic-frr/patch/0019-zebra-remove-duplicated-nexthops-when-sending-fpm-msg.patch deleted file mode 100644 index 834ef899e72f..000000000000 --- a/src/sonic-frr/patch/0019-zebra-remove-duplicated-nexthops-when-sending-fpm-msg.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 4aa1aace3e32039b668c04cd682b01e0397144ea Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=E6=81=AD=E7=AE=80?= -Date: Wed, 26 Jul 2023 09:51:51 +0800 -Subject: [PATCH] zebra: remove duplicated nexthops when sending fpm msg -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When zebra send msg to fpm client, it doesn't handle duplicated nexthops especially, which means if zebra has a route with NUM1 recursive nexthops, each resolved to the same NUM2 connected nexthops, it will send to fpm client a route with NUM1*NUM2 nexthops. But actually there are only NUM2 useful nexthops, the left NUM1*NUM2-NUM2 nexthops are all duplicated nexthops. By the way, zebra has duplicated nexthop remove logic when sending msg to kernel. -Add duplicated nexthop remove logic to zebra when sending msg to fpm client. - -Signed-off-by: 恭简 - ---- - zebra/zebra_fpm_netlink.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/zebra/zebra_fpm_netlink.c b/zebra/zebra_fpm_netlink.c -index 06c45578a..231047143 100644 ---- a/zebra/zebra_fpm_netlink.c -+++ b/zebra/zebra_fpm_netlink.c -@@ -305,6 +305,8 @@ static int netlink_route_info_fill(struct netlink_route_info *ri, int cmd, - - if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_RECURSIVE)) - continue; -+ if (CHECK_FLAG(nexthop->flags, NEXTHOP_FLAG_DUPLICATE)) -+ continue; - - if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE) { - switch (nexthop->bh_type) { diff --git a/src/sonic-frr/patch/0020-zebra-Fix-non-notification-of-better-admin-won.patch b/src/sonic-frr/patch/0020-zebra-Fix-non-notification-of-better-admin-won.patch deleted file mode 100644 index 324242a48770..000000000000 --- a/src/sonic-frr/patch/0020-zebra-Fix-non-notification-of-better-admin-won.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 9513d3a158e493623a6bc1e5e3e44b6ed277ac28 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Tue, 14 Nov 2023 10:15:42 -0500 -Subject: [PATCH] zebra: Fix non-notification of better admin won - -If there happens to be a entry in the zebra rib -that has a lower admin distance then a newly received -re, zebra would not notify the upper level protocol -about this happening. Imagine a case where there -is a connected route for say a /32 and bgp receives -a route from a peer that is the same route as the -connected. Since BGP has no network statement and -perceives the route as being `good` bgp will install -the route into zebra. Zebra will look at the new -bgp re and correctly identify that the re is not -something that it will use and do nothing. This -change notices this and sends up a BETTER_ADMIN_WON -route notification. - -Signed-off-by: Donald Sharp - -diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index 2c3bb28d6..d37fe98f8 100644 ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -1227,6 +1227,7 @@ static void rib_process(struct route_node *rn) - rib_dest_t *dest; - struct zebra_vrf *zvrf = NULL; - struct vrf *vrf; -+ struct route_entry *proto_re_changed = NULL; - - vrf_id_t vrf_id = VRF_UNKNOWN; - -@@ -1296,6 +1297,7 @@ static void rib_process(struct route_node *rn) - * skip it. - */ - if (CHECK_FLAG(re->status, ROUTE_ENTRY_CHANGED)) { -+ proto_re_changed = re; - if (!nexthop_active_update(rn, re)) { - const struct prefix *p; - struct rib_table_info *info; -@@ -1381,6 +1383,8 @@ static void rib_process(struct route_node *rn) - * new_selected --- RE entry that is newly SELECTED - * old_fib --- RE entry currently in kernel FIB - * new_fib --- RE entry that is newly to be in kernel FIB -+ * proto_re_changed -- RE that is the last changed entry in the -+ * list of RE's. - * - * new_selected will get SELECTED flag, and is going to be redistributed - * the zclients. new_fib (which can be new_selected) will be installed -@@ -1435,6 +1439,22 @@ static void rib_process(struct route_node *rn) - } - } - -+ /* -+ * If zebra has a new_selected and a proto_re_changed -+ * entry that was not the old selected and the protocol -+ * is different, zebra should notify the upper level -+ * protocol that the sent down entry was not selected -+ */ -+ if (new_selected && proto_re_changed && -+ proto_re_changed != old_selected && -+ new_selected->type != proto_re_changed->type) { -+ struct rib_table_info *info = srcdest_rnode_table_info(rn); -+ -+ zsend_route_notify_owner(rn, proto_re_changed, -+ ZAPI_ROUTE_BETTER_ADMIN_WON, info->afi, -+ info->safi); -+ } -+ - /* Update fib according to selection results */ - if (new_fib && old_fib) - rib_process_update_fib(zvrf, rn, old_fib, new_fib); --- -2.17.1 - diff --git a/src/sonic-frr/patch/0023-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch b/src/sonic-frr/patch/0023-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch deleted file mode 100644 index 980f1d87cdf7..000000000000 --- a/src/sonic-frr/patch/0023-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch +++ /dev/null @@ -1,58 +0,0 @@ -From bcb608d988b3de282ff832fd398e95080be8ad86 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Mon, 11 Dec 2023 13:41:36 -0500 -Subject: [PATCH] zebra: The dplane_fpm_nl return path leaks memory - -The route entry created when using a ctx to pass route -entry data backup to the master pthread in zebra is -being leaked. Prevent this from happening. - -Signed-off-by: Donald Sharp -(cherry picked from commit 7f9c5c7fa2d927033549a806fd9025a9459f22bc) - -diff --git a/zebra/rib.h b/zebra/rib.h -index a02a461e8..2e62148ea 100644 ---- a/zebra/rib.h -+++ b/zebra/rib.h -@@ -352,6 +352,8 @@ extern void _route_entry_dump(const char *func, union prefixconstptr pp, - union prefixconstptr src_pp, - const struct route_entry *re); - -+void zebra_rib_route_entry_free(struct route_entry *re); -+ - struct route_entry * - zebra_rib_route_entry_new(vrf_id_t vrf_id, int type, uint8_t instance, - uint32_t flags, uint32_t nhe_id, uint32_t table_id, -diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c -index 6bdc15592..fc9e8c457 100644 ---- a/zebra/rt_netlink.c -+++ b/zebra/rt_netlink.c -@@ -1001,6 +1001,8 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h, - re, ng, startup, ctx); - if (ng) - nexthop_group_delete(&ng); -+ if (ctx) -+ zebra_rib_route_entry_free(re); - } else { - /* - * I really don't see how this is possible -diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index 2b47e229a..1ff3d9854 100644 ---- a/zebra/zebra_rib.c -+++ b/zebra/zebra_rib.c -@@ -4178,6 +4178,12 @@ struct route_entry *zebra_rib_route_entry_new(vrf_id_t vrf_id, int type, - - return re; - } -+ -+void zebra_rib_route_entry_free(struct route_entry *re) -+{ -+ XFREE(MTYPE_RE, re); -+} -+ - /* - * Internal route-add implementation; there are a couple of different public - * signatures. Callers in this path are responsible for the memory they --- -2.17.1 - diff --git a/src/sonic-frr/patch/0024-lib-use-snmp-s-large-fd-sets-for-agentx.patch b/src/sonic-frr/patch/0024-lib-use-snmp-s-large-fd-sets-for-agentx.patch deleted file mode 100644 index ad3da2a0ad2e..000000000000 --- a/src/sonic-frr/patch/0024-lib-use-snmp-s-large-fd-sets-for-agentx.patch +++ /dev/null @@ -1,143 +0,0 @@ -From 7e1857bf4315ae01e065fc8bc881338977c1ef87 Mon Sep 17 00:00:00 2001 -From: Edwin Brossette -Date: Fri, 8 Dec 2023 16:02:11 +0100 -Subject: [PATCH] lib: use snmp's large fd sets for agentx - -The maximum number of file descriptors in an fd set is limited by -FD_SETSIZE. This limitation is important because the libc macros -FD_SET(), FD_CLR() and FD_ISSET() will invoke a sigabort if the size of -the fd set given to them is above FD_SETSIZE. - -We ran into such a sigabort with bgpd because snmp can return an fd set -of size higher than FD_SETSIZE when calling snmp_select_info(). An -unfortunate FD_ISSET() call later causes the following abort: - -Received signal 6 at 1701115534 (si_addr 0xb94, PC 0x7ff289a16a7c); aborting... -/lib/x86_64-linux-gnu/libfrr.so.0(zlog_backtrace_sigsafe+0xb3) [0x7ff289d62bba] -/lib/x86_64-linux-gnu/libfrr.so.0(zlog_signal+0x1b4) [0x7ff289d62a1f] -/lib/x86_64-linux-gnu/libfrr.so.0(+0x102860) [0x7ff289da4860] -/lib/x86_64-linux-gnu/libc.so.6(+0x42520) [0x7ff2899c2520] -/lib/x86_64-linux-gnu/libc.so.6(pthread_kill+0x12c) [0x7ff289a16a7c] -/lib/x86_64-linux-gnu/libc.so.6(raise+0x16) [0x7ff2899c2476] -/lib/x86_64-linux-gnu/libc.so.6(abort+0xd3) [0x7ff2899a87f3] -/lib/x86_64-linux-gnu/libc.so.6(+0x896f6) [0x7ff289a096f6] -/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x2a) [0x7ff289ab676a] -/lib/x86_64-linux-gnu/libc.so.6(+0x1350c6) [0x7ff289ab50c6] -/lib/x86_64-linux-gnu/libc.so.6(+0x1366ab) [0x7ff289ab66ab] -/lib/x86_64-linux-gnu/libfrrsnmp.so.0(+0x36f5) [0x7ff2897736f5] -/lib/x86_64-linux-gnu/libfrrsnmp.so.0(+0x3c27) [0x7ff289773c27] -/lib/x86_64-linux-gnu/libfrr.so.0(thread_call+0x1c2) [0x7ff289dbe105] -/lib/x86_64-linux-gnu/libfrr.so.0(frr_run+0x257) [0x7ff289d56e69] -/usr/bin/bgpd(main+0x4f4) [0x560965c40488] -/lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7ff2899a9d90] -/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7ff2899a9e40] -/usr/bin/bgpd(_start+0x25) [0x560965c3e965] -in thread agentx_timeout scheduled from /build/make-pkg/output/_packages/cp-routing/src/lib/agentx.c:122 agentx_events_update() - -Also, the following error is logged by snmp just before the abort: -snmp[err]: Use snmp_sess_select_info2() for processing large file descriptors - -snmp uses a custom struct netsnmp_large_fd_set to work above the limit -imposed by FD_SETSIZE. It is noteworthy that, when calling -snmp_select_info() instead of snmp_select_info2(), snmp uses the same -code working with its custom, large structs, and copy/paste the result -to a regular, libc compatible fd_set. So there should be no downside -working with snmp_select_info2() instead of snmp_select_info(). - -Replace every use of the libc file descriptors sets by snmp's extended -file descriptors sets in agentx to acommodate for the high number of -file descriptors that can come out of snmp. This should prevent the -abort seen above. - -Signed-off-by: Edwin Brossette - -diff --git a/lib/agentx.c b/lib/agentx.c -index 5f6245980..be8277c53 100644 ---- a/lib/agentx.c -+++ b/lib/agentx.c -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - - #include "command.h" - #include "smux.h" -@@ -58,7 +59,7 @@ static void agentx_timeout(struct thread *t) - - static void agentx_read(struct thread *t) - { -- fd_set fds; -+ netsnmp_large_fd_set lfds; - int flags, new_flags = 0; - int nonblock = false; - struct listnode *ln = THREAD_ARG(t); -@@ -83,9 +84,9 @@ static void agentx_read(struct thread *t) - flog_err(EC_LIB_SYSTEM_CALL, "Failed to set snmp fd non blocking: %s(%d)", - strerror(errno), errno); - -- FD_ZERO(&fds); -- FD_SET(THREAD_FD(t), &fds); -- snmp_read(&fds); -+ netsnmp_large_fd_set_init(&lfds, FD_SETSIZE); -+ netsnmp_large_fd_setfd(t->u.fd, &lfds); -+ snmp_read2(&lfds); - - /* Reset the flag */ - if (!nonblock) { -@@ -100,6 +101,7 @@ static void agentx_read(struct thread *t) - - netsnmp_check_outstanding_agent_requests(); - agentx_events_update(); -+ netsnmp_large_fd_set_cleanup(&lfds); - } - - static void agentx_events_update(void) -@@ -107,15 +109,15 @@ static void agentx_events_update(void) - int maxfd = 0; - int block = 1; - struct timeval timeout = {.tv_sec = 0, .tv_usec = 0}; -- fd_set fds; -+ netsnmp_large_fd_set lfds; - struct listnode *ln; - struct thread **thr; - int fd, thr_fd; - - thread_cancel(&timeout_thr); - -- FD_ZERO(&fds); -- snmp_select_info(&maxfd, &fds, &timeout, &block); -+ netsnmp_large_fd_set_init(&lfds, FD_SETSIZE); -+ snmp_select_info2(&maxfd, &lfds, &timeout, &block); - - if (!block) { - thread_add_timer_tv(agentx_tm, agentx_timeout, NULL, &timeout, -@@ -133,7 +135,7 @@ static void agentx_events_update(void) - /* caught up */ - if (thr_fd == fd) { - struct listnode *nextln = listnextnode(ln); -- if (!FD_ISSET(fd, &fds)) { -+ if (!netsnmp_large_fd_is_set(fd, &lfds)) { - thread_cancel(thr); - XFREE(MTYPE_TMP, thr); - list_delete_node(events, ln); -@@ -143,7 +145,7 @@ static void agentx_events_update(void) - thr_fd = thr ? THREAD_FD(*thr) : -1; - } - /* need listener, but haven't hit one where it would be */ -- else if (FD_ISSET(fd, &fds)) { -+ else if (netsnmp_large_fd_is_set(fd, &lfds)) { - struct listnode *newln; - thr = XCALLOC(MTYPE_TMP, sizeof(struct thread *)); - -@@ -162,6 +164,7 @@ static void agentx_events_update(void) - list_delete_node(events, ln); - ln = nextln; - } -+ netsnmp_large_fd_set_cleanup(&lfds); - } - - /* AgentX node. */ --- -2.17.1 - diff --git a/src/sonic-frr/patch/0025-bgp-community-memory-leak-fix.patch b/src/sonic-frr/patch/0025-bgp-community-memory-leak-fix.patch index f8215e07f0f8..99ce9c3e8ca3 100644 --- a/src/sonic-frr/patch/0025-bgp-community-memory-leak-fix.patch +++ b/src/sonic-frr/patch/0025-bgp-community-memory-leak-fix.patch @@ -18,378 +18,16 @@ and the system will crash. Signed-off-by: Donald Sharp --- - bgpd/bgp_updgrp_adv.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c -index de2b3206b7..dcde4263da 100644 ---- a/bgpd/bgp_updgrp_adv.c -+++ b/bgpd/bgp_updgrp_adv.c -@@ -813,6 +813,7 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw) - struct bgp *bgp; - struct attr attr; - struct attr *new_attr = &attr; -+ struct aspath *aspath; - struct prefix p; - struct peer *from; - struct bgp_dest *dest; -@@ -850,6 +851,7 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw) - /* make coverity happy */ - assert(attr.aspath); - -+ aspath = attr.aspath; - attr.med = 0; - attr.flag |= ATTR_FLAG_BIT(BGP_ATTR_MULTI_EXIT_DISC); - -@@ -1005,7 +1007,7 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw) - } - } - -- aspath_unintern(&attr.aspath); -+ aspath_unintern(&aspath); - } - - /* --- -2.14.1 - - -From 07545c1879775f155f228c81393eed9697b699de Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Sat, 2 Mar 2024 09:42:30 -0500 -Subject: [PATCH 2/3] bgpd: Include unsuppress-map as a valid outgoing policy - -If unsuppress-map is setup for outgoing peers, consider that -policy is being applied as for RFC 8212. - -Signed-off-by: Donald Sharp ---- - bgpd/bgp_route.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 473168d9be..fb14fc7f20 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -5816,10 +5816,10 @@ bool bgp_outbound_policy_exists(struct peer *peer, struct bgp_filter *filter) - if (peer->sort == BGP_PEER_IBGP) - return true; - -- if (peer->sort == BGP_PEER_EBGP -- && (ROUTE_MAP_OUT_NAME(filter) || PREFIX_LIST_OUT_NAME(filter) -- || FILTER_LIST_OUT_NAME(filter) -- || DISTRIBUTE_OUT_NAME(filter))) -+ if (peer->sort == BGP_PEER_EBGP && -+ (ROUTE_MAP_OUT_NAME(filter) || PREFIX_LIST_OUT_NAME(filter) || -+ FILTER_LIST_OUT_NAME(filter) || DISTRIBUTE_OUT_NAME(filter) || -+ UNSUPPRESS_MAP_NAME(filter))) - return true; - return false; - } --- -2.14.1 - - -From e3493d5be0156fa9c8c522b818ae6448dbe371f2 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Sat, 2 Mar 2024 09:50:38 -0500 -Subject: [PATCH 3/3] bgpd: Ensure community data is freed in some cases. - -Customer has this valgrind trace: - -Direct leak of 2829120 byte(s) in 70728 object(s) allocated from: - 0 in community_new ../bgpd/bgp_community.c:39 - 1 in community_uniq_sort ../bgpd/bgp_community.c:170 - 2 in route_set_community ../bgpd/bgp_routemap.c:2342 - 3 in route_map_apply_ext ../lib/routemap.c:2673 - 4 in subgroup_announce_check ../bgpd/bgp_route.c:2367 - 5 in subgroup_process_announce_selected ../bgpd/bgp_route.c:2914 - 6 in group_announce_route_walkcb ../bgpd/bgp_updgrp_adv.c:199 - 7 in hash_walk ../lib/hash.c:285 - 8 in update_group_af_walk ../bgpd/bgp_updgrp.c:2061 - 9 in group_announce_route ../bgpd/bgp_updgrp_adv.c:1059 - 10 in bgp_process_main_one ../bgpd/bgp_route.c:3221 - 11 in bgp_process_wq ../bgpd/bgp_route.c:3221 - 12 in work_queue_run ../lib/workqueue.c:282 - -The above leak detected by valgrind was from a screenshot so I copied it -by hand. Any mistakes in line numbers are purely from my transcription. -Additionally this is against a slightly modified 8.5.1 version of FRR. -Code inspection of 8.5.1 -vs- latest master shows the same problem -exists. Code should be able to be followed from there to here. - -What is happening: - -There is a route-map being applied that modifes the outgoing community -to a peer. This is saved in the attr copy created in -subgroup_process_announce_selected. This community pointer is not -interned. So the community->refcount is still 0. Normally when -a prefix is announced, the attr and the prefix are placed on a -adjency out structure where the attribute is interned. This will -cause the community to be saved in the community hash list as well. -In a non-normal operation when the decision to send is aborted after -the route-map application, the attribute is just dropped and the -pointer to the community is just dropped too, leading to situations -where the memory is leaked. The usage of bgp suppress-fib would -would be a case where the community is caused to be leaked. -Additionally the previous commit where an unsuppress-map is used -to modify the outgoing attribute but since unsuppress-map was -not considered part of outgoing policy the attribute would be dropped as -well. This pointer drop also extends to any dynamically allocated -memory saved by the attribute pointer that was not interned yet as well. - -So let's modify the return case where the decision is made to -not send the prefix to the peer to always just flush the attribute -to ensure memory is not leaked. - -Fixes: #15459 -Signed-off-by: Donald Sharp ---- - bgpd/bgp_conditional_adv.c | 5 ++-- - bgpd/bgp_route.c | 30 +++++++++++++----------- - bgpd/bgp_updgrp.h | 2 +- - bgpd/bgp_updgrp_adv.c | 58 +++++++++++++++++++++++++--------------------- - 4 files changed, 51 insertions(+), 44 deletions(-) - -diff --git a/bgpd/bgp_conditional_adv.c b/bgpd/bgp_conditional_adv.c -index 24d822a745..edb9bc8bb7 100644 ---- a/bgpd/bgp_conditional_adv.c -+++ b/bgpd/bgp_conditional_adv.c -@@ -135,8 +135,9 @@ static void bgp_conditional_adv_routes(struct peer *peer, afi_t afi, - if (update_type == UPDATE_TYPE_ADVERTISE && - subgroup_announce_check(dest, pi, subgrp, dest_p, - &attr, &advmap_attr)) { -- bgp_adj_out_set_subgroup(dest, subgrp, &attr, -- pi); -+ if (!bgp_adj_out_set_subgroup(dest, subgrp, -+ &attr, pi)) -+ bgp_attr_flush(&attr); - } else { - /* If default originate is enabled for - * the peer, do not send explicit diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index fb14fc7f20..2976042dda 100644 +index fc776a4fd..a0113c04e 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c -@@ -2879,7 +2879,7 @@ void subgroup_process_announce_selected(struct update_subgroup *subgrp, - { - const struct prefix *p; - struct peer *onlypeer; -- struct attr attr; -+ struct attr attr = {0}, *pattr = &attr; - afi_t afi; - safi_t safi; - struct bgp *bgp; -@@ -2900,7 +2900,7 @@ void subgroup_process_announce_selected(struct update_subgroup *subgrp, +@@ -3012,7 +3012,7 @@ void subgroup_process_announce_selected(struct update_subgroup *subgrp, PEER_STATUS_ORF_WAIT_REFRESH)) return; - + - memset(&attr, 0, sizeof(attr)); + memset(pattr, 0, sizeof(*pattr)); /* It's initialized in bgp_announce_check() */ - - /* Announcement to the subgroup. If the route is filtered withdraw it. -@@ -2911,32 +2911,34 @@ void subgroup_process_announce_selected(struct update_subgroup *subgrp, - advertise = bgp_check_advertise(bgp, dest); - - if (selected) { -- if (subgroup_announce_check(dest, selected, subgrp, p, &attr, -+ if (subgroup_announce_check(dest, selected, subgrp, p, pattr, - NULL)) { - /* Route is selected, if the route is already installed - * in FIB, then it is advertised - */ - if (advertise) { - if (!bgp_check_withdrawal(bgp, dest)) { -- struct attr *adv_attr = -- bgp_attr_intern(&attr); -- -- bgp_adj_out_set_subgroup(dest, subgrp, -- adv_attr, -- selected); -- } else -+ if (!bgp_adj_out_set_subgroup( -+ dest, subgrp, pattr, -+ selected)) -+ bgp_attr_flush(pattr); -+ } else { - bgp_adj_out_unset_subgroup( - dest, subgrp, 1, addpath_tx_id); -- } -- } else -+ bgp_attr_flush(pattr); -+ } -+ } else -+ bgp_attr_flush(pattr); -+ } else { - bgp_adj_out_unset_subgroup(dest, subgrp, 1, - addpath_tx_id); -+ bgp_attr_flush(pattr); -+ } - } - - /* If selected is NULL we must withdraw the path using addpath_tx_id */ -- else { -+ else - bgp_adj_out_unset_subgroup(dest, subgrp, 1, addpath_tx_id); -- } - } - - /* -diff --git a/bgpd/bgp_updgrp.h b/bgpd/bgp_updgrp.h -index e27c1e7b67..b7b6aa07e9 100644 ---- a/bgpd/bgp_updgrp.h -+++ b/bgpd/bgp_updgrp.h -@@ -458,7 +458,7 @@ extern struct bgp_adj_out *bgp_adj_out_alloc(struct update_subgroup *subgrp, - extern void bgp_adj_out_remove_subgroup(struct bgp_dest *dest, - struct bgp_adj_out *adj, - struct update_subgroup *subgrp); --extern void bgp_adj_out_set_subgroup(struct bgp_dest *dest, -+extern bool bgp_adj_out_set_subgroup(struct bgp_dest *dest, - struct update_subgroup *subgrp, - struct attr *attr, - struct bgp_path_info *path); -diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c -index dcde4263da..7902d40bd9 100644 ---- a/bgpd/bgp_updgrp_adv.c -+++ b/bgpd/bgp_updgrp_adv.c -@@ -454,7 +454,7 @@ bgp_advertise_clean_subgroup(struct update_subgroup *subgrp, - return next; - } - --void bgp_adj_out_set_subgroup(struct bgp_dest *dest, -+bool bgp_adj_out_set_subgroup(struct bgp_dest *dest, - struct update_subgroup *subgrp, struct attr *attr, - struct bgp_path_info *path) - { -@@ -474,7 +474,7 @@ void bgp_adj_out_set_subgroup(struct bgp_dest *dest, - bgp = SUBGRP_INST(subgrp); - - if (DISABLE_BGP_ANNOUNCE) -- return; -+ return false; - - /* Look for adjacency information. */ - adj = adj_lookup( -@@ -490,7 +490,7 @@ void bgp_adj_out_set_subgroup(struct bgp_dest *dest, - bgp_addpath_id_for_peer(peer, afi, safi, - &path->tx_addpath)); - if (!adj) -- return; -+ return false; - - subgrp->pscount++; - } -@@ -529,7 +529,7 @@ void bgp_adj_out_set_subgroup(struct bgp_dest *dest, - * will never be able to coalesce the 3rd peer down - */ - subgrp->version = MAX(subgrp->version, dest->version); -- return; -+ return false; - } - - if (adj->adv) -@@ -576,6 +576,8 @@ void bgp_adj_out_set_subgroup(struct bgp_dest *dest, - bgp_adv_fifo_add_tail(&subgrp->sync->update, adv); - - subgrp->version = MAX(subgrp->version, dest->version); -+ -+ return true; - } - - /* The only time 'withdraw' will be false is if we are sending -@@ -668,7 +670,7 @@ void subgroup_announce_table(struct update_subgroup *subgrp, - { - struct bgp_dest *dest; - struct bgp_path_info *ri; -- struct attr attr; -+ struct attr attr = {0}, *pattr = &attr; - struct peer *peer; - afi_t afi; - safi_t safi; -@@ -712,24 +714,25 @@ void subgroup_announce_table(struct update_subgroup *subgrp, - continue; - - if (subgroup_announce_check(dest, ri, subgrp, dest_p, -- &attr, NULL)) { -+ pattr, NULL)) { - /* Check if route can be advertised */ - if (advertise) { - if (!bgp_check_withdrawal(bgp, dest)) { -- struct attr *adv_attr = -- bgp_attr_intern(&attr); -- -- bgp_adj_out_set_subgroup( -- dest, subgrp, adv_attr, -- ri); -- } else -+ if (!bgp_adj_out_set_subgroup( -+ dest, subgrp, pattr, -+ ri)) -+ bgp_attr_flush(pattr); -+ } else { - bgp_adj_out_unset_subgroup( - dest, subgrp, 1, - bgp_addpath_id_for_peer( - peer, afi, - safi_rib, - &ri->tx_addpath)); -- } -+ bgp_attr_flush(pattr); -+ } -+ } else -+ bgp_attr_flush(pattr); - } else { - /* If default originate is enabled for - * the peer, do not send explicit -@@ -748,6 +751,7 @@ void subgroup_announce_table(struct update_subgroup *subgrp, - bgp_addpath_id_for_peer( - peer, afi, safi_rib, - &ri->tx_addpath)); -+ bgp_attr_flush(pattr); - } - } - } -@@ -811,7 +815,7 @@ void subgroup_announce_route(struct update_subgroup *subgrp) - void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw) - { - struct bgp *bgp; -- struct attr attr; -+ struct attr attr = {0}; - struct attr *new_attr = &attr; - struct aspath *aspath; - struct prefix p; -@@ -952,18 +956,18 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw) - if (dest) { - for (pi = bgp_dest_get_bgp_path_info(dest); pi; - pi = pi->next) { -- if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) -- if (subgroup_announce_check( -- dest, pi, subgrp, -- bgp_dest_get_prefix(dest), -- &attr, NULL)) { -- struct attr *default_attr = -- bgp_attr_intern(&attr); -- -- bgp_adj_out_set_subgroup( -- dest, subgrp, -- default_attr, pi); -- } -+ if (!CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) -+ continue; -+ -+ if (subgroup_announce_check( -+ dest, pi, subgrp, -+ bgp_dest_get_prefix(dest), &attr, -+ NULL)) { -+ if (!bgp_adj_out_set_subgroup( -+ dest, subgrp, &attr, pi)) -+ bgp_attr_flush(&attr); -+ } else -+ bgp_attr_flush(&attr); - } - bgp_dest_unlock_node(dest); - } --- -2.14.1 + /* Announcement to the subgroup. If the route is filtered withdraw it. diff --git a/src/sonic-frr/patch/0026-bgp-fib-suppress-announce-fix.patch b/src/sonic-frr/patch/0026-bgp-fib-suppress-announce-fix.patch deleted file mode 100644 index a6e9d4d4633e..000000000000 --- a/src/sonic-frr/patch/0026-bgp-fib-suppress-announce-fix.patch +++ /dev/null @@ -1,122 +0,0 @@ -From bf292bfd8b4e2d7ba181ce6efde4e43e066d1a88 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 28 Mar 2024 12:25:05 -0400 -Subject: [PATCH 1/2] bgpd: Note when receiving but not understanding a route - notification - -When BGP has been asked to wait for FIB installation, on route -removal a return call is likely to not have the dest since BGP -will have cleaned up the node, entirely. Let's just note that -the prefix cannot be found if debugs are turned on and move on. - -Signed-off-by: Donald Sharp ---- - bgpd/bgp_zebra.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index efcf497850..ff79746b4c 100644 ---- a/bgpd/bgp_zebra.c -+++ b/bgpd/bgp_zebra.c -@@ -2610,8 +2610,12 @@ static int bgp_zebra_route_notify_owner(int command, struct zclient *zclient, - /* Find the bgp route node */ - dest = bgp_afi_node_lookup(bgp->rib[afi][safi], afi, safi, &p, - &bgp->vrf_prd); -- if (!dest) -+ if (!dest) { -+ if (BGP_DEBUG(zebra, ZEBRA)) -+ zlog_debug("%s: %pFX does not exist in the BGP table, nothing to do for %u", -+ __func__, &p, note); - return -1; -+ } - - switch (note) { - case ZAPI_ROUTE_INSTALLED: --- -2.17.1 - - -From ada2e1099373e69e0eb29f4b1f3ba79c0cacf75a Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Thu, 28 Mar 2024 12:27:38 -0400 -Subject: [PATCH 2/2] bgpd: Arrange peer notification to after zebra announce - -Currently BGP attempts to send route change information -to it's peers *before* the route is installed into zebra. -This creates a bug in suppress-fib-pending in the following -scenario: - -a) bgp suppress-fib-pending and bgp has a route with -2 way ecmp. -b) bgp receives a route withdraw from peer 1. BGP -will send the route to zebra and mark the route as -FIB_INSTALL_PENDING. -c) bgp receives a route withdraw from peer 2. BGP -will see the route has the FIB_INSTALL_PENDING and -not send the withdrawal of the route to the peer. -bgp will then send the route deletion to zebra and -clean up the bgp_path_info's. - -At this point BGP is stuck where it has not sent -a route withdrawal to downstream peers. - -Let's modify the code in bgp_process_main_one to -send the route notification to zebra first before -attempting to announce the route. The route withdrawal -will remove the FIB_INSTALL_PENDING flag from the dest -and this will allow group_announce_route to believe -it can send the route withdrawal. - -For the master branch this is ok because the recent -backpressure commits are in place and nothing is going -to change from an ordering perspective in that regards. -Ostensibly this fix is also for operators of Sonic and -will be backported to the 8.5 branch as well. This will -change the order of the send to peers to be after the -zebra installation but sonic users are using suppress-fib-pending -anyways so updates won't go out until rib ack has been -received anyways. - -Signed-off-by: Donald Sharp ---- - bgpd/bgp_route.c | 17 +++++++++-------- - 1 file changed, 9 insertions(+), 8 deletions(-) - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 2976042dda..fbff57634a 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -3297,14 +3297,6 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - } - #endif - -- group_announce_route(bgp, afi, safi, dest, new_select); -- -- /* unicast routes must also be annouced to labeled-unicast update-groups -- */ -- if (safi == SAFI_UNICAST) -- group_announce_route(bgp, afi, SAFI_LABELED_UNICAST, dest, -- new_select); -- - /* FIB update. */ - if (bgp_fibupd_safi(safi) && (bgp->inst_type != BGP_INSTANCE_TYPE_VIEW) - && !bgp_option_check(BGP_OPT_NO_FIB)) { -@@ -3334,6 +3326,15 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - } - } - -+ group_announce_route(bgp, afi, safi, dest, new_select); -+ -+ /* unicast routes must also be annouced to labeled-unicast update-groups -+ */ -+ if (safi == SAFI_UNICAST) -+ group_announce_route(bgp, afi, SAFI_LABELED_UNICAST, dest, -+ new_select); -+ -+ - bgp_process_evpn_route_injection(bgp, afi, safi, dest, new_select, - old_select); - --- -2.17.1 - diff --git a/src/sonic-frr/patch/0027-lib-Do-not-convert-EVPN-prefixes-into-IPv4-IPv6-if-n.patch b/src/sonic-frr/patch/0027-lib-Do-not-convert-EVPN-prefixes-into-IPv4-IPv6-if-n.patch deleted file mode 100644 index fd9ec4608dff..000000000000 --- a/src/sonic-frr/patch/0027-lib-Do-not-convert-EVPN-prefixes-into-IPv4-IPv6-if-n.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 37204cdc64999f8215deb99d4a5aa1a4222389af Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Thu, 15 Feb 2024 12:07:43 +0200 -Subject: [PATCH] lib: Do not convert EVPN prefixes into IPv4/IPv6 if not - needed - -Convert only when this is really needed, e.g. `match ip address prefix-list ...`. - -Otherwise, we can't have mixed match clauses, like: - -``` -match ip address prefix-list p1 -match evpn route-type prefix -``` - -This won't work, because the prefix is already converted, and we can't extract -route type, vni, etc. from the original EVPN prefix. - -Signed-off-by: Donatas Abraitis -(cherry picked from commit 439b739495e86912c8b9ec36b84e55311c549ba0) - -diff --git a/lib/routemap.c b/lib/routemap.c -index 683943eb6d..ed7c4ed72c 100644 ---- a/lib/routemap.c -+++ b/lib/routemap.c -@@ -2553,7 +2553,6 @@ route_map_result_t route_map_apply_ext(struct route_map *map, - struct route_map_index *index = NULL; - struct route_map_rule *set = NULL; - bool skip_match_clause = false; -- struct prefix conv; - - if (recursion > RMAP_RECURSION_LIMIT) { - flog_warn( -@@ -2571,27 +2570,14 @@ route_map_result_t route_map_apply_ext(struct route_map *map, - - map->applied++; - -- /* -- * Handling for matching evpn_routes in the prefix table. -- * -- * We convert type2/5 prefix to ipv4/6 prefix to do longest -- * prefix matching on. -- */ - if (prefix->family == AF_EVPN) { -- if (evpn_prefix2prefix(prefix, &conv) != 0) { -- zlog_debug( -- "Unable to convert EVPN prefix %pFX into IPv4/IPv6 prefix. Falling back to non-optimized route-map lookup", -- prefix); -- } else { -- zlog_debug( -- "Converted EVPN prefix %pFX into %pFX for optimized route-map lookup", -- prefix, &conv); -- -- prefix = &conv; -- } -+ index = map->head; -+ } else { -+ skip_match_clause = true; -+ index = route_map_get_index(map, prefix, match_object, -+ &match_ret); - } - -- index = route_map_get_index(map, prefix, match_object, &match_ret); - if (index) { - index->applied++; - if (rmap_debug) -@@ -2615,7 +2601,6 @@ route_map_result_t route_map_apply_ext(struct route_map *map, - ret = RMAP_DENYMATCH; - goto route_map_apply_end; - } -- skip_match_clause = true; - - for (; index; index = index->next) { - if (!skip_match_clause) { --- -2.17.1 - diff --git a/src/sonic-frr/patch/0029-zebra-nhg-fix-on-intf-up.patch b/src/sonic-frr/patch/0029-zebra-nhg-fix-on-intf-up.patch deleted file mode 100644 index 64e8ac5d5713..000000000000 --- a/src/sonic-frr/patch/0029-zebra-nhg-fix-on-intf-up.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 4a58bc9e856c4ca953474548d61f06aad2fdf45b Mon Sep 17 00:00:00 2001 -From: Ashwini Reddy -Date: Wed, 19 Apr 2023 11:35:25 -0700 -Subject: [PATCH 1/3] zebra: re-install nhg on interface up - -Intermittently zebra and kernel are out of sync -when interface flaps and the add's/dels are in -same processing queue and zebra assumes no change in nexthop. -Hence we need to bring in a reinstall to kernel -of the nexthops and routes to sync their states. - -Upon interface flap kernel would have deleted NHGs -associated to a interface (the one flapped), -zebra retains NHGs for 3 mins even though upper -layer protocol removes the nexthops (associated NHG). -As part of interface address add , -re-add singleton NHGs associated to interface. - -Ticket: #3173663 -Issue: 3173663 - -Signed-off-by: Ashwini Reddy -Signed-off-by: Chirag Shah ---- - lib/nexthop.c | 9 +++++++++ - lib/nexthop.h | 3 +++ - zebra/redistribute.c | 4 ++++ - zebra/zebra_nhg.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ - zebra/zebra_nhg.h | 1 + - 5 files changed, 63 insertions(+) - -diff --git a/lib/nexthop.c b/lib/nexthop.c -index 52679388fd..e3bdbfb9e8 100644 ---- a/lib/nexthop.c -+++ b/lib/nexthop.c -@@ -1093,3 +1093,12 @@ static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea, - } - return -1; - } -+ -+bool nexthop_is_ifindex_type(const struct nexthop *nh) -+{ -+ if (nh->type == NEXTHOP_TYPE_IFINDEX || -+ nh->type == NEXTHOP_TYPE_IPV4_IFINDEX || -+ nh->type == NEXTHOP_TYPE_IPV6_IFINDEX) -+ return true; -+ return false; -+} -diff --git a/lib/nexthop.h b/lib/nexthop.h -index f6fb6ec2b7..a52ae02172 100644 ---- a/lib/nexthop.h -+++ b/lib/nexthop.h -@@ -260,6 +260,9 @@ extern struct nexthop *nexthop_dup(const struct nexthop *nexthop, - extern struct nexthop *nexthop_dup_no_recurse(const struct nexthop *nexthop, - struct nexthop *rparent); - -+/* Check nexthop of IFINDEX type */ -+extern bool nexthop_is_ifindex_type(const struct nexthop *nh); -+ - /* - * Parse one or more backup index values, as comma-separated numbers, - * into caller's array of uint8_ts. The array must be NEXTHOP_MAX_BACKUPS -diff --git a/zebra/redistribute.c b/zebra/redistribute.c -index 4a8fe938ed..fccbee7d85 100644 ---- a/zebra/redistribute.c -+++ b/zebra/redistribute.c -@@ -561,6 +561,10 @@ void zebra_interface_address_add_update(struct interface *ifp, - client, ifp, ifc); - } - } -+ /* interface associated NHGs may have been deleted, -+ * re-sync zebra -> dplane NHGs -+ */ -+ zebra_interface_nhg_reinstall(ifp); - } - - /* Interface address deletion. */ -diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c -index 54c66fbf18..753efef7f8 100644 ---- a/zebra/zebra_nhg.c -+++ b/zebra/zebra_nhg.c -@@ -3003,6 +3003,12 @@ void zebra_nhg_install_kernel(struct nhg_hash_entry *nhe) - /* Resolve it first */ - nhe = zebra_nhg_resolve(nhe); - -+ if (zebra_nhg_set_valid_if_active(nhe)) { -+ if (IS_ZEBRA_DEBUG_NHG_DETAIL) -+ zlog_debug("%s: valid flag set for nh %pNG", __func__, -+ nhe); -+ } -+ - /* Make sure all depends are installed/queued */ - frr_each(nhg_connected_tree, &nhe->nhg_depends, rb_node_dep) { - zebra_nhg_install_kernel(rb_node_dep->nhe); -@@ -3586,3 +3592,43 @@ static ssize_t printfrr_nhghe(struct fbuf *buf, struct printfrr_eargs *ea, - ret += bputs(buf, "]"); - return ret; - } -+ -+/* -+ * On interface add the nexthop that resolves to this intf needs -+ * a re-install. There are following scenarios when the nexthop group update -+ * gets skipped: -+ * 1. When upper level protocol sends removal of NHG, there is -+ * timer running to keep NHG for 180 seconds, during this interval, same route -+ * with same set of nexthops installation is given , the same NHG is used -+ * but since NHG is not reinstalled on interface address add, it is not aware -+ * in Dplan/Kernel. -+ * 2. Due to a quick port flap due to interface add and delete -+ * to be processed in same queue one after another. Zebra believes that -+ * there is no change in nhg in this case. Hence this re-install will -+ * make sure the nexthop group gets updated to Dplan/Kernel. -+ */ -+void zebra_interface_nhg_reinstall(struct interface *ifp) -+{ -+ struct nhg_connected *rb_node_dep = NULL; -+ struct zebra_if *zif = ifp->info; -+ struct nexthop *nh; -+ -+ if (IS_ZEBRA_DEBUG_NHG_DETAIL) -+ zlog_debug( -+ "%s: Installing interface %s associated NHGs into kernel", -+ __func__, ifp->name); -+ -+ frr_each (nhg_connected_tree, &zif->nhg_dependents, rb_node_dep) { -+ nh = rb_node_dep->nhe->nhg.nexthop; -+ if (zebra_nhg_set_valid_if_active(rb_node_dep->nhe)) { -+ if (IS_ZEBRA_DEBUG_NHG_DETAIL) -+ zlog_debug( -+ "%s: Setting the valid flag for nhe %pNG, interface: %s", -+ __func__, rb_node_dep->nhe, ifp->name); -+ } -+ /* Check for singleton NHG associated to interface */ -+ if (nexthop_is_ifindex_type(nh) && -+ zebra_nhg_depends_is_empty(rb_node_dep->nhe)) -+ zebra_nhg_install_kernel(rb_node_dep->nhe); -+ } -+} -diff --git a/zebra/zebra_nhg.h b/zebra/zebra_nhg.h -index 9b925bf10f..18914b7856 100644 ---- a/zebra/zebra_nhg.h -+++ b/zebra/zebra_nhg.h -@@ -374,6 +374,7 @@ extern uint8_t zebra_nhg_nhe2grp(struct nh_grp *grp, struct nhg_hash_entry *nhe, - /* Dataplane install/uninstall */ - extern void zebra_nhg_install_kernel(struct nhg_hash_entry *nhe); - extern void zebra_nhg_uninstall_kernel(struct nhg_hash_entry *nhe); -+extern void zebra_interface_nhg_reinstall(struct interface *ifp); - - /* Forward ref of dplane update context type */ - struct zebra_dplane_ctx; --- -2.17.1 - - -From 2b99f5ccf7768eff1393e07db2b77abc104dbbd7 Mon Sep 17 00:00:00 2001 -From: Chirag Shah -Date: Fri, 28 Apr 2023 19:09:55 -0700 -Subject: [PATCH 2/3] zebra:re-install dependent nhgs on interface up - -Upon interface up associated singleton NHG's -dependent NHGs needs to be reinstalled as -kernel would have deleted if there is no route -referencing it. - -Ticket:#3416477 -Issue:3416477 -Testing Done: -flap interfaces which are part of route NHG, -upon interfaces up event, NHGs are resynced -into dplane. - -Signed-off-by: Chirag Shah ---- - zebra/zebra_nhg.c | 43 ++++++++++++++++++++++++++++++++++++++----- - 1 file changed, 38 insertions(+), 5 deletions(-) - -diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c -index 753efef7f8..e5efbf8d5f 100644 ---- a/zebra/zebra_nhg.c -+++ b/zebra/zebra_nhg.c -@@ -1140,13 +1140,23 @@ static void zebra_nhg_handle_uninstall(struct nhg_hash_entry *nhe) - zebra_nhg_free(nhe); - } - --static void zebra_nhg_handle_install(struct nhg_hash_entry *nhe) -+static void zebra_nhg_handle_install(struct nhg_hash_entry *nhe, bool install) - { - /* Update validity of groups depending on it */ - struct nhg_connected *rb_node_dep; - -- frr_each_safe(nhg_connected_tree, &nhe->nhg_dependents, rb_node_dep) -+ frr_each_safe (nhg_connected_tree, &nhe->nhg_dependents, rb_node_dep) { - zebra_nhg_set_valid(rb_node_dep->nhe); -+ /* install dependent NHG into kernel */ -+ if (install) { -+ if (IS_ZEBRA_DEBUG_NHG_DETAIL) -+ zlog_debug( -+ "%s nh id %u (flags 0x%x) associated dependent NHG %pNG install", -+ __func__, nhe->id, nhe->flags, -+ rb_node_dep->nhe); -+ zebra_nhg_install_kernel(rb_node_dep->nhe); -+ } -+ } - } - - /* -@@ -3035,7 +3045,7 @@ void zebra_nhg_install_kernel(struct nhg_hash_entry *nhe) - break; - case ZEBRA_DPLANE_REQUEST_SUCCESS: - SET_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED); -- zebra_nhg_handle_install(nhe); -+ zebra_nhg_handle_install(nhe, false); - break; - } - } -@@ -3109,7 +3119,7 @@ void zebra_nhg_dplane_result(struct zebra_dplane_ctx *ctx) - if (status == ZEBRA_DPLANE_REQUEST_SUCCESS) { - SET_FLAG(nhe->flags, NEXTHOP_GROUP_VALID); - SET_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED); -- zebra_nhg_handle_install(nhe); -+ zebra_nhg_handle_install(nhe, true); - - /* If daemon nhg, send it an update */ - if (PROTO_OWNED(nhe)) -@@ -3628,7 +3638,30 @@ void zebra_interface_nhg_reinstall(struct interface *ifp) - } - /* Check for singleton NHG associated to interface */ - if (nexthop_is_ifindex_type(nh) && -- zebra_nhg_depends_is_empty(rb_node_dep->nhe)) -+ zebra_nhg_depends_is_empty(rb_node_dep->nhe)) { -+ struct nhg_connected *rb_node_dependent; -+ -+ if (IS_ZEBRA_DEBUG_NHG) -+ zlog_debug( -+ "%s install nhe %pNG nh type %u flags 0x%x", -+ __func__, rb_node_dep->nhe, nh->type, -+ rb_node_dep->nhe->flags); - zebra_nhg_install_kernel(rb_node_dep->nhe); -+ -+ /* mark depedent uninstall, when interface associated -+ * singleton is installed, install depedent -+ */ -+ frr_each_safe (nhg_connected_tree, -+ &rb_node_dep->nhe->nhg_dependents, -+ rb_node_dependent) { -+ if (IS_ZEBRA_DEBUG_NHG) -+ zlog_debug( -+ "%s dependent nhe %pNG unset installed flag", -+ __func__, -+ rb_node_dependent->nhe); -+ UNSET_FLAG(rb_node_dependent->nhe->flags, -+ NEXTHOP_GROUP_INSTALLED); -+ } -+ } - } - } --- -2.17.1 - - -From be767bd66143c2dcdd564a40a852400ae9e251e5 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Fri, 19 Apr 2024 12:13:32 -0400 -Subject: [PATCH 3/3] lib, zebra: Check for not being a blackhole route - -In zebra_interface_nhg_reinstall zebra is checking that the -nhg is a singleton and not a blackhole nhg. This was originally -done with checking that the nexthop is a NEXTHOP_TYPE_IFINDEX, -NEXTHOP_TYPE_IPV4_IFINDEX and NEXTHOP_TYPE_IPV6_IFINDEX. This -was excluding NEXTHOP_TYPE_IPV4 and NEXTHOP_TYPE_IPV6. These -were both possible to be received and maintained from the upper -level protocol for when a route is being recursively resolved. -If we have gotten to this point in zebra_interface_nhg_reinstall -the nexthop group has already been installed at least once -and we *know* that it is actually a valid nexthop. What the -test is really trying to do is ensure that we are not reinstalling -a blackhole nexthop group( Which is not possible to even be -here by the way, but safety first! ). So let's change -to test for that instead. - -Signed-off-by: Donald Sharp ---- - lib/nexthop.c | 8 ++------ - lib/nexthop.h | 4 ++-- - zebra/zebra_nhg.c | 3 ++- - 3 files changed, 6 insertions(+), 9 deletions(-) - -diff --git a/lib/nexthop.c b/lib/nexthop.c -index e3bdbfb9e8..884255f158 100644 ---- a/lib/nexthop.c -+++ b/lib/nexthop.c -@@ -1094,11 +1094,7 @@ static ssize_t printfrr_nh(struct fbuf *buf, struct printfrr_eargs *ea, - return -1; - } - --bool nexthop_is_ifindex_type(const struct nexthop *nh) -+bool nexthop_is_blackhole(const struct nexthop *nh) - { -- if (nh->type == NEXTHOP_TYPE_IFINDEX || -- nh->type == NEXTHOP_TYPE_IPV4_IFINDEX || -- nh->type == NEXTHOP_TYPE_IPV6_IFINDEX) -- return true; -- return false; -+ return nh->type == NEXTHOP_TYPE_BLACKHOLE; - } -diff --git a/lib/nexthop.h b/lib/nexthop.h -index a52ae02172..bd1c0514fc 100644 ---- a/lib/nexthop.h -+++ b/lib/nexthop.h -@@ -260,8 +260,8 @@ extern struct nexthop *nexthop_dup(const struct nexthop *nexthop, - extern struct nexthop *nexthop_dup_no_recurse(const struct nexthop *nexthop, - struct nexthop *rparent); - --/* Check nexthop of IFINDEX type */ --extern bool nexthop_is_ifindex_type(const struct nexthop *nh); -+/* Is this nexthop a blackhole? */ -+extern bool nexthop_is_blackhole(const struct nexthop *nh); - - /* - * Parse one or more backup index values, as comma-separated numbers, -diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c -index e5efbf8d5f..33d2344f51 100644 ---- a/zebra/zebra_nhg.c -+++ b/zebra/zebra_nhg.c -@@ -3636,8 +3636,9 @@ void zebra_interface_nhg_reinstall(struct interface *ifp) - "%s: Setting the valid flag for nhe %pNG, interface: %s", - __func__, rb_node_dep->nhe, ifp->name); - } -+ - /* Check for singleton NHG associated to interface */ -- if (nexthop_is_ifindex_type(nh) && -+ if (!nexthop_is_blackhole(nh) && - zebra_nhg_depends_is_empty(rb_node_dep->nhe)) { - struct nhg_connected *rb_node_dependent; - --- -2.17.1 - diff --git a/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch b/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch index 0bebd1ea12ba..f6de465595a5 100644 --- a/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch +++ b/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch @@ -50,10 +50,10 @@ Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja diff --git a/zebra/zserv.c b/zebra/zserv.c -index 2024f34534..de6e404fc4 100644 +index 6a64176d9..488712397 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c -@@ -318,6 +318,14 @@ zwrite_fail: +@@ -306,6 +306,14 @@ zwrite_fail: * this task reschedules itself. * * Any failure in any of these actions is handled by terminating the client. @@ -66,9 +66,9 @@ index 2024f34534..de6e404fc4 100644 + * The main thread processes the items in ibuf_fifo and always signals the + * client IO thread. */ - static void zserv_read(struct thread *thread) + static void zserv_read(struct event *thread) { -@@ -325,15 +333,25 @@ static void zserv_read(struct thread *thread) +@@ -313,16 +321,26 @@ static void zserv_read(struct event *thread) int sock; size_t already; struct stream_fifo *cache; @@ -80,7 +80,7 @@ index 2024f34534..de6e404fc4 100644 + int p2p_avail; /* How much space is available for p2p */ struct zmsghdr hdr; + size_t client_ibuf_fifo_cnt = stream_fifo_count_safe(client->ibuf_fifo); - + p2p_orig = atomic_load_explicit(&zrouter.packets_to_process, memory_order_relaxed); + p2p_avail = p2p_orig - client_ibuf_fifo_cnt; @@ -95,19 +95,21 @@ index 2024f34534..de6e404fc4 100644 + p2p = p2p_avail; cache = stream_fifo_new(); - p2p = p2p_orig; - sock = THREAD_FD(thread); - +- sock = EVENT_FD(thread); ++ sock = EVENT_FD(thread); + while (p2p) { -@@ -433,7 +451,7 @@ static void zserv_read(struct thread *thread) + ssize_t nb; +@@ -421,7 +439,7 @@ static void zserv_read(struct event *thread) p2p--; } - + - if (p2p < p2p_orig) { + if (p2p < (uint32_t)p2p_avail) { uint64_t time_now = monotime(NULL); - + /* update session statistics */ -@@ -447,19 +465,23 @@ static void zserv_read(struct thread *thread) +@@ -435,19 +453,23 @@ static void zserv_read(struct event *thread) while (cache->head) stream_fifo_push(client->ibuf_fifo, stream_fifo_pop(cache)); @@ -115,28 +117,28 @@ index 2024f34534..de6e404fc4 100644 + client_ibuf_fifo_cnt = + stream_fifo_count_safe(client->ibuf_fifo); } - + /* Schedule job to process those packets */ zserv_event(client, ZSERV_PROCESS_MESSAGES); - } - + if (IS_ZEBRA_DEBUG_PACKET) - zlog_debug("Read %d packets from client: %s", p2p_orig - p2p, - zebra_route_string(client->proto)); + zlog_debug("Read %d packets from client: %s. Current ibuf fifo count: %zu. Conf P2p %d", + p2p_avail - p2p, zebra_route_string(client->proto), + client_ibuf_fifo_cnt, p2p_orig); - + - /* Reschedule ourselves */ - zserv_client_event(client, ZSERV_CLIENT_READ); + /* Reschedule ourselves since we have space in ibuf_fifo */ + if (client_ibuf_fifo_cnt < p2p_orig) + zserv_client_event(client, ZSERV_CLIENT_READ); - + stream_fifo_free(cache); - -@@ -495,14 +517,20 @@ static void zserv_client_event(struct zserv *client, + +@@ -483,14 +505,20 @@ static void zserv_client_event(struct zserv *client, * as the task argument. * * Each message is popped off the client's input queue and the action associated @@ -157,9 +159,9 @@ index 2024f34534..de6e404fc4 100644 + * items to the ibuf_fifo (until max limit) + * - the hidden config change (zebra zapi-packets <>) is taken into account. */ - static void zserv_process_messages(struct thread *thread) + static void zserv_process_messages(struct event *thread) { -@@ -538,6 +566,9 @@ static void zserv_process_messages(struct thread *thread) +@@ -524,6 +552,9 @@ static void zserv_process_messages(struct event *thread) /* Reschedule ourselves if necessary */ if (need_resched) zserv_event(client, ZSERV_PROCESS_MESSAGES); @@ -167,8 +169,5 @@ index 2024f34534..de6e404fc4 100644 + /* Ensure to include the read socket in the select/poll/etc.. */ + zserv_client_event(client, ZSERV_CLIENT_READ); } - - int zserv_send_message(struct zserv *client, struct stream *msg) --- -2.17.1 + int zserv_send_message(struct zserv *client, struct stream *msg) diff --git a/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch b/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch index 21a2b90f44f4..142ca6d0eff0 100644 --- a/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch +++ b/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch @@ -15,12 +15,12 @@ Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c -index 90ae580bab..e28dde5d16 100644 +index 851c4880c..44d5ee68c 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c -@@ -214,6 +214,8 @@ static __attribute__((__noreturn__)) void bgp_exit(int status) +@@ -207,6 +207,8 @@ static __attribute__((__noreturn__)) void bgp_exit(int status) bgp_evpn_mh_finish(); - bgp_l3nhg_finish(); + bgp_nhg_finish(); + zebra_announce_fini(&bm->zebra_announce_head); + @@ -28,19 +28,28 @@ index 90ae580bab..e28dde5d16 100644 bgp_dump_finish(); diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h -index 121afc481f..d43bf86eb9 100644 +index 5b4c3be21..67431ea4f 100644 --- a/bgpd/bgp_table.h +++ b/bgpd/bgp_table.h -@@ -101,6 +101,8 @@ struct bgp_node { +@@ -75,6 +75,9 @@ struct bgp_dest { + struct bgp_dest *pdest; STAILQ_ENTRY(bgp_dest) pq; - -+ struct zebra_announce_item zai; ++ struct bgp_path_info *za_bgp_pi; + ++ struct zebra_announce_item zai; + uint64_t version; - mpls_label_t local_label; -@@ -121,6 +123,8 @@ struct bgp_node { +@@ -91,12 +94,16 @@ struct bgp_dest { + #define BGP_NODE_LABEL_REQUESTED (1 << 7) + #define BGP_NODE_SOFT_RECONFIG (1 << 8) + #define BGP_NODE_PROCESS_CLEAR (1 << 9) ++#define BGP_NODE_SCHEDULE_FOR_INSTALL (1 << 10) ++#define BGP_NODE_SCHEDULE_FOR_DELETE (1 << 11) + + struct bgp_addpath_node_data tx_addpath; + enum bgp_path_selection_reason reason; }; @@ -50,10 +59,31 @@ index 121afc481f..d43bf86eb9 100644 /* * bgp_table_iter_t diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 023047050b..392423e028 100644 +index 337879a2d..88d4201a9 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c -@@ -8017,6 +8017,8 @@ void bgp_master_init(struct thread_master *master, const int buffer_size, +@@ -3867,10 +3867,20 @@ int bgp_delete(struct bgp *bgp) + afi_t afi; + safi_t safi; + int i; ++ struct bgp_dest *dest = NULL; + struct graceful_restart_info *gr_info; + + assert(bgp); + ++ while (zebra_announce_count(&bm->zebra_announce_head)) { ++ dest = zebra_announce_pop(&bm->zebra_announce_head); ++ if (dest->za_bgp_pi->peer->bgp == bgp) { ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ bgp_dest_unlock_node(dest); ++ } else ++ zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ } ++ + bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); + + /* make sure we withdraw any exported routes */ +@@ -8296,6 +8306,8 @@ void bgp_master_init(struct event_loop *master, const int buffer_size, memset(&bgp_master, 0, sizeof(bgp_master)); bm = &bgp_master; @@ -62,23 +92,46 @@ index 023047050b..392423e028 100644 bm->bgp = list_new(); bm->listen_sockets = list_new(); bm->port = BGP_PORT_DEFAULT; +@@ -8314,6 +8326,7 @@ void bgp_master_init(struct event_loop *master, const int buffer_size, + bm->outq_limit = BM_DEFAULT_Q_LIMIT; + bm->t_bgp_sync_label_manager = NULL; + bm->t_bgp_start_label_manager = NULL; ++ bm->t_bgp_zebra_route = NULL; + + bgp_mac_init(); + /* init the rd id space. +@@ -8564,6 +8577,7 @@ void bgp_terminate(void) + EVENT_OFF(bm->t_rmap_update); + EVENT_OFF(bm->t_bgp_sync_label_manager); + EVENT_OFF(bm->t_bgp_start_label_manager); ++ EVENT_OFF(bm->t_bgp_zebra_route); + + bgp_mac_finish(); + } diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h -index 72b5b50fb4..55f53bf9d3 100644 +index 0f6909532..a6b398a44 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h -@@ -32,6 +32,8 @@ - #include "srv6.h" +@@ -18,6 +18,8 @@ #include "iana_afi.h" + #include "asn.h" +PREDECL_LIST(zebra_announce); + /* For union sockunion. */ #include "queue.h" #include "sockunion.h" -@@ -180,6 +182,9 @@ struct bgp_master { +@@ -170,11 +172,16 @@ struct bgp_master { uint32_t inq_limit; uint32_t outq_limit; ++ struct event *t_bgp_zebra_route; ++ + struct event *t_bgp_sync_label_manager; + struct event *t_bgp_start_label_manager; + + bool v6_with_v4_nexthops; + + /* To preserve ordering of installations into zebra across all Vrfs */ + struct zebra_announce_head zebra_announce_head; + diff --git a/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch b/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch deleted file mode 100644 index bfefccceff10..000000000000 --- a/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 69e38aa82f325129ebad4535be5d834c599b5c0b Mon Sep 17 00:00:00 2001 -From: Philippe Guibert -Date: Wed, 7 Feb 2024 22:34:34 +0100 -Subject: [PATCH 04/11] bgpd: fix flushing ipv6 flowspec entries when peering - stops - -When a BGP flowspec peering stops, the BGP RIB entries for IPv6 -flowspec entries are removed, but not the ZEBRA RIB IPv6 entries. - -Actually, when calling bgp_zebra_withdraw() function call, only -the AFI_IP parameter is passed to the bgp_pbr_update_entry() function -in charge of the Flowspec add/delete in zebra. Fix this by passing -the AFI parameter to the bgp_zebra_withdraw() function. - -Note that using topotest does not show up the problem as the -flowspec driver code is not present and was refused. Without that, -routes are not installed, and can not be uninstalled. - -Fixes: 529efa234655 ("bgpd: allow flowspec entries to be announced to zebra") -Link: https://github.com/FRRouting/frr/pull/2025 - -Signed-off-by: Philippe Guibert - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index fbff57634a..455cd6cdbb 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -3312,7 +3312,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - */ - if (old_select && - is_route_parent_evpn(old_select)) -- bgp_zebra_withdraw(p, old_select, bgp, safi); -+ bgp_zebra_withdraw(p, old_select, bgp, afi, -+ safi); - - bgp_zebra_announce(dest, p, new_select, bgp, afi, safi); - } else { -@@ -3322,7 +3323,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - || old_select->sub_type == BGP_ROUTE_AGGREGATE - || old_select->sub_type == BGP_ROUTE_IMPORTED)) - -- bgp_zebra_withdraw(p, old_select, bgp, safi); -+ bgp_zebra_withdraw(p, old_select, bgp, afi, -+ safi); - } - } - -@@ -4201,7 +4203,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, - if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { - if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) - /* remove from RIB previous entry */ -- bgp_zebra_withdraw(p, pi, bgp, safi); -+ bgp_zebra_withdraw(p, pi, bgp, afi, safi); - } - - if (peer->sort == BGP_PEER_EBGP) { -@@ -5841,7 +5843,7 @@ bool bgp_inbound_policy_exists(struct peer *peer, struct bgp_filter *filter) - } - - static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, -- safi_t safi) -+ afi_t afi, safi_t safi) - { - struct bgp_dest *dest; - struct bgp_path_info *pi; -@@ -5865,7 +5867,8 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, - || pi->sub_type == BGP_ROUTE_IMPORTED)) { - - if (bgp_fibupd_safi(safi)) -- bgp_zebra_withdraw(p, pi, bgp, safi); -+ bgp_zebra_withdraw(p, pi, bgp, afi, -+ safi); - } - - bgp_path_info_reap(dest, pi); -@@ -5882,7 +5885,7 @@ void bgp_cleanup_routes(struct bgp *bgp) - for (afi = AFI_IP; afi < AFI_MAX; ++afi) { - if (afi == AFI_L2VPN) - continue; -- bgp_cleanup_table(bgp, bgp->rib[afi][SAFI_UNICAST], -+ bgp_cleanup_table(bgp, bgp->rib[afi][SAFI_UNICAST], afi, - SAFI_UNICAST); - /* - * VPN and ENCAP and EVPN tables are two-level (RD is top level) -@@ -5894,7 +5897,7 @@ void bgp_cleanup_routes(struct bgp *bgp) - dest = bgp_route_next(dest)) { - table = bgp_dest_get_bgp_table_info(dest); - if (table != NULL) { -- bgp_cleanup_table(bgp, table, safi); -+ bgp_cleanup_table(bgp, table, afi, safi); - bgp_table_finish(&table); - bgp_dest_set_bgp_table_info(dest, NULL); - bgp_dest_unlock_node(dest); -@@ -5905,7 +5908,7 @@ void bgp_cleanup_routes(struct bgp *bgp) - dest = bgp_route_next(dest)) { - table = bgp_dest_get_bgp_table_info(dest); - if (table != NULL) { -- bgp_cleanup_table(bgp, table, safi); -+ bgp_cleanup_table(bgp, table, afi, safi); - bgp_table_finish(&table); - bgp_dest_set_bgp_table_info(dest, NULL); - bgp_dest_unlock_node(dest); -@@ -5917,7 +5920,7 @@ void bgp_cleanup_routes(struct bgp *bgp) - dest = bgp_route_next(dest)) { - table = bgp_dest_get_bgp_table_info(dest); - if (table != NULL) { -- bgp_cleanup_table(bgp, table, SAFI_EVPN); -+ bgp_cleanup_table(bgp, table, afi, SAFI_EVPN); - bgp_table_finish(&table); - bgp_dest_set_bgp_table_info(dest, NULL); - bgp_dest_unlock_node(dest); -diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index ff79746b4c..69240a3b83 100644 ---- a/bgpd/bgp_zebra.c -+++ b/bgpd/bgp_zebra.c -@@ -1761,7 +1761,7 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, - } - - void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, -- struct bgp *bgp, safi_t safi) -+ struct bgp *bgp, afi_t afi, safi_t safi) - { - struct zapi_route api; - struct peer *peer; -@@ -1780,7 +1780,7 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, - - if (safi == SAFI_FLOWSPEC) { - peer = info->peer; -- bgp_pbr_update_entry(peer->bgp, p, info, AFI_IP, safi, false); -+ bgp_pbr_update_entry(peer->bgp, p, info, afi, safi, false); - return; - } - -@@ -1821,7 +1821,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa - if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) - && (pi->type == ZEBRA_ROUTE_BGP)) - bgp_zebra_withdraw(bgp_dest_get_prefix(dest), -- pi, bgp, safi); -+ pi, bgp, afi, safi); - } - } - } -diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h -index 0a41069411..a5fe8d7ace 100644 ---- a/bgpd/bgp_zebra.h -+++ b/bgpd/bgp_zebra.h -@@ -49,7 +49,7 @@ extern void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, - extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); - extern void bgp_zebra_withdraw(const struct prefix *p, - struct bgp_path_info *path, struct bgp *bgp, -- safi_t safi); -+ afi_t afi, safi_t safi); - - /* Announce routes of any bgp subtype of a table to zebra */ - extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, --- -2.17.1 - diff --git a/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch b/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch index 16383dc95caa..126d3d05d669 100644 --- a/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch +++ b/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch @@ -15,10 +15,10 @@ Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 455cd6cdbb..d19f27110e 100644 +index a0113c04e..99fb021b1 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c -@@ -3214,8 +3214,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3419,8 +3419,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, || new_select->sub_type == BGP_ROUTE_IMPORTED)) @@ -29,7 +29,7 @@ index 455cd6cdbb..d19f27110e 100644 } } -@@ -3312,10 +3312,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3529,10 +3529,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, */ if (old_select && is_route_parent_evpn(old_select)) @@ -42,7 +42,7 @@ index 455cd6cdbb..d19f27110e 100644 } else { /* Withdraw the route from the kernel. */ if (old_select && old_select->type == ZEBRA_ROUTE_BGP -@@ -3323,8 +3322,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3540,8 +3539,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, || old_select->sub_type == BGP_ROUTE_AGGREGATE || old_select->sub_type == BGP_ROUTE_IMPORTED)) @@ -52,7 +52,7 @@ index 455cd6cdbb..d19f27110e 100644 } } -@@ -4203,7 +4201,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, +@@ -4446,7 +4444,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) /* remove from RIB previous entry */ @@ -61,7 +61,7 @@ index 455cd6cdbb..d19f27110e 100644 } if (peer->sort == BGP_PEER_EBGP) { -@@ -5867,8 +5865,7 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, +@@ -6072,8 +6070,7 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, || pi->sub_type == BGP_ROUTE_IMPORTED)) { if (bgp_fibupd_safi(safi)) @@ -70,13 +70,13 @@ index 455cd6cdbb..d19f27110e 100644 + bgp_zebra_withdraw(dest, pi, bgp); } - bgp_path_info_reap(dest, pi); + dest = bgp_path_info_reap(dest, pi); diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index 69240a3b83..920df835a4 100644 +index fe29662e2..9b4b46b40 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c -@@ -1292,9 +1292,8 @@ static bool bgp_zebra_use_nhop_weighted(struct bgp *bgp, struct attr *attr, - return true; +@@ -1507,9 +1507,8 @@ static void bgp_debug_zebra_nh(struct zapi_route *api) + } } -void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, @@ -85,18 +85,18 @@ index 69240a3b83..920df835a4 100644 +void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, + struct bgp *bgp) { + struct bgp_path_info *bpi_ultimate; struct zapi_route api = { 0 }; - struct zapi_nexthop *api_nh; -@@ -1321,6 +1320,8 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, - uint32_t ttl = 0; - uint32_t bos = 0; - uint32_t exp = 0; +@@ -1522,6 +1521,8 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + bool is_add; + uint32_t nhg_id = 0; + uint32_t recursion_flag = 0; + struct bgp_table *table = bgp_dest_table(dest); + const struct prefix *p = bgp_dest_get_prefix(dest); /* * BGP is installing this route and bgp has been configured -@@ -1339,9 +1340,9 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, +@@ -1540,16 +1541,16 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, if (bgp->main_zebra_update_hold) return; @@ -105,11 +105,10 @@ index 69240a3b83..920df835a4 100644 - safi, true); + if (table->safi == SAFI_FLOWSPEC) { + bgp_pbr_update_entry(bgp, p, info, table->afi, table->safi, -+ true); ++ true); return; } -@@ -1354,7 +1355,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, /* Make Zebra API structure. */ api.vrf_id = bgp->vrf_id; api.type = ZEBRA_ROUTE_BGP; @@ -118,23 +117,16 @@ index 69240a3b83..920df835a4 100644 api.prefix = *p; SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP); -@@ -1458,12 +1459,13 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, - } - } +@@ -1586,7 +1587,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + metric = info->attr->med; -- if (bgp->table_map[afi][safi].name) { -+ if (bgp->table_map[table->afi][table->safi].name) { - /* Copy info and attributes, so the route-map - apply doesn't modify the BGP route info. */ - local_attr = *mpinfo->attr; - mpinfo_cp->attr = &local_attr; -- if (!bgp_table_map_apply(bgp->table_map[afi][safi].map, -+ if (!bgp_table_map_apply(bgp->table_map[table->afi] -+ [table->safi].map, - p, mpinfo_cp)) - continue; - -@@ -1619,7 +1621,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + bgp_zebra_announce_parse_nexthop(info, p, bgp, &api, &valid_nh_count, +- afi, safi, &nhg_id, &metric, &tag, ++ table->afi, table->safi, &nhg_id, &metric, &tag, + &allow_recursion); + + is_add = (valid_nh_count || nhg_id) ? true : false; +@@ -1640,7 +1641,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, api.tag = tag; } @@ -143,7 +135,7 @@ index 69240a3b83..920df835a4 100644 if (distance) { SET_FLAG(api.message, ZAPI_MESSAGE_DISTANCE); api.distance = distance; -@@ -1731,9 +1733,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) +@@ -1689,9 +1690,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) && (pi->sub_type == BGP_ROUTE_NORMAL || pi->sub_type == BGP_ROUTE_IMPORTED))) @@ -154,7 +146,7 @@ index 69240a3b83..920df835a4 100644 } /* Announce routes of any bgp subtype of a table to zebra */ -@@ -1755,16 +1755,16 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +@@ -1713,17 +1712,16 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && pi->type == ZEBRA_ROUTE_BGP) @@ -171,12 +163,13 @@ index 69240a3b83..920df835a4 100644 { struct zapi_route api; struct peer *peer; +- + struct bgp_table *table = bgp_dest_table(dest); + const struct prefix *p = bgp_dest_get_prefix(dest); - /* * If we are withdrawing the route, we don't need to have this -@@ -1778,16 +1778,17 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, + * flag set. So unset it. +@@ -1736,16 +1734,16 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, if (!bgp_install_info_to_zebra(bgp)) return; @@ -184,8 +177,7 @@ index 69240a3b83..920df835a4 100644 + if (table->safi == SAFI_FLOWSPEC) { peer = info->peer; - bgp_pbr_update_entry(peer->bgp, p, info, afi, safi, false); -+ bgp_pbr_update_entry(peer->bgp, p, info, table->afi, -+ table->safi, false); ++ bgp_pbr_update_entry(peer->bgp, p, info, table->afi, table->safi, false); return; } @@ -197,7 +189,7 @@ index 69240a3b83..920df835a4 100644 api.prefix = *p; if (info->attr->rmap_table_id) { -@@ -1820,8 +1821,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa +@@ -1778,8 +1776,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && (pi->type == ZEBRA_ROUTE_BGP)) @@ -208,11 +200,11 @@ index 69240a3b83..920df835a4 100644 } } diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h -index a5fe8d7ace..b77e423f8f 100644 +index 396c8335f..0facef5cc 100644 --- a/bgpd/bgp_zebra.h +++ b/bgpd/bgp_zebra.h -@@ -43,13 +43,11 @@ extern void bgp_zebra_destroy(void); - extern int bgp_zebra_get_table_range(uint32_t chunk_size, +@@ -28,13 +28,12 @@ extern void bgp_zebra_destroy(void); + extern int bgp_zebra_get_table_range(struct zclient *zc, uint32_t chunk_size, uint32_t *start, uint32_t *end); extern int bgp_if_update_all(void); -extern void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, @@ -220,6 +212,7 @@ index a5fe8d7ace..b77e423f8f 100644 - afi_t afi, safi_t safi); +extern void bgp_zebra_announce(struct bgp_dest *dest, + struct bgp_path_info *path, struct bgp *bgp); ++ extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); -extern void bgp_zebra_withdraw(const struct prefix *p, - struct bgp_path_info *path, struct bgp *bgp, @@ -230,5 +223,5 @@ index a5fe8d7ace..b77e423f8f 100644 /* Announce routes of any bgp subtype of a table to zebra */ extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, -- -2.17.1 +2.39.4 diff --git a/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch b/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch index 724cf1297a59..ff1dc62228d7 100644 --- a/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch +++ b/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch @@ -36,46 +36,45 @@ Ticket: #3390099 Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja +--- diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index d19f27110e..c29442d96c 100644 +index 99fb021b1..e45d4b1ff 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c -@@ -3214,8 +3214,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3419,8 +3419,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, || new_select->sub_type == BGP_ROUTE_IMPORTED)) - bgp_zebra_announce(dest, old_select, - bgp); -+ bgp_zebra_route_install( -+ dest, old_select, bgp, true); ++ bgp_zebra_route_install(dest, old_select, ++ bgp, true); } } -@@ -3312,9 +3312,10 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3529,9 +3529,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, */ if (old_select && is_route_parent_evpn(old_select)) - bgp_zebra_withdraw(dest, old_select, bgp); -+ bgp_zebra_route_install(dest, old_select, bgp, -+ false); ++ bgp_zebra_route_install(dest, old_select, bgp, false); - bgp_zebra_announce(dest, new_select, bgp); + bgp_zebra_route_install(dest, new_select, bgp, true); } else { /* Withdraw the route from the kernel. */ if (old_select && old_select->type == ZEBRA_ROUTE_BGP -@@ -3322,7 +3323,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3539,7 +3539,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, || old_select->sub_type == BGP_ROUTE_AGGREGATE || old_select->sub_type == BGP_ROUTE_IMPORTED)) - bgp_zebra_withdraw(dest, old_select, bgp); -+ bgp_zebra_route_install(dest, old_select, bgp, -+ false); ++ bgp_zebra_route_install(dest, old_select, bgp, false); } } -@@ -4201,7 +4203,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, +@@ -4444,7 +4444,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) /* remove from RIB previous entry */ @@ -84,43 +83,21 @@ index d19f27110e..c29442d96c 100644 } if (peer->sort == BGP_PEER_EBGP) { -@@ -5865,7 +5867,8 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, +@@ -6070,7 +6070,7 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, || pi->sub_type == BGP_ROUTE_IMPORTED)) { if (bgp_fibupd_safi(safi)) - bgp_zebra_withdraw(dest, pi, bgp); -+ bgp_zebra_withdraw_actual(dest, pi, -+ bgp); ++ bgp_zebra_withdraw_actual(dest, pi, bgp); } - bgp_path_info_reap(dest, pi); -diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h -index d43bf86eb9..45d61f8dfd 100644 ---- a/bgpd/bgp_table.h -+++ b/bgpd/bgp_table.h -@@ -102,6 +102,7 @@ struct bgp_node { - STAILQ_ENTRY(bgp_dest) pq; - - struct zebra_announce_item zai; -+ struct bgp_path_info *za_bgp_pi; - - uint64_t version; - -@@ -117,6 +118,8 @@ struct bgp_node { - #define BGP_NODE_FIB_INSTALLED (1 << 6) - #define BGP_NODE_LABEL_REQUESTED (1 << 7) - #define BGP_NODE_SOFT_RECONFIG (1 << 8) -+#define BGP_NODE_SCHEDULE_FOR_INSTALL (1 << 10) -+#define BGP_NODE_SCHEDULE_FOR_DELETE (1 << 11) - - struct bgp_addpath_node_data tx_addpath; - + dest = bgp_path_info_reap(dest, pi); diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index 920df835a4..1162941ef1 100644 +index 9b4b46b40..31d981191 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c -@@ -1292,8 +1292,9 @@ static bool bgp_zebra_use_nhop_weighted(struct bgp *bgp, struct attr *attr, - return true; +@@ -1507,8 +1507,9 @@ static void bgp_debug_zebra_nh(struct zapi_route *api) + } } -void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, @@ -129,9 +106,9 @@ index 920df835a4..1162941ef1 100644 +bgp_zebra_announce_actual(struct bgp_dest *dest, struct bgp_path_info *info, + struct bgp *bgp) { + struct bgp_path_info *bpi_ultimate; struct zapi_route api = { 0 }; - struct zapi_nexthop *api_nh; -@@ -1323,27 +1324,10 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1524,27 +1525,10 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, struct bgp_table *table = bgp_dest_table(dest); const struct prefix *p = bgp_dest_get_prefix(dest); @@ -154,27 +131,22 @@ index 920df835a4..1162941ef1 100644 - if (table->safi == SAFI_FLOWSPEC) { bgp_pbr_update_entry(bgp, p, info, table->afi, table->safi, - true); + true); - return; + return ZCLIENT_SEND_SUCCESS; } - /* -@@ -1704,10 +1688,11 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, + /* Make Zebra API structure. */ +@@ -1661,7 +1645,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, zlog_debug("%s: %pFX: announcing to zebra (recursion %sset)", __func__, p, (recursion_flag ? "" : "NOT ")); } - zclient_route_send(is_add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, -- zclient, &api); + return zclient_route_send(is_add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, -+ zclient, &api); + zclient, &api); } -+ - /* Announce all routes of a table to zebra */ - void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) - { -@@ -1733,7 +1718,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) +@@ -1690,7 +1674,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) && (pi->sub_type == BGP_ROUTE_NORMAL || pi->sub_type == BGP_ROUTE_IMPORTED))) @@ -183,7 +155,7 @@ index 920df835a4..1162941ef1 100644 } /* Announce routes of any bgp subtype of a table to zebra */ -@@ -1755,34 +1740,23 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +@@ -1712,32 +1696,23 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && pi->type == ZEBRA_ROUTE_BGP) @@ -193,6 +165,7 @@ index 920df835a4..1162941ef1 100644 -void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, - struct bgp *bgp) ++ +enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, + struct bgp_path_info *info, + struct bgp *bgp) @@ -201,7 +174,6 @@ index 920df835a4..1162941ef1 100644 struct peer *peer; struct bgp_table *table = bgp_dest_table(dest); const struct prefix *p = bgp_dest_get_prefix(dest); - - /* - * If we are withdrawing the route, we don't need to have this - * flag set. So unset it. @@ -213,17 +185,16 @@ index 920df835a4..1162941ef1 100644 - */ - if (!bgp_install_info_to_zebra(bgp)) - return; -- + if (table->safi == SAFI_FLOWSPEC) { peer = info->peer; - bgp_pbr_update_entry(peer->bgp, p, info, table->afi, - table->safi, false); + bgp_pbr_update_entry(peer->bgp, p, info, table->afi, table->safi, false); - return; + return ZCLIENT_SEND_SUCCESS; } memset(&api, 0, sizeof(api)); -@@ -1800,7 +1774,172 @@ void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1755,7 +1730,172 @@ void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, zlog_debug("Tx route delete VRF %u %pFX", bgp->vrf_id, &api.prefix); @@ -291,7 +262,7 @@ index 920df835a4..1162941ef1 100644 + + if (status != ZCLIENT_SEND_BUFFERED && + zebra_announce_count(&bm->zebra_announce_head)) -+ thread_add_event(bm->master, ++ event_add_event(bm->master, + bgp_handle_route_announcements_to_zebra, NULL, + 0, &bm->t_bgp_zebra_route); +} @@ -392,12 +363,12 @@ index 920df835a4..1162941ef1 100644 + SET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); + } + -+ thread_add_event(bm->master, bgp_handle_route_announcements_to_zebra, ++ event_add_event(bm->master, bgp_handle_route_announcements_to_zebra, + NULL, 0, &bm->t_bgp_zebra_route); } /* Withdraw all entries in a BGP instances RIB table from Zebra */ -@@ -1821,7 +1960,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa +@@ -1776,7 +1916,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && (pi->type == ZEBRA_ROUTE_BGP)) @@ -406,20 +377,20 @@ index 920df835a4..1162941ef1 100644 } } } -@@ -3470,6 +3609,7 @@ void bgp_zebra_init(struct thread_master *master, unsigned short instance) +@@ -3449,6 +3589,7 @@ void bgp_zebra_init(struct event_loop *master, unsigned short instance) zclient = zclient_new(master, &zclient_options_default, bgp_handlers, array_size(bgp_handlers)); zclient_init(zclient, ZEBRA_ROUTE_BGP, 0, &bgpd_privs); + zclient->zebra_buffer_write_ready = bgp_zebra_buffer_write_ready; zclient->zebra_connected = bgp_zebra_connected; - zclient->instance = instance; - } + zclient->zebra_capabilities = bgp_zebra_capabilities; + zclient->nexthop_update = bgp_nexthop_update; diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h -index b77e423f8f..45fcf7f514 100644 +index 0facef5cc..6bfa74f4c 100644 --- a/bgpd/bgp_zebra.h +++ b/bgpd/bgp_zebra.h -@@ -43,11 +43,10 @@ extern void bgp_zebra_destroy(void); - extern int bgp_zebra_get_table_range(uint32_t chunk_size, +@@ -28,12 +28,14 @@ extern void bgp_zebra_destroy(void); + extern int bgp_zebra_get_table_range(struct zclient *zc, uint32_t chunk_size, uint32_t *start, uint32_t *end); extern int bgp_if_update_all(void); -extern void bgp_zebra_announce(struct bgp_dest *dest, @@ -427,80 +398,22 @@ index b77e423f8f..45fcf7f514 100644 +extern void bgp_zebra_route_install(struct bgp_dest *dest, + struct bgp_path_info *path, struct bgp *bgp, + bool install); + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); -extern void bgp_zebra_withdraw(struct bgp_dest *dest, - struct bgp_path_info *path, struct bgp *bgp); - - /* Announce routes of any bgp subtype of a table to zebra */ - extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, -@@ -131,4 +130,7 @@ extern int bgp_zebra_update(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type); - extern int bgp_zebra_stale_timer_update(struct bgp *bgp); - extern int bgp_zebra_srv6_manager_get_locator_chunk(const char *name); - extern int bgp_zebra_srv6_manager_release_locator_chunk(const char *name); +extern enum zclient_send_status +bgp_zebra_withdraw_actual(struct bgp_dest *dest, struct bgp_path_info *info, + struct bgp *bgp); - #endif /* _QUAGGA_BGP_ZEBRA_H */ -diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 392423e028..da133d71c1 100644 ---- a/bgpd/bgpd.c -+++ b/bgpd/bgpd.c -@@ -3688,10 +3688,20 @@ int bgp_delete(struct bgp *bgp) - afi_t afi; - safi_t safi; - int i; -+ struct bgp_dest *dest = NULL; - struct graceful_restart_info *gr_info; - - assert(bgp); - -+ while (zebra_announce_count(&bm->zebra_announce_head)) { -+ dest = zebra_announce_pop(&bm->zebra_announce_head); -+ if (dest->za_bgp_pi->peer->bgp == bgp) { -+ bgp_path_info_unlock(dest->za_bgp_pi); -+ bgp_dest_unlock_node(dest); -+ } else -+ zebra_announce_add_tail(&bm->zebra_announce_head, dest); -+ } -+ - bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); - - /* make sure we withdraw any exported routes */ -@@ -8035,6 +8045,7 @@ void bgp_master_init(struct thread_master *master, const int buffer_size, - bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL; - bm->inq_limit = BM_DEFAULT_Q_LIMIT; - bm->outq_limit = BM_DEFAULT_Q_LIMIT; -+ bm->t_bgp_zebra_route = NULL; - - bgp_mac_init(); - /* init the rd id space. -@@ -8278,6 +8289,7 @@ void bgp_terminate(void) - list_delete(&bm->listen_sockets); - - THREAD_OFF(bm->t_rmap_update); -+ THREAD_OFF(bm->t_bgp_zebra_route); - - bgp_mac_finish(); - } -diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h -index 55f53bf9d3..bdf31f5161 100644 ---- a/bgpd/bgpd.h -+++ b/bgpd/bgpd.h -@@ -182,6 +182,8 @@ struct bgp_master { - uint32_t inq_limit; - uint32_t outq_limit; - -+ struct thread *t_bgp_zebra_route; -+ - /* To preserve ordering of installations into zebra across all Vrfs */ - struct zebra_announce_head zebra_announce_head; + /* Announce routes of any bgp subtype of a table to zebra */ + extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, diff --git a/lib/zclient.c b/lib/zclient.c -index 0082b21485..c48c1c6ee4 100644 +index 6b35b569d..64515c754 100644 --- a/lib/zclient.c +++ b/lib/zclient.c -@@ -285,6 +285,7 @@ static void zclient_flush_data(struct thread *thread) - zclient->sock, &zclient->t_write); +@@ -282,6 +282,7 @@ static void zclient_flush_data(struct event *thread) + zclient->sock, &zclient->t_write); break; case BUFFER_EMPTY: + /* Currently only Sharpd and Bgpd has callbacks defined */ @@ -508,5 +421,5 @@ index 0082b21485..c48c1c6ee4 100644 (*zclient->zebra_buffer_write_ready)(); break; -- -2.17.1 +2.39.4 diff --git a/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch b/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch index e83526b6e8ef..1ef5f9c849d7 100644 --- a/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch +++ b/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch @@ -18,29 +18,315 @@ Ticket: #3390099 Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c -index 2b2cfa0f4c..622fd6afd2 100644 +index a846484f0..79e16d8f9 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c -@@ -863,11 +863,10 @@ struct bgp_dest *bgp_evpn_vni_node_lookup(const struct bgpevpn *vpn, +@@ -55,27 +55,25 @@ DEFINE_MTYPE_STATIC(BGPD, VRF_ROUTE_TARGET, "L3 Route Target"); + /* + * Static function declarations + */ +-static void bgp_evpn_remote_ip_hash_init(struct bgpevpn *evpn); +-static void bgp_evpn_remote_ip_hash_destroy(struct bgpevpn *evpn); +-static void bgp_evpn_remote_ip_hash_add(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_hash_init(struct bgpevpn *evpn); ++void bgp_evpn_remote_ip_hash_destroy(struct bgpevpn *evpn); ++void bgp_evpn_remote_ip_hash_add(struct bgpevpn *vpn, + struct bgp_path_info *pi); +-static void bgp_evpn_remote_ip_hash_del(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_hash_del(struct bgpevpn *vpn, + struct bgp_path_info *pi); +-static void bgp_evpn_remote_ip_hash_iterate(struct bgpevpn *vpn, +- void (*func)(struct hash_bucket *, +- void *), +- void *arg); +-static void bgp_evpn_link_to_vni_svi_hash(struct bgp *bgp, struct bgpevpn *vpn); +-static void bgp_evpn_unlink_from_vni_svi_hash(struct bgp *bgp, ++void bgp_evpn_remote_ip_hash_iterate(struct bgpevpn *vpn, ++ void (*func)(struct hash_bucket *,void *), void *arg); ++void bgp_evpn_link_to_vni_svi_hash(struct bgp *bgp, struct bgpevpn *vpn); ++void bgp_evpn_unlink_from_vni_svi_hash(struct bgp *bgp, + struct bgpevpn *vpn); +-static unsigned int vni_svi_hash_key_make(const void *p); +-static bool vni_svi_hash_cmp(const void *p1, const void *p2); +-static void bgp_evpn_remote_ip_process_nexthops(struct bgpevpn *vpn, ++unsigned int vni_svi_hash_key_make(const void *p); ++bool vni_svi_hash_cmp(const void *p1, const void *p2); ++void bgp_evpn_remote_ip_process_nexthops(struct bgpevpn *vpn, + struct ipaddr *addr, + bool resolve); +-static void bgp_evpn_remote_ip_hash_link_nexthop(struct hash_bucket *bucket, ++void bgp_evpn_remote_ip_hash_link_nexthop(struct hash_bucket *bucket, + void *args); +-static void bgp_evpn_remote_ip_hash_unlink_nexthop(struct hash_bucket *bucket, ++void bgp_evpn_remote_ip_hash_unlink_nexthop(struct hash_bucket *bucket, + void *args); + static struct in_addr zero_vtep_ip; + +@@ -86,7 +84,7 @@ static struct in_addr zero_vtep_ip; + /* + * Make vni hash key. + */ +-static unsigned int vni_hash_key_make(const void *p) ++unsigned int vni_hash_key_make(const void *p) + { + const struct bgpevpn *vpn = p; + return (jhash_1word(vpn->vni, 0)); +@@ -95,7 +93,7 @@ static unsigned int vni_hash_key_make(const void *p) + /* + * Comparison function for vni hash + */ +-static bool vni_hash_cmp(const void *p1, const void *p2) ++bool vni_hash_cmp(const void *p1, const void *p2) + { + const struct bgpevpn *vpn1 = p1; + const struct bgpevpn *vpn2 = p2; +@@ -114,7 +112,7 @@ int vni_list_cmp(void *p1, void *p2) + /* + * Make vrf import route target hash key. + */ +-static unsigned int vrf_import_rt_hash_key_make(const void *p) ++unsigned int vrf_import_rt_hash_key_make(const void *p) + { + const struct vrf_irt_node *irt = p; + const char *pnt = irt->rt.val; +@@ -125,7 +123,7 @@ static unsigned int vrf_import_rt_hash_key_make(const void *p) + /* + * Comparison function for vrf import rt hash + */ +-static bool vrf_import_rt_hash_cmp(const void *p1, const void *p2) ++bool vrf_import_rt_hash_cmp(const void *p1, const void *p2) + { + const struct vrf_irt_node *irt1 = p1; + const struct vrf_irt_node *irt2 = p2; +@@ -136,7 +134,7 @@ static bool vrf_import_rt_hash_cmp(const void *p1, const void *p2) + /* + * Create a new vrf import_rt in evpn instance + */ +-static struct vrf_irt_node *vrf_import_rt_new(struct ecommunity_val *rt) ++struct vrf_irt_node *vrf_import_rt_new(struct ecommunity_val *rt) + { + struct bgp *bgp_evpn = NULL; + struct vrf_irt_node *irt; +@@ -163,7 +161,7 @@ static struct vrf_irt_node *vrf_import_rt_new(struct ecommunity_val *rt) + /* + * Free the vrf import rt node + */ +-static void vrf_import_rt_free(struct vrf_irt_node *irt) ++void vrf_import_rt_free(struct vrf_irt_node *irt) + { + struct bgp *bgp_evpn = NULL; + +@@ -179,7 +177,7 @@ static void vrf_import_rt_free(struct vrf_irt_node *irt) + XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt); + } + +-static void hash_vrf_import_rt_free(struct vrf_irt_node *irt) ++void hash_vrf_import_rt_free(struct vrf_irt_node *irt) + { + XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt); + } +@@ -188,7 +186,7 @@ static void hash_vrf_import_rt_free(struct vrf_irt_node *irt) + * Function to lookup Import RT node - used to map a RT to set of + * VNIs importing routes with that RT. + */ +-static struct vrf_irt_node *lookup_vrf_import_rt(struct ecommunity_val *rt) ++struct vrf_irt_node *lookup_vrf_import_rt(struct ecommunity_val *rt) + { + struct bgp *bgp_evpn = NULL; + struct vrf_irt_node *irt; +@@ -211,7 +209,7 @@ static struct vrf_irt_node *lookup_vrf_import_rt(struct ecommunity_val *rt) + /* + * Is specified VRF present on the RT's list of "importing" VRFs? + */ +-static int is_vrf_present_in_irt_vrfs(struct list *vrfs, struct bgp *bgp_vrf) ++int is_vrf_present_in_irt_vrfs(struct list *vrfs, struct bgp *bgp_vrf) + { + struct listnode *node = NULL, *nnode = NULL; + struct bgp *tmp_bgp_vrf = NULL; +@@ -226,7 +224,7 @@ static int is_vrf_present_in_irt_vrfs(struct list *vrfs, struct bgp *bgp_vrf) + /* + * Make import route target hash key. + */ +-static unsigned int import_rt_hash_key_make(const void *p) ++unsigned int import_rt_hash_key_make(const void *p) + { + const struct irt_node *irt = p; + const char *pnt = irt->rt.val; +@@ -237,7 +235,7 @@ static unsigned int import_rt_hash_key_make(const void *p) + /* + * Comparison function for import rt hash + */ +-static bool import_rt_hash_cmp(const void *p1, const void *p2) ++bool import_rt_hash_cmp(const void *p1, const void *p2) + { + const struct irt_node *irt1 = p1; + const struct irt_node *irt2 = p2; +@@ -248,7 +246,7 @@ static bool import_rt_hash_cmp(const void *p1, const void *p2) + /* + * Create a new import_rt + */ +-static struct irt_node *import_rt_new(struct bgp *bgp, ++struct irt_node *import_rt_new(struct bgp *bgp, + struct ecommunity_val *rt) + { + struct irt_node *irt; +@@ -267,14 +265,14 @@ static struct irt_node *import_rt_new(struct bgp *bgp, + /* + * Free the import rt node + */ +-static void import_rt_free(struct bgp *bgp, struct irt_node *irt) ++void import_rt_free(struct bgp *bgp, struct irt_node *irt) + { + hash_release(bgp->import_rt_hash, irt); + list_delete(&irt->vnis); + XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt); + } + +-static void hash_import_rt_free(struct irt_node *irt) ++void hash_import_rt_free(struct irt_node *irt) + { + XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt); + } +@@ -283,7 +281,7 @@ static void hash_import_rt_free(struct irt_node *irt) + * Function to lookup Import RT node - used to map a RT to set of + * VNIs importing routes with that RT. + */ +-static struct irt_node *lookup_import_rt(struct bgp *bgp, ++struct irt_node *lookup_import_rt(struct bgp *bgp, + struct ecommunity_val *rt) + { + struct irt_node *irt; +@@ -298,7 +296,7 @@ static struct irt_node *lookup_import_rt(struct bgp *bgp, + /* + * Is specified VNI present on the RT's list of "importing" VNIs? + */ +-static int is_vni_present_in_irt_vnis(struct list *vnis, struct bgpevpn *vpn) ++int is_vni_present_in_irt_vnis(struct list *vnis, struct bgpevpn *vpn) + { + struct listnode *node, *nnode; + struct bgpevpn *tmp_vpn; +@@ -384,7 +382,7 @@ int bgp_evpn_route_target_cmp(struct ecommunity *ecom1, + /* + * Compare L3 Route Targets. + */ +-static int evpn_vrf_route_target_cmp(struct vrf_route_target *rt1, ++int evpn_vrf_route_target_cmp(struct vrf_route_target *rt1, + struct vrf_route_target *rt2) + { + return bgp_evpn_route_target_cmp(rt1->ecom, rt2->ecom); +@@ -399,7 +397,7 @@ void bgp_evpn_xxport_delete_ecomm(void *val) + /* + * Delete l3 Route Target. + */ +-static void evpn_vrf_rt_del(void *val) ++void evpn_vrf_rt_del(void *val) + { + struct vrf_route_target *l3rt = val; + +@@ -411,7 +409,7 @@ static void evpn_vrf_rt_del(void *val) + /* + * Allocate a new l3 Route Target. + */ +-static struct vrf_route_target *evpn_vrf_rt_new(struct ecommunity *ecom) ++struct vrf_route_target *evpn_vrf_rt_new(struct ecommunity *ecom) + { + struct vrf_route_target *l3rt; + +@@ -446,7 +444,7 @@ static inline void mask_ecom_global_admin(struct ecommunity_val *dst, + * Converts the RT to Ecommunity Value and adjusts masking based + * on flags set for RT. + */ +-static void vrf_rt2ecom_val(struct ecommunity_val *to_eval, ++void vrf_rt2ecom_val(struct ecommunity_val *to_eval, + const struct vrf_route_target *l3rt, int iter) + { + const struct ecommunity_val *eval; +@@ -470,7 +468,7 @@ static void vrf_rt2ecom_val(struct ecommunity_val *to_eval, + * Map one RT to specified VRF. + * bgp_vrf = BGP vrf instance + */ +-static void map_vrf_to_rt(struct bgp *bgp_vrf, struct vrf_route_target *l3rt) ++void map_vrf_to_rt(struct bgp *bgp_vrf, struct vrf_route_target *l3rt) + { + uint32_t i = 0; + +@@ -499,7 +497,7 @@ static void map_vrf_to_rt(struct bgp *bgp_vrf, struct vrf_route_target *l3rt) + * VRFs for this RT, then the RT hash is deleted. + * bgp_vrf: BGP VRF specific instance + */ +-static void unmap_vrf_from_rt(struct bgp *bgp_vrf, ++void unmap_vrf_from_rt(struct bgp *bgp_vrf, + struct vrf_route_target *l3rt) + { + uint32_t i; +@@ -527,7 +525,7 @@ static void unmap_vrf_from_rt(struct bgp *bgp_vrf, + /* + * Map one RT to specified VNI. + */ +-static void map_vni_to_rt(struct bgp *bgp, struct bgpevpn *vpn, ++void map_vni_to_rt(struct bgp *bgp, struct bgpevpn *vpn, + struct ecommunity_val *eval) + { + struct irt_node *irt; +@@ -558,7 +556,7 @@ static void map_vni_to_rt(struct bgp *bgp, struct bgpevpn *vpn, + * Unmap specified VNI from specified RT. If there are no other + * VNIs for this RT, then the RT hash is deleted. + */ +-static void unmap_vni_from_rt(struct bgp *bgp, struct bgpevpn *vpn, ++void unmap_vni_from_rt(struct bgp *bgp, struct bgpevpn *vpn, + struct irt_node *irt) + { + /* Delete VNI from hash list for this RT. */ +@@ -568,7 +566,7 @@ static void unmap_vni_from_rt(struct bgp *bgp, struct bgpevpn *vpn, + } + } + +-static void bgp_evpn_get_rmac_nexthop(struct bgpevpn *vpn, ++void bgp_evpn_get_rmac_nexthop(struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct attr *attr, uint8_t flags) + { +@@ -609,7 +607,7 @@ static void bgp_evpn_get_rmac_nexthop(struct bgpevpn *vpn, + * VNIs but the same across routers (in the same AS) for a particular + * VNI. + */ +-static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl, ++void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl, + bool is_l3) + { + struct ecommunity_val eval; +@@ -657,7 +655,7 @@ static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl, + * Derive RD and RT for a VNI automatically. Invoked at the time of + * creation of a VNI. + */ +-static void derive_rd_rt_for_vni(struct bgp *bgp, struct bgpevpn *vpn) ++void derive_rd_rt_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { + bgp_evpn_derive_auto_rd(bgp, vpn); + bgp_evpn_derive_auto_rt_import(bgp, vpn); +@@ -667,7 +665,7 @@ static void derive_rd_rt_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + /* + * Convert nexthop (remote VTEP IP) into an IPv6 address. + */ +-static void evpn_convert_nexthop_to_ipv6(struct attr *attr) ++void evpn_convert_nexthop_to_ipv6(struct attr *attr) + { + if (BGP_ATTR_NEXTHOP_AFI_IP6(attr)) + return; +@@ -892,7 +890,7 @@ struct bgp_dest *bgp_evpn_vni_node_lookup(const struct bgpevpn *vpn, /* * Add (update) or delete MACIP from zebra. */ -static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p, -- const struct ethaddr *mac, -- struct in_addr remote_vtep_ip, int add, -- uint8_t flags, uint32_t seq, esi_t *esi) -+static enum zclient_send_status bgp_zebra_send_remote_macip( -+ struct bgp *bgp, struct bgpevpn *vpn, const struct prefix_evpn *p, -+ const struct ethaddr *mac, struct in_addr remote_vtep_ip, int add, -+ uint8_t flags, uint32_t seq, esi_t *esi) - { - struct stream *s; - uint16_t ipa_len; -@@ -875,8 +874,12 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, ++enum zclient_send_status bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + const struct ethaddr *mac, + struct in_addr remote_vtep_ip, int add, +@@ -903,9 +901,12 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, + static struct in_addr zero_remote_vtep_ip; bool esi_valid; - - /* Check socket. */ + +- /* Check socket. */ - if (!zclient || zclient->sock < 0) - return 0; + if (!zclient || zclient->sock < 0) { @@ -49,33 +335,30 @@ index 2b2cfa0f4c..622fd6afd2 100644 + __func__); + return ZCLIENT_SEND_SUCCESS; + } - + /* Don't try to register if Zebra doesn't know of this instance. */ if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { -@@ -884,7 +887,7 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, +@@ -913,7 +914,7 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, zlog_debug( "%s: No zebra instance to talk to, not installing remote macip", __func__); - return 0; + return ZCLIENT_SEND_SUCCESS; } - + if (!esi) -@@ -956,15 +959,20 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, +@@ -988,15 +989,18 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, /* * Add (update) or delete remote VTEP from zebra. */ -static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p, -- int flood_control, int add) -+static enum zclient_send_status -+bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, -+ const struct prefix_evpn *p, int flood_control, -+ int add) ++enum zclient_send_status bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + int flood_control, int add) { struct stream *s; - - /* Check socket. */ + +- /* Check socket. */ - if (!zclient || zclient->sock < 0) - return 0; + if (!zclient || zclient->sock < 0) { @@ -84,83 +367,95 @@ index 2b2cfa0f4c..622fd6afd2 100644 + __func__); + return ZCLIENT_SEND_SUCCESS; + } - + /* Don't try to register if Zebra doesn't know of this instance. */ if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { -@@ -972,7 +980,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1004,7 +1008,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, zlog_debug( "%s: No zebra instance to talk to, not installing remote vtep", __func__); - return 0; + return ZCLIENT_SEND_SUCCESS; } - + s = zclient->obuf; -@@ -989,7 +997,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1021,7 +1025,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, EC_BGP_VTEP_INVALID, "Bad remote IP when trying to %s remote VTEP for VNI %u", - add ? "ADD" : "DEL", vpn->vni); + add ? "ADD" : "DEL", (vpn ? vpn->vni : 0)); - return -1; + return ZCLIENT_SEND_FAILURE; } stream_putl(s, flood_control); - -@@ -1222,14 +1230,15 @@ static void add_mac_mobility_to_attr(uint32_t seq_num, struct attr *attr) + +@@ -1043,7 +1047,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, + /* + * Build extended communities for EVPN prefix route. + */ +-static void build_evpn_type5_route_extcomm(struct bgp *bgp_vrf, ++void build_evpn_type5_route_extcomm(struct bgp *bgp_vrf, + struct attr *attr) + { + struct ecommunity ecom_encap; +@@ -1100,7 +1104,7 @@ static void build_evpn_type5_route_extcomm(struct bgp *bgp_vrf, + * added, if present, based on passed settings - only for non-link-local + * type-2 routes. + */ +-static void build_evpn_route_extcomm(struct bgpevpn *vpn, struct attr *attr, ++void build_evpn_route_extcomm(struct bgpevpn *vpn, struct attr *attr, + int add_l3_ecomm, + struct ecommunity *macvrf_soo) + { +@@ -1209,7 +1213,7 @@ static void build_evpn_route_extcomm(struct bgpevpn *vpn, struct attr *attr, + /* + * Add MAC mobility extended community to attribute. + */ +-static void add_mac_mobility_to_attr(uint32_t seq_num, struct attr *attr) ++void add_mac_mobility_to_attr(uint32_t seq_num, struct attr *attr) + { + struct ecommunity ecom_tmp; + struct ecommunity_val eval; +@@ -1263,14 +1267,14 @@ static void add_mac_mobility_to_attr(uint32_t seq_num, struct attr *attr) } - + /* Install EVPN route into zebra. */ -static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p, -- struct bgp_path_info *pi) -+enum zclient_send_status evpn_zebra_install(struct bgp *bgp, -+ struct bgpevpn *vpn, -+ const struct prefix_evpn *p, -+ struct bgp_path_info *pi) ++enum zclient_send_status evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *pi) { - int ret; uint8_t flags; - int flood_control; + int flood_control = VXLAN_FLOOD_DISABLED; uint32_t seq; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + if (p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) { flags = 0; -@@ -1302,6 +1311,7 @@ static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, - flood_control = VXLAN_FLOOD_DISABLED; - break; - } -+ - ret = bgp_zebra_send_remote_vtep(bgp, vpn, p, flood_control, 1); - } - -@@ -1309,11 +1319,13 @@ static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1355,11 +1359,11 @@ static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, } - + /* Uninstall EVPN route from zebra. */ -static int evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p, -- struct bgp_path_info *pi, bool is_sync) -+enum zclient_send_status evpn_zebra_uninstall(struct bgp *bgp, -+ struct bgpevpn *vpn, -+ const struct prefix_evpn *p, -+ struct bgp_path_info *pi, -+ bool is_sync) ++enum zclient_send_status evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *pi, bool is_sync) { - int ret; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + if (p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) ret = bgp_zebra_send_remote_macip( -@@ -1328,7 +1340,7 @@ static int evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, - ret = bgp_evpn_remote_es_evi_del(bgp, vpn, p); - else - ret = bgp_zebra_send_remote_vtep(bgp, vpn, p, -- VXLAN_FLOOD_DISABLED, 0); -+ VXLAN_FLOOD_DISABLED, 0); - - return ret; - } -@@ -1419,12 +1431,18 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1384,7 +1388,7 @@ static int evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, + * by a "remote" best route. The prior route has to be deleted and withdrawn + * from peers. + */ +-static void evpn_delete_old_local_route(struct bgp *bgp, struct bgpevpn *vpn, ++void evpn_delete_old_local_route(struct bgp *bgp, struct bgpevpn *vpn, + struct bgp_dest *dest, + struct bgp_path_info *old_local, + struct bgp_path_info *new_select) +@@ -1465,12 +1469,17 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, && !CHECK_FLAG(dest->flags, BGP_NODE_USER_CLEAR) && !CHECK_FLAG(old_select->flags, BGP_PATH_ATTR_CHANGED) && !bgp_addpath_is_addpath_used(&bgp->tx_addpath, afi, safi)) { @@ -181,11 +476,10 @@ index 2b2cfa0f4c..622fd6afd2 100644 + bgp_zebra_route_install(dest, old_select, bgp, + true, vpn, false); + } -+ UNSET_FLAG(old_select->flags, BGP_PATH_MULTIPATH_CHG); UNSET_FLAG(old_select->flags, BGP_PATH_LINK_BW_CHG); bgp_zebra_clear_route_change_flags(dest); -@@ -1456,10 +1474,14 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1502,10 +1511,14 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, if (new_select && new_select->type == ZEBRA_ROUTE_BGP && (new_select->sub_type == BGP_ROUTE_IMPORTED || bgp_evpn_attr_is_sync(new_select->attr))) { @@ -201,10 +495,10 @@ index 2b2cfa0f4c..622fd6afd2 100644 + else + bgp_zebra_route_install(dest, new_select, bgp, true, + vpn, false); - + /* If an old best existed and it was a "local" route, the only * reason -@@ -1476,13 +1498,20 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, +@@ -1522,13 +1535,20 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, evpn_delete_old_local_route(bgp, vpn, dest, old_select, new_select); } else { @@ -230,9 +524,72 @@ index 2b2cfa0f4c..622fd6afd2 100644 + false, vpn, false); + } } - + /* Clear any route change flags. */ -@@ -2012,9 +2041,19 @@ static void evpn_zebra_reinstall_best_route(struct bgp *bgp, +@@ -1541,7 +1561,7 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + return ret; + } + +-static struct bgp_path_info *bgp_evpn_route_get_local_path( ++struct bgp_path_info *bgp_evpn_route_get_local_path( + struct bgp *bgp, struct bgp_dest *dest) + { + struct bgp_path_info *tmp_pi; +@@ -1558,7 +1578,7 @@ static struct bgp_path_info *bgp_evpn_route_get_local_path( + return local_pi; + } + +-static int update_evpn_type5_route_entry(struct bgp *bgp_evpn, ++int update_evpn_type5_route_entry(struct bgp *bgp_evpn, + struct bgp *bgp_vrf, afi_t afi, + safi_t safi, struct bgp_dest *dest, + struct attr *attr, int *route_changed) +@@ -1627,7 +1647,7 @@ static int update_evpn_type5_route_entry(struct bgp *bgp_evpn, + } + + /* update evpn type-5 route entry */ +-static int update_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp, ++int update_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp, + struct attr *src_attr, afi_t src_afi, + safi_t src_safi) + { +@@ -1732,7 +1752,7 @@ static int update_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp, + return 0; + } + +-static void bgp_evpn_get_sync_info(struct bgp *bgp, esi_t *esi, ++void bgp_evpn_get_sync_info(struct bgp *bgp, esi_t *esi, + struct bgp_dest *dest, uint32_t loc_seq, + uint32_t *max_sync_seq, bool *active_on_peer, + bool *peer_router, bool *proxy_from_peer, +@@ -1809,7 +1829,7 @@ static void bgp_evpn_get_sync_info(struct bgp *bgp, esi_t *esi, + * Note: The local path can only exist as a best path in the + * VPN route table. It will take precedence over all sync paths. + */ +-static void update_evpn_route_entry_sync_info(struct bgp *bgp, ++void update_evpn_route_entry_sync_info(struct bgp *bgp, + struct bgp_dest *dest, + struct attr *attr, + uint32_t loc_seq, bool setup_sync, +@@ -1879,7 +1899,7 @@ static void update_evpn_route_entry_sync_info(struct bgp *bgp, + * Create or update EVPN route entry. This could be in the VNI route tables + * or the global route table. + */ +-static int update_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, ++int update_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + afi_t afi, safi_t safi, + struct bgp_dest *dest, struct attr *attr, + const struct ethaddr *mac, +@@ -2044,7 +2064,7 @@ static int update_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + return route_change; + } + +-static void evpn_zebra_reinstall_best_route(struct bgp *bgp, ++void evpn_zebra_reinstall_best_route(struct bgp *bgp, + struct bgpevpn *vpn, + struct bgp_dest *dest) + { +@@ -2062,9 +2082,19 @@ static void evpn_zebra_reinstall_best_route(struct bgp *bgp, if (curr_select && curr_select->type == ZEBRA_ROUTE_BGP && (curr_select->sub_type == BGP_ROUTE_IMPORTED || bgp_evpn_attr_is_sync(curr_select->attr))) @@ -253,9 +610,36 @@ index 2b2cfa0f4c..622fd6afd2 100644 + true, vpn, false); + } } - + /* -@@ -2189,8 +2228,16 @@ static int update_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, +@@ -2081,7 +2111,7 @@ static void evpn_zebra_reinstall_best_route(struct bgp *bgp, + * additional handling to prevent bgp from injecting and holding on to a + * non-best local path. + */ +-static struct bgp_dest * ++struct bgp_dest * + evpn_cleanup_local_non_best_route(struct bgp *bgp, struct bgpevpn *vpn, + struct bgp_dest *dest, + struct bgp_path_info *local_pi) +@@ -2099,7 +2129,7 @@ evpn_cleanup_local_non_best_route(struct bgp *bgp, struct bgpevpn *vpn, + return bgp_path_info_reap(dest, local_pi); + } + +-static inline bool bgp_evpn_route_add_l3_ecomm_ok(struct bgpevpn *vpn, ++inline bool bgp_evpn_route_add_l3_ecomm_ok(struct bgpevpn *vpn, + const struct prefix_evpn *p, + esi_t *esi) + { +@@ -2116,7 +2146,7 @@ static inline bool bgp_evpn_route_add_l3_ecomm_ok(struct bgpevpn *vpn, + * Create or update EVPN route (of type based on prefix) for specified VNI + * and schedule for processing. + */ +-static int update_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, ++int update_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, + struct prefix_evpn *p, uint8_t flags, + uint32_t seq, esi_t *esi) + { +@@ -2245,8 +2275,16 @@ static int update_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, * has been removed. */ new_is_sync = bgp_evpn_attr_is_sync(pi->attr); @@ -274,7 +658,33 @@ index 2b2cfa0f4c..622fd6afd2 100644 } } bgp_path_info_unlock(pi); -@@ -2444,8 +2491,16 @@ void bgp_evpn_update_type2_route_entry(struct bgp *bgp, struct bgpevpn *vpn, +@@ -2308,7 +2346,7 @@ void delete_evpn_route_entry(struct bgp *bgp, afi_t afi, safi_t safi, + } + + /* Delete EVPN type5 route */ +-static int delete_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp) ++int delete_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp) + { + afi_t afi = AFI_L2VPN; + safi_t safi = SAFI_EVPN; +@@ -2339,7 +2377,7 @@ static int delete_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp) + * Delete EVPN route (of type based on prefix) for specified VNI and + * schedule for processing. + */ +-static int delete_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, ++int delete_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, + struct prefix_evpn *p) + { + struct bgp_dest *dest, *global_dest; +@@ -2408,6 +2446,7 @@ void bgp_evpn_update_type2_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + int route_change; + bool old_is_sync = false; + struct ecommunity *macvrf_soo = NULL; ++ struct prefix_evpn p; + + if (CHECK_FLAG(local_pi->flags, BGP_PATH_REMOVED)) + return; +@@ -2512,8 +2551,16 @@ void bgp_evpn_update_type2_route_entry(struct bgp *bgp, struct bgpevpn *vpn, * has been removed. */ new_is_sync = bgp_evpn_attr_is_sync(pi->attr); @@ -283,8 +693,8 @@ index 2b2cfa0f4c..622fd6afd2 100644 + if (!new_is_sync && old_is_sync) { + if (CHECK_FLAG(bgp->flags, + BGP_FLAG_DELETE_IN_PROGRESS)) -+ (void)evpn_zebra_uninstall( -+ bgp, vpn, &evp, pi, true); ++ evpn_zebra_uninstall(bgp, vpn, &p, pi, ++ true); + else + bgp_zebra_route_install(dest, pi, bgp, + false, vpn, @@ -292,10 +702,100 @@ index 2b2cfa0f4c..622fd6afd2 100644 + } } } - -@@ -2701,7 +2756,22 @@ static int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + +@@ -2541,7 +2588,7 @@ void bgp_evpn_update_type2_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + aspath_unintern(&attr.aspath); + } + +-static void update_type2_route(struct bgp *bgp, struct bgpevpn *vpn, ++void update_type2_route(struct bgp *bgp, struct bgpevpn *vpn, + struct bgp_dest *dest) + { + struct bgp_path_info *tmp_pi; +@@ -2571,7 +2618,7 @@ static void update_type2_route(struct bgp *bgp, struct bgpevpn *vpn, + * Update all type-2 (MACIP) local routes for this VNI - these should also + * be scheduled for advertise to peers. + */ +-static void update_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void update_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + struct bgp_dest *dest; + +@@ -2592,7 +2639,7 @@ static void update_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + * Delete all type-2 (MACIP) local routes for this VNI - only from the + * global routing table. These are also scheduled for withdraw from peers. + */ +-static void delete_global_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void delete_global_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + afi_t afi; + safi_t safi; +@@ -2626,7 +2673,7 @@ static void delete_global_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + } + } + +-static struct bgp_dest *delete_vni_type2_route(struct bgp *bgp, ++struct bgp_dest *delete_vni_type2_route(struct bgp *bgp, + struct bgp_dest *dest) + { + struct bgp_path_info *pi; +@@ -2648,7 +2695,7 @@ static struct bgp_dest *delete_vni_type2_route(struct bgp *bgp, + return dest; + } + +-static void delete_vni_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void delete_vni_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + struct bgp_dest *dest; + +@@ -2672,7 +2719,7 @@ static void delete_vni_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + * Delete all type-2 (MACIP) local routes for this VNI - from the global + * table as well as the per-VNI route table. + */ +-static void delete_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void delete_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + /* First, walk the global route table for this VNI's type-2 local + * routes. +@@ -2685,7 +2732,7 @@ static void delete_all_type2_routes(struct bgp *bgp, struct bgpevpn *vpn) + /* + * Delete all routes in the per-VNI route table. + */ +-static void delete_all_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void delete_all_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + struct bgp_dest *dest; + struct bgp_path_info *pi, *nextpi; +@@ -2716,7 +2763,7 @@ static void delete_all_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + } + + /* BUM traffic flood mode per-l2-vni */ +-static int bgp_evpn_vni_flood_mode_get(struct bgp *bgp, ++int bgp_evpn_vni_flood_mode_get(struct bgp *bgp, + struct bgpevpn *vpn) + { + /* if flooding has been globally disabled per-vni mode is +@@ -2766,7 +2813,7 @@ int update_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + /* Update Type-2/3 Routes for L2VNI. + * Called by hash_iterate() + */ +-static void update_routes_for_vni_hash(struct hash_bucket *bucket, ++void update_routes_for_vni_hash(struct hash_bucket *bucket, + struct bgp *bgp) + { + struct bgpevpn *vpn; +@@ -2784,7 +2831,7 @@ static void update_routes_for_vni_hash(struct hash_bucket *bucket, + * the per-VNI table. Invoked upon the VNI being deleted or EVPN + * (advertise-all-vni) being disabled. + */ +-static int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) ++int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { + int ret; + struct prefix_evpn p; +@@ -2795,7 +2842,22 @@ static int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) delete_all_type2_routes(bgp, vpn); - + build_evpn_type3_prefix(&p, vpn->originator_ip); + + /* @@ -315,8 +815,519 @@ index 2b2cfa0f4c..622fd6afd2 100644 + UNSET_FLAG(bgp->flags, BGP_FLAG_VNI_DOWN); if (ret) return ret; - -@@ -6028,6 +6098,17 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, + +@@ -2809,7 +2871,7 @@ static int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + * remove the type-3 route if any. A new type-3 route will be generated + * post tunnel_ip update if the new flood mode is head-end-replication. + */ +-static int bgp_evpn_mcast_grp_change(struct bgp *bgp, struct bgpevpn *vpn, ++int bgp_evpn_mcast_grp_change(struct bgp *bgp, struct bgpevpn *vpn, + struct in_addr mcast_grp) + { + struct prefix_evpn p; +@@ -2833,7 +2895,7 @@ static int bgp_evpn_mcast_grp_change(struct bgp *bgp, struct bgpevpn *vpn, + * Note: Route re-advertisement happens elsewhere after other processing + * other changes. + */ +-static void handle_tunnel_ip_change(struct bgp *bgp_vrf, struct bgp *bgp_evpn, ++void handle_tunnel_ip_change(struct bgp *bgp_vrf, struct bgp *bgp_evpn, + struct bgpevpn *vpn, + struct in_addr originator_ip) + { +@@ -2882,7 +2944,7 @@ static void handle_tunnel_ip_change(struct bgp *bgp_vrf, struct bgp *bgp_evpn, + return; + } + +-static struct bgp_path_info * ++struct bgp_path_info * + bgp_create_evpn_bgp_path_info(struct bgp_path_info *parent_pi, + struct bgp_dest *dest, struct attr *attr) + { +@@ -2918,7 +2980,7 @@ bgp_create_evpn_bgp_path_info(struct bgp_path_info *parent_pi, + /* + * Install route entry into the VRF routing table and invoke route selection. + */ +-static int install_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, ++int install_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, + const struct prefix_evpn *evp, + struct bgp_path_info *parent_pi) + { +@@ -3102,7 +3164,7 @@ static int install_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, + /* + * Common handling for vni route tables install/selection. + */ +-static int install_evpn_route_entry_in_vni_common( ++int install_evpn_route_entry_in_vni_common( + struct bgp *bgp, struct bgpevpn *vpn, const struct prefix_evpn *p, + struct bgp_dest *dest, struct bgp_path_info *parent_pi) + { +@@ -3202,7 +3264,7 @@ static int install_evpn_route_entry_in_vni_common( + /* + * Common handling for vni route tables uninstall/selection. + */ +-static int uninstall_evpn_route_entry_in_vni_common( ++int uninstall_evpn_route_entry_in_vni_common( + struct bgp *bgp, struct bgpevpn *vpn, const struct prefix_evpn *p, + struct bgp_dest *dest, struct bgp_path_info *parent_pi) + { +@@ -3243,7 +3305,7 @@ static int uninstall_evpn_route_entry_in_vni_common( + /* + * Install route entry into VNI IP table and invoke route selection. + */ +-static int install_evpn_route_entry_in_vni_ip(struct bgp *bgp, ++int install_evpn_route_entry_in_vni_ip(struct bgp *bgp, + struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) +@@ -3270,7 +3332,7 @@ static int install_evpn_route_entry_in_vni_ip(struct bgp *bgp, + /* + * Install route entry into VNI MAC table and invoke route selection. + */ +-static int install_evpn_route_entry_in_vni_mac(struct bgp *bgp, ++int install_evpn_route_entry_in_vni_mac(struct bgp *bgp, + struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) +@@ -3296,7 +3358,7 @@ static int install_evpn_route_entry_in_vni_mac(struct bgp *bgp, + /* + * Uninstall route entry from VNI IP table and invoke route selection. + */ +-static int uninstall_evpn_route_entry_in_vni_ip(struct bgp *bgp, ++int uninstall_evpn_route_entry_in_vni_ip(struct bgp *bgp, + struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) +@@ -3325,7 +3387,7 @@ static int uninstall_evpn_route_entry_in_vni_ip(struct bgp *bgp, + /* + * Uninstall route entry from VNI IP table and invoke route selection. + */ +-static int ++int + uninstall_evpn_route_entry_in_vni_mac(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) +@@ -3353,7 +3415,7 @@ uninstall_evpn_route_entry_in_vni_mac(struct bgp *bgp, struct bgpevpn *vpn, + * Uninstall route entry from the VRF routing table and send message + * to zebra, if appropriate. + */ +-static int uninstall_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, ++int uninstall_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, + const struct prefix_evpn *evp, + struct bgp_path_info *parent_pi) + { +@@ -3445,7 +3507,7 @@ static int uninstall_evpn_route_entry_in_vrf(struct bgp *bgp_vrf, + /* + * Install route entry into the VNI routing tables. + */ +-static int install_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, ++int install_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) + { +@@ -3484,7 +3546,7 @@ static int install_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + /* + * Uninstall route entry from the VNI routing tables. + */ +-static int uninstall_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, ++int uninstall_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, + struct bgp_path_info *parent_pi) + { +@@ -3524,7 +3586,7 @@ static int uninstall_evpn_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + * Given a route entry and a VRF, see if this route entry should be + * imported into the VRF i.e., RTs match + Site-of-Origin check passes. + */ +-static int is_route_matching_for_vrf(struct bgp *bgp_vrf, ++int is_route_matching_for_vrf(struct bgp *bgp_vrf, + struct bgp_path_info *pi) + { + struct attr *attr = pi->attr; +@@ -3591,7 +3653,7 @@ static int is_route_matching_for_vrf(struct bgp *bgp_vrf, + * Given a route entry and a VNI, see if this route entry should be + * imported into the VNI i.e., RTs match. + */ +-static int is_route_matching_for_vni(struct bgp *bgp, struct bgpevpn *vpn, ++int is_route_matching_for_vni(struct bgp *bgp, struct bgpevpn *vpn, + struct bgp_path_info *pi) + { + struct attr *attr = pi->attr; +@@ -3654,7 +3716,7 @@ static int is_route_matching_for_vni(struct bgp *bgp, struct bgpevpn *vpn, + return 0; + } + +-static bool bgp_evpn_route_matches_macvrf_soo(struct bgp_path_info *pi, ++bool bgp_evpn_route_matches_macvrf_soo(struct bgp_path_info *pi, + const struct prefix_evpn *evp) + { + struct bgp *bgp_evpn = bgp_get_evpn(); +@@ -3693,7 +3755,7 @@ static bool bgp_evpn_route_matches_macvrf_soo(struct bgp_path_info *pi, + * macthes with bgp instance router mac. It avoid installing + * route into bgp vrf table and remote rmac in bridge table. + */ +-static int bgp_evpn_route_rmac_self_check(struct bgp *bgp_vrf, ++int bgp_evpn_route_rmac_self_check(struct bgp *bgp_vrf, + const struct prefix_evpn *evp, + struct bgp_path_info *pi) + { +@@ -3722,7 +3784,7 @@ static int bgp_evpn_route_rmac_self_check(struct bgp *bgp_vrf, + } + + /* don't import hosts that are locally attached */ +-static inline bool ++inline bool + bgp_evpn_skip_vrf_import_of_local_es(struct bgp *bgp_vrf, + const struct prefix_evpn *evp, + struct bgp_path_info *pi, int install) +@@ -3799,7 +3861,7 @@ int bgp_evpn_route_entry_install_if_vrf_match(struct bgp *bgp_vrf, + * Install or uninstall mac-ip routes are appropriate for this + * particular VRF. + */ +-static int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) ++int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) + { + afi_t afi; + safi_t safi; +@@ -3862,7 +3924,7 @@ static int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) + * Install or uninstall routes of specified type that are appropriate for this + * particular VNI. + */ +-static int install_uninstall_routes_for_vni(struct bgp *bgp, ++int install_uninstall_routes_for_vni(struct bgp *bgp, + struct bgpevpn *vpn, + bgp_evpn_route_type rtype, + int install) +@@ -3948,7 +4010,7 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp, + /* Install any existing remote routes applicable for this VRF into VRF RIB. This + * is invoked upon l3vni-add or l3vni import rt change + */ +-static int install_routes_for_vrf(struct bgp *bgp_vrf) ++int install_routes_for_vrf(struct bgp *bgp_vrf) + { + install_uninstall_routes_for_vrf(bgp_vrf, 1); + return 0; +@@ -3959,7 +4021,7 @@ static int install_routes_for_vrf(struct bgp *bgp_vrf) + * routing table. This is invoked when a VNI becomes "live" or its Import + * RT is changed. + */ +-static int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) ++int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { + int ret; + +@@ -3981,7 +4043,7 @@ static int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + } + + /* uninstall routes from l3vni vrf. */ +-static int uninstall_routes_for_vrf(struct bgp *bgp_vrf) ++int uninstall_routes_for_vrf(struct bgp *bgp_vrf) + { + install_uninstall_routes_for_vrf(bgp_vrf, 0); + return 0; +@@ -3991,7 +4053,7 @@ static int uninstall_routes_for_vrf(struct bgp *bgp_vrf) + * Uninstall any existing remote routes for this VNI. One scenario in which + * this is invoked is upon an import RT change. + */ +-static int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) ++int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { + int ret; + +@@ -4017,7 +4079,7 @@ static int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + /* + * Install or uninstall route in matching VRFs (list). + */ +-static int install_uninstall_route_in_vrfs(struct bgp *bgp_def, afi_t afi, ++int install_uninstall_route_in_vrfs(struct bgp *bgp_def, afi_t afi, + safi_t safi, struct prefix_evpn *evp, + struct bgp_path_info *pi, + struct list *vrfs, int install) +@@ -4066,7 +4128,7 @@ static int install_uninstall_route_in_vrfs(struct bgp *bgp_def, afi_t afi, + /* + * Install or uninstall route in matching VNIs (list). + */ +-static int install_uninstall_route_in_vnis(struct bgp *bgp, afi_t afi, ++int install_uninstall_route_in_vnis(struct bgp *bgp, afi_t afi, + safi_t safi, struct prefix_evpn *evp, + struct bgp_path_info *pi, + struct list *vnis, int install) +@@ -4103,7 +4165,7 @@ static int install_uninstall_route_in_vnis(struct bgp *bgp, afi_t afi, + /* + * Install or uninstall route for appropriate VNIs/ESIs. + */ +-static int bgp_evpn_install_uninstall_table(struct bgp *bgp, afi_t afi, ++int bgp_evpn_install_uninstall_table(struct bgp *bgp, afi_t afi, + safi_t safi, const struct prefix *p, + struct bgp_path_info *pi, + int import, bool in_vni_rt, +@@ -4246,7 +4308,7 @@ static int bgp_evpn_install_uninstall_table(struct bgp *bgp, afi_t afi, + /* + * Install or uninstall route for appropriate VNIs/ESIs. + */ +-static int install_uninstall_evpn_route(struct bgp *bgp, afi_t afi, safi_t safi, ++int install_uninstall_evpn_route(struct bgp *bgp, afi_t afi, safi_t safi, + const struct prefix *p, + struct bgp_path_info *pi, int import) + { +@@ -4270,7 +4332,7 @@ void bgp_evpn_import_type2_route(struct bgp_path_info *pi, int import) + * delete and withdraw all ipv4 and ipv6 routes in the vrf table as type-5 + * routes + */ +-static void delete_withdraw_vrf_routes(struct bgp *bgp_vrf) ++void delete_withdraw_vrf_routes(struct bgp *bgp_vrf) + { + /* Delete ipv4 default route and withdraw from peers */ + if (evpn_default_originate_set(bgp_vrf, AFI_IP, SAFI_UNICAST)) +@@ -4329,7 +4391,7 @@ void update_advertise_vrf_routes(struct bgp *bgp_vrf) + * done in the global route table using the routes which already exist in the + * VRF routing table + */ +-static void update_router_id_vrf(struct bgp *bgp_vrf) ++void update_router_id_vrf(struct bgp *bgp_vrf) + { + /* skip if the RD is configured */ + if (is_vrf_rd_configured(bgp_vrf)) +@@ -4347,7 +4409,7 @@ static void update_router_id_vrf(struct bgp *bgp_vrf) + * This is invoked upon VRF RD change. The processing is done only from global + * table. + */ +-static void withdraw_router_id_vrf(struct bgp *bgp_vrf) ++void withdraw_router_id_vrf(struct bgp *bgp_vrf) + { + /* skip if the RD is configured */ + if (is_vrf_rd_configured(bgp_vrf)) +@@ -4357,7 +4419,7 @@ static void withdraw_router_id_vrf(struct bgp *bgp_vrf) + delete_withdraw_vrf_routes(bgp_vrf); + } + +-static void update_advertise_vni_route(struct bgp *bgp, struct bgpevpn *vpn, ++void update_advertise_vni_route(struct bgp *bgp, struct bgpevpn *vpn, + struct bgp_dest *dest) + { + struct bgp_dest *global_dest; +@@ -4440,7 +4502,7 @@ static void update_advertise_vni_route(struct bgp *bgp, struct bgpevpn *vpn, + * change. Note that the processing is done only on the global route table + * using routes that already exist in the per-VNI table. + */ +-static void update_advertise_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) ++void update_advertise_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + struct prefix_evpn p; + struct bgp_dest *dest, *global_dest; +@@ -4501,7 +4563,7 @@ static void update_advertise_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + * Delete (and withdraw) local routes for a VNI - only from the global + * table. Invoked upon router-id change. + */ +-static int delete_withdraw_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) ++int delete_withdraw_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + { + struct prefix_evpn p; + struct bgp_dest *global_dest; +@@ -4541,7 +4603,7 @@ static int delete_withdraw_vni_routes(struct bgp *bgp, struct bgpevpn *vpn) + * router-id. The routes in the per-VNI table are used to create routes in + * the global table and schedule them. + */ +-static void update_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) ++void update_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) + { + struct bgpevpn *vpn = (struct bgpevpn *)bucket->data; + +@@ -4559,7 +4621,7 @@ static void update_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) + * the router-id and is done only on the global route table, the routes + * are needed in the per-VNI table to re-advertise with new router id. + */ +-static void withdraw_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) ++void withdraw_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) + { + struct bgpevpn *vpn = (struct bgpevpn *)bucket->data; + +@@ -4574,7 +4636,7 @@ static void withdraw_router_id_vni(struct hash_bucket *bucket, struct bgp *bgp) + * Create RT-3 for a VNI and schedule for processing and advertisement. + * This is invoked upon flooding mode changing to head-end replication. + */ +-static void create_advertise_type3(struct hash_bucket *bucket, void *data) ++void create_advertise_type3(struct hash_bucket *bucket, void *data) + { + struct bgpevpn *vpn = bucket->data; + struct bgp *bgp = data; +@@ -4595,7 +4657,7 @@ static void create_advertise_type3(struct hash_bucket *bucket, void *data) + * Delete RT-3 for a VNI and schedule for processing and withdrawal. + * This is invoked upon flooding mode changing to drop BUM packets. + */ +-static void delete_withdraw_type3(struct hash_bucket *bucket, void *data) ++void delete_withdraw_type3(struct hash_bucket *bucket, void *data) + { + struct bgpevpn *vpn = bucket->data; + struct bgp *bgp = data; +@@ -4611,7 +4673,7 @@ static void delete_withdraw_type3(struct hash_bucket *bucket, void *data) + /* + * Process received EVPN type-2 route (advertise or withdraw). + */ +-static int process_type2_route(struct peer *peer, afi_t afi, safi_t safi, ++int process_type2_route(struct peer *peer, afi_t afi, safi_t safi, + struct attr *attr, uint8_t *pfx, int psize, + uint32_t addpath_id) + { +@@ -4740,7 +4802,7 @@ done: + /* + * Process received EVPN type-3 route (advertise or withdraw). + */ +-static int process_type3_route(struct peer *peer, afi_t afi, safi_t safi, ++int process_type3_route(struct peer *peer, afi_t afi, safi_t safi, + struct attr *attr, uint8_t *pfx, int psize, + uint32_t addpath_id) + { +@@ -4821,7 +4883,7 @@ static int process_type3_route(struct peer *peer, afi_t afi, safi_t safi, + /* + * Process received EVPN type-5 route (advertise or withdraw). + */ +-static int process_type5_route(struct peer *peer, afi_t afi, safi_t safi, ++int process_type5_route(struct peer *peer, afi_t afi, safi_t safi, + struct attr *attr, uint8_t *pfx, int psize, + uint32_t addpath_id) + { +@@ -4963,7 +5025,7 @@ static int process_type5_route(struct peer *peer, afi_t afi, safi_t safi, + return 0; + } + +-static void evpn_mpattr_encode_type5(struct stream *s, const struct prefix *p, ++void evpn_mpattr_encode_type5(struct stream *s, const struct prefix *p, + const struct prefix_rd *prd, + mpls_label_t *label, uint32_t num_labels, + struct attr *attr) +@@ -5022,7 +5084,7 @@ static void evpn_mpattr_encode_type5(struct stream *s, const struct prefix *p, + /* + * Cleanup specific VNI upon EVPN (advertise-all-vni) being disabled. + */ +-static void cleanup_vni_on_disable(struct hash_bucket *bucket, struct bgp *bgp) ++void cleanup_vni_on_disable(struct hash_bucket *bucket, struct bgp *bgp) + { + struct bgpevpn *vpn = (struct bgpevpn *)bucket->data; + +@@ -5038,7 +5100,7 @@ static void cleanup_vni_on_disable(struct hash_bucket *bucket, struct bgp *bgp) + /* + * Free a VNI entry; iterator function called during cleanup. + */ +-static void free_vni_entry(struct hash_bucket *bucket, struct bgp *bgp) ++void free_vni_entry(struct hash_bucket *bucket, struct bgp *bgp) + { + struct bgpevpn *vpn = (struct bgpevpn *)bucket->data; + +@@ -5049,7 +5111,7 @@ static void free_vni_entry(struct hash_bucket *bucket, struct bgp *bgp) + /* + * Derive AUTO import RT for BGP VRF - L3VNI + */ +-static void evpn_auto_rt_import_add_for_vrf(struct bgp *bgp_vrf) ++void evpn_auto_rt_import_add_for_vrf(struct bgp *bgp_vrf) + { + struct bgp *bgp_evpn = NULL; + +@@ -5067,7 +5129,7 @@ static void evpn_auto_rt_import_add_for_vrf(struct bgp *bgp_vrf) + /* + * Delete AUTO import RT from BGP VRF - L3VNI + */ +-static void evpn_auto_rt_import_delete_for_vrf(struct bgp *bgp_vrf) ++void evpn_auto_rt_import_delete_for_vrf(struct bgp *bgp_vrf) + { + evpn_rt_delete_auto(bgp_vrf, bgp_vrf->l3vni, bgp_vrf->vrf_import_rtl, + true); +@@ -5076,7 +5138,7 @@ static void evpn_auto_rt_import_delete_for_vrf(struct bgp *bgp_vrf) + /* + * Derive AUTO export RT for BGP VRF - L3VNI + */ +-static void evpn_auto_rt_export_add_for_vrf(struct bgp *bgp_vrf) ++void evpn_auto_rt_export_add_for_vrf(struct bgp *bgp_vrf) + { + form_auto_rt(bgp_vrf, bgp_vrf->l3vni, bgp_vrf->vrf_export_rtl, true); + } +@@ -5084,13 +5146,13 @@ static void evpn_auto_rt_export_add_for_vrf(struct bgp *bgp_vrf) + /* + * Delete AUTO export RT from BGP VRF - L3VNI + */ +-static void evpn_auto_rt_export_delete_for_vrf(struct bgp *bgp_vrf) ++void evpn_auto_rt_export_delete_for_vrf(struct bgp *bgp_vrf) + { + evpn_rt_delete_auto(bgp_vrf, bgp_vrf->l3vni, bgp_vrf->vrf_export_rtl, + true); + } + +-static void bgp_evpn_handle_export_rt_change_for_vrf(struct bgp *bgp_vrf) ++void bgp_evpn_handle_export_rt_change_for_vrf(struct bgp *bgp_vrf) + { + struct bgp *bgp_evpn = NULL; + struct listnode *node = NULL; +@@ -5111,7 +5173,7 @@ static void bgp_evpn_handle_export_rt_change_for_vrf(struct bgp *bgp_vrf) + /* + * Handle autort change for a given VNI. + */ +-static void update_autort_vni(struct hash_bucket *bucket, struct bgp *bgp) ++void update_autort_vni(struct hash_bucket *bucket, struct bgp *bgp) + { + struct bgpevpn *vpn = bucket->data; + +@@ -5135,7 +5197,7 @@ static void update_autort_vni(struct hash_bucket *bucket, struct bgp *bgp) + /* + * Handle autort change for L3VNI. + */ +-static void update_autort_l3vni(struct bgp *bgp) ++void update_autort_l3vni(struct bgp *bgp) + { + if ((CHECK_FLAG(bgp->vrf_flags, BGP_VRF_IMPORT_RT_CFGD)) + && (CHECK_FLAG(bgp->vrf_flags, BGP_VRF_EXPORT_RT_CFGD))) +@@ -5330,7 +5392,7 @@ void bgp_evpn_advertise_type5_routes(struct bgp *bgp_vrf, afi_t afi, + } + } + +-static void rt_list_remove_node(struct list *rt_list, ++void rt_list_remove_node(struct list *rt_list, + struct ecommunity *ecomdel, bool is_l3) + { + struct listnode *node = NULL, *nnode = NULL, *node_to_del = NULL; +@@ -5379,7 +5441,7 @@ void evpn_rt_delete_auto(struct bgp *bgp, vni_t vni, struct list *rtl, + ecommunity_free(&ecom_auto); + } + +-static void evpn_vrf_rt_routes_map(struct bgp *bgp_vrf) ++void evpn_vrf_rt_routes_map(struct bgp *bgp_vrf) + { + /* map VRFs to its RTs and install routes matching this new RT */ + if (is_l3vni_live(bgp_vrf)) { +@@ -5388,7 +5450,7 @@ static void evpn_vrf_rt_routes_map(struct bgp *bgp_vrf) + } + } + +-static void evpn_vrf_rt_routes_unmap(struct bgp *bgp_vrf) ++void evpn_vrf_rt_routes_unmap(struct bgp *bgp_vrf) + { + /* uninstall routes from vrf */ + if (is_l3vni_live(bgp_vrf)) +@@ -5398,7 +5460,7 @@ static void evpn_vrf_rt_routes_unmap(struct bgp *bgp_vrf) + bgp_evpn_unmap_vrf_from_its_rts(bgp_vrf); + } + +-static bool rt_list_has_cfgd_rt(struct list *rt_list) ++bool rt_list_has_cfgd_rt(struct list *rt_list) + { + struct listnode *node = NULL, *nnode = NULL; + struct vrf_route_target *l3rt = NULL; +@@ -5411,7 +5473,7 @@ static bool rt_list_has_cfgd_rt(struct list *rt_list) + return false; + } + +-static void unconfigure_import_rt_for_vrf_fini(struct bgp *bgp_vrf) ++void unconfigure_import_rt_for_vrf_fini(struct bgp *bgp_vrf) + { + if (!bgp_vrf->vrf_import_rtl) + return; /* this should never fail */ +@@ -5424,7 +5486,7 @@ static void unconfigure_import_rt_for_vrf_fini(struct bgp *bgp_vrf) + evpn_auto_rt_import_add_for_vrf(bgp_vrf); + } + +-static void unconfigure_export_rt_for_vrf_fini(struct bgp *bgp_vrf) ++void unconfigure_export_rt_for_vrf_fini(struct bgp *bgp_vrf) + { + + if (!bgp_vrf->vrf_export_rtl) +@@ -6262,6 +6324,16 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, */ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) { @@ -330,52 +1341,240 @@ index 2b2cfa0f4c..622fd6afd2 100644 + } else + zebra_announce_add_tail(&bm->zebra_announce_head, dest); + } -+ bgp_evpn_remote_ip_hash_destroy(vpn); bgp_evpn_vni_es_cleanup(vpn); bgpevpn_unlink_from_l3vni(vpn); +@@ -6279,7 +6351,7 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) + XFREE(MTYPE_BGP_EVPN, vpn); + } + +-static void hash_evpn_free(struct bgpevpn *vpn) ++void hash_evpn_free(struct bgpevpn *vpn) + { + XFREE(MTYPE_BGP_EVPN, vpn); + } +@@ -6646,7 +6718,7 @@ int bgp_evpn_local_macip_add(struct bgp *bgp, vni_t vni, struct ethaddr *mac, + return 0; + } + +-static void link_l2vni_hash_to_l3vni(struct hash_bucket *bucket, ++void link_l2vni_hash_to_l3vni(struct hash_bucket *bucket, + struct bgp *bgp_vrf) + { + struct bgpevpn *vpn = (struct bgpevpn *)bucket->data; +@@ -7265,7 +7337,7 @@ bool bgp_evpn_is_prefix_nht_supported(const struct prefix *pfx) + return false; + } + +-static void *bgp_evpn_remote_ip_hash_alloc(void *p) ++void *bgp_evpn_remote_ip_hash_alloc(void *p) + { + const struct evpn_remote_ip *key = (const struct evpn_remote_ip *)p; + struct evpn_remote_ip *ip; +@@ -7277,7 +7349,7 @@ static void *bgp_evpn_remote_ip_hash_alloc(void *p) + return ip; + } + +-static unsigned int bgp_evpn_remote_ip_hash_key_make(const void *p) ++unsigned int bgp_evpn_remote_ip_hash_key_make(const void *p) + { + const struct evpn_remote_ip *ip = p; + const struct ipaddr *addr = &ip->addr; +@@ -7289,7 +7361,7 @@ static unsigned int bgp_evpn_remote_ip_hash_key_make(const void *p) + array_size(addr->ipaddr_v6.s6_addr32), 0); + } + +-static bool bgp_evpn_remote_ip_hash_cmp(const void *p1, const void *p2) ++bool bgp_evpn_remote_ip_hash_cmp(const void *p1, const void *p2) + { + const struct evpn_remote_ip *ip1 = p1; + const struct evpn_remote_ip *ip2 = p2; +@@ -7297,7 +7369,7 @@ static bool bgp_evpn_remote_ip_hash_cmp(const void *p1, const void *p2) + return !ipaddr_cmp(&ip1->addr, &ip2->addr); + } + +-static void bgp_evpn_remote_ip_hash_init(struct bgpevpn *vpn) ++void bgp_evpn_remote_ip_hash_init(struct bgpevpn *vpn) + { + if (!evpn_resolve_overlay_index()) + return; +@@ -7307,7 +7379,7 @@ static void bgp_evpn_remote_ip_hash_init(struct bgpevpn *vpn) + "BGP EVPN remote IP hash"); + } + +-static void bgp_evpn_remote_ip_hash_free(struct hash_bucket *bucket, void *args) ++void bgp_evpn_remote_ip_hash_free(struct hash_bucket *bucket, void *args) + { + struct evpn_remote_ip *ip = (struct evpn_remote_ip *)bucket->data; + struct bgpevpn *vpn = (struct bgpevpn *)args; +@@ -7320,7 +7392,7 @@ static void bgp_evpn_remote_ip_hash_free(struct hash_bucket *bucket, void *args) + XFREE(MTYPE_EVPN_REMOTE_IP, ip); + } + +-static void bgp_evpn_remote_ip_hash_destroy(struct bgpevpn *vpn) ++void bgp_evpn_remote_ip_hash_destroy(struct bgpevpn *vpn) + { + if (!evpn_resolve_overlay_index() || vpn->remote_ip_hash == NULL) + return; +@@ -7334,7 +7406,7 @@ static void bgp_evpn_remote_ip_hash_destroy(struct bgpevpn *vpn) + } + + /* Add a remote MAC/IP route to hash table */ +-static void bgp_evpn_remote_ip_hash_add(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_hash_add(struct bgpevpn *vpn, + struct bgp_path_info *pi) + { + struct evpn_remote_ip tmp; +@@ -7371,7 +7443,7 @@ static void bgp_evpn_remote_ip_hash_add(struct bgpevpn *vpn, + } + + /* Delete a remote MAC/IP route from hash table */ +-static void bgp_evpn_remote_ip_hash_del(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_hash_del(struct bgpevpn *vpn, + struct bgp_path_info *pi) + { + struct evpn_remote_ip tmp; +@@ -7403,7 +7475,7 @@ static void bgp_evpn_remote_ip_hash_del(struct bgpevpn *vpn, + } + } + +-static void bgp_evpn_remote_ip_hash_iterate(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_hash_iterate(struct bgpevpn *vpn, + void (*func)(struct hash_bucket *, + void *), + void *arg) +@@ -7414,7 +7486,7 @@ static void bgp_evpn_remote_ip_hash_iterate(struct bgpevpn *vpn, + hash_iterate(vpn->remote_ip_hash, func, arg); + } + +-static void show_remote_ip_entry(struct hash_bucket *bucket, void *args) ++void show_remote_ip_entry(struct hash_bucket *bucket, void *args) + { + char buf[INET6_ADDRSTRLEN]; + struct listnode *node = NULL; +@@ -7442,7 +7514,7 @@ void bgp_evpn_show_remote_ip_hash(struct hash_bucket *bucket, void *args) + vty_out(vty, "\n"); + } + +-static void bgp_evpn_remote_ip_hash_link_nexthop(struct hash_bucket *bucket, ++void bgp_evpn_remote_ip_hash_link_nexthop(struct hash_bucket *bucket, + void *args) + { + struct evpn_remote_ip *ip = (struct evpn_remote_ip *)bucket->data; +@@ -7451,7 +7523,7 @@ static void bgp_evpn_remote_ip_hash_link_nexthop(struct hash_bucket *bucket, + bgp_evpn_remote_ip_process_nexthops(vpn, &ip->addr, true); + } + +-static void bgp_evpn_remote_ip_hash_unlink_nexthop(struct hash_bucket *bucket, ++void bgp_evpn_remote_ip_hash_unlink_nexthop(struct hash_bucket *bucket, + void *args) + { + struct evpn_remote_ip *ip = (struct evpn_remote_ip *)bucket->data; +@@ -7460,14 +7532,14 @@ static void bgp_evpn_remote_ip_hash_unlink_nexthop(struct hash_bucket *bucket, + bgp_evpn_remote_ip_process_nexthops(vpn, &ip->addr, false); + } + +-static unsigned int vni_svi_hash_key_make(const void *p) ++unsigned int vni_svi_hash_key_make(const void *p) + { + const struct bgpevpn *vpn = p; + + return jhash_1word(vpn->svi_ifindex, 0); + } + +-static bool vni_svi_hash_cmp(const void *p1, const void *p2) ++bool vni_svi_hash_cmp(const void *p1, const void *p2) + { + const struct bgpevpn *vpn1 = p1; + const struct bgpevpn *vpn2 = p2; +@@ -7475,7 +7547,7 @@ static bool vni_svi_hash_cmp(const void *p1, const void *p2) + return (vpn1->svi_ifindex == vpn2->svi_ifindex); + } + +-static struct bgpevpn *bgp_evpn_vni_svi_hash_lookup(struct bgp *bgp, ++struct bgpevpn *bgp_evpn_vni_svi_hash_lookup(struct bgp *bgp, + ifindex_t svi) + { + struct bgpevpn *vpn; +@@ -7487,7 +7559,7 @@ static struct bgpevpn *bgp_evpn_vni_svi_hash_lookup(struct bgp *bgp, + return vpn; + } + +-static void bgp_evpn_link_to_vni_svi_hash(struct bgp *bgp, struct bgpevpn *vpn) ++void bgp_evpn_link_to_vni_svi_hash(struct bgp *bgp, struct bgpevpn *vpn) + { + if (vpn->svi_ifindex == 0) + return; +@@ -7495,7 +7567,7 @@ static void bgp_evpn_link_to_vni_svi_hash(struct bgp *bgp, struct bgpevpn *vpn) + (void)hash_get(bgp->vni_svi_hash, vpn, hash_alloc_intern); + } + +-static void bgp_evpn_unlink_from_vni_svi_hash(struct bgp *bgp, ++void bgp_evpn_unlink_from_vni_svi_hash(struct bgp *bgp, + struct bgpevpn *vpn) + { + if (vpn->svi_ifindex == 0) +@@ -7572,7 +7644,7 @@ bool bgp_evpn_is_gateway_ip_resolved(struct bgp_nexthop_cache *bnc) + } + + /* Resolve/Unresolve nexthops when a MAC/IP route is added/deleted */ +-static void bgp_evpn_remote_ip_process_nexthops(struct bgpevpn *vpn, ++void bgp_evpn_remote_ip_process_nexthops(struct bgpevpn *vpn, + struct ipaddr *addr, + bool resolve) + { +@@ -7695,7 +7767,7 @@ vni_t bgp_evpn_path_info_get_l3vni(const struct bgp_path_info *pi) + /* + * Returns true if the l3vni of any of this path doesn't match vrf's l3vni. + */ +-static bool bgp_evpn_path_is_dvni(const struct bgp *bgp_vrf, ++bool bgp_evpn_path_is_dvni(const struct bgp *bgp_vrf, + const struct bgp_path_info *pi) + { + vni_t vni = 0; +@@ -7781,4 +7853,5 @@ void bgp_aggr_supp_withdraw_from_evpn(struct bgp *bgp, afi_t afi, safi_t safi) + } + } + } +-} ++ return; ++} +\ No newline at end of file diff --git a/bgpd/bgp_evpn.h b/bgpd/bgp_evpn.h -index 3cbc5af5af..bf1943a2db 100644 +index c641a64f6..db05293a4 100644 --- a/bgpd/bgp_evpn.h +++ b/bgpd/bgp_evpn.h -@@ -230,4 +230,12 @@ extern void +@@ -176,6 +176,14 @@ bgp_evpn_handle_resolve_overlay_index_set(struct hash_bucket *bucket, + extern void bgp_evpn_handle_resolve_overlay_index_unset(struct hash_bucket *bucket, void *arg); - +extern enum zclient_send_status evpn_zebra_install(struct bgp *bgp, -+ struct bgpevpn *vpn, -+ const struct prefix_evpn *p, -+ struct bgp_path_info *pi); ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p, ++ struct bgp_path_info *pi); +extern enum zclient_send_status +evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p, struct bgp_path_info *pi, + bool is_sync); - #endif /* _QUAGGA_BGP_EVPN_H */ + extern mpls_label_t *bgp_evpn_path_info_labels_get_l3vni(mpls_label_t *labels, + uint32_t num_labels); + extern vni_t bgp_evpn_path_info_get_l3vni(const struct bgp_path_info *pi); diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c -index 552365959d..40687c558d 100644 +index d88c52d1f..f36d109b6 100644 --- a/bgpd/bgp_evpn_mh.c +++ b/bgpd/bgp_evpn_mh.c -@@ -56,13 +56,14 @@ static void bgp_evpn_local_es_down(struct bgp *bgp, - struct bgp_evpn_es *es); - static void bgp_evpn_local_type1_evi_route_del(struct bgp *bgp, - struct bgp_evpn_es *es); --static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, -+static struct bgp_evpn_es_vtep * -+bgp_evpn_es_vtep_add(struct bgp *bgp, struct bgp_evpn_es *es, -+ struct in_addr vtep_ip, bool esr, uint8_t df_alg, -+ uint16_t df_pref, int *zret); -+static enum zclient_send_status bgp_evpn_es_vtep_del(struct bgp *bgp, +@@ -49,8 +49,8 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, struct bgp_evpn_es *es, struct in_addr vtep_ip, -- bool esr, uint8_t df_alg, + bool esr, uint8_t df_alg, - uint16_t df_pref); -static void bgp_evpn_es_vtep_del(struct bgp *bgp, -- struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr); -+ bool esr); ++ uint16_t df_pref, int *zret); ++static enum zclient_send_status bgp_evpn_es_vtep_del(struct bgp *bgp, + struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr); static void bgp_evpn_es_cons_checks_pend_add(struct bgp_evpn_es *es); static void bgp_evpn_es_cons_checks_pend_del(struct bgp_evpn_es *es); - static struct bgp_evpn_es_evi * -@@ -105,6 +106,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, +@@ -94,6 +94,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, struct bgp_dest *dest) { int ret = 0; @@ -383,7 +1582,7 @@ index 552365959d..40687c558d 100644 afi_t afi = AFI_L2VPN; safi_t safi = SAFI_EVPN; struct bgp_path_info *old_select; /* old best */ -@@ -131,7 +133,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, +@@ -120,7 +121,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, bgp_evpn_es_vtep_add(bgp, es, old_select->attr->nexthop, true /*esr*/, old_select->attr->df_alg, @@ -392,7 +1591,7 @@ index 552365959d..40687c558d 100644 } UNSET_FLAG(old_select->flags, BGP_PATH_MULTIPATH_CHG); bgp_zebra_clear_route_change_flags(dest); -@@ -160,7 +162,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, +@@ -149,7 +150,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, && new_select->sub_type == BGP_ROUTE_IMPORTED) { bgp_evpn_es_vtep_add(bgp, es, new_select->attr->nexthop, true /*esr */, new_select->attr->df_alg, @@ -401,30 +1600,19 @@ index 552365959d..40687c558d 100644 } else { if (old_select && old_select->type == ZEBRA_ROUTE_BGP && old_select->sub_type == BGP_ROUTE_IMPORTED) -@@ -447,7 +449,7 @@ int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es, - &attr->mp_nexthop_global_in); - } - -- /* Return back the route entry. */ -+ /* Return back th*e route entry. */ - *ri = tmp_pi; - return 0; - } -@@ -1366,23 +1368,28 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_find(struct bgp_evpn_es *es, +@@ -1371,23 +1372,26 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_find(struct bgp_evpn_es *es, } - + /* Send the remote ES to zebra for NHG programming */ -static int bgp_zebra_send_remote_es_vtep(struct bgp *bgp, -- struct bgp_evpn_es_vtep *es_vtep, bool add) -+static enum zclient_send_status -+bgp_zebra_send_remote_es_vtep(struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, -+ bool add) ++static enum zclient_send_status bgp_zebra_send_remote_es_vtep(struct bgp *bgp, + struct bgp_evpn_es_vtep *es_vtep, bool add) { struct bgp_evpn_es *es = es_vtep->es; struct stream *s; uint32_t flags = 0; - - /* Check socket. */ + +- /* Check socket. */ - if (!zclient || zclient->sock < 0) - return 0; + if (!zclient || zclient->sock < 0) { @@ -433,7 +1621,7 @@ index 552365959d..40687c558d 100644 + __func__); + return ZCLIENT_SEND_SUCCESS; + } - + /* Don't try to register if Zebra doesn't know of this instance. */ if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { if (BGP_DEBUG(zebra, ZEBRA)) @@ -442,263 +1630,230 @@ index 552365959d..40687c558d 100644 - return 0; + return ZCLIENT_SEND_SUCCESS; } - + if (es_vtep->flags & BGP_EVPNES_VTEP_ESR) -@@ -1413,12 +1420,12 @@ static int bgp_zebra_send_remote_es_vtep(struct bgp *bgp, +@@ -1418,12 +1422,13 @@ static int bgp_zebra_send_remote_es_vtep(struct bgp *bgp, return zclient_send_message(zclient); } - + -static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, -- struct bgp_evpn_es_vtep *es_vtep, -- bool param_change) -+static enum zclient_send_status bgp_evpn_es_vtep_re_eval_active( -+ struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, bool param_change) ++static enum zclient_send_status bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, + struct bgp_evpn_es_vtep *es_vtep, + bool param_change) { bool old_active; bool new_active; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + old_active = CHECK_FLAG(es_vtep->flags, BGP_EVPNES_VTEP_ACTIVE); /* currently we need an active EVI reference to use the VTEP as -@@ -1440,7 +1447,7 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, +@@ -1445,7 +1450,7 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, es_vtep->df_alg, es_vtep->df_pref); - + /* send remote ES to zebra */ - bgp_zebra_send_remote_es_vtep(bgp, es_vtep, new_active); + ret = bgp_zebra_send_remote_es_vtep(bgp, es_vtep, new_active); - + /* The NHG is updated first for efficient failover handling. * Note the NHG can be de-activated while there are bgp -@@ -1452,13 +1459,14 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, +@@ -1457,13 +1462,14 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, /* queue up the es for background consistency checks */ bgp_evpn_es_cons_checks_pend_add(es_vtep->es); } -+ + return ret; } - --static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, -- struct bgp_evpn_es *es, -- struct in_addr vtep_ip, -- bool esr, uint8_t df_alg, + + static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, + struct bgp_evpn_es *es, + struct in_addr vtep_ip, + bool esr, uint8_t df_alg, - uint16_t df_pref) -+static struct bgp_evpn_es_vtep * -+bgp_evpn_es_vtep_add(struct bgp *bgp, struct bgp_evpn_es *es, -+ struct in_addr vtep_ip, bool esr, uint8_t df_alg, -+ uint16_t df_pref, int *zret) ++ uint16_t df_pref, int *zret) { struct bgp_evpn_es_vtep *es_vtep; bool param_change = false; -@@ -1485,15 +1493,17 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, +@@ -1490,15 +1496,16 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, ++es_vtep->evi_cnt; } - + - bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); + *zret = bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); - + return es_vtep; } - + -static void bgp_evpn_es_vtep_do_del(struct bgp *bgp, -- struct bgp_evpn_es_vtep *es_vtep, bool esr) -+static enum zclient_send_status -+bgp_evpn_es_vtep_do_del(struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, -+ bool esr) ++static enum zclient_send_status bgp_evpn_es_vtep_do_del(struct bgp *bgp, + struct bgp_evpn_es_vtep *es_vtep, bool esr) { bool param_change = false; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) zlog_debug("es %s vtep %pI4 del %s", es_vtep->es->esi_str, -@@ -1510,18 +1520,25 @@ static void bgp_evpn_es_vtep_do_del(struct bgp *bgp, +@@ -1515,18 +1522,21 @@ static void bgp_evpn_es_vtep_do_del(struct bgp *bgp, --es_vtep->evi_cnt; } - + - bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); + ret = bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); bgp_evpn_es_vtep_free(es_vtep); -+ + return ret; } - + -static void bgp_evpn_es_vtep_del(struct bgp *bgp, -- struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr) +static enum zclient_send_status bgp_evpn_es_vtep_del(struct bgp *bgp, -+ struct bgp_evpn_es *es, -+ struct in_addr vtep_ip, -+ bool esr) + struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr) { struct bgp_evpn_es_vtep *es_vtep; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + es_vtep = bgp_evpn_es_vtep_find(es, vtep_ip); if (es_vtep) - bgp_evpn_es_vtep_do_del(bgp, es_vtep, esr); + ret = bgp_evpn_es_vtep_do_del(bgp, es_vtep, esr); -+ + return ret; } - + /********************** ES MAC-IP paths ************************************* -@@ -3382,12 +3399,14 @@ static struct bgp_evpn_es_evi_vtep *bgp_evpn_es_evi_vtep_find( +@@ -3399,12 +3409,13 @@ static struct bgp_evpn_es_evi_vtep *bgp_evpn_es_evi_vtep_find( /* A VTEP can be added as "active" attach to an ES if EAD-per-ES and * EAD-per-EVI routes are rxed from it. */ -static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, -- struct bgp_evpn_es_evi_vtep *evi_vtep) -+static enum zclient_send_status -+bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, -+ struct bgp_evpn_es_evi_vtep *evi_vtep) ++static enum zclient_send_status bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, + struct bgp_evpn_es_evi_vtep *evi_vtep) { bool old_active; bool new_active; uint32_t ead_activity_flags; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + old_active = CHECK_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_ACTIVE); - -@@ -3408,7 +3427,7 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, + +@@ -3425,7 +3436,7 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, new_active = CHECK_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_ACTIVE); - + if (old_active == new_active) - return; + return ret; - + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) zlog_debug("es %s evi %u vtep %pI4 %s", -@@ -3417,24 +3436,26 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, - new_active ? "active" : "inactive"); - - /* add VTEP to parent es */ -- if (new_active) -+ if (new_active) { +@@ -3437,19 +3448,20 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, + if (new_active) evi_vtep->es_vtep = bgp_evpn_es_vtep_add( bgp, evi_vtep->es_evi->es, evi_vtep->vtep_ip, - false /*esr*/, 0, 0); -- else { + false /*esr*/, 0, 0, &ret); -+ } else { + else { if (evi_vtep->es_vtep) { - bgp_evpn_es_vtep_do_del(bgp, evi_vtep->es_vtep, -- false /*esr*/); + ret = bgp_evpn_es_vtep_do_del(bgp, evi_vtep->es_vtep, -+ false /*esr*/); + false /*esr*/); evi_vtep->es_vtep = NULL; } } /* queue up the parent es for background consistency checks */ bgp_evpn_es_cons_checks_pend_add(evi_vtep->es_evi->es); -+ + return ret; } - + -static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp, -- struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, -- bool ead_es) -+static enum zclient_send_status -+bgp_evpn_es_evi_vtep_add(struct bgp *bgp, struct bgp_evpn_es_evi *es_evi, -+ struct in_addr vtep_ip, bool ead_es) ++static enum zclient_send_status bgp_evpn_es_evi_vtep_add(struct bgp *bgp, + struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, + bool ead_es) { - struct bgp_evpn_es_evi_vtep *evi_vtep; - -@@ -3454,18 +3475,19 @@ static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp, +@@ -3475,18 +3487,19 @@ static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp, else SET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_EVI); - + - bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); + return bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); } - + -static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp, -- struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, -- bool ead_es) -+static enum zclient_send_status -+bgp_evpn_es_evi_vtep_del(struct bgp *bgp, struct bgp_evpn_es_evi *es_evi, -+ struct in_addr vtep_ip, bool ead_es) ++static enum zclient_send_status bgp_evpn_es_evi_vtep_del(struct bgp *bgp, + struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, + bool ead_es) { struct bgp_evpn_es_evi_vtep *evi_vtep; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + evi_vtep = bgp_evpn_es_evi_vtep_find(es_evi, vtep_ip); if (!evi_vtep) - return; + return ret; - + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) zlog_debug("del es %s evi %u vtep %pI4 %s", -@@ -3478,8 +3500,10 @@ static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp, +@@ -3503,8 +3516,9 @@ static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp, else UNSET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_EVI); - + - bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); + ret = bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); bgp_evpn_es_evi_vtep_free(evi_vtep); -+ + return ret; } - + /* compare ES-IDs for the ES-EVI RB tree maintained per-VNI */ -@@ -3755,18 +3779,20 @@ int bgp_evpn_local_es_evi_add(struct bgp *bgp, esi_t *esi, vni_t vni) +@@ -3780,7 +3794,7 @@ int bgp_evpn_local_es_evi_add(struct bgp *bgp, esi_t *esi, vni_t vni) /* Add remote ES-EVI entry. This is actually the remote VTEP add and the * ES-EVI is implicity created on first VTEP's reference. */ -int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p) -+enum zclient_send_status bgp_evpn_remote_es_evi_add(struct bgp *bgp, -+ struct bgpevpn *vpn, -+ const struct prefix_evpn *p) ++enum zclient_send_status bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p) { char buf[ESI_STR_LEN]; - struct bgp_evpn_es *es; +@@ -3788,10 +3802,11 @@ int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, struct bgp_evpn_es_evi *es_evi; bool ead_es; const esi_t *esi = &p->prefix.ead_addr.esi; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + if (!vpn) /* local EAD-ES need not be sent back to zebra */ - return 0; + return ret; - + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) zlog_debug("add remote %s es %s evi %u vtep %pI4", -@@ -3783,27 +3809,29 @@ int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, +@@ -3808,27 +3823,28 @@ int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, es_evi = bgp_evpn_es_evi_new(es, vpn); - + ead_es = !!p->prefix.ead_addr.eth_tag; - bgp_evpn_es_evi_vtep_add(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, -- ead_es); -+ ret = bgp_evpn_es_evi_vtep_add(bgp, es_evi, -+ p->prefix.ead_addr.ip.ipaddr_v4, ead_es); - ++ ret = bgp_evpn_es_evi_vtep_add(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, + ead_es); + bgp_evpn_es_evi_remote_info_re_eval(es_evi); - return 0; + return ret; } - + /* A remote VTEP has withdrawn. The es-evi-vtep will be deleted and the * parent es-evi freed up implicitly in last VTEP's deref. */ -int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, -- const struct prefix_evpn *p) -+enum zclient_send_status bgp_evpn_remote_es_evi_del(struct bgp *bgp, -+ struct bgpevpn *vpn, -+ const struct prefix_evpn *p) ++enum zclient_send_status bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, + const struct prefix_evpn *p) { char buf[ESI_STR_LEN]; struct bgp_evpn_es *es; struct bgp_evpn_es_evi *es_evi; bool ead_es; + enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; - + if (!vpn) /* local EAD-ES need not be sent back to zebra */ - return 0; + return ret; - + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) zlog_debug( -@@ -3822,7 +3850,7 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, +@@ -3847,7 +3863,7 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, esi_to_str(&p->prefix.ead_addr.esi, buf, sizeof(buf)), vpn->vni, &p->prefix.ead_addr.ip.ipaddr_v4); @@ -707,31 +1862,29 @@ index 552365959d..40687c558d 100644 } es_evi = bgp_evpn_es_evi_find(es, vpn); if (!es_evi) { -@@ -3835,14 +3863,15 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, +@@ -3860,14 +3876,14 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, sizeof(buf)), vpn->vni, &p->prefix.ead_addr.ip.ipaddr_v4); - return 0; + return ret; } - + ead_es = !!p->prefix.ead_addr.eth_tag; - bgp_evpn_es_evi_vtep_del(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, -- ead_es); -+ ret = bgp_evpn_es_evi_vtep_del(bgp, es_evi, -+ p->prefix.ead_addr.ip.ipaddr_v4, ead_es); ++ ret = bgp_evpn_es_evi_vtep_del(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, + ead_es); bgp_evpn_es_evi_remote_info_re_eval(es_evi); - return 0; -+ + return ret; } - + /* If a VNI is being deleted we need to force del all remote VTEPs */ diff --git a/bgpd/bgp_evpn_mh.h b/bgpd/bgp_evpn_mh.h -index 11030e323f..d6e77e982f 100644 +index cebabb9fd..5d393c37a 100644 --- a/bgpd/bgp_evpn_mh.h +++ b/bgpd/bgp_evpn_mh.h -@@ -434,10 +434,12 @@ extern int bgp_evpn_local_es_add(struct bgp *bgp, esi_t *esi, +@@ -418,10 +418,12 @@ extern int bgp_evpn_local_es_add(struct bgp *bgp, esi_t *esi, extern int bgp_evpn_local_es_del(struct bgp *bgp, esi_t *esi); extern int bgp_evpn_local_es_evi_add(struct bgp *bgp, esi_t *esi, vni_t vni); extern int bgp_evpn_local_es_evi_del(struct bgp *bgp, esi_t *esi, vni_t vni); @@ -749,99 +1902,89 @@ index 11030e323f..d6e77e982f 100644 extern void bgp_evpn_mh_finish(void); void bgp_evpn_vni_es_init(struct bgpevpn *vpn); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index c29442d96c..679abba463 100644 +index e45d4b1ff..3dff073a3 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c -@@ -3213,9 +3213,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, - && (new_select->sub_type == BGP_ROUTE_NORMAL - || new_select->sub_type +@@ -3420,7 +3420,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, == BGP_ROUTE_IMPORTED)) -- - bgp_zebra_route_install( -- dest, old_select, bgp, true); -+ dest, old_select, bgp, true, -+ NULL, false); + + bgp_zebra_route_install(dest, old_select, +- bgp, true); ++ bgp, true, NULL, false); } } - -@@ -3313,9 +3313,10 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + +@@ -3529,9 +3529,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + */ if (old_select && is_route_parent_evpn(old_select)) - bgp_zebra_route_install(dest, old_select, bgp, -- false); -+ false, NULL, false); - +- bgp_zebra_route_install(dest, old_select, bgp, false); ++ bgp_zebra_route_install(dest, old_select, bgp, false, NULL, false); + - bgp_zebra_route_install(dest, new_select, bgp, true); -+ bgp_zebra_route_install(dest, new_select, bgp, true, -+ NULL, false); ++ bgp_zebra_route_install(dest, new_select, bgp, true, NULL, false); } else { /* Withdraw the route from the kernel. */ if (old_select && old_select->type == ZEBRA_ROUTE_BGP -@@ -3324,7 +3325,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3539,7 +3539,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || old_select->sub_type == BGP_ROUTE_AGGREGATE || old_select->sub_type == BGP_ROUTE_IMPORTED)) - - bgp_zebra_route_install(dest, old_select, bgp, -- false); -+ false, NULL, false); + +- bgp_zebra_route_install(dest, old_select, bgp, false); ++ bgp_zebra_route_install(dest, old_select, bgp, false, NULL, false); } } - -@@ -4203,7 +4204,8 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, + +@@ -4444,7 +4444,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) /* remove from RIB previous entry */ - bgp_zebra_route_install(dest, pi, bgp, false); -+ bgp_zebra_route_install(dest, pi, bgp, false, NULL, -+ false); ++ bgp_zebra_route_install(dest, pi, bgp, false, NULL, false); } - + if (peer->sort == BGP_PEER_EBGP) { diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h -index 45d61f8dfd..9eb681ea3f 100644 +index 67431ea4f..1550d00ad 100644 --- a/bgpd/bgp_table.h +++ b/bgpd/bgp_table.h -@@ -103,6 +103,8 @@ struct bgp_node { - +@@ -75,10 +75,10 @@ struct bgp_dest { + struct bgp_dest *pdest; + + STAILQ_ENTRY(bgp_dest) pq; +- struct bgp_path_info *za_bgp_pi; +- struct zebra_announce_item zai; - struct bgp_path_info *za_bgp_pi; +- ++ struct bgp_path_info *za_bgp_pi; + struct bgpevpn *za_vpn; + bool za_is_sync; - uint64_t version; - + + mpls_label_t local_label; diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index 1162941ef1..b81acaf8ec 100644 +index 064f23350..cab758fca 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c -@@ -1713,12 +1713,11 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) - for (dest = bgp_table_top(table); dest; dest = bgp_route_next(dest)) - for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) - if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && -- -- (pi->type == ZEBRA_ROUTE_BGP -- && (pi->sub_type == BGP_ROUTE_NORMAL -- || pi->sub_type == BGP_ROUTE_IMPORTED))) -- +@@ -1674,7 +1674,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) + && (pi->sub_type == BGP_ROUTE_NORMAL + || pi->sub_type == BGP_ROUTE_IMPORTED))) + - bgp_zebra_route_install(dest, pi, bgp, true); -+ (pi->type == ZEBRA_ROUTE_BGP && -+ (pi->sub_type == BGP_ROUTE_NORMAL || -+ pi->sub_type == BGP_ROUTE_IMPORTED))) -+ bgp_zebra_route_install(dest, pi, bgp, true, -+ NULL, false); ++ bgp_zebra_route_install(dest, pi, bgp, true, NULL, false); } - + /* Announce routes of any bgp subtype of a table to zebra */ -@@ -1740,7 +1739,8 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +@@ -1696,7 +1696,7 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && pi->type == ZEBRA_ROUTE_BGP) - bgp_zebra_route_install(dest, pi, bgp, true); -+ bgp_zebra_route_install(dest, pi, bgp, true, -+ NULL, false); ++ bgp_zebra_route_install(dest, pi, bgp, true, NULL, false); } - - enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, -@@ -1793,6 +1793,7 @@ enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, + + +@@ -1749,6 +1749,7 @@ enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, #define ZEBRA_ANNOUNCEMENTS_LIMIT 1000 static void bgp_handle_route_announcements_to_zebra(struct thread *e) { @@ -849,19 +1992,19 @@ index 1162941ef1..b81acaf8ec 100644 uint32_t count = 0; struct bgp_dest *dest = NULL; struct bgp_table *table = NULL; -@@ -1808,6 +1809,9 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) +@@ -1764,6 +1765,9 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) table = bgp_dest_table(dest); install = CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); + if (table && table->afi == AFI_L2VPN && + table->safi == SAFI_EVPN) + is_evpn = true; - + if (BGP_DEBUG(zebra, ZEBRA)) zlog_debug( -@@ -1816,17 +1820,33 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) +@@ -1772,17 +1776,32 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) table->bgp->name_pretty, dest, dest->flags); - + if (install) { - status = bgp_zebra_announce_actual( - dest, dest->za_bgp_pi, table->bgp); @@ -887,23 +2030,21 @@ index 1162941ef1..b81acaf8ec 100644 + else + status = bgp_zebra_withdraw_actual( + dest, dest->za_bgp_pi, table->bgp); -+ UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); } - + bgp_path_info_unlock(dest->za_bgp_pi); dest->za_bgp_pi = NULL; + dest->za_vpn = NULL; bgp_dest_unlock_node(dest); - + if (status == ZCLIENT_SEND_BUFFERED) -@@ -1880,8 +1900,16 @@ static void bgp_zebra_buffer_write_ready(void) +@@ -1836,8 +1855,14 @@ static void bgp_zebra_buffer_write_ready(void) * withdrawn. */ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, - struct bgp *bgp, bool install) -+ struct bgp *bgp, bool install, struct bgpevpn *vpn, -+ bool is_sync) ++ struct bgp *bgp, bool install, struct bgpevpn *vpn, bool is_sync) { + bool is_evpn = false; + struct bgp_table *table = NULL; @@ -911,41 +2052,40 @@ index 1162941ef1..b81acaf8ec 100644 + table = bgp_dest_table(dest); + if (table && table->afi == AFI_L2VPN && table->safi == SAFI_EVPN) + is_evpn = true; -+ /* * BGP is installing this route and bgp has been configured * to suppress announcements until the route has been installed -@@ -1891,7 +1919,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1847,7 +1872,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, if (BGP_SUPPRESS_FIB_ENABLED(bgp)) SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); - + - if (bgp->main_zebra_update_hold) + if (bgp->main_zebra_update_hold && !is_evpn) return; } else { UNSET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); -@@ -1901,7 +1929,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1857,7 +1882,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, * Don't try to install if we're not connected to Zebra or Zebra doesn't * know of this instance. */ - if (!bgp_install_info_to_zebra(bgp)) + if (!bgp_install_info_to_zebra(bgp) && !is_evpn) return; - + if (!CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL) && -@@ -1922,7 +1950,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1878,7 +1903,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, dest->za_bgp_pi = info; } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { assert(dest->za_bgp_pi); - if (install) + if (install & !is_evpn) bgp_zebra_withdraw_actual(dest, dest->za_bgp_pi, bgp); - + bgp_path_info_unlock(dest->za_bgp_pi); -@@ -1930,6 +1958,11 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1886,6 +1911,11 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, dest->za_bgp_pi = info; } - + + if (is_evpn) { + dest->za_vpn = vpn; + dest->za_is_sync = is_sync; @@ -954,42 +2094,40 @@ index 1162941ef1..b81acaf8ec 100644 if (install) { UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); SET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); -@@ -1960,7 +1993,8 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa +@@ -1916,7 +1946,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && (pi->type == ZEBRA_ROUTE_BGP)) - bgp_zebra_route_install(dest, pi, bgp, false); -+ bgp_zebra_route_install(dest, pi, bgp, false, -+ NULL, false); ++ bgp_zebra_route_install(dest, pi, bgp, false, NULL, false); } } } diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h -index 45fcf7f514..5186b7454e 100644 +index 83197c28e..92971b51f 100644 --- a/bgpd/bgp_zebra.h +++ b/bgpd/bgp_zebra.h -@@ -45,7 +45,8 @@ extern int bgp_zebra_get_table_range(uint32_t chunk_size, +@@ -30,7 +30,7 @@ extern int bgp_zebra_get_table_range(struct zclient *zc, uint32_t chunk_size, extern int bgp_if_update_all(void); extern void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *path, struct bgp *bgp, - bool install); -+ bool install, struct bgpevpn *vpn, -+ bool is_sync); ++ bool install, struct bgpevpn *vpn, bool is_sync); + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); - - /* Announce routes of any bgp subtype of a table to zebra */ + extern enum zclient_send_status diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h -index bdf31f5161..dc660fb8f0 100644 +index a088a2e11..214a2f9b0 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h -@@ -512,6 +512,7 @@ struct bgp { - #define BGP_FLAG_HARD_ADMIN_RESET (1ULL << 31) - /* Evaluate the AIGP attribute during the best path selection process */ - #define BGP_FLAG_COMPARE_AIGP (1ULL << 32) +@@ -529,6 +529,7 @@ struct bgp { + #define BGP_FLAG_LU_IPV6_EXPLICIT_NULL (1ULL << 34) + #define BGP_FLAG_SOFT_VERSION_CAPABILITY (1ULL << 35) + #define BGP_FLAG_ENFORCE_FIRST_AS (1ULL << 36) +#define BGP_FLAG_VNI_DOWN (1ULL << 38) - + /* BGP default address-families. * New peers inherit enabled afi/safis from bgp instance. --- -2.17.1 +-- +2.39.4 diff --git a/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch b/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch index a360a3101599..fa1a742b1a88 100644 --- a/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch +++ b/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch @@ -19,21 +19,18 @@ Signed-off-by: Rajasekar Raja Signed-off-by: Donald Sharp diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c -index 622fd6afd2..eb5aa9f077 100644 +index 79e16d8f9..00a45a819 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c -@@ -3752,9 +3752,7 @@ static int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) - * particular VNI. +@@ -3926,7 +3926,6 @@ int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) */ - static int install_uninstall_routes_for_vni(struct bgp *bgp, -- struct bgpevpn *vpn, + int install_uninstall_routes_for_vni(struct bgp *bgp, + struct bgpevpn *vpn, - bgp_evpn_route_type rtype, -- int install) -+ struct bgpevpn *vpn, int install) + int install) { afi_t afi; - safi_t safi; -@@ -3785,7 +3783,9 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp, +@@ -3958,7 +3957,9 @@ int install_uninstall_routes_for_vni(struct bgp *bgp, (const struct prefix_evpn *)bgp_dest_get_prefix( dest); @@ -44,19 +41,19 @@ index 622fd6afd2..eb5aa9f077 100644 continue; for (pi = bgp_dest_get_bgp_path_info(dest); pi; -@@ -3812,7 +3812,8 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp, - bgp->vrf_id, - install ? "install" - : "uninstall", -- rtype == BGP_EVPN_MAC_IP_ROUTE +@@ -3991,7 +3992,8 @@ int install_uninstall_routes_for_vni(struct bgp *bgp, + bgp->vrf_id, + install ? "install" + : "uninstall", +- rtype == BGP_EVPN_MAC_IP_ROUTE + evp->prefix.route_type == + BGP_EVPN_MAC_IP_ROUTE - ? "MACIP" - : "IMET", - vpn->vni); -@@ -3845,23 +3846,11 @@ static int install_routes_for_vrf(struct bgp *bgp_vrf) + ? "MACIP" + : "IMET", + vpn->vni); +@@ -4023,23 +4025,11 @@ int install_routes_for_vrf(struct bgp *bgp_vrf) */ - static int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) { - int ret; - @@ -81,9 +78,9 @@ index 622fd6afd2..eb5aa9f077 100644 } /* uninstall routes from l3vni vrf. */ -@@ -3877,25 +3866,11 @@ static int uninstall_routes_for_vrf(struct bgp *bgp_vrf) +@@ -4055,25 +4045,11 @@ int uninstall_routes_for_vrf(struct bgp *bgp_vrf) */ - static int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) { - int ret; - @@ -112,5 +109,5 @@ index 622fd6afd2..eb5aa9f077 100644 /* -- -2.17.1 +2.39.4 diff --git a/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch b/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch index b74d86881ae5..9c4be324fb6a 100644 --- a/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch +++ b/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch @@ -17,38 +17,38 @@ Signed-off-by: Donald Sharp Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 679abba463..e28069767f 100644 +index 3dff073a3..26089e326 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c -@@ -3312,8 +3312,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, +@@ -3529,7 +3529,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, */ if (old_select && is_route_parent_evpn(old_select)) -- bgp_zebra_route_install(dest, old_select, bgp, -- false, NULL, false); +- bgp_zebra_route_install(dest, old_select, bgp, false, NULL, false); + bgp_zebra_withdraw_actual(dest, old_select, bgp); - - bgp_zebra_route_install(dest, new_select, bgp, true, - NULL, false); + + bgp_zebra_route_install(dest, new_select, bgp, true, NULL, false); + } else { diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c -index 524551b1e0..5d5525156b 100644 +index f0fe0ec5c..c0733dfe3 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c -@@ -1889,11 +1889,9 @@ static void bgp_zebra_buffer_write_ready(void) +@@ -1844,11 +1844,10 @@ static void bgp_zebra_buffer_write_ready(void) * save new pi, mark as going to be * withdrawan, remove install flag * - * Withdrawal Install Special case, send withdrawal immediately - * Leave dest on list, release old pi, ++ * + * Withdrawal Install Leave dest on list, release old pi, * save new pi, mark as going to be - * installed. -+ * installed. ++ * installed * Withdrawal Withdrawal Leave dest on list, release old pi, * save new pi, mark as going to be * withdrawn. -@@ -1949,9 +1947,6 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +@@ -1902,9 +1901,6 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, dest->za_bgp_pi = info; } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { assert(dest->za_bgp_pi); @@ -58,6 +58,6 @@ index 524551b1e0..5d5525156b 100644 bgp_path_info_unlock(dest->za_bgp_pi); bgp_path_info_lock(info); dest->za_bgp_pi = info; --- -2.43.2 +-- +2.39.4 diff --git a/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch b/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch index 3401dae27158..b5dac2ba5897 100644 --- a/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch +++ b/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch @@ -12,19 +12,19 @@ to the queue. Signed-off-by: Donald Sharp diff --git a/zebra/dplane_fpm_nl.c b/zebra/dplane_fpm_nl.c -index caa2f988e2..bc9815bb10 100644 +index b2fee4ff7..f45003cd2 100644 --- a/zebra/dplane_fpm_nl.c +++ b/zebra/dplane_fpm_nl.c -@@ -135,8 +135,6 @@ struct fpm_nl_ctx { - +@@ -133,8 +133,6 @@ struct fpm_nl_ctx { + /* Amount of data plane context processed. */ _Atomic uint32_t dplane_contexts; - /* Amount of data plane contexts enqueued. */ - _Atomic uint32_t ctxqueue_len; /* Peak amount of data plane contexts enqueued. */ _Atomic uint32_t ctxqueue_len_peak; - -@@ -311,6 +309,12 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, + +@@ -328,6 +326,12 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, FPM_STR "FPM statistic counters\n") { @@ -35,9 +35,9 @@ index caa2f988e2..bc9815bb10 100644 + } + vty_out(vty, "%30s\n%30s\n", "FPM counters", "============"); - + #define SHOW_COUNTER(label, counter) \ -@@ -324,8 +328,7 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, +@@ -341,8 +345,7 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, SHOW_COUNTER("Connection errors", gfnc->counters.connection_errors); SHOW_COUNTER("Data plane items processed", gfnc->counters.dplane_contexts); @@ -47,7 +47,7 @@ index caa2f988e2..bc9815bb10 100644 SHOW_COUNTER("Data plane items queue peak", gfnc->counters.ctxqueue_len_peak); SHOW_COUNTER("Buffer full hits", gfnc->counters.buffer_full); -@@ -344,6 +347,12 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, +@@ -361,6 +364,12 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, "FPM statistic counters\n" JSON_STR) { @@ -58,9 +58,9 @@ index caa2f988e2..bc9815bb10 100644 + } + struct json_object *jo; - + jo = json_object_new_object(); -@@ -357,8 +366,7 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, +@@ -374,8 +383,7 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, gfnc->counters.connection_errors); json_object_int_add(jo, "data-plane-contexts", gfnc->counters.dplane_contexts); @@ -70,25 +70,25 @@ index caa2f988e2..bc9815bb10 100644 json_object_int_add(jo, "data-plane-contexts-queue-peak", gfnc->counters.ctxqueue_len_peak); json_object_int_add(jo, "buffer-full-hits", gfnc->counters.buffer_full); -@@ -1380,8 +1388,6 @@ static void fpm_process_queue(struct thread *t) - +@@ -1427,8 +1435,6 @@ static void fpm_process_queue(struct event *t) + /* Account the processed entries. */ processed_contexts++; - atomic_fetch_sub_explicit(&fnc->counters.ctxqueue_len, 1, - memory_order_relaxed); - + dplane_ctx_set_status(ctx, ZEBRA_DPLANE_REQUEST_SUCCESS); dplane_provider_enqueue_out_ctx(fnc->prov, ctx); -@@ -1550,7 +1556,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) +@@ -1602,7 +1608,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) struct zebra_dplane_ctx *ctx; struct fpm_nl_ctx *fnc; int counter, limit; - uint64_t cur_queue, peak_queue = 0, stored_peak_queue; + uint64_t cur_queue = 0, peak_queue = 0, stored_peak_queue; - + fnc = dplane_provider_get_data(prov); limit = dplane_provider_get_work_limit(prov); -@@ -1564,20 +1570,12 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) +@@ -1616,20 +1622,12 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) * anyway. */ if (fnc->socket != -1 && fnc->connecting == false) { @@ -104,32 +104,32 @@ index caa2f988e2..bc9815bb10 100644 + cur_queue = + dplane_ctx_queue_count(&fnc->ctxqueue); } - + - cur_queue = atomic_load_explicit( - &fnc->counters.ctxqueue_len, - memory_order_relaxed); if (peak_queue < cur_queue) peak_queue = cur_queue; continue; -@@ -1594,9 +1592,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) +@@ -1646,9 +1644,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) atomic_store_explicit(&fnc->counters.ctxqueue_len_peak, peak_queue, memory_order_relaxed); - + - if (atomic_load_explicit(&fnc->counters.ctxqueue_len, - memory_order_relaxed) - > 0) + if (cur_queue > 0) - thread_add_timer(fnc->fthread->master, fpm_process_queue, - fnc, 0, &fnc->t_dequeue); - + event_add_event(fnc->fthread->master, fpm_process_queue, fnc, 0, + &fnc->t_dequeue); + diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c -index 59b8d6cc63..c252a370b8 100644 +index 70ce555b1..a53bf8b25 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c -@@ -969,6 +969,11 @@ struct zebra_dplane_ctx *dplane_ctx_dequeue(struct dplane_ctx_list_head *q) +@@ -956,6 +956,11 @@ struct zebra_dplane_ctx *dplane_ctx_dequeue(struct dplane_ctx_list_head *q) return ctx; } - + +uint32_t dplane_ctx_queue_count(struct dplane_ctx_list_head *q) +{ + return dplane_ctx_list_count(q); @@ -139,18 +139,18 @@ index 59b8d6cc63..c252a370b8 100644 * Accessors for information from the context object */ diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h -index 9f9496c8f4..c29e05bbc9 100644 +index 2f7d21850..51c1bff5d 100644 --- a/zebra/zebra_dplane.h +++ b/zebra/zebra_dplane.h -@@ -324,6 +324,8 @@ struct zebra_dplane_ctx *dplane_ctx_get_head(struct dplane_ctx_list_head *q); +@@ -316,6 +316,8 @@ struct zebra_dplane_ctx *dplane_ctx_get_head(struct dplane_ctx_list_head *q); /* Init a list of contexts */ void dplane_ctx_q_init(struct dplane_ctx_list_head *q); - + +uint32_t dplane_ctx_queue_count(struct dplane_ctx_list_head *q); + /* * Accessors for information from the context object */ --- -2.43.2 +-- +2.39.4 diff --git a/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch b/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch index e865b861d192..847a63797fd3 100644 --- a/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch +++ b/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch @@ -20,42 +20,42 @@ r1# Signed-off-by: Donald Sharp diff --git a/zebra/rib.h b/zebra/rib.h -index 2e62148ea0..b78cd218f6 100644 +index a721f4bac..15f877b66 100644 --- a/zebra/rib.h +++ b/zebra/rib.h -@@ -630,6 +630,7 @@ static inline struct nexthop_group *rib_get_fib_backup_nhg( - } - +@@ -628,6 +628,7 @@ extern int rib_add_gr_run(afi_t afi, vrf_id_t vrf_id, uint8_t proto, + uint8_t instance); + extern void zebra_vty_init(void); +extern uint32_t zebra_rib_dplane_results_count(void); - + extern pid_t pid; - + diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c -index f0e1ff6f27..21c73a3796 100644 +index e077c28d1..efa795331 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c -@@ -5998,12 +5998,14 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) +@@ -6089,12 +6089,14 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) struct zebra_dplane_provider *prov; uint64_t in, in_q, in_max, out, out_q, out_max; - + - vty_out(vty, "Zebra dataplane providers:\n"); - DPLANE_LOCK(); prov = dplane_prov_list_first(&zdplane_info.dg_providers); + in = dplane_ctx_queue_count(&zdplane_info.dg_update_list); DPLANE_UNLOCK(); - + + vty_out(vty, "dataplane Incoming Queue from Zebra: %" PRIu64 "\n", in); + vty_out(vty, "Zebra dataplane providers:\n"); + /* Show counters, useful info from each registered provider */ while (prov) { dplane_provider_lock(prov); -@@ -6022,13 +6024,19 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) +@@ -6113,13 +6115,19 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) out_max = atomic_load_explicit(&prov->dp_out_max, memory_order_relaxed); - + - vty_out(vty, "%s (%u): in: %"PRIu64", q: %"PRIu64", q_max: %"PRIu64", out: %"PRIu64", q: %"PRIu64", q_max: %"PRIu64"\n", - prov->dp_name, prov->dp_id, in, in_q, in_max, - out, out_q, out_max); @@ -65,24 +65,24 @@ index f0e1ff6f27..21c73a3796 100644 + ", q_max: %" PRIu64 "\n", + prov->dp_name, prov->dp_id, in, in_q, in_max, out, + out_q, out_max); - + prov = dplane_prov_list_next(&zdplane_info.dg_providers, prov); } - + + out = zebra_rib_dplane_results_count(); + vty_out(vty, "dataplane Outgoing Queue to Zebra: %" PRIu64 "\n", out); + return CMD_SUCCESS; } - + diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c -index 1ff3d98545..ae051d37eb 100644 +index 5b95d8668..430878daf 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c -@@ -4874,6 +4874,17 @@ static int rib_dplane_results(struct dplane_ctx_list_head *ctxlist) +@@ -5001,6 +5001,17 @@ static int rib_dplane_results(struct dplane_ctx_list_head *ctxlist) return 0; } - + +uint32_t zebra_rib_dplane_results_count(void) +{ + uint32_t count; @@ -97,6 +97,6 @@ index 1ff3d98545..ae051d37eb 100644 /* * Ensure there are no empty slots in the route_info array. * Every route type in zebra should be present there. --- -2.43.2 +-- +2.39.4 diff --git a/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch b/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch index 1731b6d21f31..e98f867fa9af 100644 --- a/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch +++ b/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch @@ -22,16 +22,16 @@ Signed-off-by: Chirag Shah Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c -index 2243ffdc77..b1f8f19594 100644 +index 5e62854ed..c517a67f5 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c -@@ -6074,16 +6074,16 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, +@@ -6301,16 +6301,16 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) { struct bgp_dest *dest = NULL; - uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); + struct bgp_dest *dest_next = NULL; - + - while (ann_count) { - dest = zebra_announce_pop(&bm->zebra_announce_head); - ann_count--; @@ -46,13 +46,13 @@ index 2243ffdc77..b1f8f19594 100644 + zebra_announce_del(&bm->zebra_announce_head, dest); + } } - bgp_evpn_remote_ip_hash_destroy(vpn); + bgp_evpn_vni_es_cleanup(vpn); diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 492566f8c8..e16a58b443 100644 +index 4348a60c5..24577768f 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c -@@ -3689,19 +3689,25 @@ int bgp_delete(struct bgp *bgp) +@@ -3868,19 +3868,25 @@ int bgp_delete(struct bgp *bgp) safi_t safi; int i; struct bgp_dest *dest = NULL; @@ -60,9 +60,9 @@ index 492566f8c8..e16a58b443 100644 + struct bgp_table *dest_table = NULL; struct graceful_restart_info *gr_info; - uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); - + assert(bgp); - + - while (ann_count) { - dest = zebra_announce_pop(&bm->zebra_announce_head); - ann_count--; @@ -83,8 +83,8 @@ index 492566f8c8..e16a58b443 100644 + zebra_announce_del(&bm->zebra_announce_head, dest); + } } - + bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); --- -2.43.2 +-- +2.39.4 diff --git a/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch b/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch index 878d60eb5e37..f4f1b6b3b42c 100644 --- a/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch +++ b/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch @@ -14,10 +14,10 @@ Ticket :#4001204 Signed-off-by: Rajasekar Raja diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c -index b1f8f19594..bb3cd62950 100644 +index c517a67f5..63e2e1c05 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c -@@ -6080,9 +6080,9 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) +@@ -6307,9 +6307,9 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) dest = dest_next) { dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); if (dest->za_vpn == vpn) { @@ -27,12 +27,12 @@ index b1f8f19594..bb3cd62950 100644 - zebra_announce_del(&bm->zebra_announce_head, dest); } } - + bgp_evpn_remote_ip_hash_destroy(vpn); diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c -index 2e1c5e555b..342982069b 100644 +index 8132d0515..8ebfde10c 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c -@@ -3706,9 +3706,9 @@ int bgp_delete(struct bgp *bgp) +@@ -3885,9 +3885,9 @@ int bgp_delete(struct bgp *bgp) dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); dest_table = bgp_dest_table(dest); if (dest_table->bgp == bgp) { @@ -42,7 +42,7 @@ index 2e1c5e555b..342982069b 100644 - zebra_announce_del(&bm->zebra_announce_head, dest); } } - --- -2.43.2 + +-- +2.39.4 diff --git a/src/sonic-frr/patch/0053-bgpd-Set-md5-TCP-socket-option-for-outgoing-connections-on-listener.patch b/src/sonic-frr/patch/0053-bgpd-Set-md5-TCP-socket-option-for-outgoing-connections-on-listener.patch deleted file mode 100644 index 791f52de3966..000000000000 --- a/src/sonic-frr/patch/0053-bgpd-Set-md5-TCP-socket-option-for-outgoing-connections-on-listener.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c -index 76bb9949d..974a57ef2 100644 ---- a/bgpd/bgp_network.c -+++ b/bgpd/bgp_network.c -@@ -774,6 +774,9 @@ int bgp_connect(struct peer *peer) - ? IPV4_MAX_BITLEN - : IPV6_MAX_BITLEN; - -+ if (!BGP_PEER_SU_UNSPEC(peer)) -+ bgp_md5_set(peer); -+ - bgp_md5_set_connect(peer->fd, &peer->su, prefixlen, - peer->password); - } diff --git a/src/sonic-frr/patch/build-dplane-fpm-sonic-module.patch b/src/sonic-frr/patch/0054-build-dplane-fpm-sonic-module.patch similarity index 62% rename from src/sonic-frr/patch/build-dplane-fpm-sonic-module.patch rename to src/sonic-frr/patch/0054-build-dplane-fpm-sonic-module.patch index 1ada5d9604df..03af6cad3143 100644 --- a/src/sonic-frr/patch/build-dplane-fpm-sonic-module.patch +++ b/src/sonic-frr/patch/0054-build-dplane-fpm-sonic-module.patch @@ -1,43 +1,46 @@ -Build dplane_fpm_sonic module +From 9e789e450003b9d2c7347c9f9b0d29d9b84d525f Mon Sep 17 00:00:00 2001 +From: sudhanshukumar22 +Date: Tue, 1 Oct 2024 02:28:17 -0700 +Subject: [PATCH] Build dplane_fpm_sonic module From: Carmine Scarpitta Signed-off-by: Carmine Scarpitta --- - debian/frr.install | 1 + - redhat/frr.spec.in | 1 + - zebra/subdir.am | 6 ++++++ + debian/frr.install | 1 + + redhat/frr.spec.in | 1 + + zebra/subdir.am | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/debian/frr.install b/debian/frr.install -index 044b48498..f53b874e3 100644 +index d4b904b6e..375f0dadd 100644 --- a/debian/frr.install +++ b/debian/frr.install -@@ -10,6 +10,7 @@ usr/lib/*/frr/libfrrcares.* - usr/lib/*/frr/libfrrospfapiclient.* +@@ -11,6 +11,7 @@ usr/lib/*/frr/libfrrospfapiclient.* + usr/lib/*/frr/libmgmt_be_nb.* usr/lib/*/frr/modules/bgpd_bmp.so usr/lib/*/frr/modules/dplane_fpm_nl.so +usr/lib/*/frr/modules/dplane_fpm_sonic.so usr/lib/*/frr/modules/zebra_cumulus_mlag.so usr/lib/*/frr/modules/zebra_fpm.so - usr/lib/*/frr/modules/zebra_irdp.so + usr/lib/*/frr/modules/pathd_pcep.so diff --git a/redhat/frr.spec.in b/redhat/frr.spec.in -index 4afd562a8..2eab817c9 100644 +index 13d5b8689..ffbe872c4 100644 --- a/redhat/frr.spec.in +++ b/redhat/frr.spec.in -@@ -714,6 +714,7 @@ fi +@@ -723,6 +723,7 @@ fi %endif %{_libdir}/frr/modules/zebra_cumulus_mlag.so %{_libdir}/frr/modules/dplane_fpm_nl.so +%{_libdir}/frr/modules/dplane_fpm_sonic.so - %{_libdir}/frr/modules/zebra_irdp.so %{_libdir}/frr/modules/bgpd_bmp.so - %{_bindir}/* + %{_libdir}/libfrr_pb.so* + %{_libdir}/libfrrfpm_pb.so* diff --git a/zebra/subdir.am b/zebra/subdir.am -index 5c4a87b93..3f1807d26 100644 +index d9c8d9045..ecc7195ae 100644 --- a/zebra/subdir.am +++ b/zebra/subdir.am -@@ -236,6 +236,12 @@ zebra_dplane_fpm_nl_la_LDFLAGS = $(MODULE_LDFLAGS) +@@ -245,6 +245,12 @@ zebra_dplane_fpm_nl_la_LDFLAGS = $(MODULE_LDFLAGS) zebra_dplane_fpm_nl_la_LIBADD = endif @@ -50,3 +53,6 @@ index 5c4a87b93..3f1807d26 100644 if NETLINK_DEBUG zebra_zebra_SOURCES += \ zebra/debug_nl.c \ +-- +2.39.4 + diff --git a/src/sonic-frr/patch/bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch b/src/sonic-frr/patch/0055-bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch similarity index 54% rename from src/sonic-frr/patch/bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch rename to src/sonic-frr/patch/0055-bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch index 161a0454b3c5..ce4ee66ab317 100644 --- a/src/sonic-frr/patch/bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch +++ b/src/sonic-frr/patch/0055-bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch @@ -6,47 +6,12 @@ Subject: [PATCH 1/5] lib: Include SID structure in seg6local nexthop Include SID structure information in seg6local nexthop data structure. Signed-off-by: Carmine Scarpitta ---- - lib/srv6.h | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/lib/srv6.h b/lib/srv6.h -index acfb0631cc..3749b01563 100644 ---- a/lib/srv6.h -+++ b/lib/srv6.h -@@ -72,6 +72,10 @@ struct seg6local_context { - struct in_addr nh4; - struct in6_addr nh6; - uint32_t table; -+ uint8_t block_len; -+ uint8_t node_len; -+ uint8_t function_len; -+ uint8_t argument_len; - }; - - struct srv6_locator { --- -2.45.2 - - -From ebea171cadaae63d89c41fdd5e4d507cf9084e42 Mon Sep 17 00:00:00 2001 -From: Carmine Scarpitta -Date: Sun, 15 Sep 2024 18:53:35 +0200 -Subject: [PATCH 2/5] bgpd: Include structure when installing End.DT4/6 SID - -Include SID structure information when installing an SRv6 End.DT6 or End.DT4 SID -in the forwarding plane. - -Signed-off-by: Carmine Scarpitta ---- - bgpd/bgp_mplsvpn.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c -index 2af553d982..b9eef35812 100644 +index 58e3097e1..ef8ca39e8 100644 --- a/bgpd/bgp_mplsvpn.c +++ b/bgpd/bgp_mplsvpn.c -@@ -393,6 +393,18 @@ void vpn_leak_zebra_vrf_sid_update_per_af(struct bgp *bgp, afi_t afi) +@@ -381,6 +381,19 @@ void vpn_leak_zebra_vrf_sid_update_per_af(struct bgp *bgp, afi_t afi) if (!vrf) return; @@ -62,31 +27,11 @@ index 2af553d982..b9eef35812 100644 + bgp->vpn_policy[afi] + .tovpn_sid_locator->argument_bits_length; + } ++ ctx.table = vrf->data.l.table_id; act = afi == AFI_IP ? ZEBRA_SEG6_LOCAL_ACTION_END_DT4 : ZEBRA_SEG6_LOCAL_ACTION_END_DT6; --- -2.45.2 - - -From f5c7cf0edc25905d357effe54ece27ed5db0ae6b Mon Sep 17 00:00:00 2001 -From: Carmine Scarpitta -Date: Sun, 15 Sep 2024 18:54:55 +0200 -Subject: [PATCH 3/5] bgpd: Include structure when installing End.DT46 SID - -Include SID structure information when installing an SRv6 End.DT46 SID -in the forwarding plane. - -Signed-off-by: Carmine Scarpitta ---- - bgpd/bgp_mplsvpn.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c -index b9eef35812..005a54ec1b 100644 ---- a/bgpd/bgp_mplsvpn.c -+++ b/bgpd/bgp_mplsvpn.c -@@ -453,6 +453,12 @@ void vpn_leak_zebra_vrf_sid_update_per_vrf(struct bgp *bgp) +@@ -432,6 +445,13 @@ void vpn_leak_zebra_vrf_sid_update_per_vrf(struct bgp *bgp) if (!vrf) return; @@ -96,31 +41,11 @@ index b9eef35812..005a54ec1b 100644 + ctx.function_len = bgp->tovpn_sid_locator->function_bits_length; + ctx.argument_len = bgp->tovpn_sid_locator->argument_bits_length; + } ++ ctx.table = vrf->data.l.table_id; act = ZEBRA_SEG6_LOCAL_ACTION_END_DT46; zclient_send_localsid(zclient, tovpn_sid, bgp->vrf_id, act, &ctx); --- -2.45.2 - - -From e2428a573321cb5909a3858008df2968b655a086 Mon Sep 17 00:00:00 2001 -From: Carmine Scarpitta -Date: Sun, 15 Sep 2024 18:56:21 +0200 -Subject: [PATCH 4/5] bgpd: Include structure when removing End.DT4/6 SID - -Include SID structure information when removing an SRv6 End.DT4 or End.DT6 SID -from the forwarding plane. - -Signed-off-by: Carmine Scarpitta ---- - bgpd/bgp_mplsvpn.c | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c -index 005a54ec1b..aba1b4febe 100644 ---- a/bgpd/bgp_mplsvpn.c -+++ b/bgpd/bgp_mplsvpn.c -@@ -495,6 +495,7 @@ void vpn_leak_zebra_vrf_sid_update(struct bgp *bgp, afi_t afi) +@@ -470,6 +490,7 @@ void vpn_leak_zebra_vrf_sid_update(struct bgp *bgp, afi_t afi) void vpn_leak_zebra_vrf_sid_withdraw_per_af(struct bgp *bgp, afi_t afi) { int debug = BGP_DEBUG(vpn, VPN_LEAK_LABEL); @@ -128,7 +53,7 @@ index 005a54ec1b..aba1b4febe 100644 if (bgp->vrf_id == VRF_UNKNOWN) { if (debug) -@@ -507,9 +508,22 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_af(struct bgp *bgp, afi_t afi) +@@ -482,9 +503,23 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_af(struct bgp *bgp, afi_t afi) zlog_debug("%s: deleting sid for vrf %s afi (id=%d)", __func__, bgp->name_pretty, bgp->vrf_id); @@ -144,37 +69,17 @@ index 005a54ec1b..aba1b4febe 100644 + bgp->vpn_policy[afi] + .tovpn_sid_locator->argument_bits_length; + } ++ zclient_send_localsid(zclient, - bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent, - bgp->vrf_id, ZEBRA_SEG6_LOCAL_ACTION_UNSPEC, NULL); -+ bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent, -+ bgp->vrf_id, ZEBRA_SEG6_LOCAL_ACTION_UNSPEC, -+ &seg6localctx); ++ bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent, ++ bgp->vrf_id, ZEBRA_SEG6_LOCAL_ACTION_UNSPEC, ++ &seg6localctx); XFREE(MTYPE_BGP_SRV6_SID, bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent); - } --- -2.45.2 - - -From 8d148b738cdf8b987a67e13979331d91337494f3 Mon Sep 17 00:00:00 2001 -From: Carmine Scarpitta -Date: Sun, 15 Sep 2024 18:56:48 +0200 -Subject: [PATCH 5/5] bgpd: Include structure when removing End.DT46 SID - -Include SID structure information when removing an SRv6 End.DT46 SID -from the forwarding plane. - -Signed-off-by: Carmine Scarpitta ---- - bgpd/bgp_mplsvpn.c | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c -index aba1b4febe..6589f3e388 100644 ---- a/bgpd/bgp_mplsvpn.c -+++ b/bgpd/bgp_mplsvpn.c -@@ -535,6 +535,7 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_af(struct bgp *bgp, afi_t afi) + bgp->vpn_policy[afi].tovpn_zebra_vrf_sid_last_sent = NULL; +@@ -497,6 +532,7 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_af(struct bgp *bgp, afi_t afi) void vpn_leak_zebra_vrf_sid_withdraw_per_vrf(struct bgp *bgp) { int debug = BGP_DEBUG(vpn, VPN_LEAK_LABEL); @@ -182,7 +87,7 @@ index aba1b4febe..6589f3e388 100644 if (bgp->vrf_id == VRF_UNKNOWN) { if (debug) -@@ -548,9 +549,18 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_vrf(struct bgp *bgp) +@@ -510,9 +546,19 @@ void vpn_leak_zebra_vrf_sid_withdraw_per_vrf(struct bgp *bgp) zlog_debug("%s: deleting sid for vrf %s (id=%d)", __func__, bgp->name_pretty, bgp->vrf_id); @@ -195,13 +100,26 @@ index aba1b4febe..6589f3e388 100644 + seg6localctx.argument_len = + bgp->tovpn_sid_locator->argument_bits_length; + } ++ zclient_send_localsid(zclient, bgp->tovpn_zebra_vrf_sid_last_sent, bgp->vrf_id, ZEBRA_SEG6_LOCAL_ACTION_UNSPEC, - NULL); + &seg6localctx); XFREE(MTYPE_BGP_SRV6_SID, bgp->tovpn_zebra_vrf_sid_last_sent); + bgp->tovpn_zebra_vrf_sid_last_sent = NULL; } +diff --git a/lib/srv6.h b/lib/srv6.h +index 433c5c14f..53f5119aa 100644 +--- a/lib/srv6.h ++++ b/lib/srv6.h +@@ -103,6 +103,10 @@ struct seg6local_context { + struct in_addr nh4; + struct in6_addr nh6; + uint32_t table; ++ uint8_t block_len; ++ uint8_t node_len; ++ uint8_t function_len; ++ uint8_t argument_len; + struct seg6local_flavors_info flv; + }; --- -2.45.2 - diff --git a/src/sonic-frr/patch/0056-zebra-do-not-send-local-routes-to-fpm.patch b/src/sonic-frr/patch/0056-zebra-do-not-send-local-routes-to-fpm.patch new file mode 100644 index 000000000000..85f98f58ea41 --- /dev/null +++ b/src/sonic-frr/patch/0056-zebra-do-not-send-local-routes-to-fpm.patch @@ -0,0 +1,80 @@ +From 94d88c9e9155756fce152141e0d0d86e64a6981d Mon Sep 17 00:00:00 2001 +From: sudhanshukumar22 +Date: Mon, 25 Nov 2024 01:32:36 -0800 +Subject: [PATCH] https://github.com/FRRouting/frr/pull/12600, we are now + installing a new host route for every connected route (along with the subnet + route). However, the orchagent already installs a host route for a connected + interface address. Hence, not sending the connected host route to the FPM. + +--- + zebra/connected.c | 4 ++-- + zebra/zebra_rib.c | 16 ++++++++++++++-- + 2 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/zebra/connected.c b/zebra/connected.c +index 404f892f6..2c698bed1 100644 +--- a/zebra/connected.c ++++ b/zebra/connected.c +@@ -191,7 +191,7 @@ void connected_up(struct interface *ifp, struct connected *ifc) + uint32_t flags = 0; + uint32_t count = 0; + struct connected *c; +- bool install_local = true; ++ bool install_local = false; + + zvrf = ifp->vrf->info; + if (!zvrf) { +@@ -394,7 +394,7 @@ void connected_down(struct interface *ifp, struct connected *ifc) + struct zebra_vrf *zvrf; + uint32_t count = 0; + struct connected *c; +- bool remove_local = true; ++ bool remove_local = false; + + zvrf = ifp->vrf->info; + if (!zvrf) { +diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c +index 5b95d8668..b0921f657 100644 +--- a/zebra/zebra_rib.c ++++ b/zebra/zebra_rib.c +@@ -701,6 +701,12 @@ void rib_install_kernel(struct route_node *rn, struct route_entry *re, + /* Update fib selection */ + dest->selected_fib = re; + ++ /* Do not install local routes to FIB */ ++ if (re->type == ZEBRA_ROUTE_LOCAL) { ++ zlog_debug("Not installing local route re %p (%s)", ++ re, zebra_route_string(re->type)); ++ return; ++ } + /* + * Make sure we update the FPM any time we send new information to + * the kernel. +@@ -762,6 +768,12 @@ void rib_uninstall_kernel(struct route_node *rn, struct route_entry *re) + return; + } + ++ /* Do not uninstall local routes to FIB */ ++ if (re->type == ZEBRA_ROUTE_LOCAL) { ++ zlog_debug("Not uninstalling local route re %p (%s)", ++ re, zebra_route_string(re->type)); ++ return; ++ } + /* + * Make sure we update the FPM any time we send new information to + * the dataplane. +@@ -1196,9 +1208,9 @@ static struct route_entry *rib_choose_best(struct route_entry *current, + * or loopback interface. If not, pick the last connected + * route of the set of lowest metric connected routes. + */ +- possible = rib_choose_best_type(ZEBRA_ROUTE_LOCAL, current, alternate); ++ /*possible = rib_choose_best_type(ZEBRA_ROUTE_LOCAL, current, alternate); + if (possible) +- return possible; ++ return possible; */ + + possible = rib_choose_best_type(ZEBRA_ROUTE_CONNECT, current, alternate); + if (possible) +-- +2.39.4 + diff --git a/src/sonic-frr/patch/0057-Adding-changes-to-write-ip-nht-resolve-via-default-c.patch b/src/sonic-frr/patch/0057-Adding-changes-to-write-ip-nht-resolve-via-default-c.patch new file mode 100644 index 000000000000..1e832b803e78 --- /dev/null +++ b/src/sonic-frr/patch/0057-Adding-changes-to-write-ip-nht-resolve-via-default-c.patch @@ -0,0 +1,85 @@ +From 274386fbefc83dc4f2f3184637db3c973f8200b6 Mon Sep 17 00:00:00 2001 +From: sudhanshukumar22 +Date: Wed, 13 Nov 2024 23:12:22 -0800 +Subject: [PATCH] Adding changes to write ip nht resolve-via-default + configuration for VRF in zebra + +--- + zebra/zebra_vrf.c | 34 +++++++++++++++++++++++++++++++++++ + zebra/zebra_vrf.h | 1 + + zebra/zebra_vty.c | 2 ++ + 3 files changed, 37 insertions(+) + +diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c +index e464e47b1..ae8624a5e 100644 +--- a/zebra/zebra_vrf.c ++++ b/zebra/zebra_vrf.c +@@ -541,6 +541,40 @@ int zebra_vrf_netns_handler_create(struct vty *vty, struct vrf *vrf, + return CMD_SUCCESS; + } + ++void zebra_vrf_config_write(struct vty *vty) ++{ ++ struct vrf *vrf; ++ struct zebra_vrf *zvrf; ++ ++ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) { ++ zvrf = vrf->info; ++ ++ if (!zvrf) ++ continue; ++ ++ if (zvrf_id(zvrf) == VRF_DEFAULT) { ++ if (zvrf->zebra_rnh_ip_default_route) ++ vty_out(vty, "ip nht resolve-via-default\n"); ++ ++ if (zvrf->zebra_rnh_ipv6_default_route) ++ vty_out(vty, "ipv6 nht resolve-via-default\n"); ++ } else { ++ vty_frame(vty, "vrf %s\n", zvrf_name(zvrf)); ++ if (zvrf->zebra_rnh_ip_default_route) ++ vty_out(vty, " ip nht resolve-via-default\n"); ++ ++ if (zvrf->zebra_rnh_ipv6_default_route) ++ vty_out(vty, " ipv6 nht resolve-via-default\n"); ++ } ++ if (zvrf_id(zvrf) != VRF_DEFAULT) ++ vty_endframe(vty, "exit-vrf\n!\n"); ++ else ++ vty_out(vty, "!\n"); ++ } ++ return 0; ++ ++} ++ + /* Zebra VRF initialization. */ + void zebra_vrf_init(void) + { +diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h +index 5cbfab1dd..36f42a3db 100644 +--- a/zebra/zebra_vrf.h ++++ b/zebra/zebra_vrf.h +@@ -246,6 +246,7 @@ extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *); + extern vrf_id_t zebra_vrf_lookup_by_table(uint32_t table_id, ns_id_t ns_id); + extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf); + extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t); ++extern void zebra_vrf_config_write(struct vty *vty); + + /* + * API to associate a VRF with a NETNS. +diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c +index 9a68d5ae9..ce772b818 100644 +--- a/zebra/zebra_vty.c ++++ b/zebra/zebra_vty.c +@@ -3809,6 +3809,8 @@ static int config_write_protocol(struct vty *vty) + + zebra_pbr_config_write(vty); + ++ zebra_vrf_config_write(vty); ++ + if (!zebra_vxlan_get_accept_bgp_seq()) + vty_out(vty, "no evpn accept-bgp-seq\n"); + +-- +2.39.4 + diff --git a/src/sonic-frr/patch/0058-When-the-file-is-config-replayed-we-cannot-handle-th.patch b/src/sonic-frr/patch/0058-When-the-file-is-config-replayed-we-cannot-handle-th.patch new file mode 100644 index 000000000000..a952c0a609b3 --- /dev/null +++ b/src/sonic-frr/patch/0058-When-the-file-is-config-replayed-we-cannot-handle-th.patch @@ -0,0 +1,71 @@ +From 83714071c68c588c66972fc0fe0f5f2a57a7dd55 Mon Sep 17 00:00:00 2001 +From: sudhanshukumar22 +Date: Thu, 21 Nov 2024 20:57:11 -0800 +Subject: [PATCH] When the file is config replayed, we cannot handle the errors + in command execution. We would let all commands in the file to complete, + irrespective of some of them failing. Also, certain protocols like RIP, RIPng + are not supported in SONIC. So, it is expected that their configuration files + will not be present. + +--- + lib/vty.c | 16 +++++++++++++--- + mgmtd/mgmt_be_adapter.c | 2 +- + 2 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/lib/vty.c b/lib/vty.c +index 1c9cff478..017e0c7c4 100644 +--- a/lib/vty.c ++++ b/lib/vty.c +@@ -2654,7 +2654,9 @@ void vty_read_file_finish(struct vty *vty, struct nb_config *config) + nl = strchr(ve->error_buf, '\n'); + if (nl) + *nl = '\0'; +- flog_err(EC_LIB_VTY, "%s on config line %u: %s", message, ++ /* When the file is config replayed, we cannot handle the errors in command execution. ++ We would let all commands in the file to complete, irrespective of some of them failing. */ ++ flog_warn(EC_LIB_VTY, "%s on config line %u: %s", message, + ve->line_num, ve->error_buf); + } + +@@ -2773,7 +2775,11 @@ FILE *vty_open_config(const char *config_file, char *config_default_dir) + flog_warn(EC_LIB_BACKUP_CONFIG, + "using backup configuration file!"); + else { +- flog_err( ++ /* There are few protocols e.g. RIP, RIPng, which are ununsed in SONIC. ++ So, there will not be any config file for them. ++ Flagging error, will be considered a breakage by loganalyzer, whereas ++ it is valid for these protocol config file to be not present. */ ++ flog_warn( + EC_LIB_VTY, + "%s: can't open configuration file [%s]", + __func__, config_file); +@@ -2822,7 +2828,11 @@ FILE *vty_open_config(const char *config_file, char *config_default_dir) + "using backup configuration file!"); + fullpath = config_default_dir; + } else { +- flog_err(EC_LIB_VTY, ++ /* There are few protocols e.g. RIP, RIPng, which are ununsed in SONIC. ++ So, there will not be any config file for them. ++ Flagging error, will be considered a breakage by loganalyzer, whereas ++ it is valid for these protocol config file to be not present. */ ++ flog_warn(EC_LIB_VTY, + "can't open configuration file [%s]", + config_default_dir); + goto tmp_free_and_out; +diff --git a/mgmtd/mgmt_be_adapter.c b/mgmtd/mgmt_be_adapter.c +index b311bf469..58f866115 100644 +--- a/mgmtd/mgmt_be_adapter.c ++++ b/mgmtd/mgmt_be_adapter.c +@@ -732,7 +732,7 @@ static void mgmt_be_adapter_conn_init(struct event *thread) + * transaction in progress. + */ + if (mgmt_txn_notify_be_adapter_conn(adapter, true) != 0) { +- zlog_err("XXX txn in progress, retry init"); ++ zlog_warn("XXX txn in progress, retry init"); + mgmt_be_adapter_sched_init_event(adapter); + return; + } +-- +2.39.4 + diff --git a/src/sonic-frr/patch/0059-Fix-BGP-reset-on-suppress-fib-pending-configuration.patch b/src/sonic-frr/patch/0059-Fix-BGP-reset-on-suppress-fib-pending-configuration.patch new file mode 100644 index 000000000000..9d3962f55183 --- /dev/null +++ b/src/sonic-frr/patch/0059-Fix-BGP-reset-on-suppress-fib-pending-configuration.patch @@ -0,0 +1,32 @@ +From 8f6adef67c93d04a9eefa1404db0c8de9877fb38 Mon Sep 17 00:00:00 2001 +From: sudhanshukumar22 +Date: Tue, 26 Nov 2024 00:40:46 -0800 +Subject: [PATCH] Pull request: https://github.com/FRRouting/frr/pull/17487 + bgpd: Do not reset peers on suppress-fib toggling If the desired state is the + same - do nothing instead of resetting once again. + +Fixes: bdb5ae8 (bgpd: Make suppress-fib-pending clear peering) + +Signed-off-by: Donatas Abraitis +--- + bgpd/bgpd.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index d6d874be2..0b2bf821e 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -461,6 +461,10 @@ void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set) + if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW) + return; + ++ /* Do nothing if already in a desired state */ ++ if (set == !!CHECK_FLAG(bgp->flags, BGP_FLAG_SUPPRESS_FIB_PENDING)) ++ return; ++ + if (set) { + SET_FLAG(bgp->flags, BGP_FLAG_SUPPRESS_FIB_PENDING); + /* Send msg to zebra for the first instance of bgp enabled +-- +2.39.4 + diff --git a/src/sonic-frr/patch/0060-bgpd-Validate-both-nexthop-information-NEXTHOP-and-N.patch b/src/sonic-frr/patch/0060-bgpd-Validate-both-nexthop-information-NEXTHOP-and-N.patch new file mode 100644 index 000000000000..c1088df457b9 --- /dev/null +++ b/src/sonic-frr/patch/0060-bgpd-Validate-both-nexthop-information-NEXTHOP-and-N.patch @@ -0,0 +1,106 @@ +From 4e3f27fec6a3b4c0b853ad30f73bf0d34003e23f Mon Sep 17 00:00:00 2001 +From: sk408845 +Date: Tue, 26 Nov 2024 07:33:58 +0000 +Subject: [PATCH] Port https://github.com/FRRouting/frr/pull/17435/ bgpd: + Validate both nexthop information (NEXTHOP and NLRI) If we receive an IPv6 + prefix e.g.: 2001:db8:100::/64 with nextop: 0.0.0.0, and mp_nexthop: fc00::2, + we should not treat this with an invalid nexthop because of 0.0.0.0. We MUST + check for MP_REACH attribute also and decide later if we have at least one a + valid nexthop. + +Signed-off-by: Donatas Abraitis +--- + bgpd/bgp_route.c | 50 ++++++++++++++++++++++-------------------------- + 1 file changed, 23 insertions(+), 27 deletions(-) + +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index 26089e326..e05507c52 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -4032,7 +4032,7 @@ bool bgp_update_martian_nexthop(struct bgp *bgp, afi_t afi, safi_t safi, + uint8_t type, uint8_t stype, struct attr *attr, + struct bgp_dest *dest) + { +- bool ret = false; ++ bool nh_invalid = false; + bool is_bgp_static_route = + (type == ZEBRA_ROUTE_BGP && stype == BGP_ROUTE_STATIC) ? true + : false; +@@ -4054,12 +4054,16 @@ bool bgp_update_martian_nexthop(struct bgp *bgp, afi_t afi, safi_t safi, + (safi != SAFI_UNICAST && safi != SAFI_MULTICAST && safi != SAFI_EVPN)) + return false; + +- /* If NEXT_HOP is present, validate it. */ +- if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP)) { +- if (!ipv4_unicast_valid(&attr->nexthop) || +- bgp_nexthop_self(bgp, afi, type, stype, attr, dest)) +- return true; +- } ++ /* If NEXT_HOP is present, validate it: ++ * The route can have both nexthop + mp_nexthop encoded as multiple NLRIs, ++ * and we MUST check if at least one of them is valid. ++ * E.g.: IPv6 prefix can be with nexthop: 0.0.0.0, and mp_nexthop: fc00::1. ++ */ ++ if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP))) ++ nh_invalid = (attr->nexthop.s_addr == INADDR_ANY || ++ !ipv4_unicast_valid(&attr->nexthop) || ++ bgp_nexthop_self(bgp, afi, type, stype, attr, dest)); ++ + + /* If MP_NEXTHOP is present, validate it. */ + /* Note: For IPv6 nexthops, we only validate the global (1st) nexthop; +@@ -4074,39 +4078,31 @@ bool bgp_update_martian_nexthop(struct bgp *bgp, afi_t afi, safi_t safi, + switch (attr->mp_nexthop_len) { + case BGP_ATTR_NHLEN_IPV4: + case BGP_ATTR_NHLEN_VPNV4: +- ret = (attr->mp_nexthop_global_in.s_addr == +- INADDR_ANY || +- !ipv4_unicast_valid( +- &attr->mp_nexthop_global_in) || +- bgp_nexthop_self(bgp, afi, type, stype, attr, +- dest)); ++ nh_invalid = (attr->mp_nexthop_global_in.s_addr == INADDR_ANY || ++ !ipv4_unicast_valid(&attr->mp_nexthop_global_in) || ++ bgp_nexthop_self(bgp, afi, type, stype, attr, dest)); + break; + + case BGP_ATTR_NHLEN_IPV6_GLOBAL: + case BGP_ATTR_NHLEN_VPNV6_GLOBAL: +- ret = (IN6_IS_ADDR_UNSPECIFIED( +- &attr->mp_nexthop_global) +- || IN6_IS_ADDR_LOOPBACK(&attr->mp_nexthop_global) +- || IN6_IS_ADDR_MULTICAST( +- &attr->mp_nexthop_global) +- || bgp_nexthop_self(bgp, afi, type, stype, attr, +- dest)); ++ nh_invalid = (IN6_IS_ADDR_UNSPECIFIED(&attr->mp_nexthop_global) || ++ IN6_IS_ADDR_LOOPBACK(&attr->mp_nexthop_global) || ++ IN6_IS_ADDR_MULTICAST(&attr->mp_nexthop_global) || ++ bgp_nexthop_self(bgp, afi, type, stype, attr, dest)); + break; + case BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL: +- ret = (IN6_IS_ADDR_LOOPBACK(&attr->mp_nexthop_global) +- || IN6_IS_ADDR_MULTICAST( +- &attr->mp_nexthop_global) +- || bgp_nexthop_self(bgp, afi, type, stype, attr, +- dest)); ++ nh_invalid = (IN6_IS_ADDR_LOOPBACK(&attr->mp_nexthop_global) || ++ IN6_IS_ADDR_MULTICAST(&attr->mp_nexthop_global) || ++ bgp_nexthop_self(bgp, afi, type, stype, attr, dest)); + break; + + default: +- ret = true; ++ nh_invalid = true; + break; + } + } + +- return ret; ++ return nh_invalid; + } + + static void bgp_attr_add_no_export_community(struct attr *attr) +-- +2.20.1 + diff --git a/src/sonic-frr/patch/0061-Set-multipath-to-514-and-disable-bgp-vnc-for-optimiz.patch b/src/sonic-frr/patch/0061-Set-multipath-to-514-and-disable-bgp-vnc-for-optimiz.patch new file mode 100644 index 000000000000..63bbf717025d --- /dev/null +++ b/src/sonic-frr/patch/0061-Set-multipath-to-514-and-disable-bgp-vnc-for-optimiz.patch @@ -0,0 +1,23 @@ +From 501f267ec4c7359fc518ba31c5d63045c935045c Mon Sep 17 00:00:00 2001 +From: dgsudharsan +Date: Wed, 4 Dec 2024 20:39:46 +0000 +Subject: [PATCH] Set multipath to 514 and disable bgp-vnc for optimization + + +diff --git a/debian/rules b/debian/rules +index 5a8199afb7..3d762e6df1 100755 +--- a/debian/rules ++++ b/debian/rules +@@ -66,8 +66,7 @@ override_dh_auto_configure: + --disable-protobuf \ + --disable-zeromq \ + --enable-ospfapi \ +- --enable-bgp-vnc \ +- --enable-multipath=256 \ ++ --enable-multipath=514 \ + \ + --enable-user=frr \ + --enable-group=frr \ +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0062-zebra-lib-use-internal-rbtree-per-ns.patch b/src/sonic-frr/patch/0062-zebra-lib-use-internal-rbtree-per-ns.patch new file mode 100644 index 000000000000..4fb56f6094f5 --- /dev/null +++ b/src/sonic-frr/patch/0062-zebra-lib-use-internal-rbtree-per-ns.patch @@ -0,0 +1,1826 @@ +From a4eb079b5d87dbc6720ac9788ad3bec5a25aa519 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Tue, 15 Oct 2024 11:31:22 -0400 +Subject: [PATCH 1/9] zebra: make a zif MTYPE internal/static + +Make an MTYPE used in zifs internal/static + +Signed-off-by: Mark Stapp +--- + zebra/interface.c | 2 +- + zebra/interface.h | 3 --- + 2 files changed, 1 insertion(+), 4 deletions(-) + +diff --git a/zebra/interface.c b/zebra/interface.c +index 5ce222cc04..bbdc62c1c2 100644 +--- a/zebra/interface.c ++++ b/zebra/interface.c +@@ -44,7 +44,7 @@ DEFINE_MTYPE_STATIC(ZEBRA, ZINFO, "Zebra Interface Information"); + DEFINE_HOOK(zebra_if_extra_info, (struct vty * vty, struct interface *ifp), + (vty, ifp)); + +-DEFINE_MTYPE(ZEBRA, ZIF_DESC, "Intf desc"); ++DEFINE_MTYPE_STATIC(ZEBRA, ZIF_DESC, "Intf desc"); + + static void if_down_del_nbr_connected(struct interface *ifp); + +diff --git a/zebra/interface.h b/zebra/interface.h +index 7d633f32d2..4cbec83cce 100644 +--- a/zebra/interface.h ++++ b/zebra/interface.h +@@ -94,9 +94,6 @@ enum zebra_if_flags { + #define ZEBRA_IF_IS_PROTODOWN_ONLY_EXTERNAL(zif) \ + ((zif)->protodown_rc == ZEBRA_PROTODOWN_EXTERNAL) + +-/* Mem type for zif desc */ +-DECLARE_MTYPE(ZIF_DESC); +- + /* `zebra' daemon local interface structure. */ + struct zebra_if { + /* back pointer to the interface */ +-- +2.43.2 + + +From ccc18a117a74b3d7caec9db926b0d52e9180ef13 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Tue, 22 Oct 2024 15:20:54 -0700 +Subject: [PATCH 2/9] zebra: add new per-NS tree of interfaces + +Add new per-NS interface typerb tree, using external linkage, to +replace the use of the if_table table. +Add apis to iterate the per-NS collection - which is not public. + +Signed-off-by: Mark Stapp +--- + zebra/zebra_ns.c | 188 +++++++++++++++++++++++++++++++++++++++++++++++ + zebra/zebra_ns.h | 34 +++++++++ + 2 files changed, 222 insertions(+) + +diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c +index 803d8f0034..c6b279a9d7 100644 +--- a/zebra/zebra_ns.c ++++ b/zebra/zebra_ns.c +@@ -28,9 +28,185 @@ + extern struct zebra_privs_t zserv_privs; + + DEFINE_MTYPE_STATIC(ZEBRA, ZEBRA_NS, "Zebra Name Space"); ++DEFINE_MTYPE_STATIC(ZEBRA, ZNS_IFP, "Zebra NS Ifp"); ++ ++static int ifp_tree_cmp(const struct ifp_tree_link *a, const struct ifp_tree_link *b); ++ ++DECLARE_RBTREE_UNIQ(ifp_tree, struct ifp_tree_link, link, ifp_tree_cmp); + + static struct zebra_ns *dzns; + ++static int ifp_tree_cmp(const struct ifp_tree_link *a, const struct ifp_tree_link *b) ++{ ++ return (a->ifindex - b->ifindex); ++} ++ ++/* ++ * Link an ifp into its parent NS ++ */ ++void zebra_ns_link_ifp(struct zebra_ns *zns, struct interface *ifp) ++{ ++ struct zebra_if *zif; ++ struct ifp_tree_link *link, tlink = {}; ++ ++ zif = ifp->info; ++ assert(zif != NULL); ++ ++ if (zif->ns_tree_link) { ++ assert(zif->ns_tree_link->zns == zns); ++ assert(zif->ns_tree_link->ifp == ifp); ++ return; ++ } ++ ++ /* Lookup first - already linked? */ ++ tlink.ifindex = ifp->ifindex; ++ link = ifp_tree_find(&zns->ifp_tree, &tlink); ++ if (link) { ++ assert(link->ifp == ifp); ++ return; ++ } ++ ++ /* Allocate new linkage struct and add */ ++ link = XCALLOC(MTYPE_ZNS_IFP, sizeof(struct ifp_tree_link)); ++ link->ifp = ifp; ++ link->ifindex = ifp->ifindex; ++ link->zns = zns; ++ ++ ifp_tree_add(&zns->ifp_tree, link); ++ ++ zif->ns_tree_link = link; ++} ++ ++/* ++ * Unlink an ifp from its parent NS (probably because the ifp is being deleted) ++ */ ++void zebra_ns_unlink_ifp(struct interface *ifp) ++{ ++ struct zebra_if *zif; ++ struct ifp_tree_link *link; ++ struct zebra_ns *zns; ++ ++ zif = ifp->info; ++ if (zif && zif->ns_tree_link) { ++ link = zif->ns_tree_link; ++ zns = link->zns; ++ ++ ifp_tree_del(&zns->ifp_tree, link); ++ ++ zif->ns_tree_link = NULL; ++ ++ XFREE(MTYPE_ZNS_IFP, link); ++ } ++} ++ ++/* ++ * ifp lookup apis ++ */ ++struct interface *zebra_ns_lookup_ifp(struct zebra_ns *zns, uint32_t ifindex) ++{ ++ struct interface *ifp = NULL; ++ struct ifp_tree_link *link, tlink = {}; ++ ++ /* Init temp struct for lookup */ ++ tlink.ifindex = ifindex; ++ ++ link = ifp_tree_find(&zns->ifp_tree, &tlink); ++ if (link) ++ ifp = link->ifp; ++ ++ return ifp; ++} ++ ++static int lookup_ifp_name_cb(struct interface *ifp, void *arg); ++ ++struct ifp_name_ctx { ++ const char *ifname; ++ struct interface *ifp; ++}; ++ ++struct interface *zebra_ns_lookup_ifp_name(struct zebra_ns *zns, const char *ifname) ++{ ++ struct ifp_name_ctx ctx = {}; ++ ++ /* Hand context struct into walker function for use in its callback */ ++ ctx.ifname = ifname; ++ zebra_ns_ifp_walk(zns, lookup_ifp_name_cb, &ctx); ++ ++ return ctx.ifp; ++} ++ ++static int lookup_ifp_name_cb(struct interface *ifp, void *arg) ++{ ++ struct ifp_name_ctx *pctx = arg; ++ ++ if (strcmp(ifp->name, pctx->ifname) == 0) { ++ pctx->ifp = ifp; ++ return NS_WALK_STOP; ++ } ++ ++ return NS_WALK_CONTINUE; ++} ++ ++/* Iterate collection of ifps, calling application's callback. Callback uses ++ * return semantics from lib/ns.h: return NS_WALK_STOP to stop the iteration. ++ * Caller's 'arg' is included in each callback. ++ */ ++int zebra_ns_ifp_walk(struct zebra_ns *zns, ++ int (*func)(struct interface *ifp, void *arg), void *arg) ++{ ++ struct ifp_tree_link *link; ++ int ret = NS_WALK_CONTINUE; ++ ++ frr_each (ifp_tree, &zns->ifp_tree, link) { ++ ret = (func)(link->ifp, arg); ++ if (ret == NS_WALK_STOP) ++ break; ++ } ++ ++ if (ret == NS_WALK_STOP) ++ return NS_WALK_STOP; ++ else ++ return NS_WALK_CONTINUE; ++} ++ ++/* ++ * Walk all NSes, and all ifps for each NS. ++ */ ++struct ns_ifp_walk_ctx { ++ int (*func)(struct interface *ifp, void *arg); ++ void *arg; ++ int ret; ++}; ++ ++static int ns_ifp_walker(struct ns *ns, void *in_param, void **unused); ++ ++void zebra_ns_ifp_walk_all(int (*func)(struct interface *ifp, void *arg), void *arg) ++{ ++ struct ns_ifp_walk_ctx ctx = {}; ++ ++ ctx.func = func; ++ ctx.arg = arg; ++ ++ ns_walk_func(ns_ifp_walker, &ctx, NULL); ++} ++ ++static int ns_ifp_walker(struct ns *ns, void *in_param, void **unused) ++{ ++ struct zebra_ns *zns; ++ struct ns_ifp_walk_ctx *ctx = in_param; ++ int ret = NS_WALK_CONTINUE; ++ ++ zns = ns->info; ++ if (zns == NULL) ++ goto done; ++ ++ ret = zebra_ns_ifp_walk(zns, ctx->func, ctx->arg); ++ ++done: ++ ++ return ret; ++} ++ + static int zebra_ns_disable_internal(struct zebra_ns *zns, bool complete); + + struct zebra_ns *zebra_ns_lookup(ns_id_t ns_id) +@@ -59,6 +235,7 @@ static int zebra_ns_new(struct ns *ns) + + /* Do any needed per-NS data structure allocation. */ + zns->if_table = route_table_init(); ++ ifp_tree_init(&zns->ifp_tree); + + return 0; + } +@@ -66,11 +243,22 @@ static int zebra_ns_new(struct ns *ns) + static int zebra_ns_delete(struct ns *ns) + { + struct zebra_ns *zns = (struct zebra_ns *)ns->info; ++ struct zebra_if *zif; ++ struct ifp_tree_link *link; + + if (IS_ZEBRA_DEBUG_EVENT) + zlog_info("ZNS %s with id %u (deleted)", ns->name, ns->ns_id); + if (!zns) + return 0; ++ ++ /* Clean up ifp tree */ ++ while ((link = ifp_tree_pop(&zns->ifp_tree)) != NULL) { ++ zif = link->ifp->info; ++ ++ zif->ns_tree_link = NULL; ++ XFREE(MTYPE_ZNS_IFP, link); ++ } ++ + XFREE(MTYPE_ZEBRA_NS, ns->info); + return 0; + } +diff --git a/zebra/zebra_ns.h b/zebra/zebra_ns.h +index 8d988c3f82..1ddecc8252 100644 +--- a/zebra/zebra_ns.h ++++ b/zebra/zebra_ns.h +@@ -32,6 +32,20 @@ struct nlsock { + }; + #endif + ++/* Tree of interfaces: external linkage struct, and rbtree */ ++PREDECL_RBTREE_UNIQ(ifp_tree); ++ ++struct ifp_tree_link { ++ struct ifp_tree_item link; ++ ++ ifindex_t ifindex; ++ ++ struct interface *ifp; ++ ++ /* Backpointer */ ++ struct zebra_ns *zns; ++}; ++ + struct zebra_ns { + /* net-ns name. */ + char name[VRF_NAMSIZ]; +@@ -55,12 +69,32 @@ struct zebra_ns { + + struct route_table *if_table; + ++ /* Tree of interfaces in this ns */ ++ struct ifp_tree_head ifp_tree; ++ + /* Back pointer */ + struct ns *ns; + }; + + struct zebra_ns *zebra_ns_lookup(ns_id_t ns_id); + ++/* Manage collection of ifps per-NS */ ++void zebra_ns_link_ifp(struct zebra_ns *zns, struct interface *ifp); ++void zebra_ns_unlink_ifp(struct interface *ifp); ++struct interface *zebra_ns_lookup_ifp(struct zebra_ns *zns, uint32_t ifindex); ++struct interface *zebra_ns_lookup_ifp_name(struct zebra_ns *zns, const char *ifname); ++ ++/* Iterate collection of ifps, calling application's callback. Callback uses ++ * return semantics from lib/ns.h: return NS_WALK_STOP to stop the iteration. ++ * Caller's 'arg' is included in each callback. ++ * The iterator returns STOP or CONTINUE also. ++ */ ++int zebra_ns_ifp_walk(struct zebra_ns *zns, ++ int (*func)(struct interface *ifp, void *arg), void *arg); ++ ++/* Walk all NSes, and all ifps for each NS. */ ++void zebra_ns_ifp_walk_all(int (*func)(struct interface *ifp, void *arg), void *arg); ++ + int zebra_ns_init(void); + int zebra_ns_enable(ns_id_t ns_id, void **info); + int zebra_ns_disabled(struct ns *ns); +-- +2.43.2 + + +From 24957f224f8a9918e451d152917feb5cf5ce0d2f Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Tue, 22 Oct 2024 15:23:17 -0700 +Subject: [PATCH 3/9] zebra: use new per-NS interface iteration + +Replace use of the old if_table with the new per-NS ifp +iteration apis. + +Signed-off-by: Mark Stapp +--- + zebra/if_netlink.c | 61 +++++++++++++++++++++++++++++++--------------- + 1 file changed, 41 insertions(+), 20 deletions(-) + +diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c +index 5f096e3039..f7567f06d0 100644 +--- a/zebra/if_netlink.c ++++ b/zebra/if_netlink.c +@@ -1775,6 +1775,15 @@ static int netlink_request_tunneldump(struct zebra_ns *zns, int family, + return netlink_request(&zns->netlink_cmd, &req); + } + ++/* Prototype for tunneldump walker */ ++static int tunneldump_walk_cb(struct interface *ifp, void *arg); ++ ++struct tunneldump_ctx { ++ struct zebra_ns *zns; ++ struct zebra_dplane_info *dp_info; ++ int ret; ++}; ++ + /* + * Currently we only ask for vxlan l3svd vni information. + * In the future this can be expanded. +@@ -1782,35 +1791,47 @@ static int netlink_request_tunneldump(struct zebra_ns *zns, int family, + int netlink_tunneldump_read(struct zebra_ns *zns) + { + int ret = 0; ++ struct tunneldump_ctx ctx = {}; + struct zebra_dplane_info dp_info; +- struct route_node *rn; +- struct interface *tmp_if = NULL; +- struct zebra_if *zif; +- struct nlsock *netlink_cmd = &zns->netlink_cmd; + + zebra_dplane_info_from_zns(&dp_info, zns, true /*is_cmd*/); + +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- if (!tmp_if) +- continue; +- zif = tmp_if->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; ++ /* Set up context and call iterator */ ++ ctx.zns = zns; ++ ctx.dp_info = &dp_info; + +- ret = netlink_request_tunneldump(zns, PF_BRIDGE, +- tmp_if->ifindex); +- if (ret < 0) +- return ret; ++ zebra_ns_ifp_walk(zns, tunneldump_walk_cb, &ctx); ++ ret = ctx.ret; + +- ret = netlink_parse_info(netlink_link_change, netlink_cmd, +- &dp_info, 0, true); ++ return ret; ++} + +- if (ret < 0) +- return ret; ++static int tunneldump_walk_cb(struct interface *ifp, void *arg) ++{ ++ int ret; ++ struct tunneldump_ctx *ctx = arg; ++ struct zebra_if *zif; ++ ++ zif = ifp->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; ++ ++ ret = netlink_request_tunneldump(ctx->zns, PF_BRIDGE, ifp->ifindex); ++ if (ret < 0) { ++ ctx->ret = ret; ++ return NS_WALK_STOP; + } + +- return 0; ++ ret = netlink_parse_info(netlink_link_change, &(ctx->zns->netlink_cmd), ++ ctx->dp_info, 0, true); ++ ++ if (ret < 0) { ++ ctx->ret = ret; ++ return NS_WALK_STOP; ++ } ++ ++done: ++ return NS_WALK_CONTINUE; + } + + static const char *port_state2str(uint8_t state) +-- +2.43.2 + + +From 8504e1119d084deef326a72f930873e6f7d921a6 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Tue, 22 Oct 2024 15:56:11 -0700 +Subject: [PATCH 4/9] isisd: add include file + +Add an include to an isis header so it's self-contained. + +Signed-off-by: Mark Stapp +--- + isisd/isis_route.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/isisd/isis_route.h b/isisd/isis_route.h +index 4d49a5ae9c..d9572336af 100644 +--- a/isisd/isis_route.h ++++ b/isisd/isis_route.h +@@ -12,6 +12,7 @@ + #ifndef _ZEBRA_ISIS_ROUTE_H + #define _ZEBRA_ISIS_ROUTE_H + ++#include "lib/table.h" + #include "lib/nexthop.h" + + struct isis_nexthop { +-- +2.43.2 + + +From eb75106d9a0e5bc689f914e5ff9ebd3528fd3b7a Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Tue, 22 Oct 2024 15:57:53 -0700 +Subject: [PATCH 5/9] zebra: removing use of per-NS if_table + +Remove use of the per-NS if_table from zebra/interface +module. Use new add, lookup, and iteration apis. + +Signed-off-by: Mark Stapp +--- + zebra/interface.c | 144 +++++++++++++++------------------------------- + zebra/interface.h | 5 +- + 2 files changed, 49 insertions(+), 100 deletions(-) + +diff --git a/zebra/interface.c b/zebra/interface.c +index bbdc62c1c2..7ec80cb259 100644 +--- a/zebra/interface.c ++++ b/zebra/interface.c +@@ -233,62 +233,14 @@ static int if_zebra_delete_hook(struct interface *ifp) + return 0; + } + +-/* Build the table key */ +-static void if_build_key(uint32_t ifindex, struct prefix *p) +-{ +- p->family = AF_INET; +- p->prefixlen = IPV4_MAX_BITLEN; +- p->u.prefix4.s_addr = ifindex; +-} +- +-/* Link an interface in a per NS interface tree */ +-struct interface *if_link_per_ns(struct zebra_ns *ns, struct interface *ifp) +-{ +- struct prefix p; +- struct route_node *rn; +- +- if (ifp->ifindex == IFINDEX_INTERNAL) +- return NULL; +- +- if_build_key(ifp->ifindex, &p); +- rn = route_node_get(ns->if_table, &p); +- if (rn->info) { +- ifp = (struct interface *)rn->info; +- route_unlock_node(rn); /* get */ +- return ifp; +- } +- +- rn->info = ifp; +- ifp->node = rn; +- +- return ifp; +-} +- +-/* Delete a VRF. This is called in vrf_terminate(). */ +-void if_unlink_per_ns(struct interface *ifp) +-{ +- if (!ifp->node) +- return; +- +- ifp->node->info = NULL; +- route_unlock_node(ifp->node); +- ifp->node = NULL; +-} +- + /* Look up an interface by identifier within a NS */ + struct interface *if_lookup_by_index_per_ns(struct zebra_ns *ns, + uint32_t ifindex) + { +- struct prefix p; +- struct route_node *rn; + struct interface *ifp = NULL; + +- if_build_key(ifindex, &p); +- rn = route_node_lookup(ns->if_table, &p); +- if (rn) { +- ifp = (struct interface *)rn->info; +- route_unlock_node(rn); /* lookup */ +- } ++ ifp = zebra_ns_lookup_ifp(ns, ifindex); ++ + return ifp; + } + +@@ -296,18 +248,11 @@ struct interface *if_lookup_by_index_per_ns(struct zebra_ns *ns, + struct interface *if_lookup_by_name_per_ns(struct zebra_ns *ns, + const char *ifname) + { +- struct route_node *rn; + struct interface *ifp; + +- for (rn = route_top(ns->if_table); rn; rn = route_next(rn)) { +- ifp = (struct interface *)rn->info; +- if (ifp && strcmp(ifp->name, ifname) == 0) { +- route_unlock_node(rn); +- return (ifp); +- } +- } ++ ifp = zebra_ns_lookup_ifp_name(ns, ifname); + +- return NULL; ++ return ifp; + } + + struct interface *if_lookup_by_index_per_nsid(ns_id_t ns_id, uint32_t ifindex) +@@ -579,7 +524,8 @@ void if_add_update(struct interface *ifp) + zns = zvrf->zns; + else + zns = zebra_ns_lookup(NS_DEFAULT); +- if_link_per_ns(zns, ifp); ++ ++ zebra_ns_link_ifp(zns, ifp); + if_data = ifp->info; + assert(if_data); + +@@ -784,7 +730,7 @@ void if_delete_update(struct interface **pifp) + /* Send out notification on interface delete. */ + zebra_interface_delete_update(ifp); + +- if_unlink_per_ns(ifp); ++ zebra_ns_unlink_ifp(ifp); + + /* Update ifindex after distributing the delete message. This is in + case any client needs to have the old value of ifindex available +@@ -1121,50 +1067,52 @@ void zebra_if_update_link(struct interface *ifp, ifindex_t link_ifindex, + } + + /* +- * during initial link dump kernel does not order lower devices before +- * upper devices so we need to fixup link dependencies at the end of dump ++ * Callback for per-ns link fixup iteration + */ +-void zebra_if_update_all_links(struct zebra_ns *zns) ++static int zif_link_fixup_cb(struct interface *ifp, void *arg) + { +- struct route_node *rn; +- struct interface *ifp; + struct zebra_if *zif; + +- if (IS_ZEBRA_DEBUG_KERNEL) +- zlog_info("fixup link dependencies"); ++ zif = ifp->info; ++ /* update bond-member to bond linkages */ ++ if ((IS_ZEBRA_IF_BOND_SLAVE(ifp)) && ++ (zif->bondslave_info.bond_ifindex != IFINDEX_INTERNAL) && ++ !zif->bondslave_info.bond_if) { ++ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) ++ zlog_debug("bond mbr %s map to bond %d", zif->ifp->name, ++ zif->bondslave_info.bond_ifindex); ++ zebra_l2_map_slave_to_bond(zif, ifp->vrf->vrf_id); ++ } + +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- ifp = (struct interface *)rn->info; +- if (!ifp) +- continue; +- zif = ifp->info; +- /* update bond-member to bond linkages */ +- if ((IS_ZEBRA_IF_BOND_SLAVE(ifp)) +- && (zif->bondslave_info.bond_ifindex != IFINDEX_INTERNAL) +- && !zif->bondslave_info.bond_if) { +- if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL) +- zlog_debug("bond mbr %s map to bond %d", +- zif->ifp->name, +- zif->bondslave_info.bond_ifindex); +- zebra_l2_map_slave_to_bond(zif, ifp->vrf->vrf_id); +- } ++ /* update SVI linkages */ ++ if ((zif->link_ifindex != IFINDEX_INTERNAL) && !zif->link) { ++ zif->link = if_lookup_by_index_per_nsid(zif->link_nsid, ++ zif->link_ifindex); ++ if (IS_ZEBRA_DEBUG_KERNEL) ++ zlog_debug("interface %s/%d's lower fixup to %s/%d", ++ ifp->name, ifp->ifindex, ++ zif->link ? zif->link->name : "unk", ++ zif->link_ifindex); ++ } + +- /* update SVI linkages */ +- if ((zif->link_ifindex != IFINDEX_INTERNAL) && !zif->link) { +- zif->link = if_lookup_by_index_per_nsid( +- zif->link_nsid, zif->link_ifindex); +- if (IS_ZEBRA_DEBUG_KERNEL) +- zlog_debug("interface %s/%d's lower fixup to %s/%d", +- ifp->name, ifp->ifindex, +- zif->link?zif->link->name:"unk", +- zif->link_ifindex); +- } ++ /* Update VLAN<=>SVI map */ ++ if (IS_ZEBRA_IF_VLAN(ifp)) ++ zebra_evpn_acc_bd_svi_set(zif, NULL, ++ !!if_is_operative(ifp)); + +- /* Update VLAN<=>SVI map */ +- if (IS_ZEBRA_IF_VLAN(ifp)) +- zebra_evpn_acc_bd_svi_set(zif, NULL, +- !!if_is_operative(ifp)); +- } ++ return NS_WALK_CONTINUE; ++} ++ ++/* ++ * during initial link dump kernel does not order lower devices before ++ * upper devices so we need to fixup link dependencies at the end of dump ++ */ ++void zebra_if_update_all_links(struct zebra_ns *zns) ++{ ++ if (IS_ZEBRA_DEBUG_KERNEL) ++ zlog_debug("fixup link dependencies"); ++ ++ zebra_ns_ifp_walk(zns, zif_link_fixup_cb, NULL); + } + + static bool if_ignore_set_protodown(const struct interface *ifp, bool new_down, +diff --git a/zebra/interface.h b/zebra/interface.h +index 4cbec83cce..4f768e0217 100644 +--- a/zebra/interface.h ++++ b/zebra/interface.h +@@ -212,6 +212,9 @@ struct zebra_if { + char neigh_mac[6]; + struct in6_addr v6_2_v4_ll_addr6; + ++ /* Linkage for per-vrf/per-NS ifp container */ ++ struct ifp_tree_link *ns_tree_link; ++ + /* The description of the interface */ + char *desc; + }; +@@ -259,12 +262,10 @@ extern void zebra_if_init(void); + extern struct interface *if_lookup_by_index_per_ns(struct zebra_ns *, uint32_t); + extern struct interface *if_lookup_by_name_per_ns(struct zebra_ns *, + const char *); +-extern struct interface *if_link_per_ns(struct zebra_ns *, struct interface *); + extern struct interface *if_lookup_by_index_per_nsid(ns_id_t nsid, + uint32_t ifindex); + extern const char *ifindex2ifname_per_ns(struct zebra_ns *, unsigned int); + +-extern void if_unlink_per_ns(struct interface *); + extern void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *fip, + char mac[6], + struct in6_addr *address, +-- +2.43.2 + + +From 3f951796fcd65edba9fa41e5f094f0e79e9583b9 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Wed, 23 Oct 2024 12:34:36 -0700 +Subject: [PATCH 6/9] zebra: use new per-NS iteration in zebra_evpn + +Use the new per-NS interface iteration apis in the evpn +module. + +Signed-off-by: Mark Stapp +--- + zebra/zebra_evpn.c | 245 +++++++++++++++++++-------------------------- + zebra/zebra_evpn.h | 2 + + 2 files changed, 103 insertions(+), 144 deletions(-) + +diff --git a/zebra/zebra_evpn.c b/zebra/zebra_evpn.c +index 147f5b93fa..1122b5a2c0 100644 +--- a/zebra/zebra_evpn.c ++++ b/zebra/zebra_evpn.c +@@ -644,70 +644,47 @@ void zebra_evpn_svi_macip_del_for_evpn_hash(struct hash_bucket *bucket, + return; + } + +-static int zebra_evpn_map_vlan_ns(struct ns *ns, +- void *_in_param, +- void **_p_zevpn) ++/* Callback for per-NS ifp walk */ ++static int zebra_evpn_map_vlan_ns(struct interface *tmp_if, void *_in_param) + { +- int found = 0; +- struct zebra_ns *zns = ns->info; +- struct route_node *rn; ++ bool found = false; + struct interface *br_if; +- struct zebra_evpn **p_zevpn = (struct zebra_evpn **)_p_zevpn; + struct zebra_evpn *zevpn; +- struct interface *tmp_if = NULL; + struct zebra_if *zif; +- struct zebra_from_svi_param *in_param = +- (struct zebra_from_svi_param *)_in_param; +- vlanid_t vid; ++ struct zebra_from_svi_param *in_param = _in_param; + vni_t vni_id = 0; +- uint8_t bridge_vlan_aware; + +- assert(p_zevpn && in_param); ++ assert(in_param); + + br_if = in_param->br_if; + assert(br_if); + zif = in_param->zif; + assert(zif); +- vid = in_param->vid; +- bridge_vlan_aware = in_param->bridge_vlan_aware; + +- if (bridge_vlan_aware) { +- vni_id = zebra_l2_bridge_if_vni_find(zif, vid); +- if (vni_id) +- found = 1; +- } else { +- /* +- * See if this interface (or interface plus VLAN Id) maps to a +- * VxLAN +- */ +- /* TODO: Optimize with a hash. */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- if (!tmp_if) +- continue; +- zif = tmp_if->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; +- if (!if_is_operative(tmp_if)) +- continue; +- +- if (zif->brslave_info.br_if != br_if) +- continue; +- +- vni_id = +- zebra_vxlan_if_access_vlan_vni_find(zif, br_if); +- if (vni_id) { +- found = 1; +- break; +- } +- } +- } ++ /* ++ * See if this interface (or interface plus VLAN Id) maps to a ++ * VxLAN ++ */ ++ /* TODO: Optimize with a hash. */ ++ zif = tmp_if->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; ++ if (!if_is_operative(tmp_if)) ++ goto done; ++ ++ if (zif->brslave_info.br_if != br_if) ++ goto done; ++ ++ vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, br_if); ++ if (vni_id) ++ found = true; + ++done: + if (!found) + return NS_WALK_CONTINUE; + + zevpn = zebra_evpn_lookup(vni_id); +- *p_zevpn = zevpn; ++ in_param->zevpn = zevpn; + return NS_WALK_STOP; + } + +@@ -719,44 +696,39 @@ struct zebra_evpn *zebra_evpn_map_vlan(struct interface *ifp, + struct interface *br_if, vlanid_t vid) + { + struct zebra_if *zif; +- struct zebra_evpn **p_zevpn; +- struct zebra_evpn *zevpn = NULL; +- struct zebra_from_svi_param in_param; ++ struct zebra_from_svi_param in_param = {}; ++ vni_t vni_id = 0; + + /* Determine if bridge is VLAN-aware or not */ + zif = br_if->info; + assert(zif); +- in_param.bridge_vlan_aware = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif); ++ ++ /* Special case for vlan */ ++ if (IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif)) { ++ vni_id = zebra_l2_bridge_if_vni_find(zif, vid); ++ if (vni_id) ++ return zebra_evpn_lookup(vni_id); ++ } ++ + in_param.vid = vid; + in_param.br_if = br_if; + in_param.zif = zif; +- p_zevpn = &zevpn; + +- ns_walk_func(zebra_evpn_map_vlan_ns, +- (void *)&in_param, +- (void **)p_zevpn); +- return zevpn; ++ zebra_ns_ifp_walk_all(zebra_evpn_map_vlan_ns, &in_param); ++ ++ return in_param.zevpn; + } + +-static int zebra_evpn_from_svi_ns(struct ns *ns, +- void *_in_param, +- void **_p_zevpn) ++/* Callback for from_svi ifp walker */ ++static int zebra_evpn_from_svi_ns(struct interface *tmp_if, void *_in_param) + { +- struct zebra_ns *zns = ns->info; +- struct route_node *rn; + struct interface *br_if; +- struct zebra_evpn **p_zevpn = (struct zebra_evpn **)_p_zevpn; + struct zebra_evpn *zevpn; +- struct interface *tmp_if = NULL; + struct zebra_if *zif; + struct zebra_if *br_zif; +- struct zebra_l2_bridge_vlan *bvlan; +- struct zebra_from_svi_param *in_param = +- (struct zebra_from_svi_param *)_in_param; +- int found = 0; ++ struct zebra_from_svi_param *in_param = _in_param; ++ bool found = false; + vni_t vni_id = 0; +- vlanid_t vid = 0; +- uint8_t bridge_vlan_aware; + + if (!in_param) + return NS_WALK_STOP; +@@ -764,47 +736,30 @@ static int zebra_evpn_from_svi_ns(struct ns *ns, + br_if = in_param->br_if; + zif = in_param->zif; + assert(zif); +- bridge_vlan_aware = in_param->bridge_vlan_aware; +- vid = in_param->vid; + br_zif = br_if->info; + assert(br_zif); + +- if (bridge_vlan_aware) { +- bvlan = zebra_l2_bridge_if_vlan_find(br_zif, vid); +- if (bvlan && bvlan->access_bd && bvlan->access_bd->vni) { +- found = 1; +- vni_id = bvlan->access_bd->vni; +- } +- } else { +- /* TODO: Optimize with a hash. */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- if (!tmp_if) +- continue; +- zif = tmp_if->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; +- if (!if_is_operative(tmp_if)) +- continue; +- +- if (zif->brslave_info.br_if != br_if) +- continue; +- +- vni_id = +- zebra_vxlan_if_access_vlan_vni_find(zif, br_if); +- if (vni_id) { +- found = 1; +- break; +- } +- } +- } ++ if (!tmp_if) ++ goto done; ++ zif = tmp_if->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; ++ if (!if_is_operative(tmp_if)) ++ goto done; ++ ++ if (zif->brslave_info.br_if != br_if) ++ goto done; ++ ++ vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, br_if); ++ if (vni_id) ++ found = true; + ++done: + if (!found) + return NS_WALK_CONTINUE; + + zevpn = zebra_evpn_lookup(vni_id); +- if (p_zevpn) +- *p_zevpn = zevpn; ++ in_param->zevpn = zevpn; + return NS_WALK_STOP; + } + +@@ -815,17 +770,21 @@ static int zebra_evpn_from_svi_ns(struct ns *ns, + struct zebra_evpn *zebra_evpn_from_svi(struct interface *ifp, + struct interface *br_if) + { +- struct zebra_evpn *zevpn = NULL; +- struct zebra_evpn **p_zevpn; + struct zebra_if *zif; +- struct zebra_from_svi_param in_param; ++ struct zebra_l2_bridge_vlan *bvlan; ++ struct zebra_from_svi_param in_param = {}; ++ vni_t vni_id = 0; ++ struct zebra_evpn *zevpn; ++ struct zebra_l2info_vlan *vl; + + if (!br_if) + return NULL; + + /* Make sure the linked interface is a bridge. */ +- if (!IS_ZEBRA_IF_BRIDGE(br_if)) ++ if (!IS_ZEBRA_IF_BRIDGE(br_if)) { ++ zlog_debug("%s: br_if NOT a bridge", __func__); + return NULL; ++ } + + /* Determine if bridge is VLAN-aware or not */ + zif = br_if->info; +@@ -833,58 +792,60 @@ struct zebra_evpn *zebra_evpn_from_svi(struct interface *ifp, + in_param.bridge_vlan_aware = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif); + in_param.vid = 0; + ++ /* Don't need to search in this case */ + if (in_param.bridge_vlan_aware) { +- struct zebra_l2info_vlan *vl; +- + if (!IS_ZEBRA_IF_VLAN(ifp)) + return NULL; + ++ zevpn = NULL; ++ + zif = ifp->info; + assert(zif); + vl = &zif->l2info.vl; + in_param.vid = vl->vid; ++ ++ bvlan = zebra_l2_bridge_if_vlan_find(br_if->info, vl->vid); ++ if (bvlan && bvlan->access_bd && bvlan->access_bd->vni) { ++ vni_id = bvlan->access_bd->vni; ++ zevpn = zebra_evpn_lookup(vni_id); ++ } ++ ++ return zevpn; + } + ++ /* See if this interface (or interface plus VLAN Id) maps to a VxLAN: ++ * search all NSes ++ */ + in_param.br_if = br_if; + in_param.zif = zif; +- p_zevpn = &zevpn; +- /* See if this interface (or interface plus VLAN Id) maps to a VxLAN */ +- ns_walk_func(zebra_evpn_from_svi_ns, (void *)&in_param, +- (void **)p_zevpn); +- return zevpn; ++ zebra_ns_ifp_walk_all(zebra_evpn_from_svi_ns, &in_param); ++ ++ return in_param.zevpn; + } + +-static int zvni_map_to_macvlan_ns(struct ns *ns, +- void *_in_param, +- void **_p_ifp) ++static int zvni_map_to_macvlan_ns(struct interface *tmp_if, void *_in_param) + { +- struct zebra_ns *zns = ns->info; +- struct zebra_from_svi_param *in_param = +- (struct zebra_from_svi_param *)_in_param; +- struct interface **p_ifp = (struct interface **)_p_ifp; +- struct route_node *rn; +- struct interface *tmp_if = NULL; ++ struct zebra_from_svi_param *in_param = _in_param; + struct zebra_if *zif; + +- assert(in_param && p_ifp); ++ assert(in_param); + + /* Identify corresponding VLAN interface. */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- /* Check oper status of the SVI. */ +- if (!tmp_if || !if_is_operative(tmp_if)) +- continue; +- zif = tmp_if->info; + +- if (!zif || zif->zif_type != ZEBRA_IF_MACVLAN) +- continue; ++ /* Check oper status of the SVI. */ ++ if (!tmp_if || !if_is_operative(tmp_if)) ++ goto done; + +- if (zif->link == in_param->svi_if) { +- *p_ifp = tmp_if; +- return NS_WALK_STOP; +- } ++ zif = tmp_if->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_MACVLAN) ++ goto done; ++ ++ if (zif->link == in_param->svi_if) { ++ in_param->ret_ifp = tmp_if; ++ return NS_WALK_STOP; + } + ++done: + return NS_WALK_CONTINUE; + } + +@@ -893,17 +854,16 @@ static int zvni_map_to_macvlan_ns(struct ns *ns, + struct interface *zebra_evpn_map_to_macvlan(struct interface *br_if, + struct interface *svi_if) + { +- struct interface *tmp_if = NULL; + struct zebra_if *zif; +- struct interface **p_ifp; +- struct zebra_from_svi_param in_param; ++ struct zebra_from_svi_param in_param = {}; + + /* Defensive check, caller expected to invoke only with valid bridge. */ + if (!br_if) + return NULL; + + if (!svi_if) { +- zlog_debug("svi_if is not passed."); ++ if (IS_ZEBRA_DEBUG_VXLAN) ++ zlog_debug("%s: svi_if is not passed.", __func__); + return NULL; + } + +@@ -915,13 +875,10 @@ struct interface *zebra_evpn_map_to_macvlan(struct interface *br_if, + in_param.br_if = br_if; + in_param.zif = NULL; + in_param.svi_if = svi_if; +- p_ifp = &tmp_if; + + /* Identify corresponding VLAN interface. */ +- ns_walk_func(zvni_map_to_macvlan_ns, +- (void *)&in_param, +- (void **)p_ifp); +- return tmp_if; ++ zebra_ns_ifp_walk_all(zvni_map_to_macvlan_ns, &in_param); ++ return in_param.ret_ifp; + } + + /* +diff --git a/zebra/zebra_evpn.h b/zebra/zebra_evpn.h +index c946425dd5..85bdf54272 100644 +--- a/zebra/zebra_evpn.h ++++ b/zebra/zebra_evpn.h +@@ -116,7 +116,9 @@ struct zebra_evpn { + struct zebra_from_svi_param { + struct interface *br_if; + struct interface *svi_if; ++ struct interface *ret_ifp; + struct zebra_if *zif; ++ struct zebra_evpn *zevpn; + uint8_t bridge_vlan_aware; + vlanid_t vid; + }; +-- +2.43.2 + + +From 8a9d5ecbbcdf04894de461662e83df8c5dcb7ab4 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Thu, 24 Oct 2024 14:49:28 -0700 +Subject: [PATCH 7/9] lib,zebra: remove table node from ifp struct + +Finish removing the table route_node from the ifp struct. + +Signed-off-by: Mark Stapp +--- + lib/if.c | 6 ------ + lib/if.h | 2 -- + zebra/interface.c | 3 ++- + 3 files changed, 2 insertions(+), 9 deletions(-) + +diff --git a/lib/if.c b/lib/if.c +index a8ceac7243..bde35a3460 100644 +--- a/lib/if.c ++++ b/lib/if.c +@@ -1003,12 +1003,6 @@ void if_terminate(struct vrf *vrf) + + while (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) { + ifp = RB_ROOT(if_name_head, &vrf->ifaces_by_name); +- +- if (ifp->node) { +- ifp->node->info = NULL; +- route_unlock_node(ifp->node); +- ifp->node = NULL; +- } + if_delete(&ifp); + } + } +diff --git a/lib/if.h b/lib/if.h +index 0dc56bd210..c2ec73378d 100644 +--- a/lib/if.h ++++ b/lib/if.h +@@ -295,8 +295,6 @@ struct interface { + struct if_data stats; + #endif /* HAVE_NET_RT_IFLIST */ + +- struct route_node *node; +- + struct vrf *vrf; + + /* +diff --git a/zebra/interface.c b/zebra/interface.c +index 7ec80cb259..237ad2340d 100644 +--- a/zebra/interface.c ++++ b/zebra/interface.c +@@ -223,6 +223,8 @@ static int if_zebra_delete_hook(struct interface *ifp) + if_nhg_dependents_release(ifp); + zebra_if_nhg_dependents_free(zebra_if); + ++ zebra_ns_unlink_ifp(ifp); ++ + XFREE(MTYPE_ZIF_DESC, zebra_if->desc); + + EVENT_OFF(zebra_if->speed_update); +@@ -738,7 +740,6 @@ void if_delete_update(struct interface **pifp) + for setting ifindex to IFINDEX_INTERNAL after processing the + interface deletion message. */ + if_set_index(ifp, IFINDEX_INTERNAL); +- ifp->node = NULL; + + UNSET_FLAG(ifp->status, ZEBRA_INTERFACE_VRF_LOOPBACK); + +-- +2.43.2 + + +From bf41170c63771c5bda25476ccbab56383d9c74a6 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Thu, 24 Oct 2024 14:50:12 -0700 +Subject: [PATCH 8/9] zebra: use new per-NS ifp iterators in vxlan code + +Replace use of the old if_table with the new per-NS ifp +iterator apis in the zebra vxlan code. + +Signed-off-by: Mark Stapp +--- + zebra/zebra_evpn.h | 1 + + zebra/zebra_vxlan.c | 368 ++++++++++++++++++++------------------------ + 2 files changed, 172 insertions(+), 197 deletions(-) + +diff --git a/zebra/zebra_evpn.h b/zebra/zebra_evpn.h +index 85bdf54272..0ffebdd277 100644 +--- a/zebra/zebra_evpn.h ++++ b/zebra/zebra_evpn.h +@@ -119,6 +119,7 @@ struct zebra_from_svi_param { + struct interface *ret_ifp; + struct zebra_if *zif; + struct zebra_evpn *zevpn; ++ struct zebra_l3vni *zl3vni; + uint8_t bridge_vlan_aware; + vlanid_t vid; + }; +diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c +index 0b75ec261e..28646a7a6a 100644 +--- a/zebra/zebra_vxlan.c ++++ b/zebra/zebra_vxlan.c +@@ -862,39 +862,30 @@ static void zl3vni_print_hash_detail(struct hash_bucket *bucket, void *data) + vty_out(vty, "\n"); + } + +-static int zvni_map_to_svi_ns(struct ns *ns, +- void *_in_param, +- void **_p_ifp) ++static int zvni_map_to_svi_ns(struct interface *tmp_if, void *_in_param) + { +- struct zebra_ns *zns = ns->info; +- struct route_node *rn; +- struct zebra_from_svi_param *in_param = +- (struct zebra_from_svi_param *)_in_param; ++ struct zebra_from_svi_param *in_param = _in_param; + struct zebra_l2info_vlan *vl; +- struct interface *tmp_if = NULL; +- struct interface **p_ifp = (struct interface **)_p_ifp; + struct zebra_if *zif; + +- assert(in_param && p_ifp); ++ assert(in_param); + + /* TODO: Optimize with a hash. */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- /* Check oper status of the SVI. */ +- if (!tmp_if || !if_is_operative(tmp_if)) +- continue; +- zif = tmp_if->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VLAN +- || zif->link != in_param->br_if) +- continue; +- vl = (struct zebra_l2info_vlan *)&zif->l2info.vl; +- +- if (vl->vid == in_param->vid) { +- *p_ifp = tmp_if; +- route_unlock_node(rn); +- return NS_WALK_STOP; +- } ++ ++ /* Check oper status of the SVI. */ ++ if (!tmp_if || !if_is_operative(tmp_if)) ++ goto done; ++ zif = tmp_if->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VLAN || zif->link != in_param->br_if) ++ goto done; ++ vl = (struct zebra_l2info_vlan *)&zif->l2info.vl; ++ ++ if (vl->vid == in_param->vid) { ++ in_param->ret_ifp = tmp_if; ++ return NS_WALK_STOP; + } ++ ++done: + return NS_WALK_CONTINUE; + } + +@@ -907,10 +898,9 @@ static int zvni_map_to_svi_ns(struct ns *ns, + */ + struct interface *zvni_map_to_svi(vlanid_t vid, struct interface *br_if) + { +- struct interface *tmp_if = NULL; + struct zebra_if *zif; +- struct zebra_from_svi_param in_param; +- struct interface **p_ifp; ++ struct zebra_from_svi_param in_param = {}; ++ + /* Defensive check, caller expected to invoke only with valid bridge. */ + if (!br_if) + return NULL; +@@ -925,12 +915,11 @@ struct interface *zvni_map_to_svi(vlanid_t vid, struct interface *br_if) + + in_param.vid = vid; + in_param.br_if = br_if; +- in_param.zif = NULL; +- p_ifp = &tmp_if; ++ + /* Identify corresponding VLAN interface. */ +- ns_walk_func(zvni_map_to_svi_ns, (void *)&in_param, +- (void **)p_ifp); +- return tmp_if; ++ zebra_ns_ifp_walk_all(zvni_map_to_svi_ns, &in_param); ++ ++ return in_param.ret_ifp; + } + + int zebra_evpn_vxlan_del(struct zebra_evpn *zevpn) +@@ -1010,9 +999,9 @@ static int zevpn_build_vni_hash_table(struct zebra_if *zif, + */ + zevpn = zebra_evpn_lookup(vni); + if (zevpn) { +- zlog_debug( +- "EVPN hash already present for IF %s(%u) L2-VNI %u", +- ifp->name, ifp->ifindex, vni); ++ if (IS_ZEBRA_DEBUG_VXLAN) ++ zlog_debug("EVPN hash already present for IF %s(%u) L2-VNI %u", ++ ifp->name, ifp->ifindex, vni); + + /* + * Inform BGP if intf is up and mapped to +@@ -1075,48 +1064,32 @@ static int zevpn_build_vni_hash_table(struct zebra_if *zif, + return 0; + } + +-static int zevpn_build_hash_table_zns(struct ns *ns, +- void *param_in __attribute__((unused)), +- void **param_out __attribute__((unused))) ++static int zevpn_build_hash_table_zns(struct interface *ifp, void *arg) + { +- struct zebra_ns *zns = ns->info; +- struct route_node *rn; +- struct interface *ifp; +- struct zebra_vrf *zvrf; +- +- zvrf = zebra_vrf_get_evpn(); ++ struct zebra_vrf *zvrf = arg; ++ struct zebra_if *zif; ++ struct zebra_l2info_vxlan *vxl; + +- /* Walk VxLAN interfaces and create EVPN hash. */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- struct zebra_if *zif; +- struct zebra_l2info_vxlan *vxl; ++ zif = ifp->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; + +- ifp = (struct interface *)rn->info; +- if (!ifp) +- continue; +- zif = ifp->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; ++ vxl = &zif->l2info.vxl; ++ /* link of VXLAN interface should be in zebra_evpn_vrf */ ++ if (zvrf->zns->ns_id != vxl->link_nsid) { ++ if (IS_ZEBRA_DEBUG_VXLAN) ++ zlog_debug("Intf %s(%u) link not in same namespace as BGP EVPN core instance", ++ ifp->name, ifp->ifindex); ++ goto done; ++ } + +- vxl = &zif->l2info.vxl; +- /* link of VXLAN interface should be in zebra_evpn_vrf */ +- if (zvrf->zns->ns_id != vxl->link_nsid) { +- if (IS_ZEBRA_DEBUG_VXLAN) +- zlog_debug( +- "Intf %s(%u) link not in same " +- "namespace than BGP EVPN core instance ", +- ifp->name, ifp->ifindex); +- continue; +- } ++ if (IS_ZEBRA_DEBUG_VXLAN) ++ zlog_debug("Building vni table for %s-if %s", ++ IS_ZEBRA_VXLAN_IF_VNI(zif) ? "vni" : "svd", ifp->name); + +- if (IS_ZEBRA_DEBUG_VXLAN) +- zlog_debug("Building vni table for %s-if %s", +- IS_ZEBRA_VXLAN_IF_VNI(zif) ? "vni" : "svd", +- ifp->name); ++ zebra_vxlan_if_vni_iterate(zif, zevpn_build_vni_hash_table, NULL); + +- zebra_vxlan_if_vni_iterate(zif, zevpn_build_vni_hash_table, +- NULL); +- } ++done: + return NS_WALK_CONTINUE; + } + +@@ -1127,7 +1100,13 @@ static int zevpn_build_hash_table_zns(struct ns *ns, + + static void zevpn_build_hash_table(void) + { +- ns_walk_func(zevpn_build_hash_table_zns, NULL, NULL); ++ struct zebra_vrf *zvrf; ++ ++ zvrf = zebra_vrf_get_evpn(); ++ if (zvrf == NULL) ++ return; ++ ++ zebra_ns_ifp_walk_all(zevpn_build_hash_table_zns, zvrf); + } + + /* +@@ -1966,70 +1945,63 @@ static int zl3vni_del(struct zebra_l3vni *zl3vni) + return 0; + } + +-static int zl3vni_map_to_vxlan_if_ns(struct ns *ns, +- void *_zl3vni, +- void **_pifp) +-{ +- struct zebra_ns *zns = ns->info; +- struct zebra_l3vni *zl3vni = (struct zebra_l3vni *)_zl3vni; +- struct route_node *rn = NULL; +- struct interface *ifp = NULL; ++/* Context arg for zl3vni map iteration */ ++struct zl3vni_map_arg { + struct zebra_vrf *zvrf; ++ struct zebra_l3vni *zl3vni; ++ struct interface *ret_ifp; ++}; + +- zvrf = zebra_vrf_get_evpn(); +- +- assert(_pifp); +- +- /* loop through all vxlan-interface */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { ++static int zl3vni_map_to_vxlan_if_ns(struct interface *ifp, void *arg) ++{ ++ struct zl3vni_map_arg *ctx = arg; ++ struct zebra_l3vni *zl3vni = ctx->zl3vni; ++ struct zebra_vrf *zvrf = ctx->zvrf; ++ struct zebra_if *zif = NULL; ++ struct zebra_l2info_vxlan *vxl; ++ struct zebra_vxlan_vni *vni = NULL; + +- struct zebra_if *zif = NULL; +- struct zebra_l2info_vxlan *vxl; +- struct zebra_vxlan_vni *vni = NULL; ++ /* look for vxlan-interface */ + +- ifp = (struct interface *)rn->info; +- if (!ifp) +- continue; +- +- zif = ifp->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; ++ zif = ifp->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; + +- vxl = &zif->l2info.vxl; +- vni = zebra_vxlan_if_vni_find(zif, zl3vni->vni); +- if (!vni || vni->vni != zl3vni->vni) +- continue; ++ vxl = &zif->l2info.vxl; ++ vni = zebra_vxlan_if_vni_find(zif, zl3vni->vni); ++ if (!vni || vni->vni != zl3vni->vni) ++ goto done; + +- /* link of VXLAN interface should be in zebra_evpn_vrf */ +- if (zvrf->zns->ns_id != vxl->link_nsid) { +- if (IS_ZEBRA_DEBUG_VXLAN) +- zlog_debug( +- "Intf %s(%u) VNI %u, link not in same " +- "namespace than BGP EVPN core instance ", +- ifp->name, ifp->ifindex, vni->vni); +- continue; +- } ++ /* link of VXLAN interface should be in zebra_evpn_vrf */ ++ if (zvrf->zns->ns_id != vxl->link_nsid) { ++ if (IS_ZEBRA_DEBUG_VXLAN) ++ zlog_debug("Intf %s(%u) VNI %u, link not in same namespace as BGP EVPN core instance", ++ ifp->name, ifp->ifindex, vni->vni); ++ goto done; ++ } + ++ zl3vni->local_vtep_ip = zif->l2info.vxl.vtep_ip; ++ ctx->ret_ifp = ifp; + +- zl3vni->local_vtep_ip = zif->l2info.vxl.vtep_ip; +- *_pifp = (void *)ifp; +- route_unlock_node(rn); +- return NS_WALK_STOP; +- } ++ return NS_WALK_STOP; + ++done: + return NS_WALK_CONTINUE; + } + + struct interface *zl3vni_map_to_vxlan_if(struct zebra_l3vni *zl3vni) + { +- struct interface **p_ifp; +- struct interface *ifp = NULL; ++ struct zl3vni_map_arg arg = {}; + +- p_ifp = &ifp; ++ arg.zl3vni = zl3vni; ++ arg.zvrf = zebra_vrf_get_evpn(); + +- ns_walk_func(zl3vni_map_to_vxlan_if_ns, +- (void *)zl3vni, (void **)p_ifp); +- return ifp; ++ if (arg.zvrf == NULL) ++ return NULL; ++ ++ zebra_ns_ifp_walk_all(zl3vni_map_to_vxlan_if_ns, &arg); ++ ++ return arg.ret_ifp; + } + + struct interface *zl3vni_map_to_svi_if(struct zebra_l3vni *zl3vni) +@@ -2084,57 +2056,35 @@ struct zebra_l3vni *zl3vni_from_vrf(vrf_id_t vrf_id) + return zl3vni_lookup(zvrf->l3vni); + } + +-static int zl3vni_from_svi_ns(struct ns *ns, void *_in_param, void **_p_zl3vni) ++/* loop through all vxlan-interface */ ++static int zl3vni_from_svi_ns(struct interface *tmp_if, void *_in_param) + { + int found = 0; + vni_t vni_id = 0; +- struct zebra_ns *zns = ns->info; +- struct zebra_l3vni **p_zl3vni = (struct zebra_l3vni **)_p_zl3vni; +- struct zebra_from_svi_param *in_param = +- (struct zebra_from_svi_param *)_in_param; +- struct route_node *rn = NULL; +- struct interface *tmp_if = NULL; ++ struct zebra_from_svi_param *in_param = _in_param; + struct zebra_if *zif = NULL; +- struct zebra_if *br_zif = NULL; + +- assert(in_param && p_zl3vni); ++ assert(in_param); + +- br_zif = in_param->br_if->info; +- assert(br_zif); ++ zif = tmp_if->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; ++ if (!if_is_operative(tmp_if)) ++ goto done; + +- if (in_param->bridge_vlan_aware) { +- vni_id = zebra_l2_bridge_if_vni_find(br_zif, in_param->vid); +- if (vni_id) +- found = 1; +- } else { +- /* loop through all vxlan-interface */ +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- tmp_if = (struct interface *)rn->info; +- if (!tmp_if) +- continue; +- zif = tmp_if->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; +- if (!if_is_operative(tmp_if)) +- continue; +- +- if (zif->brslave_info.br_if != in_param->br_if) +- continue; +- +- vni_id = zebra_vxlan_if_access_vlan_vni_find( +- zif, in_param->br_if); +- if (vni_id) { +- found = 1; +- route_unlock_node(rn); +- break; +- } +- } ++ if (zif->brslave_info.br_if != in_param->br_if) ++ goto done; ++ ++ vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, in_param->br_if); ++ if (vni_id) { ++ in_param->zl3vni = zl3vni_lookup(vni_id); ++ found = 1; + } + ++done: + if (!found) + return NS_WALK_CONTINUE; + +- *p_zl3vni = zl3vni_lookup(vni_id); + return NS_WALK_STOP; + } + +@@ -2145,10 +2095,11 @@ static int zl3vni_from_svi_ns(struct ns *ns, void *_in_param, void **_p_zl3vni) + static struct zebra_l3vni *zl3vni_from_svi(struct interface *ifp, + struct interface *br_if) + { +- struct zebra_l3vni *zl3vni = NULL; + struct zebra_if *zif = NULL; ++ vni_t vni_id = 0; ++ struct zebra_if *br_zif = NULL; + struct zebra_from_svi_param in_param = {}; +- struct zebra_l3vni **p_zl3vni; ++ struct zebra_l2info_vlan *vl; + + if (!br_if) + return NULL; +@@ -2156,15 +2107,15 @@ static struct zebra_l3vni *zl3vni_from_svi(struct interface *ifp, + /* Make sure the linked interface is a bridge. */ + if (!IS_ZEBRA_IF_BRIDGE(br_if)) + return NULL; ++ + in_param.br_if = br_if; + + /* Determine if bridge is VLAN-aware or not */ +- zif = br_if->info; +- assert(zif); +- in_param.bridge_vlan_aware = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif); +- if (in_param.bridge_vlan_aware) { +- struct zebra_l2info_vlan *vl; ++ br_zif = br_if->info; ++ assert(br_zif); + ++ in_param.bridge_vlan_aware = IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(br_zif); ++ if (in_param.bridge_vlan_aware) { + if (!IS_ZEBRA_IF_VLAN(ifp)) + return NULL; + +@@ -2172,15 +2123,18 @@ static struct zebra_l3vni *zl3vni_from_svi(struct interface *ifp, + assert(zif); + vl = &zif->l2info.vl; + in_param.vid = vl->vid; ++ ++ vni_id = zebra_l2_bridge_if_vni_find(br_zif, in_param.vid); ++ if (vni_id) ++ return zl3vni_lookup(vni_id); + } + + /* See if this interface (or interface plus VLAN Id) maps to a VxLAN */ + /* TODO: Optimize with a hash. */ + +- p_zl3vni = &zl3vni; ++ zebra_ns_ifp_walk_all(zl3vni_from_svi_ns, &in_param); + +- ns_walk_func(zl3vni_from_svi_ns, (void *)&in_param, (void **)p_zl3vni); +- return zl3vni; ++ return in_param.zl3vni; + } + + vni_t vni_id_from_svi(struct interface *ifp, struct interface *br_if) +@@ -2334,6 +2288,36 @@ static void zevpn_add_to_l3vni_list(struct hash_bucket *bucket, void *ctxt) + listnode_add_sort(zl3vni->l2vnis, zevpn); + } + ++/* Helper for vni transition iterator */ ++ ++struct vni_trans_ctx { ++ vni_t vni; ++ struct zebra_vxlan_vni *vnip; ++ struct interface *ret_ifp; ++}; ++ ++static int vni_trans_cb(struct interface *ifp, void *arg) ++{ ++ struct vni_trans_ctx *ctx = arg; ++ struct zebra_if *zif; ++ struct zebra_vxlan_vni *vnip; ++ ++ /* Find VxLAN interface for this VNI. */ ++ zif = ifp->info; ++ if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) ++ goto done; ++ ++ vnip = zebra_vxlan_if_vni_find(zif, ctx->vni); ++ if (vnip) { ++ ctx->ret_ifp = ifp; ++ ctx->vnip = vnip; ++ return NS_WALK_STOP; ++ } ++ ++done: ++ return NS_WALK_CONTINUE; ++} ++ + /* + * Handle transition of vni from l2 to l3 and vice versa. + * This function handles only the L2VNI add/delete part of +@@ -2384,39 +2368,25 @@ static int zebra_vxlan_handle_vni_transition(struct zebra_vrf *zvrf, vni_t vni, + return -1; + } + } else { +- struct zebra_ns *zns; +- struct route_node *rn; +- struct interface *ifp; +- struct zebra_if *zif; + struct zebra_vxlan_vni *vnip; + struct zebra_l2info_vxlan *vxl; + struct interface *vlan_if; +- bool found = false; ++ struct zebra_if *zif; ++ struct zebra_ns *zns; ++ struct vni_trans_ctx ctx = {}; + + if (IS_ZEBRA_DEBUG_VXLAN) + zlog_debug("Adding L2-VNI %u - transition from L3-VNI", + vni); + +- /* Find VxLAN interface for this VNI. */ + zns = zebra_ns_lookup(NS_DEFAULT); +- for (rn = route_top(zns->if_table); rn; rn = route_next(rn)) { +- ifp = (struct interface *)rn->info; +- if (!ifp) +- continue; +- zif = ifp->info; +- if (!zif || zif->zif_type != ZEBRA_IF_VXLAN) +- continue; +- +- vxl = &zif->l2info.vxl; +- vnip = zebra_vxlan_if_vni_find(zif, vni); +- if (vnip) { +- found = true; +- route_unlock_node(rn); +- break; +- } +- } + +- if (!found) { ++ ctx.vni = vni; ++ ++ /* Find VxLAN interface for this VNI. */ ++ zebra_ns_ifp_walk(zns, vni_trans_cb, &ctx); ++ ++ if (ctx.ret_ifp == NULL) { + if (IS_ZEBRA_DEBUG_VXLAN) + zlog_err( + "Adding L2-VNI - Failed to find VxLAN interface for VNI %u", +@@ -2429,6 +2399,10 @@ static int zebra_vxlan_handle_vni_transition(struct zebra_vrf *zvrf, vni_t vni, + if (zevpn) + return 0; + ++ zif = ctx.ret_ifp->info; ++ vnip = ctx.vnip; ++ vxl = &zif->l2info.vxl; ++ + zevpn = zebra_evpn_add(vni); + + /* Find bridge interface for the VNI */ +@@ -2441,13 +2415,13 @@ static int zebra_vxlan_handle_vni_transition(struct zebra_vrf *zvrf, vni_t vni, + listnode_add_sort_nodup(zl3vni->l2vnis, zevpn); + } + +- zevpn->vxlan_if = ifp; ++ zevpn->vxlan_if = ctx.ret_ifp; + zevpn->local_vtep_ip = vxl->vtep_ip; + + /* Inform BGP if the VNI is up and mapped to a bridge. */ +- if (if_is_operative(ifp) && zif->brslave_info.br_if) { ++ if (if_is_operative(ctx.ret_ifp) && zif->brslave_info.br_if) { + zebra_evpn_send_add_to_client(zevpn); +- zebra_evpn_read_mac_neigh(zevpn, ifp); ++ zebra_evpn_read_mac_neigh(zevpn, ctx.ret_ifp); + } + } + +-- +2.43.2 + + +From 328f2f83feed43f0871669f47aa4206e9cd7a065 Mon Sep 17 00:00:00 2001 +From: Mark Stapp +Date: Thu, 24 Oct 2024 14:52:21 -0700 +Subject: [PATCH 9/9] zebra: remove if_table from the zebra NS + +Finish removing the if_table from the zebra NS struct. + +Signed-off-by: Mark Stapp +--- + zebra/zebra_ns.c | 5 ----- + zebra/zebra_ns.h | 2 -- + 2 files changed, 7 deletions(-) + +diff --git a/zebra/zebra_ns.c b/zebra/zebra_ns.c +index c6b279a9d7..578dee7b7e 100644 +--- a/zebra/zebra_ns.c ++++ b/zebra/zebra_ns.c +@@ -234,7 +234,6 @@ static int zebra_ns_new(struct ns *ns) + zns->ns_id = ns->ns_id; + + /* Do any needed per-NS data structure allocation. */ +- zns->if_table = route_table_init(); + ifp_tree_init(&zns->ifp_tree); + + return 0; +@@ -334,10 +333,6 @@ int zebra_ns_enable(ns_id_t ns_id, void **info) + */ + static int zebra_ns_disable_internal(struct zebra_ns *zns, bool complete) + { +- if (zns->if_table) +- route_table_finish(zns->if_table); +- zns->if_table = NULL; +- + zebra_dplane_ns_enable(zns, false /*Disable*/); + + kernel_terminate(zns, complete); +diff --git a/zebra/zebra_ns.h b/zebra/zebra_ns.h +index 1ddecc8252..96b78d4745 100644 +--- a/zebra/zebra_ns.h ++++ b/zebra/zebra_ns.h +@@ -67,8 +67,6 @@ struct zebra_ns { + struct nlsock ge_netlink_cmd; /* command channel for generic netlink */ + #endif + +- struct route_table *if_table; +- + /* Tree of interfaces in this ns */ + struct ifp_tree_head ifp_tree; + +-- +2.43.2 + diff --git a/src/sonic-frr/patch/series b/src/sonic-frr/patch/series index 0cb3259b47d9..86ec826af8c0 100644 --- a/src/sonic-frr/patch/series +++ b/src/sonic-frr/patch/series @@ -6,30 +6,13 @@ 0006-Link-local-scope-was-not-set-while-binding-socket-for-bgp-ipv6-link-local-neighbors.patch 0007-ignore-route-from-default-table.patch 0008-Use-vrf_id-for-vrf-not-tabled_id.patch -0009-bgpd-Ensure-suppress-fib-pending-works-with-network-.patch 0010-bgpd-Change-log-level-for-graceful-restart-events.patch -0011-zebra-Static-routes-async-notification-do-not-need-t.patch -0012-zebra-Rename-vrf_lookup_by_tableid-to-zebra_vrf_look.patch -0013-zebra-Move-protodown_r_bit-to-a-better-spot.patch -0014-zebra-Remove-unused-dplane_intf_delete.patch -0015-zebra-Remove-unused-add-variable.patch -0016-zebra-Remove-duplicate-function-for-netlink-interfac.patch -0017-zebra-Add-code-to-get-set-interface-to-pass-up-from-.patch -0018-zebra-Use-zebra-dplane-for-RTM-link-and-addr.patch -0019-zebra-remove-duplicated-nexthops-when-sending-fpm-msg.patch -0020-zebra-Fix-non-notification-of-better-admin-won.patch 0021-Disable-ipv6-src-address-test-in-pceplib.patch 0022-cross-compile-changes.patch -0023-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch -0024-lib-use-snmp-s-large-fd-sets-for-agentx.patch 0025-bgp-community-memory-leak-fix.patch -0026-bgp-fib-suppress-announce-fix.patch -0027-lib-Do-not-convert-EVPN-prefixes-into-IPv4-IPv6-if-n.patch 0028-zebra-fix-parse-attr-problems-for-encap.patch -0029-zebra-nhg-fix-on-intf-up.patch 0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch 0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch -0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch 0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch 0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch 0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch @@ -50,6 +33,12 @@ 0050-bgpd-backpressure-Avoid-use-after-free.patch 0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch 0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch -0053-bgpd-Set-md5-TCP-socket-option-for-outgoing-connections-on-listener.patch -build-dplane-fpm-sonic-module.patch -bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch +0054-build-dplane-fpm-sonic-module.patch +0055-bgpd-lib-Include-SID-structure-in-seg6local-nexthop.patch +0056-zebra-do-not-send-local-routes-to-fpm.patch +0057-Adding-changes-to-write-ip-nht-resolve-via-default-c.patch +0058-When-the-file-is-config-replayed-we-cannot-handle-th.patch +0059-Fix-BGP-reset-on-suppress-fib-pending-configuration.patch +0060-bgpd-Validate-both-nexthop-information-NEXTHOP-and-N.patch +0061-Set-multipath-to-514-and-disable-bgp-vnc-for-optimiz.patch +0062-zebra-lib-use-internal-rbtree-per-ns.patch diff --git a/src/sonic-gnmi b/src/sonic-gnmi index 883d617a9338..6eade5116b9e 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit 883d617a9338fb10210990682116be13e96407c0 +Subproject commit 6eade5116b9e2446e37b39cc46e6671b0176f6f4 diff --git a/src/sonic-host-services b/src/sonic-host-services index ff73070d7def..b0b3ca54614a 160000 --- a/src/sonic-host-services +++ b/src/sonic-host-services @@ -1 +1 @@ -Subproject commit ff73070d7def8689bc92dd0e28d3dab5d0254450 +Subproject commit b0b3ca54614ac6fd350f2609f1ebd74757b72f14 diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index fe78170347f9..c281fc9e153a 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit fe78170347f947f67828f94b75d3ff8e12f7fd43 +Subproject commit c281fc9e153aa1c91d1f6876c1360bf77f82108c diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 9fc9c855e230..e955e584ebf1 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 9fc9c855e230098ad24791b5368574357a8711ab +Subproject commit e955e584ebf1b2fc9d9eb640b24aad4819612439 diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index e77218381d4d..60e7224c7d0d 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit e77218381d4d67c2ac89873e0ce47f32a186c121 +Subproject commit 60e7224c7d0d398a8bbb055796d19e0a556f1916 diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index 75e8dcb5761a..238ab8dcdfdc 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -168,6 +168,34 @@ def get_platform_and_hwsku(): return (platform, hwsku) +def get_platform_json_data(): + """ + Retrieve the data from platform.json file + + Returns: + A dictionary containing the key/value pairs as found in the platform.json file + """ + platform = get_platform() + if not platform: + return None + + platform_path = get_path_to_platform_dir() + if not platform_path: + return None + + platform_json = os.path.join(platform_path, PLATFORM_JSON_FILE) + if not os.path.isfile(platform_json): + return None + + try: + with open(platform_json, 'r') as f: + platform_data = json.loads(f.read()) + return platform_data + except (json.JSONDecodeError, IOError, TypeError, ValueError): + # Handle any file reading and JSON parsing errors + return None + + def get_asic_conf_file_path(): """ Retrieves the path to the ASIC configuration file on the device @@ -582,15 +610,30 @@ def is_smartswitch(): if not platform: return False - # get platform.json file path - platform_json = os.path.join(HOST_DEVICE_PATH, platform, "platform.json") - try: - with open(platform_json, 'r') as f: - platform_cfg = json.loads(f.read()) - return "DPUS" in platform_cfg - except IOError: + # Retrieve platform.json data + platform_data = get_platform_json_data() + if platform_data: + return "DPUS" in platform_data + + return False + + +def is_dpu(): + # Get platform + platform = get_platform() + if not platform: return False + if not is_smartswitch(): + return False + + # Retrieve platform.json data + platform_data = get_platform_json_data() + if platform_data: + return 'DPU' in platform_data + + return False + def is_supervisor(): platform_env_conf_file_path = get_platform_env_conf_file_path() @@ -892,37 +935,63 @@ def is_frontend_port_present_in_host(): return True +def get_dpu_info(): + """ + Retrieves the DPU information from platform.json file. + + Returns: + A dictionary containing the DPU information. + """ + + platform = get_platform() + if not platform: + return {} + + # Retrieve platform.json data + platform_data = get_platform_json_data() + if not platform_data: + return {} + + if "DPUS" in platform_data: + return platform_data["DPUS"] + elif 'DPU' in platform_data: + return platform_data['DPU'] + else: + return {} + + def get_num_dpus(): """ Retrieves the number of DPUs from platform.json file. - Args: - Returns: A integer to indicate the number of DPUs. """ - platform = get_platform() - if not platform: + if is_dpu(): return 0 - # Get Platform path. - platform_path = get_path_to_platform_dir() + dpu_info = get_dpu_info() + if dpu_info is not None and len(dpu_info) > 0: + return len(dpu_info) - if os.path.isfile(os.path.join(platform_path, PLATFORM_JSON_FILE)): - json_file = os.path.join(platform_path, PLATFORM_JSON_FILE) + return 0 - try: - with open(json_file, 'r') as file: - platform_data = json.load(file) - except (json.JSONDecodeError, IOError, TypeError, ValueError): - # Handle any file reading and JSON parsing errors - return 0 - - # Convert to lower case avoid case sensitive. - data = {k.lower(): v for k, v in platform_data.items()} - DPUs = data.get('dpus', None) - if DPUs is not None and len(DPUs) > 0: - return len(DPUs) - return 0 +def get_dpu_list(): + """ + Retrieves the list of DPUs from platform.json file. + + Returns: + A list indicating the list of DPUs. + For example, ['dpu0', 'dpu1', 'dpu2'] + """ + + if is_dpu(): + return [] + + dpu_info = get_dpu_info() + if dpu_info is not None and len(dpu_info) > 0: + return list(dpu_info) + + return [] diff --git a/src/sonic-py-common/tests/device_info_test.py b/src/sonic-py-common/tests/device_info_test.py index 8596acd178db..e7ac9e88c3c2 100644 --- a/src/sonic-py-common/tests/device_info_test.py +++ b/src/sonic-py-common/tests/device_info_test.py @@ -10,6 +10,7 @@ import mock import pytest +import json from sonic_py_common import device_info @@ -162,6 +163,176 @@ def test_get_platform_info(self, mock_hwsku, mock_machine_info, mock_sonic_ver, assert mock_hwsku.called_once() mock_cfg_inst.get_table.assert_called_once_with("DEVICE_METADATA") + @mock.patch("os.path.isfile") + @mock.patch("{}.open".format(BUILTINS)) + @mock.patch("sonic_py_common.device_info.get_path_to_platform_dir") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_get_platform_json_data(self, mock_get_platform, mock_get_path_to_platform_dir, mock_open, mock_isfile): + mock_get_platform.return_value = "x86_64-mlnx_msn2700-r0" + mock_get_path_to_platform_dir.return_value = "/usr/share/sonic/device" + mock_isfile.return_value = True + platform_json_data = { + "chassis": { + "name": "MSN2700" + } + } + open_mocked = mock.mock_open(read_data=json.dumps(platform_json_data)) + mock_open.side_effect = open_mocked + + result = device_info.get_platform_json_data() + assert result == platform_json_data + assert mock_open.call_count == 1 + + # Test case where platform is None + mock_get_platform.return_value = None + result = device_info.get_platform_json_data() + assert result is None + + # Test case where platform path is None + mock_get_platform.return_value = "x86_64-mlnx_msn2700-r0" + mock_get_path_to_platform_dir.return_value = None + result = device_info.get_platform_json_data() + assert result is None + + # Test case where platform.json file does not exist + mock_get_path_to_platform_dir.return_value = "/usr/share/sonic/device" + mock_isfile.return_value = False + result = device_info.get_platform_json_data() + assert result is None + + # Test case where JSON decoding fails + mock_isfile.return_value = True + open_mocked = mock.mock_open(read_data="invalid json") + mock_open.side_effect = open_mocked + result = device_info.get_platform_json_data() + assert result is None + + @mock.patch("sonic_py_common.device_info.get_platform_json_data") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_is_smartswitch(self, mock_get_platform, mock_get_platform_json_data): + # Test case where platform is None + mock_get_platform.return_value = None + assert device_info.is_smartswitch() == False + + # Test case where platform.json data is None + mock_get_platform.return_value="x86_64-mlnx_msn2700-r0" + mock_get_platform_json_data.return_value=None + assert device_info.is_smartswitch() == False + + # Test case where platform.json data does not contain "DPUS" + mock_get_platform_json_data.return_value={} + assert device_info.is_smartswitch() == False + + # Test case where platform.json data contains "DPUS" + mock_get_platform_json_data.return_value={"DPUS": {}} + assert device_info.is_smartswitch() == True + + @mock.patch("sonic_py_common.device_info.get_platform_json_data") + @mock.patch("sonic_py_common.device_info.is_smartswitch") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_is_dpu(self, mock_get_platform, mock_is_smartswitch, mock_get_platform_json_data): + # Test case where platform is None + mock_get_platform.return_value=None + assert device_info.is_dpu() == False + + # Test case where platform is not a smart switch + mock_get_platform.return_value="x86_64-mlnx_msn2700-r0" + mock_is_smartswitch.return_value=False + assert device_info.is_dpu() == False + + # Test case where platform is a smart switch but no DPU data in platform.json + mock_is_smartswitch.return_value=True + mock_get_platform_json_data.return_value={} + assert device_info.is_dpu() == False + + # Test case where platform is a smart switch and DPU data is present in platform.json + mock_get_platform_json_data.return_value={"DPU": {}} + assert device_info.is_dpu() == True + + # Test case where platform is a smart switch and DPU data is present in platform.json + mock_get_platform_json_data.return_value={"DPUS": {}} + assert device_info.is_dpu() == False + + @mock.patch("sonic_py_common.device_info.get_platform_json_data") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_get_dpu_info(self, mock_get_platform, mock_get_platform_json_data): + # Test case where platform is None + mock_get_platform.return_value = None + assert device_info.get_dpu_info() == {} + + # Test case where platform.json data is None + mock_get_platform.return_value = "x86_64-mlnx_msn2700-r0" + mock_get_platform_json_data.return_value = None + assert device_info.get_dpu_info() == {} + + # Test case where platform.json data does not contain "DPUS" or "DPU" + mock_get_platform_json_data.return_value = {} + assert device_info.get_dpu_info() == {} + + # Test case where platform.json data contains "DPUS" + mock_get_platform_json_data.return_value = {"DPUS": {"dpu0": {}, "dpu1": {}}} + assert device_info.get_dpu_info() == {"dpu0": {}, "dpu1": {}} + + # Test case where platform.json data contains "DPU" + mock_get_platform_json_data.return_value = {"DPU": {"dpu0": {}}} + assert device_info.get_dpu_info() == {"dpu0": {}} + + # Test case where platform.json data does not contain "DPU" or "DPUS" + mock_get_platform_json_data.return_value = {"chassis": {}} + assert device_info.get_dpu_info() == {} + + @mock.patch("sonic_py_common.device_info.get_platform_json_data") + @mock.patch("sonic_py_common.device_info.is_dpu") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_get_num_dpus(self, mock_get_platform, mock_is_dpu, mock_get_platform_json_data): + # Test case where platform is None + mock_get_platform.return_value = None + assert device_info.get_num_dpus() == 0 + + # Test case where platform is a DPU + mock_get_platform.return_value = "x86_64-mlnx_msn2700-r0" + mock_is_dpu.return_value = True + assert device_info.get_num_dpus() == 0 + + # Test case where platform.json data is None + mock_is_dpu.return_value = False + mock_get_platform_json_data.return_value = None + assert device_info.get_num_dpus() == 0 + + # Test case where platform.json data does not contain DPUs + mock_get_platform_json_data.return_value = {} + assert device_info.get_num_dpus() == 0 + + # Test case where platform.json data contains DPUs + mock_get_platform_json_data.return_value = {"DPUS": {"dpu0": {}, "dpu1": {}}} + assert device_info.get_num_dpus() == 2 + + @mock.patch("sonic_py_common.device_info.get_platform_json_data") + @mock.patch("sonic_py_common.device_info.is_dpu") + @mock.patch("sonic_py_common.device_info.get_platform") + def test_get_dpu_list(self, mock_get_platform, mock_is_dpu, mock_get_platform_json_data): + # Test case where platform is None + mock_get_platform.return_value = None + assert device_info.get_dpu_list() == [] + + # Test case where platform is a DPU + mock_get_platform.return_value = "x86_64-mlnx_msn2700-r0" + mock_is_dpu.return_value = True + assert device_info.get_dpu_list() == [] + + # Test case where platform.json data is None + mock_is_dpu.return_value = False + mock_get_platform_json_data.return_value = None + assert device_info.get_dpu_list() == [] + + # Test case where platform.json data does not contain DPUs + mock_get_platform_json_data.return_value = {} + assert device_info.get_dpu_list() == [] + + # Test case where platform.json data contains DPUs + mock_get_platform_json_data.return_value = {"DPUS": {"dpu0": {}, "dpu1": {}}} + assert device_info.get_dpu_list() == ["dpu0", "dpu1"] + @classmethod def teardown_class(cls): print("TEARDOWN") diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 137b538e4125..98bb52ebe92d 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 137b538e412552ca090badc7470ee7cb1157b4f8 +Subproject commit 98bb52ebe92dd47edf0bb12321886df2388e026f diff --git a/src/sonic-stp b/src/sonic-stp new file mode 160000 index 000000000000..ea85d654d23f --- /dev/null +++ b/src/sonic-stp @@ -0,0 +1 @@ +Subproject commit ea85d654d23f17a6b628f70adf7ae27ff772dae1 diff --git a/src/sonic-swss b/src/sonic-swss index 2e2d4e59315c..3da2e676ab64 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 2e2d4e59315c377100e73fd07da378663ed74bd9 +Subproject commit 3da2e676ab646be76d75ba443e8e8af60c0d217d diff --git a/src/sonic-swss-common b/src/sonic-swss-common index 378e82818165..7425c4237b06 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit 378e82818165d75aa2fdc66961e72c4852eae69b +Subproject commit 7425c4237b06c9c7b553a9a3bcb540c2f7720fcf diff --git a/src/sonic-utilities b/src/sonic-utilities index 4a6d12180763..d5cbe4641d1c 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 4a6d12180763af3a62c8ae773f140737052d0011 +Subproject commit d5cbe4641d1c1a616ec5c6376cc75fc862f357c7 diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index 4ebae55c3ea2..60a4222721f0 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -42,6 +42,7 @@ Table of Contents * [FABRIC_MONITOR](#fabric-monitor) * [FABRIC_PORT](#fabric-port) * [FLEX_COUNTER_TABLE](#flex_counter_table) + * [GRPCCLIENT](#grpcclient) * [Hash](#hash) * [IPv6 Link-local] (#ipv6-link-local) * [KDUMP](#kdump) @@ -49,6 +50,7 @@ Table of Contents * [L2 Neighbors](#l2-neighbors) * [Loopback Interface](#loopback-interface) * [LOSSLESS_TRAFFIC_PATTERN](#LOSSLESS_TRAFFIC_PATTERN) + * [Memory Statistics](#memory-statistics) * [Management Interface](#management-interface) * [Management port](#management-port) * [Management VRF](#management-vrf) @@ -342,7 +344,8 @@ and migration plan "MATCHES": [ "IN_PORTS", "OUT_PORTS", - "SRC_IP" + "SRC_IP", + "TUNNEL_TERM" ], "ACTIONS": [ "PACKET_ACTION", @@ -369,6 +372,7 @@ and migration plan "PRIORITY": "999", "PACKET_ACTION": "DROP", "SRC_IP": "1.1.1.1/32", + "TUNNEL_TERM": "true" } } } @@ -1479,6 +1483,25 @@ lossless traffic for dynamic buffer calculation } ``` +### Memory Statistics +The memory statistics configuration is stored in the **MEMORY_STATISTICS** table. This table is used by the memory statistics daemon to manage memory monitoring settings. The configuration allows enabling or disabling memory collection, specifying how frequently memory statistics are sampled, and defining how long the memory data is retained. + +``` +{ + "MEMORY_STATISTICS": { + "memory_statistics": { + "enabled": "false", + "sampling_interval": "5", + "retention_period": "15" + } + } +} + +``` +- **enabled**: Defines whether the memory statistics collection is active (true or false). +- **sampling_interval**: Interval between data collection. +- **retention_period**: Time to retain collected data. + ### Management Interface Management interfaces are defined in **MGMT_INTERFACE** table. Object diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py index 5e130854eeba..60dba6c410aa 100644 --- a/src/sonic-yang-models/setup.py +++ b/src/sonic-yang-models/setup.py @@ -137,6 +137,7 @@ def run(self): './yang-models/sonic-kubernetes_master.yang', './yang-models/sonic-loopback-interface.yang', './yang-models/sonic-lossless-traffic-pattern.yang', + './yang-models/sonic-memory-statistics.yang', './yang-models/sonic-mgmt_interface.yang', './yang-models/sonic-mgmt_port.yang', './yang-models/sonic-mgmt_vrf.yang', @@ -204,6 +205,7 @@ def run(self): './yang-models/sonic-bgp-sentinel.yang', './yang-models/sonic-bmp.yang', './yang-models/sonic-xcvrd-log.yang', + './yang-models/sonic-grpcclient.yang', './yang-models/sonic-serial-console.yang', './yang-models/sonic-smart-switch.yang',]), ('cvlyang-models', ['./cvlyang-models/sonic-acl.yang', @@ -241,6 +243,7 @@ def run(self): './cvlyang-models/sonic-kubernetes_master.yang', './cvlyang-models/sonic-loopback-interface.yang', './cvlyang-models/sonic-mgmt_interface.yang', + './cvlyang-models/sonic-memory-statistics.yang', './cvlyang-models/sonic-mgmt_port.yang', './cvlyang-models/sonic-mgmt_vrf.yang', './cvlyang-models/sonic-ntp.yang', diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 93283acee587..4c76237ddb46 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -328,6 +328,12 @@ "SRC_IP": "1.1.1.1/32", "BTH_OPCODE": "0x11/0xbf", "AETH_SYNDROME": "0x60/0x60" + }, + "DATAACL|RULE0": { + "PRIORITY": "999", + "PACKET_ACTION": "FORWARD", + "TUNNEL_TERM": "true", + "DST_IP": "1.1.1.1/32" } }, "SWITCH_HASH": { @@ -1331,7 +1337,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50051" + "port": "50051", + "enable_crl": "false", + "crl_expire_duration": "86400" } }, "TELEMETRY_CLIENT": { @@ -1368,7 +1376,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50052" + "port": "50052", + "enable_crl": "false", + "crl_expire_duration": "86400" } }, "GNMI_CLIENT_CERT": { @@ -2752,6 +2762,19 @@ "log_verbosity": "notice" } }, + "GRPCCLIENT": { + "config": { + "type": "secure", + "auth_level": "server", + "log_level": "info" + }, + "certs": { + "client_crt": "grpcclient.crt", + "client_key": "grpcclient.key", + "ca_crt": "root.pem", + "grpc_ssl_credential": "azureclient.ms" + } + }, "BANNER_MESSAGE": { "global": { "state": "enabled", @@ -2759,6 +2782,13 @@ "motd": "Some message of the day", "logout": "Some logout message" } + }, + "MEMORY_STATISTICS": { + "memory_statistics": { + "enabled": "false", + "sampling_interval": "5", + "retention_period": "15" + } } }, "SAMPLE_CONFIG_DB_UNKNOWN": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json index 309b64bb06a5..0454700233d8 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/acl.json @@ -174,5 +174,12 @@ }, "ACL_TABLE_L3V4V6_TABLE_TYPE": { "desc": "ACL_TABLE Validate type L3V4V6." + }, + "ACL_RULE_WITH_TUNNEL_TERMINATION_WRONG_TYPE": { + "desc": "ACL Rule with Tunnel Termination", + "eStrKey" : "InvalidValue" + }, + "ACL_RULE_WITH_TUNNEL_TERMINATION": { + "desc": "ACL Rule with Tunnel Termination" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json index 543a985670f3..d8ab57f61074 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/bgp.json @@ -158,43 +158,32 @@ "BGP_PEERRANGE_ALL_VALID": { "desc": "Configure BGP peer range table." }, - "BGP_ALLOWED_PREFIXES_COM_LIST_ALL_VALID": { + "BGP_ALLOWED_PREFIXES_ALL_VALID": { "desc": "Configue BGP allowed prefix list." }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEPLOYMENT": { - "desc": "Invalid default action.", + "BGP_ALLOWED_PREFIXES_INVALID_DEPLOYMENT": { + "desc": "Invalid deployment.", "eStrKey" : "Pattern" }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEFAULT_ACTION": { - "desc": "Invalid default action.", + "BGP_ALLOWED_PREFIXES_INVALID_ID": { + "desc": "Invalid id.", "eStrKey" : "InvalidValue", - "eStr" : ["default_action"] - }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV4": { - "desc": "Invalid IPv4 prefix.", - "eStrKey" : "Pattern" + "eStr" : ["id"] }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV6": { - "desc": "Invalid IPv6 prefix.", - "eStrKey" : "Pattern" - }, - "BGP_ALLOWED_PREFIXES_LIST_ALL_VALID": { - "desc": "Configue BGP allowed prefix list." - }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEPLOYMENT": { - "desc": "Invalid default action.", + "BGP_ALLOWED_PREFIXES_INVALID_NEIGHBOR": { + "desc": "Invalid neighbor.", "eStrKey" : "Pattern" }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEFAULT_ACTION": { + "BGP_ALLOWED_PREFIXES_INVALID_DEFAULT_ACTION": { "desc": "Invalid default action.", "eStrKey" : "InvalidValue", "eStr" : ["default_action"] }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV4": { + "BGP_ALLOWED_PREFIXES_INVALID_PREFIXES_IPV4": { "desc": "Invalid IPv4 prefix.", "eStrKey" : "Pattern" }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV6": { + "BGP_ALLOWED_PREFIXES_INVALID_PREFIXES_IPV6": { "desc": "Invalid IPv6 prefix.", "eStrKey" : "Pattern" }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json index 99310fecc6ab..8e834ed08a90 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json @@ -175,6 +175,9 @@ "desc": "Verifying invalid create_only_config_db_buffers value", "eStrKey": "InvalidValue" }, + "DEVICE_METADATA_VALID_SUPPORTING_BULK_COUNTER_GROUPS": { + "desc": "Verifying the supporting_bulk_counter_groups value" + }, "DEVICE_METADATA_VALID_BGP_ROUTER_ID": { "desc": "Verifying bgp_router_id configuration." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json b/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json index 92d96b54f3a1..a508400f26d5 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/flex_counter.json @@ -7,6 +7,14 @@ "eStrKey": "Range", "eStr": "100..4294967295" }, + "FLEX_COUNTER_TABLE_WITH_VALID_BULK_CHUNK_SIZE": { + "desc": "FLEX_COUNTER_TABLE_WITH_VALID_BULK_CHUNK_SIZE no failure." + }, + "FLEX_COUNTER_TABLE_WITH_INVALID_BULK_CHUNK_SIZE": { + "desc": "Out of range bulk chunk size.", + "eStrKey": "Range", + "eStr": "1..4294967295" + }, "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF": { "desc": "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF no failure." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/grpcclient.json b/src/sonic-yang-models/tests/yang_model_tests/tests/grpcclient.json new file mode 100644 index 000000000000..fd1a3a2ccd3a --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/grpcclient.json @@ -0,0 +1,5 @@ +{ + "GRPCCLIENT_CONFIG_CHANGE_VERBOSITY_LEVEL": { + "desc": "Consume verbosity level config changes. " + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/loopback.json b/src/sonic-yang-models/tests/yang_model_tests/tests/loopback.json index 9fdbb0a5e352..e71ae255bd74 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/loopback.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/loopback.json @@ -9,5 +9,9 @@ }, "LOOPBACK_INTERFACE_VALID_NAT_ZONE_RANGE": { "desc": "Configure valid value for nat zone." + }, + "LOOPBACK_INVALID_INTERFACE_NAME_LENGTH": { + "desc": "Configure invalid value for loopback interface name length.", + "eStr" : "Invalid interface name length, it must not exceed 16 characters." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/memory_statistics.json b/src/sonic-yang-models/tests/yang_model_tests/tests/memory_statistics.json new file mode 100644 index 000000000000..e466e9cf92c6 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/memory_statistics.json @@ -0,0 +1,18 @@ +{ + "MEMORY_STATISTICS_VALID_CONFIG": { + "desc": "Configuring memory statistics with valid values." + }, + "MEMORY_STATISTICS_WITH_INVALID_SAMPLING_INTERVAL": { + "desc": "Configuring memory statistics with an invalid sampling_interval ( out of acceptable range).", + "eStrKey": "Range", + "eStr": "3..15" + }, + "MEMORY_STATISTICS_WITH_INVALID_RETENTION_PERIOD": { + "desc": "Configuring memory statistics with an invalid retention_period (out of acceptable range).", + "eStrKey": "Range", + "eStr": "1..30" + }, + "MEMORY_STATISTICS_WITH_ENABLE_FEATURE": { + "desc": "Enabling memory statistics feature with valid values." + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json index a795a7e3b3c2..9ca18040e228 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vlan.json @@ -11,6 +11,10 @@ "eStrKey" : "Pattern", "eStr": ["Vlan"] }, + "INVALID_LONG_VLAN_NAME": { + "desc": "INVALID VLAN_NAME FIELD IN VLAN TABLE.", + "eStrKey" : "Pattern" + }, "WRONG_FAMILY_WITH_IP_PREFIX": { "desc": "Configure Wrong family with ip-prefix for VLAN_Interface Table", "eStrKey" : "Must" @@ -93,7 +97,7 @@ }, "VLAN_CREATE_VLAN_WITH_MISSMATCHING_NAME": { "desc": "Create Vlan so that name doesn't match id", - "eStr": "The vlanid must correspond to the VLAN name" + "eStr": "The vlanid must correspond to the VLAN name" }, "IP_PREFIX_WITHOUT_CREATNG_VLAN": { "desc": "Create IP on not created Vlan", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vrf.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vrf.json index 73e31ee109cc..fb0bdc85a2c1 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vrf.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vrf.json @@ -6,6 +6,10 @@ "desc": "Configure wrong value for vrf name.", "eStr" : ["Invalid", "VRF name"] }, + "VRF_TEST_INVALID_LONG__NAME": { + "desc": "Configure invalid length value for vrf name.", + "eStr" : "Invalid interface name length, it must not exceed 16 characters." + }, "VRF_TEST_WITH_FALLBACK": { "desc": "Configure VRF with fallback in VRF table." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/vxlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests/vxlan.json index 778ab68a644f..c064500fbfa5 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/vxlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/vxlan.json @@ -18,14 +18,19 @@ "eStrKey": "Range" }, "VXLAN_TUNNEL_NAME_VALID_TEST": { - "desc": "Tunnel Name string length 30 is valid" + "desc": "Tunnel Name string length 15 is valid" + }, + "VXLAN_TUNNEL_NAME_INVALID_LENGTH_TEST": { + "desc": "Tunnel Name string length exceeding 16 is invalid", + "eStr" : "Invalid interface name length, it must not exceed 16 characters." }, "VXLAN_TUNNEL_NAME_INVALID_TEST": { "desc": "Tunnel Name string length 0 is invalid", - "eStrKey": "Must" + "eStr" : "Invalid interface name length, it must not exceed 16 characters." }, "VXLAN_TUNNEL_NAME_VALID_DST_IPV4_TEST": { - "desc": "Valid IPv4 Destination Address" + "desc": "Valid IPv4 Destination Address", + "eStr" : "Invalid interface name length, it must not exceed 16 characters." }, "VXLAN_TUNNEL_NAME_VALID_DST_IPV6_TEST": { "desc": "Valid IPv6 Destination Address" diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json index c50fd8c71a6a..75692f1a2dd5 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/acl.json @@ -1698,5 +1698,55 @@ ] } } + }, + "ACL_RULE_WITH_TUNNEL_TERMINATION_WRONG_TYPE": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "TUNNEL_TERM_TABLE", + "PRIORITY": 9981, + "TUNNEL_TERM": "whatever", + "RULE_NAME": "Rule_1" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "TUNNEL_TERM_TABLE", + "policy_desc": "TUNNEL_TERM_TABLE", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L3" + } + ] + } + } + }, + "ACL_RULE_WITH_TUNNEL_TERMINATION": { + "sonic-acl:sonic-acl": { + "sonic-acl:ACL_RULE": { + "ACL_RULE_LIST": [ + { + "ACL_TABLE_NAME": "TUNNEL_TERM_TABLE", + "PRIORITY": 9981, + "TUNNEL_TERM": "true", + "RULE_NAME": "Rule_1" + } + ] + }, + "sonic-acl:ACL_TABLE": { + "ACL_TABLE_LIST": [ + { + "ACL_TABLE_NAME": "TUNNEL_TERM_TABLE", + "policy_desc": "TUNNEL_TERM_TABLE", + "ports": [ "" ], + "stage": "INGRESS", + "type": "L3" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json index 6ecc90c38699..4c06316deede 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/bgp.json @@ -1422,95 +1422,228 @@ } }, - "BGP_ALLOWED_PREFIXES_COM_LIST_ALL_VALID": { + "BGP_ALLOWED_PREFIXES_ALL_VALID": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], "BGP_ALLOWED_PREFIXES_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", "id": "4", "community": "123:123", "default_action": "permit", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] - }, + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", - "id": "5", - "community": "456:456", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", "default_action": "permit", - "prefixes_v4": ["10.10.0.0/24", "10.11.0.0/24"], - "prefixes_v6": ["fc00:f1::/64", "fc00:a1::/64"] + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } ] } } }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEPLOYMENT": { + "BGP_ALLOWED_PREFIXES_INVALID_DEPLOYMENT": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "INVALID_DEPLOYMENT", + "id": "4", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ + { + "deployment": "INVALID_DEPLOYMENT", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], "BGP_ALLOWED_PREFIXES_COM_LIST": [ { - "deployment": "DEPLOYMENTID", + "deployment": "INVALID_DEPLOYMENT", "id": "4", "community": "123:123", - "default_action": "permitall", + "default_action": "permit", "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ + { + "deployment": "INVALID_DEPLOYMENT", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } ] } } }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_DEFAULT_ACTION": { + "BGP_ALLOWED_PREFIXES_INVALID_ID": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "INVALID_ID", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "INVALID_ID", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], "BGP_ALLOWED_PREFIXES_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", - "id": "4", + "id": "INVALID_ID", "community": "123:123", - "default_action": "permitall", + "default_action": "permit", "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "INVALID_ID", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } ] } } }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV4": { + "BGP_ALLOWED_PREFIXES_INVALID_NEIGHBOR": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { - "BGP_ALLOWED_PREFIXES_COM_LIST": [ + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ { "deployment": "DEPLOYMENT_ID", "id": "4", + "neighbor": "INVALID_NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "INVALID_NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", "community": "123:123", "default_action": "permit", - "prefixes_v4": ["10.0.0.0/48", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } ] } } }, - "BGP_ALLOWED_PREFIXES_COM_LIST_INVALID_PREFIXES_IPV6": { + "BGP_ALLOWED_PREFIXES_INVALID_DEFAULT_ACTION": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { + "BGP_ALLOWED_PREFIXES_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "default_action": "INVALID_DEFAULT_ACTION", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "INVALID_DEFAULT_ACTION", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], "BGP_ALLOWED_PREFIXES_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", "id": "4", "community": "123:123", - "default_action": "permit", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0./24"], - "prefixes_v6": ["fc00:f0::/129", "fc00:a0::/64"] + "default_action": "INVALID_DEFAULT_ACTION", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", + "default_action": "INVALID_DEFAULT_ACTION", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } ] } } }, - "BGP_ALLOWED_PREFIXES_LIST_ALL_VALID": { + "BGP_ALLOWED_PREFIXES_INVALID_PREFIXES_IPV4": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { "BGP_ALLOWED_PREFIXES_LIST": [ @@ -1518,51 +1651,47 @@ "deployment": "DEPLOYMENT_ID", "id": "4", "default_action": "permit", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] - }, + "prefixes_v4": ["10.0.0.0/100"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ { "deployment": "DEPLOYMENT_ID", - "id": "5", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", "default_action": "permit", - "prefixes_v4": ["10.10.0.0/24", "10.11.0.0/24"], - "prefixes_v6": ["fc00:f1::/64", "fc00:a1::/64"] + "prefixes_v4": ["10.1.0.0/24 ge 100"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } - ] - } - } - }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEPLOYMENT": { - "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { - "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { - "BGP_ALLOWED_PREFIXES_LIST": [ + ], + "BGP_ALLOWED_PREFIXES_COM_LIST": [ { - "deployment": "DEPLOYMENTID", + "deployment": "DEPLOYMENT_ID", "id": "4", - "default_action": "permitall", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.2.0.0/24 le 100"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } - ] - } - } - }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_DEFAULT_ACTION": { - "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { - "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { - "BGP_ALLOWED_PREFIXES_LIST": [ + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", "id": "4", - "default_action": "permitall", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.2.0.0/24 eq 28"], + "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64 ge 96", "fc00:b0::/64 le 96"] } ] } } }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV4": { + "BGP_ALLOWED_PREFIXES_INVALID_PREFIXES_IPV6": { "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { "BGP_ALLOWED_PREFIXES_LIST": [ @@ -1570,23 +1699,41 @@ "deployment": "DEPLOYMENT_ID", "id": "4", "default_action": "permit", - "prefixes_v4": ["10.0.0.0/48", "10.1.0.0/24"], - "prefixes_v6": ["fc00:f0::/64", "fc00:a0::/64"] + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:f0::/200"] } - ] - } - } - }, - "BGP_ALLOWED_PREFIXES_LIST_INVALID_PREFIXES_IPV6": { - "sonic-bgp-allowed-prefix:sonic-bgp-allowed-prefix": { - "sonic-bgp-allowed-prefix:BGP_ALLOWED_PREFIXES": { - "BGP_ALLOWED_PREFIXES_LIST": [ + ], + "BGP_ALLOWED_PREFIXES_NEIGH_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:a0::/64 ge 200", "fc00:b0::/64 le 96"] + } + ], + "BGP_ALLOWED_PREFIXES_COM_LIST": [ { "deployment": "DEPLOYMENT_ID", "id": "4", + "community": "123:123", + "default_action": "permit", + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:b0::/64 le 200"] + } + ], + "BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST": [ + { + "deployment": "DEPLOYMENT_ID", + "id": "4", + "neighbor": "NEIGHBOR_TYPE", + "neighbor_type": "DUMMY_NEIGHBOR_TYPE", + "community": "123:123", "default_action": "permit", - "prefixes_v4": ["10.0.0.0/24", "10.1.0.0./24"], - "prefixes_v6": ["fc00:f0::/129", "fc00:a0::/64"] + "prefixes_v4": ["10.0.0.0/24", "10.1.0.0/24 ge 28", "10.2.0.0/24 le 28"], + "prefixes_v6": ["fc00:b0::/64 eq 96"] } ] } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index 44f0966c8b18..9662741046b6 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -482,6 +482,15 @@ } } }, + "DEVICE_METADATA_VALID_SUPPORTING_BULK_COUNTER_GROUPS": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "supporting_bulk_counter_groups": ["QUEUE_WATERMARK_STAT_COUNTER","PG_WATERMARK_STAT_COUNTER"] + } + } + } + }, "DEVICE_METADATA_VALID_BGP_ROUTER_ID": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json index 60386bdd72ea..cd39cd899c78 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/flex_counter.json @@ -137,6 +137,150 @@ } } }, + "FLEX_COUNTER_TABLE_WITH_VALID_BULK_CHUNK_SIZE": { + "sonic-flex_counter:sonic-flex_counter": { + "sonic-flex_counter:FLEX_COUNTER_TABLE": { + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "DEBUG_COUNTER": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 100, + "POLL_INTERVAL": 10000 + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 100, + "POLL_INTERVAL": 10000 + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 100, + "POLL_INTERVAL": 1000 + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 60000 + }, + "PORT_RATES": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 100, + "POLL_INTERVAL": 10000 + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 100, + "POLL_INTERVAL": 10000 + }, + "ACL": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "TUNNEL": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "FLOW_CNT_TRAP": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "FLOW_CNT_ROUTE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "WRED_ECN_QUEUE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "WRED_ECN_PORT": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 1000 + } + } + } + }, + "FLEX_COUNTER_TABLE_WITH_INVALID_BULK_CHUNK_SIZE": { + "sonic-flex_counter:sonic-flex_counter": { + "sonic-flex_counter:FLEX_COUNTER_TABLE": { + "BUFFER_POOL_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "DEBUG_COUNTER": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PFCWD": { + "FLEX_COUNTER_STATUS": "enable" + }, + "PG_DROP": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 0, + "POLL_INTERVAL": 10000 + }, + "PG_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 0, + "POLL_INTERVAL": 10000 + }, + "PORT": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 0, + "POLL_INTERVAL": 1000 + }, + "PORT_BUFFER_DROP": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 60000 + }, + "PORT_RATES": { + "FLEX_COUNTER_STATUS": "enable" + }, + "QUEUE": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 0, + "POLL_INTERVAL": 10000 + }, + "QUEUE_WATERMARK": { + "FLEX_COUNTER_STATUS": "enable", + "BULK_CHUNK_SIZE": 0, + "POLL_INTERVAL": 10000 + }, + "ACL": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "TUNNEL": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "FLOW_CNT_TRAP": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "FLOW_CNT_ROUTE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "WRED_ECN_QUEUE": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 10000 + }, + "WRED_ECN_PORT": { + "FLEX_COUNTER_STATUS": "enable", + "POLL_INTERVAL": 1000 + } + } + } + }, "FLOW_COUNTER_ROUTE_PATTERN_TABLE_WITH_VRF": { "sonic-vrf:sonic-vrf":{ "sonic-vrf:VRF": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json index cdad6fe31f53..0c8327a8991a 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json @@ -10,7 +10,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50052" + "port": "50052", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -26,7 +28,9 @@ "gnmi": { "client_auth": "up", "log_level": "2", - "port": "50052" + "port": "50052", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -42,7 +46,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "abc" + "port": "abc", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -59,7 +65,9 @@ "client_auth": "true", "log_level": "2", "port": "50051", - "save_on_set": "wrong" + "save_on_set": "wrong", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -76,7 +84,9 @@ "client_auth": "true", "log_level": "2", "port": "50052", - "save_on_set": "false" + "save_on_set": "false", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/grpcclient.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/grpcclient.json new file mode 100644 index 000000000000..79d92d1212aa --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/grpcclient.json @@ -0,0 +1,12 @@ +{ + "GRPCCLIENT_CONFIG_CHANGE_VERBOSITY_LEVEL": { + "sonic-grpcclient:sonic-grpcclient": { + "sonic-grpcclient:GRPCCLIENT": { + "sonic-grpcclient:config": + { + "log_level": "info" + } + } + } + } +} diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/loopback.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/loopback.json index 9ebb48556256..274b52548461 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/loopback.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/loopback.json @@ -52,5 +52,25 @@ ] } } + }, + "LOOPBACK_INVALID_INTERFACE_NAME_LENGTH": { + "sonic-loopback-interface:sonic-loopback-interface": { + "sonic-loopback-interface:LOOPBACK_INTERFACE": { + "LOOPBACK_INTERFACE_IPPREFIX_LIST": [ + { + "family": "IPv4", + "ip-prefix": "10.0.0.1/30", + "name": "lo1lo1lo1lo1lo1lo1", + "scope": "global" + } + ], + "LOOPBACK_INTERFACE_LIST": [ + { + "name": "lo1lo1lo1lo1lo1lo1", + "nat_zone": "2" + } + ] + } + } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/memory_statistics.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/memory_statistics.json new file mode 100644 index 000000000000..22529187c958 --- /dev/null +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/memory_statistics.json @@ -0,0 +1,47 @@ +{ + "MEMORY_STATISTICS_VALID_CONFIG": { + "sonic-memory-statistics:sonic-memory-statistics": { + "sonic-memory-statistics:MEMORY_STATISTICS": { + "memory_statistics":{ + "enabled": "false", + "sampling_interval": "5", + "retention_period": "15" + } + } + } + }, + "MEMORY_STATISTICS_WITH_INVALID_SAMPLING_INTERVAL": { + "sonic-memory-statistics:sonic-memory-statistics": { + "sonic-memory-statistics:MEMORY_STATISTICS": { + "memory_statistics":{ + "enabled": "true", + "sampling_interval": "45", + "retention_period": "20" + } + } + } + }, + "MEMORY_STATISTICS_WITH_INVALID_RETENTION_PERIOD": { + "sonic-memory-statistics:sonic-memory-statistics": { + "sonic-memory-statistics:MEMORY_STATISTICS": { + "memory_statistics":{ + "enabled": "true", + "sampling_interval": "5", + "retention_period": "45" + } + } + } + }, + "MEMORY_STATISTICS_WITH_ENABLE_FEATURE": { + "sonic-memory-statistics:sonic-memory-statistics": { + "sonic-memory-statistics:MEMORY_STATISTICS": { + "memory_statistics":{ + "enabled": "true", + "sampling_interval": "5", + "retention_period": "30" + } + } + } + } + +} \ No newline at end of file diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json index 18e708262e74..2d3bd08f5d20 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json @@ -10,7 +10,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50051" + "port": "50051", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -26,7 +28,9 @@ "gnmi": { "client_auth": "up", "log_level": "2", - "port": "50051" + "port": "50051", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -42,7 +46,9 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "abc" + "port": "abc", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -59,7 +65,9 @@ "client_auth": "true", "log_level": "2", "port": "50051", - "save_on_set": "wrong" + "save_on_set": "wrong", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } @@ -76,7 +84,9 @@ "client_auth": "true", "log_level": "2", "port": "50051", - "save_on_set": "false" + "save_on_set": "false", + "enable_crl": "true", + "crl_expire_duration": "86400" } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json index b4288472cfa3..762287c82cd5 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vlan.json @@ -45,6 +45,23 @@ } } }, + "INVALID_LONG_VLAN_NAME": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "admin_status": "up", + "description": "server_vlan", + "dhcp_servers": [ + "10.186.72.56" + ], + "mtu": "9100", + "name": "Vlan123456789012" + } + ] + } + } + }, "DHCP_SERVER_INCORRECT_FORMAT": { "sonic-vlan:sonic-vlan": { "sonic-vlan:VLAN": { @@ -827,7 +844,7 @@ "type": "SPAN", "src_port": "Ethernet1", "dst_port": "Ethernet2" - }] + }] } } }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vrf.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vrf.json index 082ec022f81b..09ca521fe82d 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vrf.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vrf.json @@ -19,6 +19,16 @@ } }, + "VRF_TEST_INVALID_LONG__NAME": { + "sonic-vrf:sonic-vrf": { + "sonic-vrf:VRF": { + "VRF_LIST": [{ + "name": "VrfNameTooLong!!!" + }] + } + } + }, + "VRF_TEST_WITH_FALLBACK": { "sonic-vrf:sonic-vrf": { "sonic-vrf:VRF": { diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vxlan.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vxlan.json index 64c26d3e9ef7..79046b116724 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/vxlan.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/vxlan.json @@ -166,6 +166,37 @@ } }, "VXLAN_TUNNEL_NAME_VALID_TEST": { + "sonic-vlan:sonic-vlan": { + "sonic-vlan:VLAN": { + "VLAN_LIST": [ + { + "name": "Vlan100" + } + ] + } + }, + "sonic-vxlan:sonic-vxlan": { + "sonic-vxlan:VXLAN_TUNNEL": { + "VXLAN_TUNNEL_LIST": [ + { + "name": "15CharsLongName", + "src_ip": "1.2.3.4" + } + ] + }, + "sonic-vxlan:VXLAN_TUNNEL_MAP": { + "VXLAN_TUNNEL_MAP_LIST": [ + { + "name": "15CharsLongName", + "mapname": "map_100_Vlan100", + "vlan": "Vlan100", + "vni": "16777214" + } + ] + } + } + }, + "VXLAN_TUNNEL_NAME_INVALID_LENGTH_TEST": { "sonic-vlan:sonic-vlan": { "sonic-vlan:VLAN": { "VLAN_LIST": [ diff --git a/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang b/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang index 65f5dab74733..ace3ddc2f1d0 100644 --- a/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang +++ b/src/sonic-yang-models/yang-models/sonic-bgp-allowed-prefix.yang @@ -29,8 +29,125 @@ module sonic-bgp-allowed-prefix { "Initial revision."; } + typedef bgp-allowed-ipv4-prefix { + type string { + pattern + '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}' + + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + + '/(([0-9])|([1-2][0-9])|(3[0-2]))' + + '( (le|ge) (([0-9])|([1-2][0-9])|(3[0-2])))?'; + } + description + "The bgp-allowed-ipv4-prefix type represents an IPv4 address prefix + in BGP allowed prefix format. + + The string format is an inet:ipv4-prefix (defined in RFC 6991) value + appended with an optional suffix. + + The optional suffix consists of a string 'le' or 'ge' followed by a + number which is less than or equal to 32."; + } + + typedef bgp-allowed-ipv6-prefix { + type string { + pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}' + + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|' + + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}' + + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))' + + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))' + + '( (le|ge) (([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))?'; + pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|' + + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)' + + '(/.+)' + + '( (le|ge) (([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))?'; + } + description + "The bgp-allowed-ipv6-prefix type represents an IPv6 address prefix + in BGP allowed prefix format. + + The string format is an inet:ipv6-prefix (defined in RFC 6991) value + appended with an optional suffix. + + The optional suffix consists of a string 'le' or 'ge' followed by a + number which is less than or equal to 128."; + } + container sonic-bgp-allowed-prefix { container BGP_ALLOWED_PREFIXES { + list BGP_ALLOWED_PREFIXES_LIST { + key "deployment id"; + + leaf deployment { + type string { + pattern "DEPLOYMENT_ID"; + } + description "BGP allowed prefix list key type"; + } + + leaf id { + type uint32; + description "BGP allowed prefix list deployment id"; + } + + leaf default_action { + type rpolsets:routing-policy-action-type; + description "Permit/Deny action for BGP allow prefix list"; + } + + leaf-list prefixes_v4 { + type bgp-allowed-ipv4-prefix; + description "BGP V4 allowed prefix list"; + } + + leaf-list prefixes_v6 { + type bgp-allowed-ipv6-prefix; + description "BGP V6 allowed prefix list"; + } + } + + list BGP_ALLOWED_PREFIXES_NEIGH_LIST { + key "deployment id neighbor neighbor_type"; + + leaf deployment { + type string { + pattern "DEPLOYMENT_ID"; + } + description "BGP allowed prefix list key type"; + } + + leaf id { + type uint32; + description "BGP allowed prefix list deployment id"; + } + + leaf neighbor { + type string { + pattern "NEIGHBOR_TYPE"; + } + description "BGP allowed prefix list neighbor"; + } + + leaf neighbor_type { + type string; + description "BGP allowed prefix list neighbor type"; + } + + leaf default_action { + type rpolsets:routing-policy-action-type; + description "Permit/Deny action for BGP allow prefix list"; + } + + leaf-list prefixes_v4 { + type bgp-allowed-ipv4-prefix; + description "BGP V4 allowed prefix list"; + } + + leaf-list prefixes_v6 { + type bgp-allowed-ipv6-prefix; + description "BGP V6 allowed prefix list"; + } + } + list BGP_ALLOWED_PREFIXES_COM_LIST { key "deployment id community"; @@ -57,18 +174,18 @@ module sonic-bgp-allowed-prefix { } leaf-list prefixes_v4 { - type inet:ipv4-prefix; + type bgp-allowed-ipv4-prefix; description "BGP V4 allowed prefix list"; } leaf-list prefixes_v6 { - type inet:ipv6-prefix; + type bgp-allowed-ipv6-prefix; description "BGP V6 allowed prefix list"; } } - list BGP_ALLOWED_PREFIXES_LIST { - key "deployment id"; + list BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST { + key "deployment id neighbor neighbor_type community"; leaf deployment { type string { @@ -82,18 +199,35 @@ module sonic-bgp-allowed-prefix { description "BGP allowed prefix list deployment id"; } + leaf neighbor { + type string { + pattern "NEIGHBOR_TYPE"; + } + description "BGP allowed prefix list neighbor"; + } + + leaf neighbor_type { + type string; + description "BGP allowed prefix list neighbor type"; + } + + leaf community { + type string; + description "BGP allowed prefix list deployment community"; + } + leaf default_action { type rpolsets:routing-policy-action-type; description "Permit/Deny action for BGP allow prefix list"; } leaf-list prefixes_v4 { - type inet:ipv4-prefix; + type bgp-allowed-ipv4-prefix; description "BGP V4 allowed prefix list"; } leaf-list prefixes_v6 { - type inet:ipv6-prefix; + type bgp-allowed-ipv6-prefix; description "BGP V6 allowed prefix list"; } } diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 0d0607fd3cab..0f2f53e8d583 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -250,6 +250,11 @@ module sonic-device_metadata { created, regardless of the CONFIG_DB buffers configuration."; } + leaf-list supporting_bulk_counter_groups { + type string; + description "This field contains a list of counter groups that support bulk operation."; + } + leaf bgp_router_id { type inet:ipv4-address; description "BGP Router identifier"; diff --git a/src/sonic-yang-models/yang-models/sonic-flex_counter.yang b/src/sonic-yang-models/yang-models/sonic-flex_counter.yang index 11e09f9f2a9f..9f4a10feddba 100644 --- a/src/sonic-yang-models/yang-models/sonic-flex_counter.yang +++ b/src/sonic-yang-models/yang-models/sonic-flex_counter.yang @@ -41,6 +41,12 @@ module sonic-flex_counter { } } + typedef bulk_chunk_size { + type uint32 { + range 1..4294967295; + } + } + description "FLEX_COUNTER_TABLE part of config_db.json"; /* below are in alphabetical order */ @@ -102,6 +108,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container PG_WATERMARK { @@ -115,6 +124,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container PORT { @@ -128,6 +140,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container PORT_RATES { @@ -151,6 +166,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container QUEUE { @@ -164,6 +182,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container QUEUE_WATERMARK { @@ -177,6 +198,9 @@ module sonic-flex_counter { leaf POLL_INTERVAL { type poll_interval; } + leaf BULK_CHUNK_SIZE { + type bulk_chunk_size; + } } container RIF { diff --git a/src/sonic-yang-models/yang-models/sonic-gnmi.yang b/src/sonic-yang-models/yang-models/sonic-gnmi.yang index f7c4fef33c53..d33ea35083dd 100644 --- a/src/sonic-yang-models/yang-models/sonic-gnmi.yang +++ b/src/sonic-yang-models/yang-models/sonic-gnmi.yang @@ -76,6 +76,15 @@ module sonic-gnmi { description "Flag for enabling save on set."; } + leaf enable_crl { + type boolean; + description "Flag for enable certificate revocation list."; + } + + leaf crl_expire_duration { + type uint32; + description "Certificate revocation list cache expire duration."; + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-grpcclient.yang b/src/sonic-yang-models/yang-models/sonic-grpcclient.yang new file mode 100644 index 000000000000..69d7b83d2672 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-grpcclient.yang @@ -0,0 +1,79 @@ +module sonic-grpcclient { + namespace "http://github.com/sonic-net/sonic-grpcclient"; + prefix grpcclient; + yang-version 1.1; + + organization + "SONiC"; + + contact + "SONiC"; + + description + "SONiC DualToR grpc client configuration data"; + + revision 2024-10-14 { + description + "Initial revision"; + } + + container sonic-grpcclient { + + container GRPCCLIENT { + + container config { + + leaf type { + type enumeration { + enum secure; + enum insecure; + } + description "grpc client security level. "; + } + + leaf auth_level { + type enumeration { + enum server; + enum client; + } + description "grpc client auth level. "; + } + + leaf log_level { + type enumeration { + enum info; + enum notice; + enum debug; + enum warning; + enum critical; + } + description "grpc client log level. "; + } + } + + container certs { + + leaf client_crt { + type string; + description "grpc client certificate file name "; + + } + + leaf client_key { + type string; + description "grpc client key file name "; + } + + leaf ca_crt { + type string; + description "grpc client root cert"; + } + + leaf grpc_ssl_credential { + type string; + description "grpc client ssl credential"; + } + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-logger.yang b/src/sonic-yang-models/yang-models/sonic-logger.yang index 76c7afde8834..691bbb59cf8c 100644 --- a/src/sonic-yang-models/yang-models/sonic-logger.yang +++ b/src/sonic-yang-models/yang-models/sonic-logger.yang @@ -67,6 +67,11 @@ module sonic-logger{ } default SYSLOG; } + + leaf require_manual_refresh { + type stypes:boolean_type; + description "When updating the log level, will refresh configuration via SIGHUP sent to the process."; + } }/* end of list LOGGER_LIST */ }/* end of LOGGER container */ }/* end of sonic-logger container */ diff --git a/src/sonic-yang-models/yang-models/sonic-loopback-interface.yang b/src/sonic-yang-models/yang-models/sonic-loopback-interface.yang index 5d64b61c59c5..4a012b894333 100644 --- a/src/sonic-yang-models/yang-models/sonic-loopback-interface.yang +++ b/src/sonic-yang-models/yang-models/sonic-loopback-interface.yang @@ -36,7 +36,7 @@ module sonic-loopback-interface { key "name"; leaf name{ - type string; + type stypes:interface_name; } leaf vrf_name { diff --git a/src/sonic-yang-models/yang-models/sonic-memory-statistics.yang b/src/sonic-yang-models/yang-models/sonic-memory-statistics.yang new file mode 100644 index 000000000000..f69344db53b5 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-memory-statistics.yang @@ -0,0 +1,47 @@ +module sonic-memory-statistics { + yang-version 1.1; + + namespace "http://github.com/sonic-net/sonic-memory-statistics"; + prefix memstats; + + import sonic-types { + prefix stypes; + } + + description "YANG module for configuring memory statistics in SONiC-based OS."; + + revision 2024-07-22 { + description "First Revision"; + } + + container sonic-memory-statistics { + container MEMORY_STATISTICS { + description "Memory statistics configuration parameters."; + container memory_statistics{ + leaf enabled { + type boolean; + default false; + description "Flag to enable or disable memory statistics collection. If set to false, the memory statistics collection will stop."; + } + + leaf sampling_interval { + type uint8 { + range "3..15"; + } + units "minutes"; + default 5; + description "Time interval in minutes for sampling memory statistics. Valid range, is between 3 minutes to 30 minutes."; + } + + leaf retention_period { + type uint8 { + range "1..30"; + } + units "days"; + default 15; + description "Retention period for memory statistics data, defined in days. Valid range is from 1 day to 30 days."; + } + } + } + } +} \ No newline at end of file diff --git a/src/sonic-yang-models/yang-models/sonic-portchannel.yang b/src/sonic-yang-models/yang-models/sonic-portchannel.yang index 2c61f4eb54ad..2694abb544e9 100644 --- a/src/sonic-yang-models/yang-models/sonic-portchannel.yang +++ b/src/sonic-yang-models/yang-models/sonic-portchannel.yang @@ -53,7 +53,6 @@ module sonic-portchannel { leaf name { type string { - length 1..128; pattern 'PortChannel[0-9]{1,4}'; } } @@ -63,7 +62,7 @@ module sonic-portchannel { range 1..1024; } } - + leaf mode { description "PortChannel SwitchPort Mode possible values are routed|access|trunk. Default value for mode is routed."; type stypes:switchport_mode; diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry.yang b/src/sonic-yang-models/yang-models/sonic-telemetry.yang index 5cbdf2bd9330..239f23666dda 100644 --- a/src/sonic-yang-models/yang-models/sonic-telemetry.yang +++ b/src/sonic-yang-models/yang-models/sonic-telemetry.yang @@ -76,6 +76,15 @@ module sonic-telemetry { description "Flag for enabling save on set."; } + leaf enable_crl { + type boolean; + description "Flag for enable certificate revocation list."; + } + + leaf crl_expire_duration { + type uint32; + description "Certificate revocation list cache expire duration."; + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-vlan.yang b/src/sonic-yang-models/yang-models/sonic-vlan.yang index ff3a1f2f64af..5d6f898c768c 100644 --- a/src/sonic-yang-models/yang-models/sonic-vlan.yang +++ b/src/sonic-yang-models/yang-models/sonic-vlan.yang @@ -266,7 +266,7 @@ module sonic-vlan { path "/lag:sonic-portchannel/lag:PORTCHANNEL/lag:PORTCHANNEL_LIST/lag:name"; } } - must "not(/sms:sonic-mirror-session/sms:MIRROR_SESSION/sms:MIRROR_SESSION_LIST[sms:dst_port=current()])" + must "not(/sms:sonic-mirror-session/sms:MIRROR_SESSION/sms:MIRROR_SESSION_LIST[sms:dst_port=current()])" { error-message "Port is used as a destination port in a mirror session."; } diff --git a/src/sonic-yang-models/yang-models/sonic-vrf.yang b/src/sonic-yang-models/yang-models/sonic-vrf.yang index 83836a81c1c5..33fe100097fc 100644 --- a/src/sonic-yang-models/yang-models/sonic-vrf.yang +++ b/src/sonic-yang-models/yang-models/sonic-vrf.yang @@ -6,6 +6,10 @@ module sonic-vrf { prefix sonic-ext; } + import sonic-types { + prefix stypes; + } + organization "SONiC"; @@ -28,7 +32,7 @@ module sonic-vrf { key "name"; leaf name { - type string { + type stypes:interface_name { pattern "Vrf[a-zA-Z0-9_-]+" { error-message "Invalid VRF name"; error-app-tag vrf-name-invalid; diff --git a/src/sonic-yang-models/yang-models/sonic-vxlan.yang b/src/sonic-yang-models/yang-models/sonic-vxlan.yang index 7e0b0339561c..75ae6dc83eca 100644 --- a/src/sonic-yang-models/yang-models/sonic-vxlan.yang +++ b/src/sonic-yang-models/yang-models/sonic-vxlan.yang @@ -49,9 +49,8 @@ module sonic-vxlan { max-elements 1; leaf name { - type string; + type stypes:interface_name; } - must "string-length(name) != 0"; leaf src_ip { type inet:ip-address; diff --git a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 index ebaffe96e8d9..f1a0629f3222 100644 --- a/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-acl.yang.j2 @@ -282,6 +282,11 @@ module sonic-acl { pattern '0[xX][0-9a-fA-F]{1,2}/0[xX][0-9a-fA-F]{1,2}'; } } + + leaf TUNNEL_TERM { + description "Tunnel Termination Flag"; + type boolean; + } } /* end of ACL_RULE_LIST */ } diff --git a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 index df9b3c91dd8f..7a5b0b5a03e3 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -316,6 +316,16 @@ module sonic-types { } } + typedef interface_name { + description "Represents IFNAMSIZ defined in "; + type string { + length 1..15 { + error-message "Invalid interface name length, it must not exceed 16 characters."; + error-app-tag invalid-interface-name-length; + } + } + } + typedef hash-field { description "Represents native hash field"; type enumeration { diff --git a/src/system-health/health_checker/sysmonitor.py b/src/system-health/health_checker/sysmonitor.py index c07b58b5489b..1f95006befcf 100755 --- a/src/system-health/health_checker/sysmonitor.py +++ b/src/system-health/health_checker/sysmonitor.py @@ -104,6 +104,11 @@ def task_worker(self): logger.log_info("Start Listening to systemd bus (pid {0})".format(os.getpid())) self.subscribe_sysbus() + def task_stop(self): + # FIXME: Gracefully stop `loop.run()`. + self._task_process.kill() + return True + def task_notify(self, msg): if self.task_stopping_event.is_set(): return @@ -481,9 +486,11 @@ def system_service(self): from queue import Empty # Queue to receive the STATEDB and Systemd state change event - while not self.task_stopping_event.is_set(): + while True: try: msg = self.myQ.get(timeout=QUEUE_TIMEOUT) + if msg == "stop": + break event = msg["unit"] event_src = msg["evt_src"] event_time = msg["time"] @@ -503,15 +510,10 @@ def system_service(self): monitor_statedb_table.task_stop() def task_worker(self): - if self.task_stopping_event.is_set(): - return self.system_service() def task_stop(self): - # Signal the process to stop - self.task_stopping_event.set() - #Clear the resources of mpmgr- Queue - self.mpmgr.shutdown() + self.myQ.put("stop") # Wait for the process to exit self._task_process.join(self._stop_timeout_secs) @@ -519,12 +521,8 @@ def task_stop(self): # If the process didn't exit, attempt to kill it if self._task_process.is_alive(): logger.log_notice("Attempting to kill sysmon main process with pid {}".format(self._task_process.pid)) - os.kill(self._task_process.pid, signal.SIGKILL) - - if self._task_process.is_alive(): - logger.log_error("Sysmon main process with pid {} could not be killed".format(self._task_process.pid)) + self._task_process.kill() + self._task_process.join() return False return True - - diff --git a/src/system-health/scripts/healthd b/src/system-health/scripts/healthd index 28bffeb7129b..3d250be6a8ef 100644 --- a/src/system-health/scripts/healthd +++ b/src/system-health/scripts/healthd @@ -5,6 +5,9 @@ System health monitor daemon for SONiC """ +from swsscommon.swsscommon import RestartWaiter +RestartWaiter.waitAdvancedBootDone() + import signal import threading import time diff --git a/src/system-health/tests/test_system_health.py b/src/system-health/tests/test_system_health.py index 4aeb3b18f041..179971844907 100644 --- a/src/system-health/tests/test_system_health.py +++ b/src/system-health/tests/test_system_health.py @@ -22,6 +22,7 @@ from .mock_connector import MockConnector swsscommon.SonicV2Connector = MockConnector +swsscommon.RestartWaiter = MagicMock() test_path = os.path.dirname(os.path.abspath(__file__)) telemetry_path = os.path.join(test_path, 'telemetry') @@ -48,7 +49,7 @@ snmp-subagent EXITED Oct 19 01:53 AM """ device_info.get_platform = MagicMock(return_value='unittest') - + device_runtime_metadata = {"DEVICE_RUNTIME_METADATA": {"ETHERNET_PORTS_PRESENT":True}} def no_op(*args, **kwargs): @@ -843,7 +844,7 @@ def test_publish_system_status_allowed_status(): sysmon = Sysmonitor() sysmon.publish_system_status('UP') sysmon.publish_system_status('DOWN') - + expected_calls = [ (("UP",), {}), (("DOWN",), {}) @@ -856,7 +857,7 @@ def test_publish_system_status(): sysmon = Sysmonitor() sysmon.publish_system_status('UP') result = swsscommon.SonicV2Connector.get(MockConnector, 0, "SYSTEM_READY|SYSTEM_STATE", 'Status') - assert result == "UP" + assert result == "UP" @patch('health_checker.sysmonitor.Sysmonitor.get_all_system_status', test_get_all_system_status_ok()) @patch('health_checker.sysmonitor.Sysmonitor.publish_system_status', test_publish_system_status())