]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
net: axienet: fix MDIO bus naming
authorRobert Hancock <hancock@sedsystems.ca>
Thu, 6 Jun 2019 22:28:07 +0000 (16:28 -0600)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Jun 2019 23:24:29 +0000 (16:24 -0700)
The MDIO bus for this driver was being named using the result of
of_address_to_resource on a node which may not have any resource on it,
but the return value of that call was not checked so it was using some
random value in the bus name. Change to name the MDIO bus based on the
resource start of the actual Ethernet register block.

Signed-off-by: Robert Hancock <hancock@sedsystems.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/xilinx/xilinx_axienet.h
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
drivers/net/ethernet/xilinx/xilinx_axienet_mdio.c

index d82e3b63d44259de7f125973dd203308e8c61e63..f9078bd7f86f552f9579b1d66de104bfef360e96 100644 (file)
@@ -380,6 +380,7 @@ struct axidma_bd {
  * @dev:       Pointer to device structure
  * @phy_node:  Pointer to device node structure
  * @mii_bus:   Pointer to MII bus structure
+ * @regs_start: Resource start for axienet device addresses
  * @regs:      Base address for the axienet_local device address space
  * @dma_regs:  Base address for the axidma device address space
  * @dma_err_tasklet: Tasklet structure to process Axi DMA errors
@@ -421,6 +422,7 @@ struct axienet_local {
        struct mii_bus *mii_bus;        /* MII bus reference */
 
        /* IO registers, dma functions and IRQs */
+       resource_size_t regs_start;
        void __iomem *regs;
        void __iomem *dma_regs;
 
index 55beca100999f52efd86d413232f0724dc135d89..ffbd4d762534d2968ed9e44acef7631324ac04cf 100644 (file)
@@ -1480,6 +1480,7 @@ static int axienet_probe(struct platform_device *pdev)
        lp->options = XAE_OPTION_DEFAULTS;
        /* Map device registers */
        ethres = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       lp->regs_start = ethres->start;
        lp->regs = devm_ioremap_resource(&pdev->dev, ethres);
        if (IS_ERR(lp->regs)) {
                dev_err(&pdev->dev, "could not map Axi Ethernet regs.\n");
index 704babdbc8a222a68510476ce9625dd305820a01..665ae1d16f1e2479592ec71b52be591bd2f3d1d2 100644 (file)
@@ -127,7 +127,7 @@ int axienet_mdio_setup(struct axienet_local *lp, struct device_node *np)
        int ret;
        u32 clk_div, host_clock;
        struct mii_bus *bus;
-       struct resource res;
+       struct device_node *mdio_node;
        struct device_node *np1;
 
        /* clk_div can be calculated by deriving it from the equation:
@@ -199,10 +199,9 @@ issue:
        if (!bus)
                return -ENOMEM;
 
-       np1 = of_get_parent(lp->phy_node);
-       of_address_to_resource(np1, 0, &res);
-       snprintf(bus->id, MII_BUS_ID_SIZE, "%.8llx",
-                (unsigned long long) res.start);
+       mdio_node = of_get_parent(lp->phy_node);
+       snprintf(bus->id, MII_BUS_ID_SIZE, "axienet-%.8llx",
+                (unsigned long long)lp->regs_start);
 
        bus->priv = lp;
        bus->name = "Xilinx Axi Ethernet MDIO";
@@ -211,7 +210,7 @@ issue:
        bus->parent = lp->dev;
        lp->mii_bus = bus;
 
-       ret = of_mdiobus_register(bus, np1);
+       ret = of_mdiobus_register(bus, mdio_node);
        if (ret) {
                mdiobus_free(bus);
                lp->mii_bus = NULL;