mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-17 02:08:38 +00:00
93c3d32970
This adds support for booting entirely from JTAG while using a
hard-coded RCW. With these steps, it is not necessary to program a
"good" RCW using CodeWarrior. The method here can be performed with any
JTAG adapter supported by OpenOCD, including the on-board CMSIS-DAP
(albeit very slowly).
These steps require LS1046A support in OpenOCD, which was added in [1].
[1] 5b70c1f679
/
Signed-off-by: Sean Anderson <sean.anderson@seco.com>
[trini: Add reference to doc/board/nxp/ls1046ardb.rst]
193 lines
6.7 KiB
ReStructuredText
193 lines
6.7 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0+
|
|
|
|
LS1046ARDB
|
|
==========
|
|
|
|
The LS1046A Reference Design Board (RDB) is a high-performance computing,
|
|
evaluation, and development platform that supports the QorIQ LS1046A
|
|
LayerScape Architecture processor. The LS1046ARDB provides SW development
|
|
platform for the Freescale LS1046A processor series, with a complete
|
|
debugging environment. The LS1046A RDB is lead-free and RoHS-compliant.
|
|
|
|
LS1046A SoC Overview
|
|
--------------------
|
|
Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc for LS1046A
|
|
SoC overview.
|
|
|
|
LS1046ARDB board Overview
|
|
-------------------------
|
|
- SERDES1 Connections, 4 lanes supporting:
|
|
|
|
- Lane0: 10GBase-R with x1 RJ45 connector
|
|
- Lane1: 10GBase-R Cage
|
|
- Lane2: SGMII.5
|
|
- Lane3: SGMII.6
|
|
|
|
- SERDES2 Connections, 4 lanes supporting:
|
|
|
|
- Lane0: PCIe1 with miniPCIe slot
|
|
- Lane1: PCIe2 with PCIe x2 slot
|
|
- Lane2: PCIe3 with PCIe x4 slot
|
|
- Lane3: SATA
|
|
|
|
- DDR Controller
|
|
|
|
- 8GB 64bits DDR4 SDRAM. Support rates of up to 2133MT/s
|
|
|
|
- IFC/Local Bus
|
|
|
|
- One 512 MB NAND flash with ECC support
|
|
- CPLD connection
|
|
|
|
- USB 3.0
|
|
|
|
- one Type A port, one Micro-AB port
|
|
|
|
- SDHC: connects directly to a full SD/MMC slot
|
|
- DSPI: 64 MB high-speed flash Memory for boot code and storage (up to 108MHz)
|
|
- 4 I2C controllers
|
|
- UART
|
|
|
|
- Two 4-pin serial ports at up to 115.2 Kbit/s
|
|
- Two DB9 D-Type connectors supporting one Serial port each
|
|
|
|
- ARM JTAG support
|
|
|
|
Memory map from core's view
|
|
----------------------------
|
|
|
|
================== ================== ================ =====
|
|
Start Address End Address Description Size
|
|
================== ================== ================ =====
|
|
``0x00_0000_0000`` ``0x00_000F_FFFF`` Secure Boot ROM 1M
|
|
``0x00_0100_0000`` ``0x00_0FFF_FFFF`` CCSRBAR 240M
|
|
``0x00_1000_0000`` ``0x00_1000_FFFF`` OCRAM0 64K
|
|
``0x00_1001_0000`` ``0x00_1001_FFFF`` OCRAM1 64K
|
|
``0x00_2000_0000`` ``0x00_20FF_FFFF`` DCSR 16M
|
|
``0x00_7E80_0000`` ``0x00_7E80_FFFF`` IFC - NAND Flash 64K
|
|
``0x00_7FB0_0000`` ``0x00_7FB0_0FFF`` IFC - CPLD 4K
|
|
``0x00_8000_0000`` ``0x00_FFFF_FFFF`` DRAM1 2G
|
|
``0x05_0000_0000`` ``0x05_07FF_FFFF`` QMAN S/W Portal 128M
|
|
``0x05_0800_0000`` ``0x05_0FFF_FFFF`` BMAN S/W Portal 128M
|
|
``0x08_8000_0000`` ``0x09_FFFF_FFFF`` DRAM2 6G
|
|
``0x40_0000_0000`` ``0x47_FFFF_FFFF`` PCI Express1 32G
|
|
``0x48_0000_0000`` ``0x4F_FFFF_FFFF`` PCI Express2 32G
|
|
``0x50_0000_0000`` ``0x57_FFFF_FFFF`` PCI Express3 32G
|
|
================== ================== ================ =====
|
|
|
|
QSPI flash map
|
|
--------------
|
|
|
|
================== ================== ================== =====
|
|
Start Address End Address Description Size
|
|
================== ================== ================== =====
|
|
``0x00_4000_0000`` ``0x00_400F_FFFF`` RCW + PBI 1M
|
|
``0x00_4010_0000`` ``0x00_402F_FFFF`` U-Boot 2M
|
|
``0x00_4030_0000`` ``0x00_403F_FFFF`` U-Boot Env 1M
|
|
``0x00_4040_0000`` ``0x00_405F_FFFF`` PPA 2M
|
|
``0x00_4060_0000`` ``0x00_408F_FFFF`` Secure boot header 3M
|
|
+ bootscript
|
|
``0x00_4090_0000`` ``0x00_4093_FFFF`` FMan ucode 256K
|
|
``0x00_4094_0000`` ``0x00_4097_FFFF`` QE/uQE firmware 256K
|
|
``0x00_4098_0000`` ``0x00_40FF_FFFF`` Reserved 6M
|
|
``0x00_4100_0000`` ``0x00_43FF_FFFF`` FIT Image 48M
|
|
================== ================== ================== =====
|
|
|
|
Booting Options
|
|
---------------
|
|
|
|
NB: The reference manual documents the RCW source with the *least-significant
|
|
bit first*.
|
|
|
|
QSPI boot
|
|
^^^^^^^^^
|
|
|
|
This is the default. ``{ SW5[0:8], SW4[0] }`` should be ``0010_0010_0``.
|
|
|
|
SD boot and eMMC boot
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
``{ SW5[0:8], SW4[0] }`` should be ``0010_0000_0``. eMMC is selected only if
|
|
there is no SD card in the slot.
|
|
|
|
.. _ls1046ardb_jtag:
|
|
|
|
JTAG boot
|
|
^^^^^^^^^
|
|
|
|
To recover a bricked board, or to perform initial programming, the ls1046
|
|
supports using two hard-coded Reset Configuration Words (RCWs). Unfortunately,
|
|
this configuration disables most functionality, including the uarts and ethernet.
|
|
However, the SD/MMC and flash controllers are still functional. To get around
|
|
the lack of a serial console, we will use ARM semihosting instead. When
|
|
enabled, OpenOCD will interpret certain instructions as calls to the host
|
|
operating system. This allows U-Boot to use the console, read/write files, or
|
|
run arbitrary commands (!).
|
|
|
|
When configuring U-Boot, ensure that ``CONFIG_SEMIHOSTING``,
|
|
``CONFIG_SPL_SEMIHOSTING``, and ``CONFIG_SEMIHOSTING_SERIAL`` are enabled.
|
|
``{ SW5[0:8], SW4[0] }`` should be ``0100_1111_0``. Additionally, ``SW4[7]``
|
|
should be set to ``0``. Connect to the "console" USB connector on the front of
|
|
the enclosure.
|
|
|
|
Create a new file called ``u-boot.tcl`` (or whatever you choose) with the
|
|
following contents::
|
|
|
|
# Load the configuration for the LS1046ARDB
|
|
source [find board/nxp_rdb-ls1046a.cfg]
|
|
# Initialize the scan chain
|
|
init
|
|
# Stop the processor
|
|
halt
|
|
# Enable semihosting
|
|
arm semihosting enable
|
|
# Load U-Boot SPL
|
|
load_image spl/u-boot-spl 0 elf
|
|
# Start executing SPL at the beginning of OCRAM
|
|
resume 0x10000000
|
|
|
|
Then, launch openocd like::
|
|
|
|
openocd -f u-boot.tcl
|
|
|
|
You should see the U-boot SPL banner followed by the banner for U-Boot proper
|
|
in the output of openocd. The CMSIS-DAP adapter is slow, so this can take a
|
|
long time. If you don't see it, something has gone wrong. After a while, you
|
|
should see the prompt. You can load an image using semihosting by running::
|
|
|
|
=> load hostfs - $loadaddr <name of file>
|
|
|
|
Note that openocd's terminal is "cooked," so commands will only be sent to
|
|
U-Boot when you press enter, and all commands will be echoed twice.
|
|
Additionally, openocd will block when waiting for input, ignoring gdb, JTAG
|
|
events, and Ctrl-Cs. To make openocd process these events, just hit enter.
|
|
|
|
Using an external JTAG adapter
|
|
""""""""""""""""""""""""""""""
|
|
|
|
The CMSIS-DAP adapter can be rather slow. To speed up booting, use an external
|
|
JTAG adapter. The following examples assume you are using a J-Link, though any
|
|
adapter supported by OpenOCD will do. Ensure that ``SW4[7]`` is ``1``. Attach
|
|
your jtag adapter to J22. Modify ``u-boot.tcl`` and replace the first two lines
|
|
with the following::
|
|
|
|
# Load the J-Link configuration (or whatever your adapter is)
|
|
source [find interface/jlink.cfg]
|
|
# Use JTAG, since the J-Link also supports SWD
|
|
transport select jtag
|
|
# The reset pin resets the whole CPU
|
|
reset_config srst_only
|
|
# Load the LS1046A config
|
|
source [find target/ls1046a.cfg]
|
|
|
|
You can proceed as normal through the rest of the steps above. I got a speedup
|
|
of around 100x by using a J-Link.
|
|
|
|
Debug UART
|
|
----------
|
|
|
|
To enable the debug UART, enable the following config options::
|
|
|
|
CONFIG_DEBUG_UART_NS16550=y
|
|
CONFIG_DEBUG_UART_BASE=0x21c0500
|
|
CONFIG_DEBUG_UART_CLOCK=300000000
|