[U-Boot] [PATCH v2 1/2] arm: add support for semihosting for ARMv7M targets

It is possible to enable CONFIG_SEMIHOSTING for STM32F429 target, but it would result in compile error. This patch adds support for semihosting for STM32F429 or any other ARMv7M target. Tested on STM32F429-DISCOVERY board.
Signed-off-by: Vadzim Dambrouski pftbest@gmail.com ---
arch/arm/lib/semihosting.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index c3e964e..ed5e8e4 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -31,6 +31,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));

Signed-off-by: Vadzim Dambrouski pftbest@gmail.com ---
arch/arm/lib/semihosting.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index ed5e8e4..6541cb4 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -92,7 +92,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 %lu\n", __func__, fd, memp, (ulong)len);
read.fd = fd; read.memp = memp; @@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len) * with an error message. */ printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n", - __func__, ret, fd, len, memp); + __func__, ret, fd, (ulong)len, memp); return -1; }

Hello Vadzim,
On Mon, 19 Oct 2015 00:13:29 +0300, Vadzim Dambrouski pftbest@gmail.com wrote:
Signed-off-by: Vadzim Dambrouski pftbest@gmail.com
arch/arm/lib/semihosting.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index ed5e8e4..6541cb4 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -92,7 +92,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 %lu\n", __func__, fd, memp, (ulong)len);
read.fd = fd; read.memp = memp;
@@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len) * with an error message. */ printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n",
__func__, ret, fd, len, memp);
return -1; }__func__, ret, fd, (ulong)len, memp);
len is a size_t; it should not be force-converted into a long, it should be printed using a 'z' qualifier.
Amicalement,

On 19.10.2015 09:06, Albert ARIBAUD wrote:
Hello Vadzim,
On Mon, 19 Oct 2015 00:13:29 +0300, Vadzim Dambrouski pftbest@gmail.com wrote:
Signed-off-by: Vadzim Dambrouski pftbest@gmail.com
arch/arm/lib/semihosting.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index ed5e8e4..6541cb4 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -92,7 +92,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 %lu\n", __func__, fd, memp, (ulong)len);
read.fd = fd; read.memp = memp;
@@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len) * with an error message. */ printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n",
__func__, ret, fd, len, memp);
return -1; }__func__, ret, fd, (ulong)len, memp);
len is a size_t; it should not be force-converted into a long, it should be printed using a 'z' qualifier.
Amicalement,
Well, you are right, I'll send another revision of this patch set. Thank you for all your assistance.
Regards, Vadzim Dambrouski

Hello Vadzim,
On Mon, 19 Oct 2015 00:13:28 +0300, Vadzim Dambrouski pftbest@gmail.com wrote:
It is possible to enable CONFIG_SEMIHOSTING for STM32F429 target, but it would result in compile error. This patch adds support for semihosting for STM32F429 or any other ARMv7M target. Tested on STM32F429-DISCOVERY board.
You should give some more indication of the reason for the compile error and the nature of the fix. For instance, you could quote the essential part of the error message (so that people googling for the error message may find this commit and mail thread) and a very short analysis (so that they can test if 'their' error is the same and can be solved the same way).
Signed-off-by: Vadzim Dambrouski pftbest@gmail.com
arch/arm/lib/semihosting.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index c3e964e..ed5e8e4 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -31,6 +31,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)); -- 2.6.1
Amicalement,
participants (2)
-
Albert ARIBAUD
-
Vadzim Dambrouski