binman: Allow setting the ROM offset

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>
This commit is contained in:
Simon Glass 2020-07-07 21:32:02 -06:00 committed by Bin Meng
parent a4f8208919
commit db6fb7d152
2 changed files with 25 additions and 0 deletions

View 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
*

View File

@ -12,10 +12,21 @@
#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;
}