forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c
....@@ -46,7 +46,6 @@
4646 struct mlxsw_sp_acl_tcam_region *region = cregion->region;
4747 struct mlxsw_afk *afk = mlxsw_sp_acl_afk(mlxsw_sp->acl);
4848 char ptce2_pl[MLXSW_REG_PTCE2_LEN];
49
- unsigned int blocks_count;
5049 char *act_set;
5150 u32 priority;
5251 char *mask;
....@@ -63,9 +62,7 @@
6362 centry->parman_item.index, priority);
6463 key = mlxsw_reg_ptce2_flex_key_blocks_data(ptce2_pl);
6564 mask = mlxsw_reg_ptce2_mask_data(ptce2_pl);
66
- blocks_count = mlxsw_afk_key_info_blocks_count_get(region->key_info);
67
- mlxsw_afk_encode(afk, region->key_info, &rulei->values, key, mask, 0,
68
- blocks_count - 1);
65
+ mlxsw_afk_encode(afk, region->key_info, &rulei->values, key, mask);
6966
7067 err = cregion->ops->entry_insert(cregion, centry, mask);
7168 if (err)
....@@ -99,6 +96,27 @@
9996 mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl);
10097 cregion->ops->entry_remove(cregion, centry);
10198 }
99
+
100
+static int
101
+mlxsw_sp_acl_ctcam_region_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
102
+ struct mlxsw_sp_acl_ctcam_region *cregion,
103
+ struct mlxsw_sp_acl_ctcam_entry *centry,
104
+ struct mlxsw_afa_block *afa_block,
105
+ unsigned int priority)
106
+{
107
+ char ptce2_pl[MLXSW_REG_PTCE2_LEN];
108
+ char *act_set;
109
+
110
+ mlxsw_reg_ptce2_pack(ptce2_pl, true, MLXSW_REG_PTCE2_OP_WRITE_UPDATE,
111
+ cregion->region->tcam_region_info,
112
+ centry->parman_item.index, priority);
113
+
114
+ act_set = mlxsw_afa_block_first_set(afa_block);
115
+ mlxsw_reg_ptce2_flex_action_set_memcpy_to(ptce2_pl, act_set);
116
+
117
+ return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl);
118
+}
119
+
102120
103121 static int mlxsw_sp_acl_ctcam_region_parman_resize(void *priv,
104122 unsigned long new_count)
....@@ -202,3 +220,14 @@
202220 parman_item_remove(cregion->parman, &cchunk->parman_prio,
203221 &centry->parman_item);
204222 }
223
+
224
+int mlxsw_sp_acl_ctcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp,
225
+ struct mlxsw_sp_acl_ctcam_region *cregion,
226
+ struct mlxsw_sp_acl_ctcam_entry *centry,
227
+ struct mlxsw_sp_acl_rule_info *rulei)
228
+{
229
+ return mlxsw_sp_acl_ctcam_region_entry_action_replace(mlxsw_sp, cregion,
230
+ centry,
231
+ rulei->act_block,
232
+ rulei->priority);
233
+}