[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