Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1231074 > unrolled thread
| Started by | David Daney <ddaney.cavm@gmail.com> |
|---|---|
| First post | 2015-09-23 02:50 +0200 |
| Last post | 2015-09-25 01:10 +0200 |
| Articles | 7 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH] net: mdio-octeon: Add PCI driver binding. David Daney <ddaney.cavm@gmail.com> - 2015-09-23 02:50 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Miller <davem@davemloft.net> - 2015-09-25 00:00 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Daney <ddaney@caviumnetworks.com> - 2015-09-25 00:10 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Miller <davem@davemloft.net> - 2015-09-25 00:20 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Miller <davem@davemloft.net> - 2015-09-25 00:20 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Miller <davem@davemloft.net> - 2015-09-25 01:00 +0200
Re: [PATCH] net: mdio-octeon: Add PCI driver binding. David Miller <davem@davemloft.net> - 2015-09-25 01:10 +0200
| From | David Daney <ddaney.cavm@gmail.com> |
|---|---|
| Date | 2015-09-23 02:50 +0200 |
| Subject | [PATCH] net: mdio-octeon: Add PCI driver binding. |
| Message-ID | <qbGpX-4YD-7@gated-at.bofh.it> |
From: David Daney <david.daney@cavium.com>
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@cavium.com>
---
.../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 linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-09-25 00:00 +0200 |
| Message-ID | <qcmIx-7cc-3@gated-at.bofh.it> |
| In reply to | #1231074 |
RnJvbTogRGF2aWQgRGFuZXkgPGRkYW5leS5jYXZtQGdtYWlsLmNvbT4NCkRhdGU6IFR1ZSwgMjIg U2VwIDIwMTUgMTc6NDE6MzYgLTA3MDANCg0KPiBGcm9tOiBEYXZpZCBEYW5leSA8ZGF2aWQuZGFu ZXlAY2F2aXVtLmNvbT4NCj4gDQo+IFdoZW4gdGhlIENhdml1bSBtZGlvLW9jdGVvbiBkZXZpY2Vz IGFwcGVhciBpbiB0aGUgVGh1bmRlciBmYW1pbHkgb2YNCj4gYXJtNjQgYmFzZWQgU29DcywgdGhl eSBzaG93IHVwIGFzIFBDSSBkZXZpY2VzLiAgQWRkIFBDSSBkcml2ZXINCj4gd3JhcHBpbmcgc28g dGhlIGRyaXZlciBpcyBib3VuZCBpbiB0aGUgc3RhbmRhcmQgUENJIGRldmljZSBzY2FuLg0KPiAN Cj4gV2hlbiBpbiB0aGlzIGZvcm0sIGEgc2luZ2xlIFBDSSBkZXZpY2UgbWF5IGhhdmUgbW9yZSB0 aGFuIGEgc2luZ2xlDQo+IGJ1cywgd2UgY2FsbCB0aGlzIGEgIm5leHVzIiBvZiBidXNlcy4gIFRo ZSBzdGFuZGFyZCBmaXJtd2FyZQ0KPiBkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZSgpIGl0ZXJh dG9yIGlzIHVzZWQgdG8gZmluZCB0aGUgaW5kaXZpZHVhbA0KPiBidXNlcyB1bmRlcm5lYXRoIHRo ZSAibmV4dXMiLg0KPiANCj4gVXBkYXRlIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50 YXRpb24gZm9yIHRoZSBuZXcgUENJIGRyaXZlcg0KPiBiaW5kaW5nLg0KPiANCj4gU2lnbmVkLW9m Zi1ieTogRGF2aWQgRGFuZXkgPGRhdmlkLmRhbmV5QGNhdml1bS5jb20+DQoNClRoaXMgcGF0Y2gg YnJlYWtzIHRoZSBidWlsZDoNCg0KICBDQyBbTV0gIGRyaXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVv bi5vDQpJbiBmaWxlIGluY2x1ZGVkIGZyb20gZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmM6 MTM6MDoNCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTI4OjI3OiBlcnJvcjogcmVkZWZpbml0aW9u IG9mIKFfX2luaXR0ZXN0og0KICBzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2 b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZp Y2UuaDoxMzIxOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2luaXSiDQog bW9kdWxlX2luaXQoX19kcml2ZXIjI19pbml0KTsgXA0KIF4NCmluY2x1ZGUvbGludXgvcGNpLmg6 MTE5MjoyOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1v ZHVsZV9kcml2ZXIoX19wY2lfZHJpdmVyLCBwY2lfcmVnaXN0ZXJfZHJpdmVyLCBcDQogIF4NCmRy aXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjUxMzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2Yg bWFjcm8goW1vZHVsZV9wY2lfZHJpdmVyog0KIG1vZHVsZV9wY2lfZHJpdmVyKHRodW5kZXJfbWRp b2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTI4OjI3OiBub3RlOiBw cmV2aW91cyBkZWZpbml0aW9uIG9mIKFfX2luaXR0ZXN0oiB3YXMgaGVyZQ0KICBzdGF0aWMgaW5s aW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMzIxOjE6IG5vdGU6IGluIGV4cGFuc2lv biBvZiBtYWNybyChbW9kdWxlX2luaXSiDQogbW9kdWxlX2luaXQoX19kcml2ZXIjI19pbml0KTsg XA0KIF4NCmluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmg6MjIyOjI6IG5vdGU6IGluIGV4 cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqINCiAgbW9kdWxlX2RyaXZlcihfX3BsYXRm b3JtX2RyaXZlciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyLCBcDQogIF4NCmRyaXZlcnMvbmV0 L3BoeS9tZGlvLW9jdGVvbi5jOjM3MzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1v ZHVsZV9wbGF0Zm9ybV9kcml2ZXKiDQogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvY3Rlb25fbWRp b2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTMwOjY6IGVycm9yOiBy ZWRlZmluaXRpb24gb2YgoWluaXRfbW9kdWxlog0KICBpbnQgaW5pdF9tb2R1bGUodm9pZCkgX19h dHRyaWJ1dGVfXygoYWxpYXMoI2luaXRmbikpKTsNCiAgICAgIF4NCmluY2x1ZGUvbGludXgvZGV2 aWNlLmg6MTMyMToxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9pbml0og0K IG1vZHVsZV9pbml0KF9fZHJpdmVyIyNfaW5pdCk7IFwNCiBeDQppbmNsdWRlL2xpbnV4L3BjaS5o OjExOTI6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZHJpdmVyog0KICBt b2R1bGVfZHJpdmVyKF9fcGNpX2RyaXZlciwgcGNpX3JlZ2lzdGVyX2RyaXZlciwgXA0KICBeDQpk cml2ZXJzL25ldC9waHkvbWRpby1vY3Rlb24uYzo1MTM6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9m IG1hY3JvIKFtb2R1bGVfcGNpX2RyaXZlcqINCiBtb2R1bGVfcGNpX2RyaXZlcih0aHVuZGVyX21k aW9idXNfZHJpdmVyKTsNCiBeDQppbmNsdWRlL2xpbnV4L21vZHVsZS5oOjEzMDo2OiBub3RlOiBw cmV2aW91cyBkZWZpbml0aW9uIG9mIKFpbml0X21vZHVsZaIgd2FzIGhlcmUNCiAgaW50IGluaXRf bW9kdWxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCNpbml0Zm4pKSk7DQogICAgICBeDQpp bmNsdWRlL2xpbnV4L2RldmljZS5oOjEzMjE6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3Jv IKFtb2R1bGVfaW5pdKINCiBtb2R1bGVfaW5pdChfX2RyaXZlciMjX2luaXQpOyBcDQogXg0KaW5j bHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaDoyMjI6Mjogbm90ZTogaW4gZXhwYW5zaW9uIG9m IG1hY3JvIKFtb2R1bGVfZHJpdmVyog0KICBtb2R1bGVfZHJpdmVyKF9fcGxhdGZvcm1fZHJpdmVy LCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIsIFwNCiAgXg0KZHJpdmVycy9uZXQvcGh5L21kaW8t b2N0ZW9uLmM6MzczOjE6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX3BsYXRm b3JtX2RyaXZlcqINCiBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9jdGVvbl9tZGlvYnVzX2RyaXZl cik7DQogXg0KaW5jbHVkZS9saW51eC9tb2R1bGUuaDoxMzQ6Mjc6IGVycm9yOiByZWRlZmluaXRp b24gb2YgoV9fZXhpdHRlc3SiDQogIHN0YXRpYyBpbmxpbmUgZXhpdGNhbGxfdCBfX2V4aXR0ZXN0 KHZvaWQpICBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICBeDQppbmNsdWRlL2xpbnV4L2Rl dmljZS5oOjEzMjY6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1bGVfZXhpdKIN CiBtb2R1bGVfZXhpdChfX2RyaXZlciMjX2V4aXQpOw0KIF4NCmluY2x1ZGUvbGludXgvcGNpLmg6 MTE5MjoyOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1v ZHVsZV9kcml2ZXIoX19wY2lfZHJpdmVyLCBwY2lfcmVnaXN0ZXJfZHJpdmVyLCBcDQogIF4NCmRy aXZlcnMvbmV0L3BoeS9tZGlvLW9jdGVvbi5jOjUxMzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2Yg bWFjcm8goW1vZHVsZV9wY2lfZHJpdmVyog0KIG1vZHVsZV9wY2lfZHJpdmVyKHRodW5kZXJfbWRp b2J1c19kcml2ZXIpOw0KIF4NCmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MTM0OjI3OiBub3RlOiBw cmV2aW91cyBkZWZpbml0aW9uIG9mIKFfX2V4aXR0ZXN0oiB3YXMgaGVyZQ0KICBzdGF0aWMgaW5s aW5lIGV4aXRjYWxsX3QgX19leGl0dGVzdCh2b2lkKSAgXA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgXg0KaW5jbHVkZS9saW51eC9kZXZpY2UuaDoxMzI2OjE6IG5vdGU6IGluIGV4cGFuc2lv biBvZiBtYWNybyChbW9kdWxlX2V4aXSiDQogbW9kdWxlX2V4aXQoX19kcml2ZXIjI19leGl0KTsN CiBeDQppbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oOjIyMjoyOiBub3RlOiBpbiBleHBh bnNpb24gb2YgbWFjcm8goW1vZHVsZV9kcml2ZXKiDQogIG1vZHVsZV9kcml2ZXIoX19wbGF0Zm9y bV9kcml2ZXIsIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciwgXA0KICBeDQpkcml2ZXJzL25ldC9w aHkvbWRpby1vY3Rlb24uYzozNzM6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvIKFtb2R1 bGVfcGxhdGZvcm1fZHJpdmVyog0KIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob2N0ZW9uX21kaW9i dXNfZHJpdmVyKTsNCiBeDQppbmNsdWRlL2xpbnV4L21vZHVsZS5oOjEzNjo3OiBlcnJvcjogcmVk ZWZpbml0aW9uIG9mIKFjbGVhbnVwX21vZHVsZaINCiAgdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lk KSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjZXhpdGZuKSkpOw0KICAgICAgIF4NCmluY2x1ZGUvbGlu dXgvZGV2aWNlLmg6MTMyNjoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1vZHVsZV9l eGl0og0KIG1vZHVsZV9leGl0KF9fZHJpdmVyIyNfZXhpdCk7DQogXg0KaW5jbHVkZS9saW51eC9w Y2kuaDoxMTkyOjI6IG5vdGU6IGluIGV4cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqIN CiAgbW9kdWxlX2RyaXZlcihfX3BjaV9kcml2ZXIsIHBjaV9yZWdpc3Rlcl9kcml2ZXIsIFwNCiAg Xg0KZHJpdmVycy9uZXQvcGh5L21kaW8tb2N0ZW9uLmM6NTEzOjE6IG5vdGU6IGluIGV4cGFuc2lv biBvZiBtYWNybyChbW9kdWxlX3BjaV9kcml2ZXKiDQogbW9kdWxlX3BjaV9kcml2ZXIodGh1bmRl cl9tZGlvYnVzX2RyaXZlcik7DQogXg0KaW5jbHVkZS9saW51eC9tb2R1bGUuaDoxMzY6Nzogbm90 ZTogcHJldmlvdXMgZGVmaW5pdGlvbiBvZiChY2xlYW51cF9tb2R1bGWiIHdhcyBoZXJlDQogIHZv aWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2V4aXRmbikpKTsN CiAgICAgICBeDQppbmNsdWRlL2xpbnV4L2RldmljZS5oOjEzMjY6MTogbm90ZTogaW4gZXhwYW5z aW9uIG9mIG1hY3JvIKFtb2R1bGVfZXhpdKINCiBtb2R1bGVfZXhpdChfX2RyaXZlciMjX2V4aXQp Ow0KIF4NCmluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmg6MjIyOjI6IG5vdGU6IGluIGV4 cGFuc2lvbiBvZiBtYWNybyChbW9kdWxlX2RyaXZlcqINCiAgbW9kdWxlX2RyaXZlcihfX3BsYXRm b3JtX2RyaXZlciwgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyLCBcDQogIF4NCmRyaXZlcnMvbmV0 L3BoeS9tZGlvLW9jdGVvbi5jOjM3MzoxOiBub3RlOiBpbiBleHBhbnNpb24gb2YgbWFjcm8goW1v ZHVsZV9wbGF0Zm9ybV9kcml2ZXKiDQogbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvY3Rlb25fbWRp b2J1c19kcml2ZXIpOw0KIF4NCg0KQW5kIGZyYW5rbHkgSSdtIG5vdCBzdXJlIEkgbGlrZSB0aGlz IGNoYW5nZSBhbnl3YXlzLiAgSWYgdGhlIE9GIG5vZGVzDQphcmUgdGhlcmUsIHNpbXBseSBhZGQg Y29kZSB0byBtYXRjaCBvbiB0aG9zZSBPRiBub2Rlcy4NCg0KVGhpcyBpcyBiZXR0ZXIgdGhhbiBh c3N1bWluZyB3aGF0IHNpdHMgdW5kZXJuZWF0aCBhIFBDSSBub2RlLCB3aXRob3V0DQphbnkgY2hl Y2tzIGZvciB0aGUgJ25hbWUnIG9yICdjb21wYXRpYmxlJyBwcm9wZXJ0aWVzIGF0IGFsbC4gIFRo YXQncw0Kd2hhdCB0aGV5IGFyZSB0aGVyZSBmb3IgYWZ0ZXJhbGwuDQoNCg== -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Daney <ddaney@caviumnetworks.com> |
|---|---|
| Date | 2015-09-25 00:10 +0200 |
| Message-ID | <qcmSe-7CQ-11@gated-at.bofh.it> |
| In reply to | #1232452 |
On 09/24/2015 02:52 PM, David Miller wrote: > From: David Daney <ddaney.cavm@gmail.com> > Date: Tue, 22 Sep 2015 17:41:36 -0700 > >> From: David Daney <david.daney@cavium.com> >> >> 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@cavium.com> > > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-09-25 00:20 +0200 |
| Message-ID | <qcn1T-7O4-1@gated-at.bofh.it> |
| In reply to | #1232458 |
From: David Daney <ddaney@caviumnetworks.com> 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. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-09-25 00:20 +0200 |
| Message-ID | <qcn1U-7O4-17@gated-at.bofh.it> |
| In reply to | #1232458 |
From: David Daney <ddaney@caviumnetworks.com> Date: Thu, 24 Sep 2015 15:04:23 -0700 > On 09/24/2015 02:52 PM, David Miller wrote: >> From: David Daney <ddaney.cavm@gmail.com> >> Date: Tue, 22 Sep 2015 17:41:36 -0700 >> >>> From: David Daney <david.daney@cavium.com> >>> >>> 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@cavium.com> >> >> 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. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-09-25 01:00 +0200 |
| Message-ID | <qcnEB-5s-9@gated-at.bofh.it> |
| In reply to | #1232467 |
From: David Daney <ddaney@caviumnetworks.com> 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. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2015-09-25 01:10 +0200 |
| Message-ID | <qcnOi-wm-9@gated-at.bofh.it> |
| In reply to | #1232483 |
From: David Daney <ddaney@caviumnetworks.com> Date: Thu, 24 Sep 2015 15:54:30 -0700 > On 09/24/2015 03:50 PM, David Miller wrote: >> From: David Daney <ddaney@caviumnetworks.com> >> 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. >> > > 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. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web