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,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))
|
||||||
|
|
|
@ -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>]")
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue