linux/drivers/net/ethernet/ti
MD Danish Anwar 147792c395 net: ti: icssg-prueth: Fix ping failure after offload mode setup when link speed is not 1G
When both eth interfaces with links up are added to a bridge or hsr
interface, ping fails if the link speed is not 1Gbps (e.g., 100Mbps).

The issue is seen because when switching to offload (bridge/hsr) mode,
prueth_emac_restart() restarts the firmware and clears DRAM with
memset_io(), setting all memory to 0. This includes PORT_LINK_SPEED_OFFSET
which firmware reads for link speed. The value 0 corresponds to
FW_LINK_SPEED_1G (0x00), so for 1Gbps links the default value is correct
and ping works. For 100Mbps links, the firmware needs FW_LINK_SPEED_100M
(0x01) but gets 0 instead, causing ping to fail. The function
emac_adjust_link() is called to reconfigure, but it detects no state change
(emac->link is still 1, speed/duplex match PHY) so new_state remains false
and icssg_config_set_speed() is never called to correct the firmware speed
value.

The fix resets emac->link to 0 before calling emac_adjust_link() in
prueth_emac_common_start(). This forces new_state=true, ensuring
icssg_config_set_speed() is called to write the correct speed value to
firmware memory.

Fixes: 06feac1540 ("net: ti: icssg-prueth: Fix emac link speed handling")
Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
Link: https://patch.msgid.link/20260226102356.2141871-1-danishanwar@ti.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-02-28 13:41:35 -08:00
..
icssg net: ti: icssg-prueth: Fix ping failure after offload mode setup when link speed is not 1G 2026-02-28 13:41:35 -08:00
icssm Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
am65-cpsw-ethtool.c net: ethernet: ti: am65-cpsw: Discard pm_runtime_put() return value 2026-01-08 08:15:03 -08:00
am65-cpsw-nuss.c net: ethernet: ti: am65-cpsw-nuss/cpsw-ale: Fix multicast entry handling in ALE table 2026-02-26 19:43:54 -08:00
am65-cpsw-nuss.h net: ethernet: ti am65_cpsw: Drop separate TX completion functions 2025-02-19 11:52:44 +00:00
am65-cpsw-qos.c net: ethernet: ti: am65-cpsw-qos: fix IET verify retry mechanism 2025-11-10 18:00:40 -08:00
am65-cpsw-qos.h net: ethernet: ti: am65-cpsw-qos: Add Frame Preemption MAC Merge support 2023-12-23 01:01:19 +00:00
am65-cpsw-switchdev.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
am65-cpsw-switchdev.h
am65-cpts.c net: ethernet: ti: am65-cpts: fix timestamp loss due to race conditions 2025-10-21 12:26:11 +02:00
am65-cpts.h net: ethernet: ti: am65-cpsw/ethtool: Enable RX HW timestamp only for PTP packets 2024-04-23 12:07:24 +02:00
cpsw-common.c net: fill in MODULE_DESCRIPTION()s for cpsw-common 2024-01-29 12:12:51 +00:00
cpsw-phy-sel.c net: Explicitly include correct DT includes 2023-07-27 20:33:16 -07:00
cpsw.c net: cpsw: Execute ndo_set_rx_mode callback in a work queue 2026-02-03 19:45:52 -08:00
cpsw.h
cpsw_ale.c net: ethernet: ti: am65-cpsw-nuss/cpsw-ale: Fix multicast entry handling in ALE table 2026-02-26 19:43:54 -08:00
cpsw_ale.h net: ethernet: ti: cpsw_ale: Fix warning on some platforms 2024-10-01 11:34:41 +02:00
cpsw_ethtool.c net: ethernet: ti: am65-cpsw: Discard pm_runtime_put() return value 2026-01-08 08:15:03 -08:00
cpsw_new.c net: cpsw_new: Fix potential unregister of netdev that has not been registered yet 2026-02-05 18:51:20 -08:00
cpsw_priv.c net: cpsw: isolate cpsw_ndo_ioctl() to just the old driver 2025-05-14 19:41:46 -07:00
cpsw_priv.h net: cpsw_new: Execute ndo_set_rx_mode callback in a work queue 2026-02-03 19:45:52 -08:00
cpsw_sl.c
cpsw_sl.h
cpsw_switchdev.c treewide: Replace kmalloc with kmalloc_obj for non-scalar types 2026-02-21 01:02:28 -08:00
cpsw_switchdev.h
cpts.c time/timecounter: Fix the lie that struct cyclecounter is const 2025-07-01 15:38:25 +02:00
cpts.h
davinci_cpdma.c
davinci_cpdma.h
davinci_emac.c net: ethernet: Switch back to struct platform_driver::remove() 2024-10-04 16:39:56 -07:00
davinci_mdio.c net: davinci_mdio: use new iterator mdiobus_for_each_phy 2025-10-29 19:00:34 -07:00
k3-cppi-desc-pool.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
k3-cppi-desc-pool.h net: ethernet: ti: Add desc_infos member to struct k3_cppi_desc_pool 2024-04-15 13:18:18 +01:00
Kconfig net: ti: icssg-prueth: Add optional dependency on HSR 2026-02-11 12:04:15 +01:00
Makefile net: ti: icssm-prueth: Add switchdev support for icssm_prueth driver 2026-02-04 18:12:00 -08:00
netcp.h net: ethernet: ti: netcp: Use u64_stats_t with u64_stats_sync properly 2026-01-26 19:53:41 -08:00
netcp_core.c net: ethernet: ti: netcp: Use u64_stats_t with u64_stats_sync properly 2026-01-26 19:53:41 -08:00
netcp_ethss.c phy: rename hwtstamp callback to hwtstamp_set 2025-11-26 16:56:33 -08:00
netcp_sgmii.c
netcp_xgbepcsr.c
tlan.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
tlan.h