[1/2] net: phy: DP83TC811: Add INT_STAT3

Message ID 20180627181618.23463-1-dmurphy@ti.com
State New
Headers show
Series
  • [1/2] net: phy: DP83TC811: Add INT_STAT3
Related show

Commit Message

Dan Murphy June 27, 2018, 6:16 p.m.
Add INT_STAT3 interrupt setting and clearing.

Also fixed writing to INT_STAT2 when disabling
the interrupts as there was a double write to
INT_STAT1.

Signed-off-by: Dan Murphy <dmurphy@ti.com>

---
 drivers/net/phy/dp83tc811.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

-- 
2.17.0.582.gccdcbd54c

Comments

Andrew Lunn June 28, 2018, 8:16 a.m. | #1
>  		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);

>  		if (err < 0)

>  			return err;

>  

> -		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);

> +		err = phy_write(phydev, MII_DP83811_INT_STAT2, 0);

> +		if (err < 0)

> +			return err;

> +

> +		err = phy_write(phydev, MII_DP83811_INT_STAT3, 0);

>  	}

>  


Hi Dan

This seems like a bug fix, and so should be in a patch of its own, for
net, not net-next.

     Andrew
Dan Murphy June 28, 2018, 11:54 a.m. | #2
Andrew

On 06/28/2018 03:16 AM, Andrew Lunn wrote:
>>  		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);

>>  		if (err < 0)

>>  			return err;

>>  

>> -		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);

>> +		err = phy_write(phydev, MII_DP83811_INT_STAT2, 0);

>> +		if (err < 0)

>> +			return err;

>> +

>> +		err = phy_write(phydev, MII_DP83811_INT_STAT3, 0);

>>  	}

>>  

> 

> Hi Dan

> 

> This seems like a bug fix, and so should be in a patch of its own, for

> net, not net-next.

> 


Yes I was debating whether to include this change in the patch or have it
stand alone for stable back port.

I will pull it out and cc stable

>      Andrew

> 



-- 
------------------
Dan Murphy
Andrew Lunn June 28, 2018, 12:04 p.m. | #3
> Yes I was debating whether to include this change in the patch or have it

> stand alone for stable back port.

> 

> I will pull it out and cc stable


No need to CC stable. Base the patch on daveM net branch, and David
will do the rest.

You probably want to wait a week or two before sending the other
patches for net-next. You want net to be merged into net-next, in
order to avoid conflicts.

	Andrew

Patch

diff --git a/drivers/net/phy/dp83tc811.c b/drivers/net/phy/dp83tc811.c
index 081d99aa3985..f8653f5d8789 100644
--- a/drivers/net/phy/dp83tc811.c
+++ b/drivers/net/phy/dp83tc811.c
@@ -21,6 +21,7 @@ 
 #define MII_DP83811_SGMII_CTRL	0x09
 #define MII_DP83811_INT_STAT1	0x12
 #define MII_DP83811_INT_STAT2	0x13
+#define MII_DP83811_INT_STAT3	0x18
 #define MII_DP83811_RESET_CTRL	0x1f
 
 #define DP83811_HW_RESET	BIT(15)
@@ -44,6 +45,11 @@ 
 #define DP83811_OVERVOLTAGE_INT_EN	BIT(6)
 #define DP83811_UNDERVOLTAGE_INT_EN	BIT(7)
 
+/* INT_STAT3 bits */
+#define DP83811_LPS_INT_EN	BIT(0)
+#define DP83811_NO_FRAME_INT_EN	BIT(3)
+#define DP83811_POR_DONE_INT_EN	BIT(4)
+
 #define MII_DP83811_RXSOP1	0x04a5
 #define MII_DP83811_RXSOP2	0x04a6
 #define MII_DP83811_RXSOP3	0x04a7
@@ -81,6 +87,10 @@  static int dp83811_ack_interrupt(struct phy_device *phydev)
 	if (err < 0)
 		return err;
 
+	err = phy_read(phydev, MII_DP83811_INT_STAT3);
+	if (err < 0)
+		return err;
+
 	return 0;
 }
 
@@ -216,13 +226,29 @@  static int dp83811_config_intr(struct phy_device *phydev)
 				DP83811_UNDERVOLTAGE_INT_EN);
 
 		err = phy_write(phydev, MII_DP83811_INT_STAT2, misr_status);
+		if (err < 0)
+			return err;
+
+		misr_status = phy_read(phydev, MII_DP83811_INT_STAT3);
+		if (misr_status < 0)
+			return misr_status;
+
+		misr_status |= (DP83811_LPS_INT_EN |
+				DP83811_NO_FRAME_INT_EN |
+				DP83811_POR_DONE_INT_EN);
+
+		err = phy_write(phydev, MII_DP83811_INT_STAT3, misr_status);
 
 	} else {
 		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);
 		if (err < 0)
 			return err;
 
-		err = phy_write(phydev, MII_DP83811_INT_STAT1, 0);
+		err = phy_write(phydev, MII_DP83811_INT_STAT2, 0);
+		if (err < 0)
+			return err;
+
+		err = phy_write(phydev, MII_DP83811_INT_STAT3, 0);
 	}
 
 	return err;