[linux-yocto] [PATCH 10/15] axxia: Use the Device Tree for MDIO Clock Offset/Period if Provided
Charlie Paul
cpaul.windriver at gmail.com
Mon Apr 28 17:13:45 PDT 2014
From: John Jacques <john.jacques at lsi.com>
Updated the device trees to suppor the MDIO Clock offset
Signed-off-by: John Jacques <john.jacques at lsi.com>
---
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
More information about the linux-yocto
mailing list