Commit 68ff5e14 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by David S. Miller

net: phy: tja11xx: add SQI support

This patch implements reading of the Signal Quality Index for better
cable/link troubleshooting.
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 80660219
...@@ -53,6 +53,8 @@ ...@@ -53,6 +53,8 @@
#define MII_COMMSTAT 23 #define MII_COMMSTAT 23
#define MII_COMMSTAT_LINK_UP BIT(15) #define MII_COMMSTAT_LINK_UP BIT(15)
#define MII_COMMSTAT_SQI_STATE GENMASK(7, 5)
#define MII_COMMSTAT_SQI_MAX 7
#define MII_GENSTAT 24 #define MII_GENSTAT 24
#define MII_GENSTAT_PLL_LOCKED BIT(14) #define MII_GENSTAT_PLL_LOCKED BIT(14)
...@@ -329,6 +331,22 @@ static int tja11xx_read_status(struct phy_device *phydev) ...@@ -329,6 +331,22 @@ static int tja11xx_read_status(struct phy_device *phydev)
return 0; return 0;
} }
static int tja11xx_get_sqi(struct phy_device *phydev)
{
int ret;
ret = phy_read(phydev, MII_COMMSTAT);
if (ret < 0)
return ret;
return FIELD_GET(MII_COMMSTAT_SQI_STATE, ret);
}
static int tja11xx_get_sqi_max(struct phy_device *phydev)
{
return MII_COMMSTAT_SQI_MAX;
}
static int tja11xx_get_sset_count(struct phy_device *phydev) static int tja11xx_get_sset_count(struct phy_device *phydev)
{ {
return ARRAY_SIZE(tja11xx_hw_stats); return ARRAY_SIZE(tja11xx_hw_stats);
...@@ -683,6 +701,8 @@ static struct phy_driver tja11xx_driver[] = { ...@@ -683,6 +701,8 @@ static struct phy_driver tja11xx_driver[] = {
.config_aneg = tja11xx_config_aneg, .config_aneg = tja11xx_config_aneg,
.config_init = tja11xx_config_init, .config_init = tja11xx_config_init,
.read_status = tja11xx_read_status, .read_status = tja11xx_read_status,
.get_sqi = tja11xx_get_sqi,
.get_sqi_max = tja11xx_get_sqi_max,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
.set_loopback = genphy_loopback, .set_loopback = genphy_loopback,
...@@ -699,6 +719,8 @@ static struct phy_driver tja11xx_driver[] = { ...@@ -699,6 +719,8 @@ static struct phy_driver tja11xx_driver[] = {
.config_aneg = tja11xx_config_aneg, .config_aneg = tja11xx_config_aneg,
.config_init = tja11xx_config_init, .config_init = tja11xx_config_init,
.read_status = tja11xx_read_status, .read_status = tja11xx_read_status,
.get_sqi = tja11xx_get_sqi,
.get_sqi_max = tja11xx_get_sqi_max,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
.set_loopback = genphy_loopback, .set_loopback = genphy_loopback,
...@@ -715,6 +737,8 @@ static struct phy_driver tja11xx_driver[] = { ...@@ -715,6 +737,8 @@ static struct phy_driver tja11xx_driver[] = {
.config_aneg = tja11xx_config_aneg, .config_aneg = tja11xx_config_aneg,
.config_init = tja11xx_config_init, .config_init = tja11xx_config_init,
.read_status = tja11xx_read_status, .read_status = tja11xx_read_status,
.get_sqi = tja11xx_get_sqi,
.get_sqi_max = tja11xx_get_sqi_max,
.match_phy_device = tja1102_p0_match_phy_device, .match_phy_device = tja1102_p0_match_phy_device,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
...@@ -736,6 +760,8 @@ static struct phy_driver tja11xx_driver[] = { ...@@ -736,6 +760,8 @@ static struct phy_driver tja11xx_driver[] = {
.config_aneg = tja11xx_config_aneg, .config_aneg = tja11xx_config_aneg,
.config_init = tja11xx_config_init, .config_init = tja11xx_config_init,
.read_status = tja11xx_read_status, .read_status = tja11xx_read_status,
.get_sqi = tja11xx_get_sqi,
.get_sqi_max = tja11xx_get_sqi_max,
.match_phy_device = tja1102_p1_match_phy_device, .match_phy_device = tja1102_p1_match_phy_device,
.suspend = genphy_suspend, .suspend = genphy_suspend,
.resume = genphy_resume, .resume = genphy_resume,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment