mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 09:12:08 +02:00
dtoc: Add a 64-bit type and a way to convert cells into 64 bits
When dealing with multi-cell values we need a type that can hold this value. Add this and a function to process it from a list of cell values. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com> Tested-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
@@ -38,6 +38,7 @@ TYPE_NAMES = {
|
|||||||
fdt.TYPE_BYTE: 'unsigned char',
|
fdt.TYPE_BYTE: 'unsigned char',
|
||||||
fdt.TYPE_STRING: 'const char *',
|
fdt.TYPE_STRING: 'const char *',
|
||||||
fdt.TYPE_BOOL: 'bool',
|
fdt.TYPE_BOOL: 'bool',
|
||||||
|
fdt.TYPE_INT64: 'fdt64_t',
|
||||||
}
|
}
|
||||||
|
|
||||||
STRUCT_PREFIX = 'dtd_'
|
STRUCT_PREFIX = 'dtd_'
|
||||||
@@ -95,6 +96,8 @@ def get_value(ftype, value):
|
|||||||
return '"%s"' % value
|
return '"%s"' % value
|
||||||
elif ftype == fdt.TYPE_BOOL:
|
elif ftype == fdt.TYPE_BOOL:
|
||||||
return 'true'
|
return 'true'
|
||||||
|
elif ftype == fdt.TYPE_INT64:
|
||||||
|
return '%#x' % value
|
||||||
|
|
||||||
def get_compat_name(node):
|
def get_compat_name(node):
|
||||||
"""Get a node's first compatible string as a C identifier
|
"""Get a node's first compatible string as a C identifier
|
||||||
|
@@ -21,7 +21,7 @@ import libfdt
|
|||||||
# so it is fairly efficient.
|
# so it is fairly efficient.
|
||||||
|
|
||||||
# A list of types we support
|
# A list of types we support
|
||||||
(TYPE_BYTE, TYPE_INT, TYPE_STRING, TYPE_BOOL) = range(4)
|
(TYPE_BYTE, TYPE_INT, TYPE_STRING, TYPE_BOOL, TYPE_INT64) = range(5)
|
||||||
|
|
||||||
def CheckErr(errnum, msg):
|
def CheckErr(errnum, msg):
|
||||||
if errnum:
|
if errnum:
|
||||||
|
@@ -29,6 +29,20 @@ def fdt32_to_cpu(val):
|
|||||||
val = val.encode('raw_unicode_escape')
|
val = val.encode('raw_unicode_escape')
|
||||||
return struct.unpack('>I', val)[0]
|
return struct.unpack('>I', val)[0]
|
||||||
|
|
||||||
|
def fdt_cells_to_cpu(val, cells):
|
||||||
|
"""Convert one or two cells to a long integer
|
||||||
|
|
||||||
|
Args:
|
||||||
|
Value to convert (array of one or more 4-character strings)
|
||||||
|
|
||||||
|
Return:
|
||||||
|
A native-endian long value
|
||||||
|
"""
|
||||||
|
out = long(fdt32_to_cpu(val[0]))
|
||||||
|
if cells == 2:
|
||||||
|
out = out << 32 | fdt32_to_cpu(val[1])
|
||||||
|
return out
|
||||||
|
|
||||||
def EnsureCompiled(fname):
|
def EnsureCompiled(fname):
|
||||||
"""Compile an fdt .dts source file into a .dtb binary blob if needed.
|
"""Compile an fdt .dts source file into a .dtb binary blob if needed.
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user