summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ipa_reg.c140
1 files changed, 140 insertions, 0 deletions
diff --git a/ipa_reg.c b/ipa_reg.c
index f181a06..1c6b400 100644
--- a/ipa_reg.c
+++ b/ipa_reg.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 (IPA_REG_IRQ_SUSPEND_INFO >= regs->reg_count) {
+ printf("version %s IRQ_STTS > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_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 (IPA_REG_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[IPA_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 (IPA_REG_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[IPA_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 ipa_reg_init(struct ipa *ipa)