[PATCH] net: mdio-octeon: Add PCI driver binding.

Subsystems: ethernet phy library, networking drivers, open firmware and flattened device tree bindings, the rest

STALE4048d

10 messages, 3 authors, 2015-09-24 · open the first message on its own page

[PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Daney <hidden>
Date: 2015-09-23 00:41:45

From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>

When the Cavium mdio-octeon devices appear in the Thunder family of
arm64 based SoCs, they show up as PCI devices.  Add PCI driver
wrapping so the driver is bound in the standard PCI device scan.

When in this form, a single PCI device may have more than a single
bus, we call this a "nexus" of buses.  The standard firmware
device_for_each_child_node() iterator is used to find the individual
buses underneath the "nexus".

Update the device tree binding documentation for the new PCI driver
binding.

Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
---
 .../devicetree/bindings/net/cavium-mdio.txt        |  61 +++++++-
 drivers/net/phy/mdio-octeon.c                      | 159 +++++++++++++++++++--
 2 files changed, 209 insertions(+), 11 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/cavium-mdio.txt b/Documentation/devicetree/bindings/net/cavium-mdio.txt
index 04cb749..020df08 100644
--- a/Documentation/devicetree/bindings/net/cavium-mdio.txt
+++ b/Documentation/devicetree/bindings/net/cavium-mdio.txt
@@ -1,9 +1,12 @@
 * System Management Interface (SMI) / MDIO
 
 Properties:
-- compatible: "cavium,octeon-3860-mdio"
+- compatible: One of:
 
-  Compatibility with all cn3XXX, cn5XXX and cn6XXX SOCs.
+   "cavium,octeon-3860-mdio": Compatibility with all cn3XXX, cn5XXX
+                       and cn6XXX SOCs.
+
+   "cavium,thunder-8890-mdio": Compatibility with all cn8XXX SOCs.
 
 - reg: The base address of the MDIO bus controller register bank.
 
@@ -25,3 +28,57 @@ Example:
 			reg = <0>;
 		};
 	};
+
+
+* System Management Interface (SMI) / MDIO Nexus
+
+  Several mdio buses may be gathered as children of a single PCI
+  device, this PCI device is the nexus of the buses.
+
+Properties:
+
+- compatible: "cavium,thunder-8890-mdio-nexus";
+
+- reg: The PCI device and function numbers of the nexus device.
+
+- #address-cells: Must be <2>.
+
+- #size-cells: Must be <2>.
+
+- ranges: As needed for mapping of the MDIO bus device registers.
+
+- assigned-addresses: As needed for mapping of the MDIO bus device registers.
+
+Example:
+
+        mdio-nexus@1,3 {
+                compatible = "cavium,thunder-8890-mdio-nexus";
+                #address-cells = <2>;
+                #size-cells = <2>;
+                reg = <0x0b00 0 0 0 0>; /* DEVFN = 0x0b (1:3) */
+                assigned-addresses = <0x03000000 0x87e0 0x05000000 0x0 0x800000>;
+                ranges = <0x87e0 0x05000000 0x03000000 0x87e0 0x05000000 0x0 0x800000>;
+
+                mdio0@87e0,05003800 {
+                        compatible = "cavium,thunder-8890-mdio";
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        reg = <0x87e0 0x05003800 0x0 0x30>;
+
+                        ethernet-phy@0 {
+                                ...
+                                reg = <0>;
+                        };
+                };
+                mdio0@87e0,05003880 {
+                        compatible = "cavium,thunder-8890-mdio";
+                        #address-cells = <1>;
+                        #size-cells = <0>;
+                        reg = <0x87e0 0x05003880 0x0 0x30>;
+
+                        ethernet-phy@0 {
+                                ...
+                                reg = <0>;
+                        };
+                };
+        };
diff --git a/drivers/net/phy/mdio-octeon.c b/drivers/net/phy/mdio-octeon.c
index fcf4e4d..21eca35 100644
--- a/drivers/net/phy/mdio-octeon.c
+++ b/drivers/net/phy/mdio-octeon.c
@@ -3,7 +3,7 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2009-2012 Cavium, Inc.
+ * Copyright (C) 2009-2015 Cavium, Inc.
  */
 
 #include <linux/platform_device.h>
@@ -14,6 +14,7 @@
 #include <linux/gfp.h>
 #include <linux/phy.h>
 #include <linux/io.h>
+#include <linux/pci.h>
 
 #ifdef CONFIG_CAVIUM_OCTEON_SOC
 #include <asm/octeon/octeon.h>
@@ -110,8 +111,6 @@ enum octeon_mdiobus_mode {
 struct octeon_mdiobus {
 	struct mii_bus *mii_bus;
 	u64 register_base;
-	resource_size_t mdio_phys;
-	resource_size_t regsize;
 	enum octeon_mdiobus_mode mode;
 	int phy_irq[PHY_MAX_ADDR];
 };
@@ -269,6 +268,8 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)
 {
 	struct octeon_mdiobus *bus;
 	struct resource *res_mem;
+	resource_size_t mdio_phys;
+	resource_size_t regsize;
 	union cvmx_smix_en smi_en;
 	int err = -ENOENT;
 
@@ -282,17 +283,17 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)
 		return -ENXIO;
 	}
 
-	bus->mdio_phys = res_mem->start;
-	bus->regsize = resource_size(res_mem);
+	mdio_phys = res_mem->start;
+	regsize = resource_size(res_mem);
 
-	if (!devm_request_mem_region(&pdev->dev, bus->mdio_phys, bus->regsize,
+	if (!devm_request_mem_region(&pdev->dev, mdio_phys, regsize,
 				     res_mem->name)) {
 		dev_err(&pdev->dev, "request_mem_region failed\n");
 		return -ENXIO;
 	}
 
 	bus->register_base =
-		(u64)devm_ioremap(&pdev->dev, bus->mdio_phys, bus->regsize);
+		(u64)devm_ioremap(&pdev->dev, mdio_phys, regsize);
 	if (!bus->register_base) {
 		dev_err(&pdev->dev, "dev_ioremap failed\n");
 		return -ENOMEM;
@@ -308,7 +309,7 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)
 
 	bus->mii_bus->priv = bus;
 	bus->mii_bus->irq = bus->phy_irq;
-	bus->mii_bus->name = "mdio-octeon";
+	bus->mii_bus->name = KBUILD_MODNAME;
 	snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%llx", bus->register_base);
 	bus->mii_bus->parent = &pdev->dev;
 
@@ -356,7 +357,7 @@ MODULE_DEVICE_TABLE(of, octeon_mdiobus_match);
 
 static struct platform_driver octeon_mdiobus_driver = {
 	.driver = {
-		.name		= "mdio-octeon",
+		.name		= KBUILD_MODNAME,
 		.of_match_table = octeon_mdiobus_match,
 	},
 	.probe		= octeon_mdiobus_probe,
@@ -371,6 +372,146 @@ EXPORT_SYMBOL(octeon_mdiobus_force_mod_depencency);
 
 module_platform_driver(octeon_mdiobus_driver);
 
+#ifdef CONFIG_PCI
+
+struct thunder_mdiobus_nexus {
+	void __iomem *bar0;
+	struct octeon_mdiobus *buses[4];
+};
+
+static int thunder_mdiobus_pci_probe(struct pci_dev *pdev,
+				     const struct pci_device_id *ent)
+{
+	struct device_node *node;
+	struct fwnode_handle *fwn;
+	struct thunder_mdiobus_nexus *nexus;
+	int err;
+	int i;
+
+	nexus = devm_kzalloc(&pdev->dev, sizeof(*nexus), GFP_KERNEL);
+	if (!nexus)
+		return -ENOMEM;
+
+	pci_set_drvdata(pdev, nexus);
+
+	err = pcim_enable_device(pdev);
+	if (err) {
+		dev_err(&pdev->dev, "Failed to enable PCI device\n");
+		pci_set_drvdata(pdev, NULL);
+		return err;
+	}
+
+	err = pci_request_regions(pdev, KBUILD_MODNAME);
+	if (err) {
+		dev_err(&pdev->dev, "pci_request_regions failed\n");
+		goto err_disable_device;
+	}
+
+	nexus->bar0 = pcim_iomap(pdev, 0, pci_resource_len(pdev, 0));
+	if (!nexus->bar0) {
+		err = -ENOMEM;
+		goto err_release_regions;
+	}
+
+	i = 0;
+	device_for_each_child_node(&pdev->dev, fwn) {
+		struct resource r;
+		struct octeon_mdiobus *bus;
+		union cvmx_smix_en smi_en;
+
+		/* If it is not an OF node we cannot handle it yet, so
+		 * exit the loop.
+		 */
+		node = to_of_node(fwn);
+		if (!node)
+			break;
+
+		err = of_address_to_resource(node, 0, &r);
+		if (err) {
+			dev_err(&pdev->dev,
+				"Couldn't translate address for \"%s\"\n",
+				node->name);
+			break;
+		}
+		bus = devm_kzalloc(&pdev->dev, sizeof(struct octeon_mdiobus),
+				   GFP_KERNEL);
+
+		if (!bus)
+			break;
+
+		nexus->buses[i] = bus;
+		i++;
+
+		bus->register_base = (u64)nexus->bar0 +
+			r.start - pci_resource_start(pdev, 0);
+
+		bus->mii_bus = mdiobus_alloc();
+		if (!bus->mii_bus)
+			break;
+
+		smi_en.u64 = 0;
+		smi_en.s.en = 1;
+		oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN);
+		bus->mii_bus->priv = bus;
+		bus->mii_bus->irq = bus->phy_irq;
+		bus->mii_bus->name = KBUILD_MODNAME;
+		snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%llx", r.start);
+		bus->mii_bus->parent = &pdev->dev;
+		bus->mii_bus->read = octeon_mdiobus_read;
+		bus->mii_bus->write = octeon_mdiobus_write;
+
+		err = of_mdiobus_register(bus->mii_bus, node);
+		if (err)
+			dev_err(&pdev->dev, "of_mdiobus_register failed\n");
+
+		dev_info(&pdev->dev, "Added bus at %llx\n", r.start);
+		if (i >= ARRAY_SIZE(nexus->buses))
+			break;
+	}
+	return 0;
+
+err_release_regions:
+	pci_release_regions(pdev);
+
+err_disable_device:
+	pci_set_drvdata(pdev, NULL);
+	return err;
+}
+
+static void thunder_mdiobus_pci_remove(struct pci_dev *pdev)
+{
+	int i;
+	union cvmx_smix_en smi_en;
+	struct thunder_mdiobus_nexus *nexus = pci_get_drvdata(pdev);
+
+	for (i = 0; i < ARRAY_SIZE(nexus->buses); i++) {
+		struct octeon_mdiobus *bus = nexus->buses[i];
+
+		if (!bus)
+			continue;
+
+		mdiobus_unregister(bus->mii_bus);
+		mdiobus_free(bus->mii_bus);
+		smi_en.u64 = 0;
+		oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN);
+	}
+	pci_set_drvdata(pdev, NULL);
+}
+
+static const struct pci_device_id thunder_mdiobus_id_table[] = {
+	{ PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, 0xa02b) },
+	{ 0, } /* End of table. */
+};
+MODULE_DEVICE_TABLE(pci, thunder_mdiobus_id_table);
+
+static struct pci_driver thunder_mdiobus_driver = {
+	.name = KBUILD_MODNAME,
+	.id_table = thunder_mdiobus_id_table,
+	.probe = thunder_mdiobus_pci_probe,
+	.remove = thunder_mdiobus_pci_remove,
+};
+module_pci_driver(thunder_mdiobus_driver);
+#endif /* CONFIG_PCI */
 MODULE_DESCRIPTION(DRV_DESCRIPTION);
 MODULE_VERSION(DRV_VERSION);
 MODULE_AUTHOR("David Daney");
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Miller <davem@davemloft.net>
Date: 2015-09-24 21:52:10

RnJvbTogRGF2aWQgRGFuZXkgPGRkYW5leS5jYXZtQGdtYWlsLmNvbT4NCkRhdGU6IFR1ZSwgMjIgU2VwIDIwMTUgMTc6NDE6MzYgLTA3MDANCg0KPiBGcm9tOiBEYXZpZCBEYW5leSA8ZGF2aWQuZGFuZXlAY2F2aXVtLmNvbT4NCj4gDQo+IFdoZW4gdGhlIENhdml1bSBtZGlvLW9jdGVvbiBkZXZpY2VzIGFwcGVhciBpbiB0aGUgVGh1bmRlciBmYW1pbHkgb2YNCj4gYXJtNjQgYmFzZWQgU29DcywgdGhleSBzaG93IHVwIGFzIFBDSSBkZXZpY2VzLiAgQWRkIFBDSSBkcml2ZXINCj4gd3JhcHBpbmcgc28gdGhlIGRyaXZlciBpcyBib3VuZCBpbiB0aGUgc3RhbmRhcmQgUENJIGRldmljZSBzY2FuLg0KPiANCj4gV2hlbiBpbiB0aGlzIGZvcm0sIGEgc2luZ2xlIFBDSSBkZXZpY2UgbWF5IGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlDQo+IGJ1cywgd2UgY2FsbCB0aGlzIGEgIm5leHVzIiBvZiBidXNlcy4gIFRoZSBzdGFuZGFyZCBmaXJtd2FyZQ0KPiBkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZSgpIGl0ZXJhdG9yIGlzIHVzZWQgdG8gZmluZCB0aGUgaW5kaXZpZHVhbA0KPiBidXNlcyB1bmRlcm5lYXRoIHRoZSAibmV4dXMiLg0KPiANCj4gVXBkYXRlIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50YXRpb24gZm9yIHRoZSBuZXcgUENJIGRyaXZlcg0KPiBiaW5kaW5nLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRGF2aWQgRGFuZXkgPGRhdmlkLmRhbmV5QGNhdml1bS5jb20+DQoNClRoaXMgcGF0Y2ggYnJlYWtzIHRoZSBidWlsZDoNCg0KICBDQyBbTV0gIGRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5vDQpJbiBmaWxlIGluY2x1ZGVkIGZyb20gZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmM6MTM6MDoNCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTI4OjI3OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mIKFfX2luaXR0ZXN0og0KICBzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMzIxOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2luaXSiDQogbW9kdWxlX2luaXQoX19kcml2ZXIjI19pbml0KTsgXA0KIF4NCmluY2x1ZGUvbGludXgvcGNpLmg6MTE5MjoyOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1vZHVsZV9kcml2ZXIoX19wY2lfZHJpdmVyLCBwY2lfcmVnaXN0ZXJfZHJpdmVyLCBcDQogIF4NCmRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjUxMzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9wY2lfZHJpdmVyog0KIG1vZHVsZV9wY2lfZHJpdmVyKHRodW5kZXJfbWRpb2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTI4OjI3OiBub3RlOiBwcmV2aW91cyBkZWZpbml0aW9uIG9mIKFfX2luaXR0ZXN0oiB3YXMgaGVyZQ0KICBzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMzIxOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2luaXSiDQogbW9kdWxlX2luaXQoX19kcml2ZXIjI19pbml0KTsgXA0KIF4NCmluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmg6MjIyOjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqINCiAgbW9kdWxlX2RyaXZlcihfX3BsYXRmb3JtX2RyaXZlciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyLCBcDQogIF4NCmRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjM3MzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXKiDQogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvY3Rlb25fbWRpb2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTMwOjY6IGVycm9yOiByZWRlZmluaXRpb24gb2YgoWluaXRfbW9kdWxlog0KICBpbnQgaW5pdF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2luaXRmbikpKTsNCiAgICAgIF4NCmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTMyMToxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9pbml0og0KIG1vZHVsZV9pbml0KF9fZHJpdmVyIyNfaW5pdCk7IFwNCiBeDQppbmNsdWRlL2xpbnV4L3BjaS5oOjExOTI6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZHJpdmVyog0KICBtb2R1bGVfZHJpdmVyKF9fcGNpX2RyaXZlciwgcGNpX3JlZ2lzdGVyX2RyaXZlciwgXA0KICBeDQpkcml2ZXJzL25ldC9waHkvbWRpby1vY3Rlb24uYzo1MTM6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfcGNpX2RyaXZlcqINCiBtb2R1bGVfcGNpX2RyaXZlcih0aHVuZGVyX21kaW9idXNfZHJpdmVyKTsNCiBeDQppbmNsdWRlL2xpbnV4L21vZHVsZS5oOjEzMDo2OiBub3RlOiBwcmV2aW91cyBkZWZpbml0aW9uIG9mIKFpbml0X21vZHVsZaIgd2FzIGhlcmUNCiAgaW50IGluaXRfbW9kdWxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCNpbml0Zm4pKSk7DQogICAgICBeDQppbmNsdWRlL2xpbnV4L2RldmljZS5oOjEzMjE6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfaW5pdKINCiBtb2R1bGVfaW5pdChfX2RyaXZlciMjX2luaXQpOyBcDQogXg0KaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaDoyMjI6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZHJpdmVyog0KICBtb2R1bGVfZHJpdmVyKF9fcGxhdGZvcm1fZHJpdmVyLCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIsIFwNCiAgXg0KZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmM6MzczOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX3BsYXRmb3JtX2RyaXZlcqINCiBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9jdGVvbl9tZGlvYnVzX2RyaXZlcik7DQogXg0KaW5jbHVkZS9saW51eC9tb2R1bGUuaDoxMzQ6Mjc6IGVycm9yOiByZWRlZmluaXRpb24gb2YgoV9fZXhpdHRlc3SiDQogIHN0YXRpYyBpbmxpbmUgZXhpdGNhbGxfdCBfX2V4aXR0ZXN0KHZvaWQpICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICBeDQppbmNsdWRlL2xpbnV4L2RldmljZS5oOjEzMjY6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZXhpdKINCiBtb2R1bGVfZXhpdChfX2RyaXZlciMjX2V4aXQpOw0KIF4NCmluY2x1ZGUvbGludXgvcGNpLmg6MTE5MjoyOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1vZHVsZV9kcml2ZXIoX19wY2lfZHJpdmVyLCBwY2lfcmVnaXN0ZXJfZHJpdmVyLCBcDQogIF4NCmRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjUxMzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9wY2lfZHJpdmVyog0KIG1vZHVsZV9wY2lfZHJpdmVyKHRodW5kZXJfbWRpb2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTM0OjI3OiBub3RlOiBwcmV2aW91cyBkZWZpbml0aW9uIG9mIKFfX2V4aXR0ZXN0oiB3YXMgaGVyZQ0KICBzdGF0aWMgaW5saW5lIGV4aXRjYWxsX3QgX19leGl0dGVzdCh2b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMzI2OjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2V4aXSiDQogbW9kdWxlX2V4aXQoX19kcml2ZXIjI19leGl0KTsNCiBeDQppbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oOjIyMjoyOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1vZHVsZV9kcml2ZXIoX19wbGF0Zm9ybV9kcml2ZXIsIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciwgXA0KICBeDQpkcml2ZXJzL25ldC9waHkvbWRpby1vY3Rlb24uYzozNzM6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfcGxhdGZvcm1fZHJpdmVyog0KIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob2N0ZW9uX21kaW9idXNfZHJpdmVyKTsNCiBeDQppbmNsdWRlL2xpbnV4L21vZHVsZS5oOjEzNjo3OiBlcnJvcjogcmVkZWZpbml0aW9uIG9mIKFjbGVhbnVwX21vZHVsZaINCiAgdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjZXhpdGZuKSkpOw0KICAgICAgIF4NCmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTMyNjoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9leGl0og0KIG1vZHVsZV9leGl0KF9fZHJpdmVyIyNfZXhpdCk7DQogXg0KaW5jbHVkZS9saW51eC9wY2kuaDoxMTkyOjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqINCiAgbW9kdWxlX2RyaXZlcihfX3BjaV9kcml2ZXIsIHBjaV9yZWdpc3Rlcl9kcml2ZXIsIFwNCiAgXg0KZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmM6NTEzOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX3BjaV9kcml2ZXKiDQogbW9kdWxlX3BjaV9kcml2ZXIodGh1bmRlcl9tZGlvYnVzX2RyaXZlcik7DQogXg0KaW5jbHVkZS9saW51eC9tb2R1bGUuaDoxMzY6Nzogbm90ZTogcHJldmlvdXMgZGVmaW5pdGlvbiBvZiChY2xlYW51cF9tb2R1bGWiIHdhcyBoZXJlDQogIHZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2V4aXRmbikpKTsNCiAgICAgICBeDQppbmNsdWRlL2xpbnV4L2RldmljZS5oOjEzMjY6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZXhpdKINCiBtb2R1bGVfZXhpdChfX2RyaXZlciMjX2V4aXQpOw0KIF4NCmluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmg6MjIyOjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqINCiAgbW9kdWxlX2RyaXZlcihfX3BsYXRmb3JtX2RyaXZlciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyLCBcDQogIF4NCmRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjM3MzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXKiDQogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvY3Rlb25fbWRpb2J1c19kcml2ZXIpOw0KIF4NCg0KQW5kIGZyYW5rbHkgSSdtIG5vdCBzdXJlIEkgbGlrZSB0aGlzIGNoYW5nZSBhbnl3YXlzLiAgSWYgdGhlIE9GIG5vZGVzDQphcmUgdGhlcmUsIHNpbXBseSBhZGQgY29kZSB0byBtYXRjaCBvbiB0aG9zZSBPRiBub2Rlcy4NCg0KVGhpcyBpcyBiZXR0ZXIgdGhhbiBhc3N1bWluZyB3aGF0IHNpdHMgdW5kZXJuZWF0aCBhIFBDSSBub2RlLCB3aXRob3V0DQphbnkgY2hlY2tzIGZvciB0aGUgJ25hbWUnIG9yICdjb21wYXRpYmxlJyBwcm9wZXJ0aWVzIGF0IGFsbC4gIFRoYXQncw0Kd2hhdCB0aGV5IGFyZSB0aGVyZSBmb3IgYWZ0ZXJhbGwuDQoNCg==--To unsubscribe from this list: send the line "unsubscribe devicetree" inthe body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.orgMore majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Daney <hidden>
Date: 2015-09-24 22:04:35

On 09/24/2015 02:52 PM, David Miller wrote:
From: David Daney <redacted>
Date: Tue, 22 Sep 2015 17:41:36 -0700
quoted
From: David Daney <redacted>

When the Cavium mdio-octeon devices appear in the Thunder family of
arm64 based SoCs, they show up as PCI devices.  Add PCI driver
wrapping so the driver is bound in the standard PCI device scan.

When in this form, a single PCI device may have more than a single
bus, we call this a "nexus" of buses.  The standard firmware
device_for_each_child_node() iterator is used to find the individual
buses underneath the "nexus".

Update the device tree binding documentation for the new PCI driver
binding.

Signed-off-by: David Daney <redacted>
This patch breaks the build:
For which architecture?

I tested it on mips and arm64.  I will try x86, as I guess that is where you tried your test build.

   CC [M]  drivers/net/phy/mdio-octeon.o
In file included from drivers/net/phy/mdio-octeon.c:13:0:
include/linux/module.h:128:27: error: redefinition of ‘__inittest’
   static inline initcall_t __inittest(void)  \
                            ^
[...]
And frankly I'm not sure I like this change anyways.  If the OF nodes
are there, simply add code to match on those OF nodes.

This is better than assuming what sits underneath a PCI node, without
any checks for the 'name' or 'compatible' properties at all.  That's
what they are there for afterall.
There is, somewhat of, a method behind the madness here.

In order to use MSI-X interrupts, we need a corresponding PCI device. Now, this driver doesn't currently use interrupts, but other devices in the SoC do, so they must be PCI devices.

The idea is to have the type of all drivers uniformly be PCI, rather than a random mix of PCI and platform, and then switch them back and forth as PCI features are/are-not used in the driver.

Also we need to consider ACPI firmware in addition to OF device tree.

David Daney

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Daney <hidden>
Date: 2015-09-24 22:12:15

On 09/24/2015 03:04 PM, David Daney wrote:
On 09/24/2015 02:52 PM, David Miller wrote:
quoted
From: David Daney <redacted>
Date: Tue, 22 Sep 2015 17:41:36 -0700
quoted
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>

When the Cavium mdio-octeon devices appear in the Thunder family of
arm64 based SoCs, they show up as PCI devices.  Add PCI driver
wrapping so the driver is bound in the standard PCI device scan.

When in this form, a single PCI device may have more than a single
bus, we call this a "nexus" of buses.  The standard firmware
device_for_each_child_node() iterator is used to find the individual
buses underneath the "nexus".

Update the device tree binding documentation for the new PCI driver
binding.

Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
This patch breaks the build:
For which architecture?

I tested it on mips and arm64.  I will try x86, as I guess that is where
you tried your test build.

quoted
   CC [M]  drivers/net/phy/mdio-octeon.o
In file included from drivers/net/phy/mdio-octeon.c:13:0:
include/linux/module.h:128:27: error: redefinition of ‘__inittest’
   static inline initcall_t __inittest(void)  \
OK, I reproduced this failure.  It happens with a module build only.

Sorry for the breakage, I will fix it and resubmit.

David Daney


                             ^
[...]
quoted
And frankly I'm not sure I like this change anyways.  If the OF nodes
are there, simply add code to match on those OF nodes.

This is better than assuming what sits underneath a PCI node, without
any checks for the 'name' or 'compatible' properties at all.  That's
what they are there for afterall.
There is, somewhat of, a method behind the madness here.

In order to use MSI-X interrupts, we need a corresponding PCI device.
Now, this driver doesn't currently use interrupts, but other devices in
the SoC do, so they must be PCI devices.

The idea is to have the type of all drivers uniformly be PCI, rather
than a random mix of PCI and platform, and then switch them back and
forth as PCI features are/are-not used in the driver.

Also we need to consider ACPI firmware in addition to OF device tree.

David Daney
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Miller <davem@davemloft.net>
Date: 2015-09-24 22:14:54

From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:04:23 -0700
On 09/24/2015 02:52 PM, David Miller wrote:
quoted
From: David Daney <redacted>
Date: Tue, 22 Sep 2015 17:41:36 -0700
quoted
From: David Daney <redacted>

When the Cavium mdio-octeon devices appear in the Thunder family of
arm64 based SoCs, they show up as PCI devices.  Add PCI driver
wrapping so the driver is bound in the standard PCI device scan.

When in this form, a single PCI device may have more than a single
bus, we call this a "nexus" of buses.  The standard firmware
device_for_each_child_node() iterator is used to find the individual
buses underneath the "nexus".

Update the device tree binding documentation for the new PCI driver
binding.

Signed-off-by: David Daney <redacted>
This patch breaks the build:
For which architecture?

I tested it on mips and arm64.  I will try x86, as I guess that is
where you tried your test build.
x86-64.
There is, somewhat of, a method behind the madness here.

In order to use MSI-X interrupts, we need a corresponding PCI
device. Now, this driver doesn't currently use interrupts, but other
devices in the SoC do, so they must be PCI devices.
"I need this thing, which isn't needed, therefore I'm making this
change."

Sorry, that's not a good argument.

ACPI nodes have names and whatnot as well.

So I haven't heard a compelling argument so far.

So why not just implement this cleanly and using the existing
framework now, and then when you have a legitimate reason for making a
major change to the probing scheme you can do it then.

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Miller <davem@davemloft.net>
Date: 2015-09-24 22:16:32

From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:12:03 -0700
Sorry for the breakage, I will fix it and resubmit.
Don't bother, I told you that using PCI probing is unacceptable.

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Daney <hidden>
Date: 2015-09-24 22:45:51

On 09/24/2015 03:14 PM, David Miller wrote:
From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:04:23 -0700
quoted
On 09/24/2015 02:52 PM, David Miller wrote:
quoted
From: David Daney <redacted>
Date: Tue, 22 Sep 2015 17:41:36 -0700
quoted
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>

When the Cavium mdio-octeon devices appear in the Thunder family of
arm64 based SoCs, they show up as PCI devices.  Add PCI driver
wrapping so the driver is bound in the standard PCI device scan.

When in this form, a single PCI device may have more than a single
bus, we call this a "nexus" of buses.  The standard firmware
device_for_each_child_node() iterator is used to find the individual
buses underneath the "nexus".

Update the device tree binding documentation for the new PCI driver
binding.

Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
This patch breaks the build:
For which architecture?

I tested it on mips and arm64.  I will try x86, as I guess that is
where you tried your test build.
x86-64.
quoted
There is, somewhat of, a method behind the madness here.

In order to use MSI-X interrupts, we need a corresponding PCI
device. Now, this driver doesn't currently use interrupts, but other
devices in the SoC do, so they must be PCI devices.
"I need this thing, which isn't needed, therefore I'm making this
change."
That is not the exact argument.  It is really more like this:

1) The firmware is supplying a uniform view of the devices by making them all PCI devices.  This is done because:

   a) Devices that use interrupts must be PCI.

   b) Uniformity is good.

2) The OF device tree nodes for PCI devices do not result in the creation of a platform device.

3) If there is no platform device, platform device driver binding does not occur, and the device is useless to the kernel.

So, we think it is a good change.  I don't really want to argue about the  semantics of it being a "needed change".
Sorry, that's not a good argument.

ACPI nodes have names and whatnot as well.

So I haven't heard a compelling argument so far.

So why not just implement this cleanly and using the existing
framework now, and then when you have a legitimate reason for making a
major change to the probing scheme you can do it then.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Miller <davem@davemloft.net>
Date: 2015-09-24 22:50:08

From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:45:41 -0700
2) The OF device tree nodes for PCI devices do not result in the
creation of a platform device.
But they are created for the children right?  And that's the one
you need them for probing.

I'm still not convinced, sorry.

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Daney <hidden>
Date: 2015-09-24 22:54:40

On 09/24/2015 03:50 PM, David Miller wrote:
From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:45:41 -0700
quoted
2) The OF device tree nodes for PCI devices do not result in the
creation of a platform device.
But they are created for the children right?  And that's the one
you need them for probing.

I'm still not convinced, sorry.
Let's let this topic rest for a few days.  My original patch was defective, so it cannot be merged.  I will sleep on this, try a few things and perhaps revisit it if I still think it is advisable.

Thanks,
David Daney

Re: [PATCH] net: mdio-octeon: Add PCI driver binding.

From: David Miller <davem@davemloft.net>
Date: 2015-09-24 23:08:01

From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:54:30 -0700
On 09/24/2015 03:50 PM, David Miller wrote:
quoted
From: David Daney <redacted>
Date: Thu, 24 Sep 2015 15:45:41 -0700
quoted
2) The OF device tree nodes for PCI devices do not result in the
creation of a platform device.
But they are created for the children right?  And that's the one
you need them for probing.

I'm still not convinced, sorry.
Let's let this topic rest for a few days.  My original patch was
defective, so it cannot be merged.  I will sleep on this, try a few
things and perhaps revisit it if I still think it is advisable.
Ok.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help