dts: gen_defines.py: Clean up 'reg' code

Reorganize write_regs() to reuse more code for *_BASE_ADDRESS and
*_SIZE, and get rid of reg_addr_ident() and reg_size_ident().

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
This commit is contained in:
Ulf Magnusson 2019-12-14 03:30:09 +01:00 committed by Johan Hedberg
commit 95c18f1e6b

View file

@ -169,19 +169,22 @@ def relativize(path):
def write_regs(node):
# Writes address/size output for the registers in the node's 'reg' property
def reg_addr_name_alias(reg):
return str2ident(reg.name) + "_BASE_ADDRESS" if reg.name else None
def write_reg(reg, base_ident, val):
# Drop '_0' from the identifier if there's a single register, for
# backwards compatibility
if len(reg.node.regs) > 1:
ident = "{}_{}".format(base_ident, reg.node.regs.index(reg))
else:
ident = base_ident
def reg_size_name_alias(reg):
return str2ident(reg.name) + "_SIZE" if reg.name else None
out_dev(node, ident, val,
# Name alias from 'reg-names = ...'
str2ident(reg.name) + "_" + base_ident if reg.name else None)
for reg in node.regs:
out_dev(node, reg_addr_ident(reg), hex(reg.addr),
name_alias=reg_addr_name_alias(reg))
write_reg(reg, "BASE_ADDRESS", hex(reg.addr))
if reg.size:
out_dev(node, reg_size_ident(reg), reg.size,
name_alias=reg_size_name_alias(reg))
write_reg(reg, "SIZE", reg.size)
def write_props(node):
@ -270,34 +273,6 @@ def write_existence_flags(node):
str2ident(compat)), 1)
def reg_addr_ident(reg):
# Returns the identifier (e.g., macro name) to be used for the address of
# 'reg' in the output
node = reg.node
# NOTE: to maintain compat wit the old script we special case if there's
# only a single register (we drop the '_0').
if len(node.regs) > 1:
return "BASE_ADDRESS_{}".format(node.regs.index(reg))
else:
return "BASE_ADDRESS"
def reg_size_ident(reg):
# Returns the identifier (e.g., macro name) to be used for the size of
# 'reg' in the output
node = reg.node
# NOTE: to maintain compat wit the old script we special case if there's
# only a single register (we drop the '_0').
if len(node.regs) > 1:
return "SIZE_{}".format(node.regs.index(reg))
else:
return "SIZE"
def dev_ident(node):
# Returns an identifier for the device given by 'node'. Used when building
# e.g. macro names.