Index: /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp
===================================================================
--- /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp	(revision 217)
+++ /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp	(revision 218)
@@ -1776,6 +1776,6 @@
             r_mmu_ibvar         = m_ireq.addr;
             r_vci_rsp_ins_error = false;
-            m_irsp.valid          = true;
-            m_irsp.error          = true;
+            m_irsp.valid        = true;
+            m_irsp.error        = true;
             r_icache_fsm        = ICACHE_IDLE;
         }
@@ -3650,5 +3650,4 @@
             r_dcache_tlb_inval_line  = nline;
             r_dcache_tlb_inval_count = 0;
-            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
             r_dcache_fsm_scan_save   = DCACHE_MISS_WAIT;
             r_dcache_in_tlb[way*m_dcache_sets+set] = false;
@@ -4165,34 +4164,35 @@
         paddr_t  nline	    = r_tgt_paddr.read() >> (uint32_log2(m_dcache_words)+2);
 
-        r_dcache.write( way,
-                        set,
-                        word,
-                        r_tgt_buf[word],
-                        r_tgt_be[word] );
+        // possible itlb & dtlb invalidate 
+        if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) 		// selective inval
+        {
+            r_dcache_tlb_inval_line  = nline;
+            r_dcache_tlb_inval_count = 0;
+            r_dcache_fsm_scan_save   = r_dcache_fsm.read();
+            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
+        }
+        else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) 	// flush
+        {
+            r_itlb.reset();
+            r_dtlb.reset();
+            r_tgt_dcache_rsp = true;
+            r_tgt_dcache_req = false;
+            r_dcache_fsm     = r_dcache_fsm_cc_save.read();
+            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+        }
+        else							// no inval
+        {
+            r_dcache.write( way,
+                            set,
+                            word,
+                            r_tgt_buf[word],
+                            r_tgt_be[word] );
 #ifdef INSTRUMENTATION
 m_cpt_dcache_data_write++;
 #endif
-        r_dcache_cc_word = word + 1;
-
-        if ( word == r_tgt_word_max.read() )	// last word
-        {
-            // possible itlb & dtlb invalidate 
-            if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) 		// selective inval
-            {
-                r_dcache_tlb_inval_line  = nline;
-                r_dcache_tlb_inval_count = 0;
-                r_dcache_fsm_scan_save   = r_dcache_fsm.read();
-                r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
-                r_dcache_in_tlb[way*m_dcache_sets+set] = false;
-            }
-            else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) 	// flush
-            {
-                r_itlb.reset();
-                r_dtlb.reset();
-                r_tgt_dcache_rsp = true;
-                r_tgt_dcache_req = false;
-                r_dcache_fsm     = r_dcache_fsm_cc_save.read();
-            }
-            else							// no inval
+            r_dcache_cc_word = word + 1;
+
+            if ( word == r_tgt_word_max.read() )	// last word
             {
                 r_tgt_dcache_rsp = true;
