[PATCH v2 00/28] arm: semihosting: Cleanups and new features
Andre Przywara
andre.przywara at arm.com
Fri Mar 11 19:22:20 CET 2022
On Thu, 10 Mar 2022 15:50:30 -0500
Sean Anderson <sean.anderson at seco.com> wrote:
Hi Sean,
many thanks for doing this, I like that clean up.
> 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.
So I did this. Apart from the missing return in 26/28, as you figured
yourself, the bootcmd_smh definition is missing the (dummy) device number,
so it should read:
"if load hostfs 0 ${boot_addr_r} ${boot_name}; then" ....
With that (and the other three occasions) fixed the automatic boot worked
on the v8A model. The device number seems to be missing from some
documentation patches as well.
Also: I couldn't get the semihosting serial to work, it didn't show up in
coninfo, so I couldn't switch with "setenv stdout". I enabled
SEMIHOSTING_FALLBACK and SEMIHOSTING_SERIAL, I am surely missing something?
And btw.: QEMU supports semihosting, and I have used that in the past to
easily load files from my host into U-Boot:
$ make qemu_arm_defconfig
$ /src/linux/scripts/config --enable CONFIG_SEMIHOSTING
$ make
$ qemu-system-arm -M virt -cpu cortex-a15 -m 256M -semihosting -bios
u-boot.bin -nographic OR
$ qemu-system-aarch64 -M virt -cpu cortex-a57 -m 256M -semihosting -bios
u-boot.bin -nographic
did the trick for me.
Please note that QEMU does not seem to implement ISERROR:
=======
qemu: Unsupported SemiHosting SWI 0x08
=======
Might be relatively easy to fix there, haven't checked, but can you use
something else for the detection?
I am in the process of going through the patches more thoroughly, and will
reply next week.
Thanks,
Andre
> 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-28: 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).
>
> This series depends on [1]. Patch 17 depends on [2].
>
> [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 v2:
> - Document debug uart
> - Make CONFIG_SPL_SEMIHOSTING depend on SPL
> - Compile arch/arm/lib/semihosting.o in SPL
> - Rebase on Andre's series
> - Fix typos in commit message
> - Fix baud numbers being off by 10
> - Rename non-DM driver struct to match format of other drivers
> - Add migration instructions for smhload
> - Add semihosting fallback implementation
> - Add implementation of puts for DM
>
> Sean Anderson (28):
> 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
> arm: 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
> 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 +-
> 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 | 73 +++++
> drivers/serial/Kconfig | 22 ++
> drivers/serial/Makefile | 1 +
> drivers/serial/sandbox.c | 21 +-
> drivers/serial/serial-uclass.c | 27 +-
> drivers/serial/serial.c | 2 +
> drivers/serial/serial_semihosting.c | 168 ++++++++++++
> 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 ++
> 39 files changed, 1581 insertions(+), 278 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