VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / arch / sh / mm / cache-sh3.c
index cb6c0c0..b03d5e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: cache-sh3.c,v 1.8 2004/02/01 16:26:27 lethal Exp $
+/* $Id: cache-sh3.c,v 1.9 2004/05/02 01:46:30 sugioka Exp $
  *
  *  linux/arch/sh/mm/cache-sh3.c
  *
@@ -65,14 +65,14 @@ int __init detect_cpu_and_cache_system(void)
         * 2K(direct) 7702 is not supported (yet)
         */
        if (data0 == data1 && data2 == data3) { /* Shadow */
-               cpu_data->dcache.way_shift      = 11;
+               cpu_data->dcache.way_incr       = (1 << 11);
                cpu_data->dcache.entry_mask     = 0x7f0;
                cpu_data->dcache.sets           = 128;
                cpu_data->type = CPU_SH7708;
 
-               set_bit(CPU_HAS_MMU_PAGE_ASSOC, &(cpu_data->flags));
+               cpu_data->flags |= CPU_HAS_MMU_PAGE_ASSOC;
        } else {                                /* 7709A or 7729  */
-               cpu_data->dcache.way_shift      = 12;
+               cpu_data->dcache.way_incr       = (1 << 12);
                cpu_data->dcache.entry_mask     = 0xff0;
                cpu_data->dcache.sets           = 256;
                cpu_data->type = CPU_SH7729;
@@ -108,13 +108,12 @@ void __flush_wback_region(void *start, int size)
                & ~(L1_CACHE_BYTES-1);
 
        for (v = begin; v < end; v+=L1_CACHE_BYTES) {
+               unsigned long addrstart = CACHE_OC_ADDRESS_ARRAY;
                for (j = 0; j < cpu_data->dcache.ways; j++) {
                        unsigned long data, addr, p;
 
                        p = __pa(v);
-                       addr = CACHE_OC_ADDRESS_ARRAY |
-                               (j << cpu_data->dcache.way_shift)|
-                               (v & cpu_data->dcache.entry_mask);
+                       addr = addrstart | (v & cpu_data->dcache.entry_mask);
                        local_irq_save(flags);
                        data = ctrl_inl(addr);
                        
@@ -126,6 +125,7 @@ void __flush_wback_region(void *start, int size)
                                break;
                        }
                        local_irq_restore(flags);
+                       addrstart += cpu_data->dcache.way_incr;
                }
        }
 }