All Projects

IDCategoryTask TypePrioritySeveritySummaryReported InStatus
 3562 KernelBug ReportVery LowMedium no packet flow on AR 8035 based ports (LAN3, LAN4) of l ...TrunkClosed Task Description

The device is fritzbox 7362sl.
It works until kernel 4.19.
The explicit calls to at803x_disable_rx_delay(phydev) and at803x_disable_tx_delay(phydev) seem to clobber the AR8035 registers 0 and 5 with values that make the two LAN ports not transporting anything anymore. Plugging and unplugging cables is still recognized.

I have used a small patch to revert the at803x_config_init function to how it was on kernel 4.19 and the two ports work since then:

 --- a/drivers/net/phy/at803x.c
 +++ b/drivers/net/phy/at803x.c
 @@ -289,20 +289,20 @@ static int at803x_config_init(struct phy_
  	 */

  	if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
 -	    phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID)
 +	    phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) {
  		ret = at803x_enable_rx_delay(phydev);
 -	else
 -		ret = at803x_disable_rx_delay(phydev);
 -	if (ret < 0)
 -		return ret;
 +		if (ret < 0)
 +			return ret;
 +	}

  	if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
 -	    phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
 +	    phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) {
  		ret = at803x_enable_tx_delay(phydev);
 -	else
 -		ret = at803x_disable_tx_delay(phydev);
 +		if (ret < 0)
 +			return ret;
 +	}

 -	return ret;
 +	return 0;
  }

  static int at803x_ack_interrupt(struct phy_device *phydev)

But, maybe the explicit call to at803x_disable_??_delay was added for some other device to work. I have experimented with pll-data first, but unlike newer kernels, like 5.10 this is nowhere referenced in the driver for the 5.4 kernel.

Actually, removing the disable calls and using just RGMII is effectivly similar to not touching the AT8035 registers 0 and 5 at all.

Showing tasks 1 - 1 of 1 Page 1 of 1

Available keyboard shortcuts

Tasklist

Task Details

Task Editing