[PATCH net-next 02/10] net: microchip: sparx5: Clear rule counter even if lookup is disabled

From: Steen Hegelund
Date: Mon Feb 13 2023 - 04:25:06 EST


The rule counter must be cleared when creating a new rule, even if the VCAP
lookup is currently disabled.

Signed-off-by: Steen Hegelund <steen.hegelund@xxxxxxxxxxxxx>
---
drivers/net/ethernet/microchip/vcap/vcap_api.c | 7 +++++--
drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c | 4 ++--
2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/microchip/vcap/vcap_api.c b/drivers/net/ethernet/microchip/vcap/vcap_api.c
index 6307d59f23da..68e04d47f6fd 100644
--- a/drivers/net/ethernet/microchip/vcap/vcap_api.c
+++ b/drivers/net/ethernet/microchip/vcap/vcap_api.c
@@ -2246,6 +2246,11 @@ int vcap_add_rule(struct vcap_rule *rule)
if (move.count > 0)
vcap_move_rules(ri, &move);

+ /* Set the counter to zero */
+ ret = vcap_write_counter(ri, &ctr);
+ if (ret)
+ goto out;
+
if (ri->state == VCAP_RS_DISABLED) {
/* Erase the rule area */
ri->vctrl->ops->init(ri->ndev, ri->admin, ri->addr, ri->size);
@@ -2264,8 +2269,6 @@ int vcap_add_rule(struct vcap_rule *rule)
pr_err("%s:%d: rule write error: %d\n", __func__, __LINE__, ret);
goto out;
}
- /* Set the counter to zero */
- ret = vcap_write_counter(ri, &ctr);
out:
mutex_unlock(&ri->admin->lock);
return ret;
diff --git a/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c b/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
index b2753aac8ad2..0a1d4d740567 100644
--- a/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
+++ b/drivers/net/ethernet/microchip/vcap/vcap_api_kunit.c
@@ -1337,8 +1337,8 @@ static void vcap_api_encode_rule_test(struct kunit *test)
u32 port_mask_rng_mask = 0x0f;
u32 igr_port_mask_value = 0xffabcd01;
u32 igr_port_mask_mask = ~0;
- /* counter is written as the last operation */
- u32 expwriteaddr[] = {792, 793, 794, 795, 796, 797, 792};
+ /* counter is written as the first operation */
+ u32 expwriteaddr[] = {792, 792, 793, 794, 795, 796, 797};
int idx;

vcap_test_api_init(&is2_admin);
--
2.39.1