Hello
I have a design where I am running two ADRV9002 evaluation boards on a ZCU102. They are booting up correctly and I can see all the various IIO components in iio_info.
If I have one board connected in my device tree (the other board's components commented out), then IIO Oscilloscope starts correctly.
However, if I have both boards connected in my device tree, IIO Oscilloscope crashes when I try to run it.
I am using the 2022_R2 release (Linux and HDL). I believe this is the version of IIO Oscilloscope that I am using: v0.17
In my previous experience of multiple ADRV9009 devices inside a single device tree, I needed to change the names to -0, -1, -2, etc for IIO Oscilloscope to work correctly. I have tried the same here and it made no difference. Here are the relevant portions of my device tree:
&fmc_spi { status = "okay"; adc0_adrv9002: adrv9002-phy-0@0 { compatible = "adi,adrv9002"; reg = <0>; interrupt-parent = <&gpio>; interrupts = <122 IRQ_TYPE_EDGE_RISING>; spi-max-frequency = <20000000>; // Clocks clocks = <&adrv9002_clkin>; clock-names = "adrv9002_ext_refclk"; clock-output-names = "rx1_sampl_clk", "tx1_sampl_clk", "tdd1_intf_clk", "rx2_sampl_clk", "tx2_sampl_clk", "tdd2_intf_clk"; #clock-cells = <1>; reset-gpios = <&gpio 124 GPIO_ACTIVE_LOW>; adi,channels { #address-cells = <1>; #size-cells = <0>; rx@0 { reg = <0>; adi,port = <0>; orx-gpios = <&gpio 110 GPIO_ACTIVE_HIGH>; }; rx@1 { reg = <1>; adi,port = <0>; orx-gpios = <&gpio 111 GPIO_ACTIVE_HIGH>; }; tx@0 { reg = <0>; adi,port = <1>; adi,dpd; }; tx@1 { reg = <1>; adi,port = <1>; adi,dpd; }; }; adi,gpios { #address-cells = <1>; #size-cells = <0>; gpio@0 { reg = <ADRV9002_DGPIO_0>; adi,signal = <ADRV9002_GPIO_SIGNAL_ORX_ENABLE_1>; }; gpio@1 { reg = <ADRV9002_DGPIO_1>; adi,signal = <ADRV9002_GPIO_SIGNAL_ORX_ENABLE_2>; }; }; // Frequency hopping properties adi,frequency-hopping { adi,fh-mode = <ADRV9002_FH_LO_RETUNE_REALTIME_PROCESS_DUAL_HOP>; adi-fh-rx-zero-if-en; // Depends on @adi,fh-mode being set to dual hop adi,fh-hop-signal-2 { adi,fh-hop-rx-ports = <ADRV9002_RX_2>; adi,fh-hop-tx-ports = <ADRV9002_TX_2>; }; }; }; adc1_adrv9002: adrv9002-phy-1@1 { compatible = "adi,adrv9002"; reg = <1>; interrupt-parent = <&gpio>; interrupts = <147 IRQ_TYPE_EDGE_RISING>; // 122 + 25 spi-max-frequency = <20000000>; // Clocks clocks = <&adrv9002_clkin>; clock-names = "adrv9002_ext_refclk"; clock-output-names = "rx1_sampl_clk", "tx1_sampl_clk", "tdd1_intf_clk", "rx2_sampl_clk", "tx2_sampl_clk", "tdd2_intf_clk"; #clock-cells = <1>; reset-gpios = <&gpio 149 GPIO_ACTIVE_LOW>; // 124 + 25 adi,channels { #address-cells = <1>; #size-cells = <0>; rx@0 { reg = <0>; adi,port = <0>; orx-gpios = <&gpio 135 GPIO_ACTIVE_HIGH>; // dgpio0 110 + 25 }; rx@1 { reg = <1>; adi,port = <0>; orx-gpios = <&gpio 136 GPIO_ACTIVE_HIGH>; // dgpio1 111 + 25 }; tx@0 { reg = <0>; adi,port = <1>; adi,dpd; }; tx@1 { reg = <1>; adi,port = <1>; adi,dpd; }; }; adi,gpios { #address-cells = <1>; #size-cells = <0>; gpio@0 { reg = <ADRV9002_DGPIO_0>; adi,signal = <ADRV9002_GPIO_SIGNAL_ORX_ENABLE_1>; }; gpio@1 { reg = <ADRV9002_DGPIO_1>; adi,signal = <ADRV9002_GPIO_SIGNAL_ORX_ENABLE_2>; }; }; // Frequency hopping properties adi,frequency-hopping { adi,fh-mode = <ADRV9002_FH_LO_RETUNE_REALTIME_PROCESS_DUAL_HOP>; adi-fh-rx-zero-if-en; // Depends on @adi,fh-mode being set to dual hop adi,fh-hop-signal-2 { adi,fh-hop-rx-ports = <ADRV9002_RX_2>; adi,fh-hop-tx-ports = <ADRV9002_TX_2>; }; }; }; }; / { fpga_axi { interrupt-parent = <&gic>; compatible = "simple-bus"; #address-cells = <0x1>; #size-cells = <0x1>; ranges = <0 0 0 0xffffffff>; // HPC0 adrv9001_0_rx1_dma: dma@84A30000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x84A30000 0x10000>; #dma-cells = <1>; interrupts = <0 91 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <2>; adi,destination-bus-width = <64>; adi,destination-bus-type = <0>; }; }; }; adrv9001_0_rx2_dma: dma@84A40000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x84A40000 0x10000>; #dma-cells = <1>; interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <2>; adi,destination-bus-width = <64>; adi,destination-bus-type = <0>; }; }; }; adrv9001_0_tx1_dma: dma@84A50000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x84A50000 0x10000>; #dma-cells = <1>; interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <0>; adi,destination-bus-width = <64>; adi,destination-bus-type = <2>; }; }; }; adrv9001_0_tx2_dma: dma@84A6000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x84A60000 0x10000>; #dma-cells = <1>; interrupts = <0 90 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <0>; adi,destination-bus-width = <64>; adi,destination-bus-type = <2>; }; }; }; adrv9001_0_axi_adrv9002_core_rx1: axi-adrv9002-rx-lpc-0@84A00000 { compatible = "adi,axi-adrv9002-rx-1.0"; reg = <0x84A00000 0x6000>; clocks = <&adc0_adrv9002 0>; dmas = <&adrv9001_0_rx1_dma 0>; dma-names = "rx"; spibus-connected = <&adc0_adrv9002>; }; adrv9001_0_axi_adrv9002_core_tx1: axi-adrv9002-tx-lpc-0@84A0A000 { compatible = "adi,axi-adrv9002-tx-1.0"; reg = <0x84A0A000 0x2000>; clocks = <&adc0_adrv9002 1>; clock-names = "sampl_clk"; dmas = <&adrv9001_0_tx1_dma 0>; dma-names = "tx"; adi,axi-dds-default-scale = <0x800>; adi,axi-dds-default-frequency = <2000000>; }; adrv9001_0_axi_adrv9002_core_tdd1: axi-adrv9002-core-tdd1-lpc-0@84A0C800 { compatible = "adi,axi-tdd-1.00"; reg = <0x84A0C800 0x400>; clocks = <&zynqmp_clk 71>, <&adc0_adrv9002 2>; clock-names = "s_axi_aclk", "intf_clk"; label = "axi-core-tdd-1"; }; adrv9001_0_axi_adrv9002_core_rx2: axi-adrv9002-rx2-lpc-0@84A09000 { compatible = "adi,axi-adrv9002-rx2-1.0"; reg = <0x84A09000 0x1000>; clocks = <&adc0_adrv9002 3>; clock-names = "sampl_clk"; dmas = <&adrv9001_0_rx2_dma 0>; dma-names = "rx"; }; adrv9001_0_axi_adrv9002_core_tx2: axi-adrv9002-tx2-lpc-0@84A0C000 { compatible = "adi,axi-adrv9002-tx-1.0"; reg = <0x84A0C000 0x2000>; clocks = <&adc0_adrv9002 4>; clock-names = "sampl_clk"; dmas = <&adrv9001_0_tx2_dma 0>; dma-names = "tx"; adi,axi-dds-default-scale = <0x800>; adi,axi-dds-default-frequency = <2000000>; }; adrv9001_0_axi_adrv9002_core_tdd2: axi-adrv9002-core-tdd2-lpc-0@84A0CC00 { compatible = "adi,axi-tdd-1.00"; reg = <0x84A0CC00 0x400>; clocks = <&zynqmp_clk 71>, <&adc0_adrv9002 5>; clock-names = "s_axi_aclk", "intf_clk"; label = "axi-core-tdd-2"; }; // HPC1 adrv9001_1_rx1_dma: dma@80010000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x80010000 0x10000>; #dma-cells = <1>; interrupts = <0 95 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <2>; adi,destination-bus-width = <64>; adi,destination-bus-type = <0>; }; }; }; adrv9001_1_rx2_dma: dma@80020000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x80020000 0x10000>; #dma-cells = <1>; interrupts = <0 96 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <2>; adi,destination-bus-width = <64>; adi,destination-bus-type = <0>; }; }; }; adrv9001_1_tx1_dma: dma@80030000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x80030000 0x10000>; #dma-cells = <1>; interrupts = <0 93 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <0>; adi,destination-bus-width = <64>; adi,destination-bus-type = <2>; }; }; }; adrv9001_1_tx2_dma: dma@80040000 { compatible = "adi,axi-dmac-1.00.a"; reg = <0x80040000 0x10000>; #dma-cells = <1>; interrupts = <0 94 IRQ_TYPE_LEVEL_HIGH>; clocks = <&zynqmp_clk 71>; adi,channels { #size-cells = <0>; #address-cells = <1>; dma-channel@0 { reg = <0>; adi,source-bus-width = <64>; adi,source-bus-type = <0>; adi,destination-bus-width = <64>; adi,destination-bus-type = <2>; }; }; }; adrv9001_1_axi_adrv9002_core_rx1: axi-adrv9002-rx-lpc-1@80000000 { compatible = "adi,axi-adrv9002-rx-1.0"; reg = <0x80000000 0x6000>; clocks = <&adc1_adrv9002 0>; dmas = <&adrv9001_1_rx1_dma 0>; dma-names = "rx"; spibus-connected = <&adc1_adrv9002>; }; adrv9001_1_axi_adrv9002_core_tx1: axi-adrv9002-tx-lpc-1@8000A000 { compatible = "adi,axi-adrv9002-tx-1.0"; reg = <0x8000A000 0x2000>; clocks = <&adc1_adrv9002 1>; clock-names = "sampl_clk"; dmas = <&adrv9001_1_tx1_dma 0>; dma-names = "tx"; adi,axi-dds-default-scale = <0x800>; adi,axi-dds-default-frequency = <2000000>; }; adrv9001_1_axi_adrv9002_core_tdd1: axi-adrv9002-core-tdd1-lpc-1@8000C800 { compatible = "adi,axi-tdd-1.00"; reg = <0x8000C800 0x400>; clocks = <&zynqmp_clk 71>, <&adc1_adrv9002 2>; clock-names = "s_axi_aclk", "intf_clk"; label = "axi-core-tdd-1"; }; adrv9001_1_axi_adrv9002_core_rx2: axi-adrv9002-rx2-lpc-1@80009000 { compatible = "adi,axi-adrv9002-rx2-1.0"; reg = <0x80009000 0x1000>; clocks = <&adc1_adrv9002 3>; clock-names = "sampl_clk"; dmas = <&adrv9001_1_rx2_dma 0>; dma-names = "rx"; }; adrv9001_1_axi_adrv9002_core_tx2: axi-adrv9002-tx2-lpc-1@8000C000 { compatible = "adi,axi-adrv9002-tx-1.0"; reg = <0x8000C000 0x2000>; clocks = <&adc1_adrv9002 4>; clock-names = "sampl_clk"; dmas = <&adrv9001_1_tx2_dma 0>; dma-names = "tx"; adi,axi-dds-default-scale = <0x800>; adi,axi-dds-default-frequency = <2000000>; }; adrv9001_1_axi_adrv9002_core_tdd2: axi-adrv9002-core-tdd2-lpc-1@8000CC00 { compatible = "adi,axi-tdd-1.00"; reg = <0x8000CC00 0x400>; clocks = <&zynqmp_clk 71>, <&adc1_adrv9002 5>; clock-names = "s_axi_aclk", "intf_clk"; label = "axi-core-tdd-2"; }; axi_sysid_0: axi-sysid-0@85000000 { compatible = "adi,axi-sysid-1.00.a"; reg = <0x85000000 0x10000>; }; }; };
Please advise on what I should do (how to modify the device tree) so that IIO Oscilloscope works successfully with two ADRV9002 evaluation boards.
Thank you.
Updated the version number.
[edited by: gavint at 2:53 PM (GMT -4) on 8 Aug 2024]