mirror of
				https://github.com/Ysurac/openmptcprouter.git
				synced 2025-03-09 15:40:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 9daea9b71d060d93d7394ac465b2e5ee0b7e7bca Mon Sep 17 00:00:00 2001
 | 
						|
From: Alexander Couzens <lynxis@fe80.eu>
 | 
						|
Date: Mon, 15 Aug 2022 16:02:01 +0200
 | 
						|
Subject: [PATCH 06/10] net: mtk_sgmii: ensure the SGMII PHY is powered down on
 | 
						|
 configuration
 | 
						|
 | 
						|
The code expect the PHY to be in power down (which is only true after reset).
 | 
						|
Allow the changes of SGMII parameters more than once.
 | 
						|
---
 | 
						|
 drivers/net/ethernet/mediatek/mtk_sgmii.c | 16 +++++++++++++++-
 | 
						|
 1 file changed, 15 insertions(+), 1 deletion(-)
 | 
						|
 | 
						|
--- a/drivers/net/ethernet/mediatek/mtk_sgmii.c
 | 
						|
+++ b/drivers/net/ethernet/mediatek/mtk_sgmii.c
 | 
						|
@@ -7,6 +7,7 @@
 | 
						|
  *
 | 
						|
  */
 | 
						|
 
 | 
						|
+#include <linux/delay.h>
 | 
						|
 #include <linux/mfd/syscon.h>
 | 
						|
 #include <linux/of.h>
 | 
						|
 #include <linux/phylink.h>
 | 
						|
@@ -24,6 +25,9 @@ static int mtk_pcs_setup_mode_an(struct
 | 
						|
 {
 | 
						|
 	unsigned int val;
 | 
						|
 
 | 
						|
+	/* PHYA power down */
 | 
						|
+	regmap_write(mpcs->regmap, SGMSYS_QPHY_PWR_STATE_CTRL, SGMII_PHYA_PWD);
 | 
						|
+
 | 
						|
 	/* Setup the link timer and QPHY power up inside SGMIISYS */
 | 
						|
 	regmap_write(mpcs->regmap, SGMSYS_PCS_LINK_TIMER,
 | 
						|
 		     SGMII_LINK_TIMER_DEFAULT);
 | 
						|
@@ -36,6 +40,10 @@ static int mtk_pcs_setup_mode_an(struct
 | 
						|
 	val |= SGMII_AN_RESTART;
 | 
						|
 	regmap_write(mpcs->regmap, SGMSYS_PCS_CONTROL_1, val);
 | 
						|
 
 | 
						|
+	/* Release PHYA power down state
 | 
						|
+	 * unknown how much the QPHY needs but it is racy without a sleep
 | 
						|
+	 */
 | 
						|
+	usleep_range(50, 100);
 | 
						|
 	regmap_write(mpcs->regmap, SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 | 
						|
 
 | 
						|
 	return 0;
 | 
						|
@@ -50,6 +58,9 @@ static int mtk_pcs_setup_mode_force(stru
 | 
						|
 {
 | 
						|
 	unsigned int val;
 | 
						|
 
 | 
						|
+	/* PHYA power down */
 | 
						|
+	regmap_write(mpcs->regmap, SGMSYS_QPHY_PWR_STATE_CTRL, SGMII_PHYA_PWD);
 | 
						|
+
 | 
						|
 	regmap_read(mpcs->regmap, mpcs->ana_rgc3, &val);
 | 
						|
 	val &= ~RG_PHY_SPEED_MASK;
 | 
						|
 	if (interface == PHY_INTERFACE_MODE_2500BASEX)
 | 
						|
@@ -67,7 +78,10 @@ static int mtk_pcs_setup_mode_force(stru
 | 
						|
 	val |= SGMII_SPEED_1000;
 | 
						|
 	regmap_write(mpcs->regmap, SGMSYS_SGMII_MODE, val);
 | 
						|
 
 | 
						|
-	/* Release PHYA power down state */
 | 
						|
+	/* Release PHYA power down state
 | 
						|
+	 * unknown how much the QPHY needs but it is racy without a sleep
 | 
						|
+	 */
 | 
						|
+	usleep_range(50, 100);
 | 
						|
 	regmap_write(mpcs->regmap, SGMSYS_QPHY_PWR_STATE_CTRL, 0);
 | 
						|
 
 | 
						|
 	return 0;
 |