netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers.
@ 2020-06-22 15:05 Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 1/3] net: phy: Allow mdio buses to auto-probe c45 devices Calvin Johnson
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Calvin Johnson @ 2020-06-22 15:05 UTC (permalink / raw)
  To: Jeremy Linton, Russell King - ARM Linux admin, Jon,
	Cristi Sovaiala, Ioana Ciornei, Andrew Lunn, Andy Shevchenko,
	Florian Fainelli, Madalin Bucur
  Cc: netdev, linux.cj, Calvin Johnson

This patch series provides ACPI support for xgmac_mdio driver.


Changes in v3:
- handle case MDIOBUS_NO_CAP

Changes in v2:
- Reserve "0" to mean that no mdiobus capabilities have been declared.
- bus->id: change to appropriate printk format specifier
- clean up xgmac_acpi_match
- clariy platform_get_resource() usage with comments

Calvin Johnson (1):
  net/fsl: acpize xgmac_mdio

Jeremy Linton (2):
  net: phy: Allow mdio buses to auto-probe c45 devices
  net/fsl: enable extended scanning in xgmac_mdio

 drivers/net/ethernet/freescale/xgmac_mdio.c | 33 ++++++++++++++-------
 drivers/net/phy/mdio_bus.c                  | 18 +++++++++--
 include/linux/phy.h                         |  8 +++++
 3 files changed, 47 insertions(+), 12 deletions(-)

-- 
2.17.1


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

* [net-next PATCH v3 1/3] net: phy: Allow mdio buses to auto-probe c45 devices
  2020-06-22 15:05 [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers Calvin Johnson
@ 2020-06-22 15:05 ` Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 2/3] net/fsl: acpize xgmac_mdio Calvin Johnson
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Calvin Johnson @ 2020-06-22 15:05 UTC (permalink / raw)
  To: Jeremy Linton, Russell King - ARM Linux admin, Jon,
	Cristi Sovaiala, Ioana Ciornei, Andrew Lunn, Andy Shevchenko,
	Florian Fainelli, Madalin Bucur
  Cc: netdev, linux.cj, Calvin Johnson

From: Jeremy Linton <jeremy.linton@arm.com>

The mdiobus_scan logic is currently hardcoded to only
work with c22 devices. This works fairly well in most
cases, but its possible that a c45 device doesn't respond
despite being a standard phy. If the parent hardware
is capable, it makes sense to scan for c22 devices before
falling back to c45.

As we want this to reflect the capabilities of the STA,
lets add a field to the mii_bus structure to represent
the capability. That way devices can opt into the extended
scanning. Existing users should continue to default to c22
only scanning as long as they are zero'ing the structure
before use.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>

---

Changes in v3:
- handle case MDIOBUS_NO_CAP

Changes in v2:
- Reserve "0" to mean that no mdiobus capabilities have been declared.

 drivers/net/phy/mdio_bus.c | 18 ++++++++++++++++--
 include/linux/phy.h        |  8 ++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 6ceee82b2839..ab9233c558d8 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -739,10 +739,24 @@ EXPORT_SYMBOL(mdiobus_free);
  */
 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
 {
-	struct phy_device *phydev;
+	struct phy_device *phydev = ERR_PTR(-ENODEV);
 	int err;
 
-	phydev = get_phy_device(bus, addr, false);
+	switch (bus->probe_capabilities) {
+	case MDIOBUS_NO_CAP:
+	case MDIOBUS_C22:
+		phydev = get_phy_device(bus, addr, false);
+		break;
+	case MDIOBUS_C45:
+		phydev = get_phy_device(bus, addr, true);
+		break;
+	case MDIOBUS_C22_C45:
+		phydev = get_phy_device(bus, addr, false);
+		if (IS_ERR(phydev))
+			phydev = get_phy_device(bus, addr, true);
+		break;
+	}
+
 	if (IS_ERR(phydev))
 		return phydev;
 
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 9248dd2ce4ca..7860d56c6bf5 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -298,6 +298,14 @@ struct mii_bus {
 	/* RESET GPIO descriptor pointer */
 	struct gpio_desc *reset_gpiod;
 
+	/* bus capabilities, used for probing */
+	enum {
+		MDIOBUS_NO_CAP = 0,
+		MDIOBUS_C22,
+		MDIOBUS_C45,
+		MDIOBUS_C22_C45,
+	} probe_capabilities;
+
 	/* protect access to the shared element */
 	struct mutex shared_lock;
 
-- 
2.17.1


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

* [net-next PATCH v3 2/3] net/fsl: acpize xgmac_mdio
  2020-06-22 15:05 [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 1/3] net: phy: Allow mdio buses to auto-probe c45 devices Calvin Johnson
@ 2020-06-22 15:05 ` Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 3/3] net/fsl: enable extended scanning in xgmac_mdio Calvin Johnson
  2020-06-24  3:35 ` [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Calvin Johnson @ 2020-06-22 15:05 UTC (permalink / raw)
  To: Jeremy Linton, Russell King - ARM Linux admin, Jon,
	Cristi Sovaiala, Ioana Ciornei, Andrew Lunn, Andy Shevchenko,
	Florian Fainelli, Madalin Bucur
  Cc: netdev, linux.cj, Calvin Johnson

Add ACPI support for xgmac MDIO bus registration while maintaining
the existing DT support.

The function mdiobus_register() inside of_mdiobus_register(), brings
up all the PHYs on the mdio bus and attach them to the bus.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>

---

Changes in v3: None
Changes in v2:
- bus->id: change to appropriate printk format specifier
- clean up xgmac_acpi_match
- clariy platform_get_resource() usage with comments

 drivers/net/ethernet/freescale/xgmac_mdio.c | 32 ++++++++++++++-------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index c82c85ef5fb3..b4ed5f837975 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -245,14 +245,19 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
 	struct mii_bus *bus;
-	struct resource res;
+	struct resource *res;
 	struct mdio_fsl_priv *priv;
 	int ret;
 
-	ret = of_address_to_resource(np, 0, &res);
-	if (ret) {
+	/* In DPAA-1, MDIO is one of the many FMan sub-devices. The FMan
+	 * defines a register space that spans a large area, covering all the
+	 * subdevice areas. Therefore, MDIO cannot claim exclusive access to
+	 * this register area.
+	 */
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
 		dev_err(&pdev->dev, "could not obtain address\n");
-		return ret;
+		return -EINVAL;
 	}
 
 	bus = mdiobus_alloc_size(sizeof(struct mdio_fsl_priv));
@@ -263,21 +268,21 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 	bus->read = xgmac_mdio_read;
 	bus->write = xgmac_mdio_write;
 	bus->parent = &pdev->dev;
-	snprintf(bus->id, MII_BUS_ID_SIZE, "%llx", (unsigned long long)res.start);
+	snprintf(bus->id, MII_BUS_ID_SIZE, "%pa", &res->start);
 
 	/* Set the PHY base address */
 	priv = bus->priv;
-	priv->mdio_base = of_iomap(np, 0);
+	priv->mdio_base = ioremap(res->start, resource_size(res));
 	if (!priv->mdio_base) {
 		ret = -ENOMEM;
 		goto err_ioremap;
 	}
 
-	priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
-						       "little-endian");
+	priv->is_little_endian = device_property_read_bool(&pdev->dev,
+							   "little-endian");
 
-	priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
-						  "fsl,erratum-a011043");
+	priv->has_a011043 = device_property_read_bool(&pdev->dev,
+						      "fsl,erratum-a011043");
 
 	ret = of_mdiobus_register(bus, np);
 	if (ret) {
@@ -320,10 +325,17 @@ static const struct of_device_id xgmac_mdio_match[] = {
 };
 MODULE_DEVICE_TABLE(of, xgmac_mdio_match);
 
+static const struct acpi_device_id xgmac_acpi_match[] = {
+	{ "NXP0006" },
+	{ }
+};
+MODULE_DEVICE_TABLE(acpi, xgmac_acpi_match);
+
 static struct platform_driver xgmac_mdio_driver = {
 	.driver = {
 		.name = "fsl-fman_xmdio",
 		.of_match_table = xgmac_mdio_match,
+		.acpi_match_table = xgmac_acpi_match,
 	},
 	.probe = xgmac_mdio_probe,
 	.remove = xgmac_mdio_remove,
-- 
2.17.1


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

* [net-next PATCH v3 3/3] net/fsl: enable extended scanning in xgmac_mdio
  2020-06-22 15:05 [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 1/3] net: phy: Allow mdio buses to auto-probe c45 devices Calvin Johnson
  2020-06-22 15:05 ` [net-next PATCH v3 2/3] net/fsl: acpize xgmac_mdio Calvin Johnson
@ 2020-06-22 15:05 ` Calvin Johnson
  2020-06-24  3:35 ` [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Calvin Johnson @ 2020-06-22 15:05 UTC (permalink / raw)
  To: Jeremy Linton, Russell King - ARM Linux admin, Jon,
	Cristi Sovaiala, Ioana Ciornei, Andrew Lunn, Andy Shevchenko,
	Florian Fainelli, Madalin Bucur
  Cc: netdev, linux.cj, Calvin Johnson

From: Jeremy Linton <jeremy.linton@arm.com>

Since we know the xgmac hardware always has a c45
compliant bus, let's try scanning for c22 capable
PHYs first. If we fail to find any, then it will
fall back to c45 automatically.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>

---

Changes in v3: None
Changes in v2: None

 drivers/net/ethernet/freescale/xgmac_mdio.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index b4ed5f837975..98be51d8b08c 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -268,6 +268,7 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 	bus->read = xgmac_mdio_read;
 	bus->write = xgmac_mdio_write;
 	bus->parent = &pdev->dev;
+	bus->probe_capabilities = MDIOBUS_C22_C45;
 	snprintf(bus->id, MII_BUS_ID_SIZE, "%pa", &res->start);
 
 	/* Set the PHY base address */
-- 
2.17.1


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

* Re: [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers.
  2020-06-22 15:05 [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers Calvin Johnson
                   ` (2 preceding siblings ...)
  2020-06-22 15:05 ` [net-next PATCH v3 3/3] net/fsl: enable extended scanning in xgmac_mdio Calvin Johnson
@ 2020-06-24  3:35 ` David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2020-06-24  3:35 UTC (permalink / raw)
  To: calvin.johnson
  Cc: jeremy.linton, linux, jon, cristian.sovaiala, ioana.ciornei,
	andrew, andy.shevchenko, f.fainelli, madalin.bucur, netdev,
	linux.cj

From: Calvin Johnson <calvin.johnson@oss.nxp.com>
Date: Mon, 22 Jun 2020 20:35:31 +0530

> This patch series provides ACPI support for xgmac_mdio driver.
> 
> Changes in v3:
> - handle case MDIOBUS_NO_CAP
> 
> Changes in v2:
> - Reserve "0" to mean that no mdiobus capabilities have been declared.
> - bus->id: change to appropriate printk format specifier
> - clean up xgmac_acpi_match
> - clariy platform_get_resource() usage with comments

Series applied to net-next, thanks.

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

end of thread, other threads:[~2020-06-24  3:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-22 15:05 [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers Calvin Johnson
2020-06-22 15:05 ` [net-next PATCH v3 1/3] net: phy: Allow mdio buses to auto-probe c45 devices Calvin Johnson
2020-06-22 15:05 ` [net-next PATCH v3 2/3] net/fsl: acpize xgmac_mdio Calvin Johnson
2020-06-22 15:05 ` [net-next PATCH v3 3/3] net/fsl: enable extended scanning in xgmac_mdio Calvin Johnson
2020-06-24  3:35 ` [net-next PATCH v3 0/3] ACPI support for xgmac_mdio drivers 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).