&spi0 {
status = "okay";
clk0_ad9528: ad9528-1@1 {
compatible = "adi,ad9528";
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <10000000>;
clock-output-names = "ad9528-1_out0", "ad9528-1_out1", "ad9528-1_out2",
"ad9528-1_out3", "ad9528-1_out4", "ad9528-1_out5", "ad9528-1_out6",
"ad9528-1_out7", "ad9528-1_out8", "ad9528-1_out9", "ad9528-1_out10",
"ad9528-1_out11", "ad9528-1_out12", "ad9528-1_out13";
#clock-cells = <1>;
jesd204-device;
#jesd204-cells = <2>;
jesd204-sysref-provider;
adi,vcxo-freq = <122880000>;
adi,refa-enable;
adi,refa-diff-rcv-enable;
adi,refa-r-div = <1>;
/* PLL1 config */
adi,pll1-feedback-div = <4>;
adi,pll1-charge-pump-current-nA = <5000>;
/* PLL2 config */
adi,pll2-vco-div-m1 = <3>; /* use 5 for 184320000 output device clock */
adi,pll2-n2-div = <10>; /* N / M1 */
adi,pll2-r1-div = <1>;
adi,pll2-charge-pump-current-nA = <805000>;
/* SYSREF config */
adi,sysref-src = <SYSREF_SRC_INTERNAL>;
adi,sysref-pattern-mode = <SYSREF_PATTERN_NSHOT>;
adi,sysref-k-div = <512>;
adi,sysref-nshot-mode = <SYSREF_NSHOT_8_PULSES>;
//adi,sysref-request-trigger-mode = <SYSREF_LEVEL_HIGH>;
adi,jesd204-desired-sysref-frequency-hz = <3840000>;
adi,rpole2 = <RPOLE2_900_OHM>;
adi,rzero = <RZERO_1850_OHM>;
adi,cpole1 = <CPOLE1_16_PF>;
adi,status-mon-pin0-function-select = <1>; /* PLL1 & PLL2 Locked */
adi,status-mon-pin1-function-select = <7>; /* REFA Correct */
ad9528_0_c0: channel@0 {
reg = <0>;
adi,extended-name = "DEV_SYSREF";
adi,driver-mode = <DRIVER_MODE_LVDS>;
adi,divider-phase = <0>;
adi,channel-divider = <5>;
adi,signal-source = <SOURCE_SYSREF_VCO>;
//adi,output-dis;
};
ad9528_0_c1: channel@1 {
reg = <1>;
adi,extended-name = "DEV_CLK";
adi,driver-mode = <DRIVER_MODE_LVDS>;
adi,divider-phase = <0>;
adi,channel-divider = <5>;
adi,signal-source = <SOURCE_VCO>;
adi,output-dis;
};
ad9528_0_c3: channel@3 {
reg = <3>;
adi,extended-name = "CORE_CLK";
adi,driver-mode = <DRIVER_MODE_LVDS>;
adi,divider-phase = <0>;
adi,channel-divider = <10>;
adi,signal-source = <SOURCE_VCO>;
adi,output-dis;
};
ad9528_0_c12: channel@12 {
reg = <12>;
adi,extended-name = "FMC_SYSREF";
adi,driver-mode = <DRIVER_MODE_LVDS>;
adi,divider-phase = <0>;
adi,channel-divider = <5>;
adi,signal-source = <SOURCE_SYSREF_VCO>;
//adi,output-dis;
};
ad9528_0_c13: channel@13 {
reg = <13>;
adi,extended-name = "FMC_CLK";
adi,driver-mode = <DRIVER_MODE_LVDS>;
adi,divider-phase = <0>;
adi,channel-divider = <5>;
adi,signal-source = <SOURCE_VCO>;
adi,output-dis;
};
};
trx0_adrv9025: adrv9025-phy@0 {
compatible = "adi,adrv9026";
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
/* SPI Setup */
spi-max-frequency = <25000000>;
interrupt-parent = <&gpio>;
interrupts = <134 IRQ_TYPE_EDGE_RISING>; /* adrv9025_gpint1 */
/* Clocks */
clocks = <&clk0_ad9528 1>;
clock-names = "dev_clk";
clock-output-names = "rx_sampl_clk", "tx_sampl_clk";
#clock-cells = <1>;
jesd204-device;
#jesd204-cells = <2>;
jesd204-top-device = <0>; /* This is the TOP device */
jesd204-link-ids = <DEFRAMER0_LINK_TX FRAMER0_LINK_RX>;
jesd204-inputs =
<&axi_adrv9025_rx_jesd 0 FRAMER0_LINK_RX>,
<&axi_adrv9025_core_tx 0 DEFRAMER0_LINK_TX>;
adi,device-profile-name = "ActiveUseCase.profile";
adi,init-profile-name = "ActiveUtilInit.profile";
adi,arm-firmware-name = "ADRV9025_FW.bin;ADRV9025_DPDCORE_FW.bin";
adi,stream-firmware-name = "stream_image_6E3E00EFB74FE7D465FA88A171B81B8F.bin";
adi,rx-gaintable-names = "ADRV9025_RxGainTable.csv";
adi,rx-gaintable-channel-masks = <0xFF>;
adi,tx-attntable-names = "ADRV9025_TxAttenTable.csv";
adi,tx-attntable-channel-masks = <0x0F>;
/* General AGC Configuration */
adi,rxagc-rx-channel-mask = <0x0F>;
adi,rxagc-agc-peak-wait-time = <4>;
adi,rxagc-agc-rx-max-gain-index = <255>;
adi,rxagc-agc-rx-min-gain-index = <195>;
adi,rxagc-agc-gain-update-counter = <921600>;
adi,rxagc-agc-rx-attack-delay = <10>;
adi,rxagc-agc-slow-loop-settling-delay = <16>;
adi,rxagc-agc-low-thresh-prevent-gain-inc = <1>;
adi,rxagc-agc-change-gain-if-thresh-high = <1>;
adi,rxagc-agc-peak-thresh-gain-control-mode = <1>;
adi,rxagc-agc-reset-on-rxon = <0>;
adi,rxagc-agc-enable-sync-pulse-for-gain-counter = <0>;
adi,rxagc-agc-enable-fast-recovery-loop = <0>;
/* adi_adrv9025_AgcPeak_t agcPeak */
adi,rxagc-peak-agc-under-range-low-interval = <836>;
adi,rxagc-peak-agc-under-range-mid-interval = <2>;
adi,rxagc-peak-agc-under-range-high-interval = <4>;
adi,rxagc-peak-apd-high-thresh = <38>;
adi,rxagc-peak-apd-low-thresh = <25>;
adi,rxagc-peak-apd-upper-thresh-peak-exceeded-cnt = <10>;
adi,rxagc-peak-apd-lower-thresh-peak-exceeded-cnt = <3>;
adi,rxagc-peak-enable-hb2-overload = <1>;
adi,rxagc-peak-hb2-overload-duration-cnt = <1>;
adi,rxagc-peak-hb2-overload-thresh-cnt = <1>;
adi,rxagc-peak-hb2-high-thresh = <11598>;/* -3dbFS*/
adi,rxagc-peak-hb2-under-range-low-thresh = <8211>;
adi,rxagc-peak-hb2-under-range-mid-thresh = <5813>;
adi,rxagc-peak-hb2-under-range-high-thresh = <2913>;
adi,rxagc-peak-hb2-upper-thresh-peak-exceeded-cnt = <10>;
adi,rxagc-peak-hb2-under-range-high-thresh-exceeded-cnt = <3>;
adi,rxagc-peak-hb2-under-range-mid-thresh-exceeded-cnt = <3>;
adi,rxagc-peak-hb2-under-range-low-thresh-exceeded-cnt = <3>;
adi,rxagc-peak-hb2-overload-power-mode = <0>;
adi,rxagc-peak-hb2-thresh-config = <3>;
adi,rxagc-peak-apd-gain-step-attack = <4>;
adi,rxagc-peak-apd-gain-step-recovery = <2>;
adi,rxagc-peak-hb2-gain-step-attack = <4>;
adi,rxagc-peak-hb2-gain-step-high-recovery = <2>;
adi,rxagc-peak-hb2-gain-step-mid-recovery = <4>;
adi,rxagc-peak-hb2-gain-step-low-recovery = <8>;
/* adi_adrv9025_AgcPower_t agcPower */
adi,rxagc-power-power-enable-measurement = <0>;
adi,rxagc-power-power-input-select = <0>;
adi,rxagc-power-under-range-high-power-thresh = <9>;
adi,rxagc-power-under-range-low-power-thresh = <2>;
adi,rxagc-power-under-range-high-power-gain-step-recovery = <0>;
adi,rxagc-power-under-range-low-power-gain-step-recovery = <0>;
adi,rxagc-power-power-measurement-duration = <5>;
adi,rxagc-power-rx-tdd-power-meas-duration = <5>;
adi,rxagc-power-rx-tdd-power-meas-delay = <1>;
adi,rxagc-power-over-range-high-power-thresh = <2>;
adi,rxagc-power-over-range-low-power-thresh = <0>;
adi,rxagc-power-power-log-shift = <1>; /* Force to 1 */
adi,rxagc-power-over-range-high-power-gain-step-attack = <0>;
adi,rxagc-power-over-range-low-power-gain-step-attack = <0>;
};
};
/ {
fpga_axi: fpga-axi@0 {
interrupt-parent = <&gic>;
compatible = "simple-bus";
#address-cells = <0x1>;
#size-cells = <0x1>;
ranges = <0 0 0 0xffffffff>;
rx_dma: dma@80000000 {
compatible = "adi,axi-dmac-1.00.a";
reg = <0x80000000 0x10000>;
#dma-cells = <1>;
#clock-cells = <0>;
interrupts = <0 110 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&zynqmp_clk 73>;
};
tx_dma: dma@80010000 {
compatible = "adi,axi-dmac-1.00.a";
reg = <0x80010000 0x10000>;
#dma-cells = <1>;
#clock-cells = <0>;
interrupts = <0 109 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&zynqmp_clk 73>;
};
axi_adrv9025_core_rx: axi-adrv9025-rx-hpc@84a00000 {
compatible = "adi,axi-adc-legacy-10.0.a";
reg = <0x84a00000 0x8000>;
dmas = <&rx_dma 0>;
dma-names = "rx";
spibus-connected = <&trx0_adrv9025>;
};
axi_adrv9025_core_tx: axi-adrv9025-tx-hpc@84a04000 {
compatible = "adi,axi-adrv9025-tx-1.0";
reg = <0x84a04000 0x4000>;
dmas = <&tx_dma 0>;
dma-names = "tx";
clocks = <&trx0_adrv9025 1>;
clock-names = "sampl_clk";
adi,axi-pl-fifo-enable;
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs = <&axi_adrv9025_tx_jesd 0 DEFRAMER0_LINK_TX>;
};
axi_adrv9025_rx_jesd: axi-jesd204-rx@84aa0000 {
compatible = "adi,axi-jesd204-rx-1.0";
reg = <0x84aa0000 0x4000>;
interrupts = <0 107 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&zynqmp_clk 71>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_rx 0>;
clock-names = "s_axi_aclk", "device_clk", "lane_clk";
#clock-cells = <0>;
clock-output-names = "jesd_rx_lane_clk";
adi,octets-per-frame = <4>;
adi,frames-per-multiframe = <32>;
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs = <&axi_adrv9025_adxcvr_rx 0 FRAMER0_LINK_RX>;
};
axi_adrv9025_tx_jesd: axi-jesd204-tx@84a90000 {
compatible = "adi,axi-jesd204-tx-1.0";
reg = <0x84a90000 0x4000>;
interrupts = <0 106 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&zynqmp_clk 71>, <&clk0_ad9528 3>, <&axi_adrv9025_adxcvr_tx 0>;
clock-names = "s_axi_aclk", "device_clk", "lane_clk";
#clock-cells = <0>;
clock-output-names = "jesd_tx_lane_clk";
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs = <&axi_adrv9025_adxcvr_tx 0 DEFRAMER0_LINK_TX>;
};
axi_adrv9025_adxcvr_rx: axi-adxcvr-rx@84a60000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "adi,axi-adxcvr-1.0";
reg = <0x84a60000 0x10000>;
clocks = <&clk0_ad9528 13>;
clock-names = "conv";
#clock-cells = <1>;
clock-output-names = "rx_gt_clk", "rx_out_clk";
adi,sys-clk-select = <XCVR_CPLL>;
adi,out-clk-select = <XCVR_REFCLK>;
adi,use-lpm-enable;
adi,use-cpll-enable;
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs = <&clk0_ad9528 0 FRAMER0_LINK_RX>;
};
axi_adrv9025_adxcvr_tx: axi-adxcvr-tx@84a80000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "adi,axi-adxcvr-1.0";
reg = <0x84a80000 0x10000>;
clocks = <&clk0_ad9528 13>;
clock-names = "conv";
#clock-cells = <1>;
clock-output-names = "tx_gt_clk", "tx_out_clk";
adi,sys-clk-select = <XCVR_QPLL>;
adi,out-clk-select = <XCVR_REFCLK>;
jesd204-device;
#jesd204-cells = <2>;
jesd204-inputs = <&clk0_ad9528 0 DEFRAMER0_LINK_TX>;
};
axi_sysid_0: axi-sysid-0@85000000 {
compatible = "adi,axi-sysid-1.00.a";
reg = <0x85000000 0x10000>;
};
};
};
&trx0_adrv9025 {
reset-gpios = <&gpio 76 0>;
// test-gpios = <&gpio 136 0>;
};
&clk0_ad9528 {
reset-gpios = <&gpio 65 0>;
};
&axi_adrv9025_core_tx {
plddrbypass-gpios = <&gpio 147 0>;
};
We have a stable implementation based on 2023.1 + adrv9026 related drivers from AD linux (buffer, adc, dac, jesd204).
Everything we need is working fine. Now we decided to migrate to latest version of drivers and use analogdevices/linux v 2026_R1 branch. It's seems have broken buffers, or even more.
Preconditions:
ext-local-srcwith path to the synced analogdevices/linux 2026_R1 branch.device tree modifications (snippet)
petalinux-config -c kernel
ls /sys/bus/iio/devices/ -la
Notes:
legacyprefix to the one.CONFIG_IIO_DMA_BUF_MMAP_LEGACY=yso far as this code looks much closer to the one we are using in 2023 (just a blind guess it have more chance to work).Issue #1 (1-3 boots
coredumps1.log):dd if=/dev/iio\:device3 of=/root/test.bin bs=4096 count=16Issue #2
dd if=/dev/iio\:device3 of=/root/test.bin bs=4096 count=16Unfortunately, once I started logs recording issue become not reachable due to issue #1. I only have a backtrace snippet:
Issue #3 (likelly the same as issue #2 but with always occurance
coredumps3.log) :Issue #4 (
freezes4.log)Issue #5 (
freezes5.log)Appropriate console logs are attached
I spent several weeks with matching the code and trying to fix it, but with no lack. From major:
Versions used:
New (broken):
Petalinux 2025.1
AD linux: origin/xlnx/release/linux-v6.12.y-2026r1 (dcde09b) or 2026_R1 (
2026_R1.log)(40201ab) with our profiles on top (I was not able to make it working with other branches as well likemainor older releases of 2025)Old (which is working):
Petalinux 2023.1
AD drivers ~ 2023_R2 (not sure)
Artifacts:
2026_R1.log
coredumps1.log
coredumps3.log
freezes4.log
freezes5.log