Index: /trunk/modules/vci_cc_vcache_wrapper2_v1/caba/source/src/vci_cc_vcache_wrapper2_v1.cpp
===================================================================
--- /trunk/modules/vci_cc_vcache_wrapper2_v1/caba/source/src/vci_cc_vcache_wrapper2_v1.cpp	(revision 71)
+++ /trunk/modules/vci_cc_vcache_wrapper2_v1/caba/source/src/vci_cc_vcache_wrapper2_v1.cpp	(revision 72)
@@ -4119,5 +4119,5 @@
             {
                 // data TLB flush 
-                dcache_tlb.flush(true);      // global entries are not invalidated
+                dcache_tlb.flush(true);      // global entries are invalidated
             	r_dtlb_translation_valid = false;
             	r_dcache_ptba_ok = false;
@@ -4379,10 +4379,7 @@
                 r_dcache_cleanup_line = victim_index;
 		m_cpt_cc_cleanup_data++;
-		if ( r_dcache_in_itlb[m_dcache_sets*way+set] || r_dcache_in_dtlb[m_dcache_sets*way+set] )
-		{
-		    r_dcache_fsm = DCACHE_TLB_CC_INVAL;
-                    r_dcache_fsm_save = r_dcache_fsm;
-		    break;
-		}
+		r_dcache_fsm = DCACHE_TLB_CC_INVAL;
+                r_dcache_fsm_save = r_dcache_fsm;
+		break;
 	    }
 	    m_cpt_dcache_dir_write++;
@@ -4596,10 +4593,7 @@
                 r_dcache_cleanup_line = victim_index;
 		m_cpt_cc_cleanup_data++;
-		if ( r_dcache_in_itlb[m_dcache_sets*way+set] || r_dcache_in_dtlb[m_dcache_sets*way+set] )
-		{
-		    r_dcache_fsm = DCACHE_TLB_CC_INVAL;
-                    r_dcache_fsm_save = r_dcache_fsm;
-		    break;
-		}
+		r_dcache_fsm = DCACHE_TLB_CC_INVAL;
+                r_dcache_fsm_save = r_dcache_fsm;
+		break;
 	    }
 
@@ -4743,6 +4737,5 @@
            ( (r_dcache_paddr_save.read() & ~((m_dcache_words<<2)-1)) == (r_tgt_addr.read() & ~((m_dcache_words<<2)-1)))) 
         || (( ( r_dcache_fsm_save == DCACHE_TLB1_READ )      || ( r_dcache_fsm_save == DCACHE_TLB2_READ )      ||
-	     ( r_dcache_fsm_save == DCACHE_TLB1_READ_UPDT ) || ( r_dcache_fsm_save == DCACHE_TLB2_READ_UPDT ) ||
-             ( r_dcache_fsm_save == DCACHE_TLB1_UPDT )      || ( r_dcache_fsm_save == DCACHE_TLB2_UPDT )	 /* ||
+	     ( r_dcache_fsm_save == DCACHE_TLB1_READ_UPDT ) || ( r_dcache_fsm_save == DCACHE_TLB2_READ_UPDT) /* ||
 	     ( r_dcache_fsm_save == DCACHE_TLB1_LL_WAIT )   || ( r_dcache_fsm_save == DCACHE_TLB2_LL_WAIT )   ||
 	     ( r_dcache_fsm_save == DCACHE_TLB1_SC_WAIT )   || ( r_dcache_fsm_save == DCACHE_TLB2_SC_WAIT )   ||
@@ -4781,4 +4774,9 @@
             if ( dcache_hit )
             {
+		if (((r_dcache_tlb_paddr.read() & ~((m_dcache_words<<2)-1)) ==
+		     (r_tgt_addr.read() & ~((m_dcache_words<<2)-1))) &&
+		    (r_dcache_fsm_save == DCACHE_TLB1_UPDT ||
+		     r_dcache_fsm_save == DCACHE_TLB2_UPDT))
+			r_dcache_inval_rsp = true;
                 if ( r_dcache_in_dtlb[m_dcache_sets*way+set] || r_dcache_in_itlb[m_dcache_sets*way+set] )
                 {
