[linux-yocto] [PATCH 153/161] arch/powerpc: Fix Up the MDIO Offset and Period on Axxia
Cristian Bercaru
cristian.bercaru at windriver.com
Thu May 21 12:22:15 PDT 2015
From: John Jacques <john.jacques at 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.jacques at lsi.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield at windriver.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.7.9.5
More information about the linux-yocto
mailing list