[PATCH v3 00/29] arm: semihosting: Cleanups and new features

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Mar 22 23:11:45 CET 2022


On 3/22/22 21:59, Sean Anderson wrote:
> This cleans up the semihosting code and adds the following new features:
>
> - hostfs support (like sandbox)
> - support for being used as a SPL boot device
> - serial device support
> - falling back to normal drivers if semihosting is disabled
>
> The main device affected by these changes is vexpress64, so I'd appreciate
> if Andre (or anyone else) could try booting.
>
> These changes are motivated by bringup for ls1046a. When forcing JTAG
> boot, this device disables most communication peripherals, including
> serial and ethernet devices. This appears to be fixed in later
> generation devices, but we are stuck with it for now. Semihosting
> provides an easy way to run a few console commands.
>
> The patches in this series are organized as follows:
>
> 0-4: rST conversions and other documentation updates
> 5-9: Semihosting cleanups
> 10-14: Filesystem support (including SPL boot device)
> 15-16: Serial support
> 16: Documentation update
> 17: JTAG boot support for LS1046A
> 19-25: Semihosting fallback
> 26-29: DM puts support
>
> The last two groups of patches are "bonus;" the first 17 patches stand
> on their own. The last two groups could be broken out as separate
> series, but I have kept them in this one to help with my sanity (and not
> have to deal with too many outstanding series).
>
> Patch 14 depends on [1] to apply cleanly. Patch 17 depends on [2] for
> correctness. This series should be applied to u-boot/next (in
> particular, the EROFS series must have been applied).

Treating semihosting like the sandbox host file system is valuable
change. Thanks for addressing this.

Semihosting is not ARM specific. On QEMU it is available for ARM, M68K,
Xtensa, MIPS, Nios II, RISC-V. Cf.
https://qemu.readthedocs.io/en/latest/system/qemu-manpage.html

A good part of the code should be moved out of arch/arm/.

Best regards

Heinrich

>
> [1] https://lore.kernel.org/u-boot/CACRpkdZ+9fmNjC_mvrbPa9-iuTQVd8UkJ7Zpe7cL0c5vZygsVw@mail.gmail.com/T/
> [2] https://lore.kernel.org/u-boot/20220222183840.1355337-2-sean.anderson@seco.com/
>
> Changes in v3:
> - Add a config for puts to reduce the impact on the (vast majority) of
>    boards which don't need it.
> - Add additional documentation for QEMU and OpenOCD
> - Add dummy device number for hostfs
> - Add test for putc/puts
> - Fix loading the wrong EL's SPSR
> - Fix null pointer dereference in _serial_puts caused by a missing
>    return.
> - Make FALLBACK depend on ARM64
> - Make puts return the number of characters written on success, instead
>    of reusing the len parameter.
> - Reorder Kconfigs to group SEMIHOSTING_FALLBACK after SEMIHOSTING
>    (instead of after SPL_SEMIHOSTING_FALLBACK)
> - Update commit message to describe an alternate implementation
> - Use SYS_ERRNO instead of SYS_ISERROR, since the latter is not
>    implemented in older QEMUs.
>
> Changes in v2:
> - Add implementation of puts for DM
> - Add migration instructions for smhload
> - Add myself as a reviewer
> - Add semihosting fallback implementation
> - Compile arch/arm/lib/semihosting.o in SPL
> - Document debug uart
> - Fix baud numbers being off by 10
> - Fix typos in commit message
> - Make CONFIG_SPL_SEMIHOSTING depend on SPL
> - Rebase on Andre's series
> - Rename non-DM driver struct to match format of other drivers
>
> Sean Anderson (29):
>    doc: Convert semihosting readme to rST
>    nxp: ls1046ardb: Convert README to rST
>    doc: ls1046ardb: Expand boot mode section
>    doc: ls1046ardb: Document debug uart
>    arm: smh: Add semihosting entry to MAINTAINERS
>    arm: smh: Export semihosting functions
>    arm: smh: Use numeric modes for smh_open
>    arm: smh: Return errno on error
>    arm: smh: Document functions in header
>    arm: smh: Add some file manipulation commands
>    spl: Add semihosting boot method
>    fs: Add semihosting filesystem
>    cmd: fdt: Use start/size for chosen instead of start/end
>    arm: smh: Remove smhload command
>    arm: smh: Add some functions for working with the host console
>    serial: Add semihosting driver
>    doc: smh: Update semihosting documentation
>    ls1046ardb: Add support for JTAG boot
>    arm64: Save esr in pt_regs
>    arm64: Save spsr in pt_regs
>    arm64: Import some ESR and SPSR defines from Linux
>    arm: smh: Add option to detect semihosting
>    arm64: Catch non-emulated semihosting calls
>    serial: smh: Initialize serial only if semihosting is enabled
>    arm64: ls1046a: Support semihosting fallback
>    serial: dm: Add support for puts
>    serial: sandbox: Implement puts
>    test: serial: Add test for putc/puts
>    serial: smh: Implement puts for DM
>
>   MAINTAINERS                             |   5 +
>   arch/arm/Kconfig                        |  47 +++-
>   arch/arm/cpu/armv8/exceptions.S         |   9 +-
>   arch/arm/cpu/armv8/fsl-layerscape/spl.c |   3 +
>   arch/arm/include/asm/esr.h              | 343 ++++++++++++++++++++++++
>   arch/arm/include/asm/proc-armv/ptrace.h |  75 ++++++
>   arch/arm/include/asm/spl.h              |   1 +
>   arch/arm/include/asm/u-boot-arm.h       |   7 +-
>   arch/arm/lib/Makefile                   |   2 +-
>   arch/arm/lib/interrupts_64.c            |  80 ++++--
>   arch/arm/lib/semihosting.c              | 230 ++++++++--------
>   arch/arm/mach-imx/imx8m/soc.c           |   4 +-
>   arch/sandbox/include/asm/serial.h       |   6 +
>   board/freescale/ls1046ardb/MAINTAINERS  |   1 +
>   board/freescale/ls1046ardb/README       |  76 ------
>   board/freescale/ls1046ardb/ls1046ardb.c |  11 +
>   cmd/fdt.c                               |   6 +-
>   common/spl/Makefile                     |   1 +
>   common/spl/spl_semihosting.c            |  71 +++++
>   disk/part.c                             |   4 +-
>   doc/README.semihosting                  |  38 ---
>   doc/board/nxp/index.rst                 |   1 +
>   doc/board/nxp/ls1046ardb.rst            | 191 +++++++++++++
>   doc/usage/index.rst                     |   1 +
>   doc/usage/semihosting.rst               | 107 ++++++++
>   drivers/serial/Kconfig                  |  37 +++
>   drivers/serial/Makefile                 |   1 +
>   drivers/serial/sandbox.c                |  38 ++-
>   drivers/serial/serial-uclass.c          |  26 +-
>   drivers/serial/serial.c                 |   2 +
>   drivers/serial/serial_semihosting.c     | 187 +++++++++++++
>   fs/Makefile                             |   1 +
>   fs/fs.c                                 |  20 ++
>   fs/semihostingfs.c                      | 115 ++++++++
>   include/configs/ls1046ardb.h            |   2 +
>   include/configs/vexpress_aemv8.h        |  10 +-
>   include/fs.h                            |   1 +
>   include/semihosting.h                   | 149 ++++++++++
>   include/semihostingfs.h                 |  21 ++
>   include/serial.h                        |  19 ++
>   test/dm/serial.c                        |  19 ++
>   41 files changed, 1689 insertions(+), 279 deletions(-)
>   create mode 100644 arch/arm/include/asm/esr.h
>   delete mode 100644 board/freescale/ls1046ardb/README
>   create mode 100644 common/spl/spl_semihosting.c
>   delete mode 100644 doc/README.semihosting
>   create mode 100644 doc/board/nxp/ls1046ardb.rst
>   create mode 100644 doc/usage/semihosting.rst
>   create mode 100644 drivers/serial/serial_semihosting.c
>   create mode 100644 fs/semihostingfs.c
>   create mode 100644 include/semihosting.h
>   create mode 100644 include/semihostingfs.h
>



More information about the U-Boot mailing list