diff options
author | Alex Elder <elder@linaro.org> | 2022-07-14 16:16:31 -0500 |
---|---|---|
committer | Alex Elder <elder@linaro.org> | 2022-07-14 16:19:02 -0500 |
commit | 44a9bf641cb77928dc628cce14502b7605069e0d (patch) | |
tree | 6654f7a96faf1e5fc85b8daab0481cee7c9cd528 | |
parent | a56831e142257fe7045b254fa200a14f8841fa37 (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.c | 75 |
1 files changed, 75 insertions, 0 deletions
@@ -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) |