edtlib: allow register addr / size to be None

If the #address-cells property for a register is 0 than we set the addr
value of the reg to None.  Similar, if #size-cells is 0 than we set the
size value to None for the reg.

Fixup kconfigfunctions.py to handle reg.size and reg.addr being None.

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
Kumar Gala 2020-03-13 12:43:56 -05:00 committed by Kumar Gala
commit 8af311ab3b
3 changed files with 22 additions and 8 deletions

View file

@ -1261,7 +1261,13 @@ class Node:
.format(address_cells, size_cells)): .format(address_cells, size_cells)):
reg = Register() reg = Register()
reg.node = self reg.node = self
if address_cells == 0:
reg.addr = None
else:
reg.addr = _translate(to_num(raw_reg[:4*address_cells]), node) 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:]) reg.size = to_num(raw_reg[4*address_cells:])
if size_cells != 0 and reg.size == 0: if size_cells != 0 and reg.size == 0:
_err("zero-sized 'reg' in {!r} seems meaningless (maybe you " _err("zero-sized 'reg' in {!r} seems meaningless (maybe you "
@ -1411,8 +1417,8 @@ class Register:
there is no 'reg-names' property there is no 'reg-names' property
addr: addr:
The starting address of the register, in the parent address space. Any The starting address of the register, in the parent address space, or None
'ranges' properties are taken into account. if #address-cells is zero. Any 'ranges' properties are taken into account.
size: size:
The length of the register in bytes The length of the register in bytes
@ -1422,7 +1428,9 @@ class Register:
if self.name is not None: if self.name is not None:
fields.append("name: " + self.name) fields.append("name: " + self.name)
if self.addr is not None:
fields.append("addr: " + hex(self.addr)) fields.append("addr: " + hex(self.addr))
if self.size is not None:
fields.append("size: " + hex(self.size)) fields.append("size: " + hex(self.size))
return "<Register, {}>".format(", ".join(fields)) return "<Register, {}>".format(", ".join(fields))

View file

@ -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-address-cells/node").regs,
"[<Register, addr: 0x0, size: 0x1>, <Register, addr: 0x0, size: 0x2>]") "[<Register, size: 0x1>, <Register, size: 0x2>]")
verify_streq(edt.get_node("/reg-zero-size-cells/node").regs, verify_streq(edt.get_node("/reg-zero-size-cells/node").regs,
"[<Register, addr: 0x1, size: 0x0>, <Register, addr: 0x2, size: 0x0>]") "[<Register, addr: 0x1>, <Register, addr: 0x2>]")
verify_streq(edt.get_node("/reg-ranges/parent/node").regs, verify_streq(edt.get_node("/reg-ranges/parent/node").regs,
"[<Register, addr: 0x5, size: 0x1>, <Register, addr: 0xe0000000f, size: 0x1>, <Register, addr: 0xc0000000e, size: 0x1>, <Register, addr: 0xc0000000d, size: 0x1>, <Register, addr: 0xa0000000b, size: 0x1>, <Register, addr: 0x0, size: 0x1>]") "[<Register, addr: 0x5, size: 0x1>, <Register, addr: 0xe0000000f, size: 0x1>, <Register, addr: 0xc0000000e, size: 0x1>, <Register, addr: 0xc0000000d, size: 0x1>, <Register, addr: 0xa0000000b, size: 0x1>, <Register, addr: 0x0, size: 0x1>]")

View file

@ -173,6 +173,9 @@ def _node_reg_addr(node, index, unit):
if int(index) >= len(node.regs): if int(index) >= len(node.regs):
return 0 return 0
if node.regs[int(index)].addr is None:
return 0
return node.regs[int(index)].addr >> _dt_units_to_scale(unit) 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): if int(index) >= len(node.regs):
return 0 return 0
if node.regs[int(index)].size is None:
return 0
return node.regs[int(index)].size >> _dt_units_to_scale(unit) return node.regs[int(index)].size >> _dt_units_to_scale(unit)