]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dfu: fix dfu tftp on sandbox
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 22 Jul 2020 15:46:02 +0000 (17:46 +0200)
committerMarek Vasut <marex@denx.de>
Tue, 1 Sep 2020 12:47:43 +0000 (14:47 +0200)
The environment variable loadaddr is in the virtual address space of the
sandbox. To get the actual memory address where the FIT image has been
loaded we have to convert this address according to the memory mapping of
the sandbox.

Equally the addresses in the *.its file have to be converted when used in
the dfu_ram driver.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
common/update.c
drivers/dfu/dfu_ram.c
include/dfu.h

index d8854791d2abc928fa9da41cba01f594361f3628..36b6b7523d50b9354fbf18c90a5c1a9ff7d7d5ee 100644 (file)
@@ -24,6 +24,7 @@
 #include <net.h>
 #include <net/tftp.h>
 #include <malloc.h>
+#include <mapmem.h>
 #include <dfu.h>
 #include <errno.h>
 #include <mtd/cfi_flash.h>
@@ -280,7 +281,7 @@ int update_tftp(ulong addr, char *interface, char *devstring)
        }
 
 got_update_file:
-       fit = (void *)addr;
+       fit = map_sysmem(addr, 0);
 
        if (!fit_check_format((void *)fit)) {
                printf("Bad FIT format of the update file, aborting "
index cc98668e7a474081d098ccd9d530d958898c90a0..ab0ce9e6fa91e6de4317cbf02d5585573cf453f3 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <common.h>
 #include <malloc.h>
+#include <mapmem.h>
 #include <errno.h>
 #include <dfu.h>
 
@@ -27,9 +28,9 @@ static int dfu_transfer_medium_ram(enum dfu_op op, struct dfu_entity *dfu,
        }
 
        if (op == DFU_OP_WRITE)
-               memcpy(dfu->data.ram.start + offset, buf, *len);
+               memcpy(map_sysmem(dfu->data.ram.start + offset, 0), buf, *len);
        else
-               memcpy(buf, dfu->data.ram.start + offset, *len);
+               memcpy(buf, map_sysmem(dfu->data.ram.start + offset, 0), *len);
 
        return 0;
 }
@@ -73,7 +74,7 @@ int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr, char *s)
        }
 
        dfu->layout = DFU_RAM_ADDR;
-       dfu->data.ram.start = (void *)simple_strtoul(argv[1], NULL, 16);
+       dfu->data.ram.start = simple_strtoul(argv[1], NULL, 16);
        dfu->data.ram.size = simple_strtoul(argv[2], NULL, 16);
 
        dfu->write_medium = dfu_write_medium_ram;
index 6fa450593605cbbbd50b9583b156b236c80ccbec..84abdc79acd13cb937ea798a5e616fb1b2b2dd31 100644 (file)
@@ -79,7 +79,7 @@ struct nand_internal_data {
 };
 
 struct ram_internal_data {
-       void            *start;
+       unsigned long   start;
        unsigned int    size;
 };