in mm/proc.c [236:266]
void cpu_dcache_wbinval_page(unsigned long start)
{
unsigned long line_size, end;
line_size = L1_cache_info[DCACHE].line_size;
end = start + PAGE_SIZE;
do {
end -= line_size;
#ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
__asm__ volatile ("\n\tcctl %0, L1D_VA_WB"::"r" (end));
#endif
__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL"::"r" (end));
end -= line_size;
#ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
__asm__ volatile ("\n\tcctl %0, L1D_VA_WB"::"r" (end));
#endif
__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL"::"r" (end));
end -= line_size;
#ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
__asm__ volatile ("\n\tcctl %0, L1D_VA_WB"::"r" (end));
#endif
__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL"::"r" (end));
end -= line_size;
#ifndef CONFIG_CPU_DCACHE_WRITETHROUGH
__asm__ volatile ("\n\tcctl %0, L1D_VA_WB"::"r" (end));
#endif
__asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL"::"r" (end));
} while (end != start);
__nds32__cctlidx_read(NDS32_CCTL_L1D_IX_RWD,0);
}