OSDN Git Service

octeontx2-af: mcs: Write TCAM_DATA and TCAM_MASK registers at once
authorSubbaraya Sundeep <sbhatta@marvell.com>
Wed, 26 Apr 2023 06:25:21 +0000 (11:55 +0530)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 27 Apr 2023 10:38:11 +0000 (12:38 +0200)
As per hardware errata on CN10KB, all the four TCAM_DATA
and TCAM_MASK registers has to be written at once otherwise
write to individual registers will fail. Hence write to all
TCAM_DATA registers and then to all TCAM_MASK registers.

Fixes: cfc14181d497 ("octeontx2-af: cn10k: mcs: Manage the MCS block hardware resources")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/octeontx2/af/mcs.c

index 492baa0..148417d 100644 (file)
@@ -473,6 +473,8 @@ void mcs_flowid_entry_write(struct mcs *mcs, u64 *data, u64 *mask, int flow_id,
                for (reg_id = 0; reg_id < 4; reg_id++) {
                        reg = MCSX_CPM_RX_SLAVE_FLOWID_TCAM_DATAX(reg_id, flow_id);
                        mcs_reg_write(mcs, reg, data[reg_id]);
+               }
+               for (reg_id = 0; reg_id < 4; reg_id++) {
                        reg = MCSX_CPM_RX_SLAVE_FLOWID_TCAM_MASKX(reg_id, flow_id);
                        mcs_reg_write(mcs, reg, mask[reg_id]);
                }
@@ -480,6 +482,8 @@ void mcs_flowid_entry_write(struct mcs *mcs, u64 *data, u64 *mask, int flow_id,
                for (reg_id = 0; reg_id < 4; reg_id++) {
                        reg = MCSX_CPM_TX_SLAVE_FLOWID_TCAM_DATAX(reg_id, flow_id);
                        mcs_reg_write(mcs, reg, data[reg_id]);
+               }
+               for (reg_id = 0; reg_id < 4; reg_id++) {
                        reg = MCSX_CPM_TX_SLAVE_FLOWID_TCAM_MASKX(reg_id, flow_id);
                        mcs_reg_write(mcs, reg, mask[reg_id]);
                }