Xilinx Zynq board (``xilinx-zynq-a9``)
======================================
The Zynq 7000 family is based on the AMD SoC architecture. These products
integrate a feature-rich dual or single-core Arm Cortex-A9 MPCore based
processing system (PS) and AMD programmable logic (PL) in a single device.

The SoC is documented in the
`Zynq 7000 Technical Reference manual <https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM/Zynq-7000-SoC-Technical-Reference-Manual>`__.

The QEMU xilinx-zynq-a9 board supports the following devices:

- Arm Cortex-A9 MPCore CPU

  - Cortex-A9 CPUs
  - GIC v1 interrupt controller
  - Generic timer
  - Watchdog timer

- OCM 256KB
- SMC SRAM 64MB
- Zynq SLCR
- SPI x2
- QSPI
- UART
- TTC x2
- Gigabit Ethernet Controller x2
- SD Controller x2
- XADC
- Arm PrimeCell DMA Controller
- DDR Memory
- USB 2.0 x2

Running Buildroot ZC702 Images
""""""""""""""""""""""""""""""

Buildroot has a ZC702 defconfig. Buildroot 2026.05 release is tested at the
time of writing. From the Buildroot source tree:

.. code-block:: bash

  $ make zynq_zc702_defconfig
  $ make

The generated files are in ``output/images/``. The examples below use:

 * ``u-boot.bin``
 * ``uImage``
 * ``sdcard.img``

QEMU's SD card model requires a power-of-two image size. Work on a copy
of the Buildroot SD image and resize the copy, not the original output:

.. code-block:: bash

  $ cp output/images/sdcard.img sdcard-qemu.img
  $ qemu-img resize -f raw sdcard-qemu.img 128M

To boot through the U-Boot image generated by Buildroot, use the generic
loader device to place the raw ``u-boot.bin`` at the address it was linked
for and start the CPU there.  The ``zynq_zc702_defconfig`` U-Boot image is
U-Boot proper, not a Zynq boot ROM image, and is linked at ``0x04000000``:

.. code-block:: bash

  $ qemu-system-arm -M xilinx-zynq-a9 -m 1G \
      -machine boot-mode=sd \
      -display none -serial null -serial mon:stdio \
      -device loader,file=output/images/u-boot.bin,addr=0x04000000,cpu-num=0 \
      -drive file=sdcard-qemu.img,if=sd,format=raw

Direct Linux boot of the generated Buildroot image is also supported. The Zynq
ZC702 DTB is generated by Buildroot and is located in
``output/images/zynq-zc702.dtb``. The kernel image is generated as a uImage:

.. code-block:: bash

  $ qemu-system-arm -M xilinx-zynq-a9 -m 1G \
      -display none -serial null -serial mon:stdio \
      -kernel output/images/uImage \
      -dtb output/images/zynq-zc702.dtb \
      -append "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait" \
      -drive file=sdcard-qemu.img,if=sd,format=raw

For configuring the boot-mode provide the following on the command line:

.. code-block:: bash

   -machine boot-mode=qspi

Supported values are ``jtag``, ``sd``, ``qspi`` and ``nor``.
