 d888ef5668
			
		
	
	d888ef5668
	
	
	
		
			
			Backport workaround for QCA8327 PHY resume, which does not properly support genphy_suspend/resume. Also add DAC amplitude fix for the QCA8327 PHY, set port to preferred master and add proper names to debug regs. Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> Signed-off-by: Matthew Hagan <mnhagan88@gmail.com>
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 97ca310aa18a93329ef5cd68c20de89761962f45 Mon Sep 17 00:00:00 2001
 | |
| From: David Bauer <mail@david-bauer.net>
 | |
| Date: Sun, 13 Jun 2021 12:19:36 +0200
 | |
| Subject: [PATCH] net: phy: at803x: fix feature detection
 | |
| 
 | |
| AR8031/AR8033 have different status registers for copper
 | |
| and fiber operation. However, the extended status register
 | |
| is the same for both operation modes.
 | |
| 
 | |
| As a result of that, ESTATUS_1000_XFULL is set to 1 even when
 | |
| operating in copper TP mode.
 | |
| 
 | |
| Remove this mode from the supported link modes, as this driver
 | |
| currently only supports copper operation.
 | |
| 
 | |
| Signed-off-by: David Bauer <mail@david-bauer.net>
 | |
| ---
 | |
|  drivers/net/phy/at803x.c | 30 +++++++++++++++++++++++++++++-
 | |
|  1 file changed, 29 insertions(+), 1 deletion(-)
 | |
| 
 | |
| --- a/drivers/net/phy/at803x.c
 | |
| +++ b/drivers/net/phy/at803x.c
 | |
| @@ -1032,6 +1032,34 @@ static int at803x_set_tunable(struct phy
 | |
|  	}
 | |
|  }
 | |
|  
 | |
| +static int at803x_get_features(struct phy_device *phydev)
 | |
| +{
 | |
| +	int err;
 | |
| +
 | |
| +	err = genphy_read_abilities(phydev);
 | |
| +	if (err)
 | |
| +		return err;
 | |
| +
 | |
| +	if (!at803x_match_phy_id(phydev, ATH8031_PHY_ID))
 | |
| +		return 0;
 | |
| +
 | |
| +	/* AR8031/AR8033 have different status registers
 | |
| +	 * for copper and fiber operation. However, the
 | |
| +	 * extended status register is the same for both
 | |
| +	 * operation modes.
 | |
| +	 *
 | |
| +	 * As a result of that, ESTATUS_1000_XFULL is set
 | |
| +	 * to 1 even when operating in copper TP mode.
 | |
| +	 *
 | |
| +	 * Remove this mode from the supported link modes,
 | |
| +	 * as this driver currently only supports copper
 | |
| +	 * operation.
 | |
| +	 */
 | |
| +	linkmode_clear_bit(ETHTOOL_LINK_MODE_1000baseX_Full_BIT,
 | |
| +			   phydev->supported);
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static int at803x_cable_test_result_trans(u16 status)
 | |
|  {
 | |
|  	switch (FIELD_GET(AT803X_CDT_STATUS_STAT_MASK, status)) {
 | |
| @@ -1364,7 +1392,7 @@ static struct phy_driver at803x_driver[]
 | |
|  	.resume			= at803x_resume,
 | |
|  	.read_page		= at803x_read_page,
 | |
|  	.write_page		= at803x_write_page,
 | |
| -	/* PHY_GBIT_FEATURES */
 | |
| +	.get_features		= at803x_get_features,
 | |
|  	.read_status		= at803x_read_status,
 | |
|  	.aneg_done		= at803x_aneg_done,
 | |
|  	.ack_interrupt		= &at803x_ack_interrupt,
 |