diff options
author | Alex Elder <elder@linaro.org> | 2022-07-13 10:11:09 -0500 |
---|---|---|
committer | Alex Elder <elder@linaro.org> | 2022-07-14 06:58:32 -0500 |
commit | a99242265f90821aefc4cc8832a0242086e3a779 (patch) | |
tree | 745e5ff446080d9d4148c03f14e1197eef31d92a | |
parent | 6df7b9809407dbb22bb42f95204d9bca8e6d9a50 (diff) |
regs: test the ROUTE register
Create a test function that validates the offset and fields for
the ROUTE 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 | 61 |
1 files changed, 61 insertions, 0 deletions
@@ -396,12 +396,73 @@ static void ipa_reg_test_clkon_cfg(enum ipa_version version) ipa_reg_test_fmask(reg, CLKON_CFG_DRBIP, mask); } +static void ipa_reg_test_route(enum ipa_version version) +{ + const struct ipa_regs *regs = ipa_regs[version]; + const char *vers = version_string(version); + const struct ipa_reg *reg; + u32 mask; + + /* ROUTE is defined for all versions */ + if (IPA_REG_ROUTE >= regs->reg_count) { + printf("version %s ROUTE > reg_count %u\n", + vers, regs->reg_count); + exit(1); + } + + reg = regs->reg[IPA_REG_ROUTE]; + if (!reg) { + printf("version %s ROUTE not defined\n", + vers); + exit(1); + } + + if (!reg->name) { + printf("version %s ROUTE has no defined name\n", + vers); + exit(1); + } + + if (strcmp(reg->name, "ROUTE")) { + printf("version %s ROUTE has wrong name %s\n", + vers, reg->name); + exit(1); + } + + if (reg->offset != IPA_REG_ROUTE_OFFSET) { + printf("version %s %s offset 0x%04x, old 0x%04x\n", + vers, reg->name, reg->offset, + IPA_REG_ROUTE_OFFSET); + exit(1); + } + + /* All ROUTE fields are defined for all versions */ + mask = ROUTE_DIS_FMASK; + ipa_reg_test_fmask(reg, ROUTE_DIS, mask); + + mask = ROUTE_DEF_PIPE_FMASK; + ipa_reg_test_fmask(reg, ROUTE_DEF_PIPE, mask); + + mask = ROUTE_DEF_HDR_TABLE_FMASK; + ipa_reg_test_fmask(reg, ROUTE_DEF_HDR_TABLE, mask); + + mask = ROUTE_DEF_HDR_OFST_FMASK; + ipa_reg_test_fmask(reg, ROUTE_DEF_HDR_OFST, mask); + + mask = ROUTE_FRAG_DEF_PIPE_FMASK; + ipa_reg_test_fmask(reg, ROUTE_FRAG_DEF_PIPE, mask); + + mask = ROUTE_DEF_RETAIN_HDR_FMASK; + ipa_reg_test_fmask(reg, ROUTE_DEF_RETAIN_HDR, mask); +} + static void ipa_reg_test(enum ipa_version version) { printf("Testing %s\n", version_string(version)); ipa_reg_test_comp_cfg(version); ipa_reg_test_clkon_cfg(version); + ipa_reg_test_route(version); } int ipa_reg_init(struct ipa *ipa) |