summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2022-07-14 18:20:51 -0500
committerAlex Elder <elder@linaro.org>2022-07-14 18:30:53 -0500
commit8b0f737b8f9c658d4715c8028badb050daa530ee (patch)
treec07625134917a164ff9eb374aff028dc7094d8e8
parent1bd4a30a4e13985e9095ca5c5a1c123b922697bd (diff)
regs: test the IPA_REG_IRQ_* registers
Create a test function that validates the offset and fields for the IPA_REG_IRQ_* registers for every version version, making sure they match what's already defined in "ipa_reg.h". Signed-off-by: Alex Elder <elder@linaro.org>
-rw-r--r--ipa_reg.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/ipa_reg.c b/ipa_reg.c
index 69f9f4f..f181a06 100644
--- a/ipa_reg.c
+++ b/ipa_reg.c
@@ -2847,6 +2847,162 @@ static void ipa_reg_endp_filter_router_hsh_cfg_n(enum ipa_version version)
ipa_reg_test_fmask(reg, ROUTER_HASH_MSK_METADATA, mask);
}
+static void ipa_reg_irq_stts(enum ipa_version version)
+{
+ const struct ipa_regs *regs = ipa_regs[version];
+ const char *vers = version_string(version);
+ const struct ipa_reg *reg;
+
+ if (IPA_REG_IRQ_STTS >= regs->reg_count) {
+ printf("version %s IRQ_STTS > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_REG_IRQ_STTS];
+ if (!reg) {
+ printf("version %s IRQ_STTS, not defined\n",
+ vers);
+ exit(1);
+ }
+
+ if (!reg->name) {
+ printf("version %s IRQ_STTS has no defined name\n",
+ vers);
+ exit(1);
+ }
+
+ if (strcmp(reg->name, "IRQ_STTS")) {
+ printf("version %s IRQ_STTS has wrong name %s\n",
+ vers, reg->name);
+ exit(1);
+ }
+
+ if (reg->offset != ipa_reg_irq_stts_offset(version)) {
+ printf("version %s %s offset 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->offset,
+ ipa_reg_irq_stts_offset(version));
+ exit(1);
+ }
+}
+
+static void ipa_reg_irq_en(enum ipa_version version)
+{
+ const struct ipa_regs *regs = ipa_regs[version];
+ const char *vers = version_string(version);
+ const struct ipa_reg *reg;
+
+ if (IPA_REG_IRQ_EN >= regs->reg_count) {
+ printf("version %s IRQ_EN > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_REG_IRQ_EN];
+ if (!reg) {
+ printf("version %s IRQ_EN, not defined\n",
+ vers);
+ exit(1);
+ }
+
+ if (!reg->name) {
+ printf("version %s IRQ_EN has no defined name\n",
+ vers);
+ exit(1);
+ }
+
+ if (strcmp(reg->name, "IRQ_EN")) {
+ printf("version %s IRQ_EN has wrong name %s\n",
+ vers, reg->name);
+ exit(1);
+ }
+
+ if (reg->offset != ipa_reg_irq_en_offset(version)) {
+ printf("version %s %s offset 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->offset,
+ ipa_reg_irq_en_offset(version));
+ exit(1);
+ }
+}
+
+static void ipa_reg_irq_clr(enum ipa_version version)
+{
+ const struct ipa_regs *regs = ipa_regs[version];
+ const char *vers = version_string(version);
+ const struct ipa_reg *reg;
+
+ if (IPA_REG_IRQ_CLR >= regs->reg_count) {
+ printf("version %s IRQ_CLR > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_REG_IRQ_CLR];
+ if (!reg) {
+ printf("version %s IRQ_CLR, not defined\n",
+ vers);
+ exit(1);
+ }
+
+ if (!reg->name) {
+ printf("version %s IRQ_CLR has no defined name\n",
+ vers);
+ exit(1);
+ }
+
+ if (strcmp(reg->name, "IRQ_CLR")) {
+ printf("version %s IRQ_CLR has wrong name %s\n",
+ vers, reg->name);
+ exit(1);
+ }
+
+ if (reg->offset != ipa_reg_irq_clr_offset(version)) {
+ printf("version %s %s offset 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->offset,
+ ipa_reg_irq_clr_offset(version));
+ exit(1);
+ }
+}
+
+static void ipa_reg_irq_uc(enum ipa_version version)
+{
+ const struct ipa_regs *regs = ipa_regs[version];
+ const char *vers = version_string(version);
+ const struct ipa_reg *reg;
+
+ if (IPA_REG_IRQ_UC >= regs->reg_count) {
+ printf("version %s IRQ_UC > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_REG_IRQ_UC];
+ if (!reg) {
+ printf("version %s IRQ_UC, not defined\n",
+ vers);
+ exit(1);
+ }
+
+ if (!reg->name) {
+ printf("version %s IRQ_UC has no defined name\n",
+ vers);
+ exit(1);
+ }
+
+ if (strcmp(reg->name, "IRQ_UC")) {
+ printf("version %s IRQ_UC has wrong name %s\n",
+ vers, reg->name);
+ exit(1);
+ }
+
+ if (reg->offset != ipa_reg_irq_uc_offset(version)) {
+ printf("version %s %s offset 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->offset,
+ ipa_reg_irq_uc_offset(version));
+ exit(1);
+ }
+}
+
static void ipa_reg_test(enum ipa_version version)
{
printf("Testing %s\n", version_string(version));
@@ -2886,6 +3042,10 @@ static void ipa_reg_test(enum ipa_version version)
ipa_reg_endp_init_seq_type_n(version);
ipa_reg_endp_init_status_n(version);
ipa_reg_endp_filter_router_hsh_cfg_n(version);
+ ipa_reg_irq_stts(version);
+ ipa_reg_irq_en(version);
+ ipa_reg_irq_clr(version);
+ ipa_reg_irq_uc(version);
}
int ipa_reg_init(struct ipa *ipa)