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

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'net-thunderbolt-various-improvements'

Mika Westerberg says:

====================
net: thunderbolt: Various improvements

This series improves the Thunderbolt networking driver so that it should
work with the bonding driver.

The discussion that started this patch series can be read below:

https://lore.kernel.org/netdev/CAFJzfF9N4Hak23sc-zh0jMobbkjK7rg4odhic1DQ1cC+=MoQoA@mail.gmail.com/

v2: https://lore.kernel.org/20260109122606.3586895-1-mika.westerberg@linux.intel.com
v1: https://lore.kernel.org/20251127131521.2580237-1-mika.westerberg@linux.intel.com
====================

Link: https://patch.msgid.link/20260115115646.328898-1-mika.westerberg@linux.intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+73 -3
+9
drivers/net/bonding/bond_3ad.c
··· 72 72 AD_LINK_SPEED_40000MBPS, 73 73 AD_LINK_SPEED_50000MBPS, 74 74 AD_LINK_SPEED_56000MBPS, 75 + AD_LINK_SPEED_80000MBPS, 75 76 AD_LINK_SPEED_100000MBPS, 76 77 AD_LINK_SPEED_200000MBPS, 77 78 AD_LINK_SPEED_400000MBPS, ··· 298 297 * %AD_LINK_SPEED_40000MBPS 299 298 * %AD_LINK_SPEED_50000MBPS 300 299 * %AD_LINK_SPEED_56000MBPS 300 + * %AD_LINK_SPEED_80000MBPS 301 301 * %AD_LINK_SPEED_100000MBPS 302 302 * %AD_LINK_SPEED_200000MBPS 303 303 * %AD_LINK_SPEED_400000MBPS ··· 365 363 366 364 case SPEED_56000: 367 365 speed = AD_LINK_SPEED_56000MBPS; 366 + break; 367 + 368 + case SPEED_80000: 369 + speed = AD_LINK_SPEED_80000MBPS; 368 370 break; 369 371 370 372 case SPEED_100000: ··· 821 815 break; 822 816 case AD_LINK_SPEED_56000MBPS: 823 817 bandwidth = nports * 56000; 818 + break; 819 + case AD_LINK_SPEED_80000MBPS: 820 + bandwidth = nports * 80000; 824 821 break; 825 822 case AD_LINK_SPEED_100000MBPS: 826 823 bandwidth = nports * 100000;
+1
drivers/net/phy/phy-caps.h
··· 25 25 LINK_CAPA_40000FD, 26 26 LINK_CAPA_50000FD, 27 27 LINK_CAPA_56000FD, 28 + LINK_CAPA_80000FD, 28 29 LINK_CAPA_100000FD, 29 30 LINK_CAPA_200000FD, 30 31 LINK_CAPA_400000FD,
+2
drivers/net/phy/phy-core.c
··· 48 48 return "50Gbps"; 49 49 case SPEED_56000: 50 50 return "56Gbps"; 51 + case SPEED_80000: 52 + return "80Gbps"; 51 53 case SPEED_100000: 52 54 return "100Gbps"; 53 55 case SPEED_200000:
+2
drivers/net/phy/phy_caps.c
··· 21 21 { SPEED_40000, DUPLEX_FULL, {0} }, /* LINK_CAPA_40000FD */ 22 22 { SPEED_50000, DUPLEX_FULL, {0} }, /* LINK_CAPA_50000FD */ 23 23 { SPEED_56000, DUPLEX_FULL, {0} }, /* LINK_CAPA_56000FD */ 24 + { SPEED_80000, DUPLEX_FULL, {0} }, /* LINK_CAPA_80000FD */ 24 25 { SPEED_100000, DUPLEX_FULL, {0} }, /* LINK_CAPA_100000FD */ 25 26 { SPEED_200000, DUPLEX_FULL, {0} }, /* LINK_CAPA_200000FD */ 26 27 { SPEED_400000, DUPLEX_FULL, {0} }, /* LINK_CAPA_400000FD */ ··· 50 49 case SPEED_40000: return LINK_CAPA_40000FD; 51 50 case SPEED_50000: return LINK_CAPA_50000FD; 52 51 case SPEED_56000: return LINK_CAPA_56000FD; 52 + case SPEED_80000: return LINK_CAPA_80000FD; 53 53 case SPEED_100000: return LINK_CAPA_100000FD; 54 54 case SPEED_200000: return LINK_CAPA_200000FD; 55 55 case SPEED_400000: return LINK_CAPA_400000FD;
+1
drivers/net/phy/phylink.c
··· 311 311 { MAC_400000FD, SPEED_400000, DUPLEX_FULL, BIT(LINK_CAPA_400000FD) }, 312 312 { MAC_200000FD, SPEED_200000, DUPLEX_FULL, BIT(LINK_CAPA_200000FD) }, 313 313 { MAC_100000FD, SPEED_100000, DUPLEX_FULL, BIT(LINK_CAPA_100000FD) }, 314 + { MAC_80000FD, SPEED_80000, DUPLEX_FULL, BIT(LINK_CAPA_80000FD) }, 314 315 { MAC_56000FD, SPEED_56000, DUPLEX_FULL, BIT(LINK_CAPA_56000FD) }, 315 316 { MAC_50000FD, SPEED_50000, DUPLEX_FULL, BIT(LINK_CAPA_50000FD) }, 316 317 { MAC_40000FD, SPEED_40000, DUPLEX_FULL, BIT(LINK_CAPA_40000FD) },
+53
drivers/net/thunderbolt/main.c
··· 10 10 */ 11 11 12 12 #include <linux/atomic.h> 13 + #include <linux/ethtool.h> 13 14 #include <linux/highmem.h> 14 15 #include <linux/if_vlan.h> 15 16 #include <linux/jhash.h> ··· 1262 1261 .ndo_open = tbnet_open, 1263 1262 .ndo_stop = tbnet_stop, 1264 1263 .ndo_start_xmit = tbnet_start_xmit, 1264 + .ndo_set_mac_address = eth_mac_addr, 1265 1265 .ndo_get_stats64 = tbnet_get_stats64, 1266 + }; 1267 + 1268 + static int tbnet_get_link_ksettings(struct net_device *dev, 1269 + struct ethtool_link_ksettings *cmd) 1270 + { 1271 + const struct tbnet *net = netdev_priv(dev); 1272 + const struct tb_xdomain *xd = net->xd; 1273 + int speed; 1274 + 1275 + ethtool_link_ksettings_zero_link_mode(cmd, supported); 1276 + ethtool_link_ksettings_zero_link_mode(cmd, advertising); 1277 + 1278 + /* Figure out the current link speed and width */ 1279 + switch (xd->link_speed) { 1280 + case 40: 1281 + speed = SPEED_80000; 1282 + break; 1283 + 1284 + case 20: 1285 + if (xd->link_width == 2) 1286 + speed = SPEED_40000; 1287 + else 1288 + speed = SPEED_20000; 1289 + break; 1290 + 1291 + case 10: 1292 + if (xd->link_width == 2) { 1293 + speed = SPEED_20000; 1294 + break; 1295 + } 1296 + fallthrough; 1297 + 1298 + default: 1299 + speed = SPEED_10000; 1300 + break; 1301 + } 1302 + 1303 + cmd->base.speed = speed; 1304 + cmd->base.duplex = DUPLEX_FULL; 1305 + cmd->base.autoneg = AUTONEG_DISABLE; 1306 + cmd->base.port = PORT_OTHER; 1307 + 1308 + return 0; 1309 + } 1310 + 1311 + static const struct ethtool_ops tbnet_ethtool_ops = { 1312 + .get_link_ksettings = tbnet_get_link_ksettings, 1266 1313 }; 1267 1314 1268 1315 static void tbnet_generate_mac(struct net_device *dev) ··· 1330 1281 hash = jhash2((u32 *)xd->local_uuid, 4, hash); 1331 1282 addr[5] = hash & 0xff; 1332 1283 eth_hw_addr_set(dev, addr); 1284 + 1285 + /* Allow changing it if needed */ 1286 + dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; 1333 1287 } 1334 1288 1335 1289 static int tbnet_probe(struct tb_service *svc, const struct tb_service_id *id) ··· 1363 1311 1364 1312 strcpy(dev->name, "thunderbolt%d"); 1365 1313 dev->netdev_ops = &tbnet_netdev_ops; 1314 + dev->ethtool_ops = &tbnet_ethtool_ops; 1366 1315 1367 1316 /* ThunderboltIP takes advantage of TSO packets but instead of 1368 1317 * segmenting them we just split the packet into Thunderbolt
+4 -3
include/linux/phylink.h
··· 90 90 MAC_40000FD = BIT(13), 91 91 MAC_50000FD = BIT(14), 92 92 MAC_56000FD = BIT(15), 93 - MAC_100000FD = BIT(16), 94 - MAC_200000FD = BIT(17), 95 - MAC_400000FD = BIT(18), 93 + MAC_80000FD = BIT(16), 94 + MAC_100000FD = BIT(17), 95 + MAC_200000FD = BIT(18), 96 + MAC_400000FD = BIT(19), 96 97 }; 97 98 98 99 static inline bool phylink_autoneg_inband(unsigned int mode)
+1
include/uapi/linux/ethtool.h
··· 2203 2203 #define SPEED_40000 40000 2204 2204 #define SPEED_50000 50000 2205 2205 #define SPEED_56000 56000 2206 + #define SPEED_80000 80000 2206 2207 #define SPEED_100000 100000 2207 2208 #define SPEED_200000 200000 2208 2209 #define SPEED_400000 400000