summaryrefslogblamecommitdiffstats
path: root/user/bsps/aarch64/xilinx-zynqmp.rst
blob: e4404e338b7af7850c1315c7d9ca2d4e71346c45 (plain) (tree)
1
2
3
4
5
6
7
8



                                                                     

                                              

                                               



                  








                                                                                
 
            


                                                     



















                                                                                







                                              


                                                                              













                                                                              



                                                                         


                                                                               
 

                           


                                                                            
                                                             
                                                 
.. SPDX-License-Identifier: CC-BY-SA-4.0

.. Copyright (C) 2020 On-Line Applications Research Corporation (OAR)

.. _BSP_aarch64_qemu_xilinx_zynqmp_ilp32_qemu:
.. _BSP_aarch64_qemu_xilinx_zynqmp_lp64_qemu:
.. _BSP_aarch64_qemu_xilinx_zynqmp_ilp32_zu3eg:
.. _BSP_aarch64_qemu_xilinx_zynqmp_lp64_zu3eg:

Qemu Xilinx ZynqMP
==================

This BSP supports four variants: `xilinx-zynqmp-ilp32-qemu`,
`xilinx-zynqmp-lp64-qemu`, `xilinx-zynqmp-ilp32-zu3eg`, and
`xilinx-zynqmp-lp64-zu3eg`. Platform-specific hardware initialization is
performed by ARM Trusted Firmware (ATF). Other basic hardware initialization is
performed by the BSP. These BSPs support the GICv2 interrupt controller present
in all ZynqMP systems. The zu3eg BSPs have also been tested to be fully
functional on zu2cg boards and should also work on any other ZynqMP chip variant
since the Processing Subsystem (PS) does not vary among chip variants other than
the number of CPU cores available.

Boot on QEMU
------------
The executable image is booted by Qemu in ELF format.

Boot on ZynqMP Hardware
-----------------------

On ZynqMP hardware, RTEMS can be started at EL1, EL2, or EL3 by u-boot or
directly as part of BOOT.bin. Regardless of the exception level at boot, RTEMS
will drop to EL1 for execution. For quick turnaround during testing, it is
recommended to use the u-boot BOOT.bin that comes with the PetaLinux prebuilts
for the board in question.

Hardware Boot Image Generation
------------------------------

RTEMS expects some hardware initialization to be performed by ATF and expects
the services it provides to be present, so this must be included when generating
a direct-boot RTEMS BOOT.bin.

When booting via u-boot, RTEMS must be packaged into a u-boot image or booted
as a raw binary since u-boot does not currently support ELF64 which is required
for AArch64 ELF binaries.

Clock Driver
------------

The clock driver uses the `ARM Generic Timer`.

Console Driver
--------------

The console driver supports the default Qemu emulated ARM PL011 PrimeCell UART
as well as the physical ARM PL011 PrimeCell UART in the ZynqMP hardware.

SDHCI Driver
------------

The ZynqMP bsp has an SDHCI driver which allows reading to and writing from SD
cards. These can be tested in qemu using the "-sd" option. For example:

.. code-block:: shell

  qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
   -machine xlnx-zcu102 -m 4096 -kernel media01.exe -sd example.img

The SD card image should have an MSDOS partition table with a single partition
containing a FAT file system.

Network Configuration
---------------------

When used with LibBSD, these BSP variants support networking via the four
Cadence GEM instances present on all ZynqMP hardware variants. All interfaces
are enabled by default, but only interfaces with operational MII busses will be
recognized and usable in RTEMS. Most ZynqMP dev boards use CGEM3.

Running Executables on QEMU
---------------------------

Executables generated by these BSPs can be run using the following command::

qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
 -machine xlnx-zcu102 -m 4096 -kernel example.exe