netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver
@ 2019-03-20 19:53 Florian Fainelli
  2019-03-20 19:53 ` [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx Florian Fainelli
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Florian Fainelli @ 2019-03-20 19:53 UTC (permalink / raw)
  To: netdev
  Cc: Florian Fainelli, Andrew Lunn, David S. Miller, open list,
	hkallweit1, bcm-kernel-feedback-list, murali.policharla,
	arun.parameswaran

Hi,

In order to pave the way for adding some specific Omega PHY features
that may not be desirable on other products covered by the bcm7xxx PHY
driver, split the Omega PHY entry into the Cygnus PHY driver such that
the PHY drivers are reflective of product lines/business units
maintaining them within Broadcom.

No functional changes intended.

Florian Fainelli (2):
  net: phy: Prepare for moving Omega out of bcm7xxx
  net: phy: Move Omega PHY entry to Cygnus PHY driver

 drivers/net/phy/Kconfig       |   5 +-
 drivers/net/phy/bcm-cygnus.c  | 147 +++++++++++++++++++++++++++++++++-
 drivers/net/phy/bcm-phy-lib.c |  52 ++++++++++++
 drivers/net/phy/bcm-phy-lib.h |  20 +++++
 drivers/net/phy/bcm7xxx.c     |  76 +-----------------
 5 files changed, 225 insertions(+), 75 deletions(-)

-- 
2.17.1


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

* [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx
  2019-03-20 19:53 [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
@ 2019-03-20 19:53 ` Florian Fainelli
  2019-03-20 22:34   ` Scott Branden
  2019-03-20 19:53 ` [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Florian Fainelli @ 2019-03-20 19:53 UTC (permalink / raw)
  To: netdev
  Cc: Florian Fainelli, Andrew Lunn, David S. Miller, open list,
	hkallweit1, bcm-kernel-feedback-list, murali.policharla,
	arun.parameswaran

The Omega PHY entry was added to bcm7xxx.c out of convenience and this
breaks the one driver per product line paradigm that was applied up
until now. Since the AFE initialization is shared between Omega and
BCM7xxx move the relevant functions to bcm-phy-lib.[ch]. No functional
changes introduced.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/phy/bcm-phy-lib.c | 52 ++++++++++++++++++++++++
 drivers/net/phy/bcm-phy-lib.h | 20 ++++++++++
 drivers/net/phy/bcm7xxx.c     | 75 ++---------------------------------
 3 files changed, 76 insertions(+), 71 deletions(-)

diff --git a/drivers/net/phy/bcm-phy-lib.c b/drivers/net/phy/bcm-phy-lib.c
index a75642051b8b..e0d3310957ff 100644
--- a/drivers/net/phy/bcm-phy-lib.c
+++ b/drivers/net/phy/bcm-phy-lib.c
@@ -371,6 +371,58 @@ void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow,
 }
 EXPORT_SYMBOL_GPL(bcm_phy_get_stats);
 
+void bcm_phy_r_rc_cal_reset(struct phy_device *phydev)
+{
+	/* Reset R_CAL/RC_CAL Engine */
+	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010);
+
+	/* Disable Reset R_AL/RC_CAL Engine */
+	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000);
+}
+EXPORT_SYMBOL_GPL(bcm_phy_r_rc_cal_reset);
+
+int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev)
+{
+	/* Increase VCO range to prevent unlocking problem of PLL at low
+	 * temp
+	 */
+	bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048);
+
+	/* Change Ki to 011 */
+	bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b);
+
+	/* Disable loading of TVCO buffer to bandgap, set bandgap trim
+	 * to 111
+	 */
+	bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20);
+
+	/* Adjust bias current trim by -3 */
+	bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b);
+
+	/* Switch to CORE_BASE1E */
+	phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd);
+
+	bcm_phy_r_rc_cal_reset(phydev);
+
+	/* write AFE_RXCONFIG_0 */
+	bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19);
+
+	/* write AFE_RXCONFIG_1 */
+	bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f);
+
+	/* write AFE_RX_LP_COUNTER */
+	bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0);
+
+	/* write AFE_HPF_TRIM_OTHERS */
+	bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b);
+
+	/* write AFTE_TX_CONFIG */
+	bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(bcm_phy_28nm_a0b0_afe_config_init);
+
 MODULE_DESCRIPTION("Broadcom PHY Library");
 MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR("Broadcom Corporation");
diff --git a/drivers/net/phy/bcm-phy-lib.h b/drivers/net/phy/bcm-phy-lib.h
index 17faaefcfd60..5ecacb4e64f0 100644
--- a/drivers/net/phy/bcm-phy-lib.h
+++ b/drivers/net/phy/bcm-phy-lib.h
@@ -9,6 +9,24 @@
 #include <linux/brcmphy.h>
 #include <linux/phy.h>
 
+/* 28nm only register definitions */
+#define MISC_ADDR(base, channel)	base, channel
+
+#define DSP_TAP10			MISC_ADDR(0x0a, 0)
+#define PLL_PLLCTRL_1			MISC_ADDR(0x32, 1)
+#define PLL_PLLCTRL_2			MISC_ADDR(0x32, 2)
+#define PLL_PLLCTRL_4			MISC_ADDR(0x33, 0)
+
+#define AFE_RXCONFIG_0			MISC_ADDR(0x38, 0)
+#define AFE_RXCONFIG_1			MISC_ADDR(0x38, 1)
+#define AFE_RXCONFIG_2			MISC_ADDR(0x38, 2)
+#define AFE_RX_LP_COUNTER		MISC_ADDR(0x38, 3)
+#define AFE_TX_CONFIG			MISC_ADDR(0x39, 0)
+#define AFE_VDCA_ICTRL_0		MISC_ADDR(0x39, 1)
+#define AFE_VDAC_OTHERS_0		MISC_ADDR(0x39, 3)
+#define AFE_HPF_TRIM_OTHERS		MISC_ADDR(0x3a, 0)
+
+
 int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val);
 int bcm_phy_read_exp(struct phy_device *phydev, u16 reg);
 
@@ -45,5 +63,7 @@ int bcm_phy_get_sset_count(struct phy_device *phydev);
 void bcm_phy_get_strings(struct phy_device *phydev, u8 *data);
 void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow,
 		       struct ethtool_stats *stats, u64 *data);
+void bcm_phy_r_rc_cal_reset(struct phy_device *phydev);
+int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev);
 
 #endif /* _LINUX_BCM_PHY_LIB_H */
diff --git a/drivers/net/phy/bcm7xxx.c b/drivers/net/phy/bcm7xxx.c
index b8415f8fae14..dddeffa23aa1 100644
--- a/drivers/net/phy/bcm7xxx.c
+++ b/drivers/net/phy/bcm7xxx.c
@@ -37,77 +37,10 @@
 #define MII_BCM7XXX_SHD_3_TL4		0x23
 #define  MII_BCM7XXX_TL4_RST_MSK	(BIT(2) | BIT(1))
 
-/* 28nm only register definitions */
-#define MISC_ADDR(base, channel)	base, channel
-
-#define DSP_TAP10			MISC_ADDR(0x0a, 0)
-#define PLL_PLLCTRL_1			MISC_ADDR(0x32, 1)
-#define PLL_PLLCTRL_2			MISC_ADDR(0x32, 2)
-#define PLL_PLLCTRL_4			MISC_ADDR(0x33, 0)
-
-#define AFE_RXCONFIG_0			MISC_ADDR(0x38, 0)
-#define AFE_RXCONFIG_1			MISC_ADDR(0x38, 1)
-#define AFE_RXCONFIG_2			MISC_ADDR(0x38, 2)
-#define AFE_RX_LP_COUNTER		MISC_ADDR(0x38, 3)
-#define AFE_TX_CONFIG			MISC_ADDR(0x39, 0)
-#define AFE_VDCA_ICTRL_0		MISC_ADDR(0x39, 1)
-#define AFE_VDAC_OTHERS_0		MISC_ADDR(0x39, 3)
-#define AFE_HPF_TRIM_OTHERS		MISC_ADDR(0x3a, 0)
-
 struct bcm7xxx_phy_priv {
 	u64	*stats;
 };
 
-static void r_rc_cal_reset(struct phy_device *phydev)
-{
-	/* Reset R_CAL/RC_CAL Engine */
-	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010);
-
-	/* Disable Reset R_AL/RC_CAL Engine */
-	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000);
-}
-
-static int bcm7xxx_28nm_b0_afe_config_init(struct phy_device *phydev)
-{
-	/* Increase VCO range to prevent unlocking problem of PLL at low
-	 * temp
-	 */
-	bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048);
-
-	/* Change Ki to 011 */
-	bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b);
-
-	/* Disable loading of TVCO buffer to bandgap, set bandgap trim
-	 * to 111
-	 */
-	bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20);
-
-	/* Adjust bias current trim by -3 */
-	bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b);
-
-	/* Switch to CORE_BASE1E */
-	phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd);
-
-	r_rc_cal_reset(phydev);
-
-	/* write AFE_RXCONFIG_0 */
-	bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19);
-
-	/* write AFE_RXCONFIG_1 */
-	bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f);
-
-	/* write AFE_RX_LP_COUNTER */
-	bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0);
-
-	/* write AFE_HPF_TRIM_OTHERS */
-	bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b);
-
-	/* write AFTE_TX_CONFIG */
-	bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800);
-
-	return 0;
-}
-
 static int bcm7xxx_28nm_d0_afe_config_init(struct phy_device *phydev)
 {
 	/* AFE_RXCONFIG_0 */
@@ -143,7 +76,7 @@ static int bcm7xxx_28nm_d0_afe_config_init(struct phy_device *phydev)
 	bcm_phy_write_misc(phydev, DSP_TAP10, 0x011b);
 
 	/* Reset R_CAL/RC_CAL engine */
-	r_rc_cal_reset(phydev);
+	bcm_phy_r_rc_cal_reset(phydev);
 
 	return 0;
 }
@@ -171,7 +104,7 @@ static int bcm7xxx_28nm_e0_plus_afe_config_init(struct phy_device *phydev)
 	bcm_phy_write_misc(phydev, DSP_TAP10, 0x011b);
 
 	/* Reset R_CAL/RC_CAL engine */
-	r_rc_cal_reset(phydev);
+	bcm_phy_r_rc_cal_reset(phydev);
 
 	return 0;
 }
@@ -196,7 +129,7 @@ static int bcm7xxx_28nm_a0_patch_afe_config_init(struct phy_device *phydev)
 	/* Enable ffe zero detection for Vitesse interoperability */
 	bcm_phy_write_misc(phydev, 0x26, 0x2, 0x0015);
 
-	r_rc_cal_reset(phydev);
+	bcm_phy_r_rc_cal_reset(phydev);
 
 	return 0;
 }
@@ -227,7 +160,7 @@ static int bcm7xxx_28nm_config_init(struct phy_device *phydev)
 	switch (rev) {
 	case 0xa0:
 	case 0xb0:
-		ret = bcm7xxx_28nm_b0_afe_config_init(phydev);
+		ret = bcm_phy_28nm_a0b0_afe_config_init(phydev);
 		break;
 	case 0xd0:
 		ret = bcm7xxx_28nm_d0_afe_config_init(phydev);
-- 
2.17.1


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

* [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver
  2019-03-20 19:53 [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
  2019-03-20 19:53 ` [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx Florian Fainelli
@ 2019-03-20 19:53 ` Florian Fainelli
  2019-03-20 22:35   ` Scott Branden
  2019-03-20 20:51 ` [PATCH net-next 0/2] " Arun Parameswaran
  2019-03-21 20:41 ` David Miller
  3 siblings, 1 reply; 7+ messages in thread
From: Florian Fainelli @ 2019-03-20 19:53 UTC (permalink / raw)
  To: netdev
  Cc: Florian Fainelli, Andrew Lunn, David S. Miller, open list,
	hkallweit1, bcm-kernel-feedback-list, murali.policharla,
	arun.parameswaran

Cygnus and Omega are part of the same business unit and product line, it
makes sense to group PHY entries by products such that a platform can
select only the drivers that it needs. Bring all the functionality that
the BCM7XXX_28NM_GPHY() macro hides for us and remove the Omega PHY
entry from bcm7xxx.c.

As an added bonus, we now have a proper mdio_device_id entry to permit
auto-loading.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/phy/Kconfig      |   5 +-
 drivers/net/phy/bcm-cygnus.c | 147 ++++++++++++++++++++++++++++++++++-
 drivers/net/phy/bcm7xxx.c    |   1 -
 3 files changed, 149 insertions(+), 4 deletions(-)

diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 071869db44cf..0973f0b81ce4 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -271,12 +271,13 @@ config BCM87XX_PHY
 
 config BCM_CYGNUS_PHY
 	tristate "Broadcom Cygnus SoC internal PHY"
-	depends on ARCH_BCM_CYGNUS || COMPILE_TEST
+	depends on ARCH_BCM_IPROC || COMPILE_TEST
 	depends on MDIO_BCM_IPROC
+	tristate "Broadcom Cygnus/Omega SoC internal PHY"
 	select BCM_NET_PHYLIB
 	---help---
 	  This PHY driver is for the 1G internal PHYs of the Broadcom
-	  Cygnus Family SoC.
+	  Cygnus and Omega Family SoC.
 
 	  Currently supports internal PHY's used in the BCM11300,
 	  BCM11320, BCM11350, BCM11360, BCM58300, BCM58302,
diff --git a/drivers/net/phy/bcm-cygnus.c b/drivers/net/phy/bcm-cygnus.c
index ab8e12922bf9..625b7cb76285 100644
--- a/drivers/net/phy/bcm-cygnus.c
+++ b/drivers/net/phy/bcm-cygnus.c
@@ -10,6 +10,10 @@
 #include <linux/netdevice.h>
 #include <linux/phy.h>
 
+struct bcm_omega_phy_priv {
+	u64	*stats;
+};
+
 /* Broadcom Cygnus Phy specific registers */
 #define MII_BCM_CYGNUS_AFE_VDAC_ICTRL_0  0x91E5 /* VDAL Control register */
 
@@ -121,6 +125,130 @@ static int bcm_cygnus_resume(struct phy_device *phydev)
 	return genphy_config_aneg(phydev);
 }
 
+static int bcm_omega_config_init(struct phy_device *phydev)
+{
+	u8 count, rev;
+	int ret = 0;
+
+	rev = phydev->phy_id & ~phydev->drv->phy_id_mask;
+
+	pr_info_once("%s: %s PHY revision: 0x%02x\n",
+		     phydev_name(phydev), phydev->drv->name, rev);
+
+	/* Dummy read to a register to workaround an issue upon reset where the
+	 * internal inverter may not allow the first MDIO transaction to pass
+	 * the MDIO management controller and make us return 0xffff for such
+	 * reads.
+	 */
+	phy_read(phydev, MII_BMSR);
+
+	switch (rev) {
+	case 0x00:
+		ret = bcm_phy_28nm_a0b0_afe_config_init(phydev);
+		break;
+	default:
+		break;
+	}
+
+	if (ret)
+		return ret;
+
+	ret = bcm_phy_downshift_get(phydev, &count);
+	if (ret)
+		return ret;
+
+	/* Only enable EEE if Wirespeed/downshift is disabled */
+	ret = bcm_phy_set_eee(phydev, count == DOWNSHIFT_DEV_DISABLE);
+	if (ret)
+		return ret;
+
+	return bcm_phy_enable_apd(phydev, true);
+}
+
+static int bcm_omega_resume(struct phy_device *phydev)
+{
+	int ret;
+
+	/* Re-apply workarounds coming out suspend/resume */
+	ret = bcm_omega_config_init(phydev);
+	if (ret)
+		return ret;
+
+	/* 28nm Gigabit PHYs come out of reset without any half-duplex
+	 * or "hub" compliant advertised mode, fix that. This does not
+	 * cause any problems with the PHY library since genphy_config_aneg()
+	 * gracefully handles auto-negotiated and forced modes.
+	 */
+	return genphy_config_aneg(phydev);
+}
+
+static int bcm_omega_get_tunable(struct phy_device *phydev,
+				 struct ethtool_tunable *tuna, void *data)
+{
+	switch (tuna->id) {
+	case ETHTOOL_PHY_DOWNSHIFT:
+		return bcm_phy_downshift_get(phydev, (u8 *)data);
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static int bcm_omega_set_tunable(struct phy_device *phydev,
+				 struct ethtool_tunable *tuna,
+				 const void *data)
+{
+	u8 count = *(u8 *)data;
+	int ret;
+
+	switch (tuna->id) {
+	case ETHTOOL_PHY_DOWNSHIFT:
+		ret = bcm_phy_downshift_set(phydev, count);
+		break;
+	default:
+		return -EOPNOTSUPP;
+	}
+
+	if (ret)
+		return ret;
+
+	/* Disable EEE advertisement since this prevents the PHY
+	 * from successfully linking up, trigger auto-negotiation restart
+	 * to let the MAC decide what to do.
+	 */
+	ret = bcm_phy_set_eee(phydev, count == DOWNSHIFT_DEV_DISABLE);
+	if (ret)
+		return ret;
+
+	return genphy_restart_aneg(phydev);
+}
+
+static void bcm_omega_get_phy_stats(struct phy_device *phydev,
+				    struct ethtool_stats *stats, u64 *data)
+{
+	struct bcm_omega_phy_priv *priv = phydev->priv;
+
+	bcm_phy_get_stats(phydev, priv->stats, stats, data);
+}
+
+static int bcm_omega_probe(struct phy_device *phydev)
+{
+	struct bcm_omega_phy_priv *priv;
+
+	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	phydev->priv = priv;
+
+	priv->stats = devm_kcalloc(&phydev->mdio.dev,
+				   bcm_phy_get_sset_count(phydev), sizeof(u64),
+				   GFP_KERNEL);
+	if (!priv->stats)
+		return -ENOMEM;
+
+	return 0;
+}
+
 static struct phy_driver bcm_cygnus_phy_driver[] = {
 {
 	.phy_id        = PHY_ID_BCM_CYGNUS,
@@ -132,10 +260,27 @@ static struct phy_driver bcm_cygnus_phy_driver[] = {
 	.config_intr   = bcm_phy_config_intr,
 	.suspend       = genphy_suspend,
 	.resume        = bcm_cygnus_resume,
-} };
+}, {
+	.phy_id		= PHY_ID_BCM_OMEGA,
+	.phy_id_mask	= 0xfffffff0,
+	.name		= "Broadcom Omega Combo GPHY",
+	.features	= PHY_GBIT_FEATURES,
+	.flags		= PHY_IS_INTERNAL,
+	.config_init	= bcm_omega_config_init,
+	.suspend	= genphy_suspend,
+	.resume		= bcm_omega_resume,
+	.get_tunable	= bcm_omega_get_tunable,
+	.set_tunable	= bcm_omega_set_tunable,
+	.get_sset_count	= bcm_phy_get_sset_count,
+	.get_strings	= bcm_phy_get_strings,
+	.get_stats	= bcm_omega_get_phy_stats,
+	.probe		= bcm_omega_probe,
+}
+};
 
 static struct mdio_device_id __maybe_unused bcm_cygnus_phy_tbl[] = {
 	{ PHY_ID_BCM_CYGNUS, 0xfffffff0, },
+	{ PHY_ID_BCM_OMEGA, 0xfffffff0, },
 	{ }
 };
 MODULE_DEVICE_TABLE(mdio, bcm_cygnus_phy_tbl);
diff --git a/drivers/net/phy/bcm7xxx.c b/drivers/net/phy/bcm7xxx.c
index dddeffa23aa1..a75e1b283541 100644
--- a/drivers/net/phy/bcm7xxx.c
+++ b/drivers/net/phy/bcm7xxx.c
@@ -590,7 +590,6 @@ static struct phy_driver bcm7xxx_driver[] = {
 	BCM7XXX_28NM_GPHY(PHY_ID_BCM7439, "Broadcom BCM7439"),
 	BCM7XXX_28NM_GPHY(PHY_ID_BCM7439_2, "Broadcom BCM7439 (2)"),
 	BCM7XXX_28NM_GPHY(PHY_ID_BCM7445, "Broadcom BCM7445"),
-	BCM7XXX_28NM_GPHY(PHY_ID_BCM_OMEGA, "Broadcom Omega Combo GPHY"),
 	BCM7XXX_40NM_EPHY(PHY_ID_BCM7346, "Broadcom BCM7346"),
 	BCM7XXX_40NM_EPHY(PHY_ID_BCM7362, "Broadcom BCM7362"),
 	BCM7XXX_40NM_EPHY(PHY_ID_BCM7425, "Broadcom BCM7425"),
-- 
2.17.1


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

* Re: [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver
  2019-03-20 19:53 [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
  2019-03-20 19:53 ` [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx Florian Fainelli
  2019-03-20 19:53 ` [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
@ 2019-03-20 20:51 ` Arun Parameswaran
  2019-03-21 20:41 ` David Miller
  3 siblings, 0 replies; 7+ messages in thread
From: Arun Parameswaran @ 2019-03-20 20:51 UTC (permalink / raw)
  To: Florian Fainelli, netdev
  Cc: Andrew Lunn, David S. Miller, open list, hkallweit1,
	bcm-kernel-feedback-list, murali.policharla

Thanks Florian.


For the patch series,

Acked-by: Arun Parameswaran <arun.parameswaran@broadcom.com>


On 2019-03-20 12:53 p.m., Florian Fainelli wrote:
> Hi,
> 
> In order to pave the way for adding some specific Omega PHY features
> that may not be desirable on other products covered by the bcm7xxx PHY
> driver, split the Omega PHY entry into the Cygnus PHY driver such that
> the PHY drivers are reflective of product lines/business units
> maintaining them within Broadcom.
> 
> No functional changes intended.
> 
> Florian Fainelli (2):
>   net: phy: Prepare for moving Omega out of bcm7xxx
>   net: phy: Move Omega PHY entry to Cygnus PHY driver
> 
>  drivers/net/phy/Kconfig       |   5 +-
>  drivers/net/phy/bcm-cygnus.c  | 147 +++++++++++++++++++++++++++++++++-
>  drivers/net/phy/bcm-phy-lib.c |  52 ++++++++++++
>  drivers/net/phy/bcm-phy-lib.h |  20 +++++
>  drivers/net/phy/bcm7xxx.c     |  76 +-----------------
>  5 files changed, 225 insertions(+), 75 deletions(-)
> 

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

* Re: [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx
  2019-03-20 19:53 ` [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx Florian Fainelli
@ 2019-03-20 22:34   ` Scott Branden
  0 siblings, 0 replies; 7+ messages in thread
From: Scott Branden @ 2019-03-20 22:34 UTC (permalink / raw)
  To: Florian Fainelli, netdev
  Cc: Andrew Lunn, David S. Miller, open list, hkallweit1,
	bcm-kernel-feedback-list, murali.policharla, arun.parameswaran

Looks good.

On 2019-03-20 12:53 p.m., Florian Fainelli wrote:
> The Omega PHY entry was added to bcm7xxx.c out of convenience and this
> breaks the one driver per product line paradigm that was applied up
> until now. Since the AFE initialization is shared between Omega and
> BCM7xxx move the relevant functions to bcm-phy-lib.[ch]. No functional
> changes introduced.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
> ---
>   drivers/net/phy/bcm-phy-lib.c | 52 ++++++++++++++++++++++++
>   drivers/net/phy/bcm-phy-lib.h | 20 ++++++++++
>   drivers/net/phy/bcm7xxx.c     | 75 ++---------------------------------
>   3 files changed, 76 insertions(+), 71 deletions(-)
>
> diff --git a/drivers/net/phy/bcm-phy-lib.c b/drivers/net/phy/bcm-phy-lib.c
> index a75642051b8b..e0d3310957ff 100644
> --- a/drivers/net/phy/bcm-phy-lib.c
> +++ b/drivers/net/phy/bcm-phy-lib.c
> @@ -371,6 +371,58 @@ void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow,
>   }
>   EXPORT_SYMBOL_GPL(bcm_phy_get_stats);
>   
> +void bcm_phy_r_rc_cal_reset(struct phy_device *phydev)
> +{
> +	/* Reset R_CAL/RC_CAL Engine */
> +	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010);
> +
> +	/* Disable Reset R_AL/RC_CAL Engine */
> +	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000);
> +}
> +EXPORT_SYMBOL_GPL(bcm_phy_r_rc_cal_reset);
> +
> +int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev)
> +{
> +	/* Increase VCO range to prevent unlocking problem of PLL at low
> +	 * temp
> +	 */
> +	bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048);
> +
> +	/* Change Ki to 011 */
> +	bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b);
> +
> +	/* Disable loading of TVCO buffer to bandgap, set bandgap trim
> +	 * to 111
> +	 */
> +	bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20);
> +
> +	/* Adjust bias current trim by -3 */
> +	bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b);
> +
> +	/* Switch to CORE_BASE1E */
> +	phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd);
> +
> +	bcm_phy_r_rc_cal_reset(phydev);
> +
> +	/* write AFE_RXCONFIG_0 */
> +	bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19);
> +
> +	/* write AFE_RXCONFIG_1 */
> +	bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f);
> +
> +	/* write AFE_RX_LP_COUNTER */
> +	bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0);
> +
> +	/* write AFE_HPF_TRIM_OTHERS */
> +	bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b);
> +
> +	/* write AFTE_TX_CONFIG */
> +	bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800);
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(bcm_phy_28nm_a0b0_afe_config_init);
> +
>   MODULE_DESCRIPTION("Broadcom PHY Library");
>   MODULE_LICENSE("GPL v2");
>   MODULE_AUTHOR("Broadcom Corporation");
> diff --git a/drivers/net/phy/bcm-phy-lib.h b/drivers/net/phy/bcm-phy-lib.h
> index 17faaefcfd60..5ecacb4e64f0 100644
> --- a/drivers/net/phy/bcm-phy-lib.h
> +++ b/drivers/net/phy/bcm-phy-lib.h
> @@ -9,6 +9,24 @@
>   #include <linux/brcmphy.h>
>   #include <linux/phy.h>
>   
> +/* 28nm only register definitions */
> +#define MISC_ADDR(base, channel)	base, channel
> +
> +#define DSP_TAP10			MISC_ADDR(0x0a, 0)
> +#define PLL_PLLCTRL_1			MISC_ADDR(0x32, 1)
> +#define PLL_PLLCTRL_2			MISC_ADDR(0x32, 2)
> +#define PLL_PLLCTRL_4			MISC_ADDR(0x33, 0)
> +
> +#define AFE_RXCONFIG_0			MISC_ADDR(0x38, 0)
> +#define AFE_RXCONFIG_1			MISC_ADDR(0x38, 1)
> +#define AFE_RXCONFIG_2			MISC_ADDR(0x38, 2)
> +#define AFE_RX_LP_COUNTER		MISC_ADDR(0x38, 3)
> +#define AFE_TX_CONFIG			MISC_ADDR(0x39, 0)
> +#define AFE_VDCA_ICTRL_0		MISC_ADDR(0x39, 1)
> +#define AFE_VDAC_OTHERS_0		MISC_ADDR(0x39, 3)
> +#define AFE_HPF_TRIM_OTHERS		MISC_ADDR(0x3a, 0)
> +
> +
>   int bcm_phy_write_exp(struct phy_device *phydev, u16 reg, u16 val);
>   int bcm_phy_read_exp(struct phy_device *phydev, u16 reg);
>   
> @@ -45,5 +63,7 @@ int bcm_phy_get_sset_count(struct phy_device *phydev);
>   void bcm_phy_get_strings(struct phy_device *phydev, u8 *data);
>   void bcm_phy_get_stats(struct phy_device *phydev, u64 *shadow,
>   		       struct ethtool_stats *stats, u64 *data);
> +void bcm_phy_r_rc_cal_reset(struct phy_device *phydev);
> +int bcm_phy_28nm_a0b0_afe_config_init(struct phy_device *phydev);
>   
>   #endif /* _LINUX_BCM_PHY_LIB_H */
> diff --git a/drivers/net/phy/bcm7xxx.c b/drivers/net/phy/bcm7xxx.c
> index b8415f8fae14..dddeffa23aa1 100644
> --- a/drivers/net/phy/bcm7xxx.c
> +++ b/drivers/net/phy/bcm7xxx.c
> @@ -37,77 +37,10 @@
>   #define MII_BCM7XXX_SHD_3_TL4		0x23
>   #define  MII_BCM7XXX_TL4_RST_MSK	(BIT(2) | BIT(1))
>   
> -/* 28nm only register definitions */
> -#define MISC_ADDR(base, channel)	base, channel
> -
> -#define DSP_TAP10			MISC_ADDR(0x0a, 0)
> -#define PLL_PLLCTRL_1			MISC_ADDR(0x32, 1)
> -#define PLL_PLLCTRL_2			MISC_ADDR(0x32, 2)
> -#define PLL_PLLCTRL_4			MISC_ADDR(0x33, 0)
> -
> -#define AFE_RXCONFIG_0			MISC_ADDR(0x38, 0)
> -#define AFE_RXCONFIG_1			MISC_ADDR(0x38, 1)
> -#define AFE_RXCONFIG_2			MISC_ADDR(0x38, 2)
> -#define AFE_RX_LP_COUNTER		MISC_ADDR(0x38, 3)
> -#define AFE_TX_CONFIG			MISC_ADDR(0x39, 0)
> -#define AFE_VDCA_ICTRL_0		MISC_ADDR(0x39, 1)
> -#define AFE_VDAC_OTHERS_0		MISC_ADDR(0x39, 3)
> -#define AFE_HPF_TRIM_OTHERS		MISC_ADDR(0x3a, 0)
> -
>   struct bcm7xxx_phy_priv {
>   	u64	*stats;
>   };
>   
> -static void r_rc_cal_reset(struct phy_device *phydev)
> -{
> -	/* Reset R_CAL/RC_CAL Engine */
> -	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0010);
> -
> -	/* Disable Reset R_AL/RC_CAL Engine */
> -	bcm_phy_write_exp_sel(phydev, 0x00b0, 0x0000);
> -}
> -
> -static int bcm7xxx_28nm_b0_afe_config_init(struct phy_device *phydev)
> -{
> -	/* Increase VCO range to prevent unlocking problem of PLL at low
> -	 * temp
> -	 */
> -	bcm_phy_write_misc(phydev, PLL_PLLCTRL_1, 0x0048);
> -
> -	/* Change Ki to 011 */
> -	bcm_phy_write_misc(phydev, PLL_PLLCTRL_2, 0x021b);
> -
> -	/* Disable loading of TVCO buffer to bandgap, set bandgap trim
> -	 * to 111
> -	 */
> -	bcm_phy_write_misc(phydev, PLL_PLLCTRL_4, 0x0e20);
> -
> -	/* Adjust bias current trim by -3 */
> -	bcm_phy_write_misc(phydev, DSP_TAP10, 0x690b);
> -
> -	/* Switch to CORE_BASE1E */
> -	phy_write(phydev, MII_BRCM_CORE_BASE1E, 0xd);
> -
> -	r_rc_cal_reset(phydev);
> -
> -	/* write AFE_RXCONFIG_0 */
> -	bcm_phy_write_misc(phydev, AFE_RXCONFIG_0, 0xeb19);
> -
> -	/* write AFE_RXCONFIG_1 */
> -	bcm_phy_write_misc(phydev, AFE_RXCONFIG_1, 0x9a3f);
> -
> -	/* write AFE_RX_LP_COUNTER */
> -	bcm_phy_write_misc(phydev, AFE_RX_LP_COUNTER, 0x7fc0);
> -
> -	/* write AFE_HPF_TRIM_OTHERS */
> -	bcm_phy_write_misc(phydev, AFE_HPF_TRIM_OTHERS, 0x000b);
> -
> -	/* write AFTE_TX_CONFIG */
> -	bcm_phy_write_misc(phydev, AFE_TX_CONFIG, 0x0800);
> -
> -	return 0;
> -}
> -
>   static int bcm7xxx_28nm_d0_afe_config_init(struct phy_device *phydev)
>   {
>   	/* AFE_RXCONFIG_0 */
> @@ -143,7 +76,7 @@ static int bcm7xxx_28nm_d0_afe_config_init(struct phy_device *phydev)
>   	bcm_phy_write_misc(phydev, DSP_TAP10, 0x011b);
>   
>   	/* Reset R_CAL/RC_CAL engine */
> -	r_rc_cal_reset(phydev);
> +	bcm_phy_r_rc_cal_reset(phydev);
>   
>   	return 0;
>   }
> @@ -171,7 +104,7 @@ static int bcm7xxx_28nm_e0_plus_afe_config_init(struct phy_device *phydev)
>   	bcm_phy_write_misc(phydev, DSP_TAP10, 0x011b);
>   
>   	/* Reset R_CAL/RC_CAL engine */
> -	r_rc_cal_reset(phydev);
> +	bcm_phy_r_rc_cal_reset(phydev);
>   
>   	return 0;
>   }
> @@ -196,7 +129,7 @@ static int bcm7xxx_28nm_a0_patch_afe_config_init(struct phy_device *phydev)
>   	/* Enable ffe zero detection for Vitesse interoperability */
>   	bcm_phy_write_misc(phydev, 0x26, 0x2, 0x0015);
>   
> -	r_rc_cal_reset(phydev);
> +	bcm_phy_r_rc_cal_reset(phydev);
>   
>   	return 0;
>   }
> @@ -227,7 +160,7 @@ static int bcm7xxx_28nm_config_init(struct phy_device *phydev)
>   	switch (rev) {
>   	case 0xa0:
>   	case 0xb0:
> -		ret = bcm7xxx_28nm_b0_afe_config_init(phydev);
> +		ret = bcm_phy_28nm_a0b0_afe_config_init(phydev);
>   		break;
>   	case 0xd0:
>   		ret = bcm7xxx_28nm_d0_afe_config_init(phydev);

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

* Re: [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver
  2019-03-20 19:53 ` [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
@ 2019-03-20 22:35   ` Scott Branden
  0 siblings, 0 replies; 7+ messages in thread
From: Scott Branden @ 2019-03-20 22:35 UTC (permalink / raw)
  To: Florian Fainelli, netdev
  Cc: Andrew Lunn, David S. Miller, open list, hkallweit1,
	bcm-kernel-feedback-list, murali.policharla, arun.parameswaran

Thanks Florian.

On 2019-03-20 12:53 p.m., Florian Fainelli wrote:
> Cygnus and Omega are part of the same business unit and product line, it
> makes sense to group PHY entries by products such that a platform can
> select only the drivers that it needs. Bring all the functionality that
> the BCM7XXX_28NM_GPHY() macro hides for us and remove the Omega PHY
> entry from bcm7xxx.c.
>
> As an added bonus, we now have a proper mdio_device_id entry to permit
> auto-loading.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Scott Branden <scott.branden@broadcom.com>
> ---
>   drivers/net/phy/Kconfig      |   5 +-
>   drivers/net/phy/bcm-cygnus.c | 147 ++++++++++++++++++++++++++++++++++-
>   drivers/net/phy/bcm7xxx.c    |   1 -
>   3 files changed, 149 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index 071869db44cf..0973f0b81ce4 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -271,12 +271,13 @@ config BCM87XX_PHY
>   
>   config BCM_CYGNUS_PHY
>   	tristate "Broadcom Cygnus SoC internal PHY"
> -	depends on ARCH_BCM_CYGNUS || COMPILE_TEST
> +	depends on ARCH_BCM_IPROC || COMPILE_TEST
>   	depends on MDIO_BCM_IPROC
> +	tristate "Broadcom Cygnus/Omega SoC internal PHY"
>   	select BCM_NET_PHYLIB
>   	---help---
>   	  This PHY driver is for the 1G internal PHYs of the Broadcom
> -	  Cygnus Family SoC.
> +	  Cygnus and Omega Family SoC.
>   
>   	  Currently supports internal PHY's used in the BCM11300,
>   	  BCM11320, BCM11350, BCM11360, BCM58300, BCM58302,
> diff --git a/drivers/net/phy/bcm-cygnus.c b/drivers/net/phy/bcm-cygnus.c
> index ab8e12922bf9..625b7cb76285 100644
> --- a/drivers/net/phy/bcm-cygnus.c
> +++ b/drivers/net/phy/bcm-cygnus.c
> @@ -10,6 +10,10 @@
>   #include <linux/netdevice.h>
>   #include <linux/phy.h>
>   
> +struct bcm_omega_phy_priv {
> +	u64	*stats;
> +};
> +
>   /* Broadcom Cygnus Phy specific registers */
>   #define MII_BCM_CYGNUS_AFE_VDAC_ICTRL_0  0x91E5 /* VDAL Control register */
>   
> @@ -121,6 +125,130 @@ static int bcm_cygnus_resume(struct phy_device *phydev)
>   	return genphy_config_aneg(phydev);
>   }
>   
> +static int bcm_omega_config_init(struct phy_device *phydev)
> +{
> +	u8 count, rev;
> +	int ret = 0;
> +
> +	rev = phydev->phy_id & ~phydev->drv->phy_id_mask;
> +
> +	pr_info_once("%s: %s PHY revision: 0x%02x\n",
> +		     phydev_name(phydev), phydev->drv->name, rev);
> +
> +	/* Dummy read to a register to workaround an issue upon reset where the
> +	 * internal inverter may not allow the first MDIO transaction to pass
> +	 * the MDIO management controller and make us return 0xffff for such
> +	 * reads.
> +	 */
> +	phy_read(phydev, MII_BMSR);
> +
> +	switch (rev) {
> +	case 0x00:
> +		ret = bcm_phy_28nm_a0b0_afe_config_init(phydev);
> +		break;
> +	default:
> +		break;
> +	}
> +
> +	if (ret)
> +		return ret;
> +
> +	ret = bcm_phy_downshift_get(phydev, &count);
> +	if (ret)
> +		return ret;
> +
> +	/* Only enable EEE if Wirespeed/downshift is disabled */
> +	ret = bcm_phy_set_eee(phydev, count == DOWNSHIFT_DEV_DISABLE);
> +	if (ret)
> +		return ret;
> +
> +	return bcm_phy_enable_apd(phydev, true);
> +}
> +
> +static int bcm_omega_resume(struct phy_device *phydev)
> +{
> +	int ret;
> +
> +	/* Re-apply workarounds coming out suspend/resume */
> +	ret = bcm_omega_config_init(phydev);
> +	if (ret)
> +		return ret;
> +
> +	/* 28nm Gigabit PHYs come out of reset without any half-duplex
> +	 * or "hub" compliant advertised mode, fix that. This does not
> +	 * cause any problems with the PHY library since genphy_config_aneg()
> +	 * gracefully handles auto-negotiated and forced modes.
> +	 */
> +	return genphy_config_aneg(phydev);
> +}
> +
> +static int bcm_omega_get_tunable(struct phy_device *phydev,
> +				 struct ethtool_tunable *tuna, void *data)
> +{
> +	switch (tuna->id) {
> +	case ETHTOOL_PHY_DOWNSHIFT:
> +		return bcm_phy_downshift_get(phydev, (u8 *)data);
> +	default:
> +		return -EOPNOTSUPP;
> +	}
> +}
> +
> +static int bcm_omega_set_tunable(struct phy_device *phydev,
> +				 struct ethtool_tunable *tuna,
> +				 const void *data)
> +{
> +	u8 count = *(u8 *)data;
> +	int ret;
> +
> +	switch (tuna->id) {
> +	case ETHTOOL_PHY_DOWNSHIFT:
> +		ret = bcm_phy_downshift_set(phydev, count);
> +		break;
> +	default:
> +		return -EOPNOTSUPP;
> +	}
> +
> +	if (ret)
> +		return ret;
> +
> +	/* Disable EEE advertisement since this prevents the PHY
> +	 * from successfully linking up, trigger auto-negotiation restart
> +	 * to let the MAC decide what to do.
> +	 */
> +	ret = bcm_phy_set_eee(phydev, count == DOWNSHIFT_DEV_DISABLE);
> +	if (ret)
> +		return ret;
> +
> +	return genphy_restart_aneg(phydev);
> +}
> +
> +static void bcm_omega_get_phy_stats(struct phy_device *phydev,
> +				    struct ethtool_stats *stats, u64 *data)
> +{
> +	struct bcm_omega_phy_priv *priv = phydev->priv;
> +
> +	bcm_phy_get_stats(phydev, priv->stats, stats, data);
> +}
> +
> +static int bcm_omega_probe(struct phy_device *phydev)
> +{
> +	struct bcm_omega_phy_priv *priv;
> +
> +	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
> +	if (!priv)
> +		return -ENOMEM;
> +
> +	phydev->priv = priv;
> +
> +	priv->stats = devm_kcalloc(&phydev->mdio.dev,
> +				   bcm_phy_get_sset_count(phydev), sizeof(u64),
> +				   GFP_KERNEL);
> +	if (!priv->stats)
> +		return -ENOMEM;
> +
> +	return 0;
> +}
> +
>   static struct phy_driver bcm_cygnus_phy_driver[] = {
>   {
>   	.phy_id        = PHY_ID_BCM_CYGNUS,
> @@ -132,10 +260,27 @@ static struct phy_driver bcm_cygnus_phy_driver[] = {
>   	.config_intr   = bcm_phy_config_intr,
>   	.suspend       = genphy_suspend,
>   	.resume        = bcm_cygnus_resume,
> -} };
> +}, {
> +	.phy_id		= PHY_ID_BCM_OMEGA,
> +	.phy_id_mask	= 0xfffffff0,
> +	.name		= "Broadcom Omega Combo GPHY",
> +	.features	= PHY_GBIT_FEATURES,
> +	.flags		= PHY_IS_INTERNAL,
> +	.config_init	= bcm_omega_config_init,
> +	.suspend	= genphy_suspend,
> +	.resume		= bcm_omega_resume,
> +	.get_tunable	= bcm_omega_get_tunable,
> +	.set_tunable	= bcm_omega_set_tunable,
> +	.get_sset_count	= bcm_phy_get_sset_count,
> +	.get_strings	= bcm_phy_get_strings,
> +	.get_stats	= bcm_omega_get_phy_stats,
> +	.probe		= bcm_omega_probe,
> +}
> +};
>   
>   static struct mdio_device_id __maybe_unused bcm_cygnus_phy_tbl[] = {
>   	{ PHY_ID_BCM_CYGNUS, 0xfffffff0, },
> +	{ PHY_ID_BCM_OMEGA, 0xfffffff0, },
>   	{ }
>   };
>   MODULE_DEVICE_TABLE(mdio, bcm_cygnus_phy_tbl);
> diff --git a/drivers/net/phy/bcm7xxx.c b/drivers/net/phy/bcm7xxx.c
> index dddeffa23aa1..a75e1b283541 100644
> --- a/drivers/net/phy/bcm7xxx.c
> +++ b/drivers/net/phy/bcm7xxx.c
> @@ -590,7 +590,6 @@ static struct phy_driver bcm7xxx_driver[] = {
>   	BCM7XXX_28NM_GPHY(PHY_ID_BCM7439, "Broadcom BCM7439"),
>   	BCM7XXX_28NM_GPHY(PHY_ID_BCM7439_2, "Broadcom BCM7439 (2)"),
>   	BCM7XXX_28NM_GPHY(PHY_ID_BCM7445, "Broadcom BCM7445"),
> -	BCM7XXX_28NM_GPHY(PHY_ID_BCM_OMEGA, "Broadcom Omega Combo GPHY"),
>   	BCM7XXX_40NM_EPHY(PHY_ID_BCM7346, "Broadcom BCM7346"),
>   	BCM7XXX_40NM_EPHY(PHY_ID_BCM7362, "Broadcom BCM7362"),
>   	BCM7XXX_40NM_EPHY(PHY_ID_BCM7425, "Broadcom BCM7425"),

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

* Re: [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver
  2019-03-20 19:53 [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
                   ` (2 preceding siblings ...)
  2019-03-20 20:51 ` [PATCH net-next 0/2] " Arun Parameswaran
@ 2019-03-21 20:41 ` David Miller
  3 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2019-03-21 20:41 UTC (permalink / raw)
  To: f.fainelli
  Cc: netdev, andrew, linux-kernel, hkallweit1,
	bcm-kernel-feedback-list, murali.policharla, arun.parameswaran

From: Florian Fainelli <f.fainelli@gmail.com>
Date: Wed, 20 Mar 2019 12:53:11 -0700

> In order to pave the way for adding some specific Omega PHY features
> that may not be desirable on other products covered by the bcm7xxx PHY
> driver, split the Omega PHY entry into the Cygnus PHY driver such that
> the PHY drivers are reflective of product lines/business units
> maintaining them within Broadcom.
> 
> No functional changes intended.

Series applied, thanks Florian.

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

end of thread, other threads:[~2019-03-21 20:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-20 19:53 [PATCH net-next 0/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
2019-03-20 19:53 ` [PATCH net-next 1/2] net: phy: Prepare for moving Omega out of bcm7xxx Florian Fainelli
2019-03-20 22:34   ` Scott Branden
2019-03-20 19:53 ` [PATCH net-next 2/2] net: phy: Move Omega PHY entry to Cygnus PHY driver Florian Fainelli
2019-03-20 22:35   ` Scott Branden
2019-03-20 20:51 ` [PATCH net-next 0/2] " Arun Parameswaran
2019-03-21 20:41 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).