<div dir="ltr">Looks good to me other than Gedare's comments. Glad to see it.<div><br></div><div>I don't think it goes in the Zynq section but when using networking </div><div>with qemu, you tend to need to forward ports. Is there a logical</div><div>location for general BSP independent information on using Qemu</div><div>with RTEMS? </div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 10, 2020 at 10:30 AM Gedare Bloom <<a href="mailto:gedare@rtems.org">gedare@rtems.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks for the doco. Just a few comments.<br>
<br>
On Mon, Sep 7, 2020 at 9:30 PM <<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>> wrote:<br>
><br>
> From: Chris Johns <<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>><br>
><br>
> ---<br>
>  user/bsps/arm/xilinx-zynq.rst | 114 +++++++++++++++++++++++++++++++++-<br>
>  1 file changed, 112 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/user/bsps/arm/xilinx-zynq.rst b/user/bsps/arm/xilinx-zynq.rst<br>
> index 909b23e..365c336 100644<br>
> --- a/user/bsps/arm/xilinx-zynq.rst<br>
> +++ b/user/bsps/arm/xilinx-zynq.rst<br>
> @@ -1,8 +1,118 @@<br>
>  .. SPDX-License-Identifier: CC-BY-SA-4.0<br>
><br>
> -.. Copyright (C) 2019 TBD<br>
> +.. Copyright (C) 2020 Chris Johns (<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>)<br>
><br>
>  xilinx-zynq<br>
>  ===========<br>
><br>
> -TODO.<br>
> +This BSP supports the Xilinx Zynq range of devices. This family of<br>
> +devices contain the same ARM hard IP and the different parts have<br>
> +different sizes of programable logic.<br>
programmable?<br>
(Might be a UK/AU English thing, if so let me know :).)<br>
<br>
> +<br>
> +The BSP defaults may need to be adjusted using ``configure`` BSP<br>
> +options to match the size of memory your board may have.<br>
> +<br>
> +Bootloader<br>
> +----------<br>
> +<br>
> +The bootloader initialises the Zynq device. The Xilinx tool provide an<br>
"tools provide" or "tool provides"<br>
<br>
> +interface to configure the hardware. This is includes the buses,<br>
delete 'is'<br>
<br>
> +clocks, memory and UART board rate. The output of this is called<br>
> +``ps7_init`` and it a C file. The Xilinx SDK builds a first stage boot<br>
"it is a"<br>
<br>
> +loader (FSBL) using this file.<br>
> +<br>
> +The U-Boot boot loader has it's own FSBL called ``MLO`` to initialise<br>
no apostrophe: its<br>
<br>
> +the hardware.<br>
> +<br>
> +Clocks<br>
> +------<br>
> +<br>
> +An application can provide a function called:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    uint32_t a9mpcore_clock_periphclk(void);<br>
> +<br>
> +to return the peripheral clock. Normally this is half the CPU<br>
> +clock. This function is declared ``weak`` so you can override the<br>
> +default behaviour by providing it in your application.<br>
> +<br>
> +Debugging with xilinx_zynq_a9_qemu<br>
> +----------------------------------<br>
> +<br>
> +To debug an application add the QEMU options ``-s``. If you need to<br>
> +debug an initialisation issue also add ``-S``. For example to debug a<br>
> +networking application you could use:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    qemu-system-arm -M xilinx-zynq-a9 -m 256M -no-reboot -serial \<br>
> +        null -serial mon:stdio -nographic \<br>
> +       -net nic,model=cadence_gem -net vde,id=vde0,sock=/tmp/vde1 \<br>
> +       -kernel myapp.exe \<br>
> +       -s -S<br>
> +<br>
> +Start GDB with the same executable QEMU is running and connect to the<br>
> +QEMU GDB server:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    (gdb) target remote :1234<br>
> +<br>
> +If your application is crashing set a breakpoint on the fatal error<br>
> +handler:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    (gdb) b bsp_fatal_extension<br>
> +<br>
> +Enter continue to run the application. Running QEMU loads the<br>
> +executable and initialises the CPU. If the ``-S`` option is provided<br>
> +the CPU is held in reset. Without the option the CPU runs starting<br>
> +RTEMS. Either way you are connecting to set up target and all you need<br>
"set up the"<br>
<br>
> +to do is continue:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    (gdb) c<br>
> +<br>
> +If you have a crash and the breakpoint on ``bsp_fatal_extension`` is<br>
> +hit, load the following a GDB script:<br>
delete 'a'<br>
<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    define arm-crash<br>
> +     set $code = $arg0<br>
> +     set $r0 = ((const rtems_exception_frame *) $code)->register_r0<br>
> +     set $r1 = ((const rtems_exception_frame *) $code)->register_r1<br>
> +     set $r2 = ((const rtems_exception_frame *) $code)->register_r2<br>
> +     set $r3 = ((const rtems_exception_frame *) $code)->register_r3<br>
> +     set $r4 = ((const rtems_exception_frame *) $code)->register_r4<br>
> +     set $r5 = ((const rtems_exception_frame *) $code)->register_r5<br>
> +     set $r6 = ((const rtems_exception_frame *) $code)->register_r6<br>
> +     set $r7 = ((const rtems_exception_frame *) $code)->register_r7<br>
> +     set $r8 = ((const rtems_exception_frame *) $code)->register_r8<br>
> +     set $r9 = ((const rtems_exception_frame *) $code)->register_r9<br>
> +     set $r10 = ((const rtems_exception_frame *) $code)->register_r10<br>
> +     set $r11 = ((const rtems_exception_frame *) $code)->register_r11<br>
> +     set $r12 = ((const rtems_exception_frame *) $code)->register_r12<br>
> +     set $sp = ((const rtems_exception_frame *) $code)->register_sp<br>
> +     set $lr = ((const rtems_exception_frame *) $code)->register_lr<br>
> +     set $pc = ((const rtems_exception_frame *) $code)->register_pc<br>
> +     set $cpsr = ((const rtems_exception_frame *) $code)->register_cpsr<br>
> +   end<br>
> +<br>
> +Enter the command:<br>
> +<br>
> +.. code-block:: none<br>
> +<br>
> +    (gdb) arm-crash code<br>
> +<br>
> +<br>
> +Enter ``bt`` to see the stack back trace.<br>
> +<br>
> +The script moves the context back to the crash location. You should be<br>
> +able to view variables and inspect the stack.<br>
> +<br>
> +The fatal error handler runs inside an exception context that is not<br>
> +the one than generated the exception.<br>
s/than/that<br>
<br>
> --<br>
> 2.24.1<br>
><br>
> _______________________________________________<br>
> devel mailing list<br>
> <a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div>