diff --git a/scripts/dts/edtlib.py b/scripts/dts/edtlib.py index 3eb8521b846..93ae36344ef 100644 --- a/scripts/dts/edtlib.py +++ b/scripts/dts/edtlib.py @@ -1261,8 +1261,14 @@ class Node: .format(address_cells, size_cells)): reg = Register() reg.node = self - reg.addr = _translate(to_num(raw_reg[:4*address_cells]), node) - reg.size = to_num(raw_reg[4*address_cells:]) + if address_cells == 0: + reg.addr = None + else: + reg.addr = _translate(to_num(raw_reg[:4*address_cells]), node) + if size_cells == 0: + reg.size = None + else: + reg.size = to_num(raw_reg[4*address_cells:]) if size_cells != 0 and reg.size == 0: _err("zero-sized 'reg' in {!r} seems meaningless (maybe you " "want a size of one or #size-cells = 0 instead)" @@ -1411,8 +1417,8 @@ class Register: there is no 'reg-names' property addr: - The starting address of the register, in the parent address space. Any - 'ranges' properties are taken into account. + The starting address of the register, in the parent address space, or None + if #address-cells is zero. Any 'ranges' properties are taken into account. size: The length of the register in bytes @@ -1422,8 +1428,10 @@ class Register: if self.name is not None: fields.append("name: " + self.name) - fields.append("addr: " + hex(self.addr)) - fields.append("size: " + hex(self.size)) + if self.addr is not None: + fields.append("addr: " + hex(self.addr)) + if self.size is not None: + fields.append("size: " + hex(self.size)) return "".format(", ".join(fields)) diff --git a/scripts/dts/testedtlib.py b/scripts/dts/testedtlib.py index 4d14209ee65..8355275229e 100755 --- a/scripts/dts/testedtlib.py +++ b/scripts/dts/testedtlib.py @@ -63,10 +63,10 @@ warning: "#cells:" in test-bindings/deprecated.yaml is deprecated and will be re # verify_streq(edt.get_node("/reg-zero-address-cells/node").regs, - "[, ]") + "[, ]") verify_streq(edt.get_node("/reg-zero-size-cells/node").regs, - "[, ]") + "[, ]") verify_streq(edt.get_node("/reg-ranges/parent/node").regs, "[, , , , , ]") diff --git a/scripts/kconfig/kconfigfunctions.py b/scripts/kconfig/kconfigfunctions.py index 506c43b7894..91b95112608 100644 --- a/scripts/kconfig/kconfigfunctions.py +++ b/scripts/kconfig/kconfigfunctions.py @@ -173,6 +173,9 @@ def _node_reg_addr(node, index, unit): if int(index) >= len(node.regs): return 0 + if node.regs[int(index)].addr is None: + return 0 + return node.regs[int(index)].addr >> _dt_units_to_scale(unit) @@ -186,6 +189,9 @@ def _node_reg_size(node, index, unit): if int(index) >= len(node.regs): return 0 + if node.regs[int(index)].size is None: + return 0 + return node.regs[int(index)].size >> _dt_units_to_scale(unit)