All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY
@ 2020-05-15 17:24 Kevin Lo
  2020-05-15 17:56 ` David Miller
  2020-05-15 21:31 ` Jakub Kicinski
  0 siblings, 2 replies; 4+ messages in thread
From: Kevin Lo @ 2020-05-15 17:24 UTC (permalink / raw
  To: netdev; +Cc: Florian Fainelli, Andrew Lunn, David S. Miller

The BCM54811 PHY shares many similarities with the already supported BCM54810
PHY but additionally requires some semi-unique configuration.

Signed-off-by: Kevin Lo <kevlo@kevlo.org>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c
index 97201d5cf007..f61cb3add479 100644
--- a/drivers/net/phy/broadcom.c
+++ b/drivers/net/phy/broadcom.c
@@ -195,7 +195,8 @@ static void bcm54xx_adjust_rxrefclk(struct phy_device *phydev)
 	if (BRCM_PHY_MODEL(phydev) != PHY_ID_BCM57780 &&
 	    BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610 &&
 	    BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610M &&
-	    BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54810)
+	    BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54810 &&
+	    BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54811)
 		return;
 
 	val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3);
@@ -214,8 +215,10 @@ static void bcm54xx_adjust_rxrefclk(struct phy_device *phydev)
 		clk125en = false;
 	} else {
 		if (phydev->dev_flags & PHY_BRCM_RX_REFCLK_UNUSED) {
-			/* Here, bit 0 _enables_ CLK125 when set */
-			val &= ~BCM54XX_SHD_SCR3_DEF_CLK125;
+			if (BRCM_PHY_MODEL(phydev) != PHY_ID_BCM54811) {
+				/* Here, bit 0 _enables_ CLK125 when set */
+				val &= ~BCM54XX_SHD_SCR3_DEF_CLK125;
+			}
 			clk125en = false;
 		}
 	}
@@ -225,8 +228,13 @@ static void bcm54xx_adjust_rxrefclk(struct phy_device *phydev)
 	else
 		val |= BCM54XX_SHD_SCR3_DLLAPD_DIS;
 
-	if (phydev->dev_flags & PHY_BRCM_DIS_TXCRXC_NOENRGY)
-		val |= BCM54XX_SHD_SCR3_TRDDAPD;
+	if (phydev->dev_flags & PHY_BRCM_DIS_TXCRXC_NOENRGY) {
+		if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810 ||
+		    BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54811)
+			val |= BCM54810_SHD_SCR3_TRDDAPD;
+		else
+			val |= BCM54XX_SHD_SCR3_TRDDAPD;
+	}
 
 	if (orig != val)
 		bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR3, val);
@@ -327,6 +335,32 @@ static int bcm54xx_resume(struct phy_device *phydev)
 	return bcm54xx_config_init(phydev);
 }
 
+static int bcm54811_config_init(struct phy_device *phydev)
+{
+	int err, reg;
+
+	/* Disable BroadR-Reach function. */
+	reg = bcm_phy_read_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL);
+	reg &= ~BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN;
+	err = bcm_phy_write_exp(phydev, BCM54810_EXP_BROADREACH_LRE_MISC_CTL,
+				reg);
+	if (err < 0)
+		return err;
+
+	err = bcm54xx_config_init(phydev);
+
+	/* Enable CLK125 MUX on LED4 if ref clock is enabled. */
+	if (!(phydev->dev_flags & PHY_BRCM_RX_REFCLK_UNUSED)) {
+		reg = bcm_phy_read_exp(phydev, BCM54612E_EXP_SPARE0);
+		err = bcm_phy_write_exp(phydev, BCM54612E_EXP_SPARE0,
+					BCM54612E_LED4_CLK125OUT_EN | reg);
+		if (err < 0)
+			return err; 
+        }
+
+	return err;
+}
+
 static int bcm5482_config_init(struct phy_device *phydev)
 {
 	int err, reg;
@@ -722,6 +756,17 @@ static struct phy_driver broadcom_drivers[] = {
 	.config_intr    = bcm_phy_config_intr,
 	.suspend	= genphy_suspend,
 	.resume		= bcm54xx_resume,
+}, {
+	.phy_id         = PHY_ID_BCM54811,
+	.phy_id_mask    = 0xfffffff0,
+	.name           = "Broadcom BCM54811",
+	/* PHY_GBIT_FEATURES */
+	.config_init    = bcm54811_config_init,
+	.config_aneg    = bcm5481_config_aneg,
+	.ack_interrupt  = bcm_phy_ack_intr,
+	.config_intr    = bcm_phy_config_intr,
+	.suspend	= genphy_suspend,
+	.resume		= bcm54xx_resume,
 }, {
 	.phy_id		= PHY_ID_BCM5482,
 	.phy_id_mask	= 0xfffffff0,
@@ -816,6 +861,7 @@ static struct mdio_device_id __maybe_unused broadcom_tbl[] = {
 	{ PHY_ID_BCM5464, 0xfffffff0 },
 	{ PHY_ID_BCM5481, 0xfffffff0 },
 	{ PHY_ID_BCM54810, 0xfffffff0 },
+	{ PHY_ID_BCM54811, 0xfffffff0 },
 	{ PHY_ID_BCM5482, 0xfffffff0 },
 	{ PHY_ID_BCM50610, 0xfffffff0 },
 	{ PHY_ID_BCM50610M, 0xfffffff0 },
diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h
index d41624db6de2..6ad4c000661a 100644
--- a/include/linux/brcmphy.h
+++ b/include/linux/brcmphy.h
@@ -17,6 +17,7 @@
 #define PHY_ID_BCM5395			0x0143bcf0
 #define PHY_ID_BCM53125			0x03625f20
 #define PHY_ID_BCM54810			0x03625d00
+#define PHY_ID_BCM54811			0x03625cc0
 #define PHY_ID_BCM5482			0x0143bcb0
 #define PHY_ID_BCM5411			0x00206070
 #define PHY_ID_BCM5421			0x002060e0
@@ -255,6 +256,7 @@
 #define BCM54810_EXP_BROADREACH_LRE_MISC_CTL_EN	(1 << 0)
 #define BCM54810_SHD_CLK_CTL			0x3
 #define BCM54810_SHD_CLK_CTL_GTXCLK_EN		(1 << 9)
+#define BCM54810_SHD_SCR3_TRDDAPD		0x0100
 
 /* BCM54612E Registers */
 #define BCM54612E_EXP_SPARE0		(MII_BCM54XX_EXP_SEL_ETC + 0x34)

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY
  2020-05-15 17:24 [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY Kevin Lo
@ 2020-05-15 17:56 ` David Miller
  2020-05-15 21:31 ` Jakub Kicinski
  1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2020-05-15 17:56 UTC (permalink / raw
  To: kevlo; +Cc: netdev, f.fainelli, andrew

From: Kevin Lo <kevlo@kevlo.org>
Date: Sat, 16 May 2020 01:24:47 +0800

> The BCM54811 PHY shares many similarities with the already supported BCM54810
> PHY but additionally requires some semi-unique configuration.
> 
> Signed-off-by: Kevin Lo <kevlo@kevlo.org>
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

Applied.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY
  2020-05-15 17:24 [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY Kevin Lo
  2020-05-15 17:56 ` David Miller
@ 2020-05-15 21:31 ` Jakub Kicinski
  2020-05-16  2:11   ` Kevin Lo
  1 sibling, 1 reply; 4+ messages in thread
From: Jakub Kicinski @ 2020-05-15 21:31 UTC (permalink / raw
  To: Kevin Lo; +Cc: netdev, Florian Fainelli, Andrew Lunn, David S. Miller

On Sat, 16 May 2020 01:24:47 +0800 Kevin Lo wrote:
> The BCM54811 PHY shares many similarities with the already supported BCM54810
> PHY but additionally requires some semi-unique configuration.
> 
> Signed-off-by: Kevin Lo <kevlo@kevlo.org>
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

Checkpatch complains about using spaces instead of tabs:

ERROR: code indent should use tabs where possible
#80: FILE: drivers/net/phy/broadcom.c:359:
+        }$

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY
  2020-05-15 21:31 ` Jakub Kicinski
@ 2020-05-16  2:11   ` Kevin Lo
  0 siblings, 0 replies; 4+ messages in thread
From: Kevin Lo @ 2020-05-16  2:11 UTC (permalink / raw
  To: Jakub Kicinski; +Cc: netdev, Florian Fainelli, Andrew Lunn, David S. Miller

On Fri, May 15, 2020 at 02:31:42PM -0700, Jakub Kicinski wrote:
> 
> On Sat, 16 May 2020 01:24:47 +0800 Kevin Lo wrote:
> > The BCM54811 PHY shares many similarities with the already supported BCM54810
> > PHY but additionally requires some semi-unique configuration.
> > 
> > Signed-off-by: Kevin Lo <kevlo@kevlo.org>
> > Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> 
> Checkpatch complains about using spaces instead of tabs:
> 
> ERROR: code indent should use tabs where possible
> #80: FILE: drivers/net/phy/broadcom.c:359:
> +        }$

Thanks for spotting this out.  Will send the patch to fix it.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-05-16  2:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-15 17:24 [PATCH net-next] net: phy: broadcom: add support for BCM54811 PHY Kevin Lo
2020-05-15 17:56 ` David Miller
2020-05-15 21:31 ` Jakub Kicinski
2020-05-16  2:11   ` Kevin Lo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.