@ -353,6 +353,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
@@ -353,6 +353,7 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
struct data dtbuf = empty_data;
struct data strbuf = empty_data;
struct boot_param_header bph;
int padlen;
for (i = 0; i < ARRAY_SIZE(version_table); i++) {
if (version_table[i].version == version)
@ -370,6 +371,19 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
@@ -370,6 +371,19 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
make_bph(&bph, vi, reservebuf.len, dtbuf.len, strbuf.len,
boot_cpuid_phys);
/*
* If the user asked for more space than is used, adjust the totalsize.
*/
padlen = minsize - be32_to_cpu(bph.totalsize);
if (padlen > 0) {
bph.totalsize = cpu_to_be32(minsize);
} else {
if ((minsize > 0) && (quiet < 1))
fprintf(stderr,
"Warning: blob size %d >= minimum size %d\n",
be32_to_cpu(bph.totalsize), minsize);
}
/*
* Assemble the blob: start with the header, add with alignment
* the reserve buffer, add the reserve map terminating zeroes,
@ -385,18 +399,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
@@ -385,18 +399,9 @@ void dt_to_blob(FILE *f, struct boot_info *bi, int version,
/*
* If the user asked for more space than is used, pad out the blob.
*/
if (minsize > 0) {
int padlen = minsize - be32_to_cpu(bph.totalsize);
if (padlen > 0) {
blob = data_append_zeroes(blob, padlen);
bph.totalsize = cpu_to_be32(minsize);
} else {
if (quiet < 1)
fprintf(stderr,
"Warning: blob size %d >= minimum size %d\n",
be32_to_cpu(bph.totalsize), minsize);
}
if (padlen > 0) {
blob = data_append_zeroes(blob, padlen);
bph.totalsize = cpu_to_be32(minsize);
}
fwrite(blob.val, blob.len, 1, f);