mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-29 16:10:58 +00:00
Pull request for doc-2023-10-rc3
Documentation: * Update examples for imx8mp_evk * OpenOCD debugging guide for TI K3 boards * Explain using gadget devices on TI boards * Describe best practices for board ports -----BEGIN PGP SIGNATURE----- iQJWBAABCABAFiEEK7wKXt3/btL6/yA+hO4vgnE3U0sFAmTTNkQiHGhlaW5yaWNo LnNjaHVjaGFyZHRAY2Fub25pY2FsLmNvbQAKCRCE7i+CcTdTS+AZD/4jPK7Ztw+W UUP8T6bRVD4ZMiZ59E6HNvpSnnO8JphTQOyGvp+gjnvnzJEwRVljSTjWXLDzm8iM CsbqDShSQuey5lKOZc7Ht6HH18l5Y6BDNv7hfZzRfZAKDiGn0JNo6lF9oSpzzvT7 0UZDlG6vb2Vj2MthP+ltRNX8upcJ9OMUIWJWqxMhAbGN06+qCl0vef4AwzfOuv5J 9stHSB7aAaDHKd9SzzGqem6VhXS1lLU21ObwDJ9/VGVklvlLBHzJvFiJNrS15LnV ZEwPh0bSmH5CVLJXvuL5BK1CCo/nGcO0Q5K8ELJHI0c0qfEmcUvtQZzhFFxyJenX xIE6C0jRjowgsYGTnxyECRPtOuEh0ZRxcFwpVzeeWkBwfgVJcSaJ8LS3u/lTvpTv beqSi6c0o/PBLn9ubeDdKXWOUx/ZOSVU76Uu14rdAMYj+hh7JtgNnCFGSlr18sJ5 k5XE8RlUONKAl7JYntQ0/NyLI32a/ToF3va6vbNCEYCDra7DxDH06pceoqbuZbAu RU3CP1x5oNmVoDp819Urof5MMxAK6Pr9O3OFpGCHJoaARjcrUcA+ZMp9TWpjtK/W fJ+VaulA3+kUS831ncaZQ5vi9vE1a5yKGXloOfc9FXaGxwA8B87voCsc1/82Ey3q +FUw5KEg1JmPkJPXI86o4qZfBuGPmqXEGQ== =GuTp -----END PGP SIGNATURE----- Merge tag 'doc-2023-10-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efi Pull request for doc-2023-10-rc3 Documentation: * Update examples for imx8mp_evk * OpenOCD debugging guide for TI K3 boards * Explain using gadget devices on TI boards * Describe best practices for board ports
This commit is contained in:
commit
f26eda936b
14 changed files with 1404 additions and 109 deletions
|
@ -37,21 +37,22 @@ Build U-Boot
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
Note: builddir is U-Boot build directory (source directory for in-tree builds).
|
||||
|
||||
$ export CROSS_COMPILE=aarch64-poky-linux-
|
||||
$ make O=build imx8mp_evk_defconfig
|
||||
$ cp ../imx-atf/build/imx8mp/release/bl31.bin ./build/bl31.bin
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_1d_dmem_202006.bin ./build/
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_1d_imem_202006.bin ./build/
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_2d_dmem_202006.bin ./build/
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_2d_imem_202006.bin ./build/
|
||||
$ export ATF_LOAD_ADDR=0x970000
|
||||
$ make O=build
|
||||
$ cp ../imx-atf/build/imx8mp/release/bl31.bin $(builddir)
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_1d_dmem_202006.bin $(builddir)
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_1d_imem_202006.bin $(builddir)
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_2d_dmem_202006.bin $(builddir)
|
||||
$ cp ../firmware-imx-8.10/firmware/ddr/synopsys/lpddr4_pmu_train_2d_imem_202006.bin $(builddir)
|
||||
$ make
|
||||
|
||||
Burn the flash.bin to the MicroSD card at offset 32KB:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$sudo dd if=build/flash.bin of=/dev/sd[x] bs=1K seek=32 conv=notrunc; sync
|
||||
$ sudo dd if=flash.bin of=/dev/sd[x] bs=1K seek=32 conv=notrunc; sync
|
||||
|
||||
Boot
|
||||
----
|
||||
|
|
|
@ -201,3 +201,65 @@ booting and mtdparts have been configured correctly for the board:
|
|||
U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
|
||||
U-Boot # nand erase.part u-boot-spl-os
|
||||
U-Boot # nand write ${fdtaddr} u-boot-spl-os
|
||||
|
||||
USB device
|
||||
----------
|
||||
|
||||
The platform code for am33xx based designs is legacy in the sense that
|
||||
it is not fully compliant with the driver model in its management of the
|
||||
various resources. This is particularly true for the USB Ethernet gadget
|
||||
which will automatically be bound to the first USB Device Controller
|
||||
(UDC). This make the USB Ethernet gadget work out of the box on common
|
||||
boards like the Beagle Bone Blacks and by default will prevents other
|
||||
gadgets to be used.
|
||||
|
||||
The output of the 'dm tree' command shows which driver is bound to which
|
||||
device, so the user can easily configure their platform differently from
|
||||
the command line:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> dm tree
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ + ] ti-musb-peripheral | | |-- usb@47401000
|
||||
ethernet 1 [ + ] usb_ether | | | `-- usb_ether
|
||||
bootdev 3 [ ] eth_bootdev | | | `-- usb_ether.bootdev
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
|
||||
Typically here any network command performed using the usb_ether
|
||||
interface would work, while using other gadgets would fail:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> fastboot usb 0
|
||||
All UDC in use (1 available), use the unbind command
|
||||
g_dnl_register: failed!, error: -19
|
||||
exit not allowed from main input shell.
|
||||
|
||||
As hinted by the primary error message, the only controller available
|
||||
(usb@47401000) is currently bound to the usb_ether driver, which makes
|
||||
it impossible for the fastboot command to bind with this device (at
|
||||
least from a bootloader point of view). The solution here would be to
|
||||
use the unbind command specifying the class and index parameters (as
|
||||
shown above in the 'dm tree' output) to target the driver to unbind:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> unbind ethernet 1
|
||||
|
||||
The output of the 'dm tree' command now shows the availability of the
|
||||
first USB device controller, the fastboot gadget will now be able to
|
||||
bind with it:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> dm tree
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ ] ti-musb-peripheral | | |-- usb@47401000
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
|
|
|
@ -246,3 +246,27 @@ https://www.ti.com/lit/pdf/spruiv7 under the `Boot Mode Pins` section.
|
|||
- 11001010
|
||||
|
||||
For SW2 and SW1, the switch state in the "ON" position = 1.
|
||||
|
||||
Debugging U-Boot
|
||||
----------------
|
||||
|
||||
See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for
|
||||
detailed setup information.
|
||||
|
||||
.. warning::
|
||||
|
||||
**OpenOCD support since**: v0.12.0
|
||||
|
||||
If the default package version of OpenOCD in your development
|
||||
environment's distribution needs to be updated, it might be necessary to
|
||||
build OpenOCD from the source.
|
||||
|
||||
.. include:: k3.rst
|
||||
:start-after: .. k3_rst_include_start_openocd_connect_XDS110
|
||||
:end-before: .. k3_rst_include_end_openocd_connect_XDS110
|
||||
|
||||
To start OpenOCD and connect to the board
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f board/ti_am625evm.cfg
|
||||
|
|
|
@ -287,3 +287,27 @@ artifacts needed to the device:
|
|||
sb --ymodem tispl.bin > $MAIN_DEV < $MAIN_DEV
|
||||
sleep 1
|
||||
sb --xmodem u-boot.img > $MAIN_DEV < $MAIN_DEV
|
||||
|
||||
Debugging U-Boot
|
||||
----------------
|
||||
|
||||
See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for
|
||||
detailed setup information.
|
||||
|
||||
.. warning::
|
||||
|
||||
**OpenOCD support since**: v0.12.0
|
||||
|
||||
If the default package version of OpenOCD in your development
|
||||
environment's distribution needs to be updated, it might be necessary to
|
||||
build OpenOCD from the source.
|
||||
|
||||
.. include:: k3.rst
|
||||
:start-after: .. k3_rst_include_start_openocd_connect_XDS110
|
||||
:end-before: .. k3_rst_include_end_openocd_connect_XDS110
|
||||
|
||||
To start OpenOCD and connect to the board
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f board/ti_am654evm.cfg
|
||||
|
|
580
doc/board/ti/img/openocd-overview.svg
Normal file
580
doc/board/ti/img/openocd-overview.svg
Normal file
|
@ -0,0 +1,580 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!--SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause-->
|
||||
|
||||
<!--Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/-->
|
||||
|
||||
<svg
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="281px"
|
||||
height="671px"
|
||||
viewBox="-0.5 -0.5 281 671"
|
||||
id="svg128"
|
||||
sodipodi:docname="openocd-overview.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata132">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="3440"
|
||||
inkscape:window-height="1391"
|
||||
id="namedview130"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4068554"
|
||||
inkscape:cx="283.8637"
|
||||
inkscape:cy="385.05999"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg128" />
|
||||
<defs
|
||||
id="defs2" />
|
||||
<g
|
||||
id="g118">
|
||||
<path
|
||||
d="M 0 510 L 0 510 L 280 510 L 280 510"
|
||||
fill="rgb(255, 255, 255)"
|
||||
stroke="#ff0a1b"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="all"
|
||||
id="path4" />
|
||||
<path
|
||||
d="M 0 510 L 0 670 L 280 670 L 280 510"
|
||||
fill="none"
|
||||
stroke="#ff0a1b"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path6" />
|
||||
<rect
|
||||
x="10"
|
||||
y="590"
|
||||
width="100"
|
||||
height="70"
|
||||
fill="#f8cecc"
|
||||
stroke="#b85450"
|
||||
pointer-events="none"
|
||||
id="rect8" />
|
||||
<path
|
||||
d="M 20 590 L 20 660 M 100 590 L 100 660"
|
||||
fill="none"
|
||||
stroke="#b85450"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path10" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g16">
|
||||
<switch
|
||||
id="switch14">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 625px; margin-left: 21px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Cortex-R</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="60"
|
||||
y="629"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text12">Cortex-R</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect
|
||||
x="170"
|
||||
y="590"
|
||||
width="100"
|
||||
height="70"
|
||||
fill="#f8cecc"
|
||||
stroke="#b85450"
|
||||
pointer-events="none"
|
||||
id="rect18" />
|
||||
<path
|
||||
d="M 180 590 L 180 660 M 260 590 L 260 660"
|
||||
fill="none"
|
||||
stroke="#b85450"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path20" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g26">
|
||||
<switch
|
||||
id="switch24">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 625px; margin-left: 181px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Cortex-A</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="220"
|
||||
y="629"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text22">Cortex-A</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g32">
|
||||
<switch
|
||||
id="switch30">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 530px; margin-left: 221px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">K3 SoC</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="250"
|
||||
y="534"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text28">K3 SoC</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 140 550 L 140 570 L 60 570 L 60 583.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path34" />
|
||||
<path
|
||||
d="M 60 588.88 L 56.5 581.88 L 60 583.63 L 63.5 581.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path36" />
|
||||
<path
|
||||
d="M 140 550 L 140 570 L 220 570 L 220 583.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path38" />
|
||||
<path
|
||||
d="M 220 588.88 L 216.5 581.88 L 220 583.63 L 223.5 581.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path40" />
|
||||
<rect
|
||||
x="90"
|
||||
y="520"
|
||||
width="100"
|
||||
height="30"
|
||||
fill="#f8cecc"
|
||||
stroke="#b85450"
|
||||
pointer-events="none"
|
||||
id="rect42" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g48">
|
||||
<switch
|
||||
id="switch46">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 535px; margin-left: 91px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Debug SS</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="539"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text44">Debug SS</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 140 470 L 140 503.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path50" />
|
||||
<path
|
||||
d="M 140 508.88 L 136.5 501.88 L 140 503.63 L 143.5 501.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path52" />
|
||||
<rect
|
||||
x="80"
|
||||
y="410"
|
||||
width="120"
|
||||
height="60"
|
||||
rx="9"
|
||||
ry="9"
|
||||
fill="#ffe6cc"
|
||||
stroke="#d79b00"
|
||||
pointer-events="none"
|
||||
id="rect54" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g60">
|
||||
<switch
|
||||
id="switch58">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 440px; margin-left: 81px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">Jtag Interface<xhtml:br />
|
||||
(XDS110, TUMPA..)</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="444"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text56">Jtag Interface...</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 140 370 L 140 403.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path62" />
|
||||
<path
|
||||
d="M 140 408.88 L 136.5 401.88 L 140 403.63 L 143.5 401.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path64" />
|
||||
<rect
|
||||
x="80"
|
||||
y="310"
|
||||
width="120"
|
||||
height="60"
|
||||
fill="#f5f5f5"
|
||||
stroke="#666666"
|
||||
pointer-events="none"
|
||||
id="rect66" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g72">
|
||||
<switch
|
||||
id="switch70">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 340px; margin-left: 81px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: #333333; ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">PC</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="344"
|
||||
fill="#333333"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text68">PC</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g78">
|
||||
<switch
|
||||
id="switch76">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 385px; margin-left: 141px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">USB</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="170"
|
||||
y="389"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text74">USB</text>
|
||||
</switch>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g84">
|
||||
<switch
|
||||
id="switch82">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 485px; margin-left: 141px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">JTAG</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="170"
|
||||
y="489"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text80">JTAG</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 100 230 L 180 230 L 200 270 L 180 310 L 100 310 L 80 270 Z"
|
||||
fill="#e1d5e7"
|
||||
stroke="#9673a6"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path86" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g92">
|
||||
<switch
|
||||
id="switch90">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 270px; margin-left: 81px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">OpenOCD</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="274"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text88">OpenOCD</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 140 200 L 140 220 L 140 210 L 140 223.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path94" />
|
||||
<path
|
||||
d="M 140 228.88 L 136.5 221.88 L 140 223.63 L 143.5 221.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path96" />
|
||||
<path
|
||||
d="M 100 120 L 180 120 L 200 160 L 180 200 L 100 200 L 80 160 Z"
|
||||
fill="#e1d5e7"
|
||||
stroke="#9673a6"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path98" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g104">
|
||||
<switch
|
||||
id="switch102">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 160px; margin-left: 81px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">GDB</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="164"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text100">GDB</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path
|
||||
d="M 140 80 L 140 113.63"
|
||||
fill="none"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path106" />
|
||||
<path
|
||||
d="M 140 118.88 L 136.5 111.88 L 140 113.63 L 143.5 111.88 Z"
|
||||
fill="rgb(0, 0, 0)"
|
||||
stroke="rgb(0, 0, 0)"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path108" />
|
||||
<path
|
||||
d="M 80 0 L 200 0 L 200 68 Q 170 46.4 140 68 Q 110 89.6 80 68 L 80 12 Z"
|
||||
fill="#e1d5e7"
|
||||
stroke="#9673a6"
|
||||
stroke-miterlimit="10"
|
||||
pointer-events="none"
|
||||
id="path110" />
|
||||
<g
|
||||
transform="translate(-0.5 -0.5)"
|
||||
id="g116">
|
||||
<switch
|
||||
id="switch114">
|
||||
<foreignObject
|
||||
style="overflow: visible; text-align: left;"
|
||||
pointer-events="none"
|
||||
width="100%"
|
||||
height="100%"
|
||||
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||
<xhtml:div
|
||||
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 28px; margin-left: 81px;">
|
||||
<xhtml:div
|
||||
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||
<xhtml:div
|
||||
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">IDE debugging code</xhtml:div>
|
||||
</xhtml:div>
|
||||
</xhtml:div>
|
||||
</foreignObject>
|
||||
<text
|
||||
x="140"
|
||||
y="32"
|
||||
fill="rgb(0, 0, 0)"
|
||||
font-family="Helvetica"
|
||||
font-size="12px"
|
||||
text-anchor="middle"
|
||||
id="text112">IDE debugging code</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
|
@ -201,3 +201,27 @@ fat formatted UDA FS as file.
|
|||
|
||||
In case of booting from eMMC, write above images into raw or UDA FS.
|
||||
and set mmc partconf accordingly.
|
||||
|
||||
Debugging U-Boot
|
||||
----------------
|
||||
|
||||
See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for
|
||||
detailed setup information.
|
||||
|
||||
.. warning::
|
||||
|
||||
**OpenOCD support since**: v0.12.0
|
||||
|
||||
If the default package version of OpenOCD in your development
|
||||
environment's distribution needs to be updated, it might be necessary to
|
||||
build OpenOCD from the source.
|
||||
|
||||
.. include:: k3.rst
|
||||
:start-after: .. k3_rst_include_start_openocd_connect_XDS110
|
||||
:end-before: .. k3_rst_include_end_openocd_connect_XDS110
|
||||
|
||||
To start OpenOCD and connect to the board
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f board/ti_j7200evm.cfg
|
||||
|
|
|
@ -228,3 +228,27 @@ J721E common processor board can be attached to a Ethernet QSGMII card and the
|
|||
PHY in the card has to be reset before it can be used for data transfer.
|
||||
"do_main_cpsw0_qsgmii_phyinit" env variable has to be set for the U-BOOT to
|
||||
configure this PHY.
|
||||
|
||||
Debugging U-Boot
|
||||
----------------
|
||||
|
||||
See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for
|
||||
detailed setup information.
|
||||
|
||||
.. warning::
|
||||
|
||||
**OpenOCD support since**: v0.12.0
|
||||
|
||||
If the default package version of OpenOCD in your development
|
||||
environment's distribution needs to be updated, it might be necessary to
|
||||
build OpenOCD from the source.
|
||||
|
||||
.. include:: k3.rst
|
||||
:start-after: .. k3_rst_include_start_openocd_connect_XDS110
|
||||
:end-before: .. k3_rst_include_end_openocd_connect_XDS110
|
||||
|
||||
To start OpenOCD and connect to the board
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f board/ti_j721eevm.cfg
|
||||
|
|
|
@ -468,3 +468,517 @@ filesystem and then imported
|
|||
|
||||
=> fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
|
||||
=> env import -t ${loadaddr} ${filesize}
|
||||
|
||||
.. _k3_rst_refer_openocd:
|
||||
|
||||
Common Debugging environment - OpenOCD
|
||||
--------------------------------------
|
||||
|
||||
This section will show you how to connect a board to `OpenOCD
|
||||
<https://openocd.org/>`_ and load the SPL symbols for debugging with
|
||||
a K3 generation device. To follow this guide, you must build custom
|
||||
u-boot binaries, start your board from a boot media such as an SD
|
||||
card, and use an OpenOCD environment. This section uses generic
|
||||
examples, though you can apply these instructions to any supported K3
|
||||
generation device.
|
||||
|
||||
The overall structure of this setup is in the following figure.
|
||||
|
||||
.. image:: img/openocd-overview.svg
|
||||
|
||||
.. note::
|
||||
|
||||
If you find these instructions useful, please consider `donating
|
||||
<https://openocd.org/pages/donations.html>`_ to OpenOCD.
|
||||
|
||||
Step 1: Download and install OpenOCD
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
To get started, it is more convenient if the distribution you
|
||||
use supports OpenOCD by default. Follow the instructions in the
|
||||
`getting OpenOCD <https://openocd.org/pages/getting-openocd.html>`_
|
||||
documentation to pick the installation steps appropriate to your
|
||||
environment. Some references to OpenOCD documentation:
|
||||
|
||||
* `OpenOCD User Guide <https://openocd.org/doc/html/index.html>`_
|
||||
* `OpenOCD Developer's Guide <https://openocd.org/doc/doxygen/html/index.html>`_
|
||||
|
||||
Refer to the release notes corresponding to the `OpenOCD version
|
||||
<https://github.com/openocd-org/openocd/releases>`_ to ensure
|
||||
|
||||
* Processor support: In general, processor support shouldn't present
|
||||
any difficulties since OpenOCD provides solid support for both ARMv8
|
||||
and ARMv7.
|
||||
* SoC support: When working with System-on-a-Chip (SoC), the support
|
||||
usually comes as a TCL config file. It is vital to ensure the correct
|
||||
version of OpenOCD or to use the TCL files from the latest release or
|
||||
the one mentioned.
|
||||
* Board or the JTAG adapter support: In most cases, board support is
|
||||
a relatively easy problem if the board has a JTAG pin header. All
|
||||
you need to do is ensure that the adapter you select is compatible
|
||||
with OpenOCD. Some boards come with an onboard JTAG adapter that
|
||||
requires a USB cable to be plugged into the board, in which case, it
|
||||
is vital to ensure that the JTAG adapter is supported. Fortunately,
|
||||
almost all TI K3 SK/EVMs come with TI's XDS110, which has out of the
|
||||
box support by OpenOCD. The board-specific documentation will
|
||||
cover the details and any adapter/dongle recommendations.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -v
|
||||
|
||||
.. note::
|
||||
|
||||
OpenOCD version 0.12.0 is usually required to connect to most K3
|
||||
devices. If your device is only supported by a newer version than the
|
||||
one provided by your distribution, you may need to build it from the source.
|
||||
|
||||
Building OpenOCD from source
|
||||
""""""""""""""""""""""""""""
|
||||
|
||||
The dependency package installation instructions below are for Debian
|
||||
systems, but equivalent instructions should exist for systems with
|
||||
other package managers. Please refer to the `OpenOCD Documentation
|
||||
<https://openocd.org/>`_ for more recent installation steps.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ # Check the packages to be installed: needs deb-src in sources.list
|
||||
$ sudo apt build-dep openocd
|
||||
$ # The following list is NOT complete - please check the latest
|
||||
$ sudo apt-get install libtool pkg-config texinfo libusb-dev \
|
||||
libusb-1.0.0-dev libftdi-dev libhidapi-dev autoconf automake
|
||||
$ git clone https://github.com/openocd-org/openocd.git openocd
|
||||
$ cd openocd
|
||||
$ git submodule init
|
||||
$ git submodule update
|
||||
$ ./bootstrap
|
||||
$ ./configure --prefix=/usr/local/
|
||||
$ make -j`nproc`
|
||||
$ sudo make install
|
||||
|
||||
.. note::
|
||||
|
||||
The example above uses the GitHub mirror site. See
|
||||
`git repo information <https://openocd.org/doc/html/Developers.html#OpenOCD-Git-Repository>`_
|
||||
information to pick the official git repo.
|
||||
If a specific version is desired, select the version using `git checkout tag`.
|
||||
|
||||
Installing OpenOCD udev rules
|
||||
"""""""""""""""""""""""""""""
|
||||
|
||||
The step is not necessary if the distribution supports the OpenOCD, but
|
||||
if building from a source, ensure that the udev rules are installed
|
||||
correctly to ensure a sane system.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Go to the OpenOCD source directory
|
||||
$ cd openocd
|
||||
# Copy the udev rules to the correct system location
|
||||
$ sudo cp ./contrib/60-openocd.rules \
|
||||
./src/JTAG/drivers/libjaylink/contrib/99-libjaylink.rules \
|
||||
/etc/udev/rules.d/
|
||||
# Get Udev to load the new rules up
|
||||
$ sudo udevadm control --reload-rules
|
||||
# Use the new rules on existing connected devices
|
||||
$ sudo udevadm trigger
|
||||
|
||||
Step 2: Setup GDB
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
Most systems come with gdb-multiarch package.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Install gdb-multiarch package
|
||||
$ sudo apt-get install gdb-multiarch
|
||||
|
||||
Though using GDB natively is normal, developers with interest in using IDE
|
||||
may find a few of these interesting:
|
||||
|
||||
* `gdb-dashboard <https://github.com/cyrus-and/gdb-dashboard>`_
|
||||
* `gef <https://github.com/hugsy/gef>`_
|
||||
* `peda <https://github.com/longld/peda>`_
|
||||
* `pwndbg <https://github.com/pwndbg/pwndbg>`_
|
||||
* `voltron <https://github.com/snare/voltron>`_
|
||||
* `ddd <https://www.gnu.org/software/ddd/>`_
|
||||
* `vscode <https://www.justinmklam.com/posts/2017/10/vscode-debugger-setup/>`_
|
||||
* `vim conque-gdb <https://github.com/vim-scripts/Conque-GDB>`_
|
||||
* `emacs realgud <https://github.com/realgud/realgud/wiki/gdb-notes>`_
|
||||
* `Lauterbach IDE <https://www2.lauterbach.com/pdf/backend_gdb.pdf>`_
|
||||
|
||||
.. warning::
|
||||
LLDB support for OpenOCD is still a work in progress as of this writing.
|
||||
Using GDB is probably the safest option at this point in time.
|
||||
|
||||
Step 3: Connect board to PC
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
There are few patterns of boards in the ecosystem
|
||||
|
||||
.. k3_rst_include_start_openocd_connect_XDS110
|
||||
|
||||
**Integrated JTAG adapter/dongle**: The board has a micro-USB connector labelled
|
||||
XDS110 USB or JTAG. Connect a USB cable to the board to the mentioned port.
|
||||
|
||||
.. note::
|
||||
|
||||
There are multiple USB ports on a typical board, So, ensure you have read
|
||||
the user guide for the board and confirmed the silk screen label to ensure
|
||||
connecting to the correct port.
|
||||
|
||||
.. k3_rst_include_end_openocd_connect_XDS110
|
||||
|
||||
.. k3_rst_include_start_openocd_connect_cti20
|
||||
|
||||
**cTI20 connector**: The TI's `cTI20
|
||||
<https://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_JTAG_connectors.html#cti-20-pin-header-information>`_ connector
|
||||
is probably the most prevelant on TI platforms. Though many
|
||||
TI boards have an onboard XDS110, cTI20 connector is usually
|
||||
provided as an alternate scheme to connect alternatives such
|
||||
as `Lauterbach <https://www.lauterbach.com/>`_ or `XDS560
|
||||
<https://www.ti.com/tool/TMDSEMU560V2STM-U>`_.
|
||||
|
||||
To debug on these boards, the following combinations is suggested:
|
||||
|
||||
* `TUMPA <https://www.diygadget.com/JTAG-cables-and-microcontroller-programmers/tiao-usb-multi-protocol-adapter-JTAG-spi-i2c-serial>`_
|
||||
or `equivalent dongles supported by OpenOCD. <https://openocd.org/doc/html/Debug-Adapter-Hardware.html#Debug-Adapter-Hardware>`_
|
||||
* Cable such as `Tag-connect ribbon cable <https://www.tag-connect.com/product/20-pin-cortex-ribbon-cable-4-length-with-50-mil-connectors>`_
|
||||
* Adapter to convert cTI20 to ARM20 such as those from
|
||||
`Segger <https://www.segger.com/products/debug-probes/j-link/accessories/adapters/ti-cti-20-adapter/>`_
|
||||
or `Lauterbach LA-3780 <https://www.lauterbach.com/ad3780.html>`_
|
||||
Or optionally, if you have manufacturing capability then you could try
|
||||
`BeagleBone JTAG Adapter <https://github.com/mmorawiec/BeagleBone-Black-JTAG-Adapters>`_
|
||||
|
||||
.. warning::
|
||||
XDS560 and Lauterbach are proprietary solutions and is not supported by
|
||||
OpenOCD.
|
||||
When purchasing an off the shelf adapter/dongle, you do want to be careful
|
||||
about the signalling though. Please
|
||||
`read for additional info <https://software-dl.ti.com/ccs/esd/xdsdebugprobes/emu_JTAG_connectors.html>`_.
|
||||
|
||||
.. k3_rst_include_end_openocd_connect_cti20
|
||||
|
||||
.. k3_rst_include_start_openocd_connect_tag_connect
|
||||
|
||||
**Tag-Connect**: `Tag-Connect <https://www.tag-connect.com/>`_
|
||||
pads on the boards which require special cable. Please check the documentation
|
||||
to `identify <https://www.tag-connect.com/info/legs-or-no-legs>`_ if "legged"
|
||||
or "no-leg" version of the cable is appropriate for the board.
|
||||
|
||||
To debug on these boards, you will need:
|
||||
|
||||
* `TUMPA <https://www.diygadget.com/JTAG-cables-and-microcontroller-programmers/tiao-usb-multi-protocol-adapter-JTAG-spi-i2c-serial>`_
|
||||
or `equivalent dongles supported by OpenOCD <https://openocd.org/doc/html/Debug-Adapter-Hardware.html#Debug-Adapter-Hardware>`_.
|
||||
* Tag-Connect cable appropriate to the board such as
|
||||
`TC2050-IDC-NL <https://www.tag-connect.com/product/TC2050-IDC-NL-10-pin-no-legs-cable-with-ribbon-connector>`_
|
||||
* In case of no-leg, version, a
|
||||
`retaining clip <https://www.tag-connect.com/product/tc2050-clip-3pack-retaining-clip>`_
|
||||
* Tag-Connect to ARM20
|
||||
`adapter <https://www.tag-connect.com/product/tc2050-arm2010-arm-20-pin-to-tc2050-adapter>`_
|
||||
|
||||
.. note::
|
||||
You can optionally use a 3d printed solution such as
|
||||
`Protective cap <https://www.thingiverse.com/thing:3025584>`_ or
|
||||
`clip <https://www.thingiverse.com/thing:3035278>`_ to replace
|
||||
the retaining clip.
|
||||
|
||||
.. warning::
|
||||
With the Tag-Connect to ARM20 adapter, Please solder the "Trst" signal for
|
||||
connection to work.
|
||||
|
||||
.. k3_rst_include_end_openocd_connect_tag_connect
|
||||
|
||||
Debugging with OpenOCD
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Debugging U-Boot is different from debugging regular user space
|
||||
applications. The bootloader initialization process involves many boot
|
||||
media and hardware configuration operations. For K3 devices, there
|
||||
are also interactions with security firmware. While reloading the
|
||||
"elf" file works through GDB, developers must be mindful of cascading
|
||||
initialization's potential consequences.
|
||||
|
||||
Consider the following code change:
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
--- a/file.c 2023-07-29 10:55:29.647928811 -0500
|
||||
+++ b/file.c 2023-07-29 10:55:46.091856816 -0500
|
||||
@@ -1,3 +1,3 @@
|
||||
val = readl(reg);
|
||||
-val |= 0x2;
|
||||
+val |= 0x1;
|
||||
writel(val, reg);
|
||||
|
||||
Re-running the elf file with the above change will result in the
|
||||
register setting 0x3 instead of the intended 0x1. There are other
|
||||
hardware blocks which may not behave very well with a re-initialization
|
||||
without proper shutdown.
|
||||
|
||||
To help narrow the debug down, it is usually simpler to use the
|
||||
standard boot media to get to the bootloader and debug only in the area
|
||||
of interest.
|
||||
|
||||
In general, to debug u-boot spl/u-boot with OpenOCD there are three steps:
|
||||
|
||||
* Modify the code adding a loop to allow the debugger to attach
|
||||
near the point of interest. Boot up normally to stop at the loop.
|
||||
* Connect with OpenOCD and step out of the loop.
|
||||
* Step through the code to find the root of issue.
|
||||
|
||||
Typical debugging involves a few iterations of the above sequence.
|
||||
Though most bootloader developers like to use printf to debug,
|
||||
debug with JTAG tends to be most efficient since it is possible to
|
||||
investigate the code flow and inspect hardware registers without
|
||||
repeated iterations.
|
||||
|
||||
Code modification
|
||||
"""""""""""""""""
|
||||
|
||||
* **start.S**: Adding an infinite while loop at the very entry of
|
||||
U-Boot. For this, look for the corresponding start.S entry file.
|
||||
This is usually only required when debugging some core SoC or
|
||||
processor related function. For example: arch/arm/cpu/armv8/start.S or
|
||||
arch/arm/cpu/armv7/start.S
|
||||
|
||||
.. code-block:: diff
|
||||
|
||||
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
|
||||
index 69e281b086..744929e825 100644
|
||||
--- a/arch/arm/cpu/armv7/start.S
|
||||
+++ b/arch/arm/cpu/armv7/start.S
|
||||
@@ -37,6 +37,8 @@
|
||||
#endif
|
||||
|
||||
reset:
|
||||
+dead_loop:
|
||||
+ b dead_loop
|
||||
/* Allow the board to save important registers */
|
||||
b save_boot_params
|
||||
save_boot_params_ret:
|
||||
|
||||
* **board_init_f**: Adding an infinite while loop at the board entry
|
||||
function. In many cases, it is important to debug the boot process if
|
||||
any changes are made for board-specific applications. Below is a step
|
||||
by step process for debugging the boot SPL or Armv8 SPL:
|
||||
|
||||
To debug the boot process in either domain, we will first
|
||||
add a modification to the code we would like to debug.
|
||||
In this example, we will debug ``board_init_f`` inside
|
||||
``arch/arm/mach-k3/{soc}_init.c``. Since some sections of U-Boot
|
||||
will be executed multiple times during the bootup process of K3
|
||||
devices, we will need to include either ``CONFIG_CPU_ARM64`` or
|
||||
``CONFIG_CPU_V7R`` to catch the CPU at the desired place during the
|
||||
bootup process (Main or Wakeup domains). For example, modify the
|
||||
file as follows (depending on need):
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
.
|
||||
.
|
||||
/* Code to run on the R5F (Wakeup/Boot Domain) */
|
||||
if (IS_ENABLED(CONFIG_CPU_V7R)) {
|
||||
volatile int x = 1;
|
||||
while(x) {};
|
||||
}
|
||||
...
|
||||
/* Code to run on the ARMV8 (Main Domain) */
|
||||
if (IS_ENABLED(CONFIG_CPU_ARM64)) {
|
||||
volatile int x = 1;
|
||||
while(x) {};
|
||||
}
|
||||
.
|
||||
.
|
||||
}
|
||||
|
||||
Connecting with OpenOCD for a debug session
|
||||
"""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
Startup OpenOCD to debug the platform as follows:
|
||||
|
||||
* **Integrated JTAG interface**: If the evm has a debugger such as
|
||||
XDS110 inbuilt, there is typically an evm board support added and a
|
||||
cfg file will be available.
|
||||
|
||||
.. k3_rst_include_start_openocd_cfg_XDS110
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f board/{board_of_choice}.cfg
|
||||
|
||||
.. k3_rst_include_end_openocd_cfg_XDS110
|
||||
|
||||
.. k3_rst_include_start_openocd_cfg_external_intro
|
||||
|
||||
* **External JTAG adapter/interface**: In other cases, where an
|
||||
adapter/dongle is used, a simple cfg file can be created to integrate the
|
||||
SoC and adapter information. See `supported TI K3 SoCs
|
||||
<https://github.com/openocd-org/openocd/blob/master/tcl/target/ti_k3.cfg#L59>`_
|
||||
to decide if the SoC is supported or not.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openocd -f openocd_connect.cfg
|
||||
|
||||
.. k3_rst_include_end_openocd_cfg_external_intro
|
||||
|
||||
For example, with BeaglePlay (AM62X platform), the openocd_connect.cfg:
|
||||
|
||||
.. code-block:: tcl
|
||||
|
||||
# TUMPA example:
|
||||
# http://www.tiaowiki.com/w/TIAO_USB_Multi_Protocol_Adapter_User's_Manual
|
||||
source [find interface/ftdi/tumpa.cfg]
|
||||
|
||||
transport select jtag
|
||||
|
||||
# default JTAG configuration has only SRST and no TRST
|
||||
reset_config srst_only srst_push_pull
|
||||
|
||||
# delay after SRST goes inactive
|
||||
adapter srst delay 20
|
||||
|
||||
if { ![info exists SOC] } {
|
||||
# Set the SoC of interest
|
||||
set SOC am625
|
||||
}
|
||||
|
||||
source [find target/ti_k3.cfg]
|
||||
|
||||
ftdi tdo_sample_edge falling
|
||||
|
||||
# Speeds for FT2232H are in multiples of 2, and 32MHz is tops
|
||||
# max speed we seem to achieve is ~20MHz.. so we pick 16MHz
|
||||
adapter speed 16000
|
||||
|
||||
Below is an example of the output of this command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
Info : Listening on port 6666 for tcl connections
|
||||
Info : Listening on port 4444 for telnet connections
|
||||
Info : XDS110: connected
|
||||
Info : XDS110: vid/pid = 0451/bef3
|
||||
Info : XDS110: firmware version = 3.0.0.20
|
||||
Info : XDS110: hardware version = 0x002f
|
||||
Info : XDS110: connected to target via JTAG
|
||||
Info : XDS110: TCK set to 2500 kHz
|
||||
Info : clock speed 2500 kHz
|
||||
Info : JTAG tap: am625.cpu tap/device found: 0x0bb7e02f (mfg: 0x017 (Texas Instruments), part: 0xbb7e, ver: 0x0)
|
||||
Info : starting gdb server for am625.cpu.sysctrl on 3333
|
||||
Info : Listening on port 3333 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.a53.0 on 3334
|
||||
Info : Listening on port 3334 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.a53.1 on 3335
|
||||
Info : Listening on port 3335 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.a53.2 on 3336
|
||||
Info : Listening on port 3336 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.a53.3 on 3337
|
||||
Info : Listening on port 3337 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.main0_r5.0 on 3338
|
||||
Info : Listening on port 3338 for gdb connections
|
||||
Info : starting gdb server for am625.cpu.gp_mcu on 3339
|
||||
Info : Listening on port 3339 for gdb connections
|
||||
|
||||
.. note::
|
||||
Notice the default configuration is non-SMP configuration allowing
|
||||
for each of the core to be attached and debugged simultaneously.
|
||||
ARMv8 SPL/U-Boot starts up on cpu0 of a53/a72.
|
||||
|
||||
.. k3_rst_include_start_openocd_cfg_external_gdb
|
||||
|
||||
To debug using this server, use GDB directly or your preferred
|
||||
GDB-based IDE. To start up GDB in the terminal, run the following
|
||||
command.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
gdb-multiarch
|
||||
|
||||
To connect to your desired core, run the following command within GDB:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
target extended-remote localhost:{port for desired core}
|
||||
|
||||
To load symbols:
|
||||
|
||||
.. warning::
|
||||
|
||||
SPL and U-Boot does a re-location of address compared to where it
|
||||
is loaded originally. This step takes place after the DDR size is
|
||||
determined from dt parsing. So, debugging can be split into either
|
||||
"before re-location" or "after re-location". Please refer to the
|
||||
file ''doc/README.arm-relocation'' to see how to grab the relocation
|
||||
address.
|
||||
|
||||
* Prior to relocation:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symbol-file {path to elf file}
|
||||
|
||||
* After relocation:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Drop old symbol file
|
||||
symbol-file
|
||||
# Pick up new relocaddr
|
||||
add-symbol-file {path to elf file} {relocaddr}
|
||||
|
||||
.. k3_rst_include_end_openocd_cfg_external_gdb
|
||||
|
||||
In the above example of AM625,
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
target extended-remote localhost:3338 <- R5F (Wakeup Domain)
|
||||
target extended-remote localhost:3334 <- A53 (Main Domain)
|
||||
|
||||
The core can now be debugged directly within GDB using GDB commands or
|
||||
if using IDE, as appropriate to the IDE.
|
||||
|
||||
Stepping through the code
|
||||
"""""""""""""""""""""""""
|
||||
|
||||
`GDB TUI Commands
|
||||
<https://sourceware.org/gdb/onlinedocs/gdb/TUI-Commands.html>`_ can
|
||||
help set up the display more sensible for debug. Provide the name
|
||||
of the layout that can be used to debug. For example, use the GDB
|
||||
command ``layout src`` after loading the symbols to see the code and
|
||||
breakpoints. To exit the debug loop added above, add any breakpoints
|
||||
needed and run the following GDB commands to step out of the debug
|
||||
loop set in the ``board_init_f`` function.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
set x = 0
|
||||
continue
|
||||
|
||||
The platform has now been successfully setup to debug with OpenOCD
|
||||
using GDB commands or a GDB-based IDE. See `OpenOCD documentation for
|
||||
GDB <https://openocd.org/doc/html/GDB-and-OpenOCD.html>`_ for further
|
||||
information.
|
||||
|
||||
.. warning::
|
||||
|
||||
On the K3 family of devices, a watchdog timer within the DMSC is
|
||||
enabled by default by the ROM bootcode with a timeout of 3 minutes.
|
||||
The watchdog timer is serviced by System Firmware (SYSFW) or TI
|
||||
Foundational Security (TIFS) during normal operation. If debugging
|
||||
the SPL before the SYSFW is loaded, the watchdog timer will not get
|
||||
serviced automatically and the debug session will reset after 3
|
||||
minutes. It is recommended to start debugging SPL code only after
|
||||
the startup of SYSFW to avoid running into the watchdog timer reset.
|
||||
|
||||
Miscellaneous notes with OpenOCD
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Currently, OpenOCD does not support tracing for K3 platforms. Tracing
|
||||
function could be beneficial if the bug in code occurs deep within
|
||||
nested function and can optionally save developers major trouble of
|
||||
stepping through a large quantity of code.
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
Verdin AM62 Module
|
||||
==================
|
||||
|
||||
- SoM: https://www.toradex.com/computer-on-modules/verdin-arm-family/ti-am62
|
||||
- Carrier board: https://www.toradex.com/products/carrier-board/verdin-development-board-kit
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
|
@ -74,57 +77,57 @@ Boot
|
|||
|
||||
Output:
|
||||
|
||||
.. code-block:: bash
|
||||
.. code-block:: none
|
||||
|
||||
U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:14 +0200)
|
||||
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
SPL initial stack usage: 13368 bytes
|
||||
Trying to boot from MMC1
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Starting ATF on ARM64 core...
|
||||
U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:14 +0200)
|
||||
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
SPL initial stack usage: 13368 bytes
|
||||
Trying to boot from MMC1
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
Starting ATF on ARM64 core...
|
||||
|
||||
NOTICE: BL31: v2.9(release):v2.9.0-73-g463655cc8
|
||||
NOTICE: BL31: Built : 14:51:42, Jun 5 2023
|
||||
I/TC:
|
||||
I/TC: OP-TEE version: 3.21.0-168-g322cf9e33 (gcc version 12.2.1 20221205 (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24))) #2 Mon Jun 5 13:04:15 UTC 2023 aarch64
|
||||
I/TC: WARNING: This OP-TEE configuration might be insecure!
|
||||
I/TC: WARNING: Please check https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html
|
||||
I/TC: Primary CPU initializing
|
||||
I/TC: SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
I/TC: HUK Initialized
|
||||
I/TC: Primary CPU switching to normal world boot
|
||||
NOTICE: BL31: v2.9(release):v2.9.0-73-g463655cc8
|
||||
NOTICE: BL31: Built : 14:51:42, Jun 5 2023
|
||||
I/TC:
|
||||
I/TC: OP-TEE version: 3.21.0-168-g322cf9e33 (gcc version 12.2.1 20221205 (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24))) #2 Mon Jun 5 13:04:15 UTC 2023 aarch64
|
||||
I/TC: WARNING: This OP-TEE configuration might be insecure!
|
||||
I/TC: WARNING: Please check https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html
|
||||
I/TC: Primary CPU initializing
|
||||
I/TC: SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
I/TC: HUK Initialized
|
||||
I/TC: Primary CPU switching to normal world boot
|
||||
|
||||
U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)
|
||||
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
SPL initial stack usage: 1840 bytes
|
||||
Trying to boot from MMC1
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)
|
||||
SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
|
||||
SPL initial stack usage: 1840 bytes
|
||||
Trying to boot from MMC1
|
||||
Authentication passed
|
||||
Authentication passed
|
||||
|
||||
|
||||
U-Boot 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)
|
||||
U-Boot 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)
|
||||
|
||||
SoC: AM62X SR1.0 HS-FS
|
||||
DRAM: 2 GiB
|
||||
Core: 136 devices, 28 uclasses, devicetree: separate
|
||||
MMC: mmc@fa10000: 0, mmc@fa00000: 1
|
||||
Loading Environment from MMC... OK
|
||||
In: serial@2800000
|
||||
Out: serial@2800000
|
||||
Err: serial@2800000
|
||||
Model: Toradex 0076 Verdin AM62 Quad 2GB WB IT V1.0A
|
||||
Serial#: 15037380
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333
|
||||
am65_cpsw_nuss ethernet@8000000: K3 CPSW: nuss_ver: 0x6BA01103 cpsw_ver: 0x6BA81103 ale_ver: 0x00290105 Ports:2 mdio_freq:1000000
|
||||
Setting variant to wifi
|
||||
Net:
|
||||
Warning: ethernet@8000000port@1 MAC addresses don't match:
|
||||
Address in ROM is 1c:63:49:22:5f:f9
|
||||
Address in environment is 00:14:2d:e5:73:c4
|
||||
eth0: ethernet@8000000port@1 [PRIME], eth1: ethernet@8000000port@2
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin AM62 #
|
||||
SoC: AM62X SR1.0 HS-FS
|
||||
DRAM: 2 GiB
|
||||
Core: 136 devices, 28 uclasses, devicetree: separate
|
||||
MMC: mmc@fa10000: 0, mmc@fa00000: 1
|
||||
Loading Environment from MMC... OK
|
||||
In: serial@2800000
|
||||
Out: serial@2800000
|
||||
Err: serial@2800000
|
||||
Model: Toradex 0076 Verdin AM62 Quad 2GB WB IT V1.0A
|
||||
Serial#: 15037380
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333
|
||||
am65_cpsw_nuss ethernet@8000000: K3 CPSW: nuss_ver: 0x6BA01103 cpsw_ver: 0x6BA81103 ale_ver: 0x00290105 Ports:2 mdio_freq:1000000
|
||||
Setting variant to wifi
|
||||
Net:
|
||||
Warning: ethernet@8000000port@1 MAC addresses don't match:
|
||||
Address in ROM is 1c:63:49:22:5f:f9
|
||||
Address in environment is 00:14:2d:e5:73:c4
|
||||
eth0: ethernet@8000000port@1 [PRIME], eth1: ethernet@8000000port@2
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin AM62 #
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
.. sectionauthor:: Marcel Ziswiler <marcel.ziswiler@toradex.com>
|
||||
|
||||
Verdin iMX8M Mini Module
|
||||
========================
|
||||
|
||||
- SoM: https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx-8m-mini-nano
|
||||
- Carrier board: https://www.toradex.com/products/carrier-board/verdin-development-board-kit
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
|
@ -25,6 +29,7 @@ Then build ATF (TF-A):
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
$ export CROSS_COMPILE=aarch64-linux-gnu-
|
||||
$ make PLAT=imx8mm IMX_BOOT_UART_BASE=0x30860000 bl31
|
||||
$ cp build/imx8mm/release/bl31.bin ../
|
||||
|
||||
|
@ -75,30 +80,30 @@ Boot sequence is:
|
|||
|
||||
Output:
|
||||
|
||||
.. code-block:: bash
|
||||
.. code-block:: none
|
||||
|
||||
U-Boot SPL 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
|
||||
Normal Boot
|
||||
WDT: Started with servicing (60s timeout)
|
||||
Trying to boot from MMC1
|
||||
NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b
|
||||
NOTICE: BL31: Built : 18:02:12, Aug 16 2021
|
||||
U-Boot SPL 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
|
||||
Normal Boot
|
||||
WDT: Started with servicing (60s timeout)
|
||||
Trying to boot from MMC1
|
||||
NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b
|
||||
NOTICE: BL31: Built : 18:02:12, Aug 16 2021
|
||||
|
||||
|
||||
U-Boot 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
|
||||
U-Boot 2021.10-rc2-00028-gee010ba1129 (Aug 23 2021 - 16:56:02 +0200)
|
||||
|
||||
CPU: Freescale i.MX8MMQ rev1.0 at 1200 MHz
|
||||
Reset cause: POR
|
||||
DRAM: 2 GiB
|
||||
WDT: Started with servicing (60s timeout)
|
||||
MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
|
||||
Loading Environment from MMC... OK
|
||||
In: serial
|
||||
Out: serial
|
||||
Err: serial
|
||||
Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1A, Serial# 06760554
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333
|
||||
Setting variant to wifi
|
||||
Net: eth0: ethernet@30be0000
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin iMX8MM #
|
||||
CPU: Freescale i.MX8MMQ rev1.0 at 1200 MHz
|
||||
Reset cause: POR
|
||||
DRAM: 2 GiB
|
||||
WDT: Started with servicing (60s timeout)
|
||||
MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
|
||||
Loading Environment from MMC... OK
|
||||
In: serial
|
||||
Out: serial
|
||||
Err: serial
|
||||
Model: Toradex Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT V1.1A, Serial# 06760554
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333
|
||||
Setting variant to wifi
|
||||
Net: eth0: ethernet@30be0000
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin iMX8MM #
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
.. sectionauthor:: Marcel Ziswiler <marcel.ziswiler@toradex.com>
|
||||
|
||||
Verdin iMX8M Plus Module
|
||||
========================
|
||||
|
||||
- SoM: https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx-8m-plus
|
||||
- Carrier board: https://www.toradex.com/products/carrier-board/verdin-development-board-kit
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
|
@ -76,36 +80,36 @@ Boot sequence is:
|
|||
|
||||
Output:
|
||||
|
||||
.. code-block:: bash
|
||||
.. code-block:: none
|
||||
|
||||
U-Boot SPL 2022.04-rc1-00164-g21a0312611-dirty (Feb 07 2022 - 11:34:04 +0100)
|
||||
Quad die, dual rank failed, attempting dual die, single rank configuration.
|
||||
Normal Boot
|
||||
WDT: Started watchdog@30280000 with servicing (60s timeout)
|
||||
Trying to boot from BOOTROM
|
||||
Find img info 0x&48025a00, size 872
|
||||
Need continue download 1024
|
||||
Download 779264, Total size 780424
|
||||
NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b
|
||||
NOTICE: BL31: Built : 16:52:37, Aug 26 2021
|
||||
U-Boot SPL 2022.04-rc1-00164-g21a0312611-dirty (Feb 07 2022 - 11:34:04 +0100)
|
||||
Quad die, dual rank failed, attempting dual die, single rank configuration.
|
||||
Normal Boot
|
||||
WDT: Started watchdog@30280000 with servicing (60s timeout)
|
||||
Trying to boot from BOOTROM
|
||||
Find img info 0x&48025a00, size 872
|
||||
Need continue download 1024
|
||||
Download 779264, Total size 780424
|
||||
NOTICE: BL31: v2.2(release):rel_imx_5.4.70_2.3.2_rc1-5-g835a8f67b
|
||||
NOTICE: BL31: Built : 16:52:37, Aug 26 2021
|
||||
|
||||
|
||||
U-Boot 2022.04-rc1-00164-g21a0312611-dirty (Feb 07 2022 - 11:34:04 +0100)
|
||||
U-Boot 2022.04-rc1-00164-g21a0312611-dirty (Feb 07 2022 - 11:34:04 +0100)
|
||||
|
||||
CPU: Freescale i.MX8MP[8] rev1.1 at 1200 MHz
|
||||
Reset cause: POR
|
||||
DRAM: 8 GiB
|
||||
Core: 78 devices, 18 uclasses, devicetree: separate
|
||||
WDT: Started watchdog@30280000 with servicing (60s timeout)
|
||||
MMC: FSL_SDHC: 1, FSL_SDHC: 2
|
||||
Loading Environment from MMC... OK
|
||||
In: serial
|
||||
Out: serial
|
||||
Err: serial
|
||||
Model: Toradex Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT V1.0B, Serial# 06817281
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10807609
|
||||
Setting variant to wifi
|
||||
Net: Hard-coding pdata->enetaddr
|
||||
eth1: ethernet@30be0000, eth0: ethernet@30bf0000 [PRIME]
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin iMX8MP #
|
||||
CPU: Freescale i.MX8MP[8] rev1.1 at 1200 MHz
|
||||
Reset cause: POR
|
||||
DRAM: 8 GiB
|
||||
Core: 78 devices, 18 uclasses, devicetree: separate
|
||||
WDT: Started watchdog@30280000 with servicing (60s timeout)
|
||||
MMC: FSL_SDHC: 1, FSL_SDHC: 2
|
||||
Loading Environment from MMC... OK
|
||||
In: serial
|
||||
Out: serial
|
||||
Err: serial
|
||||
Model: Toradex Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT V1.0B, Serial# 06817281
|
||||
Carrier: Toradex Verdin Development Board V1.1A, Serial# 10807609
|
||||
Setting variant to wifi
|
||||
Net: Hard-coding pdata->enetaddr
|
||||
eth1: ethernet@30be0000, eth0: ethernet@30bf0000 [PRIME]
|
||||
Hit any key to stop autoboot: 0
|
||||
Verdin iMX8MP #
|
||||
|
|
26
doc/develop/board_best_practices.rst
Normal file
26
doc/develop/board_best_practices.rst
Normal file
|
@ -0,0 +1,26 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+:
|
||||
|
||||
Best Practices for Board Ports
|
||||
==============================
|
||||
|
||||
In addition to the regular best practices such as using :doc:`checkpatch` and
|
||||
following the :doc:`docstyle` and the :doc:`codingstyle` there are some things
|
||||
which are specific to creating a new board port.
|
||||
|
||||
* Implement :doc:`bootstd` to ensure that most operating systems will be
|
||||
supported by the platform.
|
||||
|
||||
* The platform defconfig file must be generated via `make savedefconfig`.
|
||||
|
||||
* The Kconfig and Kbuild infrastructure supports using "fragments" that can be
|
||||
used to apply changes on top of a defconfig file. These can be useful for
|
||||
many things such as:
|
||||
|
||||
* Supporting different firmware locations (e.g. eMMC, SD, QSPI).
|
||||
|
||||
* Multiple board variants when runtime detection is not desired.
|
||||
|
||||
* Supporting different build types such as production and development.
|
||||
|
||||
Kconfig fragments should reside in the board directory itself rather than in
|
||||
the top-level `configs/` directory.
|
|
@ -9,6 +9,7 @@ General
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
board_best_practices
|
||||
codingstyle
|
||||
designprinciples
|
||||
docstyle
|
||||
|
|
|
@ -41,3 +41,6 @@ Example: Bundles both peripheral bitstream and core bitstream into FIT image
|
|||
resets = <&rst FPGAMGR_RESET>;
|
||||
altr,bitstream = "fit_spl_fpga.itb";
|
||||
};
|
||||
|
||||
- The .its related documentations can be found here
|
||||
- Appendix - Reducing Arria 10 Fabric Configuration Time - https://rocketboards.org/foswiki/Documentation/BuildingBootloaderCycloneVAndArria10
|
||||
|
|
Loading…
Reference in a new issue