Changeset 218 for trunk/modules


Ignore:
Timestamp:
Mar 23, 2012, 8:43:55 PM (13 years ago)
Author:
alain
Message:
 
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  
    17761776            r_mmu_ibvar         = m_ireq.addr;
    17771777            r_vci_rsp_ins_error = false;
    1778             m_irsp.valid          = true;
    1779             m_irsp.error          = true;
     1778            m_irsp.valid        = true;
     1779            m_irsp.error        = true;
    17801780            r_icache_fsm        = ICACHE_IDLE;
    17811781        }
     
    36503650            r_dcache_tlb_inval_line  = nline;
    36513651            r_dcache_tlb_inval_count = 0;
    3652             r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
    36533652            r_dcache_fsm_scan_save   = DCACHE_MISS_WAIT;
    36543653            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
     
    41654164        paddr_t  nline      = r_tgt_paddr.read() >> (uint32_log2(m_dcache_words)+2);
    41664165
    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] );
    41724191#ifdef INSTRUMENTATION
    41734192m_cpt_dcache_data_write++;
    41744193#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
    41974197            {
    41984198                r_tgt_dcache_rsp = true;
Note: See TracChangeset for help on using the changeset viewer.