diff --git a/board/lwmon5/sdram.c b/board/lwmon5/sdram.c
index 7c3cf496be7f13cd6eea5b773bc66ba7bb4fec70..36b51007eadba92dc2c156dee05e5ea1f830aba2 100644
--- a/board/lwmon5/sdram.c
+++ b/board/lwmon5/sdram.c
@@ -34,6 +34,7 @@
 #include <asm/processor.h>
 #include <asm/mmu.h>
 #include <asm/io.h>
+#include <asm/cache.h>
 #include <ppc440.h>
 #include <watchdog.h>
 
@@ -59,7 +60,6 @@
 extern int denali_wait_for_dlllock(void);
 extern void denali_core_search_data_eye(void);
 extern void dcbz_area(u32 start_address, u32 num_bytes);
-extern void dflush(void);
 
 static u32 is_ecc_enabled(void)
 {
@@ -106,6 +106,7 @@ static void program_ecc(u32 start_address,
 {
 	u32 val;
 	u32 current_addr = start_address;
+	u32 size;
 	int bytes_remaining;
 
 	sync();
@@ -123,12 +124,18 @@ static void program_ecc(u32 start_address,
 	 * watchdog.
 	 */
 	while (bytes_remaining > 0) {
-		dcbz_area(current_addr, min((64 << 20), bytes_remaining));
+		size = min((64 << 20), bytes_remaining);
+
+		/* Write zero's to SDRAM */
+		dcbz_area(current_addr, size);
+
+		/* Write modified dcache lines back to memory */
+		clean_dcache_range(current_addr, current_addr + size);
+
 		current_addr += 64 << 20;
 		bytes_remaining -= 64 << 20;
 		WATCHDOG_RESET();
 	}
-	dflush();
 
 	sync();
 	wait_ddr_idle();