So far, we limited semihosting support to 32-bit ARM, but it's also usable on ARM64 and even RISC-V. Move the common code to drivers/firmware, so it can be shared by all architectures. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- arch/arm/Kconfig | 1 + arch/arm/cpu/Makefile | 2 ++ .../semihosting-trap_32.S} | 2 +- arch/arm/include/asm/semihosting.h | 15 +----------- arch/arm/lib32/Makefile | 1 - drivers/firmware/Kconfig | 3 +++ drivers/firmware/Makefile | 1 + .../lib32 => drivers/firmware}/semihosting.c | 0 fs/Kconfig | 2 +- include/asm-generic/semihosting.h | 23 +++++++++++++++++++ 10 files changed, 33 insertions(+), 17 deletions(-) rename arch/arm/{lib32/semihosting-trap.S => cpu/semihosting-trap_32.S} (84%) rename {arch/arm/lib32 => drivers/firmware}/semihosting.c (100%) create mode 100644 include/asm-generic/semihosting.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index be18b609c782..26547cd3ba71 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -373,6 +373,7 @@ config ARM_UNWIND config ARM_SEMIHOSTING bool "enable ARM semihosting support" depends on !CPU_V8 + select SEMIHOSTING help This option enables ARM semihosting support in barebox. ARM semihosting is a communication discipline that allows code diff --git a/arch/arm/cpu/Makefile b/arch/arm/cpu/Makefile index 28161cd7d714..999cc375da1c 100644 --- a/arch/arm/cpu/Makefile +++ b/arch/arm/cpu/Makefile @@ -23,6 +23,8 @@ obj-pbl-y += setupc_$(S64_32).o cache_$(S64_32).o obj-$(CONFIG_ARM_PSCI_CLIENT) += psci-client.o +obj-$(CONFIG_ARM_SEMIHOSTING) += semihosting-trap_$(S64_32).o + # # Any variants can be called as start-armxyz.S # diff --git a/arch/arm/lib32/semihosting-trap.S b/arch/arm/cpu/semihosting-trap_32.S similarity index 84% rename from arch/arm/lib32/semihosting-trap.S rename to arch/arm/cpu/semihosting-trap_32.S index f7960d7cea96..069cdaa1dd38 100644 --- a/arch/arm/lib32/semihosting-trap.S +++ b/arch/arm/cpu/semihosting-trap_32.S @@ -2,7 +2,7 @@ /* SPDX-FileCopyrightText: 2015 Zodiac Inflight Innovations */ /* - * semihosting-trap.S -- Assembly code needed to make a semihosting call + * semihosting-trap_32.S -- Assembly code needed to make a semihosting call * * Author: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> */ diff --git a/arch/arm/include/asm/semihosting.h b/arch/arm/include/asm/semihosting.h index 9e1606c4aeaa..c18aa1a5fef5 100644 --- a/arch/arm/include/asm/semihosting.h +++ b/arch/arm/include/asm/semihosting.h @@ -3,19 +3,6 @@ #ifndef __ASM_ARM_SEMIHOSTING_H #define __ASM_ARM_SEMIHOSTING_H -int semihosting_open(const char *fname, int flags); -int semihosting_close(int fd); -int semihosting_writec(char c); -int semihosting_write0(const char *str); -ssize_t semihosting_write(int fd, const void *buf, size_t count); -ssize_t semihosting_read(int fd, void *buf, size_t count); -int semihosting_readc(void); -int semihosting_isatty(int fd); -int semihosting_seek(int fd, loff_t pos); -int semihosting_flen(int fd); -int semihosting_remove(const char *fname); -int semihosting_rename(const char *fname1, const char *fname2); -int semihosting_errno(void); -int semihosting_system(const char *command); +#include <asm-generic/semihosting.h> #endif diff --git a/arch/arm/lib32/Makefile b/arch/arm/lib32/Makefile index d54fb7644c39..511a029062e6 100644 --- a/arch/arm/lib32/Makefile +++ b/arch/arm/lib32/Makefile @@ -23,7 +23,6 @@ pbl-y += runtime-offset.o obj-$(CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS) += memcpy.o obj-$(CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS) += memset.o obj-$(CONFIG_ARM_UNWIND) += unwind.o -obj-$(CONFIG_ARM_SEMIHOSTING) += semihosting-trap.o semihosting.o obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_ARM_MODULE_PLTS) += module-plts.o extra-y += barebox.lds diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig index 3252b61bc764..89c8bdeda3f0 100644 --- a/drivers/firmware/Kconfig +++ b/drivers/firmware/Kconfig @@ -1,6 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-only menu "Firmware Drivers" +config SEMIHOSTING + bool + config FIRMWARE_ALTERA_SERIAL bool "Altera SPI programming" depends on OFDEVICE diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile index 4eabf42fd639..d0ebe663ea55 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_SEMIHOSTING) += semihosting.o obj-$(CONFIG_FIRMWARE_ALTERA_SERIAL) += altera_serial.o obj-$(CONFIG_FIRMWARE_ALTERA_SOCFPGA) += socfpga.o socfpga_sdr.o obj-$(CONFIG_FIRMWARE_ZYNQMP_FPGA) += zynqmp-fpga.o diff --git a/arch/arm/lib32/semihosting.c b/drivers/firmware/semihosting.c similarity index 100% rename from arch/arm/lib32/semihosting.c rename to drivers/firmware/semihosting.c diff --git a/fs/Kconfig b/fs/Kconfig index a3ba84b6aefd..e02cb939a5cf 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -113,7 +113,7 @@ config FS_UIMAGEFS prompt "uImage FS support" config FS_SMHFS - depends on ARM_SEMIHOSTING + depends on SEMIHOSTING select FS_LEGACY bool prompt "Semihosting FS support" diff --git a/include/asm-generic/semihosting.h b/include/asm-generic/semihosting.h new file mode 100644 index 000000000000..d337c33ff486 --- /dev/null +++ b/include/asm-generic/semihosting.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __ASM_GENERIC_SEMIHOSTING_H +#define __ASM_GENERIC_SEMIHOSTING_H + +#include <linux/types.h> + +int semihosting_open(const char *fname, int flags); +int semihosting_close(int fd); +int semihosting_writec(char c); +int semihosting_write0(const char *str); +ssize_t semihosting_write(int fd, const void *buf, size_t count); +ssize_t semihosting_read(int fd, void *buf, size_t count); +int semihosting_readc(void); +int semihosting_isatty(int fd); +int semihosting_seek(int fd, loff_t pos); +int semihosting_flen(int fd); +int semihosting_remove(const char *fname); +int semihosting_rename(const char *fname1, const char *fname2); +int semihosting_errno(void); +int semihosting_system(const char *command); + +#endif -- 2.39.2