summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2022-07-14 16:16:31 -0500
committerAlex Elder <elder@linaro.org>2022-07-14 16:19:02 -0500
commit44a9bf641cb77928dc628cce14502b7605069e0d (patch)
tree6654f7a96faf1e5fc85b8daab0481cee7c9cd528
parenta56831e142257fe7045b254fa200a14f8841fa37 (diff)
regs: test the IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N register
Create a test function that validates the offset and fields for the IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N register, for every IPA 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.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/ipa_reg.c b/ipa_reg.c
index 2625d2b..21e34e0 100644
--- a/ipa_reg.c
+++ b/ipa_reg.c
@@ -2457,6 +2457,80 @@ static void ipa_reg_endp_init_hol_block_en_n(enum ipa_version version)
ipa_reg_test_fmask(reg, HOL_BLOCK_EN, mask);
}
+static void ipa_reg_endp_init_hol_block_timer_n(enum ipa_version version)
+{
+ const struct ipa_regs *regs = ipa_regs[version];
+ const char *vers = version_string(version);
+ const struct ipa_reg *reg;
+ u32 stride;
+ u32 mask;
+
+ if (IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N >= regs->reg_count) {
+ if (version < IPA_VERSION_4_2)
+ return;
+
+ printf("version %s ENDP_INIT_HOL_BLOCK_TIMER_N > reg_count %u\n",
+ vers, regs->reg_count);
+ exit(1);
+ }
+
+ reg = regs->reg[IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N];
+ if (!reg) {
+ if (version < IPA_VERSION_4_2)
+ return;
+
+ printf("version %s ENDP_INIT_HOL_BLOCK_TIMER_N, not defined\n",
+ vers);
+ exit(1);
+ } else if (version < IPA_VERSION_4_2) {
+ printf("version %s ENDP_INIT_HOL_BLOCK_TIMER_N should not be defined\n",
+ vers);
+ exit(1);
+ }
+
+ if (!reg->name) {
+ printf("version %s ENDP_INIT_HOL_BLOCK_TIMER_N has no defined name\n",
+ vers);
+ exit(1);
+ }
+
+ if (strcmp(reg->name, "ENDP_INIT_HOL_BLOCK_TIMER_N")) {
+ printf("version %s ENDP_INIT_HOL_BLOCK_TIMER_N has wrong name %s\n",
+ vers, reg->name);
+ exit(1);
+ }
+
+ if (reg->offset != IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N_OFFSET(0)) {
+ printf("version %s %s offset 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->offset,
+ IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N_OFFSET(0));
+ exit(1);
+ }
+
+ stride = IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N_OFFSET(1) - reg->offset;
+ if (reg->stride != stride) {
+ printf("version %s %s stride 0x%04x, old 0x%04x\n",
+ vers, reg->name, reg->stride, stride);
+ exit(1);
+ }
+
+ mask = version == IPA_VERSION_4_2
+ ? BASE_VALUE_FMASK : 0;
+ ipa_reg_test_fmask(reg, HOLB_TIMER_BASE_VALUE, mask);
+
+ mask = version == IPA_VERSION_4_2
+ ? SCALE_FMASK : 0;
+ ipa_reg_test_fmask(reg, HOLB_TIMER_SCALE, mask);
+
+ mask = version >= IPA_VERSION_4_5
+ ? TIME_LIMIT_FMASK : 0;
+ ipa_reg_test_fmask(reg, HOLB_TIMER_TIME_LIMIT, mask);
+
+ mask = version >= IPA_VERSION_4_5
+ ? GRAN_SEL_FMASK : 0;
+ ipa_reg_test_fmask(reg, HOLB_TIMER_GRAN_SEL, mask);
+}
+
static void ipa_reg_test(enum ipa_version version)
{
printf("Testing %s\n", version_string(version));
@@ -2490,6 +2564,7 @@ static void ipa_reg_test(enum ipa_version version)
ipa_reg_test_endp_init_mode_n(version);
ipa_reg_test_endp_init_aggr_n(version);
ipa_reg_endp_init_hol_block_en_n(version);
+ ipa_reg_endp_init_hol_block_timer_n(version);
}
int ipa_reg_init(struct ipa *ipa)