aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch')
-rw-r--r--recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch b/recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch
new file mode 100644
index 0000000000..8b3894bc3f
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/omap3evm/0005-SMC911x-driver-fixed-for-NFS-boot.patch
@@ -0,0 +1,61 @@
+From 3ffa2549a4f61053f78c00b8716cda392cf97b93 Mon Sep 17 00:00:00 2001
+From: Manikandan Pillai <mani.pillai@ti.com>
+Date: Wed, 8 Apr 2009 09:08:00 +0530
+Subject: [PATCH 05/16] SMC911x driver fixed for NFS boot
+
+eth_halt() function in the smc911x drivers used to call the
+smc911x_reset() function. eth_halt() used to be called after
+tftp transfers. This used to put the ethernet chip in reset
+while the linux boots up resulting in the ethernet driver
+not coming up. NFS boot used to fail as a result.
+
+This patch calls smc911x_shutdown() instead of smc911x_reset().
+Some comments received has also been fixed.
+---
+ drivers/net/smc911x.c | 23 ++++++++++++++++++++++-
+ 1 files changed, 22 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
+index 1ded8f0..5bc3914 100644
+--- a/drivers/net/smc911x.c
++++ b/drivers/net/smc911x.c
+@@ -116,6 +116,27 @@ static int smc911x_phy_reset(void)
+ return 0;
+ }
+
++static void smc911x_shutdown(void)
++{
++ unsigned int cr;
++
++ /* Turn of Rx and TX */
++ cr = smc911x_get_mac_csr(MAC_CR);
++ cr &= ~(MAC_CR_TXEN | MAC_CR_RXEN | MAC_CR_HBDIS);
++ smc911x_set_mac_csr(MAC_CR, cr);
++
++ /* Stop Transmission */
++ cr = smc911x_get_mac_csr(TX_CFG);
++ cr &= ~(TX_CFG_STOP_TX);
++ smc911x_set_mac_csr(TX_CFG, cr);
++ /* Stop receiving packets */
++ cr = smc911x_get_mac_csr(RX_CFG);
++ cr &= ~(RX_CFG_RXDOFF);
++ smc911x_set_mac_csr(RX_CFG, cr);
++
++}
++
++
+ static void smc911x_phy_configure(void)
+ {
+ int timeout;
+@@ -224,7 +245,7 @@ int eth_send(volatile void *packet, int length)
+
+ void eth_halt(void)
+ {
+- smc911x_reset();
++ smc911x_shutdown();
+ }
+
+ int eth_rx(void)
+--
+1.6.2.4
+