X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=arch%2Farm%2Flib%2Fsemihosting.c;h=904fddd6c04e0dcc279b588e3c3b642a2a215bb2;hb=c2279d784e35fa25ee3a9fa28a74a1ba545f8c1e;hp=c3e964eabc130cc978a25396b4f53b08102cfd59;hpb=692e5c4e7eb267f3d8f3a8c9d2348eff6f5f21e2;p=oweals%2Fu-boot.git diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index c3e964eabc..904fddd6c0 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -1,7 +1,6 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * Copyright 2014 Broadcom Corporation - * - * SPDX-License-Identifier: GPL-2.0+ */ /* @@ -14,6 +13,8 @@ */ #include #include +#include +#include #define SYSOPEN 0x01 #define SYSCLOSE 0x02 @@ -31,6 +32,8 @@ static noinline long smh_trap(unsigned int sysnum, void *addr) register long result asm("r0"); #if defined(CONFIG_ARM64) asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), "r"(addr)); +#elif defined(CONFIG_CPU_V7M) + asm volatile ("bkpt #0xAB" : "=r" (result) : "0"(sysnum), "r"(addr)); #else /* Note - untested placeholder */ asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), "r"(addr)); @@ -90,7 +93,7 @@ static long smh_read(long fd, void *memp, size_t len) size_t len; } read; - debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, len); + debug("%s: fd %ld, memp %p, len %zu\n", __func__, fd, memp, len); read.fd = fd; read.memp = memp; @@ -104,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len) * hard to maintain partial read loops and such, just fail * with an error message. */ - printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n", + printf("%s: ERROR ret %ld, fd %ld, len %zu memp %p\n", __func__, ret, fd, len, memp); return -1; } @@ -179,12 +182,13 @@ static int smh_load_file(const char * const name, ulong load_addr, return 0; } -static int do_smhload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_smhload(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) { if (argc == 3 || argc == 4) { ulong load_addr; ulong end_addr = 0; - ulong ret; + int ret; char end_str[64]; load_addr = simple_strtoul(argv[2], NULL, 16); @@ -193,12 +197,12 @@ static int do_smhload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ret = smh_load_file(argv[1], load_addr, &end_addr); if (ret < 0) - return 1; + return CMD_RET_FAILURE; /* Optionally save returned end to the environment */ if (argc == 4) { sprintf(end_str, "0x%08lx", end_addr); - setenv(argv[3], end_str); + env_set(argv[3], end_str); } } else { return CMD_RET_USAGE;