- Timestamp:
- Mar 23, 2012, 8:43:55 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp
r217 r218 1776 1776 r_mmu_ibvar = m_ireq.addr; 1777 1777 r_vci_rsp_ins_error = false; 1778 m_irsp.valid 1779 m_irsp.error 1778 m_irsp.valid = true; 1779 m_irsp.error = true; 1780 1780 r_icache_fsm = ICACHE_IDLE; 1781 1781 } … … 3650 3650 r_dcache_tlb_inval_line = nline; 3651 3651 r_dcache_tlb_inval_count = 0; 3652 r_dcache_fsm = DCACHE_INVAL_TLB_SCAN;3653 3652 r_dcache_fsm_scan_save = DCACHE_MISS_WAIT; 3654 3653 r_dcache_in_tlb[way*m_dcache_sets+set] = false; … … 4165 4164 paddr_t nline = r_tgt_paddr.read() >> (uint32_log2(m_dcache_words)+2); 4166 4165 4167 r_dcache.write( way, 4168 set, 4169 word, 4170 r_tgt_buf[word], 4171 r_tgt_be[word] ); 4166 // possible itlb & dtlb invalidate 4167 if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) // selective inval 4168 { 4169 r_dcache_tlb_inval_line = nline; 4170 r_dcache_tlb_inval_count = 0; 4171 r_dcache_fsm_scan_save = r_dcache_fsm.read(); 4172 r_dcache_fsm = DCACHE_INVAL_TLB_SCAN; 4173 r_dcache_in_tlb[way*m_dcache_sets+set] = false; 4174 } 4175 else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // flush 4176 { 4177 r_itlb.reset(); 4178 r_dtlb.reset(); 4179 r_tgt_dcache_rsp = true; 4180 r_tgt_dcache_req = false; 4181 r_dcache_fsm = r_dcache_fsm_cc_save.read(); 4182 r_dcache_contains_ptd[way*m_dcache_sets+set] = false; 4183 } 4184 else // no inval 4185 { 4186 r_dcache.write( way, 4187 set, 4188 word, 4189 r_tgt_buf[word], 4190 r_tgt_be[word] ); 4172 4191 #ifdef INSTRUMENTATION 4173 4192 m_cpt_dcache_data_write++; 4174 4193 #endif 4175 r_dcache_cc_word = word + 1; 4176 4177 if ( word == r_tgt_word_max.read() ) // last word 4178 { 4179 // possible itlb & dtlb invalidate 4180 if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) // selective inval 4181 { 4182 r_dcache_tlb_inval_line = nline; 4183 r_dcache_tlb_inval_count = 0; 4184 r_dcache_fsm_scan_save = r_dcache_fsm.read(); 4185 r_dcache_fsm = DCACHE_INVAL_TLB_SCAN; 4186 r_dcache_in_tlb[way*m_dcache_sets+set] = false; 4187 } 4188 else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // flush 4189 { 4190 r_itlb.reset(); 4191 r_dtlb.reset(); 4192 r_tgt_dcache_rsp = true; 4193 r_tgt_dcache_req = false; 4194 r_dcache_fsm = r_dcache_fsm_cc_save.read(); 4195 } 4196 else // no inval 4194 r_dcache_cc_word = word + 1; 4195 4196 if ( word == r_tgt_word_max.read() ) // last word 4197 4197 { 4198 4198 r_tgt_dcache_rsp = true;
Note: See TracChangeset
for help on using the changeset viewer.