[dif] Prepare templates for rv_timer modifications.
To adapt the templates to auto-generate the RV timer IRQ DIFs, the
template functions must be adapted to be more generic (in terms of
passing in the register offset macro/variable with the address).
Additionally, the "params_list" from the RV timer's HJSON will need to
be parsed, to exract the number of HARTs/timers, so that capability is
added to the make_new_dif.py tool.
This partially addresses #8142.
Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/util/make_new_dif.py b/util/make_new_dif.py
index ca3137e..73020d9 100755
--- a/util/make_new_dif.py
+++ b/util/make_new_dif.py
@@ -48,12 +48,6 @@
'rv_plic',
'alert_handler',
]
-# Subset of IPs for which some portion of the DIFs have been auto-generated.
-# NOTE: This exists while autogenerated DIF code is checked into the repository
-# to warn those who update the templates to re-generate the code. Also, as more
-# auto-generated DIF code is checked in (see
-# https://github.com/lowRISC/opentitan/issues/8142), this list will expand.
-ALL_AUTOGEN_IPS = ["uart"]
class Irq:
@@ -76,6 +70,23 @@
self.width = irq["width"] if "width" in irq else 1
+class Parameter:
+ """Holds IP Parameter information for populating DIF code templates.
+
+ Attributes:
+ name (str): Parameter name.
+ description (str): Parameter description.
+ default (int): Default parameter value.
+
+ """
+ def __init__(self, parameter: OrderedDict) -> None:
+ self.name = parameter["name"]
+ self.description = parameter["desc"]
+ self.default = None
+ if "default" in parameter:
+ self.default = parameter["default"]
+
+
class Ip:
"""Holds all IP metadata mined from an IP's name and HJSON file.
@@ -85,7 +96,6 @@
name_camel (str): IP short name in camel case.
name_long_lower (str): IP full name in lower case.
name_long_upper (str): IP full name with first letter capitalized.
- hjson_data (OrderedDict): IP metadata from hw/ip/<ip>/data/<ip>.hjson.
irqs (List[Irq]): List of Irq objects constructed from hjson_data.
"""
@@ -106,28 +116,41 @@
# .capitalize() does not do the right thing, since it would convert
# UART to Uart.
self.name_long_upper = (self.name_long_lower[0].upper() +
- self.name_long_lower[1:])
+ self.name_long_lower[1:])
# Load HJSON data.
if self.name_snake in IPS_USING_IPGEN:
- ip_dir = REPO_TOP / "hw/top_earlgrey/ip_autogen/{0}".format(self.name_snake)
+ ip_dir = REPO_TOP / "hw/top_earlgrey/ip_autogen/{0}".format(
+ self.name_snake)
else:
ip_dir = REPO_TOP / "hw/ip/{0}".format(self.name_snake)
_hjson_file = ip_dir / "data" / "{0}.hjson".format(self.name_snake)
with _hjson_file.open("r") as f:
_hjson_str = f.read()
- self.hjson_data = hjson.loads(_hjson_str)
+ self._hjson_data = hjson.loads(_hjson_str)
# Load IRQ data from HJSON.
self.irqs = self._load_irqs()
+ # Load Parameters from HJSON
+ self.parameters = self._load_parameters()
def _load_irqs(self):
- assert (self.hjson_data and
+ assert (self._hjson_data and
"ERROR: must load IP HJSON before loarding IRQs")
irqs = []
- if "interrupt_list" in self.hjson_data:
- for irq in self.hjson_data["interrupt_list"]:
+ if "interrupt_list" in self._hjson_data:
+ for irq in self._hjson_data["interrupt_list"]:
irqs.append(Irq(irq))
return irqs
+ def _load_parameters(self):
+ assert (self._hjson_data and
+ "ERROR: must load IP HJSON before loarding Parameters")
+ parameters = {}
+ if "param_list" in self._hjson_data:
+ for parameter in self._hjson_data["param_list"]:
+ p = Parameter(parameter)
+ parameters[p.name] = p
+ return parameters
+
def main():
dif_dir = REPO_TOP / "sw/device/lib/dif"
@@ -212,7 +235,7 @@
strict_undefined=True)
# Generate output file.
- out_file.write_text(template.render(ip=ip, irqs=ip.irqs))
+ out_file.write_text(template.render(ip=ip))
# Format autogenerated file with clang-format.
assert (shutil.which("clang-format") and
diff --git a/util/make_new_dif/dif_autogen.c.tpl b/util/make_new_dif/dif_autogen.c.tpl
index 3400613..6b9bf36 100644
--- a/util/make_new_dif/dif_autogen.c.tpl
+++ b/util/make_new_dif/dif_autogen.c.tpl
@@ -11,18 +11,17 @@
Note, this template requires the following Python objects to be passed:
1. ip: See util/make_new_dif.py for the definition of the `ip` obj.
- 2. list[irq]: See util/make_new_dif.py for the definition of the `irq` obj.
</%doc>
-<%def name="mmio_region_read32(intr_reg_upper)">mmio_region_read32(
- ${ip.name_snake}->base_addr,
- ${ip.name_upper}_INTR_${intr_reg_upper}_REG_OFFSET);
+<%def name="mmio_region_read32(intr_reg_offet)">mmio_region_read32(
+ ${ip.name_snake}->base_addr,
+ ${intr_reg_offet});
</%def>
-<%def name="mmio_region_write32(intr_reg_upper, value)">mmio_region_write32(
- ${ip.name_snake}->base_addr,
- ${ip.name_upper}_INTR_${intr_reg_upper}_REG_OFFSET,
- ${value});
+<%def name="mmio_region_write32(intr_reg_offet, value)">mmio_region_write32(
+ ${ip.name_snake}->base_addr,
+ ${intr_reg_offet},
+ ${value});
</%def>
// This file is auto-generated.
@@ -31,7 +30,7 @@
#include "${ip.name_snake}_regs.h" // Generated.
-% if len(irqs) > 0:
+% if len(ip.irqs) > 0:
/**
* Get the corresponding interrupt register bit offset. INTR_STATE,
@@ -43,7 +42,7 @@
bitfield_bit32_index_t *index_out) {
switch (irq) {
- % for irq in irqs:
+ % for irq in ip.irqs:
## This handles the GPIO IP case where there is a multi-bit interrupt.
% if irq.width > 1:
% for irq_idx in range(irq.width):
@@ -74,7 +73,7 @@
return kDifBadArg;
}
- *snapshot = ${mmio_region_read32("STATE")}
+ *snapshot = ${mmio_region_read32(ip.name_upper + "_INTR_STATE_REG_OFFSET")}
return kDifOk;
}
@@ -94,7 +93,8 @@
return kDifBadArg;
}
- uint32_t intr_state_reg = ${mmio_region_read32("STATE")}
+ uint32_t intr_state_reg = ${mmio_region_read32(ip.name_upper + "_INTR_STATE_REG_OFFSET")}
+
*is_pending = bitfield_bit32_read(intr_state_reg, index);
return kDifOk;
@@ -116,7 +116,7 @@
// Writing to the register clears the corresponding bits (Write-one clear).
uint32_t intr_state_reg = bitfield_bit32_write(0, index, true);
- ${mmio_region_write32("STATE", "intr_state_reg")}
+ ${mmio_region_write32(ip.name_upper + "_INTR_STATE_REG_OFFSET", "intr_state_reg")}
return kDifOk;
}
@@ -136,7 +136,7 @@
}
uint32_t intr_test_reg = bitfield_bit32_write(0, index, true);
- ${mmio_region_write32("TEST", "intr_test_reg")}
+ ${mmio_region_write32(ip.name_upper + "_INTR_TEST_REG_OFFSET", "intr_test_reg")}
return kDifOk;
}
@@ -157,7 +157,8 @@
return kDifBadArg;
}
- uint32_t intr_enable_reg = ${mmio_region_read32("ENABLE")}
+ uint32_t intr_enable_reg = ${mmio_region_read32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET")}
+
bool is_enabled = bitfield_bit32_read(intr_enable_reg, index);
*state = is_enabled ?
kDifToggleEnabled : kDifToggleDisabled;
@@ -180,10 +181,11 @@
return kDifBadArg;
}
- uint32_t intr_enable_reg = ${mmio_region_read32("ENABLE")}
+ uint32_t intr_enable_reg = ${mmio_region_read32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET")}
+
bool enable_bit = (state == kDifToggleEnabled) ? true : false;
intr_enable_reg = bitfield_bit32_write(intr_enable_reg, index, enable_bit);
- ${mmio_region_write32("ENABLE", "intr_enable_reg")}
+ ${mmio_region_write32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET", "intr_enable_reg")}
return kDifOk;
}
@@ -199,11 +201,11 @@
// Pass the current interrupt state to the caller, if requested.
if (snapshot != NULL) {
- *snapshot = ${mmio_region_read32("ENABLE")}
+ *snapshot = ${mmio_region_read32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET")}
}
// Disable all interrupts.
- ${mmio_region_write32("ENABLE", "0u")}
+ ${mmio_region_write32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET", "0u")}
return kDifOk;
}
@@ -217,7 +219,7 @@
return kDifBadArg;
}
- ${mmio_region_write32("ENABLE", "*snapshot")}
+ ${mmio_region_write32(ip.name_upper + "_INTR_ENABLE_REG_OFFSET", "*snapshot")}
return kDifOk;
}
diff --git a/util/make_new_dif/dif_autogen.h.tpl b/util/make_new_dif/dif_autogen.h.tpl
index ef11726..b1f33de 100644
--- a/util/make_new_dif/dif_autogen.h.tpl
+++ b/util/make_new_dif/dif_autogen.h.tpl
@@ -15,7 +15,6 @@
Note, this template requires the following Python objects to be passed:
1. ip: See util/make_new_dif.py for the definition of the `ip` obj.
- 2. list[irq]: See util/make_new_dif.py for the definition of the `irq` obj.
</%doc>
#ifndef OPENTITAN_SW_DEVICE_LIB_DIF_AUTOGEN_DIF_${ip.name_upper}_AUTOGEN_H_
@@ -51,13 +50,13 @@
mmio_region_t base_addr;
} dif_${ip.name_snake}_t;
-% if len(irqs) > 0:
+% if len(ip.irqs) > 0:
/**
* A ${ip.name_snake} interrupt request type.
*/
typedef enum dif_${ip.name_snake}_irq {
- % for irq in irqs:
+ % for irq in ip.irqs:
/**
* ${irq.description}
*/
diff --git a/util/make_new_dif/dif_autogen_unittest.cc.tpl b/util/make_new_dif/dif_autogen_unittest.cc.tpl
index 0e54117..c32ffb7 100644
--- a/util/make_new_dif/dif_autogen_unittest.cc.tpl
+++ b/util/make_new_dif/dif_autogen_unittest.cc.tpl
@@ -36,7 +36,7 @@
dif_${ip.name_snake}_t ${ip.name_snake}_ = {.base_addr = dev().region()};
};
-% if len(irqs) > 0:
+% if len(ip.irqs) > 0:
using ::testing::Eq;
class IrqGetStateTest : public ${ip.name_camel}Test {};
@@ -90,30 +90,30 @@
EXPECT_EQ(dif_${ip.name_snake}_irq_is_pending(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
&is_pending),
kDifBadArg);
EXPECT_EQ(dif_${ip.name_snake}_irq_is_pending(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
nullptr),
kDifBadArg);
EXPECT_EQ(dif_${ip.name_snake}_irq_is_pending(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
nullptr),
kDifBadArg);
@@ -135,37 +135,37 @@
// Get the first IRQ state.
irq_state = false;
EXPECT_READ32(${ip.name_upper}_INTR_STATE_REG_OFFSET,
- % if irqs[0].width > 1:
+ % if ip.irqs[0].width > 1:
{{0, true}});
% else:
- {{${ip.name_upper}_INTR_STATE_${irqs[0].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_STATE_${ip.irqs[0].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_is_pending(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
&irq_state),
kDifOk);
EXPECT_TRUE(irq_state);
- % if len(irqs) > 1 or irqs[0].width > 1:
+ % if len(ip.irqs) > 1 or ip.irqs[0].width > 1:
// Get the last IRQ state.
irq_state = true;
EXPECT_READ32(${ip.name_upper}_INTR_STATE_REG_OFFSET,
- % if irqs[0].width > 1:
- {{${irqs[0].width - 1}, false}});
+ % if ip.irqs[0].width > 1:
+ {{${ip.irqs[0].width - 1}, false}});
% else:
- {{${ip.name_upper}_INTR_STATE_${irqs[-1].name_upper}_BIT, false}});
+ {{${ip.name_upper}_INTR_STATE_${ip.irqs[-1].name_upper}_BIT, false}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_is_pending(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}${irqs[0].width - 1},
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}${ip.irqs[0].width - 1},
% else:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel},
% endif
&irq_state),
kDifOk);
@@ -178,10 +178,10 @@
TEST_F(IrqAcknowledgeTest, NullArgs) {
EXPECT_EQ(dif_${ip.name_snake}_irq_acknowledge(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0),
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}),
% endif
kDifBadArg);
}
@@ -196,34 +196,34 @@
TEST_F(IrqAcknowledgeTest, Success) {
// Clear the first IRQ state.
EXPECT_WRITE32(${ip.name_upper}_INTR_STATE_REG_OFFSET,
- % if irqs[0].width > 1:
+ % if ip.irqs[0].width > 1:
{{0, true}});
% else:
- {{${ip.name_upper}_INTR_STATE_${irqs[0].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_STATE_${ip.irqs[0].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_acknowledge(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0),
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}),
% endif
kDifOk);
- % if len(irqs) > 1 or irqs[0].width > 1:
+ % if len(ip.irqs) > 1 or ip.irqs[0].width > 1:
// Clear the last IRQ state.
EXPECT_WRITE32(${ip.name_upper}_INTR_STATE_REG_OFFSET,
- % if irqs[0].width > 1:
- {{${irqs[0].width - 1}, true}});
+ % if ip.irqs[0].width > 1:
+ {{${ip.irqs[0].width - 1}, true}});
% else:
- {{${ip.name_upper}_INTR_STATE_${irqs[-1].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_STATE_${ip.irqs[-1].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_acknowledge(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}${irqs[0].width - 1}),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}${ip.irqs[0].width - 1}),
% else:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel}),
% endif
kDifOk);
% endif
@@ -234,10 +234,10 @@
TEST_F(IrqForceTest, NullArgs) {
EXPECT_EQ(dif_${ip.name_snake}_irq_force(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0),
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}),
% endif
kDifBadArg);
}
@@ -252,34 +252,34 @@
TEST_F(IrqForceTest, Success) {
// Force first IRQ.
EXPECT_WRITE32(${ip.name_upper}_INTR_TEST_REG_OFFSET,
- % if irqs[0].width > 1:
+ % if ip.irqs[0].width > 1:
{{0, true}});
% else:
- {{${ip.name_upper}_INTR_TEST_${irqs[0].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_TEST_${ip.irqs[0].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_force(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0),
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}),
% endif
kDifOk);
- % if len(irqs) > 1 or irqs[0].width > 1:
+ % if len(ip.irqs) > 1 or ip.irqs[0].width > 1:
// Force last IRQ.
EXPECT_WRITE32(${ip.name_upper}_INTR_TEST_REG_OFFSET,
- % if irqs[0].width > 1:
- {{${irqs[0].width - 1}, true}});
+ % if ip.irqs[0].width > 1:
+ {{${ip.irqs[0].width - 1}, true}});
% else:
- {{${ip.name_upper}_INTR_TEST_${irqs[-1].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_TEST_${ip.irqs[-1].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_force(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel}${irqs[0].width - 1}),
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel}${ip.irqs[0].width - 1}),
% else:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel}),
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel}),
% endif
kDifOk);
% endif
@@ -293,30 +293,30 @@
EXPECT_EQ(dif_${ip.name_snake}_irq_get_enabled(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
&irq_state),
kDifBadArg);
EXPECT_EQ(dif_${ip.name_snake}_irq_get_enabled(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
nullptr),
kDifBadArg);
EXPECT_EQ(dif_${ip.name_snake}_irq_get_enabled(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
nullptr),
kDifBadArg);
@@ -338,37 +338,37 @@
// First IRQ is enabled.
irq_state = kDifToggleDisabled;
EXPECT_READ32(${ip.name_upper}_INTR_ENABLE_REG_OFFSET,
- % if irqs[0].width > 1:
+ % if ip.irqs[0].width > 1:
{{0, true}});
% else:
- {{${ip.name_upper}_INTR_ENABLE_${irqs[0].name_upper}_BIT, true}});
+ {{${ip.name_upper}_INTR_ENABLE_${ip.irqs[0].name_upper}_BIT, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_get_enabled(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
&irq_state),
kDifOk);
EXPECT_EQ(irq_state, kDifToggleEnabled);
- % if len(irqs) > 1 or irqs[0].width > 1:
+ % if len(ip.irqs) > 1 or ip.irqs[0].width > 1:
// Last IRQ is disabled.
irq_state = kDifToggleEnabled;
EXPECT_READ32(${ip.name_upper}_INTR_ENABLE_REG_OFFSET,
- % if irqs[0].width > 1:
- {{${irqs[0].width - 1}, false}});
+ % if ip.irqs[0].width > 1:
+ {{${ip.irqs[0].width - 1}, false}});
% else:
- {{${ip.name_upper}_INTR_ENABLE_${irqs[-1].name_upper}_BIT, false}});
+ {{${ip.name_upper}_INTR_ENABLE_${ip.irqs[-1].name_upper}_BIT, false}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_get_enabled(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}${irqs[0].width - 1},
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}${ip.irqs[0].width - 1},
% else:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel},
% endif
&irq_state),
kDifOk);
@@ -383,10 +383,10 @@
EXPECT_EQ(dif_${ip.name_snake}_irq_set_enabled(
nullptr,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
irq_state),
kDifBadArg);
@@ -408,36 +408,36 @@
// Enable first IRQ.
irq_state = kDifToggleEnabled;
EXPECT_MASK32(${ip.name_upper}_INTR_ENABLE_REG_OFFSET,
- % if irqs[0].width > 1:
+ % if ip.irqs[0].width > 1:
{{0, 0x1, true}});
% else:
- {{${ip.name_upper}_INTR_ENABLE_${irqs[0].name_upper}_BIT, 0x1, true}});
+ {{${ip.name_upper}_INTR_ENABLE_${ip.irqs[0].name_upper}_BIT, 0x1, true}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_set_enabled(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}0,
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}0,
% else:
- kDif${ip.name_camel}Irq${irqs[0].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel},
% endif
irq_state),
kDifOk);
- % if len(irqs) > 1 or irqs[0].width > 1:
+ % if len(ip.irqs) > 1 or ip.irqs[0].width > 1:
// Disable last IRQ.
irq_state = kDifToggleDisabled;
EXPECT_MASK32(${ip.name_upper}_INTR_ENABLE_REG_OFFSET,
- % if irqs[0].width > 1:
- {{${irqs[0].width - 1}, 0x1, false}});
+ % if ip.irqs[0].width > 1:
+ {{${ip.irqs[0].width - 1}, 0x1, false}});
% else:
- {{${ip.name_upper}_INTR_ENABLE_${irqs[-1].name_upper}_BIT, 0x1, false}});
+ {{${ip.name_upper}_INTR_ENABLE_${ip.irqs[-1].name_upper}_BIT, 0x1, false}});
% endif
EXPECT_EQ(dif_${ip.name_snake}_irq_set_enabled(
&${ip.name_snake}_,
- % if irqs[0].width > 1:
- kDif${ip.name_camel}Irq${irqs[0].name_camel}${irqs[0].width - 1},
+ % if ip.irqs[0].width > 1:
+ kDif${ip.name_camel}Irq${ip.irqs[0].name_camel}${ip.irqs[0].width - 1},
% else:
- kDif${ip.name_camel}Irq${irqs[-1].name_camel},
+ kDif${ip.name_camel}Irq${ip.irqs[-1].name_camel},
% endif
irq_state),
kDifOk);