summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Elder <elder@linaro.org>2022-07-13 10:11:09 -0500
committerAlex Elder <elder@linaro.org>2022-07-14 06:58:32 -0500
commita99242265f90821aefc4cc8832a0242086e3a779 (patch)
tree745e5ff446080d9d4148c03f14e1197eef31d92a
parent6df7b9809407dbb22bb42f95204d9bca8e6d9a50 (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.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/ipa_reg.c b/ipa_reg.c
index 0c32be5..8c811bd 100644
--- a/ipa_reg.c
+++ b/ipa_reg.c
@@ -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)