[PATCH 1/3] pm9g45: fix Ethernet

Asen Chavdarov Dimov dimov at ronetix.at
Thu Mar 1 11:21:27 EST 2012


Enable PHY, MACB and PIOs clocks.

Signed-off-by: Asen Chavdarov Dimov <dimov at ronetix.at>
---
 arch/arm/boards/pm9g45/init.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/arch/arm/boards/pm9g45/init.c b/arch/arm/boards/pm9g45/init.c
index 480c751..9eba12a 100644
--- a/arch/arm/boards/pm9g45/init.c
+++ b/arch/arm/boards/pm9g45/init.c
@@ -82,6 +82,19 @@ static struct at91_ether_platform_data macb_pdata = {
 	.phy_addr = 0,
 };
 
+static int phy_init(void)
+{
+	/*
+	 * PD2 enables the 50MHz oscillator for Ethernet PHY
+	 * 1 - enable
+	 * 0 - disable
+	 */
+	at91_set_gpio_output(AT91_PIN_PD2, 1);
+	at91_set_gpio_value(AT91_PIN_PD2, 1);
+
+	return 0;
+}
+
 static int pm9g45_mem_init(void)
 {
 	at91_add_device_sdram(128 * 1024 * 1024);
@@ -90,9 +103,27 @@ static int pm9g45_mem_init(void)
 }
 mem_initcall(pm9g45_mem_init);
 
+static const char *periph_clocks[] __initdata = {
+	"pioA_clk",
+	"pioB_clk",
+	"pioC_clk",
+	"pioDE_clk",
+	"macb_clk"
+};
+
 static int pm9g45_devices_init(void)
 {
+	struct clk *clk;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++) {
+		clk = clk_get(NULL, periph_clocks[i]);
+		clk_enable(clk);
+	}
+	phy_init();
+
 	pm_add_device_nand();
+
 	at91_add_device_eth(&macb_pdata);
 
 	devfs_add_partition("nand0", 0x00000, 0x80000, PARTITION_FIXED, "self_raw");
-- 
1.7.4.4




More information about the barebox mailing list