|
@@ -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();
|