From: John Jacques <[email protected]> Updated the device trees to suppor the MDIO Clock offset
Signed-off-by: John Jacques <[email protected]> --- arch/arm/boot/dts/axm5504-emu.dts | 2 ++ arch/arm/boot/dts/axm5507-emu.dts | 2 ++ arch/arm/boot/dts/axm5516-amarillo.dts | 2 ++ arch/powerpc/boot/dts/acp25xx.dts | 3 +++ arch/powerpc/boot/dts/acp342x.dts | 3 +++ arch/powerpc/boot/dts/acp344x.dts | 3 +++ arch/powerpc/boot/dts/acp35xx.dts | 3 +++ drivers/net/ethernet/lsi/lsi_acp_mdio.c | 33 ++++++++++++++++++++----------- 8 files changed, 40 insertions(+), 11 deletions(-) diff --git a/arch/arm/boot/dts/axm5504-emu.dts b/arch/arm/boot/dts/axm5504-emu.dts index 0d7ca8f..2b13386 100644 --- a/arch/arm/boot/dts/axm5504-emu.dts +++ b/arch/arm/boot/dts/axm5504-emu.dts @@ -29,6 +29,8 @@ &femac { status = "okay"; phy-address = <0x03>; + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; }; &serial0 { diff --git a/arch/arm/boot/dts/axm5507-emu.dts b/arch/arm/boot/dts/axm5507-emu.dts index 8de0b23..ed0bf10 100644 --- a/arch/arm/boot/dts/axm5507-emu.dts +++ b/arch/arm/boot/dts/axm5507-emu.dts @@ -29,6 +29,8 @@ &femac { status = "okay"; phy-address = <0x03>; + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; }; &serial0 { diff --git a/arch/arm/boot/dts/axm5516-amarillo.dts b/arch/arm/boot/dts/axm5516-amarillo.dts index a802b52..aabc839 100644 --- a/arch/arm/boot/dts/axm5516-amarillo.dts +++ b/arch/arm/boot/dts/axm5516-amarillo.dts @@ -28,6 +28,8 @@ &femac { status = "okay"; + mdio-clock-offset = <0x1c>; + mdio-clock-period = <0xf0>; }; &pcie0 { diff --git a/arch/powerpc/boot/dts/acp25xx.dts b/arch/powerpc/boot/dts/acp25xx.dts index ad9dfe8..e089692 100644 --- a/arch/powerpc/boot/dts/acp25xx.dts +++ b/arch/powerpc/boot/dts/acp25xx.dts @@ -178,6 +178,9 @@ // The following will get filled in by // the boot loader. mdio-clock = <0>; + // Not filled in by U-Boot + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; phy-address = <0>; ad-value = <0>; mac-address = [00 00 00 00 00 00]; diff --git a/arch/powerpc/boot/dts/acp342x.dts b/arch/powerpc/boot/dts/acp342x.dts index f947d3b..cbc934f 100644 --- a/arch/powerpc/boot/dts/acp342x.dts +++ b/arch/powerpc/boot/dts/acp342x.dts @@ -175,6 +175,9 @@ // The following will get filled in by // the boot loader. mdio-clock = <0>; + // Not filled in by U-Boot + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; phy-address = <0>; ad-value = <0>; mac-address = [00 00 00 00 00 00]; diff --git a/arch/powerpc/boot/dts/acp344x.dts b/arch/powerpc/boot/dts/acp344x.dts index 0efd820..6c07b9d 100644 --- a/arch/powerpc/boot/dts/acp344x.dts +++ b/arch/powerpc/boot/dts/acp344x.dts @@ -218,6 +218,9 @@ // The following will get filled in by // the boot loader. mdio-clock = <0>; + // Not filled in by U-Boot + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; phy-address = <0>; ad-value = <0>; mac-address = [00 00 00 00 00 00]; diff --git a/arch/powerpc/boot/dts/acp35xx.dts b/arch/powerpc/boot/dts/acp35xx.dts index 198b41f..b03680b 100644 --- a/arch/powerpc/boot/dts/acp35xx.dts +++ b/arch/powerpc/boot/dts/acp35xx.dts @@ -279,6 +279,9 @@ // The following will get filled in by // the boot loader. mdio-clock = <0>; + // offset and period + mdio-clock-offset = <0x10>; + mdio-clock-period = <0x2c>; phy-address = <0>; ad-value = <0>; mac-address = [00 00 00 00 00 00]; diff --git a/drivers/net/ethernet/lsi/lsi_acp_mdio.c b/drivers/net/ethernet/lsi/lsi_acp_mdio.c index 6427ae0..b11011f 100644 --- a/drivers/net/ethernet/lsi/lsi_acp_mdio.c +++ b/drivers/net/ethernet/lsi/lsi_acp_mdio.c @@ -247,17 +247,12 @@ EXPORT_SYMBOL(acp_mdio_write); /* acp_mdio_initialize */ 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; } /* acp_wrappers_init */ @@ -271,6 +266,8 @@ 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"); @@ -300,6 +297,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; @@ -308,14 +306,27 @@ 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; + 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; } -- 1.7.9.5 -- _______________________________________________ linux-yocto mailing list [email protected] https://lists.yoctoproject.org/listinfo/linux-yocto
