From 57e222fda9835382801074a9cb752b1d69952543 Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Thu, 14 Jul 2022 18:47:26 -0500 Subject: regs: test the IRQ_SUSPEND_* registers Create a test function that validates the offset and fields for the IRQ_SUSPEND_* registers for every version version, making sure they match what's already defined in "ipa_reg.h". Signed-off-by: Alex Elder --- regs.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) diff --git a/regs.c b/regs.c index e49431a..ea251dc 100644 --- a/regs.c +++ b/regs.c @@ -3003,6 +3003,143 @@ static void ipa_reg_irq_uc(enum ipa_version version) } } +static void ipa_reg_irq_suspend_info(enum ipa_version version) +{ + const struct ipa_regs *regs = ipa_regs[version]; + const char *vers = version_string(version); + const struct ipa_reg *reg; + + if (IRQ_SUSPEND_INFO >= regs->reg_count) { + printf("version %s IRQ_STTS > reg_count %u\n", + vers, regs->reg_count); + exit(1); + } + + reg = regs->reg[IRQ_SUSPEND_INFO]; + if (!reg) { + printf("version %s IRQ_SUSPEND_INFO, not defined\n", + vers); + exit(1); + } + + if (!reg->name) { + printf("version %s IRQ_SUSPEND_INFO has no defined name\n", + vers); + exit(1); + } + + if (strcmp(reg->name, "IRQ_SUSPEND_INFO")) { + printf("version %s IRQ_SUSPEND_INFO has wrong name %s\n", + vers, reg->name); + exit(1); + } + + if (reg->offset != ipa_reg_irq_suspend_info_offset(version)) { + printf("version %s %s offset 0x%04x, old 0x%04x\n", + vers, reg->name, reg->offset, + ipa_reg_irq_suspend_info_offset(version)); + exit(1); + } +} + +static void ipa_reg_irq_suspend_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 (IRQ_SUSPEND_EN >= regs->reg_count) { + if (version == IPA_VERSION_3_0) + return; + + printf("version %s IRQ_SUSPEND_EN > reg_count %u\n", + vers, regs->reg_count); + exit(1); + } + + reg = regs->reg[IRQ_SUSPEND_EN]; + if (!reg) { + if (version == IPA_VERSION_3_0) + return; + + printf("version %s IRQ_SUSPEND_EN, not defined\n", + vers); + exit(1); + } else if (version == IPA_VERSION_3_0) { + printf("version %s IRQ_SUSPEND_EN should not be defined\n", + vers); + exit(1); + } + + if (!reg->name) { + printf("version %s IRQ_SUSPEND_EN has no defined name\n", + vers); + exit(1); + } + + if (strcmp(reg->name, "IRQ_SUSPEND_EN")) { + printf("version %s IRQ_SUSPEND_EN has wrong name %s\n", + vers, reg->name); + exit(1); + } + + if (reg->offset != ipa_reg_irq_suspend_en_offset(version)) { + printf("version %s %s offset 0x%04x, old 0x%04x\n", + vers, reg->name, reg->offset, + ipa_reg_irq_suspend_en_offset(version)); + exit(1); + } +} + +static void ipa_reg_irq_suspend_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 (IRQ_SUSPEND_CLR >= regs->reg_count) { + if (version == IPA_VERSION_3_0) + return; + + printf("version %s IRQ_SUSPEND_CLR > reg_count %u\n", + vers, regs->reg_count); + exit(1); + } + + reg = regs->reg[IRQ_SUSPEND_CLR]; + if (!reg) { + if (version == IPA_VERSION_3_0) + return; + + printf("version %s IRQ_SUSPEND_CLR, not defined\n", + vers); + exit(1); + } else if (version == IPA_VERSION_3_0) { + printf("version %s IRQ_SUSPEND_CLR should not be defined\n", + vers); + exit(1); + } + + if (!reg->name) { + printf("version %s IRQ_SUSPEND_CLR has no defined name\n", + vers); + exit(1); + } + + if (strcmp(reg->name, "IRQ_SUSPEND_CLR")) { + printf("version %s IRQ_SUSPEND_CLR has wrong name %s\n", + vers, reg->name); + exit(1); + } + + if (reg->offset != ipa_reg_irq_suspend_clr_offset(version)) { + printf("version %s %s offset 0x%04x, old 0x%04x\n", + vers, reg->name, reg->offset, + ipa_reg_irq_suspend_clr_offset(version)); + exit(1); + } +} + static void ipa_reg_test(enum ipa_version version) { printf("Testing %s\n", version_string(version)); @@ -3046,6 +3183,9 @@ static void ipa_reg_test(enum ipa_version version) ipa_reg_irq_en(version); ipa_reg_irq_clr(version); ipa_reg_irq_uc(version); + ipa_reg_irq_suspend_info(version); + ipa_reg_irq_suspend_en(version); + ipa_reg_irq_suspend_clr(version); } int main() -- cgit v1.2.3