mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
Merge branch 'fix-tcp-retransmissions-on-ns-nsp-socs'
Florian Fainelli says: ==================== Fix TCP retransmissions on NS/NSP SoCs On Northstar and Northstar Plus SoCs we would see about 1000 TCP retransmissions per second due to a rate mismatch between bgmac and b53, make sure that we run at the same speed on both side to avoid dropping packets on the floor. This issue was found during testing on a Northstar Plus reference board (BCM958625HR) while running iperf3 to a test machine and noticing retranmsisions: Connecting to host 192.168.3.1, port 5201 [ 4] local 192.168.3.204 port 49856 connected to 192.168.3.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 4] 0.00-1.00 sec 111 MBytes 933 Mbits/sec 915 99.0 KBytes [ 4] 1.00-2.00 sec 111 MBytes 928 Mbits/sec 909 109 KBytes [ 4] 2.00-3.00 sec 110 MBytes 925 Mbits/sec 1097 99.0 KBytes [ 4] 3.00-4.00 sec 111 MBytes 928 Mbits/sec 814 58.0 KBytes [ 4] 4.00-5.00 sec 111 MBytes 930 Mbits/sec 1187 109 KBytes [ 4] 5.00-6.00 sec 110 MBytes 923 Mbits/sec 893 72.1 KBytes [ 4] 6.00-7.00 sec 111 MBytes 929 Mbits/sec 843 67.9 KBytes [ 4] 7.00-8.00 sec 111 MBytes 928 Mbits/sec 920 79.2 KBytes [ 4] 8.00-9.00 sec 111 MBytes 929 Mbits/sec 1109 66.5 KBytes [ 4] 9.00-10.00 sec 111 MBytes 930 Mbits/sec 1055 63.6 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 4] 0.00-10.00 sec 1.09 GBytes 933 Mbits/sec 9742 sender [ 4] 0.00-10.01 sec 1.09 GBytes 933 Mbits/sec receiver ==================== Link: https://patch.msgid.link/20261029211540.4123250-1-florian.fainelli@broadcom.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
6baae996ec
|
|
@ -1720,9 +1720,15 @@ static void b53_phylink_mac_link_up(struct phylink_config *config,
|
|||
}
|
||||
|
||||
if (mode == MLO_AN_FIXED) {
|
||||
/* Force flow control on BCM5301x's CPU port */
|
||||
if (is5301x(dev) && dsa_is_cpu_port(ds, port))
|
||||
tx_pause = rx_pause = true;
|
||||
/* Force flow control and 2Gbits/sec on BCM5301x and NSP CPU
|
||||
* ports
|
||||
*/
|
||||
if ((is5301x(dev) || dev->chip_id == BCM58XX_DEVICE_ID) &&
|
||||
dsa_is_cpu_port(ds, port)) {
|
||||
tx_pause = true;
|
||||
rx_pause = true;
|
||||
speed = 2000;
|
||||
}
|
||||
|
||||
b53_force_port_config(dev, port, speed, duplex,
|
||||
tx_pause, rx_pause);
|
||||
|
|
|
|||
|
|
@ -243,7 +243,8 @@ static int bgmac_probe(struct platform_device *pdev)
|
|||
bgmac->phy_connect = platform_phy_connect;
|
||||
} else {
|
||||
bgmac->phy_connect = bgmac_phy_connect_direct;
|
||||
bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
|
||||
if (of_machine_is_compatible("brcm,nsp"))
|
||||
bgmac->feature_flags |= BGMAC_FEAT_FORCE_SPEED_2500;
|
||||
}
|
||||
|
||||
return bgmac_enet_probe(bgmac);
|
||||
|
|
|
|||
|
|
@ -1430,11 +1430,15 @@ void bgmac_adjust_link(struct net_device *net_dev)
|
|||
{
|
||||
struct bgmac *bgmac = netdev_priv(net_dev);
|
||||
struct phy_device *phy_dev = net_dev->phydev;
|
||||
int speed = phy_dev->speed;
|
||||
bool update = false;
|
||||
|
||||
if (bgmac->feature_flags & BGMAC_FEAT_FORCE_SPEED_2500)
|
||||
speed = SPEED_2500;
|
||||
|
||||
if (phy_dev->link) {
|
||||
if (phy_dev->speed != bgmac->mac_speed) {
|
||||
bgmac->mac_speed = phy_dev->speed;
|
||||
if (speed != bgmac->mac_speed) {
|
||||
bgmac->mac_speed = speed;
|
||||
update = true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user