]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Octeontx2-af: Disable stale DMAC filters
authorSubbaraya Sundeep <sbhatta@marvell.com>
Sun, 20 Jul 2025 16:36:36 +0000 (22:06 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 22 Jul 2025 13:36:39 +0000 (15:36 +0200)
During driver initialization disable stale DMAC filters
in CGX/RPM set by firmware.

Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20250720163638.1560323-3-hkelam@marvell.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/af/cgx.c

index 846ee2b9edf12e897cecdbf22d46878a0b5603f3..cd6c5229d0eddbf393d4e7facb461d0bd2cffc09 100644 (file)
@@ -1704,9 +1704,11 @@ unsigned long cgx_get_lmac_bmap(void *cgxd)
 
 static int cgx_lmac_init(struct cgx *cgx)
 {
+       u8 max_dmac_filters;
        struct lmac *lmac;
        u64 lmac_list;
        int i, err;
+       int filter;
 
        /* lmac_list specifies which lmacs are enabled
         * when bit n is set to 1, LMAC[n] is enabled
@@ -1745,6 +1747,8 @@ static int cgx_lmac_init(struct cgx *cgx)
                                cgx->mac_ops->dmac_filter_count /
                                cgx->lmac_count;
 
+               max_dmac_filters = lmac->mac_to_index_bmap.max;
+
                err = rvu_alloc_bitmap(&lmac->mac_to_index_bmap);
                if (err)
                        goto err_name_free;
@@ -1774,6 +1778,15 @@ static int cgx_lmac_init(struct cgx *cgx)
                set_bit(lmac->lmac_id, &cgx->lmac_bmap);
                cgx->mac_ops->mac_pause_frm_config(cgx, lmac->lmac_id, true);
                lmac->lmac_type = cgx->mac_ops->get_lmac_type(cgx, lmac->lmac_id);
+
+               /* Disable stale DMAC filters for sane state */
+               for (filter = 0; filter < max_dmac_filters; filter++)
+                       cgx_lmac_addr_del(cgx->cgx_id, lmac->lmac_id, filter);
+
+               /* As cgx_lmac_addr_del does not clear entry for index 0
+                * so it needs to be done explicitly
+                */
+               cgx_lmac_addr_reset(cgx->cgx_id, lmac->lmac_id);
        }
 
        /* Start X2P reset on given MAC block */