Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: tag_gswip: use the dsa_xmit_port_mask() helper

The "gswip" tagging protocol populates a bit mask for the TX ports, so
we can use dsa_xmit_port_mask() to centralize the decision of how to set
that field.

Cc: Hauke Mehrtens <hauke@hauke-m.de>
Cc: Daniel Golle <daniel@makrotopia.org>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/20251127120902.292555-4-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Vladimir Oltean and committed by
Jakub Kicinski
e094428f 621d06a4

+2 -4
+2 -4
net/dsa/tag_gswip.c
··· 48 48 49 49 /* Byte 3 */ 50 50 #define GSWIP_TX_DPID_EN BIT(0) 51 - #define GSWIP_TX_PORT_MAP_SHIFT 1 52 - #define GSWIP_TX_PORT_MAP_MASK GENMASK(6, 1) 51 + #define GSWIP_TX_PORT_MAP GENMASK(6, 1) 53 52 54 53 #define GSWIP_RX_HEADER_LEN 8 55 54 ··· 60 61 static struct sk_buff *gswip_tag_xmit(struct sk_buff *skb, 61 62 struct net_device *dev) 62 63 { 63 - struct dsa_port *dp = dsa_user_to_port(dev); 64 64 u8 *gswip_tag; 65 65 66 66 skb_push(skb, GSWIP_TX_HEADER_LEN); ··· 68 70 gswip_tag[0] = GSWIP_TX_SLPID_CPU; 69 71 gswip_tag[1] = GSWIP_TX_DPID_ELAN; 70 72 gswip_tag[2] = GSWIP_TX_PORT_MAP_EN | GSWIP_TX_PORT_MAP_SEL; 71 - gswip_tag[3] = BIT(dp->index + GSWIP_TX_PORT_MAP_SHIFT) & GSWIP_TX_PORT_MAP_MASK; 73 + gswip_tag[3] = FIELD_PREP(GSWIP_TX_PORT_MAP, dsa_xmit_port_mask(skb, dev)); 72 74 gswip_tag[3] |= GSWIP_TX_DPID_EN; 73 75 74 76 return skb;