Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93c8221610 | ||
|
|
d6b24eb35b | ||
|
|
8742dcd694 |
@@ -107,7 +107,6 @@ int fsp_locate_fsp(enum fsp_type_t type, struct binman_entry *entry,
|
|||||||
bool use_spi_flash, struct udevice **devp,
|
bool use_spi_flash, struct udevice **devp,
|
||||||
struct fsp_header **hdrp, ulong *rom_offsetp)
|
struct fsp_header **hdrp, ulong *rom_offsetp)
|
||||||
{
|
{
|
||||||
ulong mask = CONFIG_ROM_SIZE - 1;
|
|
||||||
struct udevice *dev;
|
struct udevice *dev;
|
||||||
ulong rom_offset = 0;
|
ulong rom_offset = 0;
|
||||||
uint map_size;
|
uint map_size;
|
||||||
@@ -141,7 +140,7 @@ int fsp_locate_fsp(enum fsp_type_t type, struct binman_entry *entry,
|
|||||||
if (ret)
|
if (ret)
|
||||||
return log_msg_ret("binman entry", ret);
|
return log_msg_ret("binman entry", ret);
|
||||||
if (!use_spi_flash)
|
if (!use_spi_flash)
|
||||||
rom_offset = (map_base & mask) - CONFIG_ROM_SIZE;
|
rom_offset = map_base;
|
||||||
} else {
|
} else {
|
||||||
ret = -ENOENT;
|
ret = -ENOENT;
|
||||||
if (false)
|
if (false)
|
||||||
|
|||||||
16
lib/binman.c
16
lib/binman.c
@@ -16,12 +16,15 @@
|
|||||||
* struct binman_info - Information needed by the binman library
|
* struct binman_info - Information needed by the binman library
|
||||||
*
|
*
|
||||||
* @image: Node describing the image we are running from
|
* @image: Node describing the image we are running from
|
||||||
|
* @skip_at_start: Number of bytes skipped at the start of the image. This is
|
||||||
|
* the value of the skip-at-start property for the image
|
||||||
* @rom_offset: Offset from an image_pos to the memory-mapped address, or
|
* @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
|
* ROM_OFFSET_NONE if the ROM is not memory-mapped. Can be positive or
|
||||||
* negative
|
* negative
|
||||||
*/
|
*/
|
||||||
struct binman_info {
|
struct binman_info {
|
||||||
ofnode image;
|
ofnode image;
|
||||||
|
uint skip_at_start;
|
||||||
int rom_offset;
|
int rom_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -80,7 +83,14 @@ static int binman_entry_find_internal(ofnode node, const char *name,
|
|||||||
|
|
||||||
int binman_entry_find(const char *name, struct binman_entry *entry)
|
int binman_entry_find(const char *name, struct binman_entry *entry)
|
||||||
{
|
{
|
||||||
return binman_entry_find_internal(binman->image, name, entry);
|
int ret;
|
||||||
|
|
||||||
|
ret = binman_entry_find_internal(binman->image, name, entry);
|
||||||
|
if (ret)
|
||||||
|
return log_msg_ret("bef", ret);
|
||||||
|
entry->image_pos -= binman->skip_at_start;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int binman_entry_map(ofnode parent, const char *name, void **bufp, int *sizep)
|
int binman_entry_map(ofnode parent, const char *name, void **bufp, int *sizep)
|
||||||
@@ -107,7 +117,7 @@ ofnode binman_section_find_node(const char *name)
|
|||||||
|
|
||||||
void binman_set_rom_offset(int rom_offset)
|
void binman_set_rom_offset(int rom_offset)
|
||||||
{
|
{
|
||||||
binman->rom_offset = rom_offset;
|
binman->rom_offset = rom_offset - binman->skip_at_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
int binman_get_rom_offset(void)
|
int binman_get_rom_offset(void)
|
||||||
@@ -140,10 +150,12 @@ int binman_init(void)
|
|||||||
binman = malloc(sizeof(struct binman_info));
|
binman = malloc(sizeof(struct binman_info));
|
||||||
if (!binman)
|
if (!binman)
|
||||||
return log_msg_ret("space for binman", -ENOMEM);
|
return log_msg_ret("space for binman", -ENOMEM);
|
||||||
|
memset(binman, '\0', sizeof(struct binman_info));
|
||||||
ret = find_image_node(&binman->image);
|
ret = find_image_node(&binman->image);
|
||||||
if (ret)
|
if (ret)
|
||||||
return log_msg_ret("node", -ENOENT);
|
return log_msg_ret("node", -ENOENT);
|
||||||
binman_set_rom_offset(ROM_OFFSET_NONE);
|
binman_set_rom_offset(ROM_OFFSET_NONE);
|
||||||
|
ofnode_read_u32(binman->image, "skip-at-start", &binman->skip_at_start);
|
||||||
log_debug("binman: Selected image node '%s'\n",
|
log_debug("binman: Selected image node '%s'\n",
|
||||||
ofnode_get_name(binman->image));
|
ofnode_get_name(binman->image));
|
||||||
|
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ class Entry_section(Entry):
|
|||||||
self._sort = fdt_util.GetBool(self._node, 'sort-by-offset')
|
self._sort = fdt_util.GetBool(self._node, 'sort-by-offset')
|
||||||
self._end_at_4gb = fdt_util.GetBool(self._node, 'end-at-4gb')
|
self._end_at_4gb = fdt_util.GetBool(self._node, 'end-at-4gb')
|
||||||
self._skip_at_start = fdt_util.GetInt(self._node, 'skip-at-start')
|
self._skip_at_start = fdt_util.GetInt(self._node, 'skip-at-start')
|
||||||
if self._end_at_4gb:
|
if self._end_at_4gb and self.GetImage().copy_to_orig:
|
||||||
if not self.size:
|
if not self.size:
|
||||||
self.Raise("Section size must be provided when using end-at-4gb")
|
self.Raise("Section size must be provided when using end-at-4gb")
|
||||||
if self._skip_at_start is not None:
|
if self._skip_at_start is not None:
|
||||||
@@ -263,6 +263,8 @@ class Entry_section(Entry):
|
|||||||
super().AddMissingProperties(have_image_pos)
|
super().AddMissingProperties(have_image_pos)
|
||||||
if self.compress != 'none':
|
if self.compress != 'none':
|
||||||
have_image_pos = False
|
have_image_pos = False
|
||||||
|
if self._end_at_4gb:
|
||||||
|
state.AddZeroProp(self._node, 'skip-at-start')
|
||||||
for entry in self._entries.values():
|
for entry in self._entries.values():
|
||||||
entry.AddMissingProperties(have_image_pos)
|
entry.AddMissingProperties(have_image_pos)
|
||||||
|
|
||||||
@@ -505,6 +507,8 @@ class Entry_section(Entry):
|
|||||||
|
|
||||||
def SetCalculatedProperties(self):
|
def SetCalculatedProperties(self):
|
||||||
super().SetCalculatedProperties()
|
super().SetCalculatedProperties()
|
||||||
|
if self._end_at_4gb:
|
||||||
|
state.SetInt(self._node, 'skip-at-start', self._skip_at_start)
|
||||||
for entry in self._entries.values():
|
for entry in self._entries.values():
|
||||||
entry.SetCalculatedProperties()
|
entry.SetCalculatedProperties()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user