All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] TI Ethernet PHY changes
@ 2020-04-28 19:26 Dan Murphy
  2020-04-28 19:26 ` [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits Dan Murphy
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Dan Murphy @ 2020-04-28 19:26 UTC (permalink / raw)
  To: u-boot

Hello

The addition of the DP83867 driver to uboot was done in a generic way that
made it a bit difficult to bring in new PHY drivers.  The difficulty came in the
config flags and the phy_init function.  The change is to make the flags and
init for the DP83867 more specific to the DP83867 device to make way to add
more TI PHYs to uBoot.

In addition the DP8382X PHY is a generic PHY driver that does not need any
special handling to establish a link.  Customers have requested that at the very
least there be a way to know if the PHY attached is the PHY that is connected
as "Generic PHY" is not really descriptive.  These patches adds the
registrations for TI Generic PHYs to associcate a TI PHY ID with a PHY name.

Porting PHY helper routines to set and clear bits to facilitate easier side
porting of ethernet kernel drivers to uBoot.

Dan

Dan Murphy (3):
  net: phy: Add helper routines to set and clear bits
  net: phy: Add support for TI PHY init
  net: phy: Add DP8382x phy registration to TI PHY init

*Note: I dropped the DP83869 patch for now.

 configs/am65x_evm_a53_defconfig      |   2 +-
 configs/am65x_hs_evm_a53_defconfig   |   2 +-
 configs/dra7xx_evm_defconfig         |   2 +-
 configs/dra7xx_hs_evm_defconfig      |   2 +-
 configs/dra7xx_hs_evm_usb_defconfig  |   2 +-
 configs/j721e_evm_a72_defconfig      |   2 +-
 configs/j721e_hs_evm_a72_defconfig   |   2 +-
 configs/k2g_evm_defconfig            |   2 +-
 configs/xilinx_versal_virt_defconfig |   2 +-
 configs/xilinx_zynqmp_virt_defconfig |   2 +-
 drivers/net/phy/Kconfig              |  15 ++++
 drivers/net/phy/Makefile             |   3 +-
 drivers/net/phy/dp83867.c            |   3 +-
 drivers/net/phy/ti_phy_init.c        | 109 +++++++++++++++++++++++++++
 drivers/net/phy/ti_phy_init.h        |  15 ++++
 include/phy.h                        |  80 ++++++++++++++++++++
 16 files changed, 233 insertions(+), 12 deletions(-)
 create mode 100644 drivers/net/phy/ti_phy_init.c
 create mode 100644 drivers/net/phy/ti_phy_init.h

-- 
2.25.1

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

* [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits
  2020-04-28 19:26 [PATCH v2 0/3] TI Ethernet PHY changes Dan Murphy
@ 2020-04-28 19:26 ` Dan Murphy
  2020-04-30  8:00   ` Michal Simek
  2020-04-28 19:26 ` [PATCH v2 2/3] net: phy: Add support for TI PHY init Dan Murphy
  2020-04-28 19:26 ` [PATCH v2 3/3] net: phy: Add DP8382x phy registration to " Dan Murphy
  2 siblings, 1 reply; 10+ messages in thread
From: Dan Murphy @ 2020-04-28 19:26 UTC (permalink / raw)
  To: u-boot

Add phy_set/clear_bit helper routines so that ported drivers from the
kernel can use these functions.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 include/phy.h | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

diff --git a/include/phy.h b/include/phy.h
index b5de14cbfc29..1a875b96edb7 100644
--- a/include/phy.h
+++ b/include/phy.h
@@ -170,6 +170,12 @@ struct fixed_link {
 	int asym_pause;
 };
 
+/**
+ * phy_read - Convenience function for reading a given PHY register
+ * @phydev: the phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: register number to read
+ */
 static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
 {
 	struct mii_dev *bus = phydev->bus;
@@ -182,6 +188,13 @@ static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
 	return bus->read(bus, phydev->addr, devad, regnum);
 }
 
+/**
+ * phy_write - Convenience function for writing a given PHY register
+ * @phydev: the phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: register number to write
+ * @val: value to write to @regnum
+ */
 static inline int phy_write(struct phy_device *phydev, int devad, int regnum,
 			u16 val)
 {
@@ -209,6 +222,13 @@ static inline void phy_mmd_start_indirect(struct phy_device *phydev, int devad,
 		  (devad | MII_MMD_CTRL_NOINCR));
 }
 
+/**
+ * phy_read_mmd - Convenience function for reading a register
+ * from an MMD on a given PHY.
+ * @phydev: The phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: The register on the MMD to read
+ */
 static inline int phy_read_mmd(struct phy_device *phydev, int devad,
 			       int regnum)
 {
@@ -233,6 +253,14 @@ static inline int phy_read_mmd(struct phy_device *phydev, int devad,
 	return phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA);
 }
 
+/**
+ * phy_write_mmd - Convenience function for writing a register
+ * on an MMD on a given PHY.
+ * @phydev: The phy_device struct
+ * @devad: The MMD to read from
+ * @regnum: The register on the MMD to read
+ * @val: value to write to @regnum
+ */
 static inline int phy_write_mmd(struct phy_device *phydev, int devad,
 				int regnum, u16 val)
 {
@@ -257,6 +285,58 @@ static inline int phy_write_mmd(struct phy_device *phydev, int devad,
 	return phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, val);
 }
 
+/**
+ * phy_set_bits_mmd - Convenience function for setting bits in a register
+ * on MMD
+ * @phydev: the phy_device struct
+ * @devad: the MMD containing register to modify
+ * @regnum: register number to modify
+ * @val: bits to set
+ */
+static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
+				   u32 regnum, u16 val)
+{
+	int value, ret;
+
+	value = phy_read_mmd(phydev, devad, regnum);
+	if (value < 0)
+		return value;
+
+	value |= val;
+
+	ret = phy_write_mmd(phydev, devad, regnum, value);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
+/**
+ * phy_clear_bits_mmd - Convenience function for clearing bits in a register
+ * on MMD
+ * @phydev: the phy_device struct
+ * @devad: the MMD containing register to modify
+ * @regnum: register number to modify
+ * @val: bits to clear
+ */
+static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
+				     u32 regnum, u16 val)
+{
+	int value, ret;
+
+	value = phy_read_mmd(phydev, devad, regnum);
+	if (value < 0)
+		return value;
+
+	value &= ~val;
+
+	ret = phy_write_mmd(phydev, devad, regnum, value);
+	if (ret < 0)
+		return ret;
+
+	return 0;
+}
+
 #ifdef CONFIG_PHYLIB_10G
 extern struct phy_driver gen10g_driver;
 
-- 
2.25.1

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

* [PATCH v2 2/3] net: phy: Add support for TI PHY init
  2020-04-28 19:26 [PATCH v2 0/3] TI Ethernet PHY changes Dan Murphy
  2020-04-28 19:26 ` [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits Dan Murphy
@ 2020-04-28 19:26 ` Dan Murphy
  2020-04-30  8:01   ` Michal Simek
  2020-04-28 19:26 ` [PATCH v2 3/3] net: phy: Add DP8382x phy registration to " Dan Murphy
  2 siblings, 1 reply; 10+ messages in thread
From: Dan Murphy @ 2020-04-28 19:26 UTC (permalink / raw)
  To: u-boot

ti_phy_init function was allocated to the DP83867 PHY.  This function
name is to generic for a specific PHY.  The function can be moved to a
TI specific file that can register all TI PHYs that are defined in the
defconfig.  The ti_phy_init file will contain all TI PHYs initialization
so that only phy_ti_init can be called from the framework.

In addition to the above the config flag for the DP83867 needs to be changed
in the Kconfig and dependent defconfig files. The config flag that was
used for the DP83867 was also generic in nature so a more specific
config flag for the DP83867 was created.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 configs/am65x_evm_a53_defconfig      |  2 +-
 configs/am65x_hs_evm_a53_defconfig   |  2 +-
 configs/dra7xx_evm_defconfig         |  2 +-
 configs/dra7xx_hs_evm_defconfig      |  2 +-
 configs/dra7xx_hs_evm_usb_defconfig  |  2 +-
 configs/j721e_evm_a72_defconfig      |  2 +-
 configs/j721e_hs_evm_a72_defconfig   |  2 +-
 configs/k2g_evm_defconfig            |  2 +-
 configs/xilinx_versal_virt_defconfig |  2 +-
 configs/xilinx_zynqmp_virt_defconfig |  2 +-
 drivers/net/phy/Kconfig              | 15 +++++++++++++++
 drivers/net/phy/Makefile             |  3 ++-
 drivers/net/phy/dp83867.c            |  3 ++-
 drivers/net/phy/ti_phy_init.c        | 18 ++++++++++++++++++
 drivers/net/phy/ti_phy_init.h        | 15 +++++++++++++++
 15 files changed, 62 insertions(+), 12 deletions(-)
 create mode 100644 drivers/net/phy/ti_phy_init.c
 create mode 100644 drivers/net/phy/ti_phy_init.h

diff --git a/configs/am65x_evm_a53_defconfig b/configs/am65x_evm_a53_defconfig
index 542bbd992c53..c8cc9b2f7d8d 100644
--- a/configs/am65x_evm_a53_defconfig
+++ b/configs/am65x_evm_a53_defconfig
@@ -101,7 +101,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_SPI_FLASH_MTD=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_FIXED=y
 CONFIG_DM_ETH=y
 CONFIG_E1000=y
diff --git a/configs/am65x_hs_evm_a53_defconfig b/configs/am65x_hs_evm_a53_defconfig
index 9f43cee39611..738bd01b059f 100644
--- a/configs/am65x_hs_evm_a53_defconfig
+++ b/configs/am65x_hs_evm_a53_defconfig
@@ -103,7 +103,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_SPI_FLASH_MTD=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_FIXED=y
 CONFIG_DM_ETH=y
 CONFIG_E1000=y
diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig
index 4d765da4e052..9ad462cdc6de 100644
--- a/configs/dra7xx_evm_defconfig
+++ b/configs/dra7xx_evm_defconfig
@@ -86,7 +86,7 @@ CONFIG_DM_SPI_FLASH=y
 CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=76800000
 CONFIG_SPI_FLASH_SPANSION=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
 CONFIG_MII=y
diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig
index c25d4ce5c142..9aa452460765 100644
--- a/configs/dra7xx_hs_evm_defconfig
+++ b/configs/dra7xx_hs_evm_defconfig
@@ -89,7 +89,7 @@ CONFIG_DM_SPI_FLASH=y
 CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=76800000
 CONFIG_SPI_FLASH_SPANSION=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
 CONFIG_MII=y
diff --git a/configs/dra7xx_hs_evm_usb_defconfig b/configs/dra7xx_hs_evm_usb_defconfig
index 8e74496b2ccd..d282468212e9 100644
--- a/configs/dra7xx_hs_evm_usb_defconfig
+++ b/configs/dra7xx_hs_evm_usb_defconfig
@@ -87,7 +87,7 @@ CONFIG_SF_DEFAULT_MODE=0
 CONFIG_SF_DEFAULT_SPEED=76800000
 CONFIG_SPI_FLASH_BAR=y
 CONFIG_SPI_FLASH_SPANSION=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_DM_ETH=y
 CONFIG_PHY_GIGE=y
 CONFIG_MII=y
diff --git a/configs/j721e_evm_a72_defconfig b/configs/j721e_evm_a72_defconfig
index e9e82bb4309d..29ae8d720753 100644
--- a/configs/j721e_evm_a72_defconfig
+++ b/configs/j721e_evm_a72_defconfig
@@ -124,7 +124,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_SPI_FLASH_MTD=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_FIXED=y
 CONFIG_DM_ETH=y
 CONFIG_TI_AM65_CPSW_NUSS=y
diff --git a/configs/j721e_hs_evm_a72_defconfig b/configs/j721e_hs_evm_a72_defconfig
index a723e2718e5e..7174fda72a01 100644
--- a/configs/j721e_hs_evm_a72_defconfig
+++ b/configs/j721e_hs_evm_a72_defconfig
@@ -114,7 +114,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
 CONFIG_SPI_FLASH_STMICRO=y
 # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
 CONFIG_SPI_FLASH_MTD=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_FIXED=y
 CONFIG_DM_ETH=y
 CONFIG_TI_AM65_CPSW_NUSS=y
diff --git a/configs/k2g_evm_defconfig b/configs/k2g_evm_defconfig
index 5abf5faa450e..14cf1b997d91 100644
--- a/configs/k2g_evm_defconfig
+++ b/configs/k2g_evm_defconfig
@@ -58,7 +58,7 @@ CONFIG_PHYLIB=y
 CONFIG_PHY_MARVELL=y
 CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ8XXX=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_DM_ETH=y
 CONFIG_MII=y
 CONFIG_DRIVER_TI_KEYSTONE_NET=y
diff --git a/configs/xilinx_versal_virt_defconfig b/configs/xilinx_versal_virt_defconfig
index e8c349261207..dcd841b8e299 100644
--- a/configs/xilinx_versal_virt_defconfig
+++ b/configs/xilinx_versal_virt_defconfig
@@ -61,7 +61,7 @@ CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_PHY_MARVELL=y
 CONFIG_PHY_NATSEMI=y
 CONFIG_PHY_REALTEK=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_VITESSE=y
 CONFIG_PHY_FIXED=y
 CONFIG_PHY_GIGE=y
diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig
index 7b09edd78e1b..b7b671282a87 100644
--- a/configs/xilinx_zynqmp_virt_defconfig
+++ b/configs/xilinx_zynqmp_virt_defconfig
@@ -101,7 +101,7 @@ CONFIG_PHY_MICREL=y
 CONFIG_PHY_MICREL_KSZ90X1=y
 CONFIG_PHY_NATSEMI=y
 CONFIG_PHY_REALTEK=y
-CONFIG_PHY_TI=y
+CONFIG_PHY_TI_DP83867=y
 CONFIG_PHY_VITESSE=y
 CONFIG_PHY_XILINX_GMII2RGMII=y
 CONFIG_PHY_FIXED=y
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index d1f049e62ab7..a8ae1db4afe2 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -243,6 +243,21 @@ config PHY_TERANETICS
 
 config PHY_TI
 	bool "Texas Instruments Ethernet PHYs support"
+	---help---
+	  Adds PHY registration support for TI PHYs.
+
+config PHY_TI_GENERIC
+	select PHY_TI
+	bool "Texas Instruments Generic Ethernet PHYs support"
+	---help---
+	  Adds support for Generic TI PHYs that don't need special handling but
+	  the PHY name is associated with a PHY ID.
+
+config PHY_TI_DP83867
+	select PHY_TI
+	bool "Texas Instruments Ethernet DP83867 PHY support"
+	---help---
+	  Adds support for the TI DP83867 1Gbit PHY.
 
 config PHY_VITESSE
 	bool "Vitesse Ethernet PHYs support"
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index 1d81516ecd1d..6e722331f1bf 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -25,7 +25,8 @@ obj-$(CONFIG_PHY_NATSEMI) += natsemi.o
 obj-$(CONFIG_PHY_REALTEK) += realtek.o
 obj-$(CONFIG_PHY_SMSC) += smsc.o
 obj-$(CONFIG_PHY_TERANETICS) += teranetics.o
-obj-$(CONFIG_PHY_TI) += dp83867.o
+obj-$(CONFIG_PHY_TI) += ti_phy_init.o
+obj-$(CONFIG_PHY_TI_DP83867) += dp83867.o
 obj-$(CONFIG_PHY_XILINX) += xilinx_phy.o
 obj-$(CONFIG_PHY_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o
 obj-$(CONFIG_PHY_VITESSE) += vitesse.o
diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c
index 50804c130efd..c9ed4a44d4db 100644
--- a/drivers/net/phy/dp83867.c
+++ b/drivers/net/phy/dp83867.c
@@ -12,6 +12,7 @@
 #include <dm.h>
 #include <dt-bindings/net/ti-dp83867.h>
 
+#include "ti_phy_init.h"
 
 /* TI DP83867 */
 #define DP83867_DEVADDR		0x1f
@@ -428,7 +429,7 @@ static struct phy_driver DP83867_driver = {
 	.shutdown = &genphy_shutdown,
 };
 
-int phy_ti_init(void)
+int phy_dp83867_init(void)
 {
 	phy_register(&DP83867_driver);
 	return 0;
diff --git a/drivers/net/phy/ti_phy_init.c b/drivers/net/phy/ti_phy_init.c
new file mode 100644
index 000000000000..277b29a26342
--- /dev/null
+++ b/drivers/net/phy/ti_phy_init.c
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * TI Generic PHY Init to register any TI Ethernet PHYs
+ *
+ * Author: Dan Murphy <dmurphy@ti.com>
+ *
+ * Copyright (C) 2019-20 Texas Instruments Inc.
+ */
+
+#include "ti_phy_init.h"
+
+int phy_ti_init(void)
+{
+#ifdef CONFIG_PHY_TI_DP83867
+	phy_dp83867_init();
+#endif
+	return 0;
+}
diff --git a/drivers/net/phy/ti_phy_init.h b/drivers/net/phy/ti_phy_init.h
new file mode 100644
index 000000000000..6c7f6c640a79
--- /dev/null
+++ b/drivers/net/phy/ti_phy_init.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * TI Generic Ethernet PHY
+ *
+ * Author: Dan Murphy <dmurphy@ti.com>
+ *
+ * Copyright (C) 2019-20 Texas Instruments Inc.
+ */
+
+#ifndef _TI_GEN_PHY_H
+#define _TI_GEN_PHY_H
+
+int phy_dp83867_init(void);
+
+#endif /* _TI_GEN_PHY_H */
-- 
2.25.1

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

* [PATCH v2 3/3] net: phy: Add DP8382x phy registration to TI PHY init
  2020-04-28 19:26 [PATCH v2 0/3] TI Ethernet PHY changes Dan Murphy
  2020-04-28 19:26 ` [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits Dan Murphy
  2020-04-28 19:26 ` [PATCH v2 2/3] net: phy: Add support for TI PHY init Dan Murphy
@ 2020-04-28 19:26 ` Dan Murphy
  2020-04-30  8:04   ` Michal Simek
  2 siblings, 1 reply; 10+ messages in thread
From: Dan Murphy @ 2020-04-28 19:26 UTC (permalink / raw)
  To: u-boot

Add the DP8382X generic PHY registration to the TI PHY init file.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
---
 drivers/net/phy/ti_phy_init.c | 91 +++++++++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/drivers/net/phy/ti_phy_init.c b/drivers/net/phy/ti_phy_init.c
index 277b29a26342..47f32a528361 100644
--- a/drivers/net/phy/ti_phy_init.c
+++ b/drivers/net/phy/ti_phy_init.c
@@ -7,12 +7,103 @@
  * Copyright (C) 2019-20 Texas Instruments Inc.
  */
 
+
+#include <phy.h>
 #include "ti_phy_init.h"
 
+#define DP83822_PHY_ID	        0x2000a240
+#define DP83825S_PHY_ID		0x2000a140
+#define DP83825I_PHY_ID		0x2000a150
+#define DP83825CM_PHY_ID	0x2000a160
+#define DP83825CS_PHY_ID	0x2000a170
+#define DP83826C_PHY_ID		0x2000a130
+#define DP83826NC_PHY_ID	0x2000a110
+
+#ifdef CONFIG_PHY_TI_GENERIC
+static struct phy_driver dp83822_driver = {
+	.name = "TI DP83822",
+	.uid = DP83822_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver dp83825s_driver = {
+	.name = "TI DP83825S",
+	.uid = DP83825S_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver dp83825i_driver = {
+	.name = "TI DP83825I",
+	.uid = DP83825I_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver dp83825m_driver = {
+	.name = "TI DP83825M",
+	.uid = DP83825CM_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver dp83825cs_driver = {
+	.name = "TI DP83825CS",
+	.uid = DP83825CS_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+
+static struct phy_driver dp83826c_driver = {
+	.name = "TI DP83826C",
+	.uid = DP83826C_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+static struct phy_driver dp83826nc_driver = {
+	.name = "TI DP83826NC",
+	.uid = DP83826NC_PHY_ID,
+	.mask = 0xfffffff0,
+	.features = PHY_BASIC_FEATURES,
+	.config = &genphy_config_aneg,
+	.startup = &genphy_startup,
+	.shutdown = &genphy_shutdown,
+};
+#endif /* CONFIG_PHY_TI_GENERIC */
+
 int phy_ti_init(void)
 {
 #ifdef CONFIG_PHY_TI_DP83867
 	phy_dp83867_init();
 #endif
+
+#ifdef CONFIG_PHY_TI_GENERIC
+	phy_register(&dp83822_driver);
+	phy_register(&dp83825s_driver);
+	phy_register(&dp83825i_driver);
+	phy_register(&dp83825m_driver);
+	phy_register(&dp83825cs_driver);
+	phy_register(&dp83826c_driver);
+	phy_register(&dp83826nc_driver);
+#endif
 	return 0;
 }
-- 
2.25.1

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

* [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits
  2020-04-28 19:26 ` [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits Dan Murphy
@ 2020-04-30  8:00   ` Michal Simek
  2020-04-30 11:43     ` Dan Murphy
  0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2020-04-30  8:00 UTC (permalink / raw)
  To: u-boot

On 28. 04. 20 21:26, Dan Murphy wrote:
> Add phy_set/clear_bit helper routines so that ported drivers from the
> kernel can use these functions.
> 
> Signed-off-by: Dan Murphy <dmurphy@ti.com>
> ---
>  include/phy.h | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 80 insertions(+)
> 
> diff --git a/include/phy.h b/include/phy.h
> index b5de14cbfc29..1a875b96edb7 100644
> --- a/include/phy.h
> +++ b/include/phy.h
> @@ -170,6 +170,12 @@ struct fixed_link {
>  	int asym_pause;
>  };
>  
> +/**
> + * phy_read - Convenience function for reading a given PHY register
> + * @phydev: the phy_device struct
> + * @devad: The MMD to read from
> + * @regnum: register number to read
> + */
>  static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
>  {
>  	struct mii_dev *bus = phydev->bus;
> @@ -182,6 +188,13 @@ static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
>  	return bus->read(bus, phydev->addr, devad, regnum);
>  }
>  
> +/**
> + * phy_write - Convenience function for writing a given PHY register
> + * @phydev: the phy_device struct
> + * @devad: The MMD to read from
> + * @regnum: register number to write
> + * @val: value to write to @regnum
> + */
>  static inline int phy_write(struct phy_device *phydev, int devad, int regnum,
>  			u16 val)
>  {
> @@ -209,6 +222,13 @@ static inline void phy_mmd_start_indirect(struct phy_device *phydev, int devad,
>  		  (devad | MII_MMD_CTRL_NOINCR));
>  }
>  
> +/**
> + * phy_read_mmd - Convenience function for reading a register
> + * from an MMD on a given PHY.
> + * @phydev: The phy_device struct
> + * @devad: The MMD to read from
> + * @regnum: The register on the MMD to read
> + */
>  static inline int phy_read_mmd(struct phy_device *phydev, int devad,
>  			       int regnum)
>  {
> @@ -233,6 +253,14 @@ static inline int phy_read_mmd(struct phy_device *phydev, int devad,
>  	return phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA);
>  }
>  
> +/**
> + * phy_write_mmd - Convenience function for writing a register
> + * on an MMD on a given PHY.
> + * @phydev: The phy_device struct
> + * @devad: The MMD to read from
> + * @regnum: The register on the MMD to read
> + * @val: value to write to @regnum
> + */
>  static inline int phy_write_mmd(struct phy_device *phydev, int devad,
>  				int regnum, u16 val)
>  {
> @@ -257,6 +285,58 @@ static inline int phy_write_mmd(struct phy_device *phydev, int devad,
>  	return phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, val);
>  }
>  
> +/**
> + * phy_set_bits_mmd - Convenience function for setting bits in a register
> + * on MMD
> + * @phydev: the phy_device struct
> + * @devad: the MMD containing register to modify
> + * @regnum: register number to modify
> + * @val: bits to set
> + */
> +static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
> +				   u32 regnum, u16 val)
> +{
> +	int value, ret;
> +
> +	value = phy_read_mmd(phydev, devad, regnum);
> +	if (value < 0)
> +		return value;
> +
> +	value |= val;
> +
> +	ret = phy_write_mmd(phydev, devad, regnum, value);
> +	if (ret < 0)
> +		return ret;
> +
> +	return 0;
> +}
> +
> +/**
> + * phy_clear_bits_mmd - Convenience function for clearing bits in a register
> + * on MMD
> + * @phydev: the phy_device struct
> + * @devad: the MMD containing register to modify
> + * @regnum: register number to modify
> + * @val: bits to clear
> + */
> +static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
> +				     u32 regnum, u16 val)
> +{
> +	int value, ret;
> +
> +	value = phy_read_mmd(phydev, devad, regnum);
> +	if (value < 0)
> +		return value;
> +
> +	value &= ~val;
> +
> +	ret = phy_write_mmd(phydev, devad, regnum, value);
> +	if (ret < 0)
> +		return ret;
> +
> +	return 0;
> +}
> +
>  #ifdef CONFIG_PHYLIB_10G
>  extern struct phy_driver gen10g_driver;
>  
> 

Better would be to have one patch just with adding missing kernel-doc.
It is not described in commit message too.

And second to add that functions.

And there are errors there.

[u-boot](debian)$ ./scripts/kernel-doc -v -man include/phy.h > /dev/null
include/phy.h:174: info: Scanning doc for phy_read
include/phy.h:180: warning: No description found for return value of
'phy_read'
include/phy.h:192: info: Scanning doc for phy_write
include/phy.h:200: warning: No description found for return value of
'phy_write'
include/phy.h:226: info: Scanning doc for phy_read_mmd
include/phy.h:234: warning: No description found for return value of
'phy_read_mmd'
include/phy.h:257: info: Scanning doc for phy_write_mmd
include/phy.h:266: warning: No description found for return value of
'phy_write_mmd'
include/phy.h:289: info: Scanning doc for phy_set_bits_mmd
include/phy.h:298: warning: No description found for return value of
'phy_set_bits_mmd'
include/phy.h:315: info: Scanning doc for phy_clear_bits_mmd
include/phy.h:324: warning: No description found for return value of
'phy_clear_bits_mmd'


Thanks,
Michal

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

* [PATCH v2 2/3] net: phy: Add support for TI PHY init
  2020-04-28 19:26 ` [PATCH v2 2/3] net: phy: Add support for TI PHY init Dan Murphy
@ 2020-04-30  8:01   ` Michal Simek
  0 siblings, 0 replies; 10+ messages in thread
From: Michal Simek @ 2020-04-30  8:01 UTC (permalink / raw)
  To: u-boot

On 28. 04. 20 21:26, Dan Murphy wrote:
> ti_phy_init function was allocated to the DP83867 PHY.  This function
> name is to generic for a specific PHY.  The function can be moved to a
> TI specific file that can register all TI PHYs that are defined in the
> defconfig.  The ti_phy_init file will contain all TI PHYs initialization
> so that only phy_ti_init can be called from the framework.
> 
> In addition to the above the config flag for the DP83867 needs to be changed
> in the Kconfig and dependent defconfig files. The config flag that was
> used for the DP83867 was also generic in nature so a more specific
> config flag for the DP83867 was created.
> 
> Signed-off-by: Dan Murphy <dmurphy@ti.com>
> ---
>  configs/am65x_evm_a53_defconfig      |  2 +-
>  configs/am65x_hs_evm_a53_defconfig   |  2 +-
>  configs/dra7xx_evm_defconfig         |  2 +-
>  configs/dra7xx_hs_evm_defconfig      |  2 +-
>  configs/dra7xx_hs_evm_usb_defconfig  |  2 +-
>  configs/j721e_evm_a72_defconfig      |  2 +-
>  configs/j721e_hs_evm_a72_defconfig   |  2 +-
>  configs/k2g_evm_defconfig            |  2 +-
>  configs/xilinx_versal_virt_defconfig |  2 +-
>  configs/xilinx_zynqmp_virt_defconfig |  2 +-
>  drivers/net/phy/Kconfig              | 15 +++++++++++++++
>  drivers/net/phy/Makefile             |  3 ++-
>  drivers/net/phy/dp83867.c            |  3 ++-
>  drivers/net/phy/ti_phy_init.c        | 18 ++++++++++++++++++
>  drivers/net/phy/ti_phy_init.h        | 15 +++++++++++++++
>  15 files changed, 62 insertions(+), 12 deletions(-)
>  create mode 100644 drivers/net/phy/ti_phy_init.c
>  create mode 100644 drivers/net/phy/ti_phy_init.h
> 
> diff --git a/configs/am65x_evm_a53_defconfig b/configs/am65x_evm_a53_defconfig
> index 542bbd992c53..c8cc9b2f7d8d 100644
> --- a/configs/am65x_evm_a53_defconfig
> +++ b/configs/am65x_evm_a53_defconfig
> @@ -101,7 +101,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
>  CONFIG_SPI_FLASH_STMICRO=y
>  # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
>  CONFIG_SPI_FLASH_MTD=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_FIXED=y
>  CONFIG_DM_ETH=y
>  CONFIG_E1000=y
> diff --git a/configs/am65x_hs_evm_a53_defconfig b/configs/am65x_hs_evm_a53_defconfig
> index 9f43cee39611..738bd01b059f 100644
> --- a/configs/am65x_hs_evm_a53_defconfig
> +++ b/configs/am65x_hs_evm_a53_defconfig
> @@ -103,7 +103,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
>  CONFIG_SPI_FLASH_STMICRO=y
>  # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
>  CONFIG_SPI_FLASH_MTD=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_FIXED=y
>  CONFIG_DM_ETH=y
>  CONFIG_E1000=y
> diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig
> index 4d765da4e052..9ad462cdc6de 100644
> --- a/configs/dra7xx_evm_defconfig
> +++ b/configs/dra7xx_evm_defconfig
> @@ -86,7 +86,7 @@ CONFIG_DM_SPI_FLASH=y
>  CONFIG_SF_DEFAULT_MODE=0
>  CONFIG_SF_DEFAULT_SPEED=76800000
>  CONFIG_SPI_FLASH_SPANSION=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_DM_ETH=y
>  CONFIG_PHY_GIGE=y
>  CONFIG_MII=y
> diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig
> index c25d4ce5c142..9aa452460765 100644
> --- a/configs/dra7xx_hs_evm_defconfig
> +++ b/configs/dra7xx_hs_evm_defconfig
> @@ -89,7 +89,7 @@ CONFIG_DM_SPI_FLASH=y
>  CONFIG_SF_DEFAULT_MODE=0
>  CONFIG_SF_DEFAULT_SPEED=76800000
>  CONFIG_SPI_FLASH_SPANSION=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_DM_ETH=y
>  CONFIG_PHY_GIGE=y
>  CONFIG_MII=y
> diff --git a/configs/dra7xx_hs_evm_usb_defconfig b/configs/dra7xx_hs_evm_usb_defconfig
> index 8e74496b2ccd..d282468212e9 100644
> --- a/configs/dra7xx_hs_evm_usb_defconfig
> +++ b/configs/dra7xx_hs_evm_usb_defconfig
> @@ -87,7 +87,7 @@ CONFIG_SF_DEFAULT_MODE=0
>  CONFIG_SF_DEFAULT_SPEED=76800000
>  CONFIG_SPI_FLASH_BAR=y
>  CONFIG_SPI_FLASH_SPANSION=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_DM_ETH=y
>  CONFIG_PHY_GIGE=y
>  CONFIG_MII=y
> diff --git a/configs/j721e_evm_a72_defconfig b/configs/j721e_evm_a72_defconfig
> index e9e82bb4309d..29ae8d720753 100644
> --- a/configs/j721e_evm_a72_defconfig
> +++ b/configs/j721e_evm_a72_defconfig
> @@ -124,7 +124,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
>  CONFIG_SPI_FLASH_STMICRO=y
>  # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
>  CONFIG_SPI_FLASH_MTD=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_FIXED=y
>  CONFIG_DM_ETH=y
>  CONFIG_TI_AM65_CPSW_NUSS=y
> diff --git a/configs/j721e_hs_evm_a72_defconfig b/configs/j721e_hs_evm_a72_defconfig
> index a723e2718e5e..7174fda72a01 100644
> --- a/configs/j721e_hs_evm_a72_defconfig
> +++ b/configs/j721e_hs_evm_a72_defconfig
> @@ -114,7 +114,7 @@ CONFIG_SPI_FLASH_SFDP_SUPPORT
>  CONFIG_SPI_FLASH_STMICRO=y
>  # CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
>  CONFIG_SPI_FLASH_MTD=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_FIXED=y
>  CONFIG_DM_ETH=y
>  CONFIG_TI_AM65_CPSW_NUSS=y
> diff --git a/configs/k2g_evm_defconfig b/configs/k2g_evm_defconfig
> index 5abf5faa450e..14cf1b997d91 100644
> --- a/configs/k2g_evm_defconfig
> +++ b/configs/k2g_evm_defconfig
> @@ -58,7 +58,7 @@ CONFIG_PHYLIB=y
>  CONFIG_PHY_MARVELL=y
>  CONFIG_PHY_MICREL=y
>  CONFIG_PHY_MICREL_KSZ8XXX=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_DM_ETH=y
>  CONFIG_MII=y
>  CONFIG_DRIVER_TI_KEYSTONE_NET=y
> diff --git a/configs/xilinx_versal_virt_defconfig b/configs/xilinx_versal_virt_defconfig
> index e8c349261207..dcd841b8e299 100644
> --- a/configs/xilinx_versal_virt_defconfig
> +++ b/configs/xilinx_versal_virt_defconfig
> @@ -61,7 +61,7 @@ CONFIG_SPI_FLASH_WINBOND=y
>  CONFIG_PHY_MARVELL=y
>  CONFIG_PHY_NATSEMI=y
>  CONFIG_PHY_REALTEK=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_VITESSE=y
>  CONFIG_PHY_FIXED=y
>  CONFIG_PHY_GIGE=y
> diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig
> index 7b09edd78e1b..b7b671282a87 100644
> --- a/configs/xilinx_zynqmp_virt_defconfig
> +++ b/configs/xilinx_zynqmp_virt_defconfig
> @@ -101,7 +101,7 @@ CONFIG_PHY_MICREL=y
>  CONFIG_PHY_MICREL_KSZ90X1=y
>  CONFIG_PHY_NATSEMI=y
>  CONFIG_PHY_REALTEK=y
> -CONFIG_PHY_TI=y
> +CONFIG_PHY_TI_DP83867=y
>  CONFIG_PHY_VITESSE=y
>  CONFIG_PHY_XILINX_GMII2RGMII=y
>  CONFIG_PHY_FIXED=y
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index d1f049e62ab7..a8ae1db4afe2 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -243,6 +243,21 @@ config PHY_TERANETICS
>  
>  config PHY_TI
>  	bool "Texas Instruments Ethernet PHYs support"
> +	---help---
> +	  Adds PHY registration support for TI PHYs.
> +
> +config PHY_TI_GENERIC
> +	select PHY_TI
> +	bool "Texas Instruments Generic Ethernet PHYs support"
> +	---help---
> +	  Adds support for Generic TI PHYs that don't need special handling but
> +	  the PHY name is associated with a PHY ID.
> +
> +config PHY_TI_DP83867
> +	select PHY_TI
> +	bool "Texas Instruments Ethernet DP83867 PHY support"
> +	---help---
> +	  Adds support for the TI DP83867 1Gbit PHY.
>  
>  config PHY_VITESSE
>  	bool "Vitesse Ethernet PHYs support"
> diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
> index 1d81516ecd1d..6e722331f1bf 100644
> --- a/drivers/net/phy/Makefile
> +++ b/drivers/net/phy/Makefile
> @@ -25,7 +25,8 @@ obj-$(CONFIG_PHY_NATSEMI) += natsemi.o
>  obj-$(CONFIG_PHY_REALTEK) += realtek.o
>  obj-$(CONFIG_PHY_SMSC) += smsc.o
>  obj-$(CONFIG_PHY_TERANETICS) += teranetics.o
> -obj-$(CONFIG_PHY_TI) += dp83867.o
> +obj-$(CONFIG_PHY_TI) += ti_phy_init.o
> +obj-$(CONFIG_PHY_TI_DP83867) += dp83867.o
>  obj-$(CONFIG_PHY_XILINX) += xilinx_phy.o
>  obj-$(CONFIG_PHY_XILINX_GMII2RGMII) += xilinx_gmii2rgmii.o
>  obj-$(CONFIG_PHY_VITESSE) += vitesse.o
> diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c
> index 50804c130efd..c9ed4a44d4db 100644
> --- a/drivers/net/phy/dp83867.c
> +++ b/drivers/net/phy/dp83867.c
> @@ -12,6 +12,7 @@
>  #include <dm.h>
>  #include <dt-bindings/net/ti-dp83867.h>
>  
> +#include "ti_phy_init.h"
>  
>  /* TI DP83867 */
>  #define DP83867_DEVADDR		0x1f
> @@ -428,7 +429,7 @@ static struct phy_driver DP83867_driver = {
>  	.shutdown = &genphy_shutdown,
>  };
>  
> -int phy_ti_init(void)
> +int phy_dp83867_init(void)
>  {
>  	phy_register(&DP83867_driver);
>  	return 0;
> diff --git a/drivers/net/phy/ti_phy_init.c b/drivers/net/phy/ti_phy_init.c
> new file mode 100644
> index 000000000000..277b29a26342
> --- /dev/null
> +++ b/drivers/net/phy/ti_phy_init.c
> @@ -0,0 +1,18 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * TI Generic PHY Init to register any TI Ethernet PHYs
> + *
> + * Author: Dan Murphy <dmurphy@ti.com>
> + *
> + * Copyright (C) 2019-20 Texas Instruments Inc.
> + */
> +
> +#include "ti_phy_init.h"
> +
> +int phy_ti_init(void)
> +{
> +#ifdef CONFIG_PHY_TI_DP83867
> +	phy_dp83867_init();
> +#endif
> +	return 0;
> +}
> diff --git a/drivers/net/phy/ti_phy_init.h b/drivers/net/phy/ti_phy_init.h
> new file mode 100644
> index 000000000000..6c7f6c640a79
> --- /dev/null
> +++ b/drivers/net/phy/ti_phy_init.h
> @@ -0,0 +1,15 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * TI Generic Ethernet PHY
> + *
> + * Author: Dan Murphy <dmurphy@ti.com>
> + *
> + * Copyright (C) 2019-20 Texas Instruments Inc.
> + */
> +
> +#ifndef _TI_GEN_PHY_H
> +#define _TI_GEN_PHY_H
> +
> +int phy_dp83867_init(void);
> +
> +#endif /* _TI_GEN_PHY_H */
> 

Acked-by: Michal Simek <michal.simek@xilinx.com>

Thanks,
Michal

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

* [PATCH v2 3/3] net: phy: Add DP8382x phy registration to TI PHY init
  2020-04-28 19:26 ` [PATCH v2 3/3] net: phy: Add DP8382x phy registration to " Dan Murphy
@ 2020-04-30  8:04   ` Michal Simek
  2020-04-30 11:47     ` Dan Murphy
  0 siblings, 1 reply; 10+ messages in thread
From: Michal Simek @ 2020-04-30  8:04 UTC (permalink / raw)
  To: u-boot

On 28. 04. 20 21:26, Dan Murphy wrote:
> Add the DP8382X generic PHY registration to the TI PHY init file.
> 
> Signed-off-by: Dan Murphy <dmurphy@ti.com>
> ---
>  drivers/net/phy/ti_phy_init.c | 91 +++++++++++++++++++++++++++++++++++
>  1 file changed, 91 insertions(+)
> 
> diff --git a/drivers/net/phy/ti_phy_init.c b/drivers/net/phy/ti_phy_init.c
> index 277b29a26342..47f32a528361 100644
> --- a/drivers/net/phy/ti_phy_init.c
> +++ b/drivers/net/phy/ti_phy_init.c
> @@ -7,12 +7,103 @@
>   * Copyright (C) 2019-20 Texas Instruments Inc.
>   */
>  
> +

Useless change.

> +#include <phy.h>
>  #include "ti_phy_init.h"
>  
> +#define DP83822_PHY_ID	        0x2000a240
> +#define DP83825S_PHY_ID		0x2000a140
> +#define DP83825I_PHY_ID		0x2000a150
> +#define DP83825CM_PHY_ID	0x2000a160
> +#define DP83825CS_PHY_ID	0x2000a170
> +#define DP83826C_PHY_ID		0x2000a130
> +#define DP83826NC_PHY_ID	0x2000a110

nit: Can't see value to have these macros here.

> +
> +#ifdef CONFIG_PHY_TI_GENERIC
> +static struct phy_driver dp83822_driver = {
> +	.name = "TI DP83822",
> +	.uid = DP83822_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +
> +static struct phy_driver dp83825s_driver = {
> +	.name = "TI DP83825S",
> +	.uid = DP83825S_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +
> +static struct phy_driver dp83825i_driver = {
> +	.name = "TI DP83825I",
> +	.uid = DP83825I_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +
> +static struct phy_driver dp83825m_driver = {
> +	.name = "TI DP83825M",
> +	.uid = DP83825CM_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +
> +static struct phy_driver dp83825cs_driver = {
> +	.name = "TI DP83825CS",
> +	.uid = DP83825CS_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +
> +static struct phy_driver dp83826c_driver = {
> +	.name = "TI DP83826C",
> +	.uid = DP83826C_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +static struct phy_driver dp83826nc_driver = {
> +	.name = "TI DP83826NC",
> +	.uid = DP83826NC_PHY_ID,
> +	.mask = 0xfffffff0,
> +	.features = PHY_BASIC_FEATURES,
> +	.config = &genphy_config_aneg,
> +	.startup = &genphy_startup,
> +	.shutdown = &genphy_shutdown,
> +};
> +#endif /* CONFIG_PHY_TI_GENERIC */
> +
>  int phy_ti_init(void)
>  {
>  #ifdef CONFIG_PHY_TI_DP83867
>  	phy_dp83867_init();
>  #endif
> +
> +#ifdef CONFIG_PHY_TI_GENERIC
> +	phy_register(&dp83822_driver);
> +	phy_register(&dp83825s_driver);
> +	phy_register(&dp83825i_driver);
> +	phy_register(&dp83825m_driver);
> +	phy_register(&dp83825cs_driver);
> +	phy_register(&dp83826c_driver);
> +	phy_register(&dp83826nc_driver);
> +#endif
>  	return 0;
>  }
> 

When you remove that additional empty line feel free to add my
Acked-by: Michal Simek <michal.simek@xilinx.com>

Thanks,
Michal

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

* [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits
  2020-04-30  8:00   ` Michal Simek
@ 2020-04-30 11:43     ` Dan Murphy
  0 siblings, 0 replies; 10+ messages in thread
From: Dan Murphy @ 2020-04-30 11:43 UTC (permalink / raw)
  To: u-boot

Michal

On 4/30/20 3:00 AM, Michal Simek wrote:
> On 28. 04. 20 21:26, Dan Murphy wrote:
>> Add phy_set/clear_bit helper routines so that ported drivers from the
>> kernel can use these functions.
>>
>> Signed-off-by: Dan Murphy <dmurphy@ti.com>
>> ---
>>   include/phy.h | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 80 insertions(+)
>>
>> diff --git a/include/phy.h b/include/phy.h
>> index b5de14cbfc29..1a875b96edb7 100644
>> --- a/include/phy.h
>> +++ b/include/phy.h
>> @@ -170,6 +170,12 @@ struct fixed_link {
>>   	int asym_pause;
>>   };
>>   
>> +/**
>> + * phy_read - Convenience function for reading a given PHY register
>> + * @phydev: the phy_device struct
>> + * @devad: The MMD to read from
>> + * @regnum: register number to read
>> + */
>>   static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
>>   {
>>   	struct mii_dev *bus = phydev->bus;
>> @@ -182,6 +188,13 @@ static inline int phy_read(struct phy_device *phydev, int devad, int regnum)
>>   	return bus->read(bus, phydev->addr, devad, regnum);
>>   }
>>   
>> +/**
>> + * phy_write - Convenience function for writing a given PHY register
>> + * @phydev: the phy_device struct
>> + * @devad: The MMD to read from
>> + * @regnum: register number to write
>> + * @val: value to write to @regnum
>> + */
>>   static inline int phy_write(struct phy_device *phydev, int devad, int regnum,
>>   			u16 val)
>>   {
>> @@ -209,6 +222,13 @@ static inline void phy_mmd_start_indirect(struct phy_device *phydev, int devad,
>>   		  (devad | MII_MMD_CTRL_NOINCR));
>>   }
>>   
>> +/**
>> + * phy_read_mmd - Convenience function for reading a register
>> + * from an MMD on a given PHY.
>> + * @phydev: The phy_device struct
>> + * @devad: The MMD to read from
>> + * @regnum: The register on the MMD to read
>> + */
>>   static inline int phy_read_mmd(struct phy_device *phydev, int devad,
>>   			       int regnum)
>>   {
>> @@ -233,6 +253,14 @@ static inline int phy_read_mmd(struct phy_device *phydev, int devad,
>>   	return phy_read(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA);
>>   }
>>   
>> +/**
>> + * phy_write_mmd - Convenience function for writing a register
>> + * on an MMD on a given PHY.
>> + * @phydev: The phy_device struct
>> + * @devad: The MMD to read from
>> + * @regnum: The register on the MMD to read
>> + * @val: value to write to @regnum
>> + */
>>   static inline int phy_write_mmd(struct phy_device *phydev, int devad,
>>   				int regnum, u16 val)
>>   {
>> @@ -257,6 +285,58 @@ static inline int phy_write_mmd(struct phy_device *phydev, int devad,
>>   	return phy_write(phydev, MDIO_DEVAD_NONE, MII_MMD_DATA, val);
>>   }
>>   
>> +/**
>> + * phy_set_bits_mmd - Convenience function for setting bits in a register
>> + * on MMD
>> + * @phydev: the phy_device struct
>> + * @devad: the MMD containing register to modify
>> + * @regnum: register number to modify
>> + * @val: bits to set
>> + */
>> +static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
>> +				   u32 regnum, u16 val)
>> +{
>> +	int value, ret;
>> +
>> +	value = phy_read_mmd(phydev, devad, regnum);
>> +	if (value < 0)
>> +		return value;
>> +
>> +	value |= val;
>> +
>> +	ret = phy_write_mmd(phydev, devad, regnum, value);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	return 0;
>> +}
>> +
>> +/**
>> + * phy_clear_bits_mmd - Convenience function for clearing bits in a register
>> + * on MMD
>> + * @phydev: the phy_device struct
>> + * @devad: the MMD containing register to modify
>> + * @regnum: register number to modify
>> + * @val: bits to clear
>> + */
>> +static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
>> +				     u32 regnum, u16 val)
>> +{
>> +	int value, ret;
>> +
>> +	value = phy_read_mmd(phydev, devad, regnum);
>> +	if (value < 0)
>> +		return value;
>> +
>> +	value &= ~val;
>> +
>> +	ret = phy_write_mmd(phydev, devad, regnum, value);
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	return 0;
>> +}
>> +
>>   #ifdef CONFIG_PHYLIB_10G
>>   extern struct phy_driver gen10g_driver;
>>   
>>
> Better would be to have one patch just with adding missing kernel-doc.
> It is not described in commit message too.
Yes I was thinking that I should have done 2 patches since the kernel 
doc to the other functions is completely separate work.
>
> And second to add that functions.
>
> And there are errors there.
>
> [u-boot](debian)$ ./scripts/kernel-doc -v -man include/phy.h > /dev/null

I learned something new today.? Now I know how to check my kernel doc :)

I will fix these.

Dan

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

* [PATCH v2 3/3] net: phy: Add DP8382x phy registration to TI PHY init
  2020-04-30  8:04   ` Michal Simek
@ 2020-04-30 11:47     ` Dan Murphy
  2020-04-30 12:14       ` Michal Simek
  0 siblings, 1 reply; 10+ messages in thread
From: Dan Murphy @ 2020-04-30 11:47 UTC (permalink / raw)
  To: u-boot

Michal

On 4/30/20 3:04 AM, Michal Simek wrote:
> On 28. 04. 20 21:26, Dan Murphy wrote:
>> Add the DP8382X generic PHY registration to the TI PHY init file.
>>
>> Signed-off-by: Dan Murphy <dmurphy@ti.com>
>> ---
>>   drivers/net/phy/ti_phy_init.c | 91 +++++++++++++++++++++++++++++++++++
>>   1 file changed, 91 insertions(+)
>>
>> diff --git a/drivers/net/phy/ti_phy_init.c b/drivers/net/phy/ti_phy_init.c
>> index 277b29a26342..47f32a528361 100644
>> --- a/drivers/net/phy/ti_phy_init.c
>> +++ b/drivers/net/phy/ti_phy_init.c
>> @@ -7,12 +7,103 @@
>>    * Copyright (C) 2019-20 Texas Instruments Inc.
>>    */
>>   
>> +
> Useless change.
Ack
>> +#include <phy.h>
>>   #include "ti_phy_init.h"
>>   
>> +#define DP83822_PHY_ID	        0x2000a240
>> +#define DP83825S_PHY_ID		0x2000a140
>> +#define DP83825I_PHY_ID		0x2000a150
>> +#define DP83825CM_PHY_ID	0x2000a160
>> +#define DP83825CS_PHY_ID	0x2000a170
>> +#define DP83826C_PHY_ID		0x2000a130
>> +#define DP83826NC_PHY_ID	0x2000a110
> nit: Can't see value to have these macros here.

Are you saying to just add the PHY IDs directly below?

I will make that change as well.

>
>> +
>> +#ifdef CONFIG_PHY_TI_GENERIC
>> +static struct phy_driver dp83822_driver = {
>> +	.name = "TI DP83822",
>> +	.uid = DP83822_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +
>> +static struct phy_driver dp83825s_driver = {
>> +	.name = "TI DP83825S",
>> +	.uid = DP83825S_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +
>> +static struct phy_driver dp83825i_driver = {
>> +	.name = "TI DP83825I",
>> +	.uid = DP83825I_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +
>> +static struct phy_driver dp83825m_driver = {
>> +	.name = "TI DP83825M",
>> +	.uid = DP83825CM_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +
>> +static struct phy_driver dp83825cs_driver = {
>> +	.name = "TI DP83825CS",
>> +	.uid = DP83825CS_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +
>> +static struct phy_driver dp83826c_driver = {
>> +	.name = "TI DP83826C",
>> +	.uid = DP83826C_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +static struct phy_driver dp83826nc_driver = {
>> +	.name = "TI DP83826NC",
>> +	.uid = DP83826NC_PHY_ID,
>> +	.mask = 0xfffffff0,
>> +	.features = PHY_BASIC_FEATURES,
>> +	.config = &genphy_config_aneg,
>> +	.startup = &genphy_startup,
>> +	.shutdown = &genphy_shutdown,
>> +};
>> +#endif /* CONFIG_PHY_TI_GENERIC */
>> +
>>   int phy_ti_init(void)
>>   {
>>   #ifdef CONFIG_PHY_TI_DP83867
>>   	phy_dp83867_init();
>>   #endif
>> +
>> +#ifdef CONFIG_PHY_TI_GENERIC
>> +	phy_register(&dp83822_driver);
>> +	phy_register(&dp83825s_driver);
>> +	phy_register(&dp83825i_driver);
>> +	phy_register(&dp83825m_driver);
>> +	phy_register(&dp83825cs_driver);
>> +	phy_register(&dp83826c_driver);
>> +	phy_register(&dp83826nc_driver);
>> +#endif
>>   	return 0;
>>   }
>>
> When you remove that additional empty line feel free to add my
> Acked-by: Michal Simek <michal.simek@xilinx.com>

Ack

Dan

> Thanks,
> Michal

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

* [PATCH v2 3/3] net: phy: Add DP8382x phy registration to TI PHY init
  2020-04-30 11:47     ` Dan Murphy
@ 2020-04-30 12:14       ` Michal Simek
  0 siblings, 0 replies; 10+ messages in thread
From: Michal Simek @ 2020-04-30 12:14 UTC (permalink / raw)
  To: u-boot

On 30. 04. 20 13:47, Dan Murphy wrote:
> Michal
> 
> On 4/30/20 3:04 AM, Michal Simek wrote:
>> On 28. 04. 20 21:26, Dan Murphy wrote:
>>> Add the DP8382X generic PHY registration to the TI PHY init file.
>>>
>>> Signed-off-by: Dan Murphy <dmurphy@ti.com>
>>> ---
>>> ? drivers/net/phy/ti_phy_init.c | 91 +++++++++++++++++++++++++++++++++++
>>> ? 1 file changed, 91 insertions(+)
>>>
>>> diff --git a/drivers/net/phy/ti_phy_init.c
>>> b/drivers/net/phy/ti_phy_init.c
>>> index 277b29a26342..47f32a528361 100644
>>> --- a/drivers/net/phy/ti_phy_init.c
>>> +++ b/drivers/net/phy/ti_phy_init.c
>>> @@ -7,12 +7,103 @@
>>> ?? * Copyright (C) 2019-20 Texas Instruments Inc.
>>> ?? */
>>> ? +
>> Useless change.
> Ack
>>> +#include <phy.h>
>>> ? #include "ti_phy_init.h"
>>> ? +#define DP83822_PHY_ID??????????? 0x2000a240
>>> +#define DP83825S_PHY_ID??????? 0x2000a140
>>> +#define DP83825I_PHY_ID??????? 0x2000a150
>>> +#define DP83825CM_PHY_ID??? 0x2000a160
>>> +#define DP83825CS_PHY_ID??? 0x2000a170
>>> +#define DP83826C_PHY_ID??????? 0x2000a130
>>> +#define DP83826NC_PHY_ID??? 0x2000a110
>> nit: Can't see value to have these macros here.
> 
> Are you saying to just add the PHY IDs directly below?

others are doing that that's why I can't see the reason to do it
differently. Also normally when you look for phy id you likely want to
know what functions are called.

M

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

end of thread, other threads:[~2020-04-30 12:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-28 19:26 [PATCH v2 0/3] TI Ethernet PHY changes Dan Murphy
2020-04-28 19:26 ` [PATCH v2 1/3] net: phy: Add helper routines to set and clear bits Dan Murphy
2020-04-30  8:00   ` Michal Simek
2020-04-30 11:43     ` Dan Murphy
2020-04-28 19:26 ` [PATCH v2 2/3] net: phy: Add support for TI PHY init Dan Murphy
2020-04-30  8:01   ` Michal Simek
2020-04-28 19:26 ` [PATCH v2 3/3] net: phy: Add DP8382x phy registration to " Dan Murphy
2020-04-30  8:04   ` Michal Simek
2020-04-30 11:47     ` Dan Murphy
2020-04-30 12:14       ` Michal Simek

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.