]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Allow setting the ROM offset
authorSimon Glass <sjg@chromium.org>
Wed, 8 Jul 2020 03:32:02 +0000 (21:32 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
On x86 the SPI ROM can be memory-mapped, at least most of it. Add a way
to tell binman the offset from a ROM address to a RAM address.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
include/binman.h
lib/binman.c

index b462dc854293c0a61343a580ab960c0d0508c5b3..baf49f7876b6a15225590abf6e43c1380e6dc394 100644 (file)
@@ -20,6 +20,14 @@ struct binman_entry {
        u32 size;
 };
 
+/**
+ * binman_set_rom_offset() - Set the ROM memory-map offset
+ *
+ * @rom_offset: Offset from an image_pos to the memory-mapped address. This
+ *     tells binman that ROM image_pos x can be addressed at rom_offset + x
+ */
+void binman_set_rom_offset(int rom_offset);
+
 /**
  * binman_entry_find() - Find a binman symbol
  *
index fd7de24bd238a1a2b2916ba8998ea19ad257796a..dc3a880882e973bafd2e83c2638dbea0fed9790b 100644 (file)
 #include <log.h>
 #include <malloc.h>
 
+/**
+ * struct binman_info - Information needed by the binman library
+ *
+ * @image: Node describing the image we are running from
+ * @rom_offset: Offset from an image_pos to the memory-mapped address, or
+ *     ROM_OFFSET_NONE if the ROM is not memory-mapped. Can be positive or
+ *     negative
+ */
 struct binman_info {
        ofnode image;
+       int rom_offset;
 };
 
+#define ROM_OFFSET_NONE                (-1)
+
 static struct binman_info *binman;
 
 int binman_entry_find(const char *name, struct binman_entry *entry)
@@ -37,6 +48,11 @@ int binman_entry_find(const char *name, struct binman_entry *entry)
        return 0;
 }
 
+void binman_set_rom_offset(int rom_offset)
+{
+       binman->rom_offset = rom_offset;
+}
+
 int binman_init(void)
 {
        binman = malloc(sizeof(struct binman_info));
@@ -45,6 +61,7 @@ int binman_init(void)
        binman->image = ofnode_path("/binman");
        if (!ofnode_valid(binman->image))
                return log_msg_ret("binman node", -EINVAL);
+       binman->rom_offset = ROM_OFFSET_NONE;
 
        return 0;
 }