Post Go back to editing

axi-spi-engine: stale SYNC pending can complete first transfer early at low SPI clock (2-3 MHz)

Category: Software

Hi,

we are currently debugging an issue with the AXI SPI Engine and wanted to ask if this behavior is known or if anyone has seen something similar.

At low SPI clock frequencies (~2–3 MHz) we are seeing misconfiguration of an ADC (in our case AD7768-1) during probe.

The issue seems to be related to the first SPI transfer after spi_engine_setup().


Suspected behavior


From our debugging, it looks like:

  • spi_engine_setup() issues SYNC commands and polls SYNC_ID
  • However, the corresponding SYNC interrupt pending bit is not cleared
  • When the first real transfer is started:
    • INT_SYNC gets enabled
    • a stale pending SYNC IRQ fires immediately
  • The transfer is then marked as complete before the hardware actually finished

This leads to follow-up transfers starting while the FPGA is still busy.


Sequential flow of the bug

spi_engine_setup()
  ├─ writel SYNC(0) → CMD FIFO
  ├─ writel CS_INV  → CMD FIFO
  ├─ writel ASSERT  → CMD FIFO
  └─ writel SYNC(1) → CMD FIFO
       FPGA executes all, sets SYNC_ID = 1
       INT_PENDING[SYNC] = 1   ← remains set, NOT cleared
  readl_relaxed_poll_timeout(SYNC_ID == 1)   ← polled, no IRQ used
  return 0

spi_engine_transfer_one_message()  ← first real transfer
  ├─ writes CMD/TX FIFOs
  ├─ INT_ENABLE |= INT_SYNC          ← CRITICAL: stale pending fires immediately
  └─ wait_for_completion_timeout()
       ↑
  spi_engine_irq():
    pending  = INT_PENDING → INT_SYNC set ✓
    completed_id = SYNC_ID = 1 (leftover from setup!)
    completed_id == AXI_SPI_ENGINE_CUR_MSG_SYNC_ID → TRUE
    msg->status = 0
    complete(&msg_complete)          ← premature! FPGA still executing
       ↓
  returns success
  FPGA may still be running the transfer


When it becomes a problem

This is especially visible when the driver performs dense initialization sequences, e.g.:

  • multiple regmap_write()
  • followed by regmap_update_bits() (read-modify-write)

in that case:

  • the read may return a stale value
  • resulting in incorrect register configuration

We could reproduce this reliably in the ad7768-1 driver during probe.

The critical path is:

ad7768_configure_dig_fil()
  └─ regmap_write(AD7768_REG_DIGITAL_FILTER)     ← Transfer 1 → stale IRQ fires here
       complete() called early, FPGA still busy

ad7768_set_freq()
  └─ ad7768_set_mclk_div()
       └─ regmap_update_bits(AD7768_REG_POWER_CLOCK)
            └─ regmap_read(AD7768_REG_POWER_CLOCK)  ← Transfer 2 (read)
                 FPGA still busy with Transfer 1
                 → read returns wrong/stale value
            └─ regmap_write(AD7768_REG_POWER_CLOCK, wrong_mask)  ← Transfer 3

Why it depends on SPI frequency

  • At low SPI clock (~2–3 MHz) the timing window is large enough → issue reproducible
  • At higher SPI clock → issue becomes hard or impossible to trigger

Questions

  • Is it expected that SYNC events from spi_engine_setup() can still be pending when the first runtime transfer starts?
  • Should the driver explicitly clear INT_PENDING[SYNC] after the polled SYNC?
  • Has anyone seen similar behavior at low SPI clock rates?

Thanks in advance!


  • Hello,

    Could you let us know which HDL and what software you are using?

    Have you used the sources as-is, or did you make any modifications? If so, please let us know what changes were made.

    Best regards,
    Elena

  • Hello Elena,

    thank you for your response.

    Here is our setup:

    • HDL: We are using a fork of ADI HDL main(2026-02-23). Our fork is based on ADI commit 5da8736c 
    • Platform: We are not using a ZedBoard. We are running on a Zynq UltraScale platform.
    • Project adaptation: Because of that, we had to adapt the example project accordingly for our Zynq UltraScale target.
    • Software: We are using PetaLinux as the software integration/build environment on our Zynq UltraScale platform.
      The kernel we run is the official Linux mainline kernel (v7)

    Regarding modifications:

    • We did not change the functional SPI transfer behavior to reproduce the issue.
    • We only added temporary debug instrumentation (register dumps/logging) to trace timing and IRQ behavior.

    If helpful, we can also share

    the debug-only patch used for instrumentation, and our FPGA design as a reference.

    Best regards.

  • Hi  ,

    Can you please provide us the devicetree you used? 

  • Hi jnsantos,

    here is the device tree we used.

    /dts-v1/;
    
    / {
        compatible = "xlnx,zynqmp";
        #address-cells = <0x02>;
        #size-cells = <0x02>;
    
        options {
    
            u-boot {
                compatible = "u-boot,config";
                bootscr-address = <0x00 0x20000000>;
            };
        };
    
        cpus {
            #address-cells = <0x01>;
            #size-cells = <0x00>;
    
            cpu@0 {
                #cooling-cells = <0x02>;
                compatible = "arm,cortex-a53";
                device_type = "cpu";
                enable-method = "psci";
                operating-points-v2 = <0x01>;
                reg = <0x00>;
                cpu-idle-states = <0x02>;
                next-level-cache = <0x03>;
                clocks = <0x04 0x0a>;
                phandle = <0x06>;
            };
    
            cpu@1 {
                #cooling-cells = <0x02>;
                compatible = "arm,cortex-a53";
                device_type = "cpu";
                enable-method = "psci";
                reg = <0x01>;
                operating-points-v2 = <0x01>;
                cpu-idle-states = <0x02>;
                next-level-cache = <0x03>;
                phandle = <0x07>;
            };
    
            cpu@2 {
                #cooling-cells = <0x02>;
                compatible = "arm,cortex-a53";
                device_type = "cpu";
                enable-method = "psci";
                reg = <0x02>;
                operating-points-v2 = <0x01>;
                cpu-idle-states = <0x02>;
                next-level-cache = <0x03>;
                phandle = <0x08>;
            };
    
            cpu@3 {
                #cooling-cells = <0x02>;
                compatible = "arm,cortex-a53";
                device_type = "cpu";
                enable-method = "psci";
                reg = <0x03>;
                operating-points-v2 = <0x01>;
                cpu-idle-states = <0x02>;
                next-level-cache = <0x03>;
                phandle = <0x09>;
            };
    
            l2-cache {
                compatible = "cache";
                cache-level = <0x02>;
                cache-unified;
                phandle = <0x03>;
            };
    
            idle-states {
                entry-method = "psci";
    
                cpu-sleep-0 {
                    compatible = "arm,idle-state";
                    arm,psci-suspend-param = <0x40000000>;
                    local-timer-stop;
                    entry-latency-us = <0x12c>;
                    exit-latency-us = <0x258>;
                    min-residency-us = <0x2710>;
                    phandle = <0x02>;
                };
            };
        };
    
        opp-table-cpu {
            compatible = "operating-points-v2";
            opp-shared;
            phandle = <0x01>;
    
            opp-1200000000 {
                clock-latency-ns = <0x7a120>;
                opp-hz = <0x00 0x47868c00>;
                opp-microvolt = <0xf4240>;
            };
    
            opp-600000000 {
                clock-latency-ns = <0x7a120>;
                opp-hz = <0x00 0x23c34600>;
                opp-microvolt = <0xf4240>;
            };
    
            opp-400000000 {
                clock-latency-ns = <0x7a120>;
                opp-hz = <0x00 0x17d78400>;
                opp-microvolt = <0xf4240>;
            };
    
            opp-300000000 {
                clock-latency-ns = <0x7a120>;
                opp-hz = <0x00 0x11e1a300>;
                opp-microvolt = <0xf4240>;
            };
        };
    
        zynqmp-ipi {
            bootph-all;
            compatible = "xlnx,zynqmp-ipi-mailbox";
            interrupt-parent = <0x05>;
            interrupts = <0x00 0x23 0x04>;
            xlnx,ipi-id = <0x00>;
            #address-cells = <0x02>;
            #size-cells = <0x02>;
            ranges;
            phandle = <0x22>;
    
            mailbox@ff9905c0 {
                bootph-all;
                compatible = "xlnx,zynqmp-ipi-dest-mailbox";
                reg = <0x00 0xff9905c0 0x00 0x20 0x00 0xff9905e0 0x00 0x20 0x00 0xff990e80 0x00 0x20 0x00 0xff990ea0 0x00 0x20>;
                reg-names = "local_request_region\0local_response_region\0remote_request_region\0remote_response_region";
                #mbox-cells = <0x01>;
                xlnx,ipi-id = <0x04>;
                phandle = <0x0a>;
            };
        };
    
        dcc {
            compatible = "arm,dcc";
            status = "okay";
            bootph-all;
            phandle = <0x23>;
        };
    
        pmu {
            compatible = "arm,cortex-a53-pmu";
            interrupt-parent = <0x05>;
            interrupts = <0x00 0x8f 0x04 0x00 0x90 0x04 0x00 0x91 0x04 0x00 0x92 0x04>;
            interrupt-affinity = <0x06 0x07 0x08 0x09>;
        };
    
        psci {
            compatible = "arm,psci-0.2";
            method = "smc";
        };
    
        firmware {
    
            zynqmp-firmware {
                compatible = "xlnx,zynqmp-firmware";
                #power-domain-cells = <0x01>;
                method = "smc";
                bootph-all;
                phandle = <0x17>;
    
                power-management {
                    bootph-all;
                    compatible = "xlnx,zynqmp-power";
                    interrupt-parent = <0x05>;
                    interrupts = <0x00 0x23 0x04>;
                    mboxes = <0x0a 0x00 0x0a 0x01>;
                    mbox-names = "tx\0rx";
                    phandle = <0x24>;
                };
    
                soc-nvmem {
                    compatible = "xlnx,zynqmp-nvmem-fw";
    
                    nvmem-layout {
                        compatible = "fixed-layout";
                        #address-cells = <0x01>;
                        #size-cells = <0x01>;
    
                        soc-revision@0 {
                            reg = <0x00 0x04>;
                            phandle = <0x25>;
                        };
    
                        efuse-dna@c {
                            reg = <0x0c 0x0c>;
                            phandle = <0x26>;
                        };
    
                        efuse-usr0@20 {
                            reg = <0x20 0x04>;
                            phandle = <0x27>;
                        };
    
                        efuse-usr1@24 {
                            reg = <0x24 0x04>;
                            phandle = <0x28>;
                        };
    
                        efuse-usr2@28 {
                            reg = <0x28 0x04>;
                            phandle = <0x29>;
                        };
    
                        efuse-usr3@2c {
                            reg = <0x2c 0x04>;
                            phandle = <0x2a>;
                        };
    
                        efuse-usr4@30 {
                            reg = <0x30 0x04>;
                            phandle = <0x2b>;
                        };
    
                        efuse-usr5@34 {
                            reg = <0x34 0x04>;
                            phandle = <0x2c>;
                        };
    
                        efuse-usr6@38 {
                            reg = <0x38 0x04>;
                            phandle = <0x2d>;
                        };
    
                        efuse-usr7@3c {
                            reg = <0x3c 0x04>;
                            phandle = <0x2e>;
                        };
    
                        efuse-miscusr@40 {
                            reg = <0x40 0x04>;
                            phandle = <0x2f>;
                        };
    
                        efuse-chash@50 {
                            reg = <0x50 0x04>;
                            phandle = <0x30>;
                        };
    
                        efuse-pufmisc@54 {
                            reg = <0x54 0x04>;
                            phandle = <0x31>;
                        };
    
                        efuse-sec@58 {
                            reg = <0x58 0x04>;
                            phandle = <0x32>;
                        };
    
                        efuse-spkid@5c {
                            reg = <0x5c 0x04>;
                            phandle = <0x33>;
                        };
    
                        efuse-aeskey@60 {
                            reg = <0x60 0x20>;
                            phandle = <0x34>;
                        };
    
                        efuse-ppk0hash@a0 {
                            reg = <0xa0 0x30>;
                            phandle = <0x35>;
                        };
    
                        efuse-ppk1hash@d0 {
                            reg = <0xd0 0x30>;
                            phandle = <0x36>;
                        };
    
                        efuse-pufuser@100 {
                            reg = <0x100 0x7f>;
                            phandle = <0x37>;
                        };
                    };
                };
    
                pcap {
                    compatible = "xlnx,zynqmp-pcap-fpga";
                    phandle = <0x10>;
                };
    
                reset-controller {
                    compatible = "xlnx,zynqmp-reset";
                    #reset-cells = <0x01>;
                    phandle = <0x16>;
                };
    
                pinctrl {
                    compatible = "xlnx,zynqmp-pinctrl";
                    status = "disabled";
                    phandle = <0x38>;
    
                    i2c1-default {
                    };
    
                    i2c1-gpio {
                    };
                };
    
                gpio {
                    compatible = "xlnx,zynqmp-gpio-modepin";
                    gpio-controller;
                    #gpio-cells = <0x02>;
                    phandle = <0x1a>;
                };
    
                clock-controller {
                    bootph-all;
                    #clock-cells = <0x01>;
                    compatible = "xlnx,zynqmp-clk";
                    clocks = <0x0b 0x0c 0x0d 0x0e 0x0f>;
                    clock-names = "pss_ref_clk\0video_clk\0pss_alt_ref_clk\0aux_ref_clk\0gt_crx_ref_clk";
                    phandle = <0x04>;
                };
            };
        };
    
        timer {
            compatible = "arm,armv8-timer";
            interrupt-parent = <0x05>;
            interrupts = <0x01 0x0d 0xf08 0x01 0x0e 0xf08 0x01 0x0b 0xf08 0x01 0x0a 0xf08>;
        };
    
        fpga-region {
            compatible = "fpga-region";
            fpga-mgr = <0x10>;
            #address-cells = <0x02>;
            #size-cells = <0x02>;
            ranges;
            phandle = <0x39>;
        };
    
        ams {
            compatible = "iio-hwmon";
            status = "disabled";
            io-channels = <0x11 0x00 0x11 0x01 0x11 0x02 0x11 0x03 0x11 0x04 0x11 0x05 0x11 0x06 0x11 0x07 0x11 0x08 0x11 0x09 0x11 0x0a 0x11 0x0b 0x11 0x0c 0x11 0x0d 0x11 0x0e 0x11 0x0f 0x11 0x10 0x11 0x11 0x11 0x12 0x11 0x13 0x11 0x14 0x11 0x15 0x11 0x16 0x11 0x17 0x11 0x18 0x11 0x19 0x11 0x1a 0x11 0x1b 0x11 0x1c 0x11 0x1d>;
            phandle = <0x3a>;
        };
    
        thermal-sensor-apu {
            compatible = "generic-adc-thermal";
            #thermal-sensor-cells = <0x00>;
            io-channels = <0x11 0x07>;
            io-channel-names = "sensor-channel";
            phandle = <0x12>;
        };
    
        thermal-sensor-rpu {
            compatible = "generic-adc-thermal";
            #thermal-sensor-cells = <0x00>;
            io-channels = <0x11 0x08>;
            io-channel-names = "sensor-channel";
            phandle = <0x14>;
        };
    
        thermal-sensor-pl {
            compatible = "generic-adc-thermal";
            #thermal-sensor-cells = <0x00>;
            io-channels = <0x11 0x14>;
            io-channel-names = "sensor-channel";
            phandle = <0x15>;
        };
    
        thermal-zones {
    
            apu-thermal {
                polling-delay-passive = <0x3e8>;
                polling-delay = <0x1388>;
                thermal-sensors = <0x12>;
    
                trips {
    
                    passive {
                        temperature = <0x16b48>;
                        hysteresis = <0xdac>;
                        type = "passive";
                        phandle = <0x13>;
                    };
    
                    critical {
                        temperature = <0x178f4>;
                        hysteresis = <0xdac>;
                        type = "critical";
                        phandle = <0x3b>;
                    };
                };
    
                cooling-maps {
    
                    map {
                        trip = <0x13>;
                        cooling-device = <0x06 0xffffffff 0xffffffff 0x07 0xffffffff 0xffffffff 0x08 0xffffffff 0xffffffff 0x09 0xffffffff 0xffffffff>;
                    };
                };
            };
    
            rpu-thermal {
                polling-delay = <0x2710>;
                thermal-sensors = <0x14>;
    
                trips {
    
                    critical {
                        temperature = <0x178f4>;
                        hysteresis = <0xdac>;
                        type = "critical";
                    };
                };
            };
    
            pl-thermal {
                polling-delay = <0x2710>;
                thermal-sensors = <0x15>;
    
                trips {
    
                    critical {
                        temperature = <0x178f4>;
                        hysteresis = <0xdac>;
                        type = "critical";
                    };
                };
            };
        };
    
        axi {
            compatible = "simple-bus";
            bootph-all;
            #address-cells = <0x02>;
            #size-cells = <0x02>;
            ranges;
            phandle = <0x3c>;
    
            can@ff060000 {
                compatible = "xlnx,zynq-can-1.0";
                status = "disabled";
                clock-names = "can_clk\0pclk";
                reg = <0x00 0xff060000 0x00 0x1000>;
                interrupts = <0x00 0x17 0x04>;
                interrupt-parent = <0x05>;
                tx-fifo-depth = <0x40>;
                rx-fifo-depth = <0x40>;
                resets = <0x16 0x28>;
                power-domains = <0x17 0x2f>;
                clocks = <0x04 0x3f 0x04 0x1f>;
                phandle = <0x3d>;
            };
    
            can@ff070000 {
                compatible = "xlnx,zynq-can-1.0";
                status = "disabled";
                clock-names = "can_clk\0pclk";
                reg = <0x00 0xff070000 0x00 0x1000>;
                interrupts = <0x00 0x18 0x04>;
                interrupt-parent = <0x05>;
                tx-fifo-depth = <0x40>;
                rx-fifo-depth = <0x40>;
                resets = <0x16 0x29>;
                power-domains = <0x17 0x30>;
                clocks = <0x04 0x40 0x04 0x1f>;
                phandle = <0x3e>;
            };
    
            cci@fd6e0000 {
                compatible = "arm,cci-400";
                status = "okay";
                reg = <0x00 0xfd6e0000 0x00 0x9000>;
                ranges = <0x00 0x00 0xfd6e0000 0x10000>;
                #address-cells = <0x01>;
                #size-cells = <0x01>;
                phandle = <0x3f>;
    
                pmu@9000 {
                    compatible = "arm,cci-400-pmu,r1";
                    reg = <0x9000 0x5000>;
                    interrupt-parent = <0x05>;
                    interrupts = <0x00 0x7b 0x04 0x00 0x7b 0x04 0x00 0x7b 0x04 0x00 0x7b 0x04 0x00 0x7b 0x04>;
                };
            };
    
            debug@fec10000 {
                compatible = "arm,coresight-cpu-debug\0arm,primecell";
                reg = <0x00 0xfec10000 0x00 0x1000>;
                clock-names = "apb_pclk";
                cpu = <0x06>;
                clocks = <0x04 0x0c>;
                phandle = <0x40>;
            };
    
            debug@fed10000 {
                compatible = "arm,coresight-cpu-debug\0arm,primecell";
                reg = <0x00 0xfed10000 0x00 0x1000>;
                clock-names = "apb_pclk";
                cpu = <0x07>;
                clocks = <0x04 0x0c>;
                phandle = <0x41>;
            };
    
            debug@fee10000 {
                compatible = "arm,coresight-cpu-debug\0arm,primecell";
                reg = <0x00 0xfee10000 0x00 0x1000>;
                clock-names = "apb_pclk";
                cpu = <0x08>;
                clocks = <0x04 0x0c>;
                phandle = <0x42>;
            };
    
            debug@fef10000 {
                compatible = "arm,coresight-cpu-debug\0arm,primecell";
                reg = <0x00 0xfef10000 0x00 0x1000>;
                clock-names = "apb_pclk";
                cpu = <0x09>;
                clocks = <0x04 0x0c>;
                phandle = <0x43>;
            };
    
            dma-controller@fd500000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd500000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x7c 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x44>;
            };
    
            dma-controller@fd510000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd510000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x7d 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x45>;
            };
    
            dma-controller@fd520000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd520000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x7e 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x46>;
            };
    
            dma-controller@fd530000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd530000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x7f 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x47>;
            };
    
            dma-controller@fd540000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd540000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x80 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x48>;
            };
    
            dma-controller@fd550000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd550000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x81 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x49>;
            };
    
            dma-controller@fd560000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd560000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x82 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x4a>;
            };
    
            dma-controller@fd570000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xfd570000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x83 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x80>;
                power-domains = <0x17 0x2a>;
                clocks = <0x04 0x13 0x04 0x1f>;
                phandle = <0x4b>;
            };
    
            interrupt-controller@f9010000 {
                compatible = "arm,gic-400";
                #interrupt-cells = <0x03>;
                reg = <0x00 0xf9010000 0x00 0x10000 0x00 0xf9020000 0x00 0x20000 0x00 0xf9040000 0x00 0x20000 0x00 0xf9060000 0x00 0x20000>;
                interrupt-controller;
                interrupt-parent = <0x05>;
                interrupts = <0x01 0x09 0xf04>;
                num_cpus = <0x02>;
                num_interrupts = <0x60>;
                phandle = <0x05>;
            };
    
            gpu@fd4b0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-mali\0arm,mali-400";
                reg = <0x00 0xfd4b0000 0x00 0x10000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x84 0x04 0x00 0x84 0x04 0x00 0x84 0x04 0x00 0x84 0x04 0x00 0x84 0x04 0x00 0x84 0x04>;
                interrupt-names = "gp\0gpmmu\0pp0\0ppmmu0\0pp1\0ppmmu1";
                clock-names = "bus\0core";
                power-domains = <0x17 0x3a>;
                clocks = <0x04 0x18 0x04 0x19>;
                xlnx,tz-nonsecure = <0x01>;
                phandle = <0x4c>;
            };
    
            dma-controller@ffa80000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffa80000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x4d 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x4d>;
            };
    
            dma-controller@ffa90000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffa90000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x4e 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x4e>;
            };
    
            dma-controller@ffaa0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffaa0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x4f 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x4f>;
            };
    
            dma-controller@ffab0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffab0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x50 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x50>;
            };
    
            dma-controller@ffac0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffac0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x51 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x51>;
            };
    
            dma-controller@ffad0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffad0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x52 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x52>;
            };
    
            dma-controller@ffae0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffae0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x53 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x53>;
            };
    
            dma-controller@ffaf0000 {
                status = "okay";
                compatible = "xlnx,zynqmp-dma-1.0";
                reg = <0x00 0xffaf0000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x54 0x04>;
                clock-names = "clk_main\0clk_apb";
                #dma-cells = <0x01>;
                xlnx,bus-width = <0x40>;
                power-domains = <0x17 0x2b>;
                clocks = <0x04 0x44 0x04 0x1f>;
                phandle = <0x54>;
            };
    
            memory-controller@fd070000 {
                compatible = "xlnx,zynqmp-ddrc-2.40a";
                reg = <0x00 0xfd070000 0x00 0x30000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x70 0x04>;
                phandle = <0x55>;
            };
    
            nand-controller@ff100000 {
                compatible = "xlnx,zynqmp-nand-controller\0arasan,nfc-v3p10";
                status = "disabled";
                reg = <0x00 0xff100000 0x00 0x1000>;
                clock-names = "controller\0bus";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x0e 0x04>;
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x2c>;
                clocks = <0x04 0x3c 0x04 0x1f>;
                phandle = <0x56>;
            };
    
            ethernet@ff0b0000 {
                compatible = "xlnx,zynqmp-gem\0cdns,gem";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x39 0x04 0x00 0x39 0x04>;
                reg = <0x00 0xff0b0000 0x00 0x1000>;
                clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk";
                power-domains = <0x17 0x1d>;
                resets = <0x16 0x1d>;
                reset-names = "gem0_rst";
                clocks = <0x04 0x1f 0x04 0x68 0x04 0x2d 0x04 0x31 0x04 0x2c>;
                assigned-clocks = <0x04 0x2c>;
                phandle = <0x57>;
            };
    
            ethernet@ff0c0000 {
                compatible = "xlnx,zynqmp-gem\0cdns,gem";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x3b 0x04 0x00 0x3b 0x04>;
                reg = <0x00 0xff0c0000 0x00 0x1000>;
                clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk";
                power-domains = <0x17 0x1e>;
                resets = <0x16 0x1e>;
                reset-names = "gem1_rst";
                clocks = <0x04 0x1f 0x04 0x69 0x04 0x2e 0x04 0x32 0x04 0x2c>;
                assigned-clocks = <0x04 0x2c>;
                phandle = <0x58>;
            };
    
            ethernet@ff0d0000 {
                compatible = "xlnx,zynqmp-gem\0cdns,gem";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x3d 0x04 0x00 0x3d 0x04>;
                reg = <0x00 0xff0d0000 0x00 0x1000>;
                clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk";
                power-domains = <0x17 0x1f>;
                resets = <0x16 0x1f>;
                reset-names = "gem2_rst";
                clocks = <0x04 0x1f 0x04 0x6a 0x04 0x2f 0x04 0x33 0x04 0x2c>;
                assigned-clocks = <0x04 0x2c>;
                phandle = <0x59>;
            };
    
            ethernet@ff0e0000 {
                compatible = "xlnx,zynqmp-gem\0cdns,gem";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x3f 0x04 0x00 0x3f 0x04>;
                reg = <0x00 0xff0e0000 0x00 0x1000>;
                clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk";
                power-domains = <0x17 0x20>;
                resets = <0x16 0x20>;
                reset-names = "gem3_rst";
                clocks = <0x04 0x1f 0x04 0x6b 0x04 0x30 0x04 0x34 0x04 0x2c>;
                assigned-clocks = <0x04 0x2c>;
                phy-mode = "rgmii-id";
                xlnx,ptp-enet-clock = <0x00>;
                local-mac-address = [ff ff ff ff ff ff];
                phandle = <0x5a>;
            };
    
            gpio@ff0a0000 {
                compatible = "xlnx,zynqmp-gpio-1.0";
                status = "okay";
                #gpio-cells = <0x02>;
                gpio-controller;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x10 0x04>;
                interrupt-controller;
                #interrupt-cells = <0x02>;
                reg = <0x00 0xff0a0000 0x00 0x1000>;
                power-domains = <0x17 0x2e>;
                clocks = <0x04 0x1f>;
                emio-gpio-width = <0x20>;
                gpio-mask-high = <0x00>;
                gpio-mask-low = <0x5600>;
                phandle = <0x21>;
            };
    
            i2c@ff020000 {
                compatible = "cdns,i2c-r1p14";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x11 0x04>;
                clock-frequency = <0x61a80>;
                reg = <0x00 0xff020000 0x00 0x1000>;
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x25>;
                clocks = <0x04 0x3d>;
                phandle = <0x5b>;
            };
    
            i2c@ff030000 {
                compatible = "cdns,i2c-r1p14";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x12 0x04>;
                clock-frequency = <0x61a80>;
                reg = <0x00 0xff030000 0x00 0x1000>;
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x26>;
                clocks = <0x04 0x3e>;
                phandle = <0x5c>;
            };
    
            memory-controller@ff960000 {
                compatible = "xlnx,zynqmp-ocmc-1.0";
                reg = <0x00 0xff960000 0x00 0x1000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x0a 0x04>;
                phandle = <0x5d>;
            };
    
            perf-monitor@ffa00000 {
                compatible = "xlnx,axi-perf-monitor";
                reg = <0x00 0xffa00000 0x00 0x10000>;
                interrupts = <0x00 0x19 0x04>;
                interrupt-parent = <0x05>;
                xlnx,enable-profile = <0x00>;
                xlnx,enable-trace = <0x00>;
                xlnx,num-monitor-slots = <0x01>;
                xlnx,enable-event-count = <0x01>;
                xlnx,enable-event-log = <0x01>;
                xlnx,have-sampled-metric-cnt = <0x01>;
                xlnx,num-of-counters = <0x08>;
                xlnx,metric-count-width = <0x20>;
                xlnx,metrics-sample-count-width = <0x20>;
                xlnx,global-count-width = <0x20>;
                xlnx,metric-count-scale = <0x01>;
                clocks = <0x04 0x1f>;
                phandle = <0x5e>;
            };
    
            perf-monitor@fd0b0000 {
                compatible = "xlnx,axi-perf-monitor";
                reg = <0x00 0xfd0b0000 0x00 0x10000>;
                interrupts = <0x00 0x7b 0x04>;
                interrupt-parent = <0x05>;
                xlnx,enable-profile = <0x00>;
                xlnx,enable-trace = <0x00>;
                xlnx,num-monitor-slots = <0x06>;
                xlnx,enable-event-count = <0x01>;
                xlnx,enable-event-log = <0x00>;
                xlnx,have-sampled-metric-cnt = <0x01>;
                xlnx,num-of-counters = <0x0a>;
                xlnx,metric-count-width = <0x20>;
                xlnx,metrics-sample-count-width = <0x20>;
                xlnx,global-count-width = <0x20>;
                xlnx,metric-count-scale = <0x01>;
                clocks = <0x04 0x1c>;
                phandle = <0x5f>;
            };
    
            perf-monitor@fd490000 {
                compatible = "xlnx,axi-perf-monitor";
                reg = <0x00 0xfd490000 0x00 0x10000>;
                interrupts = <0x00 0x7b 0x04>;
                interrupt-parent = <0x05>;
                xlnx,enable-profile = <0x00>;
                xlnx,enable-trace = <0x00>;
                xlnx,num-monitor-slots = <0x01>;
                xlnx,enable-event-count = <0x01>;
                xlnx,enable-event-log = <0x00>;
                xlnx,have-sampled-metric-cnt = <0x01>;
                xlnx,num-of-counters = <0x08>;
                xlnx,metric-count-width = <0x20>;
                xlnx,metrics-sample-count-width = <0x20>;
                xlnx,global-count-width = <0x20>;
                xlnx,metric-count-scale = <0x01>;
                clocks = <0x04 0x1c>;
                phandle = <0x60>;
            };
    
            perf-monitor@ffa10000 {
                compatible = "xlnx,axi-perf-monitor";
                reg = <0x00 0xffa10000 0x00 0x10000>;
                interrupts = <0x00 0x19 0x04>;
                interrupt-parent = <0x05>;
                xlnx,enable-profile = <0x00>;
                xlnx,enable-trace = <0x00>;
                xlnx,num-monitor-slots = <0x01>;
                xlnx,enable-event-count = <0x01>;
                xlnx,enable-event-log = <0x01>;
                xlnx,have-sampled-metric-cnt = <0x01>;
                xlnx,num-of-counters = <0x08>;
                xlnx,metric-count-width = <0x20>;
                xlnx,metrics-sample-count-width = <0x20>;
                xlnx,global-count-width = <0x20>;
                xlnx,metric-count-scale = <0x01>;
                clocks = <0x04 0x1f>;
                phandle = <0x61>;
            };
    
            pcie@fd0e0000 {
                compatible = "xlnx,nwl-pcie-2.11";
                status = "disabled";
                #address-cells = <0x03>;
                #size-cells = <0x02>;
                #interrupt-cells = <0x01>;
                msi-controller;
                device_type = "pci";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x76 0x04 0x00 0x75 0x04 0x00 0x74 0x04 0x00 0x73 0x04 0x00 0x72 0x04>;
                interrupt-names = "misc\0dummy\0intx\0msi1\0msi0";
                msi-parent = <0x18>;
                reg = <0x00 0xfd0e0000 0x00 0x1000 0x00 0xfd480000 0x00 0x1000 0x80 0x00 0x00 0x10000000>;
                reg-names = "breg\0pcireg\0cfg";
                ranges = <0x2000000 0x00 0xe0000000 0x00 0xe0000000 0x00 0x10000000 0x43000000 0x06 0x00 0x06 0x00 0x02 0x00>;
                bus-range = <0x00 0xff>;
                interrupt-map-mask = <0x00 0x00 0x00 0x07>;
                interrupt-map = <0x00 0x00 0x00 0x01 0x19 0x01 0x00 0x00 0x00 0x02 0x19 0x02 0x00 0x00 0x00 0x03 0x19 0x03 0x00 0x00 0x00 0x04 0x19 0x04>;
                power-domains = <0x17 0x3b>;
                clocks = <0x04 0x17>;
                phandle = <0x18>;
    
                legacy-interrupt-controller {
                    interrupt-controller;
                    #address-cells = <0x00>;
                    #interrupt-cells = <0x01>;
                    phandle = <0x19>;
                };
            };
    
            spi@ff0f0000 {
                bootph-all;
                compatible = "xlnx,zynqmp-qspi-1.0";
                status = "okay";
                clock-names = "ref_clk\0pclk";
                interrupts = <0x00 0x0f 0x04>;
                interrupt-parent = <0x05>;
                num-cs = <0x02>;
                reg = <0x00 0xff0f0000 0x00 0x1000 0x00 0xc0000000 0x00 0x8000000>;
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x2d>;
                clocks = <0x04 0x35 0x04 0x1f>;
                is-dual = <0x01>;
                spi-rx-bus-width = <0x04>;
                spi-tx-bus-width = <0x04>;
                phandle = <0x62>;
    
                flash@0 {
                    spi-tx-bus-width = <0x04>;
                    spi-rx-bus-width = <0x04>;
                    phandle = <0x63>;
    
                    partition@0 {
                        label = "qspi-boot";
                        reg = <0x00 0x100000>;
                    };
    
                    partition@1 {
                        label = "qspi-kernel";
                        reg = <0x100000 0x1600000>;
                    };
    
                    partition@2 {
                        label = "qspi-bootenv";
                        reg = <0x1700000 0x40000>;
                    };
                };
            };
    
            phy@fd400000 {
                compatible = "xlnx,zynqmp-psgtr-v1.1";
                status = "okay";
                reg = <0x00 0xfd400000 0x00 0x40000 0x00 0xfd3d0000 0x00 0x1000>;
                reg-names = "serdes\0siou";
                #phy-cells = <0x04>;
                phandle = <0x64>;
            };
    
            rtc@ffa60000 {
                compatible = "xlnx,zynqmp-rtc";
                status = "okay";
                reg = <0x00 0xffa60000 0x00 0x100>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x1a 0x04 0x00 0x1b 0x04>;
                interrupt-names = "alarm\0sec";
                calibration = <0x7fff>;
                phandle = <0x65>;
            };
    
            ahci@fd0c0000 {
                compatible = "ceva,ahci-1v84";
                status = "disabled";
                reg = <0x00 0xfd0c0000 0x00 0x2000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x85 0x04>;
                power-domains = <0x17 0x1c>;
                resets = <0x16 0x10>;
                clocks = <0x04 0x16>;
                phandle = <0x66>;
            };
    
            mmc@ff160000 {
                bootph-all;
                compatible = "xlnx,zynqmp-8.9a\0arasan,sdhci-8.9a";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x30 0x04>;
                reg = <0x00 0xff160000 0x00 0x1000>;
                clock-names = "clk_xin\0clk_ahb";
                #clock-cells = <0x01>;
                clock-output-names = "clk_out_sd0\0clk_in_sd0";
                power-domains = <0x17 0x27>;
                resets = <0x16 0x26>;
                clocks = <0x04 0x36 0x04 0x1f>;
                assigned-clocks = <0x04 0x36>;
                clock-frequency = <0xbebc200>;
                xlnx,mio-bank = <0x00>;
                phandle = <0x67>;
            };
    
            mmc@ff170000 {
                bootph-all;
                compatible = "xlnx,zynqmp-8.9a\0arasan,sdhci-8.9a";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x31 0x04>;
                reg = <0x00 0xff170000 0x00 0x1000>;
                clock-names = "clk_xin\0clk_ahb";
                #clock-cells = <0x01>;
                clock-output-names = "clk_out_sd1\0clk_in_sd1";
                power-domains = <0x17 0x28>;
                resets = <0x16 0x27>;
                clocks = <0x04 0x37 0x04 0x1f>;
                assigned-clocks = <0x04 0x37>;
                clock-frequency = <0xbebc200>;
                xlnx,mio-bank = <0x01>;
                phandle = <0x68>;
            };
    
            iommu@fd800000 {
                compatible = "arm,mmu-500";
                reg = <0x00 0xfd800000 0x00 0x20000>;
                #iommu-cells = <0x01>;
                status = "disabled";
                #global-interrupts = <0x01>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04 0x00 0x9b 0x04>;
                phandle = <0x69>;
            };
    
            spi@ff040000 {
                compatible = "cdns,spi-r1p6";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x13 0x04>;
                reg = <0x00 0xff040000 0x00 0x1000>;
                clock-names = "ref_clk\0pclk";
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x23>;
                clocks = <0x04 0x3a 0x04 0x1f>;
                phandle = <0x6a>;
            };
    
            spi@ff050000 {
                compatible = "cdns,spi-r1p6";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x14 0x04>;
                reg = <0x00 0xff050000 0x00 0x1000>;
                clock-names = "ref_clk\0pclk";
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                power-domains = <0x17 0x24>;
                clocks = <0x04 0x3b 0x04 0x1f>;
                phandle = <0x6b>;
            };
    
            timer@ff110000 {
                compatible = "cdns,ttc";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x24 0x04 0x00 0x25 0x04 0x00 0x26 0x04>;
                reg = <0x00 0xff110000 0x00 0x1000>;
                timer-width = <0x20>;
                power-domains = <0x17 0x18>;
                clocks = <0x04 0x1f>;
                phandle = <0x6c>;
            };
    
            timer@ff120000 {
                compatible = "cdns,ttc";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x27 0x04 0x00 0x28 0x04 0x00 0x29 0x04>;
                reg = <0x00 0xff120000 0x00 0x1000>;
                timer-width = <0x20>;
                power-domains = <0x17 0x19>;
                clocks = <0x04 0x1f>;
                phandle = <0x6d>;
            };
    
            timer@ff130000 {
                compatible = "cdns,ttc";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x2a 0x04 0x00 0x2b 0x04 0x00 0x2c 0x04>;
                reg = <0x00 0xff130000 0x00 0x1000>;
                timer-width = <0x20>;
                power-domains = <0x17 0x1a>;
                clocks = <0x04 0x1f>;
                phandle = <0x6e>;
            };
    
            timer@ff140000 {
                compatible = "cdns,ttc";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x2d 0x04 0x00 0x2e 0x04 0x00 0x2f 0x04>;
                reg = <0x00 0xff140000 0x00 0x1000>;
                timer-width = <0x20>;
                power-domains = <0x17 0x1b>;
                clocks = <0x04 0x1f>;
                phandle = <0x6f>;
            };
    
            serial@ff000000 {
                bootph-all;
                compatible = "xlnx,zynqmp-uart\0cdns,uart-r1p12";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x15 0x04>;
                reg = <0x00 0xff000000 0x00 0x1000>;
                clock-names = "uart_clk\0pclk";
                power-domains = <0x17 0x21>;
                resets = <0x16 0x22>;
                clocks = <0x04 0x38 0x04 0x1f>;
                assigned-clocks = <0x04 0x38>;
                cts-override;
                device_type = "serial";
                port-number = <0x00>;
                u-boot,dm-pre-reloc;
                phandle = <0x70>;
            };
    
            serial@ff010000 {
                bootph-all;
                compatible = "xlnx,zynqmp-uart\0cdns,uart-r1p12";
                status = "disabled";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x16 0x04>;
                reg = <0x00 0xff010000 0x00 0x1000>;
                clock-names = "uart_clk\0pclk";
                power-domains = <0x17 0x22>;
                resets = <0x16 0x23>;
                clocks = <0x04 0x39 0x04 0x1f>;
                assigned-clocks = <0x04 0x39>;
                phandle = <0x71>;
            };
    
            usb@ff9d0000 {
                #address-cells = <0x02>;
                #size-cells = <0x02>;
                status = "okay";
                compatible = "xlnx,zynqmp-dwc3";
                reg = <0x00 0xff9d0000 0x00 0x100>;
                clock-names = "bus_clk\0ref_clk";
                power-domains = <0x17 0x16>;
                resets = <0x16 0x3b 0x16 0x3d 0x16 0x3f>;
                reset-names = "usb_crst\0usb_hibrst\0usb_apbrst";
                reset-gpios = <0x1a 0x01 0x01>;
                ranges;
                clocks = <0x04 0x20 0x04 0x22>;
                assigned-clocks = <0x04 0x20 0x04 0x22>;
                xlnx,tz-nonsecure = <0x01>;
                xlnx,usb-polarity = <0x00>;
                xlnx,usb-reset-io = <0x19>;
                xlnx,usb-reset-mode = <0x02>;
                phandle = <0x72>;
    
                usb@fe200000 {
                    compatible = "snps,dwc3";
                    status = "okay";
                    reg = <0x00 0xfe200000 0x00 0x40000>;
                    interrupt-parent = <0x05>;
                    interrupt-names = "host\0peripheral\0otg\0wakeup";
                    interrupts = <0x00 0x41 0x04 0x00 0x41 0x04 0x00 0x45 0x04 0x00 0x4b 0x04>;
                    clock-names = "ref";
                    snps,quirk-frame-length-adjustment = <0x20>;
                    snps,resume-hs-terminations;
                    clocks = <0x04 0x22>;
                    maximum-speed = "high-speed";
                    snps,dis_u2_susphy_quirk;
                    snps,dis_u3_susphy_quirk;
                    phandle = <0x73>;
                };
            };
    
            usb@ff9e0000 {
                #address-cells = <0x02>;
                #size-cells = <0x02>;
                status = "disabled";
                compatible = "xlnx,zynqmp-dwc3";
                reg = <0x00 0xff9e0000 0x00 0x100>;
                clock-names = "bus_clk\0ref_clk";
                power-domains = <0x17 0x17>;
                resets = <0x16 0x3c 0x16 0x3e 0x16 0x40>;
                reset-names = "usb_crst\0usb_hibrst\0usb_apbrst";
                ranges;
                clocks = <0x04 0x21 0x04 0x22>;
                assigned-clocks = <0x04 0x21 0x04 0x22>;
                phandle = <0x74>;
    
                usb@fe300000 {
                    compatible = "snps,dwc3";
                    status = "disabled";
                    reg = <0x00 0xfe300000 0x00 0x40000>;
                    interrupt-parent = <0x05>;
                    interrupt-names = "host\0peripheral\0otg\0wakeup";
                    interrupts = <0x00 0x46 0x04 0x00 0x46 0x04 0x00 0x4a 0x04 0x00 0x4c 0x04>;
                    clock-names = "ref";
                    snps,quirk-frame-length-adjustment = <0x20>;
                    snps,resume-hs-terminations;
                    clocks = <0x04 0x22>;
                    phandle = <0x75>;
                };
            };
    
            watchdog@fd4d0000 {
                compatible = "cdns,wdt-r1p2";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x71 0x01>;
                reg = <0x00 0xfd4d0000 0x00 0x1000>;
                timeout-sec = <0x3c>;
                reset-on-timeout;
                clocks = <0x04 0x4b>;
                phandle = <0x76>;
            };
    
            watchdog@ff150000 {
                compatible = "cdns,wdt-r1p2";
                status = "okay";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x34 0x01>;
                reg = <0x00 0xff150000 0x00 0x1000>;
                timeout-sec = <0x0a>;
                clocks = <0x04 0x70>;
                phandle = <0x77>;
            };
    
            ams@ffa50000 {
                compatible = "xlnx,zynqmp-ams";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x38 0x04>;
                reg = <0x00 0xffa50000 0x00 0x800>;
                #address-cells = <0x01>;
                #size-cells = <0x01>;
                #io-channel-cells = <0x01>;
                ranges = <0x00 0x00 0xffa50800 0x800>;
                clocks = <0x04 0x46>;
                phandle = <0x11>;
    
                ams-ps@0 {
                    compatible = "xlnx,zynqmp-ams-ps";
                    status = "okay";
                    reg = <0x00 0x400>;
                    phandle = <0x78>;
                };
    
                ams-pl@400 {
                    compatible = "xlnx,zynqmp-ams-pl";
                    status = "okay";
                    reg = <0x400 0x400>;
                    phandle = <0x79>;
                };
            };
    
            dma-controller@fd4c0000 {
                compatible = "xlnx,zynqmp-dpdma";
                status = "disabled";
                reg = <0x00 0xfd4c0000 0x00 0x1000>;
                interrupts = <0x00 0x7a 0x04>;
                interrupt-parent = <0x05>;
                clock-names = "axi_clk";
                power-domains = <0x17 0x29>;
                #dma-cells = <0x01>;
                clocks = <0x04 0x14>;
                assigned-clocks = <0x04 0x14>;
                phandle = <0x1b>;
            };
    
            display@fd4a0000 {
                bootph-all;
                compatible = "xlnx,zynqmp-dpsub-1.7";
                status = "disabled";
                reg = <0x00 0xfd4a0000 0x00 0x1000 0x00 0xfd4aa000 0x00 0x1000 0x00 0xfd4ab000 0x00 0x1000 0x00 0xfd4ac000 0x00 0x1000>;
                reg-names = "dp\0blend\0av_buf\0aud";
                interrupts = <0x00 0x77 0x04>;
                interrupt-parent = <0x05>;
                clock-names = "dp_apb_clk\0dp_aud_clk\0dp_vtc_pixel_clk_in";
                power-domains = <0x17 0x29>;
                resets = <0x16 0x03>;
                dma-names = "vid0\0vid1\0vid2\0gfx0\0aud0\0aud1";
                dmas = <0x1b 0x00 0x1b 0x01 0x1b 0x02 0x1b 0x03 0x1b 0x04 0x1b 0x05>;
                clocks = <0x04 0x1c 0x04 0x11 0x04 0x10>;
                assigned-clocks = <0x04 0x12 0x04 0x11 0x04 0x10>;
                phandle = <0x7a>;
    
                ports {
                    #address-cells = <0x01>;
                    #size-cells = <0x00>;
    
                    port@0 {
                        reg = <0x00>;
                        phandle = <0x7b>;
                    };
    
                    port@1 {
                        reg = <0x01>;
                        phandle = <0x7c>;
                    };
    
                    port@2 {
                        reg = <0x02>;
                        phandle = <0x7d>;
                    };
    
                    port@3 {
                        reg = <0x03>;
                        phandle = <0x7e>;
                    };
    
                    port@4 {
                        reg = <0x04>;
                        phandle = <0x7f>;
                    };
    
                    port@5 {
                        reg = <0x05>;
                        phandle = <0x80>;
                    };
                };
            };
        };
    
        binman {
            phandle = <0x81>;
        };
    
        pss-ref-clk {
            bootph-all;
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x1fca055>;
            clock-output-names = "pss_ref_clk";
            phandle = <0x0b>;
        };
    
        video-clk {
            bootph-all;
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x1fc9f08>;
            clock-output-names = "video_clk";
            phandle = <0x0c>;
        };
    
        pss-alt-ref-clk {
            bootph-all;
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x00>;
            clock-output-names = "pss_alt_ref_clk";
            phandle = <0x0d>;
        };
    
        gt-crx-ref-clk {
            bootph-all;
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x66ff300>;
            clock-output-names = "gt_crx_ref_clk";
            phandle = <0x0f>;
        };
    
        aux-ref-clk {
            bootph-all;
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x19bfcc0>;
            clock-output-names = "aux_ref_clk";
            phandle = <0x0e>;
        };
    
        pl-bus {
            #address-cells = <0x02>;
            #size-cells = <0x02>;
            compatible = "simple-bus";
            ranges;
            phandle = <0x82>;
    
            axi_dmac@80000000 {
                clock-names = "m_dest_axi_aclk\0s_axi_aclk\0s_axis_aclk";
                clocks = <0x04 0x47 0x04 0x47 0x1c>;
                compatible = "adi,axi-dmac-1.00.a\0xlnx,axi-dmac-1.0";
                interrupt-names = "irq";
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x5f 0x04>;
                reg = <0x00 0x80000000 0x00 0x10000>;
                #dma-cells = <0x01>;
                phandle = <0x1d>;
            };
    
            axi_version_info@80030000 {
                clock-names = "s00_axi_aclk";
                clocks = <0x04 0x47>;
                compatible = "xlnx,axi-version-info-1.0";
                reg = <0x00 0x80030000 0x00 0x10000>;
                xlnx,s00-axi-addr-width = <0x04>;
                xlnx,s00-axi-data-width = <0x20>;
                phandle = <0x83>;
            };
    
            axi_spi_engine@80010000 {
                clock-names = "s_axi_aclk\0spi_clk";
                clocks = <0x04 0x47 0x1c>;
                compatible = "adi,axi-spi-engine-1.00.a\0xlnx,axi-spi-engine-1.0";
                reg = <0x00 0x80010000 0x00 0x10000>;
                interrupt-parent = <0x05>;
                interrupts = <0x00 0x60 0x04>;
                interrupt-names = "irq";
                dmas = <0x1d 0x00>;
                dma-names = "offload0-rx";
                trigger-sources = <0x1e 0x02>;
                #address-cells = <0x01>;
                #size-cells = <0x00>;
                phandle = <0x84>;
    
                adaq7768@0 {
                    compatible = "adi,adaq7768-1";
                    reg = <0x00>;
                    status = "okay";
                    spi-max-frequency = <0x1312d00>;
                    spi-cpol;
                    spi-cpha;
                    clocks = <0x1f>;
                    clock-names = "mclk";
                    vref-supply = <0x20>;
                    interrupt-parent = <0x21>;
                    interrupts = <0x55 0x01>;
                    adi,sync-in-gpios = <0x21 0x50 0x00>;
                    reset-gpios = <0x21 0x4e 0x01>;
                    pga-gpios = <0x21 0x51 0x01 0x21 0x52 0x01 0x21 0x53 0x01>;
                    #trigger-source-cells = <0x01>;
                    phandle = <0x1e>;
                };
            };
        };
    
        misc_clk_0 {
            #clock-cells = <0x00>;
            clock-div = <0x0a>;
            clock-mult = <0x10>;
            clocks = <0x04 0x47>;
            compatible = "fixed-factor-clock";
            phandle = <0x1c>;
        };
    
        chosen {
            bootargs = "earlycon console=ttyPS0,115200 root=/dev/ram0 rw clk_ignore_unused";
            stdout-path = "serial0:115200n8";
        };
    
        aliases {
            ethernet0 = "/axi/ethernet@ff0e0000";
            i2c0 = "/axi/i2c@ff020000";
            i2c1 = "/axi/i2c@ff030000";
            serial0 = "/axi/serial@ff000000";
            serial1 = "/dcc";
            spi0 = "/axi/spi@ff0f0000";
        };
    
        memory@0 {
            device_type = "memory";
            reg = <0x00 0x00 0x00 0x7ff00000>;
        };
    
        regulator-5v0 {
            compatible = "regulator-fixed";
            regulator-name = "adc_vref";
            regulator-min-microvolt = <0x3e8000>;
            regulator-max-microvolt = <0x3e8000>;
            regulator-always-on;
            phandle = <0x20>;
        };
    
        adaq7768_mclk {
            compatible = "fixed-clock";
            #clock-cells = <0x00>;
            clock-frequency = <0x1E8480>;
            clock-output-names = "mclk";
            phandle = <0x1f>;
        };
    
        __symbols__ {
            cpu0 = "/cpus/cpu@0";
            cpu1 = "/cpus/cpu@1";
            cpu2 = "/cpus/cpu@2";
            cpu3 = "/cpus/cpu@3";
            L2 = "/cpus/l2-cache";
            CPU_SLEEP_0 = "/cpus/idle-states/cpu-sleep-0";
            cpu_opp_table = "/opp-table-cpu";
            zynqmp_ipi = "/zynqmp-ipi";
            ipi_mailbox_pmu1 = "/zynqmp-ipi/mailbox@ff9905c0";
            dcc = "/dcc";
            zynqmp_firmware = "/firmware/zynqmp-firmware";
            zynqmp_power = "/firmware/zynqmp-firmware/power-management";
            soc_revision = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/soc-revision@0";
            efuse_dna = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-dna@c";
            efuse_usr0 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr0@20";
            efuse_usr1 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr1@24";
            efuse_usr2 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr2@28";
            efuse_usr3 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr3@2c";
            efuse_usr4 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr4@30";
            efuse_usr5 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr5@34";
            efuse_usr6 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr6@38";
            efuse_usr7 = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-usr7@3c";
            efuse_miscusr = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-miscusr@40";
            efuse_chash = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-chash@50";
            efuse_pufmisc = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-pufmisc@54";
            efuse_sec = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-sec@58";
            efuse_spkid = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-spkid@5c";
            efuse_aeskey = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-aeskey@60";
            efuse_ppk0hash = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-ppk0hash@a0";
            efuse_ppk1hash = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-ppk1hash@d0";
            efuse_pufuser = "/firmware/zynqmp-firmware/soc-nvmem/nvmem-layout/efuse-pufuser@100";
            zynqmp_pcap = "/firmware/zynqmp-firmware/pcap";
            zynqmp_reset = "/firmware/zynqmp-firmware/reset-controller";
            pinctrl0 = "/firmware/zynqmp-firmware/pinctrl";
            modepin_gpio = "/firmware/zynqmp-firmware/gpio";
            zynqmp_clk = "/firmware/zynqmp-firmware/clock-controller";
            fpga_full = "/fpga-region";
            ams = "/ams";
            tsens_apu = "/thermal-sensor-apu";
            tsens_rpu = "/thermal-sensor-rpu";
            tsens_pl = "/thermal-sensor-pl";
            apu_passive = "/thermal-zones/apu-thermal/trips/passive";
            apu_critical = "/thermal-zones/apu-thermal/trips/critical";
            amba = "/axi";
            can0 = "/axi/can@ff060000";
            can1 = "/axi/can@ff070000";
            cci = "/axi/cci@fd6e0000";
            cpu0_debug = "/axi/debug@fec10000";
            cpu1_debug = "/axi/debug@fed10000";
            cpu2_debug = "/axi/debug@fee10000";
            cpu3_debug = "/axi/debug@fef10000";
            fpd_dma_chan1 = "/axi/dma-controller@fd500000";
            fpd_dma_chan2 = "/axi/dma-controller@fd510000";
            fpd_dma_chan3 = "/axi/dma-controller@fd520000";
            fpd_dma_chan4 = "/axi/dma-controller@fd530000";
            fpd_dma_chan5 = "/axi/dma-controller@fd540000";
            fpd_dma_chan6 = "/axi/dma-controller@fd550000";
            fpd_dma_chan7 = "/axi/dma-controller@fd560000";
            fpd_dma_chan8 = "/axi/dma-controller@fd570000";
            gic = "/axi/interrupt-controller@f9010000";
            gpu = "/axi/gpu@fd4b0000";
            lpd_dma_chan1 = "/axi/dma-controller@ffa80000";
            lpd_dma_chan2 = "/axi/dma-controller@ffa90000";
            lpd_dma_chan3 = "/axi/dma-controller@ffaa0000";
            lpd_dma_chan4 = "/axi/dma-controller@ffab0000";
            lpd_dma_chan5 = "/axi/dma-controller@ffac0000";
            lpd_dma_chan6 = "/axi/dma-controller@ffad0000";
            lpd_dma_chan7 = "/axi/dma-controller@ffae0000";
            lpd_dma_chan8 = "/axi/dma-controller@ffaf0000";
            mc = "/axi/memory-controller@fd070000";
            nand0 = "/axi/nand-controller@ff100000";
            gem0 = "/axi/ethernet@ff0b0000";
            gem1 = "/axi/ethernet@ff0c0000";
            gem2 = "/axi/ethernet@ff0d0000";
            gem3 = "/axi/ethernet@ff0e0000";
            gpio = "/axi/gpio@ff0a0000";
            i2c0 = "/axi/i2c@ff020000";
            i2c1 = "/axi/i2c@ff030000";
            ocm = "/axi/memory-controller@ff960000";
            perf_monitor_ocm = "/axi/perf-monitor@ffa00000";
            perf_monitor_ddr = "/axi/perf-monitor@fd0b0000";
            perf_monitor_cci = "/axi/perf-monitor@fd490000";
            perf_monitor_lpd = "/axi/perf-monitor@ffa10000";
            pcie = "/axi/pcie@fd0e0000";
            pcie_intc = "/axi/pcie@fd0e0000/legacy-interrupt-controller";
            qspi = "/axi/spi@ff0f0000";
            flash0 = "/axi/spi@ff0f0000/flash@0";
            psgtr = "/axi/phy@fd400000";
            rtc = "/axi/rtc@ffa60000";
            sata = "/axi/ahci@fd0c0000";
            sdhci0 = "/axi/mmc@ff160000";
            sdhci1 = "/axi/mmc@ff170000";
            smmu = "/axi/iommu@fd800000";
            spi0 = "/axi/spi@ff040000";
            spi1 = "/axi/spi@ff050000";
            ttc0 = "/axi/timer@ff110000";
            ttc1 = "/axi/timer@ff120000";
            ttc2 = "/axi/timer@ff130000";
            ttc3 = "/axi/timer@ff140000";
            uart0 = "/axi/serial@ff000000";
            uart1 = "/axi/serial@ff010000";
            usb0 = "/axi/usb@ff9d0000";
            dwc3_0 = "/axi/usb@ff9d0000/usb@fe200000";
            usb1 = "/axi/usb@ff9e0000";
            dwc3_1 = "/axi/usb@ff9e0000/usb@fe300000";
            watchdog0 = "/axi/watchdog@fd4d0000";
            lpd_watchdog = "/axi/watchdog@ff150000";
            xilinx_ams = "/axi/ams@ffa50000";
            ams_ps = "/axi/ams@ffa50000/ams-ps@0";
            ams_pl = "/axi/ams@ffa50000/ams-pl@400";
            zynqmp_dpdma = "/axi/dma-controller@fd4c0000";
            zynqmp_dpsub = "/axi/display@fd4a0000";
            live_video = "/axi/display@fd4a0000/ports/port@0";
            live_gfx = "/axi/display@fd4a0000/ports/port@1";
            live_audio = "/axi/display@fd4a0000/ports/port@2";
            out_video = "/axi/display@fd4a0000/ports/port@3";
            out_audio = "/axi/display@fd4a0000/ports/port@4";
            out_dp = "/axi/display@fd4a0000/ports/port@5";
            binman = "/binman";
            pss_ref_clk = "/pss-ref-clk";
            video_clk = "/video-clk";
            pss_alt_ref_clk = "/pss-alt-ref-clk";
            gt_crx_ref_clk = "/gt-crx-ref-clk";
            aux_ref_clk = "/aux-ref-clk";
            amba_pl = "/pl-bus";
            axi_ad77681_dma = "/pl-bus/axi_dmac@80000000";
            axi_version_info_0 = "/pl-bus/axi_version_info@80030000";
            spi_ad77681_axi_spi_engine_debug_0 = "/pl-bus/axi_spi_engine@80010000";
            adc = "/pl-bus/axi_spi_engine@80010000/adaq7768@0";
            misc_clk_0 = "/misc_clk_0";
            adc_vref = "/regulator-5v0";
            adaq7768_mclk = "/adaq7768_mclk";
        };
    };