Skip to content

hw: systemd exporter service + driver-probe-error dmesg check#57

Merged
tfcollins merged 3 commits into
mainfrom
tfcollins/systemd-exporter-and-probe-checks
Apr 22, 2026
Merged

hw: systemd exporter service + driver-probe-error dmesg check#57
tfcollins merged 3 commits into
mainfrom
tfcollins/systemd-exporter-and-probe-checks

Conversation

@tfcollins
Copy link
Copy Markdown
Collaborator

Summary

Follow-ups to PR #56 in three independent pieces on top of the
merged re-arch:

  1. Systemd template unit + installer for labgrid-exporter
    (scripts/labgrid-exporter/). Replaces the current
    nohup labgrid-exporter … & disown pattern on each hw exporter
    host with a proper systemd template (labgrid-exporter@<place>).
    After install:

    • sudo systemctl restart labgrid-exporter@<place> on yaml
      change,
    • journalctl -u labgrid-exporter@<place> -f for live logs,
    • Restart=on-failure brings it back after a crash, and the
      exporter auto-starts after a reboot.
  2. hardware_ci.rst — new "Exporter systemd service" section
    covering install, installed file layout, every install flag, and
    day-to-day commands. Cross-linked from the "Adding a new
    hardware node" recipe and two troubleshooting entries (which now
    use systemctl restart labgrid-exporter@<place> as the
    canonical recovery action).

  3. Driver-probe-error check in hw tests — new
    assert_no_probe_errors(dmesg_txt) helper in
    test/hw/hw_helpers.py that catches canonical probe failures
    (probe of <dev> failed with error, overlay-apply errors,
    phandle-resolution errors) while honouring the existing benign
    allowlist + -EPROBE_DEFER retries. Wired into every existing
    assert_no_kernel_faults site. Also restructures
    test_fmcdaq3_vcu118_hw.py to use the board fixture (the
    target fixture it used before skipped the teardown power-off,
    leaving VCU118 energised between runs) and swaps the bespoke
    grep snippet for collect_dmesg + the two assertions, matching
    the structure of the other four hw tests.

Test plan

  • python3 -m py_compile on every edited file
  • pytest --collect-only sees every hw test without import
    errors
  • Smoke test of assert_no_probe_errors with synthetic dmesg
    lines (positive + -EPROBE_DEFER benign + clean)
  • Live deploy of the systemd unit on nuc, then
    sudo systemctl restart labgrid-exporter@nuc + verify
    labgrid-client places still lists nuc
  • Full hardware workflow green on this branch

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

ADI Binding Audit Report

  • Source: /tmp/linux
  • Generated: 2026-04-22T12:16:35+00:00
Metric Value
Total bindings 197
Total compatibles 1167
Known bindings 0
Partially known bindings 0
Undocumented bindings 197
Undocumented compatible entries 1167
Generated templates 0
Skipped existing templates 0
Not generated templates 0

Undocumented bindings

Binding Undocumented compatibles
adi,axi-clkgen.yaml adi,axi-clkgen-2.00.a, adi,axi-clkgen.yaml, adi,zynqmp-axi-clkgen-2.00.a
altr,c5-fpll.yaml adi,extended-name, adi,fractional-carry-bit
clk-ad9545.yaml adi,ad9545, adi,aux-dpll-bw-mhz, adi,compensation-source, adi,current-source-microamp, adi,freq-lock-threshold-ps, adi,output-mode, adi,phase-lock-threshold-ps, adi,pin-nr, adi,pll-loop-bandwidth-uhz, adi,pll-source, adi,profile-priority, adi,r-divider-ratio, adi,ref-crystal, adi,ref-dtol-pbb, adi,ref-frequency-hz, adi,ref-monitor-hysteresis-pbb, adi,ref-validation-timer-ms
adi,adv7511.yaml adi,adv7511, adi,adv7511.yaml, adi,adv7511w, adi,adv7513, adi,input-clock, adi,input-colorspace, adi,input-depth, adi,input-justification, adi,input-style
adi,adv7533.yaml adi,adv7533, adi,adv7533.yaml, adi,adv7535, adi,dsi-lanes
simple-bridge.yaml adi,adv7123
adi,axi-dmac.txt adi,axi-dmac.txt
adi,ds4520-gpio.yaml adi,ds4520-gpio, adi,ds4520-gpio.yaml
adi,ad741x.yaml adi,ad7416, adi,ad7417, adi,ad7418, adi,ad741x.yaml
adi,adm1177.yaml adi,adm1177, adi,adm1177.yaml, adi,shutdown-threshold-microamp, adi,vrange-high-enable
adi,adm1266.yaml adi,adm1266, adi,adm1266.yaml
adi,adm1275.yaml adi,adm1075, adi,adm1272, adi,adm1273, adi,adm1275, adi,adm1275.yaml, adi,adm1276, adi,adm1278, adi,adm1281, adi,adm1293, adi,adm1294, adi,power-sample-average, adi,volt-curr-sample-average
adi,axi-fan-control.yaml adi,axi-fan-control-1.00.a, adi,axi-fan-control.yaml
adi,ltc2945.yaml adi,ltc2945, adi,ltc2945.yaml
adi,ltc2947.yaml adi,accumulator-ctl-pol, adi,gpio-out-pol., adi,ltc2947, adi,ltc2947.yaml
adi,ltc2991.yaml adi,ltc2991, adi,ltc2991.yaml, adi,temperature-enable
adi,ltc2992.yaml adi,ltc2992, adi,ltc2992.yaml
adi,ltc4282.yaml adi,gpio1-mode, adi,gpio2-mode, adi,gpio3-monitor-enable, adi,ltc4282, adi,ltc4282.yaml, adi,rsense-nano-ohms
adi,max31760.yaml adi,max31760, adi,max31760.yaml
adi,max31827.yaml adi,alarm-pol, adi,comp-int, adi,fault-q, adi,max31827, adi,max31827.yaml, adi,max31828, adi,max31829, adi,timeout-enable
adt7475.yaml adi,adt7473, adi,adt7475, adi,adt7475., adi,adt7476, adi,adt7490, adi,adt7490., adi,bypass-attenuator-in0, adi,bypass-attenuator-in1, adi,pin10-function, adi,pin14-function
jedec,jc42.yaml adi,adt7408
lltc,ltc4286.yaml adi,vrange-low-enable
lm75.yaml adi,adt75
national,lm90.yaml adi,adm1032, adi,adt7461, adi,adt7461a, adi,adt7481
adi,adp1050.yaml adi,adp1050, adi,adp1050.yaml, adi,adp1051, adi,adp1055, adi,ltp8800
adi,lt3074.yaml adi,lt3074, adi,lt3074.yaml
adi,max17616.yaml adi,max17616, adi,max17616.yaml
i2c-demux-pinctrl.yaml adi,adv7180, adi,adv7511w, adi,input-clock, adi,input-colorspace, adi,input-depth
adi,adis16201.yaml adi,adis16201, adi,adis16201.yaml, adi,adis16209
adi,adis16240.yaml adi,adis16240, adi,adis16240.yaml
adi,adxl313.yaml adi,adxl312, adi,adxl313, adi,adxl313.yaml, adi,adxl314
adi,adxl345.yaml adi,adxl345, adi,adxl345.yaml, adi,adxl346, adi,adxl375
adi,adxl355.yaml adi,adxl355, adi,adxl355.yaml, adi,adxl359
adi,adxl367.yaml adi,adxl367, adi,adxl367.yaml
adi,adxl372.yaml adi,adxl372, adi,adxl372.yaml
adi,adxl380.yaml adi,adxl380, adi,adxl380.yaml, adi,adxl382
ad7091r5.txt adi,ad7091r5
adi,ad4000.yaml adi,ad4000, adi,ad4000.yaml, adi,ad4001, adi,ad4002, adi,ad4003, adi,ad4004, adi,ad4005, adi,ad4006, adi,ad4007, adi,ad4008, adi,ad4010, adi,ad4011, adi,ad4020, adi,ad4021, adi,ad4022, adi,ad7685, adi,ad7686, adi,ad7687, adi,ad7688, adi,ad7690, adi,ad7691, adi,ad7693, adi,ad7942, adi,ad7946, adi,ad7980, adi,ad7982, adi,ad7983, adi,ad7984, adi,ad7988-1, adi,ad7988-5, adi,adaq4001, adi,adaq4003, adi,gain-milli, adi,high-z-input, adi,sdi-pin
adi,ad4030.yaml adi,ad4030-24, adi,ad4030.yaml, adi,ad4032-24, adi,ad4630-16, adi,ad4630-24, adi,ad4632-16, adi,ad4632-24
adi,ad4062.yaml adi,ad4060, adi,ad4062, adi,ad4062.yaml
adi,ad4130.yaml adi,ad4130, adi,ad4130.yaml, adi,excitation-pin-0, adi,excitation-pin-1, adi,reference-select
adi,ad4134-spi-engine.yaml adi,ad4134-spi-engine, adi,ad4134-spi-engine.yaml
adi,ad4134.yaml adi,ad4134, adi,ad4134.yaml, adi,spi-engine
adi,ad4170-4.yaml adi,ad4170-4, adi,ad4170-4.yaml, adi,ad4190-4, adi,ad4195-4, adi,excitation-ac, adi,excitation-current-0-microamp, adi,excitation-current-1-microamp, adi,excitation-current-2-microamp, adi,excitation-current-3-microamp, adi,excitation-pin-0, adi,excitation-pin-1, adi,excitation-pin-2, adi,excitation-pin-3, adi,negative-reference-buffer, adi,positive-reference-buffer, adi,reference-select, adi,sensor-type, adi,vbias-pins
adi,ad4630.yaml adi,ad4030-24, adi,ad4032-24, adi,ad4630-16, adi,ad4630-20, adi,ad4630-24, adi,ad4630.yaml, adi,ad4632-16, adi,ad4632-20, adi,ad4632-24, adi,ad463x, adi,adaq4216, adi,adaq4220, adi,adaq4224, adi,clock-mode, adi,dual-data-rate, adi,lane-mode, adi,out-data-mode, adi,pga-gpios, adi,spi-trigger
adi,ad4695.yaml adi,ad4695, adi,ad4695.h, adi,ad4695.h., adi,ad4695.yaml, adi,ad4696, adi,ad4697, adi,ad4698
adi,ad7091r5.yaml adi,ad7091r2, adi,ad7091r4, adi,ad7091r5, adi,ad7091r5.yaml, adi,ad7091r8
adi,ad7124.yaml adi,ad7124-4, adi,ad7124-8, adi,ad7124.yaml, adi,buffered-negative, adi,buffered-positive, adi,reference-select
adi,ad7173.yaml adi,ad4111, adi,ad4112, adi,ad4114, adi,ad4115, adi,ad4116, adi,ad7172-2, adi,ad7172-4, adi,ad7173-8, adi,ad7173.yaml, adi,ad7175-2, adi,ad7175-8, adi,ad7176-2, adi,ad7177-2, adi,current-channel, adi,reference-select
adi,ad7191.yaml adi,ad7191, adi,ad7191.yaml, adi,odr-value, adi,pga-value
adi,ad7192.yaml adi,ad7190, adi,ad7192, adi,ad7192.yaml, adi,ad7193, adi,ad7194, adi,ad7195, adi,buffer-enable, adi,burnout-currents-enable, adi,refin2-pins-enable, adi,rejection-60-hz-enable
adi,ad7280a.yaml adi,acquisition-time-ns, adi,ad7280a, adi,ad7280a.yaml, adi,thermistor-termination, adi,voltage-alert-last-chan
adi,ad7291.yaml adi,ad7291, adi,ad7291.yaml
adi,ad7292.yaml adi,ad7292, adi,ad7292.yaml
adi,ad7298.yaml adi,ad7298, adi,ad7298.yaml
adi,ad7380.yaml adi,ad7380, adi,ad7380-4, adi,ad7380.yaml, adi,ad7381, adi,ad7381-4, adi,ad7383, adi,ad7383-4, adi,ad7384, adi,ad7384-4, adi,ad7386, adi,ad7386-4, adi,ad7387, adi,ad7387-4, adi,ad7388, adi,ad7388-4, adi,ad7389-4, adi,adaq4370-4, adi,adaq4380-4, adi,adaq4381-4, adi,gain-milli
adi,ad7476.yaml adi,ad7091, adi,ad7091r, adi,ad7273, adi,ad7274, adi,ad7276, adi,ad7277, adi,ad7278, adi,ad7466, adi,ad7467, adi,ad7468, adi,ad7475, adi,ad7476, adi,ad7476.yaml, adi,ad7476a, adi,ad7477, adi,ad7477a, adi,ad7478, adi,ad7478a, adi,ad7495, adi,ad7910, adi,ad7920, adi,ad7940
adi,ad7606.yaml adi,ad7605-4, adi,ad7606-4, adi,ad7606-6, adi,ad7606-8, adi,ad7606.yaml, adi,ad7606b, adi,ad7616, adi,conversion-start-gpios, adi,first-data-gpios, adi,oversampling-ratio-gpios
adi,ad7625.yaml adi,ad7625, adi,ad7625.yaml, adi,ad7626, adi,ad7960, adi,ad7961
adi,ad7768-1.yaml adi,ad7768-1, adi,ad7768-1.yaml, adi,sync-in-gpios
adi,ad7768.yaml adi,ad7768, adi,ad7768-4, adi,ad7768.yaml, adi,data-lines
adi,ad7780.yaml adi,ad7170, adi,ad7171, adi,ad7780, adi,ad7780.yaml, adi,ad7781, adi,filter-gpios, adi,gain-gpios
adi,ad7923.yaml adi,ad7904, adi,ad7908, adi,ad7914, adi,ad7918, adi,ad7923, adi,ad7923.yaml, adi,ad7924, adi,ad7927, adi,ad7928
adi,ad7944.yaml adi,ad7944, adi,ad7944.yaml, adi,ad7985, adi,ad7986, adi,always-turbo, adi,spi-mode
adi,ad7949.yaml adi,ad7682, adi,ad7689, adi,ad7949, adi,ad7949.yaml, adi,internal-ref-microvolt
adi,ad799x.yaml adi,ad7991, adi,ad7992, adi,ad7993, adi,ad7994, adi,ad7995, adi,ad7997, adi,ad7998, adi,ad7999, adi,ad799x.yaml
adi,ad9081.yaml adi,ad9081, adi,ad9081.h, adi,ad9081.yaml, adi,ad9082, adi,ad9177, adi,ad9207, adi,ad9209, adi,ad9986, adi,ad9988, adi,adc-frequency-hz, adi,channelizer-paths, adi,channelizer-paths., adi,crossbar-select, adi,dac-frequency-hz, adi,decimation, adi,full-scale-current-ua, adi,gain, adi,interpolation, adi,jesd-links, adi,main-data-paths, adi,nco-frequency-shift-hz, adi,nco-mixer-mode, adi,nyquist-zone, adi,pa-protection-gpio-as-pa-enable, adi,pa-protection-long-avg-enable, adi,pa-protection-long-avg-threshold, adi,pa-protection-long-avg-time, adi,pa-protection-rotation-mode, adi,pa-protection-soft-off-enable, adi,pa-protection-soft-off-ramp-rate, adi,pa-protection-soft-off-triggers, adi,rx-adcs, adi,tx-dacs
adi,ad9083.yaml adi,ad9083, adi,ad9083.h, adi,ad9083.yaml, adi,backoff, adi,bits-per-sample, adi,cic_decimation, adi,control-bits-per-sample, adi,converter-resolution, adi,converters-per-device, adi,fc-hz, adi,finmax-hz, adi,frames-per-multiframe, adi,g_decimation, adi,h_decimation, adi,hp-en, adi,j_decimation, adi,lanes-per-device, adi,nco0_datapath_mode, adi,nco0_freq-hz, adi,nco1_freq-hz, adi,nco2_freq-hz, adi,octets-per-frame, adi,rterm-ohms, adi,subclass, adi,vmax-microvolt
adi,ad9208.txt adi,ad9208.txt
adi,ad9361.txt adi,ad9361.txt
adi,ad9467.yaml adi,ad9265, adi,ad9434, adi,ad9467, adi,ad9467.yaml, adi,ad9643, adi,ad9649, adi,ad9652
adi,adaq8092.yaml adi,adaq8092, adi,adaq8092.yaml
adi,adar1000.yaml adi,adar1000, adi,adar1000.yaml, adi,phasetable-name
adi,adrv903x.yaml adi,adrv9032, adi,adrv9032r, adi,adrv903x.yaml, adi,arm-firmware-name, adi,device-config-name, adi,rx-gaintable-channel-masks, adi,rx-gaintable-channel-masks., adi,rx-gaintable-names, adi,rx-gaintable-names., adi,stream-firmware-name
adi,axi-adc.yaml adi,axi-adc-10.0.a, adi,axi-adc.yaml
adi,axi-pulse-capture.yaml adi,axi-pulse-capture-1.00.a, adi,axi-pulse-capture.yaml
adi,ltc2308.yaml adi,ltc2308, adi,ltc2308.yaml
adi,ltc2358.yaml adi,ltc2353-16, adi,ltc2353-18, adi,ltc2357-16, adi,ltc2357-18, adi,ltc2358-16, adi,ltc2358-18, adi,ltc2358.yaml, adi,softspan-code
adi,ltc2471.yaml adi,ltc2461, adi,ltc2463, adi,ltc2471, adi,ltc2471.yaml, adi,ltc2473
adi,max11410.yaml adi,input-mode, adi,max11410, adi,max11410.yaml, adi,reference
adi,pulsar.yaml adi,pulsar, adi,pulsar,ad4003, adi,pulsar,ad4007, adi,pulsar,ad4011, adi,pulsar,ad4020, adi,pulsar,ad4021, adi,pulsar,ad4022, adi,pulsar,ad7682, adi,pulsar,ad7683, adi,pulsar,ad7684, adi,pulsar,ad7685, adi,pulsar,ad7686, adi,pulsar,ad7687, adi,pulsar,ad7688, adi,pulsar,ad7689, adi,pulsar,ad7690, adi,pulsar,ad7691, adi,pulsar,ad7693, adi,pulsar,ad7694, adi,pulsar,ad7699, adi,pulsar,ad7942, adi,pulsar,ad7946, adi,pulsar,ad7949, adi,pulsar,ad7980, adi,pulsar,ad7982, adi,pulsar,ad7983, adi,pulsar,ad7984, adi,pulsar,ad7988-1, adi,pulsar,ad7988-5, adi,pulsar,adaq4003, adi,pulsar.yaml, adi,single-channel, adi,temp-sensor
lltc,ltc2387.yaml adi,use-two-lanes
renesas,rcar-gyroadc.yaml adi,ad7476
adi,ad74115.yaml adi,ad74115.yaml, adi,ad74115h, adi,ch-func, adi,conv2-mux, adi,conv2-range-microvolt, adi,dac-bipolar, adi,digital-input-sink-range-high, adi,gpio0-mode, adi,gpio1-mode, adi,gpio2-mode, adi,gpio3-mode
adi,ad74413r.yaml adi,ad74412r, adi,ad74413r, adi,ad74413r.h, adi,ad74413r.yaml, adi,ch-func, adi,gpo-comparator
adi,one-bit-adc-dac.yaml adi,one-bit-adc-dac, adi,one-bit-adc-dac.yaml
ad916x-amp.yaml adi,ad9166-amp
adi,ad8366.yaml adi,ad8366, adi,ad8366.yaml, adi,ada4961, adi,adl5240, adi,adrf5702, adi,adrf5703, adi,adrf5720, adi,adrf5730, adi,adrf5731, adi,hmc1018a, adi,hmc1019a, adi,hmc1119, adi,hmc271a, adi,hmc792a
adi,ada4250.yaml adi,ada4250, adi,ada4250.yaml
adi,adl5580.yaml adi,adl5580, adi,adl5580.yaml, adi,ms-itrm, adi,ms-otrm, adi,prg-cpeak, adi,prg-itrm, adi,prg-otrm
adi,hmc425a.yaml adi,adrf5740, adi,hmc425a, adi,hmc425a.yaml, adi,hmc540s, adi,ltc6373
adi,adar300x.yaml adi,adar3000, adi,adar3001, adi,adar3002, adi,adar3003, adi,adar300x.yaml
adi,ad7150.yaml adi,ad7150, adi,ad7150.yaml, adi,ad7151, adi,ad7156
adi,ad7746.yaml adi,ad7745, adi,ad7746, adi,ad7746.yaml, adi,ad7747, adi,exca-output-en, adi,exca-output-invert, adi,excb-output-en, adi,excb-output-invert, adi,excitation-vdd-permille
adi,ad3530r.yaml adi,ad3530, adi,ad3530r, adi,ad3530r.yaml, adi,ad3531, adi,ad3531r
adi,ad3552r.yaml adi,ad3541r, adi,ad3542r, adi,ad3551r, adi,ad3552r, adi,ad3552r.yaml, adi,gain-offset, adi,gain-scaling-n, adi,gain-scaling-p, adi,output-range-microvolt, adi,rfb-ohms
adi,ad5064.yaml adi,ad5024, adi,ad5025, adi,ad5044, adi,ad5045, adi,ad5064, adi,ad5064-1, adi,ad5064.yaml, adi,ad5065, adi,ad5625, adi,ad5625r-1v25, adi,ad5625r-2v5, adi,ad5627, adi,ad5627r-1v25, adi,ad5627r-2v5, adi,ad5628-1, adi,ad5628-2, adi,ad5629-1, adi,ad5629-2, adi,ad5629-3, adi,ad5645r-1v25, adi,ad5645r-2v5, adi,ad5647r-1v25, adi,ad5647r-2v5, adi,ad5648-1, adi,ad5648-2, adi,ad5665, adi,ad5665r-1v25, adi,ad5665r-2v5, adi,ad5666-1, adi,ad5666-2, adi,ad5667, adi,ad5667r-1v25, adi,ad5667r-2v5, adi,ad5668-1, adi,ad5668-2, adi,ad5668-3, adi,ad5669-1, adi,ad5669-2, adi,ad5669-3
adi,ad5360.yaml adi,ad5360, adi,ad5360.yaml, adi,ad5361, adi,ad5363, adi,ad5370, adi,ad5371, adi,ad5372, adi,ad5373
adi,ad5380.yaml adi,ad5380-3, adi,ad5380-5, adi,ad5380.yaml, adi,ad5381-3, adi,ad5381-5, adi,ad5382-3, adi,ad5382-5, adi,ad5383-3, adi,ad5383-5, adi,ad5384-3, adi,ad5384-5, adi,ad5390-3, adi,ad5390-5, adi,ad5391-3, adi,ad5391-5, adi,ad5392-3, adi,ad5392-5
adi,ad5421.yaml adi,ad5421, adi,ad5421.yaml
adi,ad5449.yaml adi,ad5415, adi,ad5426, adi,ad5429, adi,ad5432, adi,ad5439, adi,ad5443, adi,ad5449, adi,ad5449.yaml
adi,ad5504.yaml adi,ad5501, adi,ad5504, adi,ad5504.yaml
adi,ad5592r.yaml adi,ad5592r, adi,ad5592r.h, adi,ad5592r.yaml, adi,ad5593r, adi,mode, adi,off-state
adi,ad5624r.yaml adi,ad5624r.yaml, adi,ad5624r3, adi,ad5624r5, adi,ad5644r3, adi,ad5644r5, adi,ad5664r3, adi,ad5664r5
adi,ad5686.yaml adi,ad5310r, adi,ad5672r, adi,ad5674r, adi,ad5676, adi,ad5676r, adi,ad5679r, adi,ad5681r, adi,ad5682r, adi,ad5683, adi,ad5683r, adi,ad5684, adi,ad5684r, adi,ad5685r, adi,ad5686, adi,ad5686.yaml, adi,ad5686r
adi,ad5696.yaml adi,ad5311r, adi,ad5337r, adi,ad5338r, adi,ad5671r, adi,ad5675r, adi,ad5691r, adi,ad5692r, adi,ad5693, adi,ad5693r, adi,ad5694, adi,ad5694r, adi,ad5695r, adi,ad5696, adi,ad5696.yaml, adi,ad5696r
adi,ad5755.yaml adi,ad5735, adi,ad5737, adi,ad5755, adi,ad5755-1, adi,ad5755.yaml, adi,ad5757, adi,dc-dc-freq-hz, adi,dc-dc-max-microvolt, adi,dc-dc-phase, adi,ext-current-sense-resistor, adi,mode, adi,slew
adi,ad5758.yaml adi,ad5758, adi,ad5758.yaml, adi,dc-dc-ilim-microamp, adi,dc-dc-mode, adi,range-microamp, adi,range-microvolt, adi,slew-time-us
adi,ad5761.yaml adi,ad5721, adi,ad5721r, adi,ad5761, adi,ad5761.yaml, adi,ad5761r
adi,ad5764.yaml adi,ad5744, adi,ad5744r, adi,ad5764, adi,ad5764.yaml, adi,ad5764r
adi,ad5766.yaml adi,ad5766, adi,ad5766.yaml, adi,ad5767
adi,ad5770r.yaml adi,ad5770r, adi,ad5770r.yaml, adi,external-resistor, adi,range-microamp
adi,ad5791.yaml adi,ad5760, adi,ad5780, adi,ad5781, adi,ad5790, adi,ad5791, adi,ad5791.yaml
adi,ad7293.yaml adi,ad7293, adi,ad7293.yaml
adi,ad7303.yaml adi,ad7303, adi,ad7303.yaml
adi,ad8460.yaml adi,ad8460, adi,ad8460.yaml, adi,external-resistor-ohms, adi,max-millicelsius, adi,range-microamp, adi,range-microvolt
adi,ad8801.yaml adi,ad8801, adi,ad8801.yaml, adi,ad8803
adi,ad9739a.yaml adi,ad9739a, adi,ad9739a.yaml
adi,axi-dac.yaml adi,ad3552r, adi,axi-ad3552r, adi,axi-dac-9.1.b, adi,axi-dac.yaml, adi,output-range-microvolt
adi,ltc2664.yaml adi,ltc2664, adi,ltc2664.yaml, adi,toggle-mode
adi,ltc2672.yaml adi,ltc2672, adi,ltc2672.yaml, adi,toggle-mode
adi,ltc2688.yaml adi,ltc2688, adi,ltc2688.yaml, adi,output-range-microvolt, adi,overrange, adi,toggle-dither-input, adi,toggle-mode
adi,max22007.yaml adi,ad74413r.h, adi,ch-func, adi,max22007, adi,max22007.yaml
adi,admv8818.yaml adi,admv8818, adi,admv8818.yaml
ad916x.yaml adi,ad9161, adi,ad9162, adi,ad9163, adi,ad9164, adi,ad9166, adi,bits-per-sample, adi,control-bits-per-sample, adi,converter-resolution, adi,converters-per-device, adi,frames-per-multiframe, adi,full-scale-current-mircoamp, adi,interpolation, adi,lanes-per-device, adi,octets-per-frame, adi,samples-per-converter-per-frame, adi,subclass, adi,version
adf4371.yaml adi,adf4371, adi,adf4372, adi,output-enable, adi,power-up-frequency
adi,ad9172.txt adi,ad9172.txt
adi,ad9783.yaml adi,ad9780, adi,ad9781, adi,ad9783, adi,ad9783.yaml
adi,adf4030.yaml adi,adf4030, adi,adf4030.yaml, adi,bsync-autoalign-iteration-count, adi,bsync-autoalign-reference-channel, adi,bsync-frequency-hz, adi,extended-name, adi,input-output-reconfig-en, adi,output-en, adi,rcm, adi,vco-frequency-hz
adi,adf4350.yaml adi,12bit-clkdiv-mode, adi,adf4350, adi,adf4350.yaml, adi,adf4351, adi,channel-spacing, adi,charge-pump-current, adi,mute-till-lock-enable, adi,output-power, adi,phase-detector-polarity-positive-enable, adi,power-up-frequency
adi,adf4360.yaml adi,adf4360-0, adi,adf4360-1, adi,adf4360-2, adi,adf4360-3, adi,adf4360-4, adi,adf4360-5, adi,adf4360-6, adi,adf4360-7, adi,adf4360-8, adi,adf4360-9, adi,adf4360.yaml, adi,loop-filter-charge-pump-current, adi,loop-filter-pfd-frequency-hz, adi,vco-maximum-frequency-hz, adi,vco-minimum-frequency-hz, adi,vco-minimum-frequency-hz.
adi,adf4377.yaml adi,adf4377, adi,adf4377.yaml, adi,adf4378
adi,adf4382.yaml adi,adf4382, adi,adf4382.yaml, adi,adf4382a, adi,charge-pump-microamp, adi,ref-divider
adi,adl5960.yaml adi,adl5960, adi,adl5960.yaml
adi,admfm2000.yaml adi,admfm2000, adi,admfm2000.yaml, adi,mixer-mode
adi,admv1013.yaml adi,admv1013, adi,admv1013.yaml, adi,detector-enable, adi,quad-se-mode
adi,admv1014.yaml adi,admv1014, adi,admv1014.yaml, adi,detector-enable, adi,p1db-compensation-enable, adi,quad-se-mode
adi,admv4420.yaml adi,admv4420, adi,admv4420.yaml, adi,lo-freq-khz, adi,ref-ext-single-ended-en
adi,adrf6780.yaml adi,adrf6780, adi,adrf6780.yaml, adi,lo-en
adi,ltc6952.yaml adi,analog-delay, adi,digital-delay, adi,divider, adi,extended-name, adi,ltc6952, adi,ltc6952.yaml, adi,ltc6953, adi,pulse-generator-mode, adi,ref-frequency-hz, adi,vco-frequency-hz
adi,adxrs290.yaml adi,adxrs290, adi,adxrs290.yaml
adi,ad5933.yaml adi,ad5933, adi,ad5933.yaml, adi,ad5934
adi,adis16460.yaml adi,adis16460, adi,adis16460.yaml
adi,adis16475.yaml adi,adis16465-1, adi,adis16465-2, adi,adis16465-3, adi,adis16467-1, adi,adis16467-2, adi,adis16467-3, adi,adis16470, adi,adis16475-1, adi,adis16475-2, adi,adis16475-3, adi,adis16475.yaml, adi,adis16477-1, adi,adis16477-2, adi,adis16477-3, adi,adis16500, adi,adis16501, adi,adis16505-1, adi,adis16505-2, adi,adis16505-3, adi,adis16507-1, adi,adis16507-2, adi,adis16507-3, adi,adis16575-2, adi,adis16575-3, adi,adis16576-2, adi,adis16576-3, adi,adis16577-2, adi,adis16577-3
adi,adis16480.yaml adi,adis16375, adi,adis16480, adi,adis16480.yaml, adi,adis16485, adi,adis16488, adi,adis16490, adi,adis16495-1, adi,adis16495-2, adi,adis16495-3, adi,adis16497-1, adi,adis16497-2, adi,adis16497-3, adi,adis16545-1, adi,adis16545-2, adi,adis16545-3, adi,adis16547-1, adi,adis16547-2, adi,adis16547-3, adi,ext-clk-pin
adi,adis16550.yaml adi,adis16550, adi,adis16550.yaml
adi,iio-fakedev.yaml adi,attribute-names, adi,faked-dev, adi,iio-fake-i2c-device, adi,iio-fake-platform-device, adi,iio-fake-spi-device, adi,iio-fakedev.yaml
adi,jesd204-rx.txt adi,jesd204-rx.txt
adi,jesd204-tx.txt adi,jesd204-tx.txt
adux1020.yaml adi,adux1020
iio-gen-mux.yaml adi,gen_mux
adi,ad5272.yaml adi,ad5272-020, adi,ad5272-050, adi,ad5272-100, adi,ad5272.yaml, adi,ad5274-020, adi,ad5274-100
adi,ad2s1210.yaml adi,ad2s1210, adi,ad2s1210.yaml, adi,fixed-mode
adi,ad2s90.yaml adi,ad2s90, adi,ad2s90.yaml
adi,ltc2983.yaml adi,cold-junction-handle, adi,custom-rtd, adi,custom-steinhart, adi,custom-temp, adi,custom-thermistor, adi,custom-thermocouple, adi,excitation-current-microamp, adi,ltc2983, adi,ltc2983.yaml, adi,ltc2984, adi,ltc2986, adi,ltm2985, adi,number-of-wires, adi,rsense-handle, adi,rsense-share, adi,rsense-val-milli-ohms, adi,sensor-oc-current-microamp, adi,sensor-type, adi,single-ended
adi,ad9088.yaml adi,ad9084, adi,ad9088, adi,ad9088.h, adi,ad9088.yaml, adi,axi-hsci-connected, adi,device-profile-fw-name, adi,gpio-hop-block, adi,gpio-hop-profile, adi,gpio-sniffer-a-export, adi,gpio-sniffer-b-export, adi,hsci-auto-linkup-mode-en, adi,hsci-disable-after-boot-en
adi,adp5588.yaml adi,adp5587, adi,adp5588, adi,adp5588.yaml
adi,ad7879.yaml adi,acquisition-time, adi,ad7879, adi,ad7879-1, adi,ad7879.yaml, adi,averaging, adi,conversion-interval, adi,first-conversion-delay, adi,median-filter-size, adi,resistance-plate-x
adi,adi-axi-fb.yaml adi,adi-axi-fb.yaml, adi,axi-framebuffer-1.00.a, adi,flock-distance, adi,flock-dwidth, adi,flock-frm-buf-nr, adi,flock-mode, adi,flock-resolution
adi,addi9036.yaml adi,addi9036, adi,addi9036.yaml
adv7180.yaml adi,adv7180, adi,adv7180cp, adi,adv7180st, adi,adv7182, adi,adv7280, adi,adv7280-m, adi,adv7281, adi,adv7281-m, adi,adv7281-ma, adi,adv7282, adi,adv7282-m
adv748x.yaml adi,adv7481, adi,adv7482
adv7604.yaml adi,adv7610, adi,adv7611, adi,adv7612
adi,adp5585.yaml adi,adp5585, adi,adp5585-00, adi,adp5585-01, adi,adp5585-02, adi,adp5585-03, adi,adp5585-04, adi,adp5585.yaml
adi,max77541.yaml adi,max77540, adi,max77541, adi,max77541-regulator.yaml, adi,max77541.yaml
adi,axi-data-offload.yaml adi,axi-data-offload-1.0.a, adi,axi-data-offload.yaml, adi,bringup, adi,bypass, adi,oneshot, adi,sync-config, adi,transfer-length
adi,axi-tdd.yaml adi,axi-tdd, adi,axi-tdd.yaml
adi,adg792a.txt adi,adg792a.txt
adi,adgs1408.txt adi,adgs1408.txt
mux-controller.yaml adi,adg792a
adi,adin.yaml adi,adin.yaml, adi,fifo-depth-bits, adi,rx-internal-delay-ps, adi,tx-internal-delay-ps
adi,adin1110.yaml adi,adin1110, adi,adin1110.yaml, adi,adin2111, adi,spi-crc
adi,axi-pwmgen.yaml adi,axi-pwmgen-2.00.a, adi,axi-pwmgen.yaml
adi,adp5055-regulator.yaml adi,adp5055, adi,adp5055-regulator.yaml, adi,delay-power-good, adi,dvs-limit-lower-microvolt, adi,dvs-limit-upper-microvolt, adi,fast-transient, adi,mask-power-good, adi,ocp-blanking, adi,tset-us
adi,max77503-regulator.yaml adi,max77503, adi,max77503-regulator.yaml
adi,max77541-regulator.yaml adi,max77541-regulator.yaml, adi,max77541.yaml
adi,max77857.yaml adi,max77831, adi,max77857, adi,max77857.yaml, adi,max77859, adi,max77859a, adi,rbot-ohms, adi,rtop-ohms
adi,max31335.yaml adi,max31331, adi,max31335, adi,max31335.yaml, adi,tc-diode
adi,adau1372.yaml adi,adau1372, adi,adau1372.yaml
adi,adau1701.txt adi,adau1701.txt
adi,adau17x1.yaml adi,adau1361, adi,adau1381, adi,adau1461, adi,adau1761, adi,adau1781, adi,adau17x1.yaml, adi,adau1961
adi,adau1977.yaml adi,adau1977, adi,adau1977.yaml, adi,adau1978, adi,adau1979, adi,micbias
adi,adau7002.yaml adi,adau7002, adi,adau7002.yaml
adi,adau7118.yaml adi,adau7118, adi,adau7118.yaml, adi,decimation-ratio, adi,pdm-clk-map
adi,axi-i2s.txt adi,axi-i2s.txt
adi,axi-spdif-tx.txt adi,axi-spdif-tx.txt
adi,max98363.yaml adi,max98363.yaml
adi,max98388.yaml adi,imon-slot-no, adi,interleave-mode, adi,max98388, adi,max98388.yaml, adi,vmon-slot-no
adi,max98396.yaml adi,imon-slot-no, adi,max98396, adi,max98396.yaml, adi,max98397, adi,vmon-slot-no
adi,ssm2305.txt adi,ssm2305.txt
adi,ssm2518.yaml adi,ssm2518, adi,ssm2518.yaml
adi,ssm2602.txt adi,ssm2602.txt
adi,ssm3515.yaml adi,ssm3515, adi,ssm3515.yaml
adi,axi-spi-engine.yaml adi,axi-spi-engine-1.00.a, adi,axi-spi-engine.yaml
adi-ex,axi-spi-engine.yaml adi,axi-spi-engine-1.00.a
trivial-devices.yaml adi,ad5110, adi,ad7414, adi,adp5589, adi,lt7182s

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

Unit Test Results

    3 files      3 suites   8s ⏱️
  617 tests   591 ✅ 26 💤 0 ❌
1 851 runs  1 773 ✅ 78 💤 0 ❌

Results for commit 2dbfe69.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

Kuiper64 Test Results

625 tests   601 ✅  2s ⏱️
  1 suites   24 💤
  1 files      0 ❌

Results for commit 2dbfe69.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 21, 2026

Hardware Test Results

6 files  6 suites   9m 59s ⏱️
4 tests 3 ✅ 1 💤 0 ❌
8 runs  6 ✅ 2 💤 0 ❌

Results for commit 2dbfe69.

♻️ This comment has been updated with latest results.

tfcollins added a commit that referenced this pull request Apr 21, 2026
… gap)

``adi.ad9081(uri=...)`` (and ``adi.ad9371``, ``adi.adrv9009``, etc.)
hardcodes the IIO device names it expects — for AD9081 that's
``axi-ad9081-rx-hpc`` + ``axi-ad9081-tx-hpc``.  Several of the
designs in this suite expose the buffered frontend as the generic
TPL core (``ad_ip_jesd204_tpl_adc`` / ``ad_ip_jesd204_tpl_dac``)
instead, so instantiating a pyadi-iio wrapper fails with
``AttributeError: 'NoneType' object has no attribute 'channels'``
and the capture never runs.  Hit by every leg of the last hw run
on PR #57 (mini2/bq, direct + coord).

Swap the helper to raw libiio:

- Signature now takes ``(ctx, device_candidates, …)`` instead of
  a pyadi-iio instance.  ``device_candidates`` is a str or tuple
  of candidate IIO device names — the first one present on the
  context wins.  No pyadi-iio class lookup, no device-name
  assumptions beyond what each test already encodes in its
  ``found``-set assertion.
- Enables every scan-capable, non-output channel; buffer-refills
  once; reads each channel as ``int16`` (correct for every AXI
  ADC frontend in this suite); then runs the same non-zero +
  non-latched checks as before.

Per-test call-sites now pass the same candidate tuple each test
already uses in its IIO-device-present assertion:

- AD9081 XSA / system — ``("axi-ad9081-rx-hpc",
  "ad_ip_jesd204_tpl_adc")``
- ADRV9009          — ``("axi-adrv9009-rx-hpc",
  "axi-adrv9009-rx-obs-hpc")``
- AD9371 / ZC706    — ``("axi-ad9371-rx-hpc",
  "axi-ad9371-rx-obs-hpc")``
- FMCDAQ3 / VCU118  — ``("axi-ad9680-core-lpc",
  "axi-ad9680-hpc", "axi-ad9680-rx-hpc")``
Replaces the ``nohup labgrid-exporter … & disown`` pattern used on
each hw-node runner (bq, mini2, nuc) with a proper systemd
template unit.  ``labgrid-exporter@<place>`` auto-restarts on
failure, survives reboots, and makes ``systemctl restart``
/ ``journalctl -u`` the one-line ops commands after a YAML edit.

Files:

- ``scripts/labgrid-exporter/[email protected]`` —
  template unit.  ``%i`` is the place name; per-instance env
  (``LG_EXPORTER_BIN``, ``LG_COORDINATOR``, ``LG_EXPORTER_NAME``,
  ``LG_EXPORTER_YAML``, ``PATH``) lives in
  ``/etc/default/labgrid-exporter-<place>``.  ``User=`` is baked
  in at install time via a sed placeholder.
- ``scripts/labgrid-exporter/install.sh`` — root installer.  Takes
  ``<instance-name> <yaml-path>`` + ``--coordinator``, ``--user``,
  ``--bin``, ``--ser2net-path``, ``--no-start``.  Writes both
  files, reloads systemd, enables + starts.  Idempotent.
- ``doc/source/developer/hardware_ci.rst`` — new
  "Exporter systemd service" section with install recipe + all
  flags + day-to-day commands, plus a cross-link from step 1 of
  the "Adding a new hardware node" walkthrough.
``assert_no_kernel_faults`` only catches panic/oops/BUG/SError —
drivers can fail to probe silently (bad DT overlay apply, phandle
mismatch, missing regulator) and the suite would reach the
IIO-device assertion with a confusing "not found" message instead
of the probe-error root cause.  Similarly, ``Link status: DATA``
only says JESD trained at link-up — DMA / TPL / clock-path can
silently stop delivering samples and the test wouldn't notice.

Add two helpers in ``test/hw/hw_helpers.py`` and wire them into
every hw test that has IIO verification:

1. ``assert_no_probe_errors(dmesg_txt)`` — scans for
   ``probe of <dev> failed with error``,
   ``Error applying overlay`` / ``failed to apply overlay``,
   ``Error resolving``.  Reuses ``_DMESG_BENIGN_SUBSTRINGS`` (now
   also allowlisting the stock-Kuiper ZCU102 / ZynqMP watchdog,
   DisplayPort, and Ceva AHCI probes that fire on every boot
   regardless of overlay).

2. ``assert_rx_capture_valid(ctx, device_candidates, …)`` — uses
   raw libiio (works with any buffered AXI ADC regardless of
   whether a pyadi-iio wrapper exists for its device name),
   enables every non-output scan channel, refills a one-shot
   buffer, and asserts at least one channel is non-zero + at
   least one channel's ``|std|`` >= 1 LSB.  Device selection
   tries an ordered candidate list, then falls back to any
   ``axi-*`` / ``cf-*`` / TPL frontend on the context.
   ``TimeoutError`` from the refill path gets remapped to a
   clear ``AssertionError`` pointing at the stalled DMA.

Wired into:

- ``test_ad9081_zcu102_xsa_hw.py``       → ``axi-ad9081-rx-hpc`` /
  ``ad_ip_jesd204_tpl_adc``.
- ``test_ad9081_zcu102_system_hw.py``    → same.
- ``test_adrv9009_zcu102_hw.py``         → ``axi-adrv9009-rx-hpc``.
  Also restructured to use ``board`` fixture (from the
  ``target``-swap fix) so the VCU118-style teardown power-off
  runs.
- ``test_fmcdaq3_vcu118_hw.py``          → ``axi-ad9680-core-lpc``
  / ``axi-ad9680-hpc``.

Four findings surfaced via this check, all fixed:

- ``assert_no_probe_errors`` tripped on stock Kuiper ZynqMP boot
  noise (``cdns-wdt: probe of ffcb0000.watchdog failed with
  error -2``, DisplayPort + Ceva AHCI) → three specific
  device-node addresses added to the benign list so a real
  watchdog/display/sata regression elsewhere still trips.
- ``adi.ad9081(uri=…)`` fails with ``'NoneType' object has no
  attribute 'channels'`` when the design exposes the TPL core
  rather than ``axi-ad9081-rx-hpc`` → moved to raw libiio.
- Fallback initially picked the control-plane device
  (``ad9528-1``) which isn't AXI-DMA-backed → narrowed fallback
  to ``axi-*`` / ``cf-*`` / TPL only.
Align ``ADRV937xBuilder``'s output for ``zc706+adrv9371`` with the
working SD-card devicetree shipped by Kuiper so the AD9528,
axi-adxcvr, axi-jesd204, and AD9371 drivers all probe and reach
JESD ``opt_post_running_stage`` cleanly on real hardware.  Full
state progression verified on bq via hw CI:

  before                              →  after
  --------------------------------------------------------------
  RESET Failed                        →  reset succeeds
  Requesting device clock 122.88 MHz  →  AD9528 drives dev_clk
    failed got 0                         (channel@13 / FMC_CLK)
  jesd204 link_pre_setup -ENODEV      →  opt_post_running_stage
    cycling                              clean on all 3 links
  axi-adxcvr / axi-jesd204-rx         →  both probe (``AXI-
    deferred probe pending               JESD204-RX (1.07.a) at
                                         0x44AA0000...``)
  cf_axi_adc probe stuck              →  probed ADC AD9371 MASTER
  AD9371 ARM uninitialized            →  Firmware 5.2.2 API
                                         1.5.2.3566 initialized
  JESD clocks 245.76 / 122.88         →  122.88 / 122.88 match
    mismatch                             measured

Changes:

- ``adidt/xsa/builders/adrv937x.py``:
  - Emit AD9528 ``channel@{1,3,12,13}`` with correct divider +
    signal-source + extended-name (DEV_CLK, FMC_CLK, DEV_SYSREF,
    FMC_SYSREF).
  - Wire AD9528 ``reset-gpios = <&gpio0 113 0>``.
  - Mark AD9528 as ``jesd204-device`` / ``#jesd204-cells = <2>``
    / ``jesd204-sysref-provider`` / ``adi,jesd204-max-sysref-
    frequency-hz`` — required for the Mykonos driver's
    ``opt_post_running_stage`` callback to find the sysref
    provider in the graph.
  - Correct AD9371 GPIO pins: ``trx_reset_gpio`` 130 → 106,
    ``trx_sysref_req_gpio`` 136 → 112, new ``ad9528_reset_gpio``
    = 113.
  - Add AD9528 as link-2 input on the AD9371's
    ``jesd204-inputs``.
  - Add the three ``adi,{sys,out}-clk-select`` +
    ``adi,use-lpm-enable`` props on ``axi-adxcvr`` — without
    these the platform driver defers probe indefinitely.
  - Drop emission of ``_DEFAULT_MYKONOS_PROFILE_PROPS`` as a
    builder-level constant.  Move the profile values into
    ``adidt/xsa/profiles/adrv937x_zc706.json`` as a
    ``trx_profile_props`` list, keeping the builder default
    empty.  The profile has to match the HDL's compile-time
    ``TX_JESD_*`` / ``RX_JESD_*`` knobs (see
    ``analogdevicesinc/hdl/projects/adrv937x/zc706/README``),
    which is board-build-specific.
- ``adidt/xsa/profiles/adrv937x_zc706.json``:
  - ``trx_reset_gpio`` → 106, ``trx_sysref_req_gpio`` → 112,
    new ``ad9528_reset_gpio`` → 113.
  - ``misc_clk_hz`` 245_760_000 → 122_880_000 (physical FMC
    clock on this board; the wrong 245.76 MHz declared rate
    triggered the JESD link-clock measured/reported mismatch
    that kept the link disabled).
  - New ``trx_profile_props`` list carrying 51 Mykonos
    ``adi,{rx,obs,tx,sniffer}-profile-*`` + ``adi,clocks-*``
    lines copied verbatim from bq's working SD-card DT.
- ``adidt/xsa/profiles.py``: accept ``ad9528_reset_gpio`` +
  ``ad9528_jesd204_max_sysref_hz`` in the ``adrv9009_board``
  schema allowlist so JSON loads don't reject the new keys.
- ``adidt/devices/clocks/ad952x.py``: optional
  ``jesd204_sysref_provider`` + ``jesd204_max_sysref_hz`` fields
  on ``AD9528_1`` that ``extra_dt_lines`` emits when set.  Opt-in
  so the ADRV9009/ZCU102 path is unaffected.
- ``adidt/eval/adrv937x_fmc.py``: System-API side GPIO sync
  (130/136 → 106/112) to keep the dts-parity test green.
- ``test/devices/fixtures/adrv9371_zc706_xsa_reference.dts``:
  regenerated from the new builder output.

Still-open blocker (documented in the hw test's TODO):

  ad9371 spi1.1: ILAS mismatch: c7f8
  ILAS {lanes per converter, scrambling, octets per frame,
        frames per multiframe, number of converters,
        sample resolution, control bits per sample} did not match

Our ``axi-jesd204-{tx,rx}`` overlays already emit the exact
framing (M=4 L=4 F=2 / M=4 L=2 F=4, Np=16, CS=2) that the HDL
README documents as default, and the same builder path works on
ADRV9009/ZCU102 — so the remaining gap is that the
``trx_profile_props`` shipped in the profile JSON (copied from
the SD-card DT as a starting point) implies a different JESD
framing than the XSA's HDL bitstream compiles in.  Pairing the
profile to the HDL is the single-file drop-in fix that closes
this out; flagged in the TODO with concrete next steps (iio-
oscilloscope regeneration vs ``trx_profile_props`` JSON override).

Unit tests: 449 passed, 13 skipped, 4 xfailed.
@tfcollins tfcollins force-pushed the tfcollins/systemd-exporter-and-probe-checks branch from 4783354 to 2dbfe69 Compare April 22, 2026 12:15
@tfcollins tfcollins merged commit b01d2c3 into main Apr 22, 2026
47 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant