summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/README.md3
-rw-r--r--utils/src/dt_table.c1
-rw-r--r--utils/src/dt_table.h5
-rwxr-xr-xutils/src/mkdtboimg.py28
-rw-r--r--utils/src/mkdtimg_core.c5
-rw-r--r--utils/src/mkdtimg_create.c3
-rw-r--r--utils/src/mkdtimg_dump.c2
-rw-r--r--utils/tests/data/mkdtboimg.cfg1
-rw-r--r--utils/tests/data/mkdtimg.cfg1
-rwxr-xr-xutils/tests/mkdtboimg_testdata.sh4
-rwxr-xr-xutils/tests/mkdtimg_testdata.sh2
11 files changed, 33 insertions, 22 deletions
diff --git a/utils/README.md b/utils/README.md
index fd2cf97..6fa3409 100644
--- a/utils/README.md
+++ b/utils/README.md
@@ -195,7 +195,8 @@ dt_table_header:
dt_entry_count = 3
dt_entries_offset = 32
page_size = 2048
- reserved[0] = 00000000
+ version = 0
+
dt_table_entry[0]:
dt_size = 380
dt_offset = 128
diff --git a/utils/src/dt_table.c b/utils/src/dt_table.c
index 6eda182..19d443a 100644
--- a/utils/src/dt_table.c
+++ b/utils/src/dt_table.c
@@ -33,4 +33,5 @@ void dt_table_header_init(struct dt_table_header *header) {
header->dt_entry_size = cpu_to_fdt32(entry_size);
header->dt_entries_offset = cpu_to_fdt32(header_size);
header->page_size = cpu_to_fdt32(DT_TABLE_DEFAULT_PAGE_SIZE);
+ header->version = cpu_to_fdt32(DT_TABLE_DEFAULT_VERSION);
}
diff --git a/utils/src/dt_table.h b/utils/src/dt_table.h
index e7cd9d5..831b80f 100644
--- a/utils/src/dt_table.h
+++ b/utils/src/dt_table.h
@@ -25,6 +25,7 @@
#define DT_TABLE_MAGIC 0xd7b7ab1e
#define DT_TABLE_DEFAULT_PAGE_SIZE 2048
+#define DT_TABLE_DEFAULT_VERSION 0
struct dt_table_header {
uint32_t magic; /* DT_TABLE_MAGIC */
@@ -40,7 +41,9 @@ struct dt_table_header {
no padding is appended */
uint32_t page_size; /* flash page size we assume */
- uint32_t reserved[1]; /* must be zero */
+ uint32_t version; /* DTBO image version, the current version is 0.
+ The version will be incremented when the dt_table_header
+ struct is updated. */
};
struct dt_table_entry {
diff --git a/utils/src/mkdtboimg.py b/utils/src/mkdtboimg.py
index 5f7e40f..c2dbb08 100755
--- a/utils/src/mkdtboimg.py
+++ b/utils/src/mkdtboimg.py
@@ -186,7 +186,7 @@ class Dtbo(object):
self.total_size, self.header_size,
self.dt_entry_size, self.dt_entry_count,
self.dt_entries_offset, self.page_size,
- self.reserved)
+ self.version)
def _update_dt_entry_header(self, dt_entry, metadata_offset):
"""Converts each DT entry header entry into binary data for DTBO file.
@@ -231,7 +231,7 @@ class Dtbo(object):
"""
(self.magic, self.total_size, self.header_size,
self.dt_entry_size, self.dt_entry_count, self.dt_entries_offset,
- self.page_size, self.reserved) = struct.unpack_from('>8I', buf, 0)
+ self.page_size, self.version) = struct.unpack_from('>8I', buf, 0)
# verify the header
if self.magic != self._DTBO_MAGIC:
@@ -246,10 +246,6 @@ class Dtbo(object):
raise ValueError('Invalid DT entry header size (%d) in DTBO file' %
(self.dt_entry_size))
- if self.reserved:
- raise ValueError('Invalid reserved field (%d) in DTBO header' %
- (self.reserved))
-
def _read_dt_entries_from_metadata(self):
"""Reads individual DT entry headers from metadata buffer.
@@ -321,7 +317,7 @@ class Dtbo(object):
return entry
return None
- def __init__(self, file_handle, page_size=None):
+ def __init__(self, file_handle, page_size=None, version=0):
"""Constructor for Dtbo Object
Args:
@@ -345,7 +341,7 @@ class Dtbo(object):
self.dt_entry_count = 0
self.dt_entries_offset = self._DT_TABLE_HEADER_SIZE
self.page_size = page_size
- self.reserved = 0
+ self.version = version
self.__metadata_size = self._DT_TABLE_HEADER_SIZE
else:
self._read_dtbo_image()
@@ -354,7 +350,7 @@ class Dtbo(object):
sb = []
sb.append('dt_table_header:')
_keys = ('magic', 'total_size', 'header_size', 'dt_entry_size',
- 'dt_entry_count', 'dt_entries_offset', 'page_size')
+ 'dt_entry_count', 'dt_entries_offset', 'page_size', 'version')
for key in _keys:
if key == 'magic':
sb.append('{key:>20} = {value:08x}'.format(key=key,
@@ -362,8 +358,6 @@ class Dtbo(object):
else:
sb.append('{key:>20} = {value:d}'.format(key=key,
value=self.__dict__[key]))
- sb.append('{key:>20} = {value:08d}'.format(key='reserved[0]',
- value=self.reserved))
count = 0
for dt_entry in self.__dt_entries:
sb.append('dt_table_entry[{0:d}]:'.format(count))
@@ -591,6 +585,7 @@ def parse_config_file(fin, dt_keys, global_keys):
# set all global defaults
global_args = dict((k, '0') for k in dt_keys)
global_args['page_size'] = 2048
+ global_args['version'] = 0
dt_args = []
found_dt_entry = False
@@ -639,6 +634,8 @@ def parse_create_args(arg_list):
parser = argparse.ArgumentParser(prog='create', add_help=False)
parser.add_argument('--page_size', type=int, dest='page_size',
action='store', default=2048)
+ parser.add_argument('--version', type=int, dest='version',
+ action='store', default=0)
parser.add_argument('--id', type=str, dest='global_id',
action='store', default='0')
parser.add_argument('--rev', type=str, dest='global_rev',
@@ -705,7 +702,7 @@ def create_dtbo_image(fout, argv):
if not remainder:
raise ValueError('List of dtimages to add to DTBO not provided')
dt_entries = parse_dt_entries(global_args, remainder)
- dtbo = Dtbo(fout, global_args.page_size)
+ dtbo = Dtbo(fout, global_args.page_size, global_args.version)
dtbo.add_dt_entries(dt_entries)
dtbo.commit()
fout.close()
@@ -743,7 +740,7 @@ def create_dtbo_image_from_config(fout, argv):
raise ValueError('Configuration file must be provided')
_DT_KEYS = ('id', 'rev', 'custom0', 'custom1', 'custom2', 'custom3')
- _GLOBAL_KEYS = ('page_size')
+ _GLOBAL_KEYS = ('page_size', 'version')
global_args, dt_args = parse_config_file(args.conf_file,
_DT_KEYS, _GLOBAL_KEYS)
@@ -762,7 +759,7 @@ def create_dtbo_image_from_config(fout, argv):
dt_entries.append(DtEntry(**params))
# Create and write DTBO file
- dtbo = Dtbo(fout, global_args['page_size'])
+ dtbo = Dtbo(fout, global_args['page_size'], global_args['version'])
dtbo.add_dt_entries(dt_entries)
dtbo.commit()
fout.close()
@@ -804,7 +801,8 @@ def print_create_usage(progname):
sb = []
sb.append(' ' + progname + ' create <image_file> (<global_option>...) (<dtb_file> (<entry_option>...) ...)\n')
sb.append(' global_options:')
- sb.append(' --page_size <number> Output file name. Default: 2048')
+ sb.append(' --page_size <number> Page size. Default: 2048')
+ sb.append(' --version <number> DTBO version. Default: 0')
sb.append(' --id <number> The default value to set property id in dt_table_entry. Default: 0')
sb.append(' --rev <number>')
sb.append(' --custom0=<number>')
diff --git a/utils/src/mkdtimg_core.c b/utils/src/mkdtimg_core.c
index 4c2059f..849ca4c 100644
--- a/utils/src/mkdtimg_core.c
+++ b/utils/src/mkdtimg_core.c
@@ -38,6 +38,7 @@ struct dt_options {
struct dt_global_options {
struct dt_options default_options;
uint32_t page_size;
+ uint32_t version;
};
struct dt_image_writer_fdt_info {
@@ -68,6 +69,7 @@ static void init_dt_options(struct dt_options *options) {
static void init_dt_global_options(struct dt_global_options *options) {
init_dt_options(&options->default_options);
options->page_size = DT_TABLE_DEFAULT_PAGE_SIZE;
+ options->version = DT_TABLE_DEFAULT_VERSION;
}
static void copy_dt_options(struct dt_options *target, struct dt_options *options) {
@@ -178,6 +180,7 @@ static int output_img_header(FILE *img_fp,
header.dt_entry_count = cpu_to_fdt32(entry_count);
header.total_size = cpu_to_fdt32(total_size);
header.page_size = cpu_to_fdt32(options->page_size);
+ header.version = cpu_to_fdt32(options->version);
fseek(img_fp, 0, SEEK_SET);
fwrite(&header, sizeof(header), 1, img_fp);
@@ -296,6 +299,8 @@ int set_global_options(struct dt_image_writer *writer,
if (strcmp(option, "page_size") == 0) {
global_options->page_size = strtoul(value, NULL, 0);
+ } else if (strcmp(option, "version") == 0) {
+ global_options->version = strtoul(value, NULL, 0);
} else {
return set_dt_options(&global_options->default_options, option, value);
}
diff --git a/utils/src/mkdtimg_create.c b/utils/src/mkdtimg_create.c
index bce2a08..74fd687 100644
--- a/utils/src/mkdtimg_create.c
+++ b/utils/src/mkdtimg_create.c
@@ -96,7 +96,8 @@ void handle_usage_create(FILE *out_fp, const char *prog_name) {
fprintf(out_fp, " %s create <image_file> (<global_option>...) (<dtb_file> (<entry_option>...) ...)\n\n", prog_name);
fprintf(out_fp,
" global_options:\n"
- " --page_size <number> Output file name. Default: 2048\n"
+ " --page_size <number> Output page size. Default: 2048\n"
+ " --version <version> DTBO version. Default: 0\n"
" --id=<number|path> The default value to set property id in dt_table_entry. Default: 0\n"
" --rev=<number|path>\n"
" --custom0=<number|path>\n"
diff --git a/utils/src/mkdtimg_dump.c b/utils/src/mkdtimg_dump.c
index b04a816..382cefb 100644
--- a/utils/src/mkdtimg_dump.c
+++ b/utils/src/mkdtimg_dump.c
@@ -114,7 +114,7 @@ static void output_table_header(FILE *out_fp, const struct dt_table_header *head
output_prop_int(out_fp, "dt_entry_count", header->dt_entry_count);
output_prop_int(out_fp, "dt_entries_offset", header->dt_entries_offset);
output_prop_int(out_fp, "page_size", header->page_size);
- output_prop_hex(out_fp, "reserved[0]", header->reserved[0]);
+ output_prop_int(out_fp, "version", header->version);
}
static void output_table_entry(FILE *out_fp, int index, const struct dt_table_entry *entry) {
diff --git a/utils/tests/data/mkdtboimg.cfg b/utils/tests/data/mkdtboimg.cfg
index a5e8c2d..603292c 100644
--- a/utils/tests/data/mkdtboimg.cfg
+++ b/utils/tests/data/mkdtboimg.cfg
@@ -3,6 +3,7 @@
id=0x100 # Read the value form the path in dtb
rev=0x100 # Read the value form the path in dtb
custom0=0xabc # default value
+ version=1
board1v1.dts.dtb
diff --git a/utils/tests/data/mkdtimg.cfg b/utils/tests/data/mkdtimg.cfg
index 3cf2a81..e7a464e 100644
--- a/utils/tests/data/mkdtimg.cfg
+++ b/utils/tests/data/mkdtimg.cfg
@@ -3,6 +3,7 @@
id=/:board_id # Read the value form the path in dtb
rev=/:board_rev # Read the value form the path in dtb
custom0=0xabc # default value
+ version=1
board1v1.dts.dtb
diff --git a/utils/tests/mkdtboimg_testdata.sh b/utils/tests/mkdtboimg_testdata.sh
index 50cafe2..1574343 100755
--- a/utils/tests/mkdtboimg_testdata.sh
+++ b/utils/tests/mkdtboimg_testdata.sh
@@ -52,14 +52,14 @@ for dts in ${DTS_LIST}; do
done
echo "Creating dtbo image with mkdtbimg"
-mkdtimg create ${MKDTIMG_OUT}/create.img --page_size=4096 --id=0x100 \
+mkdtimg create ${MKDTIMG_OUT}/create.img --page_size=4096 --id=0x100 --version=1\
--rev=0x100 --custom0=0xabc "${OUTDIR}/board1v1.dts.dtb" "${OUTDIR}/board1v1_1.dts.dtb" \
--id=0xddccbbaa --rev=0x01000100 "${OUTDIR}/board2v1.dts.dtb" --id=0x200 \
--rev=0x201 "${OUTDIR}/board1v1.dts.dtb" --custom0=0xdef > /dev/null
echo "Creating dtbo image with mkdtboimg"
../src/mkdtboimg.py create ${MKDTBOIMG_OUTCREATE}/create.img --page_size=4096 \
- --id=0x100 --rev=0x100 --custom0=0xabc "${OUTDIR}/board1v1.dts.dtb" \
+ --id=0x100 --rev=0x100 --custom0=0xabc --version=1 "${OUTDIR}/board1v1.dts.dtb" \
"${OUTDIR}/board1v1_1.dts.dtb" --id=0xddccbbaa --rev=0x01000100 \
"${OUTDIR}/board2v1.dts.dtb" --id=0x200 --rev=0x201 \
"${OUTDIR}/board1v1.dts.dtb" --custom0=0xdef > /dev/null
diff --git a/utils/tests/mkdtimg_testdata.sh b/utils/tests/mkdtimg_testdata.sh
index d5b7f2f..7243e9f 100755
--- a/utils/tests/mkdtimg_testdata.sh
+++ b/utils/tests/mkdtimg_testdata.sh
@@ -50,7 +50,7 @@ done
IMG="${OUTDIR}/create.img"
mkdtimg create "$IMG" \
- --page_size=4096 --id=/:board_id --rev=/:board_rev --custom0=0xabc \
+ --page_size=4096 --id=/:board_id --rev=/:board_rev --custom0=0xabc --version=1 \
"${OUTDIR}/board1v1.dts.dtb" \
"${OUTDIR}/board1v1_1.dts.dtb" --id=/:another_board_id \
"${OUTDIR}/board2v1.dts.dtb" --rev=0x201 \