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:
parent
c7f2c89783
commit
8af311ab3b
3 changed files with 22 additions and 8 deletions
|
@ -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 "<Register, {}>".format(", ".join(fields))
|
||||
|
||||
|
|
|
@ -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,
|
||||
"[<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,
|
||||
"[<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,
|
||||
"[<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>]")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue