Merge git://www.denx.de/git/u-boot-marvell
[oweals/u-boot.git] / arch / arm / lib / semihosting.c
index edacb11877319342b1bf8cd0ac9c2d8cd4c97226..e32ad909450ca23faab030698f7fea0faa95d675 100644 (file)
@@ -14,7 +14,6 @@
  */
 #include <common.h>
 #include <command.h>
-#include <asm/semihosting.h>
 
 #define SYSOPEN                0x01
 #define SYSCLOSE       0x02
@@ -32,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));
@@ -91,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 %zu\n", __func__, fd, memp, len);
 
        read.fd = fd;
        read.memp = memp;
@@ -105,7 +106,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;
        }
@@ -145,97 +146,6 @@ static long smh_len_fd(long fd)
        return ret;
 }
 
-/*
- * Open, load a file into memory, and close it. Check that the available space
- * is sufficient to store the entire file. Return the bytes actually read from
- * the file as seen by the read function. The verbose flag enables some extra
- * printing of successful read status.
- */
-int smh_load(const char *fname, void *memp, int avail, int verbose)
-{
-       long ret;
-       long fd;
-       size_t len;
-
-       ret = -1;
-
-       debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname,
-             avail, memp);
-
-       /* Open the file */
-       fd = smh_open(fname, "rb");
-       if (fd == -1)
-               return -1;
-
-       /* Get the file length */
-       ret = smh_len_fd(fd);
-       if (ret == -1) {
-               smh_close(fd);
-               return -1;
-       }
-
-       /* Check that the file will fit in the supplied buffer */
-       if (ret > avail) {
-               printf("%s: ERROR ret %ld, avail %u\n", __func__, ret,
-                      avail);
-               smh_close(fd);
-               return -1;
-       }
-
-       len = ret;
-
-       /* Read the file into the buffer */
-       ret = smh_read(fd, memp, len);
-       if (ret == 0) {
-               /* Print successful load information if requested */
-               if (verbose) {
-                       printf("\n%s\n", fname);
-                       printf("    0x%8p dest\n", memp);
-                       printf("    0x%08lx size\n", len);
-                       printf("    0x%08x avail\n", avail);
-               }
-       }
-
-       /* Close the file */
-       smh_close(fd);
-
-       return ret;
-}
-
-/*
- * Get the file length from the filename
- */
-long smh_len(const char *fname)
-{
-       long ret;
-       long fd;
-       long len;
-
-       debug("%s: file \'%s\'\n", __func__, fname);
-
-       /* Open the file */
-       fd = smh_open(fname, "rb");
-       if (fd < 0)
-               return fd;
-
-       /* Get the file length */
-       len = smh_len_fd(fd);
-       if (len < 0) {
-               smh_close(fd);
-               return len;
-       }
-
-       /* Close the file */
-       ret = smh_close(fd);
-       if (ret < 0)
-               return ret;
-
-       debug("%s: returning len %ld\n", __func__, len);
-
-       /* Return the file length (or -1 error indication) */
-       return len;
-}
-
 static int smh_load_file(const char * const name, ulong load_addr,
                         ulong *end_addr)
 {