cbfstool: don't rewrite param.baseaddress in cbfs_add

cbfs_add calculated a base address out of the alignment specification
and stored it in param.baseaddress.
This worked when every cbfstool invocation only added a single file, but
with -r REGION1,REGION2,... multiple additions can happen.
In that case, the second (and later) additions would have both alignment
and baseaddress set, which isn't allowed, aborting the process.

Change-Id: I8c5a512dbe3c97e08c5bcd92b5541b58f65c63b3
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-on: https://review.coreboot.org/13063
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Patrick Georgi 2016-01-20 18:45:07 +01:00 committed by Patrick Georgi
parent a5a628e86b
commit 9a17d04e40

View File

@ -520,6 +520,7 @@ static int cbfs_add(void)
{ {
int32_t address; int32_t address;
convert_buffer_t convert; convert_buffer_t convert;
uint32_t local_baseaddress = param.baseaddress;
if (param.alignment && param.baseaddress) { if (param.alignment && param.baseaddress) {
ERROR("Cannot specify both alignment and base address\n"); ERROR("Cannot specify both alignment and base address\n");
@ -541,13 +542,13 @@ static int cbfs_add(void)
size_t metadata_sz = sizeof(struct cbfs_file_attr_compression); size_t metadata_sz = sizeof(struct cbfs_file_attr_compression);
if (do_cbfs_locate(&address, metadata_sz)) if (do_cbfs_locate(&address, metadata_sz))
return 1; return 1;
param.baseaddress = address; local_baseaddress = address;
} }
return cbfs_add_component(param.filename, return cbfs_add_component(param.filename,
param.name, param.name,
param.type, param.type,
param.baseaddress, local_baseaddress,
param.headeroffset, param.headeroffset,
convert); convert);
} }