mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
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:
parent
a4f8208919
commit
db6fb7d152
2 changed files with 25 additions and 0 deletions
|
@ -20,6 +20,14 @@ struct binman_entry {
|
||||||
u32 size;
|
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
|
* binman_entry_find() - Find a binman symbol
|
||||||
*
|
*
|
||||||
|
|
17
lib/binman.c
17
lib/binman.c
|
@ -12,10 +12,21 @@
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.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 {
|
struct binman_info {
|
||||||
ofnode image;
|
ofnode image;
|
||||||
|
int rom_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define ROM_OFFSET_NONE (-1)
|
||||||
|
|
||||||
static struct binman_info *binman;
|
static struct binman_info *binman;
|
||||||
|
|
||||||
int binman_entry_find(const char *name, struct binman_entry *entry)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void binman_set_rom_offset(int rom_offset)
|
||||||
|
{
|
||||||
|
binman->rom_offset = rom_offset;
|
||||||
|
}
|
||||||
|
|
||||||
int binman_init(void)
|
int binman_init(void)
|
||||||
{
|
{
|
||||||
binman = malloc(sizeof(struct binman_info));
|
binman = malloc(sizeof(struct binman_info));
|
||||||
|
@ -45,6 +61,7 @@ int binman_init(void)
|
||||||
binman->image = ofnode_path("/binman");
|
binman->image = ofnode_path("/binman");
|
||||||
if (!ofnode_valid(binman->image))
|
if (!ofnode_valid(binman->image))
|
||||||
return log_msg_ret("binman node", -EINVAL);
|
return log_msg_ret("binman node", -EINVAL);
|
||||||
|
binman->rom_offset = ROM_OFFSET_NONE;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue