console: Use map_sysmem() for the pre-relocation console
authorSimon Glass <sjg@chromium.org>
Fri, 16 Jun 2017 03:37:52 +0000 (21:37 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 11 Jul 2017 16:08:19 +0000 (10:08 -0600)
At present this feature casts the address to a pointer. Use the
map_sysmem() function so that it will work correctly on sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
common/console.c

index 60e7a94a56da4d62a2ffdef98312badc16351047..762d5f291c2284b3b0860ed4249fc332ecdd30e4 100644 (file)
@@ -11,6 +11,7 @@
 #include <stdarg.h>
 #include <iomux.h>
 #include <malloc.h>
+#include <mapmem.h>
 #include <os.h>
 #include <serial.h>
 #include <stdio_dev.h>
@@ -416,9 +417,13 @@ int tstc(void)
 
 static void pre_console_putc(const char c)
 {
-       char *buffer = (char *)CONFIG_PRE_CON_BUF_ADDR;
+       char *buffer;
+
+       buffer = map_sysmem(CONFIG_PRE_CON_BUF_ADDR, CONFIG_PRE_CON_BUF_SZ);
 
        buffer[CIRC_BUF_IDX(gd->precon_buf_idx++)] = c;
+
+       unmap_sysmem(buffer);
 }
 
 static void pre_console_puts(const char *s)
@@ -430,14 +435,16 @@ static void pre_console_puts(const char *s)
 static void print_pre_console_buffer(int flushpoint)
 {
        unsigned long in = 0, out = 0;
-       char *buf_in = (char *)CONFIG_PRE_CON_BUF_ADDR;
        char buf_out[CONFIG_PRE_CON_BUF_SZ + 1];
+       char *buf_in;
 
+       buf_in = map_sysmem(CONFIG_PRE_CON_BUF_ADDR, CONFIG_PRE_CON_BUF_SZ);
        if (gd->precon_buf_idx > CONFIG_PRE_CON_BUF_SZ)
                in = gd->precon_buf_idx - CONFIG_PRE_CON_BUF_SZ;
 
        while (in < gd->precon_buf_idx)
                buf_out[out++] = buf_in[CIRC_BUF_IDX(in++)];
+       unmap_sysmem(buf_in);
 
        buf_out[out] = 0;