Skip to content

Commit 1661795

Browse files
IoanaCiorneidavem330
authored andcommitted
dpaa2-switch: reuse dpaa2_switch_acl_entry_add() for STP frames trap
Since we added the dpaa2_switch_acl_entry_add() function in the previous patches to hide all the details of actually adding the ACL entry by issuing a firmware command, let's use it also for adding a CPU trap for the STP frames. Signed-off-by: Ioana Ciornei <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4ba28c1 commit 1661795

File tree

3 files changed

+12
-46
lines changed

3 files changed

+12
-46
lines changed

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch-flower.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ static int dpaa2_switch_flower_parse_key(struct flow_cls_offload *cls,
111111
return 0;
112112
}
113113

114-
static int dpaa2_switch_acl_entry_add(struct dpaa2_switch_acl_tbl *acl_tbl,
115-
struct dpaa2_switch_acl_entry *entry)
114+
int dpaa2_switch_acl_entry_add(struct dpaa2_switch_acl_tbl *acl_tbl,
115+
struct dpaa2_switch_acl_entry *entry)
116116
{
117117
struct dpsw_acl_entry_cfg *acl_entry_cfg = &entry->cfg;
118118
struct ethsw_core *ethsw = acl_tbl->ethsw;

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2942,54 +2942,17 @@ static int dpaa2_switch_init(struct fsl_mc_device *sw_dev)
29422942
static int dpaa2_switch_port_trap_mac_addr(struct ethsw_port_priv *port_priv,
29432943
const char *mac)
29442944
{
2945-
struct net_device *netdev = port_priv->netdev;
2946-
struct dpsw_acl_entry_cfg acl_entry_cfg;
2947-
struct dpsw_acl_fields *acl_h;
2948-
struct dpsw_acl_fields *acl_m;
2949-
struct dpsw_acl_key acl_key;
2950-
struct device *dev;
2951-
u8 *cmd_buff;
2952-
int err;
2953-
2954-
dev = port_priv->netdev->dev.parent;
2955-
acl_h = &acl_key.match;
2956-
acl_m = &acl_key.mask;
2957-
2958-
memset(&acl_entry_cfg, 0, sizeof(acl_entry_cfg));
2959-
memset(&acl_key, 0, sizeof(acl_key));
2945+
struct dpaa2_switch_acl_entry acl_entry = {0};
29602946

29612947
/* Match on the destination MAC address */
2962-
ether_addr_copy(acl_h->l2_dest_mac, mac);
2963-
eth_broadcast_addr(acl_m->l2_dest_mac);
2964-
2965-
cmd_buff = kzalloc(DPAA2_ETHSW_PORT_ACL_CMD_BUF_SIZE, GFP_KERNEL);
2966-
if (!cmd_buff)
2967-
return -ENOMEM;
2968-
dpsw_acl_prepare_entry_cfg(&acl_key, cmd_buff);
2948+
ether_addr_copy(acl_entry.key.match.l2_dest_mac, mac);
2949+
eth_broadcast_addr(acl_entry.key.mask.l2_dest_mac);
29692950

2970-
memset(&acl_entry_cfg, 0, sizeof(acl_entry_cfg));
2971-
acl_entry_cfg.precedence = 0;
2972-
acl_entry_cfg.result.action = DPSW_ACL_ACTION_REDIRECT_TO_CTRL_IF;
2973-
acl_entry_cfg.key_iova = dma_map_single(dev, cmd_buff,
2974-
DPAA2_ETHSW_PORT_ACL_CMD_BUF_SIZE,
2975-
DMA_TO_DEVICE);
2976-
if (unlikely(dma_mapping_error(dev, acl_entry_cfg.key_iova))) {
2977-
netdev_err(netdev, "DMA mapping failed\n");
2978-
return -EFAULT;
2979-
}
2951+
/* Trap to CPU */
2952+
acl_entry.cfg.precedence = 0;
2953+
acl_entry.cfg.result.action = DPSW_ACL_ACTION_REDIRECT_TO_CTRL_IF;
29802954

2981-
err = dpsw_acl_add_entry(port_priv->ethsw_data->mc_io, 0,
2982-
port_priv->ethsw_data->dpsw_handle,
2983-
port_priv->acl_tbl->id, &acl_entry_cfg);
2984-
2985-
dma_unmap_single(dev, acl_entry_cfg.key_iova, sizeof(cmd_buff),
2986-
DMA_TO_DEVICE);
2987-
if (err) {
2988-
netdev_err(netdev, "dpsw_acl_add_entry() failed %d\n", err);
2989-
return err;
2990-
}
2991-
2992-
return 0;
2955+
return dpaa2_switch_acl_entry_add(port_priv->acl_tbl, &acl_entry);
29932956
}
29942957

29952958
static int dpaa2_switch_port_init(struct ethsw_port_priv *port_priv, u16 port)

drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,7 @@ int dpaa2_switch_cls_matchall_replace(struct dpaa2_switch_acl_tbl *acl_tbl,
240240

241241
int dpaa2_switch_cls_matchall_destroy(struct dpaa2_switch_acl_tbl *acl_tbl,
242242
struct tc_cls_matchall_offload *cls);
243+
244+
int dpaa2_switch_acl_entry_add(struct dpaa2_switch_acl_tbl *acl_tbl,
245+
struct dpaa2_switch_acl_entry *entry);
243246
#endif /* __ETHSW_H */

0 commit comments

Comments
 (0)