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