linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers.
@ 2020-01-31 15:34 Calvin Johnson
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
                   ` (7 more replies)
  0 siblings, 8 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, Andrew Lunn, Andy Shevchenko, Antoine Tenart,
	David S. Miller, Dmitry Torokhov, Florian Fainelli,
	Greg Kroah-Hartman, Heikki Krogerus, Heiner Kallweit,
	Ioana Radulescu, Madalin Bucur, Matteo Croce, Maxime Chevallier,
	Rafael J. Wysocki, Russell King, Sakari Ailus, Thomas Gleixner,
	linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

This patch series provides ACPI support for xgmac_mdio and dpaa2-mac
driver. Most of the DT APIs are replaced with fwnode APIs to handle
both DT and ACPI nodes.

Old patch by Marcin Wojtas: (mdio_bus: Introduce fwnode MDIO helpers),
is reused in this series to get some fwnode mdio helper APIs.


Calvin Johnson (6):
  mdio_bus: modify fwnode phy related functions
  net/fsl: add ACPI support for mdio bus
  device property: fwnode_get_phy_mode: Change API to solve int/unit
    warnings
  device property: Introduce fwnode_phy_is_fixed_link()
  net: phylink: Introduce phylink_fwnode_phy_connect()
  dpaa2-eth: Add ACPI support for DPAA2 MAC driver

Marcin Wojtas (1):
  mdio_bus: Introduce fwnode MDIO helpers

 drivers/base/property.c                       |  43 ++-
 .../net/ethernet/freescale/dpaa2/dpaa2-mac.c  |  78 ++++--
 drivers/net/ethernet/freescale/xgmac_mdio.c   |  63 +++--
 .../net/ethernet/marvell/mvpp2/mvpp2_main.c   |   7 +-
 drivers/net/phy/mdio_bus.c                    | 244 ++++++++++++++++++
 drivers/net/phy/phylink.c                     |  64 +++++
 include/linux/mdio.h                          |   3 +
 include/linux/phylink.h                       |   2 +
 include/linux/property.h                      |   5 +-
 9 files changed, 450 insertions(+), 59 deletions(-)

-- 
2.17.1


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

* [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-01-31 16:28   ` Andrew Lunn
                     ` (3 more replies)
  2020-01-31 15:34 ` [PATCH v1 2/7] mdio_bus: modify fwnode phy related functions Calvin Johnson
                   ` (6 subsequent siblings)
  7 siblings, 4 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Marcin Wojtas, Calvin Johnson, Andrew Lunn, David S. Miller,
	Florian Fainelli, Heiner Kallweit, linux-kernel, netdev

From: Marcin Wojtas <mw@semihalf.com>

This patch introduces fwnode helper for registering MDIO
bus, as well as one for finding the PHY, basing on its
firmware node pointer. Comparing to existing OF equivalent,
fwnode_mdiobus_register() does not support:
 * deprecated bindings (device whitelist, nor the PHY ID embedded
   in the compatible string)
 * MDIO bus auto scanning

Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/net/phy/mdio_bus.c | 218 +++++++++++++++++++++++++++++++++++++
 include/linux/mdio.h       |   3 +
 2 files changed, 221 insertions(+)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 229e480179ff..b1830ae2abd9 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -22,6 +22,7 @@
 #include <linux/of_device.h>
 #include <linux/of_mdio.h>
 #include <linux/of_gpio.h>
+#include <linux/of_irq.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/reset.h>
@@ -725,6 +726,223 @@ static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return 0;
 }
 
+static int fwnode_mdiobus_register_phy(struct mii_bus *bus,
+				       struct fwnode_handle *child, u32 addr)
+{
+	struct phy_device *phy;
+	bool is_c45 = false;
+	int rc;
+
+	rc = fwnode_property_match_string(child, "compatible",
+					  "ethernet-phy-ieee802.3-c45");
+	if (!rc)
+		is_c45 = true;
+
+	phy = get_phy_device(bus, addr, is_c45);
+	if (IS_ERR(phy))
+		return PTR_ERR(phy);
+
+	phy->irq = bus->irq[addr];
+
+	if (to_of_node(child)) {
+		rc = of_irq_get(to_of_node(child), 0);
+		if (rc == -EPROBE_DEFER) {
+			phy_device_free(phy);
+			return rc;
+		} else if (rc > 0) {
+			phy->irq = rc;
+			bus->irq[addr] = rc;
+		}
+	}
+
+	if (fwnode_property_read_bool(child, "broken-turn-around"))
+		bus->phy_ignore_ta_mask |= 1 << addr;
+
+	/* Associate the fwnode with the device structure so it
+	 * can be looked up later.
+	 */
+	phy->mdio.dev.fwnode = child;
+
+	/* All data is now stored in the phy struct, so register it */
+	rc = phy_device_register(phy);
+	if (rc) {
+		phy_device_free(phy);
+		fwnode_handle_put(child);
+		return rc;
+	}
+
+	dev_dbg(&bus->dev, "registered phy at address %i\n", addr);
+
+	return 0;
+}
+
+static int fwnode_mdiobus_register_device(struct mii_bus *bus,
+					  struct fwnode_handle *child, u32 addr)
+{
+	struct mdio_device *mdiodev;
+	int rc;
+
+	mdiodev = mdio_device_create(bus, addr);
+	if (IS_ERR(mdiodev))
+		return PTR_ERR(mdiodev);
+
+	/* Associate the fwnode with the device structure so it
+	 * can be looked up later.
+	 */
+	mdiodev->dev.fwnode = child;
+
+	/* All data is now stored in the mdiodev struct; register it. */
+	rc = mdio_device_register(mdiodev);
+	if (rc) {
+		mdio_device_free(mdiodev);
+		fwnode_handle_put(child);
+		return rc;
+	}
+
+	dev_dbg(&bus->dev, "registered mdio device at address %i\n", addr);
+
+	return 0;
+}
+
+static int fwnode_mdio_parse_addr(struct device *dev,
+				  const struct fwnode_handle *fwnode)
+{
+	u32 addr;
+	int ret;
+
+	ret = fwnode_property_read_u32(fwnode, "reg", &addr);
+	if (ret < 0) {
+		dev_err(dev, "PHY node has no 'reg' property\n");
+		return ret;
+	}
+
+	/* A PHY must have a reg property in the range [0-31] */
+	if (addr < 0 || addr >= PHY_MAX_ADDR) {
+		dev_err(dev, "PHY address %i is invalid\n", addr);
+		return -EINVAL;
+	}
+
+	return addr;
+}
+
+/**
+ * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
+ * It must either:
+ * o Compatible string of "ethernet-phy-ieee802.3-c45"
+ * o Compatible string of "ethernet-phy-ieee802.3-c22"
+ * Checking "compatible" property is done, in order to follow the DT binding.
+ */
+static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
+{
+	int ret;
+
+	ret = fwnode_property_match_string(child, "compatible",
+					   "ethernet-phy-ieee802.3-c45");
+	if (!ret)
+		return true;
+
+	ret = fwnode_property_match_string(child, "compatible",
+					   "ethernet-phy-ieee802.3-c22");
+	if (!ret)
+		return true;
+
+	if (!fwnode_property_present(child, "compatible"))
+		return true;
+
+	return false;
+}
+
+/**
+ * fwnode_mdiobus_register - Register mii_bus and create PHYs from the fwnode
+ * @bus: pointer to mii_bus structure
+ * @fwnode: pointer to fwnode_handle of MDIO bus.
+ *
+ * This function registers the mii_bus structure and registers a phy_device
+ * for each child node of @fwnode.
+ */
+int fwnode_mdiobus_register(struct mii_bus *bus, struct fwnode_handle *fwnode)
+{
+	struct fwnode_handle *child;
+	int addr, rc;
+	int default_gpio_reset_delay_ms = 10;
+
+	/* Do not continue if the node is disabled */
+	if (!fwnode_device_is_available(fwnode))
+		return -ENODEV;
+
+	/* Mask out all PHYs from auto probing. Instead the PHYs listed in
+	 * the firmware nodes are populated after the bus has been registered.
+	 */
+	bus->phy_mask = ~0;
+
+	bus->dev.fwnode = fwnode;
+
+	/* Get bus level PHY reset GPIO details */
+	bus->reset_delay_us = default_gpio_reset_delay_ms;
+	fwnode_property_read_u32(fwnode, "reset-delay-us",
+				 &bus->reset_delay_us);
+
+	/* Register the MDIO bus */
+	rc = mdiobus_register(bus);
+	if (rc)
+		return rc;
+
+	/* Loop over the child nodes and register a phy_device for each PHY */
+	fwnode_for_each_child_node(fwnode, child) {
+		addr = fwnode_mdio_parse_addr(&bus->dev, child);
+		if (addr < 0)
+			continue;
+
+		if (fwnode_mdiobus_child_is_phy(child))
+			rc = fwnode_mdiobus_register_phy(bus, child, addr);
+		else
+			rc = fwnode_mdiobus_register_device(bus, child, addr);
+		if (rc)
+			goto unregister;
+	}
+
+	return 0;
+
+unregister:
+	mdiobus_unregister(bus);
+
+	return rc;
+}
+EXPORT_SYMBOL(fwnode_mdiobus_register);
+
+/* Helper function for fwnode_phy_find_device */
+static int fwnode_phy_match(struct device *dev, const void *phy_fwnode)
+{
+	return dev->fwnode == phy_fwnode;
+}
+
+/**
+ * fwnode_phy_find_device - find the phy_device associated to fwnode
+ * @phy_fwnode: Pointer to the PHY's fwnode
+ *
+ * If successful, returns a pointer to the phy_device with the embedded
+ * struct device refcount incremented by one, or NULL on failure.
+ */
+struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
+{
+	struct device *d;
+	struct mdio_device *mdiodev;
+
+	if (!phy_fwnode)
+		return NULL;
+
+	d = bus_find_device(&mdio_bus_type, NULL, phy_fwnode, fwnode_phy_match);
+	if (d) {
+		mdiodev = to_mdio_device(d);
+		if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
+			return to_phy_device(d);
+		put_device(d);
+	}
+
+	return NULL;
+}
+EXPORT_SYMBOL(fwnode_phy_find_device);
+
 struct bus_type mdio_bus_type = {
 	.name		= "mdio_bus",
 	.match		= mdio_bus_match,
diff --git a/include/linux/mdio.h b/include/linux/mdio.h
index a7604248777b..5c600bb1183c 100644
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
@@ -327,6 +327,9 @@ int mdiobus_unregister_device(struct mdio_device *mdiodev);
 bool mdiobus_is_registered_device(struct mii_bus *bus, int addr);
 struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr);
 
+int fwnode_mdiobus_register(struct mii_bus *bus, struct fwnode_handle *fwnode);
+struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode);
+
 /**
  * mdio_module_driver() - Helper macro for registering mdio drivers
  *
-- 
2.17.1


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

* [PATCH v1 2/7] mdio_bus: modify fwnode phy related functions
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-01-31 15:34 ` [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus Calvin Johnson
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, Andrew Lunn, David S. Miller, Florian Fainelli,
	Heiner Kallweit, linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

-Add fwnode_get_phy_id to extract phy_id from fwnode compatible property.
-Modify fwnode_mdiobus_register_phy and fwnode_mdiobus_child_is_phy to
get the compatible string and process accordingly.

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/net/phy/mdio_bus.c | 58 +++++++++++++++++++++++++++-----------
 1 file changed, 42 insertions(+), 16 deletions(-)

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index b1830ae2abd9..d806b8294651 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -726,19 +726,43 @@ static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
 	return 0;
 }
 
+/* Extract the clause 22 phy ID from the compatible string of the form
+ * ethernet-phy-idAAAA.BBBB
+ */
+static int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
+{
+	const char *cp;
+	unsigned int upper, lower;
+	int ret;
+
+	ret = fwnode_property_read_string(fwnode, "compatible", &cp);
+	if (!ret) {
+		if (sscanf(cp, "ethernet-phy-id%4x.%4x",
+			   &upper, &lower) == 2) {
+			*phy_id = ((upper & 0xFFFF) << 16) | (lower & 0xFFFF);
+			return 0;
+		}
+	}
+	return -EINVAL;
+}
+
 static int fwnode_mdiobus_register_phy(struct mii_bus *bus,
 				       struct fwnode_handle *child, u32 addr)
 {
 	struct phy_device *phy;
 	bool is_c45 = false;
 	int rc;
+	const char *cp;
+	u32 phy_id;
 
-	rc = fwnode_property_match_string(child, "compatible",
-					  "ethernet-phy-ieee802.3-c45");
-	if (!rc)
+	fwnode_property_read_string(child, "compatible", &cp);
+	if (!strcmp(cp, "ethernet-phy-ieee802.3-c45"))
 		is_c45 = true;
 
-	phy = get_phy_device(bus, addr, is_c45);
+	if (!is_c45 && !fwnode_get_phy_id(child, &phy_id))
+		phy = phy_device_create(bus, addr, phy_id, 0, NULL);
+	else
+		phy = get_phy_device(bus, addr, is_c45);
 	if (IS_ERR(phy))
 		return PTR_ERR(phy);
 
@@ -835,21 +859,23 @@ static int fwnode_mdio_parse_addr(struct device *dev,
 static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
 {
 	int ret;
+	const char *cp;
+	u32 phy_id;
 
-	ret = fwnode_property_match_string(child, "compatible",
-					   "ethernet-phy-ieee802.3-c45");
-	if (!ret)
-		return true;
-
-	ret = fwnode_property_match_string(child, "compatible",
-					   "ethernet-phy-ieee802.3-c22");
-	if (!ret)
-		return true;
-
-	if (!fwnode_property_present(child, "compatible"))
+	if (fwnode_get_phy_id(child, &phy_id) != -EINVAL)
 		return true;
 
-	return false;
+	ret = fwnode_property_read_string(child, "compatible", &cp);
+	if (!ret) {
+		if (!strcmp(cp, "ethernet-phy-ieee802.3-c22"))
+			return true;
+		else if (!strcmp(cp, "ethernet-phy-ieee802.3-c45"))
+			return true;
+		else
+			return false;
+	} else {
+		return false;
+	}
 }
 
 /**
-- 
2.17.1


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

* [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
  2020-01-31 15:34 ` [PATCH v1 2/7] mdio_bus: modify fwnode phy related functions Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-01-31 16:08   ` Andy Shevchenko
  2020-02-03  3:44   ` Florian Fainelli
  2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
                   ` (4 subsequent siblings)
  7 siblings, 2 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, David S. Miller, Madalin Bucur, linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

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

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/net/ethernet/freescale/xgmac_mdio.c | 63 ++++++++++++++-------
 1 file changed, 42 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/freescale/xgmac_mdio.c b/drivers/net/ethernet/freescale/xgmac_mdio.c
index c82c85ef5fb3..51db7482b3de 100644
--- a/drivers/net/ethernet/freescale/xgmac_mdio.c
+++ b/drivers/net/ethernet/freescale/xgmac_mdio.c
@@ -2,6 +2,7 @@
  * QorIQ 10G MDIO Controller
  *
  * Copyright 2012 Freescale Semiconductor, Inc.
+ * Copyright 2019 NXP
  *
  * Authors: Andy Fleming <afleming@freescale.com>
  *          Timur Tabi <timur@freescale.com>
@@ -11,6 +12,7 @@
  * kind, whether express or implied.
  */
 
+#include <linux/acpi.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
@@ -245,14 +247,14 @@ 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) {
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
 		dev_err(&pdev->dev, "could not obtain address\n");
-		return ret;
+		return -ENODEV;
 	}
 
 	bus = mdiobus_alloc_size(sizeof(struct mdio_fsl_priv));
@@ -263,25 +265,41 @@ 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, "%llx",
+		 (unsigned long long)res->start);
 
 	/* Set the PHY base address */
 	priv = bus->priv;
-	priv->mdio_base = of_iomap(np, 0);
+	priv->mdio_base = devm_ioremap_resource(&pdev->dev, 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->has_a011043 = of_property_read_bool(pdev->dev.of_node,
-						  "fsl,erratum-a011043");
-
-	ret = of_mdiobus_register(bus, np);
-	if (ret) {
-		dev_err(&pdev->dev, "cannot register MDIO bus\n");
+	if (is_of_node(pdev->dev.fwnode)) {
+		priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
+							       "little-endian");
+
+		priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
+							  "fsl,erratum-a011043");
+
+		ret = of_mdiobus_register(bus, np);
+		if (ret) {
+			dev_err(&pdev->dev, "cannot register MDIO bus\n");
+			goto err_registration;
+		}
+	} else if (is_acpi_node(pdev->dev.fwnode)) {
+		priv->is_little_endian =
+			fwnode_property_read_bool(pdev->dev.fwnode,
+						  "little-endian");
+		ret = fwnode_mdiobus_register(bus, pdev->dev.fwnode);
+		if (ret) {
+			dev_err(&pdev->dev, "cannot register MDIO bus\n");
+			goto err_registration;
+		}
+	} else {
+		dev_err(&pdev->dev, "Cannot get cfg data from DT or ACPI\n");
+		ret = -ENXIO;
 		goto err_registration;
 	}
 
@@ -290,8 +308,6 @@ static int xgmac_mdio_probe(struct platform_device *pdev)
 	return 0;
 
 err_registration:
-	iounmap(priv->mdio_base);
-
 err_ioremap:
 	mdiobus_free(bus);
 
@@ -303,13 +319,12 @@ static int xgmac_mdio_remove(struct platform_device *pdev)
 	struct mii_bus *bus = platform_get_drvdata(pdev);
 
 	mdiobus_unregister(bus);
-	iounmap(bus->priv);
 	mdiobus_free(bus);
 
 	return 0;
 }
 
-static const struct of_device_id xgmac_mdio_match[] = {
+static const struct of_device_id xgmac_mdio_of_match[] = {
 	{
 		.compatible = "fsl,fman-xmdio",
 	},
@@ -318,12 +333,18 @@ static const struct of_device_id xgmac_mdio_match[] = {
 	},
 	{},
 };
-MODULE_DEVICE_TABLE(of, xgmac_mdio_match);
+MODULE_DEVICE_TABLE(of, xgmac_mdio_of_match);
+
+static const struct acpi_device_id xgmac_mdio_acpi_match[] = {
+	{"NXP0006", 0}
+};
+MODULE_DEVICE_TABLE(acpi, xgmac_mdio_acpi_match);
 
 static struct platform_driver xgmac_mdio_driver = {
 	.driver = {
 		.name = "fsl-fman_xmdio",
-		.of_match_table = xgmac_mdio_match,
+		.of_match_table = xgmac_mdio_of_match,
+		.acpi_match_table = ACPI_PTR(xgmac_mdio_acpi_match),
 	},
 	.probe = xgmac_mdio_probe,
 	.remove = xgmac_mdio_remove,
-- 
2.17.1


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

* [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
                   ` (2 preceding siblings ...)
  2020-01-31 15:34 ` [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-01-31 15:55   ` Andy Shevchenko
                     ` (2 more replies)
  2020-01-31 15:34 ` [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link() Calvin Johnson
                   ` (3 subsequent siblings)
  7 siblings, 3 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

API fwnode_get_phy_mode is modified to follow the changes made by
Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve
int/unit warnings").

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/base/property.c                       | 22 ++++++++++++++-----
 .../net/ethernet/marvell/mvpp2/mvpp2_main.c   |  7 +++---
 include/linux/property.h                      |  4 +++-
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index 511f6d7acdfe..fdb79033d58f 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -830,16 +830,20 @@ EXPORT_SYMBOL_GPL(device_get_dma_attr);
 /**
  * fwnode_get_phy_mode - Get phy mode for given firmware node
  * @fwnode:	Pointer to the given node
+ * @interface: Pointer to the result
  *
  * The function gets phy interface string from property 'phy-mode' or
- * 'phy-connection-type', and return its index in phy_modes table, or errno in
- * error case.
+ * 'phy-connection-type'. The index in phy_modes table is set in
+ * interface and 0 returned. In case of error interface is set to
+ * PHY_INTERFACE_MODE_NA and an errno is returned, e.g. -ENODEV.
  */
-int fwnode_get_phy_mode(struct fwnode_handle *fwnode)
+int fwnode_get_phy_mode(struct fwnode_handle *fwnode, phy_interface_t *interface)
 {
 	const char *pm;
 	int err, i;
 
+	*interface = PHY_INTERFACE_MODE_NA;
+
 	err = fwnode_property_read_string(fwnode, "phy-mode", &pm);
 	if (err < 0)
 		err = fwnode_property_read_string(fwnode,
@@ -848,8 +852,10 @@ int fwnode_get_phy_mode(struct fwnode_handle *fwnode)
 		return err;
 
 	for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
-		if (!strcasecmp(pm, phy_modes(i)))
+		if (!strcasecmp(pm, phy_modes(i))) {
+			*interface = i;
 			return i;
+		}
 
 	return -ENODEV;
 }
@@ -865,7 +871,13 @@ EXPORT_SYMBOL_GPL(fwnode_get_phy_mode);
  */
 int device_get_phy_mode(struct device *dev)
 {
-	return fwnode_get_phy_mode(dev_fwnode(dev));
+	int ret;
+	phy_interface_t phy_mode;
+
+	ret = fwnode_get_phy_mode(dev_fwnode(dev), &phy_mode);
+	if (!ret)
+		ret = phy_mode;
+	return ret;
 }
 EXPORT_SYMBOL_GPL(device_get_phy_mode);
 
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index 14e372cda7f4..00a0350f4da7 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -5209,7 +5209,7 @@ static int mvpp2_port_probe(struct platform_device *pdev,
 	unsigned long flags = 0;
 	bool has_tx_irqs;
 	u32 id;
-	int phy_mode;
+	phy_interface_t phy_mode;
 	int err, i;
 
 	has_tx_irqs = mvpp2_port_has_irqs(priv, port_node, &flags);
@@ -5226,10 +5226,9 @@ static int mvpp2_port_probe(struct platform_device *pdev,
 	if (!dev)
 		return -ENOMEM;
 
-	phy_mode = fwnode_get_phy_mode(port_fwnode);
-	if (phy_mode < 0) {
+	err = fwnode_get_phy_mode(port_fwnode, &phy_mode);
+	if (err < 0) {
 		dev_err(&pdev->dev, "incorrect phy mode\n");
-		err = phy_mode;
 		goto err_free_netdev;
 	}
 
diff --git a/include/linux/property.h b/include/linux/property.h
index 48335288c2a9..1998f502d2ed 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -13,6 +13,7 @@
 #include <linux/bits.h>
 #include <linux/fwnode.h>
 #include <linux/types.h>
+#include <linux/phy.h>
 
 struct device;
 
@@ -332,7 +333,8 @@ int device_get_phy_mode(struct device *dev);
 
 void *device_get_mac_address(struct device *dev, char *addr, int alen);
 
-int fwnode_get_phy_mode(struct fwnode_handle *fwnode);
+int fwnode_get_phy_mode(struct fwnode_handle *fwnode,
+			phy_interface_t *interface);
 void *fwnode_get_mac_address(struct fwnode_handle *fwnode,
 			     char *addr, int alen);
 struct fwnode_handle *fwnode_graph_get_next_endpoint(
-- 
2.17.1


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

* [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link()
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
                   ` (3 preceding siblings ...)
  2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-01-31 15:57   ` Andy Shevchenko
  2020-01-31 15:34 ` [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect() Calvin Johnson
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, Andy Shevchenko, Dmitry Torokhov,
	Greg Kroah-Hartman, Heikki Krogerus, Rafael J. Wysocki,
	Sakari Ailus, Thomas Gleixner, linux-kernel

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

Introduce fwnode_phy_is_fixed_link() function that an Ethernet driver
can call on its PHY phandle to find out whether it's a fixed link PHY
or not.

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/base/property.c  | 21 +++++++++++++++++++++
 include/linux/property.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/drivers/base/property.c b/drivers/base/property.c
index fdb79033d58f..a0f69fae82cd 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -827,6 +827,27 @@ enum dev_dma_attr device_get_dma_attr(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(device_get_dma_attr);
 
+/*
+ * fwnode_phy_is_fixed_link()
+ */
+bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode)
+{
+	struct fwnode_handle *fixed_node;
+	int len, err;
+	const char *managed;
+
+	fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link");
+	if (fixed_node)
+		return fixed_node;
+
+	err = fwnode_property_read_string(fixed_node, "managed", &managed);
+	if (err == 0 && strcmp(managed, "auto") != 0)
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL(fwnode_phy_is_fixed_link);
+
 /**
  * fwnode_get_phy_mode - Get phy mode for given firmware node
  * @fwnode:	Pointer to the given node
diff --git a/include/linux/property.h b/include/linux/property.h
index 1998f502d2ed..ba89fcf091c8 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -333,6 +333,7 @@ int device_get_phy_mode(struct device *dev);
 
 void *device_get_mac_address(struct device *dev, char *addr, int alen);
 
+bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode);
 int fwnode_get_phy_mode(struct fwnode_handle *fwnode,
 			phy_interface_t *interface);
 void *fwnode_get_mac_address(struct fwnode_handle *fwnode,
-- 
2.17.1


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

* [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect()
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
                   ` (4 preceding siblings ...)
  2020-01-31 15:34 ` [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link() Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-02-03 18:21   ` kbuild test robot
  2020-02-03 18:41   ` Russell King - ARM Linux admin
  2020-01-31 15:34 ` [PATCH v1 7/7] dpaa2-eth: Add ACPI support for DPAA2 MAC driver Calvin Johnson
  2020-02-03 18:02 ` [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Florian Fainelli
  7 siblings, 2 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, Andrew Lunn, David S. Miller, Florian Fainelli,
	Heiner Kallweit, linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

Introduce phylink_fwnode_phy_connect API to connect the PHY using
fwnode.

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
---

 drivers/net/phy/phylink.c | 64 +++++++++++++++++++++++++++++++++++++++
 include/linux/phylink.h   |  2 ++
 2 files changed, 66 insertions(+)

diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index ee7a718662c6..f211f62283b5 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -18,6 +18,7 @@
 #include <linux/spinlock.h>
 #include <linux/timer.h>
 #include <linux/workqueue.h>
+#include <linux/acpi.h>
 
 #include "sfp.h"
 #include "swphy.h"
@@ -817,6 +818,69 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
 }
 EXPORT_SYMBOL_GPL(phylink_connect_phy);
 
+/**
+ * phylink_fwnode_phy_connect() - connect the PHY specified in the fwnode.
+ * @pl: a pointer to a &struct phylink returned from phylink_create()
+ * @dn: a pointer to a &struct device_node.
+ * @flags: PHY-specific flags to communicate to the PHY device driver
+ *
+ * Connect the phy specified in the device node @dn to the phylink instance
+ * specified by @pl. Actions specified in phylink_connect_phy() will be
+ * performed.
+ *
+ * Returns 0 on success or a negative errno.
+ */
+int phylink_fwnode_phy_connect(struct phylink *pl,
+			       struct fwnode_handle *fwnode,
+			       u32 flags)
+{
+	struct fwnode_handle *phy_node;
+	struct phy_device *phy_dev;
+	int ret;
+	int status;
+	struct fwnode_reference_args args;
+
+	/* Fixed links and 802.3z are handled without needing a PHY */
+	if (pl->link_an_mode == MLO_AN_FIXED ||
+	    (pl->link_an_mode == MLO_AN_INBAND &&
+	     phy_interface_mode_is_8023z(pl->link_interface)))
+		return 0;
+
+	status = acpi_node_get_property_reference(fwnode, "phy-handle", 0,
+						  &args);
+	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
+		status = acpi_node_get_property_reference(fwnode, "phy", 0,
+							  &args);
+	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
+		status = acpi_node_get_property_reference(fwnode,
+							  "phy-device", 0,
+							  &args);
+
+	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode)) {
+		if (pl->link_an_mode == MLO_AN_PHY)
+			return -ENODEV;
+		return 0;
+	}
+
+	phy_dev = fwnode_phy_find_device(args.fwnode);
+	if (phy_dev)
+		phy_attach_direct(pl->netdev, phy_dev, flags,
+				  pl->link_interface);
+
+	/* refcount is held by phy_attach_direct() on success */
+	put_device(&phy_dev->mdio.dev);
+
+	if (!phy_dev)
+		return -ENODEV;
+
+	ret = phylink_bringup_phy(pl, phy_dev);
+	if (ret)
+		phy_detach(phy_dev);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(phylink_fwnode_phy_connect);
+
 /**
  * phylink_of_phy_connect() - connect the PHY specified in the DT mode.
  * @pl: a pointer to a &struct phylink returned from phylink_create()
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index fed5488e3c75..cb07cf7a832e 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -240,6 +240,8 @@ void phylink_destroy(struct phylink *);
 
 int phylink_connect_phy(struct phylink *, struct phy_device *);
 int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags);
+int phylink_fwnode_phy_connect(struct phylink *pl, struct fwnode_handle *fwnode,
+			       u32 flags);
 void phylink_disconnect_phy(struct phylink *);
 int phylink_fixed_state_cb(struct phylink *,
 			   void (*cb)(struct net_device *dev,
-- 
2.17.1


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

* [PATCH v1 7/7]  dpaa2-eth: Add ACPI support for DPAA2 MAC driver
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
                   ` (5 preceding siblings ...)
  2020-01-31 15:34 ` [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect() Calvin Johnson
@ 2020-01-31 15:34 ` Calvin Johnson
  2020-02-03 18:02 ` [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Florian Fainelli
  7 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-01-31 15:34 UTC (permalink / raw)
  To: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, David S. Miller, Ioana Radulescu, linux-kernel, netdev

From: Calvin Johnson <calvin.johnson@oss.nxp.com>

fwnode APIs are used to handle both DT and ACPI nodes.
Whereever common fwnode APIs cannot be used, corresponding DT
and ACPI APIs are used.

Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>

---

 .../net/ethernet/freescale/dpaa2/dpaa2-mac.c  | 78 ++++++++++++-------
 1 file changed, 50 insertions(+), 28 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
index 84233e467ed1..29d2d85383de 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -3,6 +3,7 @@
 
 #include "dpaa2-eth.h"
 #include "dpaa2-mac.h"
+#include <linux/acpi.h>
 
 #define phylink_to_dpaa2_mac(config) \
 	container_of((config), struct dpaa2_mac, phylink_config)
@@ -23,37 +24,51 @@ static int phy_mode(enum dpmac_eth_if eth_if, phy_interface_t *if_mode)
 }
 
 /* Caller must call of_node_put on the returned value */
-static struct device_node *dpaa2_mac_get_node(u16 dpmac_id)
+static struct fwnode_handle *dpaa2_mac_get_node(struct device *dev,
+						u16 dpmac_id)
 {
-	struct device_node *dpmacs, *dpmac = NULL;
+	struct fwnode_handle *dpmac_fwnode;
+	struct fwnode_handle *dpmacs, *dpmac = NULL;
 	u32 id;
 	int err;
 
-	dpmacs = of_find_node_by_name(NULL, "dpmacs");
-	if (!dpmacs)
-		return NULL;
+	if (is_of_node(dev->parent->fwnode)) {
+		dpmacs = device_get_named_child_node(dev->parent, "dpmacs");
+		if (!dpmacs)
+			return NULL;
+
+		while ((dpmac = fwnode_get_next_child_node(dpmacs, dpmac))) {
+			err = fwnode_property_read_u32(dpmac, "reg", &id);
+			if (err)
+				continue;
+			if (id == dpmac_id)
+				return dpmac;
+		}
 
-	while ((dpmac = of_get_next_child(dpmacs, dpmac)) != NULL) {
-		err = of_property_read_u32(dpmac, "reg", &id);
-		if (err)
-			continue;
-		if (id == dpmac_id)
-			break;
+	} else if (is_acpi_node(dev->parent->fwnode)) {
+		device_for_each_child_node(dev->parent, dpmac_fwnode) {
+			err = fwnode_property_read_u32(dpmac_fwnode, "reg",
+						       &id);
+			if (err) {
+				dev_err(dev->parent, "failed to get reg\n");
+				continue;
+			} else {
+				if (id == dpmac_id)
+					return dpmac_fwnode;
+			}
+		}
 	}
-
-	of_node_put(dpmacs);
-
-	return dpmac;
+	return NULL;
 }
 
-static int dpaa2_mac_get_if_mode(struct device_node *node,
+static int dpaa2_mac_get_if_mode(struct fwnode_handle *dpmac_fwnode,
 				 struct dpmac_attr attr)
 {
 	phy_interface_t if_mode;
 	int err;
 
-	err = of_get_phy_mode(node, &if_mode);
-	if (!err)
+	err = fwnode_get_phy_mode(dpmac_fwnode, &if_mode);
+	if (err > 0)
 		return if_mode;
 
 	err = phy_mode(attr.eth_if, &if_mode);
@@ -220,7 +235,7 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
 {
 	struct fsl_mc_device *dpmac_dev = mac->mc_dev;
 	struct net_device *net_dev = mac->net_dev;
-	struct device_node *dpmac_node;
+	struct fwnode_handle *dpmac_fwnode = NULL;
 	struct phylink *phylink;
 	struct dpmac_attr attr;
 	int err;
@@ -238,25 +253,26 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
 		goto err_close_dpmac;
 	}
 
-	dpmac_node = dpaa2_mac_get_node(attr.id);
-	if (!dpmac_node) {
+	dpmac_fwnode = dpaa2_mac_get_node(&mac->mc_dev->dev, attr.id);
+	if (!dpmac_fwnode) {
 		netdev_err(net_dev, "No dpmac@%d node found.\n", attr.id);
 		err = -ENODEV;
 		goto err_close_dpmac;
 	}
 
-	err = dpaa2_mac_get_if_mode(dpmac_node, attr);
+	err = dpaa2_mac_get_if_mode(dpmac_fwnode, attr);
 	if (err < 0) {
 		err = -EINVAL;
 		goto err_put_node;
 	}
+
 	mac->if_mode = err;
 
 	/* The MAC does not have the capability to add RGMII delays so
 	 * error out if the interface mode requests them and there is no PHY
 	 * to act upon them
 	 */
-	if (of_phy_is_fixed_link(dpmac_node) &&
+	if (fwnode_phy_is_fixed_link(dpmac_fwnode) &&
 	    (mac->if_mode == PHY_INTERFACE_MODE_RGMII_ID ||
 	     mac->if_mode == PHY_INTERFACE_MODE_RGMII_RXID ||
 	     mac->if_mode == PHY_INTERFACE_MODE_RGMII_TXID)) {
@@ -269,7 +285,7 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
 	mac->phylink_config.type = PHYLINK_NETDEV;
 
 	phylink = phylink_create(&mac->phylink_config,
-				 of_fwnode_handle(dpmac_node), mac->if_mode,
+				 dpmac_fwnode, mac->if_mode,
 				 &dpaa2_mac_phylink_ops);
 	if (IS_ERR(phylink)) {
 		err = PTR_ERR(phylink);
@@ -277,20 +293,26 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
 	}
 	mac->phylink = phylink;
 
-	err = phylink_of_phy_connect(mac->phylink, dpmac_node, 0);
+	if (is_of_node(dpmac_fwnode))
+		err = phylink_of_phy_connect(mac->phylink,
+					     to_of_node(dpmac_fwnode), 0);
+	else if (is_acpi_node(dpmac_fwnode))
+		err = phylink_fwnode_phy_connect(mac->phylink, dpmac_fwnode, 0);
 	if (err) {
-		netdev_err(net_dev, "phylink_of_phy_connect() = %d\n", err);
+		netdev_err(net_dev, "phylink_fwnode_phy_connect() = %d\n", err);
 		goto err_phylink_destroy;
 	}
 
-	of_node_put(dpmac_node);
+	if (is_of_node(dpmac_fwnode))
+		of_node_put(to_of_node(dpmac_fwnode));
 
 	return 0;
 
 err_phylink_destroy:
 	phylink_destroy(mac->phylink);
 err_put_node:
-	of_node_put(dpmac_node);
+	if (is_of_node(dpmac_fwnode))
+		of_node_put(to_of_node(dpmac_fwnode));
 err_close_dpmac:
 	dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle);
 	return err;
-- 
2.17.1


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

* Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
@ 2020-01-31 15:55   ` Andy Shevchenko
  2020-02-03  9:13     ` Calvin Johnson (OSS)
  2020-02-03  2:32   ` kbuild test robot
  2020-02-03  8:41   ` kbuild test robot
  2 siblings, 1 reply; 34+ messages in thread
From: Andy Shevchenko @ 2020-01-31 15:55 UTC (permalink / raw)
  To: Calvin Johnson, Dan Carpenter
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, cristian.sovaiala, laurentiu.tudor,
	ioana.ciornei, V.Sethi, pankaj.bansal, Rajesh V . Bikkina,
	Calvin Johnson, Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, Linux Kernel Mailing List, netdev

On Fri, Jan 31, 2020 at 5:38 PM Calvin Johnson <calvin.johnson@nxp.com> wrote:
>
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
>
> API fwnode_get_phy_mode is modified to follow the changes made by
> Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve
> int/unit warnings").

I think it would be good to base your series on Dan's fix patch.

--
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link()
  2020-01-31 15:34 ` [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link() Calvin Johnson
@ 2020-01-31 15:57   ` Andy Shevchenko
  2020-02-03  9:21     ` Calvin Johnson (OSS)
  0 siblings, 1 reply; 34+ messages in thread
From: Andy Shevchenko @ 2020-01-31 15:57 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, cristian.sovaiala, laurentiu.tudor,
	ioana.ciornei, V.Sethi, pankaj.bansal, Rajesh V . Bikkina,
	Calvin Johnson, Andy Shevchenko, Dmitry Torokhov,
	Greg Kroah-Hartman, Heikki Krogerus, Rafael J. Wysocki,
	Sakari Ailus, Thomas Gleixner, Linux Kernel Mailing List

On Fri, Jan 31, 2020 at 5:38 PM Calvin Johnson <calvin.johnson@nxp.com> wrote:
>
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
>
> Introduce fwnode_phy_is_fixed_link() function that an Ethernet driver
> can call on its PHY phandle to find out whether it's a fixed link PHY
> or not.

> +/*
> + * fwnode_phy_is_fixed_link()
> + */

Please, do a full kernel doc description.

> +bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode)
> +{
> +       struct fwnode_handle *fixed_node;
> +       int len, err;
> +       const char *managed;
> +
> +       fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link");
> +       if (fixed_node)
> +               return fixed_node;
> +
> +       err = fwnode_property_read_string(fixed_node, "managed", &managed);

> +       if (err == 0 && strcmp(managed, "auto") != 0)
> +               return true;
> +
> +       return false;

Maybe other way around?

  if (err)
    return false;

  return !strcmp(managed, "auto");

?

Same pattern perhaps for the patch where you introduce fwnode_get_phy_mode().

> +}

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-01-31 15:34 ` [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus Calvin Johnson
@ 2020-01-31 16:08   ` Andy Shevchenko
  2020-02-04  7:18     ` Calvin Johnson (OSS)
  2020-02-03  3:44   ` Florian Fainelli
  1 sibling, 1 reply; 34+ messages in thread
From: Andy Shevchenko @ 2020-01-31 16:08 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, cristian.sovaiala, laurentiu.tudor,
	ioana.ciornei, V.Sethi, pankaj.bansal, Rajesh V . Bikkina,
	Calvin Johnson, David S. Miller, Madalin Bucur,
	Linux Kernel Mailing List, netdev

On Fri, Jan 31, 2020 at 5:37 PM Calvin Johnson <calvin.johnson@nxp.com> wrote:
>
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
>
> Add ACPI support for MDIO bus registration while maintaining
> the existing DT support.

...

> -       ret = of_address_to_resource(np, 0, &res);
> -       if (ret) {
> +       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +       if (!res) {
>                 dev_err(&pdev->dev, "could not obtain address\n");
> -               return ret;
> +               return -ENODEV;
>         }

...

> -       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx", (unsigned long long)res.start);
> +       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx",
> +                (unsigned long long)res->start);

Why this has been touched?

...

> -       priv->mdio_base = of_iomap(np, 0);
> +       priv->mdio_base = devm_ioremap_resource(&pdev->dev, res);
>         if (!priv->mdio_base) {

Are you sure the check is correct now?

>                 ret = -ENOMEM;
>                 goto err_ioremap;
>         }

...

>
> -       priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> -                                                      "little-endian");
> -
> -       priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> -                                                 "fsl,erratum-a011043");
> -
> -       ret = of_mdiobus_register(bus, np);
> -       if (ret) {
> -               dev_err(&pdev->dev, "cannot register MDIO bus\n");

> +       if (is_of_node(pdev->dev.fwnode)) {

> +       } else if (is_acpi_node(pdev->dev.fwnode)) {

Oh, no, this is wrong. Pure approach AFAICS is to use fwnode API or
device property API.

And actually what you need to include is rather <linux/property.h>,
and not acpi.h.

> +       } else {
> +               dev_err(&pdev->dev, "Cannot get cfg data from DT or ACPI\n");
> +               ret = -ENXIO;
>                 goto err_registration;
>         }

> +static const struct acpi_device_id xgmac_mdio_acpi_match[] = {
> +       {"NXP0006", 0}

How did you test this on platforms with the same IP and without device
 of this ACPI ID present?

(Hint: missed terminator)

> +};
> +MODULE_DEVICE_TABLE(acpi, xgmac_mdio_acpi_match);

> +               .acpi_match_table = ACPI_PTR(xgmac_mdio_acpi_match),

ACPI_PTR is not needed otherwise you will get a compiler warning.

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
@ 2020-01-31 16:28   ` Andrew Lunn
  2020-02-05  7:11     ` [EXT] " Calvin Johnson (OSS)
  2020-02-03  9:49   ` kbuild test robot
                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 34+ messages in thread
From: Andrew Lunn @ 2020-01-31 16:28 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Marcin Wojtas, Calvin Johnson,
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev

On Fri, Jan 31, 2020 at 09:04:34PM +0530, Calvin Johnson wrote:
> From: Marcin Wojtas <mw@semihalf.com>
> 
> This patch introduces fwnode helper for registering MDIO
> bus, as well as one for finding the PHY, basing on its
> firmware node pointer. Comparing to existing OF equivalent,
> fwnode_mdiobus_register() does not support:
>  * deprecated bindings (device whitelist, nor the PHY ID embedded
>    in the compatible string)
>  * MDIO bus auto scanning
> 
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>

Hi Calvin

This appears to but a cut and paste, follow by an intelligent
s/of/fwnode/g.

Did you make any attempt to consolidate the two implementations?  It
seems like there should be some level of abstraction that hides away
the difference between DT properties, and DT properties stuffed into
ACPI tables?

     Andrew


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

* Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
  2020-01-31 15:55   ` Andy Shevchenko
@ 2020-02-03  2:32   ` kbuild test robot
  2020-02-03  8:41   ` kbuild test robot
  2 siblings, 0 replies; 34+ messages in thread
From: kbuild test robot @ 2020-02-03  2:32 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: kbuild-all, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Calvin Johnson,
	Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 43660 bytes --]

Hi Calvin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on v5.5]
[cannot apply to driver-core/driver-core-testing net-next/master net/master linus/master sparc-next/master next-20200131]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Calvin-Johnson/ACPI-support-for-xgmac_mdio-and-dpaa2-mac-drivers/20200203-070754
base:    d5226fa6dbae0569ee43ecfc08bdcd6770fc4755
config: x86_64-defconfig (attached as .config)
compiler: gcc-7 (Debian 7.5.0-3) 7.5.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

Note: the linux-review/Calvin-Johnson/ACPI-support-for-xgmac_mdio-and-dpaa2-mac-drivers/20200203-070754 HEAD 90ffe7e2e45e6e2671084e1169a7bd16c6b3cc8d builds fine.
      It only hurts bisectibility.

All error/warnings (new ones prefixed by >>):

          ^~~~~~
          PORT_E
   drivers/gpu/drm/i915/display/intel_display.h:226:7: error: 'PORT_G' undeclared (first use in this function); did you mean 'PORT_F'?
     case PORT_G:
          ^~~~~~
          PORT_F
   drivers/gpu/drm/i915/display/intel_display.h:228:7: error: 'PORT_H' undeclared (first use in this function); did you mean 'PORT_G'?
     case PORT_H:
          ^~~~~~
          PORT_G
   drivers/gpu/drm/i915/display/intel_display.h:230:7: error: 'PORT_I' undeclared (first use in this function); did you mean 'PORT_H'?
     case PORT_I:
          ^~~~~~
          PORT_H
   In file included from drivers/gpu/drm/i915/display/intel_bios.c:34:0:
   drivers/gpu/drm/i915/i915_drv.h: At top level:
   drivers/gpu/drm/i915/i915_drv.h:730:41: error: 'I915_MAX_PORTS' undeclared here (not in a function); did you mean 'I915_MAX_PHYS'?
     struct ddi_vbt_port_info ddi_port_info[I915_MAX_PORTS];
                                            ^~~~~~~~~~~~~~
                                            I915_MAX_PHYS
   In file included from include/linux/bitops.h:5:0,
                    from include/linux/kernel.h:12,
                    from include/linux/delay.h:22,
                    from include/drm/drm_dp_helper.h:26,
                    from drivers/gpu/drm/i915/display/intel_bios.c:28:
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'parse_dsi_backlight_ports':
   drivers/gpu/drm/i915/display/intel_bios.c:807:36: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
      dev_priv->vbt.dsi.bl_ports = BIT(PORT_A);
                                       ^
   include/linux/bits.h:8:30: note: in definition of macro 'BIT'
    #define BIT(nr)   (UL(1) << (nr))
                                 ^~
   drivers/gpu/drm/i915/display/intel_bios.c:810:36: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_A'?
      dev_priv->vbt.dsi.bl_ports = BIT(PORT_C);
                                       ^
   include/linux/bits.h:8:30: note: in definition of macro 'BIT'
    #define BIT(nr)   (UL(1) << (nr))
                                 ^~
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'get_port_by_ddc_pin':
   drivers/gpu/drm/i915/display/intel_bios.c:1249:14: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     for (port = PORT_A; port < I915_MAX_PORTS; port++) {
                 ^~~~~~
                 PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'get_port_by_aux_ch':
   drivers/gpu/drm/i915/display/intel_bios.c:1300:14: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     for (port = PORT_A; port < I915_MAX_PORTS; port++) {
                 ^~~~~~
                 PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'dvo_port_to_port':
   drivers/gpu/drm/i915/display/intel_bios.c:1396:4: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
      [PORT_A] = { DVO_PORT_HDMIA, DVO_PORT_DPA, -1},
       ^~~~~~
       PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c:1396:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1396:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1397:4: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_A'?
      [PORT_B] = { DVO_PORT_HDMIB, DVO_PORT_DPB, -1},
       ^~~~~~
       PORT_A
   drivers/gpu/drm/i915/display/intel_bios.c:1397:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1397:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1398:4: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
      [PORT_C] = { DVO_PORT_HDMIC, DVO_PORT_DPC, -1},
       ^~~~~~
       PORT_B
   drivers/gpu/drm/i915/display/intel_bios.c:1398:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1398:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1399:4: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_C'?
      [PORT_D] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1},
       ^~~~~~
       PORT_C
   drivers/gpu/drm/i915/display/intel_bios.c:1399:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1399:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1400:4: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_D'?
      [PORT_E] = { DVO_PORT_CRT, DVO_PORT_HDMIE, DVO_PORT_DPE},
       ^~~~~~
       PORT_D
   drivers/gpu/drm/i915/display/intel_bios.c:1400:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1400:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1401:4: error: 'PORT_F' undeclared (first use in this function); did you mean 'PORT_E'?
      [PORT_F] = { DVO_PORT_HDMIF, DVO_PORT_DPF, -1},
       ^~~~~~
       PORT_E
   drivers/gpu/drm/i915/display/intel_bios.c:1401:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1401:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c:1402:4: error: 'PORT_G' undeclared (first use in this function); did you mean 'PORT_F'?
      [PORT_G] = { DVO_PORT_HDMIG, DVO_PORT_DPG, -1},
       ^~~~~~
       PORT_F
   drivers/gpu/drm/i915/display/intel_bios.c:1402:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:1402:4: note: (near initialization for 'dvo_ports')
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'parse_ddi_port':
   drivers/gpu/drm/i915/display/intel_bios.c:1446:14: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     if (port == PORT_A && is_dvi) {
                 ^~~~~~
                 PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c:1472:24: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_A'?
     if (is_crt && port != PORT_E)
                           ^~~~~~
                           PORT_A
>> drivers/gpu/drm/i915/display/intel_bios.c:1482:25: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_E'?
     if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E))
                            ^~~~~~
                            PORT_E
   drivers/gpu/drm/i915/display/intel_bios.c:1482:43: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
     if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E))
                                              ^~~~~~
                                              PORT_B
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'init_vbt_defaults':
   drivers/gpu/drm/i915/display/intel_bios.c:1725:14: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     for (port = PORT_A; port < I915_MAX_PORTS; port++) {
                 ^~~~~~
                 PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'init_vbt_missing_defaults':
   drivers/gpu/drm/i915/display/intel_bios.c:1739:14: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     for (port = PORT_A; port < I915_MAX_PORTS; port++) {
                 ^~~~~~
                 PORT_DA
   drivers/gpu/drm/i915/display/intel_bios.c:1751:51: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_A'?
      info->supports_dvi = (port != PORT_A && port != PORT_E);
                                                      ^~~~~~
                                                      PORT_A
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'intel_bios_is_port_present':
   drivers/gpu/drm/i915/display/intel_bios.c:2027:4: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_BNC'?
      [PORT_B] = { DVO_PORT_DPB, DVO_PORT_HDMIB, },
       ^~~~~~
       PORT_BNC
   drivers/gpu/drm/i915/display/intel_bios.c:2027:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2027:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2028:4: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
      [PORT_C] = { DVO_PORT_DPC, DVO_PORT_HDMIC, },
       ^~~~~~
       PORT_B
   drivers/gpu/drm/i915/display/intel_bios.c:2028:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2028:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2029:4: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_C'?
      [PORT_D] = { DVO_PORT_DPD, DVO_PORT_HDMID, },
       ^~~~~~
       PORT_C
   drivers/gpu/drm/i915/display/intel_bios.c:2029:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2029:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2030:4: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_D'?
      [PORT_E] = { DVO_PORT_DPE, DVO_PORT_HDMIE, },
       ^~~~~~
       PORT_D
   drivers/gpu/drm/i915/display/intel_bios.c:2030:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2030:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2031:4: error: 'PORT_F' undeclared (first use in this function); did you mean 'PORT_E'?
      [PORT_F] = { DVO_PORT_DPF, DVO_PORT_HDMIF, },
       ^~~~~~
       PORT_E
   drivers/gpu/drm/i915/display/intel_bios.c:2031:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2031:4: note: (near initialization for 'port_mapping')
   In file included from arch/x86/include/asm/bug.h:83:0,
                    from include/linux/bug.h:5,
                    from include/linux/cpumask.h:14,
                    from arch/x86/include/asm/cpumask.h:5,
                    from arch/x86/include/asm/msr.h:11,
                    from arch/x86/include/asm/processor.h:22,
                    from include/linux/mutex.h:19,
                    from include/linux/kernfs.h:12,
                    from include/linux/sysfs.h:16,
                    from include/linux/kobject.h:20,
                    from include/linux/of.h:17,
                    from include/linux/irqdomain.h:35,
                    from include/linux/acpi.h:13,
                    from include/linux/i2c.h:13,
                    from include/drm/drm_dp_helper.h:27,
                    from drivers/gpu/drm/i915/display/intel_bios.c:28:
   drivers/gpu/drm/i915/display/intel_bios.c:2045:22: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_F'?
     if (WARN_ON(port == PORT_A) || port >= ARRAY_SIZE(port_mapping))
                         ^
   include/asm-generic/bug.h:122:25: note: in definition of macro 'WARN'
     int __ret_warn_on = !!(condition);    \
                            ^~~~~~~~~
   drivers/gpu/drm/i915/display/intel_bios.c:2045:6: note: in expansion of macro 'WARN_ON'
     if (WARN_ON(port == PORT_A) || port >= ARRAY_SIZE(port_mapping))
         ^~~~~~~
   drivers/gpu/drm/i915/display/intel_bios.c: In function 'intel_bios_is_port_edp':
   drivers/gpu/drm/i915/display/intel_bios.c:2075:4: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_BNC'?
      [PORT_B] = DVO_PORT_DPB,
       ^~~~~~
       PORT_BNC
   drivers/gpu/drm/i915/display/intel_bios.c:2075:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2075:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2076:4: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
      [PORT_C] = DVO_PORT_DPC,
       ^~~~~~
       PORT_B
   drivers/gpu/drm/i915/display/intel_bios.c:2076:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2076:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2077:4: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_C'?
      [PORT_D] = DVO_PORT_DPD,
       ^~~~~~
       PORT_C
   drivers/gpu/drm/i915/display/intel_bios.c:2077:4: error: array index in initializer not of integer type
   drivers/gpu/drm/i915/display/intel_bios.c:2077:4: note: (near initialization for 'port_mapping')
   drivers/gpu/drm/i915/display/intel_bios.c:2078:4: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_D'?
      [PORT_E] = DVO_PORT_DPE,
       ^~~~~~
       PORT_D
--
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_port_to_phy':
   drivers/gpu/drm/i915/display/intel_display.c:6803:38: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_DA'?
     if (IS_ELKHARTLAKE(i915) && port == PORT_D)
                                         ^~~~~~
                                         PORT_DA
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_port_to_tc':
   drivers/gpu/drm/i915/display/intel_display.c:6815:17: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_DA'?
      return port - PORT_D;
                    ^~~~~~
                    PORT_DA
   drivers/gpu/drm/i915/display/intel_display.c:6817:16: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_D'?
     return port - PORT_C;
                   ^~~~~~
                   PORT_D
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_port_to_power_domain':
   drivers/gpu/drm/i915/display/intel_display.c:6823:7: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     case PORT_A:
          ^~~~~~
          PORT_DA
   drivers/gpu/drm/i915/display/intel_display.c:6825:7: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_A'?
     case PORT_B:
          ^~~~~~
          PORT_A
   drivers/gpu/drm/i915/display/intel_display.c:6827:7: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
     case PORT_C:
          ^~~~~~
          PORT_B
   drivers/gpu/drm/i915/display/intel_display.c:6829:7: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_C'?
     case PORT_D:
          ^~~~~~
          PORT_C
   drivers/gpu/drm/i915/display/intel_display.c:6831:7: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_D'?
     case PORT_E:
          ^~~~~~
          PORT_D
   drivers/gpu/drm/i915/display/intel_display.c:6833:7: error: 'PORT_F' undeclared (first use in this function); did you mean 'PORT_E'?
     case PORT_F:
          ^~~~~~
          PORT_E
   drivers/gpu/drm/i915/display/intel_display.c:6835:7: error: 'PORT_G' undeclared (first use in this function); did you mean 'PORT_F'?
     case PORT_G:
          ^~~~~~
          PORT_F
   drivers/gpu/drm/i915/display/intel_display.c: In function 'ironlake_init_pch_refclk':
   drivers/gpu/drm/i915/display/intel_display.c:9020:25: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
       if (encoder->port == PORT_A)
                            ^~~~~~
                            PORT_DA
   In file included from drivers/gpu/drm/i915/display/intel_crt.h:9:0,
                    from drivers/gpu/drm/i915/display/intel_display.c:46:
   drivers/gpu/drm/i915/display/intel_display.c: In function 'cannonlake_get_ddi_pll':
   drivers/gpu/drm/i915/i915_reg.h:10005:59: error: 'PORT_F' undeclared (first use in this function); did you mean 'PORT_DA'?
    #define  DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port) ((port) == PORT_F ? 21 : \
                                                              ^
   drivers/gpu/drm/i915/i915_reg.h:10007:53: note: in expansion of macro 'DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT'
    #define  DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port) (3 << DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port))
                                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c:10217:36: note: in expansion of macro 'DPCLKA_CFGCR0_DDI_CLK_SEL_MASK'
     temp = I915_READ(DPCLKA_CFGCR0) & DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port);
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c: In function 'bxt_get_ddi_pll':
   drivers/gpu/drm/i915/display/intel_display.c:10270:7: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     case PORT_A:
          ^~~~~~
          PORT_DA
   drivers/gpu/drm/i915/display/intel_display.c:10273:7: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_A'?
     case PORT_B:
          ^~~~~~
          PORT_A
   drivers/gpu/drm/i915/display/intel_display.c:10276:7: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
     case PORT_C:
          ^~~~~~
          PORT_B
   In file included from drivers/gpu/drm/i915/display/intel_ddi.h:11:0,
                    from drivers/gpu/drm/i915/display/intel_display.c:47:
   drivers/gpu/drm/i915/display/intel_display.c: In function 'bxt_get_dsi_transcoder_state':
   drivers/gpu/drm/i915/display/intel_display.h:336:18: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     for ((__port) = PORT_A; (__port) < I915_MAX_PORTS; (__port)++) \
                     ^
   drivers/gpu/drm/i915/display/intel_display.c:10448:2: note: in expansion of macro 'for_each_port_masked'
     for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) {
     ^~~~~~~~~~~~~~~~~~~~
   In file included from include/drm/drm_connector.h:31:0,
                    from include/drm/drm_modes.h:33,
                    from include/drm/drm_crtc.h:40,
                    from include/drm/drm_atomic.h:31,
                    from drivers/gpu/drm/i915/display/intel_display.c:35:
   drivers/gpu/drm/i915/display/intel_display.c:10448:47: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_A'?
     for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) {
                                                  ^
   include/drm/drm_util.h:63:38: note: in definition of macro 'for_each_if'
    #define for_each_if(condition) if (!(condition)) {} else
                                         ^~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c:10448:2: note: in expansion of macro 'for_each_port_masked'
     for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) {
     ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c:10448:43: note: in expansion of macro 'BIT'
     for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) {
                                              ^~~
   drivers/gpu/drm/i915/display/intel_display.c: In function 'haswell_get_ddi_port_state':
>> drivers/gpu/drm/i915/display/intel_display.c:10528:15: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_DA'?
         (port == PORT_E) && I915_READ(LPT_TRANSCONF) & TRANS_ENABLE) {
                  ^~~~~~
                  PORT_DA
   In file included from drivers/gpu/drm/i915/display/intel_display_types.h:46:0,
                    from drivers/gpu/drm/i915/display/intel_dsi.h:30,
                    from drivers/gpu/drm/i915/display/intel_display.c:49:
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_ddi_crt_present':
   drivers/gpu/drm/i915/display/intel_display.c:15884:28: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
     if (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)
                               ^
   drivers/gpu/drm/i915/i915_drv.h:1981:45: note: in definition of macro '__I915_REG_OP'
     intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
                                                ^~~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c:15884:6: note: in expansion of macro 'I915_READ'
     if (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)
         ^~~~~~~~~
   drivers/gpu/drm/i915/i915_reg.h:237:33: note: in expansion of macro '_MMIO'
    #define _MMIO_PORT(port, a, b)  _MMIO(_PORT(port, a, b))
                                    ^~~~~
   drivers/gpu/drm/i915/i915_reg.h:231:28: note: in expansion of macro '_PICK_EVEN'
    #define _PORT(port, a, b)  _PICK_EVEN(port, a, b)
                               ^~~~~~~~~~
   drivers/gpu/drm/i915/i915_reg.h:237:39: note: in expansion of macro '_PORT'
    #define _MMIO_PORT(port, a, b)  _MMIO(_PORT(port, a, b))
                                          ^~~~~
   drivers/gpu/drm/i915/i915_reg.h:9745:27: note: in expansion of macro '_MMIO_PORT'
    #define DDI_BUF_CTL(port) _MMIO_PORT(port, _DDI_BUF_CTL_A, _DDI_BUF_CTL_B)
                              ^~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c:15884:16: note: in expansion of macro 'DDI_BUF_CTL'
     if (I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)
                   ^~~~~~~~~~~
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_setup_outputs':
   drivers/gpu/drm/i915/display/intel_display.c:15940:28: error: 'PORT_A' undeclared (first use in this function); did you mean 'PORT_DA'?
      intel_ddi_init(dev_priv, PORT_A);
                               ^~~~~~
                               PORT_DA
   drivers/gpu/drm/i915/display/intel_display.c:15941:28: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_A'?
      intel_ddi_init(dev_priv, PORT_B);
                               ^~~~~~
                               PORT_A
   drivers/gpu/drm/i915/display/intel_display.c:15942:28: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_B'?
      intel_ddi_init(dev_priv, PORT_D);
                               ^~~~~~
                               PORT_B
   drivers/gpu/drm/i915/display/intel_display.c:15943:28: error: 'PORT_E' undeclared (first use in this function); did you mean 'PORT_D'?
      intel_ddi_init(dev_priv, PORT_E);
                               ^~~~~~
                               PORT_D
   drivers/gpu/drm/i915/display/intel_display.c:15944:28: error: 'PORT_F' undeclared (first use in this function); did you mean 'PORT_E'?
      intel_ddi_init(dev_priv, PORT_F);
                               ^~~~~~
                               PORT_E
   drivers/gpu/drm/i915/display/intel_display.c:15945:28: error: 'PORT_G' undeclared (first use in this function); did you mean 'PORT_F'?
      intel_ddi_init(dev_priv, PORT_G);
                               ^~~~~~
                               PORT_F
   drivers/gpu/drm/i915/display/intel_display.c:15946:28: error: 'PORT_H' undeclared (first use in this function); did you mean 'PORT_G'?
      intel_ddi_init(dev_priv, PORT_H);
                               ^~~~~~
                               PORT_G
   drivers/gpu/drm/i915/display/intel_display.c:15947:28: error: 'PORT_I' undeclared (first use in this function); did you mean 'PORT_H'?
      intel_ddi_init(dev_priv, PORT_I);
                               ^~~~~~
                               PORT_H
   drivers/gpu/drm/i915/display/intel_display.c:15952:28: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_I'?
      intel_ddi_init(dev_priv, PORT_C);
                               ^~~~~~
                               PORT_I
   drivers/gpu/drm/i915/display/intel_display.c: In function 'ibx_sanitize_pch_ports':
   drivers/gpu/drm/i915/display/intel_display.c:17557:37: error: 'PORT_B' undeclared (first use in this function); did you mean 'PORT_BNC'?
     ibx_sanitize_pch_dp_port(dev_priv, PORT_B, PCH_DP_B);
                                        ^~~~~~
                                        PORT_BNC
   drivers/gpu/drm/i915/display/intel_display.c:17558:37: error: 'PORT_C' undeclared (first use in this function); did you mean 'PORT_B'?
     ibx_sanitize_pch_dp_port(dev_priv, PORT_C, PCH_DP_C);
                                        ^~~~~~
                                        PORT_B
   drivers/gpu/drm/i915/display/intel_display.c:17559:37: error: 'PORT_D' undeclared (first use in this function); did you mean 'PORT_C'?
     ibx_sanitize_pch_dp_port(dev_priv, PORT_D, PCH_DP_D);
                                        ^~~~~~
                                        PORT_C
   drivers/gpu/drm/i915/display/intel_display.c: In function 'intel_port_to_tc':
   drivers/gpu/drm/i915/display/intel_display.c:6818:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
..

vim +1482 drivers/gpu/drm/i915/display/intel_bios.c

b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1419  
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1420  static void parse_ddi_port(struct drm_i915_private *dev_priv,
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1421  			   const struct child_device_config *child,
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1422  			   u8 bdb_version)
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1423  {
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1424  	struct ddi_vbt_port_info *info;
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1425  	bool is_dvi, is_hdmi, is_dp, is_edp, is_crt;
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1426  	enum port port;
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1427  
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1428  	port = dvo_port_to_port(child->dvo_port);
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1429  	if (port == PORT_NONE)
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1430  		return;
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1431  
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1432  	info = &dev_priv->vbt.ddi_port_info[port];
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1433  
7679f9b8f6ee39 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1434  	if (info->child) {
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1435  		DRM_DEBUG_KMS("More than one child device for port %c in VBT, using the first.\n",
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1436  			      port_name(port));
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1437  		return;
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1438  	}
b024ab9b2d3aa1 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-03-22  1439  
cc9985893aacc3 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-24  1440  	is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING;
cc9985893aacc3 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-24  1441  	is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT;
cc9985893aacc3 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-24  1442  	is_crt = child->device_type & DEVICE_TYPE_ANALOG_OUTPUT;
cc9985893aacc3 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-24  1443  	is_hdmi = is_dvi && (child->device_type & DEVICE_TYPE_NOT_HDMI_OUTPUT) == 0;
cc9985893aacc3 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-24  1444  	is_edp = is_dp && (child->device_type & DEVICE_TYPE_INTERNAL_CONNECTOR);
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1445  
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21 @1446  	if (port == PORT_A && is_dvi) {
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1447  		DRM_DEBUG_KMS("VBT claims port A supports DVI%s, ignoring\n",
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1448  			      is_hdmi ? "/HDMI" : "");
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1449  		is_dvi = false;
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1450  		is_hdmi = false;
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1451  	}
2ba7d7e0437127 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-21  1452  
311a20949f047a drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1453  	info->supports_dvi = is_dvi;
311a20949f047a drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1454  	info->supports_hdmi = is_hdmi;
311a20949f047a drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1455  	info->supports_dp = is_dp;
a98d9c1d7e9bb0 drivers/gpu/drm/i915/intel_bios.c Imre Deak      2016-12-21  1456  	info->supports_edp = is_edp;
311a20949f047a drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1457  
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1458  	if (bdb_version >= 195)
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1459  		info->supports_typec_usb = child->dp_usb_type_c;
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1460  
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1461  	if (bdb_version >= 209)
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1462  		info->supports_tbt = child->tbt;
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1463  
932cd15431567c drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1464  	DRM_DEBUG_KMS("Port %c VBT info: CRT:%d DVI:%d HDMI:%d DP:%d eDP:%d LSPCON:%d USB-Type-C:%d TBT:%d\n",
932cd15431567c drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1465  		      port_name(port), is_crt, is_dvi, is_hdmi, is_dp, is_edp,
932cd15431567c drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1466  		      HAS_LSPCON(dev_priv) && child->lspcon,
38b3416f3c2f1d drivers/gpu/drm/i915/intel_bios.c Imre Deak      2018-12-14  1467  		      info->supports_typec_usb, info->supports_tbt);
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1468  
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1469  	if (is_edp && is_dvi)
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1470  		DRM_DEBUG_KMS("Internal DP port %c is TMDS compatible\n",
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1471  			      port_name(port));
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1472  	if (is_crt && port != PORT_E)
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1473  		DRM_DEBUG_KMS("Port %c is analog\n", port_name(port));
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1474  	if (is_crt && (is_dvi || is_dp))
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1475  		DRM_DEBUG_KMS("Analog port %c is also DP or TMDS compatible\n",
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1476  			      port_name(port));
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1477  	if (is_dvi && (port == PORT_A || port == PORT_E))
9b13494c916dc0 drivers/gpu/drm/i915/intel_bios.c Masanari Iida  2014-08-06  1478  		DRM_DEBUG_KMS("Port %c is TMDS compatible\n", port_name(port));
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1479  	if (!is_dvi && !is_dp && !is_crt)
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1480  		DRM_DEBUG_KMS("Port %c is not DP/TMDS/CRT compatible\n",
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1481  			      port_name(port));
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12 @1482  	if (is_edp && (port == PORT_B || port == PORT_C || port == PORT_E))
554d6af50a4012 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1483  		DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port));
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1484  
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1485  	if (is_dvi) {
e53a1058395435 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1486  		u8 ddc_pin;
e53a1058395435 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1487  
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1488  		ddc_pin = map_ddc_pin(dev_priv, child->ddc_pin);
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1489  		if (intel_gmbus_is_valid_pin(dev_priv, ddc_pin)) {
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1490  			info->alternate_ddc_pin = ddc_pin;
9454fa871edf15 drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2016-10-11  1491  			sanitize_ddc_pin(dev_priv, port);
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1492  		} else {
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1493  			DRM_DEBUG_KMS("Port %c has invalid DDC pin %d, "
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1494  				      "sticking to defaults\n",
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1495  				      port_name(port), ddc_pin);
f212bf9abe5de9 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1496  		}
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1497  	}
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1498  
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1499  	if (is_dp) {
e53a1058395435 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1500  		info->alternate_aux_channel = child->aux_channel;
9454fa871edf15 drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2016-10-11  1501  
9454fa871edf15 drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2016-10-11  1502  		sanitize_aux_ch(dev_priv, port);
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1503  	}
6bf19e7c548d46 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1504  
0ead5f81d4200b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-28  1505  	if (bdb_version >= 158) {
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1506  		/* The VBT HDMI level shift values match the table we have. */
e53a1058395435 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-04-11  1507  		u8 hdmi_level_shift = child->hdmi_level_shifter_value;
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1508  		DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n",
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1509  			      port_name(port),
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1510  			      hdmi_level_shift);
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1511  		info->hdmi_level_shift = hdmi_level_shift;
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1512  	}
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1513  
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1514  	if (bdb_version >= 204) {
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1515  		int max_tmds_clock;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1516  
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1517  		switch (child->hdmi_max_data_rate) {
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1518  		default:
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1519  			MISSING_CASE(child->hdmi_max_data_rate);
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1520  			/* fall through */
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1521  		case HDMI_MAX_DATA_RATE_PLATFORM:
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1522  			max_tmds_clock = 0;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1523  			break;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1524  		case HDMI_MAX_DATA_RATE_297:
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1525  			max_tmds_clock = 297000;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1526  			break;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1527  		case HDMI_MAX_DATA_RATE_165:
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1528  			max_tmds_clock = 165000;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1529  			break;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1530  		}
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1531  
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1532  		if (max_tmds_clock)
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1533  			DRM_DEBUG_KMS("VBT HDMI max TMDS clock for port %c: %d kHz\n",
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1534  				      port_name(port), max_tmds_clock);
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1535  		info->max_tmds_clock = max_tmds_clock;
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1536  	}
d6038611aa3d7d drivers/gpu/drm/i915/intel_bios.c Ville Syrjälä  2017-10-30  1537  
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1538  	/* Parse the I_boost config for SKL and above */
0ead5f81d4200b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-09-28  1539  	if (bdb_version >= 196 && child->iboost) {
f22bb35856ba1e drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-25  1540  		info->dp_boost_level = translate_iboost(child->dp_iboost_level);
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1541  		DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1542  			      port_name(port), info->dp_boost_level);
f22bb35856ba1e drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2017-08-25  1543  		info->hdmi_boost_level = translate_iboost(child->hdmi_iboost_level);
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1544  		DRM_DEBUG_KMS("VBT HDMI boost level for port %c: %d\n",
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1545  			      port_name(port), info->hdmi_boost_level);
75067ddecf2127 drivers/gpu/drm/i915/intel_bios.c Antti Koskipaa 2015-07-10  1546  	}
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1547  
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1548  	/* DP max link rate for CNL+ */
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1549  	if (bdb_version >= 216) {
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1550  		switch (child->dp_max_link_rate) {
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1551  		default:
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1552  		case VBT_DP_MAX_LINK_RATE_HBR3:
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1553  			info->dp_max_link_rate = 810000;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1554  			break;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1555  		case VBT_DP_MAX_LINK_RATE_HBR2:
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1556  			info->dp_max_link_rate = 540000;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1557  			break;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1558  		case VBT_DP_MAX_LINK_RATE_HBR:
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1559  			info->dp_max_link_rate = 270000;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1560  			break;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1561  		case VBT_DP_MAX_LINK_RATE_LBR:
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1562  			info->dp_max_link_rate = 162000;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1563  			break;
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1564  		}
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1565  		DRM_DEBUG_KMS("VBT DP max link rate for port %c: %d\n",
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1566  			      port_name(port), info->dp_max_link_rate);
99b91bda84060b drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2018-02-01  1567  	}
7679f9b8f6ee39 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1568  
7679f9b8f6ee39 drivers/gpu/drm/i915/intel_bios.c Jani Nikula    2019-05-31  1569  	info->child = child;
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1570  }
6acab15a7b0d27 drivers/gpu/drm/i915/intel_bios.c Paulo Zanoni   2013-09-12  1571  

:::::: The code at line 1482 was first introduced by commit
:::::: 554d6af50a40125c28e4e1035527a684d2607266 drm/i915: add some assertions about VBT DDI port types

:::::: TO: Paulo Zanoni <paulo.r.zanoni@intel.com>
:::::: CC: Daniel Vetter <daniel.vetter@ffwll.ch>

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 28826 bytes --]

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

* Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-01-31 15:34 ` [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus Calvin Johnson
  2020-01-31 16:08   ` Andy Shevchenko
@ 2020-02-03  3:44   ` Florian Fainelli
  2020-02-04 18:46     ` Calvin Johnson
  1 sibling, 1 reply; 34+ messages in thread
From: Florian Fainelli @ 2020-02-03  3:44 UTC (permalink / raw)
  To: Calvin Johnson, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Calvin Johnson, David S. Miller, Madalin Bucur, linux-kernel, netdev



On 1/31/2020 7:34 AM, Calvin Johnson wrote:
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> 
> Add ACPI support for MDIO bus registration while maintaining
> the existing DT support.
> 
> Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> ---

[snip]

>  	bus = mdiobus_alloc_size(sizeof(struct mdio_fsl_priv));
> @@ -263,25 +265,41 @@ 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, "%llx",
> +		 (unsigned long long)res->start);

You could omit this clean up change.

>  
>  	/* Set the PHY base address */
>  	priv = bus->priv;
> -	priv->mdio_base = of_iomap(np, 0);
> +	priv->mdio_base = devm_ioremap_resource(&pdev->dev, res);
>  	if (!priv->mdio_base) {

This probably needs to become IS_ERR() instead of a plain NULL check

>  		ret = -ENOMEM;
>  		goto err_ioremap;
>  	}
>  
> -	priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> -						       "little-endian");
> -
> -	priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> -						  "fsl,erratum-a011043");
> -
> -	ret = of_mdiobus_register(bus, np);
> -	if (ret) {
> -		dev_err(&pdev->dev, "cannot register MDIO bus\n");
> +	if (is_of_node(pdev->dev.fwnode)) {
> +		priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> +							       "little-endian");
> +
> +		priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> +							  "fsl,erratum-a011043");
> +
> +		ret = of_mdiobus_register(bus, np);
> +		if (ret) {
> +			dev_err(&pdev->dev, "cannot register MDIO bus\n");
> +			goto err_registration;
> +		}
> +	} else if (is_acpi_node(pdev->dev.fwnode)) {
> +		priv->is_little_endian =
> +			fwnode_property_read_bool(pdev->dev.fwnode,
> +						  "little-endian");
> +		ret = fwnode_mdiobus_register(bus, pdev->dev.fwnode);
> +		if (ret) {
> +			dev_err(&pdev->dev, "cannot register MDIO bus\n");
> +			goto err_registration;
> +		}

The little-endian property read can be moved out of the DT/ACPI paths
and you can just use device_property_read_bool() for that purpose.
Having both fwnode_mdiobus_register() and of_mdiobus_register() looks
fairly redundant, you could quite easily introduce a wrapper:
device_mdiobus_register() which internally takes the appropriate DT/ACPI
paths as needed.
-- 
Florian

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

* Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
  2020-01-31 15:55   ` Andy Shevchenko
  2020-02-03  2:32   ` kbuild test robot
@ 2020-02-03  8:41   ` kbuild test robot
  2 siblings, 0 replies; 34+ messages in thread
From: kbuild test robot @ 2020-02-03  8:41 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: kbuild-all, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Calvin Johnson,
	Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 16801 bytes --]

Hi Calvin,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on v5.5]
[cannot apply to driver-core/driver-core-testing net-next/master net/master linus/master sparc-next/master next-20200203]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Calvin-Johnson/ACPI-support-for-xgmac_mdio-and-dpaa2-mac-drivers/20200203-070754
base:    d5226fa6dbae0569ee43ecfc08bdcd6770fc4755
config: sparc64-randconfig-a001-20200203 (attached as .config)
compiler: sparc64-linux-gcc (GCC) 7.5.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.5.0 make.cross ARCH=sparc64 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   include/linux/phy.h: In function 'phy_ethtool_get_stats':
   include/linux/phy.h:1260:22: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_lock(&phydev->lock);
                         ^
   include/linux/mutex.h:153:44: note: in definition of macro 'mutex_lock'
    #define mutex_lock(lock) mutex_lock_nested(lock, 0)
                                               ^~~~
   In file included from include/linux/property.h:16:0,
                    from include/linux/of.h:22,
                    from arch/sparc/include/asm/openprom.h:15,
                    from arch/sparc/include/asm/device.h:8,
                    from include/linux/device.h:29,
                    from include/linux/dma-mapping.h:7,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/phy.h:1261:33: error: passing argument 2 of 'phydev->drv->get_stats' from incompatible pointer type [-Werror=incompatible-pointer-types]
     phydev->drv->get_stats(phydev, stats, data);
                                    ^~~~~
   include/linux/phy.h:1261:33: note: expected 'struct ethtool_stats *' but argument is of type 'struct ethtool_stats *'
   include/linux/phy.h:1262:24: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_unlock(&phydev->lock);
                           ^~~~
                           link
   In file included from include/linux/dma-mapping.h:7:0,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/device.h: At top level:
   include/linux/device.h:1370:27: error: conflicting types for 'dev_name'
    static inline const char *dev_name(const struct device *dev)
                              ^~~~~~~~
   In file included from include/linux/property.h:16:0,
                    from include/linux/of.h:22,
                    from arch/sparc/include/asm/openprom.h:15,
                    from arch/sparc/include/asm/device.h:8,
                    from include/linux/device.h:29,
                    from include/linux/dma-mapping.h:7,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/phy.h:1076:9: note: previous implicit declaration of 'dev_name' was here
     return dev_name(&phydev->mdio.dev);
            ^~~~~~~~
   In file included from include/linux/dma-mapping.h:7:0,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/device.h:1417:21: error: conflicting types for 'dev_get_drvdata'
    static inline void *dev_get_drvdata(const struct device *dev)
                        ^~~~~~~~~~~~~~~
   In file included from include/linux/phy.h:18:0,
                    from include/linux/property.h:16,
                    from include/linux/of.h:22,
                    from arch/sparc/include/asm/openprom.h:15,
                    from arch/sparc/include/asm/device.h:8,
                    from include/linux/device.h:29,
                    from include/linux/dma-mapping.h:7,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/mdio.h:79:9: note: previous implicit declaration of 'dev_get_drvdata' was here
     return dev_get_drvdata(&mdio->dev);
            ^~~~~~~~~~~~~~~
   In file included from include/linux/dma-mapping.h:7:0,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/device.h:1422:20: warning: conflicting types for 'dev_set_drvdata'
    static inline void dev_set_drvdata(struct device *dev, void *data)
                       ^~~~~~~~~~~~~~~
   include/linux/device.h:1422:20: error: static declaration of 'dev_set_drvdata' follows non-static declaration
   In file included from include/linux/phy.h:18:0,
                    from include/linux/property.h:16,
                    from include/linux/of.h:22,
                    from arch/sparc/include/asm/openprom.h:15,
                    from arch/sparc/include/asm/device.h:8,
                    from include/linux/device.h:29,
                    from include/linux/dma-mapping.h:7,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/mdio.h:74:2: note: previous implicit declaration of 'dev_set_drvdata' was here
     dev_set_drvdata(&mdio->dev, data);
     ^~~~~~~~~~~~~~~
   net/core/ethtool.c: In function 'ethtool_get_phy_stats':
>> net/core/ethtool.c:1963:45: error: passing argument 2 of 'phy_ethtool_get_stats' from incompatible pointer type [-Werror=incompatible-pointer-types]
       ret = phy_ethtool_get_stats(dev->phydev, &stats, data);
                                                ^
   In file included from include/linux/property.h:16:0,
                    from include/linux/of.h:22,
                    from arch/sparc/include/asm/openprom.h:15,
                    from arch/sparc/include/asm/device.h:8,
                    from include/linux/device.h:29,
                    from include/linux/dma-mapping.h:7,
                    from include/linux/skbuff.h:31,
                    from include/linux/if_ether.h:19,
                    from include/uapi/linux/ethtool.h:19,
                    from include/linux/ethtool.h:18,
                    from net/core/ethtool.c:14:
   include/linux/phy.h:1254:19: note: expected 'struct ethtool_stats *' but argument is of type 'struct ethtool_stats *'
    static inline int phy_ethtool_get_stats(struct phy_device *phydev,
                      ^~~~~~~~~~~~~~~~~~~~~
   net/core/ethtool.c: In function 'ethtool_get_ts_info':
>> net/core/ethtool.c:2174:38: error: passing argument 2 of 'phydev->drv->ts_info' from incompatible pointer type [-Werror=incompatible-pointer-types]
      err = phydev->drv->ts_info(phydev, &info);
                                         ^
   net/core/ethtool.c:2174:38: note: expected 'struct ethtool_ts_info *' but argument is of type 'struct ethtool_ts_info *'
   net/core/ethtool.c: In function '__ethtool_get_module_info':
>> net/core/ethtool.c:2203:43: error: passing argument 2 of 'phydev->drv->module_info' from incompatible pointer type [-Werror=incompatible-pointer-types]
      return phydev->drv->module_info(phydev, modinfo);
                                              ^~~~~~~
   net/core/ethtool.c:2203:43: note: expected 'struct ethtool_modinfo *' but argument is of type 'struct ethtool_modinfo *'
   net/core/ethtool.c: In function '__ethtool_get_module_eeprom':
>> net/core/ethtool.c:2240:45: error: passing argument 2 of 'phydev->drv->module_eeprom' from incompatible pointer type [-Werror=incompatible-pointer-types]
      return phydev->drv->module_eeprom(phydev, ee, data);
                                                ^~
   net/core/ethtool.c:2240:45: note: expected 'struct ethtool_eeprom *' but argument is of type 'struct ethtool_eeprom *'
   In file included from include/linux/notifier.h:14:0,
                    from include/linux/memory_hotplug.h:7,
                    from include/linux/mmzone.h:823,
                    from include/linux/gfp.h:6,
                    from include/linux/umh.h:4,
                    from include/linux/kmod.h:9,
                    from include/linux/module.h:16,
                    from net/core/ethtool.c:10:
   net/core/ethtool.c: In function 'get_phy_tunable':
>> net/core/ethtool.c:2487:22: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_lock(&phydev->lock);
                         ^
   include/linux/mutex.h:153:44: note: in definition of macro 'mutex_lock'
    #define mutex_lock(lock) mutex_lock_nested(lock, 0)
                                               ^~~~
>> net/core/ethtool.c:2488:41: error: passing argument 2 of 'phydev->drv->get_tunable' from incompatible pointer type [-Werror=incompatible-pointer-types]
     ret = phydev->drv->get_tunable(phydev, &tuna, data);
                                            ^
   net/core/ethtool.c:2488:41: note: expected 'struct ethtool_tunable *' but argument is of type 'struct ethtool_tunable *'
   net/core/ethtool.c:2489:24: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_unlock(&phydev->lock);
                           ^~~~
                           link
   In file included from include/linux/notifier.h:14:0,
                    from include/linux/memory_hotplug.h:7,
                    from include/linux/mmzone.h:823,
                    from include/linux/gfp.h:6,
                    from include/linux/umh.h:4,
                    from include/linux/kmod.h:9,
                    from include/linux/module.h:16,
                    from net/core/ethtool.c:10:
   net/core/ethtool.c: In function 'set_phy_tunable':
   net/core/ethtool.c:2521:22: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_lock(&phydev->lock);
                         ^
   include/linux/mutex.h:153:44: note: in definition of macro 'mutex_lock'
    #define mutex_lock(lock) mutex_lock_nested(lock, 0)
                                               ^~~~
>> net/core/ethtool.c:2522:41: error: passing argument 2 of 'phydev->drv->set_tunable' from incompatible pointer type [-Werror=incompatible-pointer-types]
     ret = phydev->drv->set_tunable(phydev, &tuna, data);
                                            ^
   net/core/ethtool.c:2522:41: note: expected 'struct ethtool_tunable *' but argument is of type 'struct ethtool_tunable *'
   net/core/ethtool.c:2523:24: error: 'struct phy_device' has no member named 'lock'; did you mean 'link'?
     mutex_unlock(&phydev->lock);
                           ^~~~
                           link
   cc1: some warnings being treated as errors

vim +/phy_ethtool_get_stats +1963 net/core/ethtool.c

^1da177e4c3f41 Linus Torvalds     2005-04-16  1930  
f3a4094558ddf8 Andrew Lunn        2015-12-30  1931  static int ethtool_get_phy_stats(struct net_device *dev, void __user *useraddr)
f3a4094558ddf8 Andrew Lunn        2015-12-30  1932  {
9994338227179e Florian Fainelli   2018-04-25  1933  	const struct ethtool_ops *ops = dev->ethtool_ops;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1934  	struct phy_device *phydev = dev->phydev;
9994338227179e Florian Fainelli   2018-04-25  1935  	struct ethtool_stats stats;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1936  	u64 *data;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1937  	int ret, n_stats;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1938  
9994338227179e Florian Fainelli   2018-04-25  1939  	if (!phydev && (!ops->get_ethtool_phy_stats || !ops->get_sset_count))
f3a4094558ddf8 Andrew Lunn        2015-12-30  1940  		return -EOPNOTSUPP;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1941  
9994338227179e Florian Fainelli   2018-04-25  1942  	if (dev->phydev && !ops->get_ethtool_phy_stats)
c59530d0d5dccc Florian Fainelli   2018-04-25  1943  		n_stats = phy_ethtool_get_sset_count(dev->phydev);
9994338227179e Florian Fainelli   2018-04-25  1944  	else
9994338227179e Florian Fainelli   2018-04-25  1945  		n_stats = ops->get_sset_count(dev, ETH_SS_PHY_STATS);
f3a4094558ddf8 Andrew Lunn        2015-12-30  1946  	if (n_stats < 0)
f3a4094558ddf8 Andrew Lunn        2015-12-30  1947  		return n_stats;
4d1ceea8516cd6 Alexei Starovoitov 2017-01-30  1948  	if (n_stats > S32_MAX / sizeof(u64))
4d1ceea8516cd6 Alexei Starovoitov 2017-01-30  1949  		return -ENOMEM;
4d1ceea8516cd6 Alexei Starovoitov 2017-01-30  1950  	WARN_ON_ONCE(!n_stats);
f3a4094558ddf8 Andrew Lunn        2015-12-30  1951  
f3a4094558ddf8 Andrew Lunn        2015-12-30  1952  	if (copy_from_user(&stats, useraddr, sizeof(stats)))
f3a4094558ddf8 Andrew Lunn        2015-12-30  1953  		return -EFAULT;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1954  
f3a4094558ddf8 Andrew Lunn        2015-12-30  1955  	stats.n_stats = n_stats;
3d8830266ffc28 Li RongQing        2019-03-29  1956  
3d8830266ffc28 Li RongQing        2019-03-29  1957  	if (n_stats) {
fad953ce0b22cf Kees Cook          2018-06-12  1958  		data = vzalloc(array_size(n_stats, sizeof(u64)));
3d8830266ffc28 Li RongQing        2019-03-29  1959  		if (!data)
f3a4094558ddf8 Andrew Lunn        2015-12-30  1960  			return -ENOMEM;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1961  
9994338227179e Florian Fainelli   2018-04-25  1962  		if (dev->phydev && !ops->get_ethtool_phy_stats) {
c59530d0d5dccc Florian Fainelli   2018-04-25 @1963  			ret = phy_ethtool_get_stats(dev->phydev, &stats, data);
c59530d0d5dccc Florian Fainelli   2018-04-25  1964  			if (ret < 0)
3d8830266ffc28 Li RongQing        2019-03-29  1965  				goto out;
9994338227179e Florian Fainelli   2018-04-25  1966  		} else {
9994338227179e Florian Fainelli   2018-04-25  1967  			ops->get_ethtool_phy_stats(dev, &stats, data);
9994338227179e Florian Fainelli   2018-04-25  1968  		}
3d8830266ffc28 Li RongQing        2019-03-29  1969  	} else {
3d8830266ffc28 Li RongQing        2019-03-29  1970  		data = NULL;
3d8830266ffc28 Li RongQing        2019-03-29  1971  	}
f3a4094558ddf8 Andrew Lunn        2015-12-30  1972  
f3a4094558ddf8 Andrew Lunn        2015-12-30  1973  	ret = -EFAULT;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1974  	if (copy_to_user(useraddr, &stats, sizeof(stats)))
f3a4094558ddf8 Andrew Lunn        2015-12-30  1975  		goto out;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1976  	useraddr += sizeof(stats);
4d1ceea8516cd6 Alexei Starovoitov 2017-01-30  1977  	if (n_stats && copy_to_user(useraddr, data, n_stats * sizeof(u64)))
f3a4094558ddf8 Andrew Lunn        2015-12-30  1978  		goto out;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1979  	ret = 0;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1980  
f3a4094558ddf8 Andrew Lunn        2015-12-30  1981   out:
4d1ceea8516cd6 Alexei Starovoitov 2017-01-30  1982  	vfree(data);
f3a4094558ddf8 Andrew Lunn        2015-12-30  1983  	return ret;
f3a4094558ddf8 Andrew Lunn        2015-12-30  1984  }
f3a4094558ddf8 Andrew Lunn        2015-12-30  1985  

:::::: The code at line 1963 was first introduced by commit
:::::: c59530d0d5dccc96795af12c139f618182cf98db net: Move PHY statistics code into PHY library helpers

:::::: TO: Florian Fainelli <f.fainelli@gmail.com>
:::::: CC: David S. Miller <davem@davemloft.net>

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26921 bytes --]

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

* RE: [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-01-31 15:55   ` Andy Shevchenko
@ 2020-02-03  9:13     ` Calvin Johnson (OSS)
  2020-02-03  9:22       ` Andy Shevchenko
  0 siblings, 1 reply; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-03  9:13 UTC (permalink / raw)
  To: Andy Shevchenko, Dan Carpenter
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina,
	Calvin Johnson (OSS),
	Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, Linux Kernel Mailing List, netdev

Hi Andy,

> -----Original Message-----
> From: Andy Shevchenko <andy.shevchenko@gmail.com>
> Subject: Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode:
> Change API to solve int/unit warnings
> 
> On Fri, Jan 31, 2020 at 5:38 PM Calvin Johnson <calvin.johnson@nxp.com>
> wrote:
> >
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> >
> > API fwnode_get_phy_mode is modified to follow the changes made by
> > Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve
> > int/unit warnings").
> 
> I think it would be good to base your series on Dan's fix patch.

This patch is based on Dan's fix patch https://www.spinics.net/lists/netdev/msg606487.html .
Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve int/unit warnings").
Can you please give more clarity on what you meant? Please point to me, if there is some 
specific patch that you are referring to.

Thanks
Calvin

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

* RE: [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link()
  2020-01-31 15:57   ` Andy Shevchenko
@ 2020-02-03  9:21     ` Calvin Johnson (OSS)
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-03  9:21 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina,
	Calvin Johnson (OSS),
	Andy Shevchenko, Dmitry Torokhov, Greg Kroah-Hartman,
	Heikki Krogerus, Rafael J. Wysocki, Sakari Ailus,
	Thomas Gleixner, Linux Kernel Mailing List



> -----Original Message-----
> From: Andy Shevchenko <andy.shevchenko@gmail.com>
> Subject: Re: [PATCH v1 5/7] device property: Introduce
> fwnode_phy_is_fixed_link()
> 
> On Fri, Jan 31, 2020 at 5:38 PM Calvin Johnson <calvin.johnson@nxp.com>
> wrote:
> >
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> >
> > Introduce fwnode_phy_is_fixed_link() function that an Ethernet driver
> > can call on its PHY phandle to find out whether it's a fixed link PHY
> > or not.
> 
> > +/*
> > + * fwnode_phy_is_fixed_link()
> > + */
> 
> Please, do a full kernel doc description.

Sure will take care in v2.


> > +bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode) {
> > +       struct fwnode_handle *fixed_node;
> > +       int len, err;
> > +       const char *managed;
> > +
> > +       fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link");
> > +       if (fixed_node)
> > +               return fixed_node;
> > +
> > +       err = fwnode_property_read_string(fixed_node, "managed",
> > + &managed);
> 
> > +       if (err == 0 && strcmp(managed, "auto") != 0)
> > +               return true;
> > +
> > +       return false;
> 
> Maybe other way around?
> 
>   if (err)
>     return false;
> 
>   return !strcmp(managed, "auto");
> 
> ?
> 
> Same pattern perhaps for the patch where you introduce
> fwnode_get_phy_mode().

Thanks! Will take care in v2.

Regards
Calvin


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

* Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings
  2020-02-03  9:13     ` Calvin Johnson (OSS)
@ 2020-02-03  9:22       ` Andy Shevchenko
  0 siblings, 0 replies; 34+ messages in thread
From: Andy Shevchenko @ 2020-02-03  9:22 UTC (permalink / raw)
  To: Calvin Johnson (OSS)
  Cc: Dan Carpenter, linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina, Antoine Tenart,
	David S. Miller, Dmitry Torokhov, Greg Kroah-Hartman,
	Heikki Krogerus, Matteo Croce, Maxime Chevallier,
	Rafael J. Wysocki, Russell King, Sakari Ailus, Thomas Gleixner,
	Linux Kernel Mailing List, netdev

On Mon, Feb 03, 2020 at 09:13:42AM +0000, Calvin Johnson (OSS) wrote:
> > -----Original Message-----
> > From: Andy Shevchenko <andy.shevchenko@gmail.com>
> > Subject: Re: [PATCH v1 4/7] device property: fwnode_get_phy_mode:
> > Change API to solve int/unit warnings
> > 
> > On Fri, Jan 31, 2020 at 5:38 PM Calvin Johnson <calvin.johnson@nxp.com>
> > wrote:
> > >
> > > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> > >
> > > API fwnode_get_phy_mode is modified to follow the changes made by
> > > Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve
> > > int/unit warnings").
> > 
> > I think it would be good to base your series on Dan's fix patch.
> 
> This patch is based on Dan's fix patch https://www.spinics.net/lists/netdev/msg606487.html .
> Commit 0c65b2b90d13c1 ("net: of_get_phy_mode: Change API to solve int/unit warnings").
> Can you please give more clarity on what you meant? Please point to me, if there is some 
> specific patch that you are referring to.

Ah, sorry, I meant the "device property: change device_get_phy_mode() to
prevent signedess bugs" [1]. It fixes some PHY initialization issues with the
existing code (thus, should be backported).

[1]: https://lkml.org/lkml/2020/1/31/1

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
  2020-01-31 16:28   ` Andrew Lunn
@ 2020-02-03  9:49   ` kbuild test robot
  2020-02-05 14:17   ` Jeremy Linton
  2020-03-17 11:36   ` Calvin Johnson
  3 siblings, 0 replies; 34+ messages in thread
From: kbuild test robot @ 2020-02-03  9:49 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: kbuild-all, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Marcin Wojtas, Calvin Johnson,
	Andrew Lunn, David S. Miller, Florian Fainelli, Heiner Kallweit,
	linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 19062 bytes --]

Hi Calvin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on v5.5]
[cannot apply to driver-core/driver-core-testing net-next/master net/master linus/master sparc-next/master next-20200203]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Calvin-Johnson/ACPI-support-for-xgmac_mdio-and-dpaa2-mac-drivers/20200203-070754
base:    d5226fa6dbae0569ee43ecfc08bdcd6770fc4755
reproduce: make htmldocs

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   Warning: The Sphinx 'sphinx_rtd_theme' HTML theme was not found. Make sure you have the theme installed to produce pretty HTML output. Falling back to the default theme.
   WARNING: dot(1) not found, for better output quality install graphviz from http://www.graphviz.org
   WARNING: convert(1) not found, for SVG to PDF conversion install ImageMagick (https://www.imagemagick.org)
   include/linux/spi/spi.h:207: warning: Function parameter or member 'driver_override' not described in 'spi_device'
   include/linux/spi/spi.h:650: warning: Function parameter or member 'irq_flags' not described in 'spi_controller'
   drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1: warning: no structured comments found
   drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1: warning: no structured comments found
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:254: warning: Function parameter or member 'hdcp_workqueue' not described in 'amdgpu_display_manager'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'quotactl' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'quota_on' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_free_mnt_opts' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_eat_lsm_opts' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_kern_mount' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_show_options' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_add_mnt_opt' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'd_instantiate' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'getprocattr' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'setprocattr' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'locked_down' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_open' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_alloc' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_free' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_read' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_write' not described in 'security_list_options'
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_unregister_driver' not found
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_register_driver' not found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_register_notifier' not found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_unregister_notifier' not found
   sound/soc/soc-core.c:2522: warning: Function parameter or member 'legacy_dai_naming' not described in 'snd_soc_register_dai'
   include/linux/regulator/machine.h:196: warning: Function parameter or member 'max_uV_step' not described in 'regulation_constraints'
   include/linux/regulator/driver.h:223: warning: Function parameter or member 'resume' not described in 'regulator_ops'
   include/linux/skbuff.h:888: warning: Function parameter or member 'dev_scratch' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'list' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'ip_defrag_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'skb_mstamp_ns' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__cloned_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'head_frag' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__pkt_type_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'encapsulation' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'encap_hdr_csum' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_valid' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__pkt_vlan_present_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'vlan_present' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_complete_sw' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_level' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'inner_protocol_type' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'remcsum_offload' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'sender_cpu' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'reserved_tailroom' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'inner_ipproto' not described in 'sk_buff'
   include/net/sock.h:232: warning: Function parameter or member 'skc_addrpair' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_portpair' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_ipv6only' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_net_refcnt' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_v6_daddr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_v6_rcv_saddr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_cookie' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_listener' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_tw_dr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_rcv_wnd' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_tw_rcv_nxt' not described in 'sock_common'
   include/net/sock.h:514: warning: Function parameter or member 'sk_rx_skb_cache' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_wq_raw' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'tcp_rtx_queue' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_tx_skb_cache' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_route_forced_caps' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_txtime_report_errors' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_validate_xmit_skb' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_bpf_storage' not described in 'sock'
   include/net/sock.h:2459: warning: Function parameter or member 'tcp_rx_skb_cache_key' not described in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2459: warning: Excess function parameter 'sk' description in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2459: warning: Excess function parameter 'skb' description in 'DECLARE_STATIC_KEY_FALSE'
   net/core/skbuff.c:5489: warning: Function parameter or member 'ethernet' not described in 'skb_mpls_push'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'gso_partial_features' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'l3mdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xfrmdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'tlsdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'name_assign_type' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'ieee802154_ptr' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'mpls_ptr' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xdp_prog' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'gro_flush_timeout' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'nf_hooks_ingress' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'qdisc_hash' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xps_cpus_map' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xps_rxqs_map' not described in 'net_device'
>> drivers/net/phy/mdio_bus.c:837: warning: Function parameter or member 'child' not described in 'fwnode_mdiobus_child_is_phy'
   include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 'phylink_link_state'
   include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising' not described in 'phylink_link_state'
   drivers/infiniband/core/umem_odp.c:167: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_alloc_child'
   drivers/infiniband/core/umem_odp.c:217: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_get'
   drivers/infiniband/ulp/iser/iscsi_iser.h:401: warning: Function parameter or member 'all_list' not described in 'iser_fr_desc'
   drivers/infiniband/ulp/iser/iscsi_iser.h:415: warning: Function parameter or member 'all_list' not described in 'iser_fr_pool'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd0' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd1' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd2' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd3' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd4' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd0' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd1' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd2' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd3' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:263: warning: Function parameter or member 'tbl_entries' not described in 'opa_veswport_mactable'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:342: warning: Function parameter or member 'reserved' not described in 'opa_veswport_summary_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd0' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd1' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd2' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd3' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd4' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd5' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd6' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd7' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd8' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd9' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:460: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:485: warning: Function parameter or member 'reserved' not described in 'opa_vnic_notice_attr'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:500: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad_trap'
   include/linux/input/sparse-keymap.h:43: warning: Function parameter or member 'sw' not described in 'key_entry'
   include/drm/drm_modeset_helper_vtables.h:1052: warning: Function parameter or member 'prepare_writeback_job' not described in 'drm_connector_helper_funcs'
   include/drm/drm_modeset_helper_vtables.h:1052: warning: Function parameter or member 'cleanup_writeback_job' not described in 'drm_connector_helper_funcs'
   include/net/cfg80211.h:1189: warning: Function parameter or member 'txpwr' not described in 'station_parameters'
   include/net/mac80211.h:4081: warning: Function parameter or member 'sta_set_txpwr' not described in 'ieee80211_ops'
   include/net/mac80211.h:2036: warning: Function parameter or member 'txpwr' not described in 'ieee80211_sta'
   include/linux/devfreq.h:187: warning: Function parameter or member 'last_status' not described in 'devfreq'
   drivers/devfreq/devfreq.c:1818: warning: bad line: - Resource-managed devfreq_register_notifier()
   drivers/devfreq/devfreq.c:1854: warning: bad line: - Resource-managed devfreq_unregister_notifier()
   drivers/devfreq/devfreq-event.c:355: warning: Function parameter or member 'edev' not described in 'devfreq_event_remove_edev'
   drivers/devfreq/devfreq-event.c:355: warning: Excess function parameter 'dev' description in 'devfreq_event_remove_edev'
   Documentation/admin-guide/hw-vuln/tsx_async_abort.rst:142: WARNING: duplicate label virt_mechanism, other instance in Documentation/admin-guide/hw-vuln/mds.rst
   Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/driver-api/driver-model/driver.rst:215: WARNING: Inline emphasis start-string without end-string.
   Documentation/driver-api/driver-model/driver.rst:215: WARNING: Inline emphasis start-string without end-string.
   include/uapi/linux/firewire-cdev.h:312: WARNING: Inline literal start-string without end-string.
   drivers/firewire/core-transaction.c:606: WARNING: Inline strong start-string without end-string.
   Documentation/usb/index.rst:5: WARNING: toctree contains reference to nonexisting document 'usb/rio'
   Documentation/usb/index.rst:5: WARNING: toctree contains reference to nonexisting document 'usb/wusb-design-overview'
   Documentation/x86/boot.rst:72: WARNING: Malformed table.
   Text in column margin in table line 57.

vim +837 drivers/net/phy/mdio_bus.c

   827	
   828	/**
   829	 * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
   830	 * It must either:
   831	 * o Compatible string of "ethernet-phy-ieee802.3-c45"
   832	 * o Compatible string of "ethernet-phy-ieee802.3-c22"
   833	 * Checking "compatible" property is done, in order to follow the DT binding.
   834	 */
   835	static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
   836	{
 > 837		int ret;
   838	
   839		ret = fwnode_property_match_string(child, "compatible",
   840						   "ethernet-phy-ieee802.3-c45");
   841		if (!ret)
   842			return true;
   843	
   844		ret = fwnode_property_match_string(child, "compatible",
   845						   "ethernet-phy-ieee802.3-c22");
   846		if (!ret)
   847			return true;
   848	
   849		if (!fwnode_property_present(child, "compatible"))
   850			return true;
   851	
   852		return false;
   853	}
   854	

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 7271 bytes --]

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

* Re: [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers.
  2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
                   ` (6 preceding siblings ...)
  2020-01-31 15:34 ` [PATCH v1 7/7] dpaa2-eth: Add ACPI support for DPAA2 MAC driver Calvin Johnson
@ 2020-02-03 18:02 ` Florian Fainelli
  2020-02-05  8:31   ` [EXT] " Calvin Johnson (OSS)
  7 siblings, 1 reply; 34+ messages in thread
From: Florian Fainelli @ 2020-02-03 18:02 UTC (permalink / raw)
  To: Calvin Johnson, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Jeremy Linton
  Cc: Calvin Johnson, Andrew Lunn, Andy Shevchenko, Antoine Tenart,
	David S. Miller, Dmitry Torokhov, Greg Kroah-Hartman,
	Heikki Krogerus, Heiner Kallweit, Ioana Radulescu, Madalin Bucur,
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, linux-kernel, netdev

On 1/31/20 7:34 AM, Calvin Johnson wrote:
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> 
> This patch series provides ACPI support for xgmac_mdio and dpaa2-mac
> driver. Most of the DT APIs are replaced with fwnode APIs to handle
> both DT and ACPI nodes.
> 
> Old patch by Marcin Wojtas: (mdio_bus: Introduce fwnode MDIO helpers),
> is reused in this series to get some fwnode mdio helper APIs.

Andrew's comment on your first patch is a good summary of what this
patch series does, instead of consolidating the existing code and making
it less of_* centric and more firmware agnostic, this duplicates the
existing infrastructure almost line for line to create a fwnode specific
implementation. The preference would be for you to move away from that
and use device_* properties as much as possible while making the code
capable of handling all firmware implementations.

Can you also show a few DSDT for the devices that you are working so we
can a feeling of how you represented the various properties and
parent/child devices dependencies?

> 
> 
> Calvin Johnson (6):
>   mdio_bus: modify fwnode phy related functions
>   net/fsl: add ACPI support for mdio bus
>   device property: fwnode_get_phy_mode: Change API to solve int/unit
>     warnings
>   device property: Introduce fwnode_phy_is_fixed_link()
>   net: phylink: Introduce phylink_fwnode_phy_connect()
>   dpaa2-eth: Add ACPI support for DPAA2 MAC driver
> 
> Marcin Wojtas (1):
>   mdio_bus: Introduce fwnode MDIO helpers
> 
>  drivers/base/property.c                       |  43 ++-
>  .../net/ethernet/freescale/dpaa2/dpaa2-mac.c  |  78 ++++--
>  drivers/net/ethernet/freescale/xgmac_mdio.c   |  63 +++--
>  .../net/ethernet/marvell/mvpp2/mvpp2_main.c   |   7 +-
>  drivers/net/phy/mdio_bus.c                    | 244 ++++++++++++++++++
>  drivers/net/phy/phylink.c                     |  64 +++++
>  include/linux/mdio.h                          |   3 +
>  include/linux/phylink.h                       |   2 +
>  include/linux/property.h                      |   5 +-
>  9 files changed, 450 insertions(+), 59 deletions(-)
> 


-- 
Florian

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

* Re: [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect()
  2020-01-31 15:34 ` [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect() Calvin Johnson
@ 2020-02-03 18:21   ` kbuild test robot
  2020-02-03 18:41   ` Russell King - ARM Linux admin
  1 sibling, 0 replies; 34+ messages in thread
From: kbuild test robot @ 2020-02-03 18:21 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: kbuild-all, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Calvin Johnson, Andrew Lunn,
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev

[-- Attachment #1: Type: text/plain, Size: 20492 bytes --]

Hi Calvin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on v5.5]
[cannot apply to driver-core/driver-core-testing net-next/master net/master linus/master sparc-next/master next-20200203]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Calvin-Johnson/ACPI-support-for-xgmac_mdio-and-dpaa2-mac-drivers/20200203-070754
base:    d5226fa6dbae0569ee43ecfc08bdcd6770fc4755
reproduce: make htmldocs

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   Warning: The Sphinx 'sphinx_rtd_theme' HTML theme was not found. Make sure you have the theme installed to produce pretty HTML output. Falling back to the default theme.
   WARNING: dot(1) not found, for better output quality install graphviz from http://www.graphviz.org
   WARNING: convert(1) not found, for SVG to PDF conversion install ImageMagick (https://www.imagemagick.org)
   include/linux/spi/spi.h:207: warning: Function parameter or member 'driver_override' not described in 'spi_device'
   include/linux/spi/spi.h:650: warning: Function parameter or member 'irq_flags' not described in 'spi_controller'
   drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1: warning: no structured comments found
   drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1: warning: no structured comments found
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:254: warning: Function parameter or member 'hdcp_workqueue' not described in 'amdgpu_display_manager'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'quotactl' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'quota_on' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_free_mnt_opts' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_eat_lsm_opts' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_kern_mount' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_show_options' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'sb_add_mnt_opt' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'd_instantiate' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'getprocattr' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'setprocattr' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'locked_down' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_open' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_alloc' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_free' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_read' not described in 'security_list_options'
   include/linux/lsm_hooks.h:1830: warning: Function parameter or member 'perf_event_write' not described in 'security_list_options'
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_register_driver' not found
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_unregister_driver' not found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_register_notifier' not found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_unregister_notifier' not found
   include/linux/regulator/machine.h:196: warning: Function parameter or member 'max_uV_step' not described in 'regulation_constraints'
   include/linux/regulator/driver.h:223: warning: Function parameter or member 'resume' not described in 'regulator_ops'
   sound/soc/soc-core.c:2522: warning: Function parameter or member 'legacy_dai_naming' not described in 'snd_soc_register_dai'
   include/linux/skbuff.h:888: warning: Function parameter or member 'dev_scratch' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'list' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'ip_defrag_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'skb_mstamp_ns' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__cloned_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'head_frag' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__pkt_type_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'encapsulation' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'encap_hdr_csum' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_valid' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member '__pkt_vlan_present_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'vlan_present' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_complete_sw' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'csum_level' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'inner_protocol_type' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'remcsum_offload' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'sender_cpu' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'reserved_tailroom' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'inner_ipproto' not described in 'sk_buff'
   include/net/sock.h:232: warning: Function parameter or member 'skc_addrpair' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_portpair' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_ipv6only' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_net_refcnt' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_v6_daddr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_v6_rcv_saddr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_cookie' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_listener' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_tw_dr' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_rcv_wnd' not described in 'sock_common'
   include/net/sock.h:232: warning: Function parameter or member 'skc_tw_rcv_nxt' not described in 'sock_common'
   include/net/sock.h:514: warning: Function parameter or member 'sk_rx_skb_cache' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_wq_raw' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'tcp_rtx_queue' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_tx_skb_cache' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_route_forced_caps' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_txtime_report_errors' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_validate_xmit_skb' not described in 'sock'
   include/net/sock.h:514: warning: Function parameter or member 'sk_bpf_storage' not described in 'sock'
   include/net/sock.h:2459: warning: Function parameter or member 'tcp_rx_skb_cache_key' not described in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2459: warning: Excess function parameter 'sk' description in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2459: warning: Excess function parameter 'skb' description in 'DECLARE_STATIC_KEY_FALSE'
   net/core/skbuff.c:5489: warning: Function parameter or member 'ethernet' not described in 'skb_mpls_push'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'gso_partial_features' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'l3mdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xfrmdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'tlsdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'name_assign_type' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'ieee802154_ptr' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'mpls_ptr' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xdp_prog' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'gro_flush_timeout' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'nf_hooks_ingress' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'qdisc_hash' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xps_cpus_map' not described in 'net_device'
   include/linux/netdevice.h:2082: warning: Function parameter or member 'xps_rxqs_map' not described in 'net_device'
   drivers/net/phy/mdio_bus.c:861: warning: Function parameter or member 'child' not described in 'fwnode_mdiobus_child_is_phy'
   include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 'phylink_link_state'
   include/linux/phylink.h:56: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising' not described in 'phylink_link_state'
>> drivers/net/phy/phylink.c:836: warning: Function parameter or member 'fwnode' not described in 'phylink_fwnode_phy_connect'
   drivers/net/phy/phylink.c:836: warning: Excess function parameter 'dn' description in 'phylink_fwnode_phy_connect'
   drivers/infiniband/core/umem_odp.c:167: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_alloc_child'
   drivers/infiniband/core/umem_odp.c:217: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_get'
   drivers/infiniband/ulp/iser/iscsi_iser.h:401: warning: Function parameter or member 'all_list' not described in 'iser_fr_desc'
   drivers/infiniband/ulp/iser/iscsi_iser.h:415: warning: Function parameter or member 'all_list' not described in 'iser_fr_pool'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd0' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd1' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd2' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd3' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd4' not described in 'opa_vesw_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd0' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd1' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd2' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd3' not described in 'opa_per_veswport_info'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:263: warning: Function parameter or member 'tbl_entries' not described in 'opa_veswport_mactable'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:342: warning: Function parameter or member 'reserved' not described in 'opa_veswport_summary_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd0' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd1' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd2' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd3' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd4' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd5' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd6' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd7' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd8' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd9' not described in 'opa_veswport_error_counters'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:460: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:485: warning: Function parameter or member 'reserved' not described in 'opa_vnic_notice_attr'
   drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:500: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad_trap'
   include/linux/input/sparse-keymap.h:43: warning: Function parameter or member 'sw' not described in 'key_entry'
   include/drm/drm_modeset_helper_vtables.h:1052: warning: Function parameter or member 'prepare_writeback_job' not described in 'drm_connector_helper_funcs'
   include/drm/drm_modeset_helper_vtables.h:1052: warning: Function parameter or member 'cleanup_writeback_job' not described in 'drm_connector_helper_funcs'
   include/net/cfg80211.h:1189: warning: Function parameter or member 'txpwr' not described in 'station_parameters'
   include/net/mac80211.h:4081: warning: Function parameter or member 'sta_set_txpwr' not described in 'ieee80211_ops'
   include/net/mac80211.h:2036: warning: Function parameter or member 'txpwr' not described in 'ieee80211_sta'
   include/linux/devfreq.h:187: warning: Function parameter or member 'last_status' not described in 'devfreq'
   drivers/devfreq/devfreq.c:1818: warning: bad line: - Resource-managed devfreq_register_notifier()
   drivers/devfreq/devfreq.c:1854: warning: bad line: - Resource-managed devfreq_unregister_notifier()
   drivers/devfreq/devfreq-event.c:355: warning: Function parameter or member 'edev' not described in 'devfreq_event_remove_edev'
   drivers/devfreq/devfreq-event.c:355: warning: Excess function parameter 'dev' description in 'devfreq_event_remove_edev'
   Documentation/admin-guide/hw-vuln/tsx_async_abort.rst:142: WARNING: duplicate label virt_mechanism, other instance in Documentation/admin-guide/hw-vuln/mds.rst
   Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
   Documentation/driver-api/driver-model/driver.rst:215: WARNING: Inline emphasis start-string without end-string.
   Documentation/driver-api/driver-model/driver.rst:215: WARNING: Inline emphasis start-string without end-string.
   include/uapi/linux/firewire-cdev.h:312: WARNING: Inline literal start-string without end-string.
   drivers/firewire/core-transaction.c:606: WARNING: Inline strong start-string without end-string.
   Documentation/x86/boot.rst:72: WARNING: Malformed table.
   Text in column margin in table line 57.

vim +836 drivers/net/phy/phylink.c

   820	
   821	/**
   822	 * phylink_fwnode_phy_connect() - connect the PHY specified in the fwnode.
   823	 * @pl: a pointer to a &struct phylink returned from phylink_create()
   824	 * @dn: a pointer to a &struct device_node.
   825	 * @flags: PHY-specific flags to communicate to the PHY device driver
   826	 *
   827	 * Connect the phy specified in the device node @dn to the phylink instance
   828	 * specified by @pl. Actions specified in phylink_connect_phy() will be
   829	 * performed.
   830	 *
   831	 * Returns 0 on success or a negative errno.
   832	 */
   833	int phylink_fwnode_phy_connect(struct phylink *pl,
   834				       struct fwnode_handle *fwnode,
   835				       u32 flags)
 > 836	{
   837		struct fwnode_handle *phy_node;
   838		struct phy_device *phy_dev;
   839		int ret;
   840		int status;
   841		struct fwnode_reference_args args;
   842	
   843		/* Fixed links and 802.3z are handled without needing a PHY */
   844		if (pl->link_an_mode == MLO_AN_FIXED ||
   845		    (pl->link_an_mode == MLO_AN_INBAND &&
   846		     phy_interface_mode_is_8023z(pl->link_interface)))
   847			return 0;
   848	
   849		status = acpi_node_get_property_reference(fwnode, "phy-handle", 0,
   850							  &args);
   851		if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
   852			status = acpi_node_get_property_reference(fwnode, "phy", 0,
   853								  &args);
   854		if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
   855			status = acpi_node_get_property_reference(fwnode,
   856								  "phy-device", 0,
   857								  &args);
   858	
   859		if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode)) {
   860			if (pl->link_an_mode == MLO_AN_PHY)
   861				return -ENODEV;
   862			return 0;
   863		}
   864	
   865		phy_dev = fwnode_phy_find_device(args.fwnode);
   866		if (phy_dev)
   867			phy_attach_direct(pl->netdev, phy_dev, flags,
   868					  pl->link_interface);
   869	
   870		/* refcount is held by phy_attach_direct() on success */
   871		put_device(&phy_dev->mdio.dev);
   872	
   873		if (!phy_dev)
   874			return -ENODEV;
   875	
   876		ret = phylink_bringup_phy(pl, phy_dev);
   877		if (ret)
   878			phy_detach(phy_dev);
   879	
   880		return ret;
   881	}
   882	EXPORT_SYMBOL_GPL(phylink_fwnode_phy_connect);
   883	

---
0-DAY kernel test infrastructure                 Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 7271 bytes --]

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

* Re: [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect()
  2020-01-31 15:34 ` [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect() Calvin Johnson
  2020-02-03 18:21   ` kbuild test robot
@ 2020-02-03 18:41   ` Russell King - ARM Linux admin
  2020-02-03 18:43     ` Russell King - ARM Linux admin
  2020-02-05 11:33     ` [EXT] " Calvin Johnson (OSS)
  1 sibling, 2 replies; 34+ messages in thread
From: Russell King - ARM Linux admin @ 2020-02-03 18:41 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: linux.cj, Jon Nettleton, Makarand Pawagi, cristian.sovaiala,
	laurentiu.tudor, ioana.ciornei, V.Sethi, pankaj.bansal,
	Rajesh V . Bikkina, Calvin Johnson, Andrew Lunn, David S. Miller,
	Florian Fainelli, Heiner Kallweit, linux-kernel, netdev

On Fri, Jan 31, 2020 at 09:04:39PM +0530, Calvin Johnson wrote:
> From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> 
> Introduce phylink_fwnode_phy_connect API to connect the PHY using
> fwnode.
> 
> Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> ---
> 
>  drivers/net/phy/phylink.c | 64 +++++++++++++++++++++++++++++++++++++++
>  include/linux/phylink.h   |  2 ++
>  2 files changed, 66 insertions(+)
> 
> diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> index ee7a718662c6..f211f62283b5 100644
> --- a/drivers/net/phy/phylink.c
> +++ b/drivers/net/phy/phylink.c
> @@ -18,6 +18,7 @@
>  #include <linux/spinlock.h>
>  #include <linux/timer.h>
>  #include <linux/workqueue.h>
> +#include <linux/acpi.h>
>  
>  #include "sfp.h"
>  #include "swphy.h"
> @@ -817,6 +818,69 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
>  }
>  EXPORT_SYMBOL_GPL(phylink_connect_phy);
>  
> +/**
> + * phylink_fwnode_phy_connect() - connect the PHY specified in the fwnode.
> + * @pl: a pointer to a &struct phylink returned from phylink_create()
> + * @dn: a pointer to a &struct device_node.
> + * @flags: PHY-specific flags to communicate to the PHY device driver
> + *
> + * Connect the phy specified in the device node @dn to the phylink instance
> + * specified by @pl. Actions specified in phylink_connect_phy() will be
> + * performed.
> + *
> + * Returns 0 on success or a negative errno.
> + */
> +int phylink_fwnode_phy_connect(struct phylink *pl,
> +			       struct fwnode_handle *fwnode,
> +			       u32 flags)
> +{
> +	struct fwnode_handle *phy_node;
> +	struct phy_device *phy_dev;
> +	int ret;
> +	int status;
> +	struct fwnode_reference_args args;
> +
> +	/* Fixed links and 802.3z are handled without needing a PHY */
> +	if (pl->link_an_mode == MLO_AN_FIXED ||
> +	    (pl->link_an_mode == MLO_AN_INBAND &&
> +	     phy_interface_mode_is_8023z(pl->link_interface)))
> +		return 0;
> +
> +	status = acpi_node_get_property_reference(fwnode, "phy-handle", 0,
> +						  &args);
> +	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> +		status = acpi_node_get_property_reference(fwnode, "phy", 0,
> +							  &args);
> +	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> +		status = acpi_node_get_property_reference(fwnode,
> +							  "phy-device", 0,
> +							  &args);

This is a copy-and-paste of phylink_of_phy_connect() without much
thought.

There is no need to duplicate the legacy DT functionality of
phy/phy-device/phy-handle in ACPI - there is no legacy to support,
so it's pointless trying to find one of three properties here.

I'd prefer both the DT and ACPI variants to be more integrated, so
we don't have two almost identical functions except for the firmware
specific detail.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up

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

* Re: [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect()
  2020-02-03 18:41   ` Russell King - ARM Linux admin
@ 2020-02-03 18:43     ` Russell King - ARM Linux admin
  2020-02-05 11:33     ` [EXT] " Calvin Johnson (OSS)
  1 sibling, 0 replies; 34+ messages in thread
From: Russell King - ARM Linux admin @ 2020-02-03 18:43 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: linux.cj, Jon Nettleton, Makarand Pawagi, cristian.sovaiala,
	laurentiu.tudor, ioana.ciornei, V.Sethi, pankaj.bansal,
	Rajesh V . Bikkina, Calvin Johnson, Andrew Lunn, David S. Miller,
	Florian Fainelli, Heiner Kallweit, linux-kernel, netdev

On Mon, Feb 03, 2020 at 06:41:21PM +0000, Russell King - ARM Linux admin wrote:
> On Fri, Jan 31, 2020 at 09:04:39PM +0530, Calvin Johnson wrote:
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> > 
> > Introduce phylink_fwnode_phy_connect API to connect the PHY using
> > fwnode.
> > 
> > Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> > ---
> > 
> >  drivers/net/phy/phylink.c | 64 +++++++++++++++++++++++++++++++++++++++
> >  include/linux/phylink.h   |  2 ++
> >  2 files changed, 66 insertions(+)
> > 
> > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> > index ee7a718662c6..f211f62283b5 100644
> > --- a/drivers/net/phy/phylink.c
> > +++ b/drivers/net/phy/phylink.c
> > @@ -18,6 +18,7 @@
> >  #include <linux/spinlock.h>
> >  #include <linux/timer.h>
> >  #include <linux/workqueue.h>
> > +#include <linux/acpi.h>
> >  
> >  #include "sfp.h"
> >  #include "swphy.h"
> > @@ -817,6 +818,69 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
> >  }
> >  EXPORT_SYMBOL_GPL(phylink_connect_phy);
> >  
> > +/**
> > + * phylink_fwnode_phy_connect() - connect the PHY specified in the fwnode.
> > + * @pl: a pointer to a &struct phylink returned from phylink_create()
> > + * @dn: a pointer to a &struct device_node.
> > + * @flags: PHY-specific flags to communicate to the PHY device driver
> > + *
> > + * Connect the phy specified in the device node @dn to the phylink instance
> > + * specified by @pl. Actions specified in phylink_connect_phy() will be
> > + * performed.
> > + *
> > + * Returns 0 on success or a negative errno.
> > + */
> > +int phylink_fwnode_phy_connect(struct phylink *pl,
> > +			       struct fwnode_handle *fwnode,
> > +			       u32 flags)
> > +{
> > +	struct fwnode_handle *phy_node;
> > +	struct phy_device *phy_dev;
> > +	int ret;
> > +	int status;
> > +	struct fwnode_reference_args args;
> > +
> > +	/* Fixed links and 802.3z are handled without needing a PHY */
> > +	if (pl->link_an_mode == MLO_AN_FIXED ||
> > +	    (pl->link_an_mode == MLO_AN_INBAND &&
> > +	     phy_interface_mode_is_8023z(pl->link_interface)))
> > +		return 0;
> > +
> > +	status = acpi_node_get_property_reference(fwnode, "phy-handle", 0,
> > +						  &args);
> > +	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> > +		status = acpi_node_get_property_reference(fwnode, "phy", 0,
> > +							  &args);
> > +	if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> > +		status = acpi_node_get_property_reference(fwnode,
> > +							  "phy-device", 0,
> > +							  &args);
> 
> This is a copy-and-paste of phylink_of_phy_connect() without much
> thought.
> 
> There is no need to duplicate the legacy DT functionality of
> phy/phy-device/phy-handle in ACPI - there is no legacy to support,
> so it's pointless trying to find one of three properties here.
> 
> I'd prefer both the DT and ACPI variants to be more integrated, so
> we don't have two almost identical functions except for the firmware
> specific detail.

Also, I don't see any ACPI folk in the list of recipients to your
series.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up

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

* RE: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-01-31 16:08   ` Andy Shevchenko
@ 2020-02-04  7:18     ` Calvin Johnson (OSS)
  2020-02-04 11:17       ` Andy Shevchenko
  0 siblings, 1 reply; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-04  7:18 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina,
	Calvin Johnson (OSS), David S. Miller, Madalin Bucur (OSS),
	Linux Kernel Mailing List, netdev


> -----Original Message-----
> From: Andy Shevchenko <andy.shevchenko@gmail.com>
> Subject: Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
> 
> On Fri, Jan 31, 2020 at 5:37 PM Calvin Johnson <calvin.johnson@nxp.com>
> wrote:
> >
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> >
> > Add ACPI support for MDIO bus registration while maintaining the
> > existing DT support.
> 
> ...
> 
> > -       ret = of_address_to_resource(np, 0, &res);
> > -       if (ret) {
> > +       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +       if (!res) {
> >                 dev_err(&pdev->dev, "could not obtain address\n");
> > -               return ret;
> > +               return -ENODEV;
> >         }
> 
> ...
> 
> > -       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx", (unsigned long
> long)res.start);
> > +       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx",
> > +                (unsigned long long)res->start);
> 
> Why this has been touched?

Without this change, I get:
---------------------------------------------------------
drivers/net/ethernet/freescale/xgmac_mdio.c: In function 'xgmac_mdio_probe':
drivers/net/ethernet/freescale/xgmac_mdio.c:269:27: error: request for member 'start' in something not a structure or union
    (unsigned long long)res.start);
                           ^
scripts/Makefile.build:265: recipe for target 'drivers/net/ethernet/freescale/xgmac_mdio.o' failed
make[4]: *** [drivers/net/ethernet/freescale/xgmac_mdio.o] Error 1
---------------------------------------------------------

On checking other files that calls platform_get_resource, I can see that this is the way they refer 'start'.

> 
> ...
> 
> > -       priv->mdio_base = of_iomap(np, 0);
> > +       priv->mdio_base = devm_ioremap_resource(&pdev->dev, res);
> >         if (!priv->mdio_base) {
> 
> Are you sure the check is correct now?
devm_ioremap_resource returns non-NULL error values. So, this doesn't look right. 
I'll work on it for v2.

> >                 ret = -ENOMEM;
> >                 goto err_ioremap;
> >         }
> 
> ...
> 
> >
> > -       priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> > -                                                      "little-endian");
> > -
> > -       priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> > -                                                 "fsl,erratum-a011043");
> > -
> > -       ret = of_mdiobus_register(bus, np);
> > -       if (ret) {
> > -               dev_err(&pdev->dev, "cannot register MDIO bus\n");
> 
> > +       if (is_of_node(pdev->dev.fwnode)) {
> 
> > +       } else if (is_acpi_node(pdev->dev.fwnode)) {
> 
> Oh, no, this is wrong. Pure approach AFAICS is to use fwnode API or device
> property API.
> 
> And actually what you need to include is rather <linux/property.h>, and not
> acpi.h.

Understood. I had got some issues while using fwnode API to handle DT case due to which
DT/ACPI checks were done and both are handled separately.  Let me see if I can root cause it.

> 
> > +       } else {
> > +               dev_err(&pdev->dev, "Cannot get cfg data from DT or ACPI\n");
> > +               ret = -ENXIO;
> >                 goto err_registration;
> >         }
> 
> > +static const struct acpi_device_id xgmac_mdio_acpi_match[] = {
> > +       {"NXP0006", 0}
> 
> How did you test this on platforms with the same IP and without device  of
> this ACPI ID present?

I didn't test it on any other platforms other than LX2160ARDB.  AFAIU, without
device of this ACPI ID present, the driver won't get probed. 
 
> (Hint: missed terminator)
static const struct acpi_device_id xgmac_mdio_acpi_match[] = {
        { "NXP0006", 0 },
        { }
};
Is this what you meant?

> 
> > +};
> > +MODULE_DEVICE_TABLE(acpi, xgmac_mdio_acpi_match);
> 
> > +               .acpi_match_table = ACPI_PTR(xgmac_mdio_acpi_match),
> 
> ACPI_PTR is not needed otherwise you will get a compiler warning.

No compiler warning was observed in both cases.
I can see other drivers using this macro.
drivers/net/ethernet/apm/xgene-v2/main.c:734:              .acpi_match_table = ACPI_PTR(xge_acpi_match),
drivers/net/ethernet/apm/xgene/xgene_enet_main.c:2172:             .acpi_match_table = ACPI_PTR(xgene_enet_acpi_match),
drivers/net/ethernet/hisilicon/hns/hns_enet.c:2445:             .acpi_match_table = ACPI_PTR(hns_enet_acpi_match),
drivers/net/ethernet/hisilicon/hns_mdio.c:566:             .acpi_match_table = ACPI_PTR(hns_mdio_acpi_match),
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c:5997:           .acpi_match_table = ACPI_PTR(mvpp2_acpi_match),
drivers/net/ethernet/qualcomm/emac/emac.c:766:          .acpi_match_table = ACPI_PTR(emac_acpi_match),
drivers/net/ethernet/smsc/smsc911x.c:2667:              .acpi_match_table = ACPI_PTR(smsc911x_acpi_match),
drivers/net/ethernet/socionext/netsec.c:2187:           .acpi_match_table = ACPI_PTR(netsec_acpi_ids),
drivers/net/phy/mdio-xgene.c:456:               .acpi_match_table = ACPI_PTR(xgene_mdio_acpi_match), 


Thanks
Calvin


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

* Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-02-04  7:18     ` Calvin Johnson (OSS)
@ 2020-02-04 11:17       ` Andy Shevchenko
  0 siblings, 0 replies; 34+ messages in thread
From: Andy Shevchenko @ 2020-02-04 11:17 UTC (permalink / raw)
  To: Calvin Johnson (OSS)
  Cc: linux.cj, Jon Nettleton, Russell King - ARM Linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina, David S. Miller,
	Madalin Bucur (OSS),
	Linux Kernel Mailing List, netdev

On Tue, Feb 4, 2020 at 9:18 AM Calvin Johnson (OSS)
<calvin.johnson@oss.nxp.com> wrote:
> > -----Original Message-----
> > From: Andy Shevchenko <andy.shevchenko@gmail.com>
> > Subject: Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
> > On Fri, Jan 31, 2020 at 5:37 PM Calvin Johnson <calvin.johnson@nxp.com>
> > wrote:

...

> > > -       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx", (unsigned long
> > long)res.start);
> > > +       snprintf(bus->id, MII_BUS_ID_SIZE, "%llx",
> > > +                (unsigned long long)res->start);
> >
> > Why this has been touched?
>
> Without this change, I get:
> ---------------------------------------------------------
> drivers/net/ethernet/freescale/xgmac_mdio.c: In function 'xgmac_mdio_probe':
> drivers/net/ethernet/freescale/xgmac_mdio.c:269:27: error: request for member 'start' in something not a structure or union
>     (unsigned long long)res.start);
>                            ^
> scripts/Makefile.build:265: recipe for target 'drivers/net/ethernet/freescale/xgmac_mdio.o' failed
> make[4]: *** [drivers/net/ethernet/freescale/xgmac_mdio.o] Error 1
> ---------------------------------------------------------

I see. Thanks.
Can you leave it one line as it was before?

...

> > (Hint: missed terminator)
> static const struct acpi_device_id xgmac_mdio_acpi_match[] = {
>         { "NXP0006", 0 },
>         { }
> };
> Is this what you meant?

Yes!

...

> > > +               .acpi_match_table = ACPI_PTR(xgmac_mdio_acpi_match),
> >
> > ACPI_PTR is not needed otherwise you will get a compiler warning.
>
> No compiler warning was observed in both cases.

You mean you tried CONFIG_ACPI=n and didn't get a warning about unused
static variable?
Perhaps you may run `make W=1 ...`

> I can see other drivers using this macro.

They might have hidden same issue.

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus
  2020-02-03  3:44   ` Florian Fainelli
@ 2020-02-04 18:46     ` Calvin Johnson
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-02-04 18:46 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Calvin Johnson, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Calvin Johnson,
	David S. Miller, Madalin Bucur, linux-kernel, netdev

On Sun, Feb 02, 2020 at 07:44:40PM -0800, Florian Fainelli wrote:
>
>
> On 1/31/2020 7:34 AM, Calvin Johnson wrote:
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> >
> > Add ACPI support for MDIO bus registration while maintaining
> > the existing DT support.
> >
> > Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> > ---
>
> [snip]
>
> >     bus = mdiobus_alloc_size(sizeof(struct mdio_fsl_priv));
> > @@ -263,25 +265,41 @@ 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, "%llx",
> > +            (unsigned long long)res->start);
>
> You could omit this clean up change.
Sure, will avoid split to newline.
> >
> >     /* Set the PHY base address */
> >     priv = bus->priv;
> > -   priv->mdio_base = of_iomap(np, 0);
> > +   priv->mdio_base = devm_ioremap_resource(&pdev->dev, res);
> >     if (!priv->mdio_base) {
>
> This probably needs to become IS_ERR() instead of a plain NULL check
Ok. Will take care in v2.
>
> >             ret = -ENOMEM;
> >             goto err_ioremap;
> >     }
> >
> > -   priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> > -                                                  "little-endian");
> > -
> > -   priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> > -                                             "fsl,erratum-a011043");
> > -
> > -   ret = of_mdiobus_register(bus, np);
> > -   if (ret) {
> > -           dev_err(&pdev->dev, "cannot register MDIO bus\n");
> > +   if (is_of_node(pdev->dev.fwnode)) {
> > +           priv->is_little_endian = of_property_read_bool(pdev->dev.of_node,
> > +                                                          "little-endian");
> > +
> > +           priv->has_a011043 = of_property_read_bool(pdev->dev.of_node,
> > +                                                     "fsl,erratum-a011043");
> > +
> > +           ret = of_mdiobus_register(bus, np);
> > +           if (ret) {
> > +                   dev_err(&pdev->dev, "cannot register MDIO bus\n");
> > +                   goto err_registration;
> > +           }
> > +   } else if (is_acpi_node(pdev->dev.fwnode)) {
> > +           priv->is_little_endian =
> > +                   fwnode_property_read_bool(pdev->dev.fwnode,
> > +                                             "little-endian");
> > +           ret = fwnode_mdiobus_register(bus, pdev->dev.fwnode);
> > +           if (ret) {
> > +                   dev_err(&pdev->dev, "cannot register MDIO bus\n");
> > +                   goto err_registration;
> > +           }
>
> The little-endian property read can be moved out of the DT/ACPI paths
> and you can just use device_property_read_bool() for that purpose.
> Having both fwnode_mdiobus_register() and of_mdiobus_register() looks
> fairly redundant, you could quite easily introduce a wrapper:
> device_mdiobus_register() which internally takes the appropriate DT/ACPI
> paths as needed.
Had some difficulty with DT while using fwnode APIs. Will resolve them
and provide better integrated code.

Thanks

Calvin

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

* RE: [EXT] Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 16:28   ` Andrew Lunn
@ 2020-02-05  7:11     ` Calvin Johnson (OSS)
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-05  7:11 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: linux.cj, Jon Nettleton, linux, Makarand Pawagi, Cristi Sovaiala,
	Laurentiu Tudor, Ioana Ciornei, Varun Sethi, Pankaj Bansal,
	Rajesh V. Bikkina, Marcin Wojtas, Calvin Johnson (OSS),
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev, linux-kernel, linux-acpi

Hi Andrew,

> -----Original Message-----
> From: Andrew Lunn <andrew@lunn.ch>
> Sent: Friday, January 31, 2020 9:58 PM

<snip>

> On Fri, Jan 31, 2020 at 09:04:34PM +0530, Calvin Johnson wrote:
> > From: Marcin Wojtas <mw@semihalf.com>
> >
> > This patch introduces fwnode helper for registering MDIO bus, as well
> > as one for finding the PHY, basing on its firmware node pointer.
> > Comparing to existing OF equivalent,
> > fwnode_mdiobus_register() does not support:
> >  * deprecated bindings (device whitelist, nor the PHY ID embedded
> >    in the compatible string)
> >  * MDIO bus auto scanning
> >
> > Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> > Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> 
> Hi Calvin
> no
> This appears to but a cut and paste, follow by an intelligent s/of/fwnode/g.

In this patchset, I tried to reuse Marcin's patch which was posted on 2017/12/18.
https://lkml.org/lkml/2017/12/18/211
With my patch([v1,2/7] mdio_bus: modify fwnode phy related functions), I've made 
modifications to this(v1,1/7) patch to adapt to the changes in the kernel.

> Did you make any attempt to consolidate the two implementations?  It
> seems like there should be some level of abstraction that hides away the
> difference between DT properties, and DT properties stuffed into ACPI
> tables?

Yes attempt is to consolidate DT and ACPI into fwnode. Sure, I'll revisit the patch
and try to work on your recommendation.

Thanks
Calvin

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

* RE: [EXT] Re: [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers.
  2020-02-03 18:02 ` [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Florian Fainelli
@ 2020-02-05  8:31   ` Calvin Johnson (OSS)
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-05  8:31 UTC (permalink / raw)
  To: Florian Fainelli, linux.cj, Jon Nettleton, linux,
	Makarand Pawagi, Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei,
	Varun Sethi, Pankaj Bansal, Rajesh V. Bikkina, Jeremy Linton
  Cc: Calvin Johnson (OSS),
	Andrew Lunn, Andy Shevchenko, Antoine Tenart, David S. Miller,
	Dmitry Torokhov, Greg Kroah-Hartman, Heikki Krogerus,
	Heiner Kallweit, Ioana Ciocoi Radulescu, Madalin Bucur (OSS),
	Matteo Croce, Maxime Chevallier, Rafael J. Wysocki, Russell King,
	Sakari Ailus, Thomas Gleixner, linux-kernel, netdev, linux-acpi

Hi Florian

> -----Original Message-----
> From: Florian Fainelli <f.fainelli@gmail.com>
> Sent: Monday, February 3, 2020 11:32 PM
> To: Calvin Johnson <calvin.johnson@nxp.com>; linux.cj@gmail.com; Jon

<snip>

> On 1/31/20 7:34 AM, Calvin Johnson wrote:
> > From: Calvin Johnson <calvin.johnson@oss.nxp.com>
> >
> > This patch series provides ACPI support for xgmac_mdio and dpaa2-mac
> > driver. Most of the DT APIs are replaced with fwnode APIs to handle
> > both DT and ACPI nodes.
> >
> > Old patch by Marcin Wojtas: (mdio_bus: Introduce fwnode MDIO helpers),
> > is reused in this series to get some fwnode mdio helper APIs.
> 
> Andrew's comment on your first patch is a good summary of what this patch
> series does, instead of consolidating the existing code and making it less of_*
> centric and more firmware agnostic, this duplicates the existing infrastructure
> almost line for line to create a fwnode specific implementation. The
> preference would be for you to move away from that and use device_*
> properties as much as possible while making the code capable of handling all
> firmware implementations.

Thanks for the suggestion. Will take this direction for v2.

> Can you also show a few DSDT for the devices that you are working so we can
> a feeling of how you represented the various properties and parent/child
> devices dependencies?

https://source.codeaurora.org/external/qoriq/qoriq-components/edk2-platforms/tree/Platform/NXP/LX2160aRdbPkg/AcpiTables/Dsdt/Mdio.asl?h=LX2160_UEFI_ACPI_EAR1
https://source.codeaurora.org/external/qoriq/qoriq-components/edk2-platforms/tree/Platform/NXP/LX2160aRdbPkg/AcpiTables/Dsdt/Mc.asl?h=LX2160_UEFI_ACPI_EAR1

Thanks
Calvin

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

* RE: [EXT] Re: [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect()
  2020-02-03 18:41   ` Russell King - ARM Linux admin
  2020-02-03 18:43     ` Russell King - ARM Linux admin
@ 2020-02-05 11:33     ` Calvin Johnson (OSS)
  1 sibling, 0 replies; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-05 11:33 UTC (permalink / raw)
  To: Russell King - ARM Linux admin
  Cc: linux.cj, Jon Nettleton, Makarand Pawagi, Cristi Sovaiala,
	Laurentiu Tudor, Ioana Ciornei, Varun Sethi, Pankaj Bansal,
	Rajesh V. Bikkina, Calvin Johnson (OSS),
	Andrew Lunn, David S. Miller, Florian Fainelli, Heiner Kallweit,
	linux-kernel, netdev, linux-acpi

> -----Original Message-----
> From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
> Sent: Tuesday, February 4, 2020 12:11 AM
> To: Calvin Johnson <calvin.johnson@nxp.com>

<snip>

> > Introduce phylink_fwnode_phy_connect API to connect the PHY using
> > fwnode.
> >
> > Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> > ---
> >
> >  drivers/net/phy/phylink.c | 64
> +++++++++++++++++++++++++++++++++++++++
> >  include/linux/phylink.h   |  2 ++
> >  2 files changed, 66 insertions(+)
> >
> > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
> > index ee7a718662c6..f211f62283b5 100644
> > --- a/drivers/net/phy/phylink.c
> > +++ b/drivers/net/phy/phylink.c
> > @@ -18,6 +18,7 @@
> >  #include <linux/spinlock.h>
> >  #include <linux/timer.h>
> >  #include <linux/workqueue.h>
> > +#include <linux/acpi.h>
> >
> >  #include "sfp.h"
> >  #include "swphy.h"
> > @@ -817,6 +818,69 @@ int phylink_connect_phy(struct phylink *pl,
> > struct phy_device *phy)  }  EXPORT_SYMBOL_GPL(phylink_connect_phy);
> >
> > +/**
> > + * phylink_fwnode_phy_connect() - connect the PHY specified in the
> fwnode.
> > + * @pl: a pointer to a &struct phylink returned from phylink_create()
> > + * @dn: a pointer to a &struct device_node.
> > + * @flags: PHY-specific flags to communicate to the PHY device driver
> > + *
> > + * Connect the phy specified in the device node @dn to the phylink
> > +instance
> > + * specified by @pl. Actions specified in phylink_connect_phy() will
> > +be
> > + * performed.
> > + *
> > + * Returns 0 on success or a negative errno.
> > + */
> > +int phylink_fwnode_phy_connect(struct phylink *pl,
> > +                            struct fwnode_handle *fwnode,
> > +                            u32 flags) {
> > +     struct fwnode_handle *phy_node;
> > +     struct phy_device *phy_dev;
> > +     int ret;
> > +     int status;
> > +     struct fwnode_reference_args args;
> > +
> > +     /* Fixed links and 802.3z are handled without needing a PHY */
> > +     if (pl->link_an_mode == MLO_AN_FIXED ||
> > +         (pl->link_an_mode == MLO_AN_INBAND &&
> > +          phy_interface_mode_is_8023z(pl->link_interface)))
> > +             return 0;
> > +
> > +     status = acpi_node_get_property_reference(fwnode, "phy-handle", 0,
> > +                                               &args);
> > +     if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> > +             status = acpi_node_get_property_reference(fwnode, "phy", 0,
> > +                                                       &args);
> > +     if (ACPI_FAILURE(status) || !is_acpi_device_node(args.fwnode))
> > +             status = acpi_node_get_property_reference(fwnode,
> > +                                                       "phy-device", 0,
> > +                                                       &args);
> 
> This is a copy-and-paste of phylink_of_phy_connect() without much thought.
> 
> There is no need to duplicate the legacy DT functionality of phy/phy-
> device/phy-handle in ACPI - there is no legacy to support, so it's pointless
> trying to find one of three properties here.

Ok. I'll remove it.

> I'd prefer both the DT and ACPI variants to be more integrated, so we don't
> have two almost identical functions except for the firmware specific detail.

Did you mean phylink_of_phy_connect replaced with phylink_fwnode_phy_connect?
I can add DT handling also inside phylink_fwnode_phy_connect. Please let me know.

Thanks for pointing out about adding linux-acpi ML. I started added them in my responses.
I was assuming they would be added by get_maintainer.pl. 

Thanks
Calvin

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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
  2020-01-31 16:28   ` Andrew Lunn
  2020-02-03  9:49   ` kbuild test robot
@ 2020-02-05 14:17   ` Jeremy Linton
  2020-02-07  9:42     ` [EXT] " Calvin Johnson (OSS)
  2020-03-17 11:36   ` Calvin Johnson
  3 siblings, 1 reply; 34+ messages in thread
From: Jeremy Linton @ 2020-02-05 14:17 UTC (permalink / raw)
  To: Calvin Johnson, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina
  Cc: Marcin Wojtas, Calvin Johnson, Andrew Lunn, David S. Miller,
	Florian Fainelli, Heiner Kallweit, linux-kernel, netdev

Hi,

On 1/31/20 9:34 AM, Calvin Johnson wrote:
> From: Marcin Wojtas <mw@semihalf.com>
> 
> This patch introduces fwnode helper for registering MDIO
> bus, as well as one for finding the PHY, basing on its
> firmware node pointer. Comparing to existing OF equivalent,
> fwnode_mdiobus_register() does not support:
>   * deprecated bindings (device whitelist, nor the PHY ID embedded
>     in the compatible string)
>   * MDIO bus auto scanning
> 
> Signed-off-by: Marcin Wojtas <mw@semihalf.com>
> Signed-off-by: Calvin Johnson <calvin.johnson@oss.nxp.com>
> ---
> 
>   drivers/net/phy/mdio_bus.c | 218 +++++++++++++++++++++++++++++++++++++
>   include/linux/mdio.h       |   3 +
>   2 files changed, 221 insertions(+)
> 
> diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
> index 229e480179ff..b1830ae2abd9 100644
> --- a/drivers/net/phy/mdio_bus.c
> +++ b/drivers/net/phy/mdio_bus.c
> @@ -22,6 +22,7 @@
>   #include <linux/of_device.h>
>   #include <linux/of_mdio.h>
>   #include <linux/of_gpio.h>
> +#include <linux/of_irq.h>
>   #include <linux/netdevice.h>
>   #include <linux/etherdevice.h>
>   #include <linux/reset.h>
> @@ -725,6 +726,223 @@ static int mdio_uevent(struct device *dev, struct kobj_uevent_env *env)
>   	return 0;
>   }
>   
> +static int fwnode_mdiobus_register_phy(struct mii_bus *bus,
> +				       struct fwnode_handle *child, u32 addr)
> +{
> +	struct phy_device *phy;
> +	bool is_c45 = false;
> +	int rc;
> +
> +	rc = fwnode_property_match_string(child, "compatible",
> +					  "ethernet-phy-ieee802.3-c45");
> +	if (!rc)
> +		is_c45 = true;
> +
> +	phy = get_phy_device(bus, addr, is_c45);
> +	if (IS_ERR(phy))
> +		return PTR_ERR(phy);
> +
> +	phy->irq = bus->irq[addr];
> +
> +	if (to_of_node(child)) {
> +		rc = of_irq_get(to_of_node(child), 0);
> +		if (rc == -EPROBE_DEFER) {
> +			phy_device_free(phy);
> +			return rc;
> +		} else if (rc > 0) {
> +			phy->irq = rc;
> +			bus->irq[addr] = rc;
> +		}
> +	}
> +
> +	if (fwnode_property_read_bool(child, "broken-turn-around"))
> +		bus->phy_ignore_ta_mask |= 1 << addr;
> +
> +	/* Associate the fwnode with the device structure so it
> +	 * can be looked up later.
> +	 */
> +	phy->mdio.dev.fwnode = child;
> +
> +	/* All data is now stored in the phy struct, so register it */
> +	rc = phy_device_register(phy);
> +	if (rc) {
> +		phy_device_free(phy);
> +		fwnode_handle_put(child);
> +		return rc;
> +	}
> +
> +	dev_dbg(&bus->dev, "registered phy at address %i\n", addr);
> +
> +	return 0;
> +}
> +
> +static int fwnode_mdiobus_register_device(struct mii_bus *bus,
> +					  struct fwnode_handle *child, u32 addr)
> +{
> +	struct mdio_device *mdiodev;
> +	int rc;
> +
> +	mdiodev = mdio_device_create(bus, addr);
> +	if (IS_ERR(mdiodev))
> +		return PTR_ERR(mdiodev);
> +
> +	/* Associate the fwnode with the device structure so it
> +	 * can be looked up later.
> +	 */
> +	mdiodev->dev.fwnode = child;
> +
> +	/* All data is now stored in the mdiodev struct; register it. */
> +	rc = mdio_device_register(mdiodev);
> +	if (rc) {
> +		mdio_device_free(mdiodev);
> +		fwnode_handle_put(child);
> +		return rc;
> +	}
> +
> +	dev_dbg(&bus->dev, "registered mdio device at address %i\n", addr);
> +
> +	return 0;
> +}
> +
> +static int fwnode_mdio_parse_addr(struct device *dev,
> +				  const struct fwnode_handle *fwnode)
> +{
> +	u32 addr;
> +	int ret;
> +
> +	ret = fwnode_property_read_u32(fwnode, "reg", &addr);
> +	if (ret < 0) {
> +		dev_err(dev, "PHY node has no 'reg' property\n");
> +		return ret;
> +	}
> +
> +	/* A PHY must have a reg property in the range [0-31] */
> +	if (addr < 0 || addr >= PHY_MAX_ADDR) {
> +		dev_err(dev, "PHY address %i is invalid\n", addr);
> +		return -EINVAL;
> +	}
> +
> +	return addr;
> +}

Almost assuredly this is wrong, the _ADR method exists to identify a 
device on its parent bus. The DT reg property shouldn't be used like 
this in an ACPI enviroment.

Further, there are a number of other dt bindings in this set that seem 
inappropriate in common/shared ACPI code paths. That is because AFAIK 
the _DSD methods are there to provide device implementation specific 
behaviors, not as standardized methods for a generic classes of devices. 
Its vaguly the equivlant of the "vendor,xxxx" properties in DT.

This has been a discussion point on/off for a while with any attempt to 
publicly specify/standardize for all OS vendors what they might find 
encoded in a DSD property. The few year old "WORK_IN_PROGRESS" link on 
the uefi page has a few suggested ones

https://uefi.org/sites/default/files/resources/nic-request-v2.pdf

Anyway, the use of phy-handle with a reference to the phy device on a 
shared MDIO is a techically workable solution to the problem brought up 
in the RPI/ACPI thread as well. OTOH, it suffers from the use of DSD and 
at a minimum should probably be added to the document linked above if 
its found to be the best way to handle this. Although, in the common 
case of a mdio bus, matching acpi described devices with their 
discovered counterparts (note the device() defintion in the spec 
19.6.30) only to define DSD refrences is a bit overkill.

Put another way, while seemingly not nessiary if a bus can be probed, a 
nic/device->mdio->phy can be described in the normal ACPI heirarchy with 
only appropriatly nested CRS and ADR resources. Its the shared nature of 
the MDIO bus that causes problems.



> +
> +/**
> + * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
> + * It must either:
> + * o Compatible string of "ethernet-phy-ieee802.3-c45"
> + * o Compatible string of "ethernet-phy-ieee802.3-c22"
> + * Checking "compatible" property is done, in order to follow the DT binding.
> + */
> +static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
> +{
> +	int ret;
> +
> +	ret = fwnode_property_match_string(child, "compatible",
> +					   "ethernet-phy-ieee802.3-c45");
> +	if (!ret)
> +		return true;
> +
> +	ret = fwnode_property_match_string(child, "compatible",
> +					   "ethernet-phy-ieee802.3-c22");
> +	if (!ret)
> +		return true;
> +
> +	if (!fwnode_property_present(child, "compatible"))
> +		return true;
> +
> +	return false;
> +}
> +
> +/**
> + * fwnode_mdiobus_register - Register mii_bus and create PHYs from the fwnode
> + * @bus: pointer to mii_bus structure
> + * @fwnode: pointer to fwnode_handle of MDIO bus.
> + *
> + * This function registers the mii_bus structure and registers a phy_device
> + * for each child node of @fwnode.
> + */
> +int fwnode_mdiobus_register(struct mii_bus *bus, struct fwnode_handle *fwnode)
> +{
> +	struct fwnode_handle *child;
> +	int addr, rc;
> +	int default_gpio_reset_delay_ms = 10;
> +
> +	/* Do not continue if the node is disabled */
> +	if (!fwnode_device_is_available(fwnode))
> +		return -ENODEV;
> +
> +	/* Mask out all PHYs from auto probing. Instead the PHYs listed in
> +	 * the firmware nodes are populated after the bus has been registered.
> +	 */
> +	bus->phy_mask = ~0;
> +
> +	bus->dev.fwnode = fwnode;
> +
> +	/* Get bus level PHY reset GPIO details */
> +	bus->reset_delay_us = default_gpio_reset_delay_ms;
> +	fwnode_property_read_u32(fwnode, "reset-delay-us",
> +				 &bus->reset_delay_us);
> +
> +	/* Register the MDIO bus */
> +	rc = mdiobus_register(bus);
> +	if (rc)
> +		return rc;
> +
> +	/* Loop over the child nodes and register a phy_device for each PHY */
> +	fwnode_for_each_child_node(fwnode, child) {
> +		addr = fwnode_mdio_parse_addr(&bus->dev, child);
> +		if (addr < 0)
> +			continue;
> +
> +		if (fwnode_mdiobus_child_is_phy(child))
> +			rc = fwnode_mdiobus_register_phy(bus, child, addr);
> +		else
> +			rc = fwnode_mdiobus_register_device(bus, child, addr);
> +		if (rc)
> +			goto unregister;
> +	}
> +
> +	return 0;
> +
> +unregister:
> +	mdiobus_unregister(bus);
> +
> +	return rc;
> +}
> +EXPORT_SYMBOL(fwnode_mdiobus_register);
> +
> +/* Helper function for fwnode_phy_find_device */
> +static int fwnode_phy_match(struct device *dev, const void *phy_fwnode)
> +{
> +	return dev->fwnode == phy_fwnode;
> +}
> +
> +/**
> + * fwnode_phy_find_device - find the phy_device associated to fwnode
> + * @phy_fwnode: Pointer to the PHY's fwnode
> + *
> + * If successful, returns a pointer to the phy_device with the embedded
> + * struct device refcount incremented by one, or NULL on failure.
> + */
> +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
> +{
> +	struct device *d;
> +	struct mdio_device *mdiodev;
> +
> +	if (!phy_fwnode)
> +		return NULL;
> +
> +	d = bus_find_device(&mdio_bus_type, NULL, phy_fwnode, fwnode_phy_match);
> +	if (d) {
> +		mdiodev = to_mdio_device(d);
> +		if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
> +			return to_phy_device(d);
> +		put_device(d);
> +	}
> +
> +	return NULL;
> +}
> +EXPORT_SYMBOL(fwnode_phy_find_device);
> +
>   struct bus_type mdio_bus_type = {
>   	.name		= "mdio_bus",
>   	.match		= mdio_bus_match,
> diff --git a/include/linux/mdio.h b/include/linux/mdio.h
> index a7604248777b..5c600bb1183c 100644
> --- a/include/linux/mdio.h
> +++ b/include/linux/mdio.h
> @@ -327,6 +327,9 @@ int mdiobus_unregister_device(struct mdio_device *mdiodev);
>   bool mdiobus_is_registered_device(struct mii_bus *bus, int addr);
>   struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr);
>   
> +int fwnode_mdiobus_register(struct mii_bus *bus, struct fwnode_handle *fwnode);
> +struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode);
> +
>   /**
>    * mdio_module_driver() - Helper macro for registering mdio drivers
>    *
> 


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

* RE: [EXT] Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-02-05 14:17   ` Jeremy Linton
@ 2020-02-07  9:42     ` Calvin Johnson (OSS)
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson (OSS) @ 2020-02-07  9:42 UTC (permalink / raw)
  To: Jeremy Linton, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	Cristi Sovaiala, Laurentiu Tudor, Ioana Ciornei, Varun Sethi,
	Pankaj Bansal, Rajesh V. Bikkina, Leo Li
  Cc: Marcin Wojtas, Calvin Johnson (OSS),
	Andrew Lunn, David S. Miller, Florian Fainelli, Heiner Kallweit,
	linux-kernel, netdev, linux-acpi

Hi Jeremy,

> -----Original Message-----
> From: Jeremy Linton <jeremy.linton@arm.com>
> Sent: Wednesday, February 5, 2020 7:48 PM

<snip>

> > +static int fwnode_mdio_parse_addr(struct device *dev,
> > +                               const struct fwnode_handle *fwnode) {
> > +     u32 addr;
> > +     int ret;
> > +
> > +     ret = fwnode_property_read_u32(fwnode, "reg", &addr);
> > +     if (ret < 0) {
> > +             dev_err(dev, "PHY node has no 'reg' property\n");
> > +             return ret;
> > +     }
> > +
> > +     /* A PHY must have a reg property in the range [0-31] */
> > +     if (addr < 0 || addr >= PHY_MAX_ADDR) {
> > +             dev_err(dev, "PHY address %i is invalid\n", addr);
> > +             return -EINVAL;
> > +     }
> > +
> > +     return addr;
> > +}
> 
> Almost assuredly this is wrong, the _ADR method exists to identify a device
> on its parent bus. The DT reg property shouldn't be used like this in an ACPI
> enviroment.
> 
> Further, there are a number of other dt bindings in this set that seem
> inappropriate in common/shared ACPI code paths. That is because AFAIK the
> _DSD methods are there to provide device implementation specific
> behaviors, not as standardized methods for a generic classes of devices.
> Its vaguly the equivlant of the "vendor,xxxx" properties in DT.
> 
> This has been a discussion point on/off for a while with any attempt to
> publicly specify/standardize for all OS vendors what they might find encoded
> in a DSD property. The few year old "WORK_IN_PROGRESS" link on the uefi
> page has a few suggested ones
> 
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fuefi.
> org%2Fsites%2Fdefault%2Ffiles%2Fresources%2Fnic-request-
> v2.pdf&amp;data=02%7C01%7Ccalvin.johnson%40nxp.com%7Cf16350b8314
> b4992063008d7ab4f6486%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C1
> %7C637166229795374486&amp;sdata=zcXu%2Fu%2Fxw5%2Ff7eJd%2FledR%
> 2FgnabvFcCUtOfwTXtMoDBI%3D&amp;reserved=0
> 
> Anyway, the use of phy-handle with a reference to the phy device on a
> shared MDIO is a techically workable solution to the problem brought up in
> the RPI/ACPI thread as well. OTOH, it suffers from the use of DSD and at a
> minimum should probably be added to the document linked above if its
> found to be the best way to handle this. Although, in the common case of a
> mdio bus, matching acpi described devices with their discovered
> counterparts (note the device() defintion in the spec
> 19.6.30) only to define DSD refrences is a bit overkill.
> 
> Put another way, while seemingly not nessiary if a bus can be probed, a
> nic/device->mdio->phy can be described in the normal ACPI heirarchy with
> only appropriatly nested CRS and ADR resources. Its the shared nature of the
> MDIO bus that causes problems.

Thanks! I'll definitely consider your suggestions along with the others received earlier.

While I do more study on this, thought of forwarding DSTD tables used by this patch-set.
https://source.codeaurora.org/external/qoriq/qoriq-components/edk2-platforms/tree/Platform/NXP/LX2160aRdbPkg/AcpiTables/Dsdt/Mdio.asl?h=LX2160_UEFI_ACPI_EAR1
https://source.codeaurora.org/external/qoriq/qoriq-components/edk2-platforms/tree/Platform/NXP/LX2160aRdbPkg/AcpiTables/Dsdt/Mc.asl?h=LX2160_UEFI_ACPI_EAR1

Regards
Calvin

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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
                     ` (2 preceding siblings ...)
  2020-02-05 14:17   ` Jeremy Linton
@ 2020-03-17 11:36   ` Calvin Johnson
  2020-03-17 14:04     ` Andrew Lunn
  3 siblings, 1 reply; 34+ messages in thread
From: Calvin Johnson @ 2020-03-17 11:36 UTC (permalink / raw)
  To: Jeremy Linton
  Cc: linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Marcin Wojtas, Andrew Lunn,
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev, linux-acpi

Hi,

On Fri, Jan 31, 2020 at 09:04:34PM +0530, Calvin Johnson wrote:

<snip>

> +/**
> + * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
> + * It must either:
> + * o Compatible string of "ethernet-phy-ieee802.3-c45"
> + * o Compatible string of "ethernet-phy-ieee802.3-c22"
> + * Checking "compatible" property is done, in order to follow the DT binding.
> + */
> +static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
> +{
> +	int ret;
> +
> +	ret = fwnode_property_match_string(child, "compatible",
> +					   "ethernet-phy-ieee802.3-c45");
> +	if (!ret)
> +		return true;
> +
> +	ret = fwnode_property_match_string(child, "compatible",
> +					   "ethernet-phy-ieee802.3-c22");
> +	if (!ret)
> +		return true;
> +
> +	if (!fwnode_property_present(child, "compatible"))
> +		return true;
> +
> +	return false;
> +}

Can we use _CID in ACPI to get the compatible string? Is there any other method
to handle this kind of situation where we would like to pass C45 or C22 info to
the mdiobus driver?

Thanks
Calvin

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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-03-17 11:36   ` Calvin Johnson
@ 2020-03-17 14:04     ` Andrew Lunn
  2020-03-18  6:03       ` Calvin Johnson
  0 siblings, 1 reply; 34+ messages in thread
From: Andrew Lunn @ 2020-03-17 14:04 UTC (permalink / raw)
  To: Calvin Johnson
  Cc: Jeremy Linton, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Marcin Wojtas,
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev, linux-acpi

On Tue, Mar 17, 2020 at 05:06:50PM +0530, Calvin Johnson wrote:
> Hi,
> 
> On Fri, Jan 31, 2020 at 09:04:34PM +0530, Calvin Johnson wrote:
> 
> <snip>
> 
> > +/**
> > + * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
> > + * It must either:
> > + * o Compatible string of "ethernet-phy-ieee802.3-c45"
> > + * o Compatible string of "ethernet-phy-ieee802.3-c22"
> > + * Checking "compatible" property is done, in order to follow the DT binding.
> > + */
> > +static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
> > +{
> > +	int ret;
> > +
> > +	ret = fwnode_property_match_string(child, "compatible",
> > +					   "ethernet-phy-ieee802.3-c45");
> > +	if (!ret)
> > +		return true;
> > +
> > +	ret = fwnode_property_match_string(child, "compatible",
> > +					   "ethernet-phy-ieee802.3-c22");
> > +	if (!ret)
> > +		return true;
> > +
> > +	if (!fwnode_property_present(child, "compatible"))
> > +		return true;
> > +
> > +	return false;
> > +}
> 
> Can we use _CID in ACPI to get the compatible string? Is there any other method
> to handle this kind of situation where we would like to pass C45 or C22 info to
> the mdiobus driver?

Hi Calvin

Is there any defacto standardised way to stuff this device tree
property into ACPI? It is one of the key properties, so either there
is one standard way, or lots of variants because nobody can be
bothered to go to the ACPI standardisation body and get it formalised.

     Andrew

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

* Re: [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers
  2020-03-17 14:04     ` Andrew Lunn
@ 2020-03-18  6:03       ` Calvin Johnson
  0 siblings, 0 replies; 34+ messages in thread
From: Calvin Johnson @ 2020-03-18  6:03 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Jeremy Linton, linux.cj, Jon Nettleton, linux, Makarand Pawagi,
	cristian.sovaiala, laurentiu.tudor, ioana.ciornei, V.Sethi,
	pankaj.bansal, Rajesh V . Bikkina, Marcin Wojtas,
	David S. Miller, Florian Fainelli, Heiner Kallweit, linux-kernel,
	netdev, linux-acpi

Hi Andrew,

On Tue, Mar 17, 2020 at 03:04:26PM +0100, Andrew Lunn wrote:
> On Tue, Mar 17, 2020 at 05:06:50PM +0530, Calvin Johnson wrote:
> > Hi,
> > 
> > On Fri, Jan 31, 2020 at 09:04:34PM +0530, Calvin Johnson wrote:
> > 
> > <snip>
> > 
> > > +/**
> > > + * fwnode_mdiobus_child_is_phy - Return true if the child is a PHY node.
> > > + * It must either:
> > > + * o Compatible string of "ethernet-phy-ieee802.3-c45"
> > > + * o Compatible string of "ethernet-phy-ieee802.3-c22"
> > > + * Checking "compatible" property is done, in order to follow the DT binding.
> > > + */
> > > +static bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child)
> > > +{
> > > +	int ret;
> > > +
> > > +	ret = fwnode_property_match_string(child, "compatible",
> > > +					   "ethernet-phy-ieee802.3-c45");
> > > +	if (!ret)
> > > +		return true;
> > > +
> > > +	ret = fwnode_property_match_string(child, "compatible",
> > > +					   "ethernet-phy-ieee802.3-c22");
> > > +	if (!ret)
> > > +		return true;
> > > +
> > > +	if (!fwnode_property_present(child, "compatible"))
> > > +		return true;
> > > +
> > > +	return false;
> > > +}
> > 
> > Can we use _CID in ACPI to get the compatible string? Is there any other method
> > to handle this kind of situation where we would like to pass C45 or C22 info to
> > the mdiobus driver?
> 
> Hi Calvin
> 
> Is there any defacto standardised way to stuff this device tree
> property into ACPI? It is one of the key properties, so either there
> is one standard way, or lots of variants because nobody can be
> bothered to go to the ACPI standardisation body and get it formalised.

_DSD package is used to stuff this kind of DT property. IMO, this is not the
standard way as C22 and C45 are key properties for MDIO.

Eg usage of _DSD:
https://source.codeaurora.org/external/qoriq/qoriq-components/edk2-platforms/tree/Platform/NXP/LX2160aRdbPkg/AcpiTables/Dsdt/Mdio.asl?h=LX2160_UEFI_ACPI_EAR1

      Name (_DSD, Package () {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
          Package () {
            Package () {"reg", 5},
            Package () {"phy-addr", 5},
            Package () {"compatible", "ethernet-phy-ieee802.3-c45"}
        }
      })

Ideally, MDIO bus should be part of the ACPI spec.
Maybe this property can be included in:
https://uefi.org/sites/default/files/resources/nic-request-v2.pdf

I'm still looking for a better approach than _DSD till ACPI spec defines it.

Regards
Calvin

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

end of thread, other threads:[~2020-03-18  6:04 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-31 15:34 [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Calvin Johnson
2020-01-31 15:34 ` [PATCH v1 1/7] mdio_bus: Introduce fwnode MDIO helpers Calvin Johnson
2020-01-31 16:28   ` Andrew Lunn
2020-02-05  7:11     ` [EXT] " Calvin Johnson (OSS)
2020-02-03  9:49   ` kbuild test robot
2020-02-05 14:17   ` Jeremy Linton
2020-02-07  9:42     ` [EXT] " Calvin Johnson (OSS)
2020-03-17 11:36   ` Calvin Johnson
2020-03-17 14:04     ` Andrew Lunn
2020-03-18  6:03       ` Calvin Johnson
2020-01-31 15:34 ` [PATCH v1 2/7] mdio_bus: modify fwnode phy related functions Calvin Johnson
2020-01-31 15:34 ` [PATCH v1 3/7] net/fsl: add ACPI support for mdio bus Calvin Johnson
2020-01-31 16:08   ` Andy Shevchenko
2020-02-04  7:18     ` Calvin Johnson (OSS)
2020-02-04 11:17       ` Andy Shevchenko
2020-02-03  3:44   ` Florian Fainelli
2020-02-04 18:46     ` Calvin Johnson
2020-01-31 15:34 ` [PATCH v1 4/7] device property: fwnode_get_phy_mode: Change API to solve int/unit warnings Calvin Johnson
2020-01-31 15:55   ` Andy Shevchenko
2020-02-03  9:13     ` Calvin Johnson (OSS)
2020-02-03  9:22       ` Andy Shevchenko
2020-02-03  2:32   ` kbuild test robot
2020-02-03  8:41   ` kbuild test robot
2020-01-31 15:34 ` [PATCH v1 5/7] device property: Introduce fwnode_phy_is_fixed_link() Calvin Johnson
2020-01-31 15:57   ` Andy Shevchenko
2020-02-03  9:21     ` Calvin Johnson (OSS)
2020-01-31 15:34 ` [PATCH v1 6/7] net: phylink: Introduce phylink_fwnode_phy_connect() Calvin Johnson
2020-02-03 18:21   ` kbuild test robot
2020-02-03 18:41   ` Russell King - ARM Linux admin
2020-02-03 18:43     ` Russell King - ARM Linux admin
2020-02-05 11:33     ` [EXT] " Calvin Johnson (OSS)
2020-01-31 15:34 ` [PATCH v1 7/7] dpaa2-eth: Add ACPI support for DPAA2 MAC driver Calvin Johnson
2020-02-03 18:02 ` [PATCH v1 0/7] ACPI support for xgmac_mdio and dpaa2-mac drivers Florian Fainelli
2020-02-05  8:31   ` [EXT] " Calvin Johnson (OSS)

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).