* The PS/2 mux on the BMS2003 board needs 450 ms after power on
  before we can access it; add delay in case we are faster (with no
  CF card inserted)

* Cleanup of some init functions

* Make sure SCC Ethernet is always stopped by the time we boot Linux
  to avoid Linux crashes by early packets coming in.

* Accelerate flash accesses on LWMON board by using buffered writes
diff --git a/post/ether.c b/post/ether.c
index 0a8b36f..b041a43 100644
--- a/post/ether.c
+++ b/post/ether.c
@@ -70,6 +70,7 @@
 
 static struct {
 	void (*init) (int index);
+	void (*halt) (int index);
 	int (*send) (int index, volatile void *packet, int length);
 	int (*recv) (int index, void *packet, int length);
 } ctlr_proc[1];
@@ -77,7 +78,6 @@
 static char *ctlr_name[1] = { "SCC" };
 
 static int used_by_uart[1] = { -1 };
-static int used_by_ether[1] = { -1 };
 
 /* Ethernet Transmit and Receive Buffers */
 #define DBUF_LENGTH  1520
@@ -452,6 +452,14 @@
 #endif
 }
 
+static void scc_halt (int scc_index)
+{
+	volatile immap_t *immr = (immap_t *) CFG_IMMR;
+
+	immr->im_cpm.cp_scc[scc_index].scc_gsmrl &=
+			~(SCC_GSMRL_ENR | SCC_GSMRL_ENT);
+}
+
 static int scc_send (int index, volatile void *packet, int length)
 {
 	int i, j = 0;
@@ -573,20 +581,14 @@
 
   Done:
 
+	ctlr_proc[ctlr].halt (index);
+
 #if !defined(CONFIG_8xx_CONS_NONE)
 	if (used_by_uart[ctlr] == index) {
 		serial_init ();
 	}
 #endif
 
-#if defined(SCC_ENET)
-	if (used_by_ether[ctlr] == index) {
-		DECLARE_GLOBAL_DATA_PTR;
-
-		eth_init (gd->bd);
-	}
-#endif
-
 	/*
 	 * SCC2 Ethernet parameter RAM space overlaps
 	 * the SPI parameter RAM space. So we need to restore
@@ -622,11 +624,8 @@
 	used_by_uart[CTLR_SCC] = 3;
 #endif
 
-#if defined(SCC_ENET)
-	used_by_ether[CTLR_SCC] = SCC_ENET;
-#endif
-
 	ctlr_proc[CTLR_SCC].init = scc_init;
+	ctlr_proc[CTLR_SCC].halt = scc_halt;
 	ctlr_proc[CTLR_SCC].send = scc_send;
 	ctlr_proc[CTLR_SCC].recv = scc_recv;
 
diff --git a/post/uart.c b/post/uart.c
index 15df74e..f6936ca 100644
--- a/post/uart.c
+++ b/post/uart.c
@@ -72,17 +72,14 @@
 static char *ctlr_name[2] = { "SMC", "SCC" };
 
 static int used_by_uart[2] = { -1, -1 };
-#if defined(SCC_ENET)
-static int used_by_ether[2] = { -1, -1 };
-#endif
 
 static int proff_smc[] = { PROFF_SMC1, PROFF_SMC2 };
 static int proff_scc[] =
 		{ PROFF_SCC1, PROFF_SCC2, PROFF_SCC3, PROFF_SCC4 };
 
-  /*
-   * SMC callbacks
-   */
+/*
+ * SMC callbacks
+ */
 
 static void smc_init (int smc_index)
 {
@@ -523,14 +520,6 @@
 	}
 #endif
 
-#if defined(SCC_ENET)
-	if (used_by_ether[ctlr] == index) {
-		DECLARE_GLOBAL_DATA_PTR;
-
-		eth_init (gd->bd);
-	}
-#endif
-
 	if (res != 0) {
 		post_log ("uart %s%d test failed\n",
 				ctlr_name[ctlr], index + 1);
@@ -558,10 +547,6 @@
 	used_by_uart[CTLR_SCC] = 3;
 #endif
 
-#if defined(SCC_ENET)
-	used_by_ether[CTLR_SCC] = SCC_ENET;
-#endif
-
 	ctlr_proc[CTLR_SMC].init = smc_init;
 	ctlr_proc[CTLR_SMC].putc = smc_putc;
 	ctlr_proc[CTLR_SMC].getc = smc_getc;