From: John Jacques <john.jacq...@lsi.com>

If the MDIO offset and period are defined in the device tree,
use them.  Otherwise, don't change anything.

Signed-off-by: John Jacques <john.jacq...@lsi.com>
---
 drivers/net/ethernet/lsi/lsi_acp_mdio.c | 38 ++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/lsi/lsi_acp_mdio.c 
b/drivers/net/ethernet/lsi/lsi_acp_mdio.c
index aab609d..da7dc92 100644
--- a/drivers/net/ethernet/lsi/lsi_acp_mdio.c
+++ b/drivers/net/ethernet/lsi/lsi_acp_mdio.c
@@ -253,17 +253,12 @@ EXPORT_SYMBOL(acp_mdio_write);
  */
 
 static void
-acp_mdio_initialize(void)
+acp_mdio_initialize(int offset, int period)
 {
-#ifdef CONFIG_ARM
-       /* LSI AXM (ARM) Platforms. */
-       write_reg(MDIO_CLK_OFFSET, 0x1c);
-       write_reg(MDIO_CLK_PERIOD, 0xf0);
-#else
-       /* LSI ACP (PPC) Platforms. */
-       write_reg(MDIO_CLK_OFFSET, 0x10);
-       write_reg(MDIO_CLK_PERIOD, 0x2c);
-#endif
+       write_reg(MDIO_CLK_OFFSET, offset);
+       write_reg(MDIO_CLK_PERIOD, period);
+
+       return;
 }
 
 /*
@@ -279,10 +274,13 @@ acp_mdio_init(void)
        void __iomem *map;
        u64 mdio_address;
        u32 mdio_size;
+       u32 mdio_offset = 0;
+       u32 mdio_period = 0;
 
        pr_info("MDIO: Initializing Axxia Wrappers.\n");
 
        mdio_priv = kzalloc(sizeof(struct lsi_mdio_priv), GFP_KERNEL);
+
        if (!mdio_priv)
                return -ENOMEM;
 
@@ -308,6 +306,7 @@ acp_mdio_init(void)
        }
 
        mdio_address = of_translate_address(np, field);
+
        if (mdio_address == OF_BAD_ADDR) {
                pr_crit("MDIO: of_translate_address failed!\n");
                rc = -EINVAL;
@@ -316,14 +315,29 @@ acp_mdio_init(void)
 
        mdio_size = field[1];
        map = ioremap(mdio_address, mdio_size);
+
        if (!map) {
                pr_crit("MDIO: Unable to ioremap!\n");
                rc = -ENOMEM;
                goto error;
        }
+
+       mdio_priv->base = (unsigned long)map;
+
        mdio_priv->base = (unsigned long)map;
+       field = of_get_property(np, "mdio-clock-offset", NULL);
+
+       if (field)
+               mdio_offset = ntohl(field[0]);
+
+       field = of_get_property(np, "mdio-clock-period", NULL);
+
+       if (field)
+               mdio_period = ntohl(field[0]);
+
+       if (0 != mdio_offset && 0 != mdio_period)
+               acp_mdio_initialize(mdio_offset, mdio_period);
 
-       acp_mdio_initialize();
 error:
        return rc;
 }
@@ -331,5 +345,5 @@ error:
 module_init(acp_mdio_init);
 
 MODULE_AUTHOR("LSI Corporation");
-MODULE_DESCRIPTION("Timing Test");
+MODULE_DESCRIPTION("MDIO Access");
 MODULE_LICENSE("GPL");
-- 
1.8.1.4

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to