diff --git a/.ci/fpga/devices/job-build-fpga-b310.yml b/.ci/fpga/devices/job-build-fpga-b310.yml new file mode 100644 index 000000000..f2235aa71 --- /dev/null +++ b/.ci/fpga/devices/job-build-fpga-b310.yml @@ -0,0 +1,108 @@ +# +# Copyright 2025 Ettus Research, a National Instruments Brand +# +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# Description: +# +# This template defines a stages-based pipeline for building B310 FPGA +# targets. +# +# See https://aka.ms/yaml for pipeline YAML documentation. +# + +parameters: +## Optional parameters +# Option to ignore cached artifacts (if available) and perform +# a clean IP build. +- name: clean_ip_build + type: boolean + default: false +# Number of parallel jobs to use for IP build +- name: num_ip_jobs + type: number + default: 5 +# Option to publish intermediate files +- name: publish_int_files + type: boolean + default: false +# Package and publish images +- name: package_and_publish_images + type: boolean + default: true +# Package access in the SDR server ('Internal' or 'Public') +- name: package_access + type: string + default: 'Internal' +# From where to pull FPGA bitfiles if we're not building them +- name: fpga_imgs_source + type: string + default: 'Mono Pipeline' +# B310 FPGA targets to build +- name: b310_full_targets_matrix + type: object + default: + B310_REPLAY: + image_core: b310_replay_rfnoc_image_core.yml + target_name: B310 + image_core_name: usrp_b310_fpga_replay + artifact_name: B310_REPLAY + timeout: 720 + max_attempts: 2 + B310_FIFO: + image_core: b310_fifo_rfnoc_image_core.yml + target_name: B310 + image_core_name: usrp_b310_fpga_fifo + artifact_name: B310_FIFO + timeout: 720 + max_attempts: 2 +- name: b310_reduced_targets_matrix + type: object + default: + B310_REPLAY: + image_core: b310_replay_rfnoc_image_core.yml + target_name: B310 + image_core_name: usrp_b310_fpga_replay + artifact_name: B310_REPLAY + timeout: 720 + max_attempts: 2 + B310_FIFO: + image_core: b310_fifo_rfnoc_image_core.yml + target_name: B310 + image_core_name: usrp_b310_fpga_fifo + artifact_name: B310_FIFO + timeout: 720 + max_attempts: 2 + + +stages: + +### START: B310 stages + +- stage: provide_b310_fpga_images_stage + displayName: Provide B310 FPGA Images + dependsOn: analyze_changeset + variables: + UhdTestList: $[stageDependencies.analyze_changeset.analyze.outputs['gen_testlist.UhdTestList']] + BuildRequired: $[or( + contains(stageDependencies.analyze_changeset.analyze.outputs['gen_testlist.UhdTestList'], 'fpga.usrp3.b310'), + contains(stageDependencies.analyze_changeset.analyze.outputs['gen_testlist.UhdTestList'], 'fpga.usrp3.all') + )] + jobs: + - template: ../templates/jobs-provide-fpga-artifacts.yml + parameters: + id: b310 + device_name: B310 + ip_target: B310_IP + package_name: b310_fpga_default + clean_ip_build: ${{ parameters.clean_ip_build }} + num_ip_jobs: ${{ parameters.num_ip_jobs }} + publish_int_files: ${{ parameters.publish_int_files }} + package_and_publish_images: ${{ parameters.package_and_publish_images }} + package_access: ${{ parameters.package_access }} + fpga_imgs_source: ${{ parameters.fpga_imgs_source }} + top_dir: uhddev/fpga/usrp3/top/b300 + target_full_matrix: ${{ parameters.b310_full_targets_matrix }} + target_reduced_matrix: ${{ parameters.b310_reduced_targets_matrix }} + +### END: B310 stages diff --git a/.ci/fpga/templates/job-build-fpga-all.yml b/.ci/fpga/templates/job-build-fpga-all.yml index 6db73079b..f6bbab3a4 100644 --- a/.ci/fpga/templates/job-build-fpga-all.yml +++ b/.ci/fpga/templates/job-build-fpga-all.yml @@ -127,3 +127,15 @@ stages: rfnoc_include_dir: ${{ parameters.rfnoc_include_dir }} ### END: E320 stages + +### START: B310 stages + +- template: ../devices/job-build-fpga-b310.yml + parameters: + clean_ip_build: ${{ parameters.clean_ip_build }} + publish_int_files: ${{ parameters.publish_int_files }} + package_and_publish_images: ${{ parameters.package_and_publish_images }} + package_access: ${{ parameters.package_access }} + fpga_imgs_source: ${{ parameters.fpga_imgs_source }} + +### END: B310 stages diff --git a/.ci/templates/job-uhd-devtest-b310.yml b/.ci/templates/job-uhd-devtest-b310.yml new file mode 100644 index 000000000..5dfb43a00 --- /dev/null +++ b/.ci/templates/job-uhd-devtest-b310.yml @@ -0,0 +1,30 @@ +parameters: +- name: uhdSrcDir + type: string +- name: uhdArtifactSource + type: string + default: current +- name: uhdFpgaArtifactSource + type: string + default: current +- name: fpga_imgs_source + type: string + +jobs: +- template: job-uhd-devtest.yml + parameters: + suiteName: 'b310_test' + knownHost: '|1|1Ir2Dw9+Rd+biaBZN5Y7qMvSHjw=|Sy23JOB66jDO1soYN3LheEsiS88= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLxbGUC5lRxvFvnY4tDCNa6FpVE6QKXorgcc2Tn/6OhG2uVnSA7PlH+viTI/6ij8vkJqEuHpUdWJoPgm8NaYx8w=' + toolset: 'make' + uhdSrcDir: '${{ parameters.uhdSrcDir }}' + uhdArtifactSource: '${{ parameters.uhdArtifactSource }}' + uhdFpgaArtifactSource: '${{ parameters.uhdFpgaArtifactSource }}' + fpga_imgs_source: '${{ parameters.fpga_imgs_source }}' + dutMatrix: + b310: + devType: 'b3xx' + devModel: 'b310' + devName: 'b310-ATS' + devSerial: '3665BFD' + devBus: 'pcie' + devtestPattern: 'b3xx' diff --git a/.ci/templates/job-uhd-devtest.yml b/.ci/templates/job-uhd-devtest.yml index c8e82b07f..3e06c355b 100644 --- a/.ci/templates/job-uhd-devtest.yml +++ b/.ci/templates/job-uhd-devtest.yml @@ -243,6 +243,26 @@ jobs: condition: and(succeeded(), eq(variables.devType, 'x300'), eq(variables.devBus, 'ip')) displayName: Run x3xx devtest on $(devName) $(devFpga) + - script: | + cd $(Agent.TempDirectory) + python3 -m venv devtest_venv + source devtest_venv/bin/activate + pip3 install -r $(Build.SourcesDirectory)/uhddev/host/tests/devtest/requirements.txt + pip3 install -r $(Build.SourcesDirectory)/uhddev/.ci/utils/requirements.txt + mkdir -p $(Common.TestResultsDirectory)/devtest + cd $(Common.TestResultsDirectory)/devtest + export PATH=$(Build.BinariesDirectory)/uhddev/build/utils:$(Build.BinariesDirectory)/uhddev/build/examples:$PATH + export LD_LIBRARY_PATH=$(Build.BinariesDirectory)/uhddev/build/lib:$LD_LIBRARY_PATH + export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build-installed/share/uhd/images/:$HOME/adrv9032_images + python3 ${{ parameters.uhdSrcDir }}/uhddev/host/tests/devtest/run_testsuite.py \ + --src-dir ${{ parameters.uhdSrcDir }}/uhddev/host/tests/devtest \ + --devtest-pattern $(devtestPattern) --args type=$(devType),serial=$(devSerial) \ + --build-type Release --build-dir $(Build.BinariesDirectory)/uhddev/build \ + --python-interp python3 --xml + continueOnError: true + condition: and(succeeded(), eq(variables.devType, 'b3xx')) + displayName: Run b3xx devtest on $(devName) + - script: | cat $(Common.TestResultsDirectory)/devtest/log*.log echo "" @@ -256,7 +276,7 @@ jobs: $(Common.TestResultsDirectory)/devtest/devtestresults.xml continueOnError: true displayName: Format devtest xml - condition: and(always(), eq(variables.devType, 'b200')) + condition: and(always(), or(eq(variables.devType, 'b200'), eq(variables.devType, 'b3xx'))) - script: | cd $(Common.TestResultsDirectory)/devtest @@ -266,7 +286,7 @@ jobs: $(Common.TestResultsDirectory)/devtest/devtestresults.xml continueOnError: true displayName: Format devtest xml - condition: and(always(), ne(variables.devType, 'b200')) + condition: and(always(), and(ne(variables.devType, 'b200'), ne(variables.devType, 'b3xx'))) - publish: $(Common.TestResultsDirectory) artifact: test-logs-devtest-$(devName)-$(devModel)-$(devFpga)-run$(System.JobAttempt) diff --git a/.ci/templates/job-uhd-rf-tests-b310.yml b/.ci/templates/job-uhd-rf-tests-b310.yml new file mode 100644 index 000000000..0285e6704 --- /dev/null +++ b/.ci/templates/job-uhd-rf-tests-b310.yml @@ -0,0 +1,39 @@ +parameters: +- name: uhdSrcDir + type: string +- name: uhdArtifactSource + type: string + default: current +- name: uhdFpgaArtifactSource + type: string + default: current +- name: fpga_imgs_source + type: string +- name: testDevices + type: string + default: 'b3xx' +- name: extra_rf_test_args + type: string + default: '' + +jobs: +- template: job-uhd-rf-tests.yml + parameters: + toolset: 'make' + uhdSrcDir: '${{ parameters.uhdSrcDir }}' + uhdArtifactSource: '${{ parameters.uhdArtifactSource }}' + uhdFpgaArtifactSource: ${{ parameters.uhdFpgaArtifactSource }} + fpga_imgs_source: '${{ parameters.fpga_imgs_source }}' + extra_rf_test_args: '${{ parameters.extra_rf_test_args }}' + dutMatrix: + b310: + devType: 'b3xx' + devModel: 'b310' + devName: 'b310-ATS' + devSerial: '3665BFD' + devBus: 'pcie' + devFpga: 'defaultFPGA' + devtestPattern: 'b3xx' + pytestDUT: 'b310' + pytestAtsConfig: 'b300_ats' + pipelineAgent: 'b310-dev2' diff --git a/.ci/templates/job-uhd-rf-tests.yml b/.ci/templates/job-uhd-rf-tests.yml index a57239d12..e3f109159 100644 --- a/.ci/templates/job-uhd-rf-tests.yml +++ b/.ci/templates/job-uhd-rf-tests.yml @@ -253,6 +253,13 @@ jobs: --test_selector $(Build.SourcesDirectory)/ettus-rts/config/remote/python_tests/pytests \ --results_path $(Common.TestResultsDirectory)/pytest/rf/$(devFpga) \ $(parameters.extra_rf_test_args)" || rf_test_status=$? + elif [ "$(devType)" = "b3xx" ]; then + cd $(Build.SourcesDirectory)/ettus-rts/config/remote/python_tests/pytests + export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build-installed/share/uhd/images/:$HOME/adrv9032_images + uhd_usrp_probe --args type=$(devType),serial=$(devSerial) + python3 ../automated_main.py --ats_config $(pytestAtsConfig) --dut $(pytestDUT) \ + --results_path $(Common.TestResultsDirectory)/pytest/rf/$(devFpga) ${{ parameters.extra_rf_test_args }} || rf_test_status=$? + cd $(Build.SourcesDirectory)/ettus-rts/config/remote/python_tests fi python3 automated_main.py --ats_config $(pytestAtsConfig) --dut $(pytestDUT) \ --test_selector $(Build.SourcesDirectory)/ettus-rts/config/remote/python_tests/pytests_non_rf \ diff --git a/.ci/templates/job-uhd-streaming-tests.yml b/.ci/templates/job-uhd-streaming-tests.yml index 02eb6e16a..72f827b9f 100644 --- a/.ci/templates/job-uhd-streaming-tests.yml +++ b/.ci/templates/job-uhd-streaming-tests.yml @@ -130,6 +130,16 @@ dutNumSendFrames: '' sfpInt0: '$(x440_sfpInt0)' sfpInt1: '$(x440_sfpInt1)' + B310: + timeoutInMinutes: 120 + dutName: 'streaming-b310' + dutFamily: 'b3xx' + dutType: 'b310' + dutFPGA: 'B310' + dutResource: '$(b310_resource)' + dutNameId: '' + dutNumRecvFrames: '' + dutNumSendFrames: '' jobs: - ${{ each dutEntry in parameters.dutMatrix }}: @@ -149,6 +159,7 @@ jobs: dutAddr: ${{ dutEntry.value.dutAddr }} dutSecondAddr: ${{ dutEntry.value.dutSecondAddr }} dutFPGA: ${{ dutEntry.value.dutFPGA }} + dutResource: ${{ dutEntry.value.dutResource }} dutNameId: ${{ dutEntry.value.dutNameId }} dutNumRecvFrames: ${{ dutEntry.value.dutNumRecvFrames }} dutNumSendFrames: ${{ dutEntry.value.dutNumSendFrames }} @@ -228,7 +239,7 @@ jobs: - download: ${{ parameters.uhdFpgaArtifactSource }} artifact: $(FPGA_ARTIFACT) displayName: Download FPGA images (from artifacts) - condition: and(not(or(failed(), canceled())), ne(variables.dutGetFpgaImagesMethod, 'uhd_images_downloader')) + condition: and(not(or(failed(), canceled())), ne(variables.dutGetFpgaImagesMethod, 'uhd_images_downloader'), not(eq(variables.dutFamily, 'b3xx'))) - task: ExtractFiles@1 inputs: @@ -370,12 +381,32 @@ jobs: sleep 5 exit $EXITCODE displayName: setup interfaces for use without DPDK + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx'))) timeoutInMinutes: 5 + + - script: | + if [ "$(dutFamily)" = "b3xx" ]; then + cd ${{ parameters.uhdSrcDir }}/host/tests/streaming_performance + sudo ./setupPCIe.sh -v -s + EXITCODE=$? + sleep 5 + exit $EXITCODE + fi + displayName: setup B310 PCIe interface + condition: and(succeeded(), eq(variables.dutFamily, 'b3xx')) + timeoutInMinutes: 1 - script: | rm -fv TEST-* workingDirectory: $(Common.TestResultsDirectory) displayName: remove old test results no dpdk + + - script: | + export UHD_IMAGES_DIR=$(Build.BinariesDirectory)/uhddev/build-installed/share/uhd/images/:$HOME/adrv9032_images + echo '##vso[task.setvariable variable=UHD_IMAGES_DIR]'$UHD_IMAGES_DIR + echo UHD_IMAGES_DIR=$UHD_IMAGES_DIR + displayName: Set UHD_IMAGES_DIR for B3xx + condition: and(succeeded(), eq(variables.dutFamily, 'b3xx')) - script: | echo "##[group]Printing Environment" @@ -396,7 +427,7 @@ jobs: --capture=tee-sys -o junit_logging=all \ --dut_type $(dutType) --test_length ${{ parameters.testLength }} \ --uhd_build_dir $(Build.BinariesDirectory)/uhddev/build --junitxml $(Common.TestResultsDirectory)/TEST-$(dutName)-no_DPDK.xml \ - --addr $(dutAddr) --second_addr $(dutSecondAddr) --mgmt_addr $USRP_EMB_TARGET_IP --name $(dutNameId) \ + --addr $(dutAddr) --second_addr $(dutSecondAddr) --mgmt_addr $USRP_EMB_TARGET_IP --name $(dutNameId) --resource $(dutResource) \ --result_csv $(Common.TestResultsDirectory)/TEST-$(dutName)-no_DPDK.csv \ --num_recv_frames $(dutNumRecvFrames) --num_send_frames $(dutNumSendFrames) env: @@ -417,12 +448,14 @@ jobs: fi sleep 5 displayName: setup interfaces for use raw udp streaming + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx'))) timeoutInMinutes: 5 - script: | rm -fv TEST-* workingDirectory: $(Common.TestResultsDirectory) displayName: remove old test results raw udp + condition: and(succeeded(), not(in(variables.dutFamily, 'b3xx'))) - script: | export PYTHON_VERSION=$(python3 -c "import sys; print('python'+str(sys.version_info.major) + '.' + str(sys.version_info.minor))") @@ -482,7 +515,7 @@ jobs: sleep 5 exit $EXITCODE displayName: Setup interfaces for use with DPDK - condition: and(succeeded(), not(eq(variables.dutFamily, 'b200'))) + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx'))) timeoutInMinutes: 5 - ${{ each dpdkVersion in parameters.dpdkVersions }}: @@ -525,7 +558,7 @@ jobs: DPDK_VERSION_STRING=$(utils/uhd_config_info --dpdk-version | awk '{print $3;}') echo "##vso[task.setvariable variable=DPDK_VERSION_STRING]$DPDK_VERSION_STRING" displayName: "[DPDK ${{ dpdkVersion }}] Build UHD for DPDK" - condition: and(succeeded(), not(eq(variables.dutFamily, 'b200')), eq(variables.dpdkDirExists, 'true')) + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx')), eq(variables.dpdkDirExists, 'true')) - script: | config_file="$(Agent.TempDirectory)/uhd_dpdk.conf" @@ -544,7 +577,7 @@ jobs: --fpga_flavor $(dutFPGA) \ --output_path $config_file displayName: "[DPDK ${{ dpdkVersion }}] Provide UHD config file" - condition: and(succeeded(), not(eq(variables.dutFamily, 'b200')), eq(variables.dpdkDirExists, 'true')) + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx')), eq(variables.dpdkDirExists, 'true')) - script: | echo "##[group]Printing Environment" @@ -569,12 +602,12 @@ jobs: UHD_IMAGES_DIR: $(UHD_IMAGES_DIR) continueOnError: true displayName: "[DPDK ${{ dpdkVersion }}] Run streaming tests on $(dutName)" - condition: and(succeeded(), not(eq(variables.dutFamily, 'b200')), eq(variables.dpdkDirExists, 'true')) + condition: and(succeeded(), not(in(variables.dutFamily, 'b200', 'b3xx')), eq(variables.dpdkDirExists, 'true')) - publish: $(Common.TestResultsDirectory) artifact: test-logs-streamingtest-$(dutName)-$(dutFpga)-dpdk$(DPDK_VERSION_STRING)-run$(System.JobAttempt) displayName: "[DPDK ${{ dpdkVersion }}] Upload Test Logs" - condition: and(succeededOrFailed(), not(eq(variables.dutFamily, 'b200')), eq(variables.dpdkDirExists, 'true')) + condition: and(succeededOrFailed(), not(in(variables.dutFamily, 'b200', 'b3xx')), eq(variables.dpdkDirExists, 'true')) - task: PublishTestResults@2 inputs: @@ -585,7 +618,7 @@ jobs: mergeTestResults: true failTaskOnFailedTests: false displayName: "[DPDK ${{ dpdkVersion }}] Upload streaming test results" - condition: and(succeededOrFailed(), not(eq(variables.dutFamily, 'b200')), eq(variables.dpdkDirExists, 'true')) + condition: and(succeededOrFailed(), not(in(variables.dutFamily, 'b200', 'b3xx')), eq(variables.dpdkDirExists, 'true')) - script: | echo "A previous step failed. See steps with warnings." diff --git a/.ci/templates/stages-uhd-pipeline.yml b/.ci/templates/stages-uhd-pipeline.yml index f59e55197..72d2ea673 100644 --- a/.ci/templates/stages-uhd-pipeline.yml +++ b/.ci/templates/stages-uhd-pipeline.yml @@ -29,7 +29,7 @@ parameters: - name: selected_streaming_tests type: string displayName: Streaming Tests Multi-Select (comma-separated) - default: 'B206,B210,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' + default: 'B206,B210,B310,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' - name: create_sbom type: boolean displayName: Create SBOMs @@ -983,6 +983,33 @@ stages: uhdSrcDir: $(Build.SourcesDirectory)/uhddev fpga_imgs_source: ${{ parameters.fpga_imgs_source }} +- stage: test_uhd_b310_stage + displayName: Test UHD B310 + dependsOn: + - analyze_changeset + - build_uhd_stage_linux + - build_gnuradio_stage_linux + - provide_b310_fpga_images_stage + condition: > + and( + succeeded(), + or( + contains(dependencies.analyze_changeset.outputs['analyze.gen_testlist.UhdTestList'], 'hw.rf.all'), + contains(dependencies.analyze_changeset.outputs['analyze.gen_testlist.UhdTestList'], 'hw.rf.b3xx'), + contains(dependencies.analyze_changeset.outputs['analyze.gen_testlist.UhdTestList'], 'devtest.all'), + contains(dependencies.analyze_changeset.outputs['analyze.gen_testlist.UhdTestList'], 'devtest.b3xx') + ) + ) + jobs: + - template: job-uhd-devtest-b310.yml + parameters: + uhdSrcDir: $(Build.SourcesDirectory) + fpga_imgs_source: ${{ parameters.fpga_imgs_source }} + - template: job-uhd-rf-tests-b310.yml + parameters: + uhdSrcDir: $(Build.SourcesDirectory)/uhddev + fpga_imgs_source: ${{ parameters.fpga_imgs_source }} + - stage: uhd_streaming_tests_stage displayName: UHD Streaming Tests dependsOn: diff --git a/.ci/uhd-hardware-test-dev.yml b/.ci/uhd-hardware-test-dev.yml index a320f3fc0..98adfcdc7 100644 --- a/.ci/uhd-hardware-test-dev.yml +++ b/.ci/uhd-hardware-test-dev.yml @@ -18,7 +18,7 @@ parameters: - name: selected_streaming_tests type: string displayName: Streaming Tests Multi-Select (comma-separated) - default: 'B206,B210,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' + default: 'B206,B210,B310,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' - name: run_devtests type: boolean displayName: Run devtests @@ -55,6 +55,14 @@ parameters: type: boolean displayName: Run LabVIEW test default: false +- name: run_b310_devtests + type: boolean + displayName: Run B310 devtests + default: false +- name: run_b310_rf_tests + type: boolean + displayName: Run B310 RF tests + default: false - name: fpga_imgs_source type: string values: @@ -278,6 +286,31 @@ stages: uhdFpgaArtifactSource: ${{ variables.uhdFpgaArtifactSource }} fpga_imgs_source: ${{ variables.fpga_imgs_source }} +- stage: test_b310_rf_tests + displayName: Test B310 RF Tests + dependsOn: [] + condition: ${{ parameters.run_b310_rf_tests }} + jobs: + - template: templates/job-uhd-rf-tests-b310.yml + parameters: + uhdSrcDir: $(Build.SourcesDirectory)/uhddev + uhdArtifactSource: uhd_mono_pipeline + uhdFpgaArtifactSource: ${{ variables.uhdFpgaArtifactSource }} + fpga_imgs_source: ${{ variables.fpga_imgs_source }} + extra_rf_test_args: ${{ parameters.extra_rf_test_args }} + +- stage: test_b310_devtest + displayName: Test B310 Devtest + dependsOn: [] + condition: ${{ parameters.run_b310_devtests }} + jobs: + - template: templates/job-uhd-devtest-b310.yml + parameters: + uhdSrcDir: $(Build.SourcesDirectory) + uhdArtifactSource: uhd_mono_pipeline + uhdFpgaArtifactSource: ${{ variables.uhdFpgaArtifactSource }} + fpga_imgs_source: ${{ variables.fpga_imgs_source }} + - stage: test_x410_rf_tests displayName: Run X410 RF tests dependsOn: [] diff --git a/.ci/uhd-pipeline-pr.yml b/.ci/uhd-pipeline-pr.yml index 0f7a0f637..1573e5f88 100644 --- a/.ci/uhd-pipeline-pr.yml +++ b/.ci/uhd-pipeline-pr.yml @@ -138,7 +138,7 @@ parameters: - name: selected_streaming_tests type: string displayName: Streaming Tests Multi-Select (comma-separated) - default: 'B206,B210,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' + default: 'B206,B210,B310,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' trigger: none diff --git a/.ci/uhd-pipeline.yml b/.ci/uhd-pipeline.yml index 1be9bcfac..79753e0d2 100644 --- a/.ci/uhd-pipeline.yml +++ b/.ci/uhd-pipeline.yml @@ -121,7 +121,7 @@ parameters: - name: selected_streaming_tests type: string displayName: Streaming Tests Multi-Select (comma-separated) - default: 'B206,B210,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' + default: 'B206,B210,B310,X310_XG,X410_CG_400,X410_UC_200,X440_CG_400,X440_CG_1600' trigger: batch: true diff --git a/host/tests/streaming_performance/setupPCIe.sh b/host/tests/streaming_performance/setupPCIe.sh new file mode 100755 index 000000000..6088169db --- /dev/null +++ b/host/tests/streaming_performance/setupPCIe.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# setup script for PCIe streaming performance enhancements +# +# Instructions +# copy this file to the host machine +# the script should be run as root +# sudo ./setupPCIe.sh [-v] [-s] +# +# This script configures CPU governors for optimal performance + +VERBOSE=NO +STATS=NO +INSTALL_DEPS=NO +HELP=NO + +while [[ $# -gt 0 ]]; do + key="$1" + case $key in + -h|--help) + HELP=YES + shift + ;; + -v|--verbose) + VERBOSE=YES + shift + ;; + -s|--stats) + STATS=YES + shift + ;; + --deps) + INSTALL_DEPS=YES + shift + ;; + *) + echo "Unknown option: $1" + echo "Use -h or --help for usage information" + exit 1 + ;; + esac +done + +if [[ "$HELP" == "YES" ]]; then + echo "Usage:" + echo " ./setupPCIe.sh [options]" + echo "" + echo "Setup script for PCIe streaming performance." + echo "Configures CPU cores for performance mode." + echo "" + echo "Options:" + echo " -v, --verbose display extra log messages" + echo " -s, --stats display info about the resulting system configuration" + echo " --deps installs dependencies (cpufrequtils)" + exit 0 +fi + +function log() { + if [[ "$VERBOSE" == "YES" ]]; then + echo "$@" + fi +} + +if [[ "$INSTALL_DEPS" == "YES" ]]; then + apt install -y cpufrequtils + echo "Deps installed. Rerun without --deps flag." + exit 0 +fi + +log "" +log "SETTING CPU GOVERNORS" +for ((i=0;i<$(nproc --all);i++)); do + log "setting core $i to performance" + cpufreq-set -c $i -r -g performance; +done + +function print_config() { + echo "" + echo "CURRENT SYSTEM CONFIG" + echo "----------------------------------------------------------------------" + for ((i=0;i<$(nproc);i++)); do + echo "analyzing cpu $i:" + cpufreq-info -c $i -p + done +} + +if [[ "$STATS" == "YES" ]]; then + print_config +fi + +echo "PCIe performance setup complete." diff --git a/tools/changeset_testlist.yaml b/tools/changeset_testlist.yaml index 075d68b56..64db1c3cf 100644 --- a/tools/changeset_testlist.yaml +++ b/tools/changeset_testlist.yaml @@ -119,6 +119,12 @@ - uhd.build.all - hw.rf.x3xx - hw.rf.n2xx +- re: host/lib/usrp/b300/ + add: + - uhd.build.all + - hw.rf.b3xx + - hw.streaming.b3xx + - devtest.b3xx - re: host/lib/usrp/b200/ add: - uhd.build.all @@ -350,6 +356,12 @@ - re: host/include/uhd/rfnoc/core/n3.._bsp.yml add: - fpga.usrp3.n3xx +- re: fpga/usrp3/top/b300 + add: + - fpga.usrp3.b310 +- re: host/include/uhd/rfnoc/core/b310_bsp.yml + add: + - fpga.usrp3.b310 # CPLD related changes - re: fpga/usrp3/top/x400/cpld