Changeset 221


Ignore:
Timestamp:
Mar 23, 2012, 9:20:48 PM (12 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

    r220 r221  
    41194119        bool hit;
    41204120
    4121         hit = r_dcache.inval( way,
    4122                               set,
    4123                               &nline );
    4124         assert(hit && "CC_INVAL way/set should still be in dcache");
    4125            
    4126         // possible itlb & dtlb invalidate
    4127         if ( r_dcache_in_tlb[way*m_dcache_sets+set] )                   // selective inval
     4121        if ( r_dcache_in_tlb[way*m_dcache_sets+set] )                   // selective TLB inval
    41284122        {
    41294123            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
     
    41334127            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
    41344128        }
    4135         else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )        // flush
    4136         {
    4137             r_itlb.reset();
    4138             r_dtlb.reset();
    4139             r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
     4129        else                                                            // actual cache line inval
     4130        {
     4131            if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )         // TLB flush
     4132            {
     4133                r_itlb.reset();
     4134                r_dtlb.reset();
     4135                r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
     4136            }
    41404137            r_tgt_dcache_rsp = true;
    41414138            r_tgt_dcache_req = false;
    41424139            r_dcache_fsm     = r_dcache_fsm_cc_save.read();
    4143         }
    4144         else                                                            // no inval
    4145         {
    4146             r_tgt_dcache_rsp = true;
    4147             r_tgt_dcache_req = false;
    4148             r_dcache_fsm     = r_dcache_fsm_cc_save.read();
    4149         }
    4150 
     4140 
     4141            hit = r_dcache.inval( way,
     4142                                  set,
     4143                                  &nline );
    41514144#if DEBUG_DCACHE
    41524145if ( m_debug_dcache_fsm )
     
    41584151#endif
    41594152 
     4153            assert(hit && "CC_INVAL way/set should still be in dcache");
     4154        }
    41604155        break;
    41614156    }
     
    41694164        paddr_t  nline      = r_tgt_paddr.read() >> (uint32_log2(m_dcache_words)+2);
    41704165
    4171         // possible itlb & dtlb invalidate
    4172         if ( r_dcache_in_tlb[way*m_dcache_sets+set] )           // selective inval
     4166        if ( r_dcache_in_tlb[way*m_dcache_sets+set] )                   // selective TLB inval
    41734167        {
    41744168            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
     
    41784172            r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
    41794173        }
    4180         else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // flush
    4181         {
    4182             r_itlb.reset();
    4183             r_dtlb.reset();
    4184             r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
    4185             r_tgt_dcache_rsp = true;
    4186             r_tgt_dcache_req = false;
    4187             r_dcache_fsm     = r_dcache_fsm_cc_save.read();
    4188         }
    4189         else                                                    // no inval & no flush
    4190         {
     4174        else                                                            // cache update
     4175        {
     4176            if ( r_dcache_contains_ptd[way*m_dcache_sets+set] )         // TLB flush
     4177            {
     4178                r_itlb.reset();
     4179                r_dtlb.reset();
     4180                r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
     4181            }
     4182
    41914183            r_dcache.write( way,
    41924184                            set,
     
    41984190#endif
    41994191            r_dcache_cc_word = word + 1;
    4200 
    4201             if ( word == r_tgt_word_max.read() )        // last word
    4202             {
    4203                 r_tgt_dcache_rsp = true;
    4204                 r_tgt_dcache_req = false;
    4205                 r_dcache_fsm     = r_dcache_fsm_cc_save.read();
    4206             }
    4207         }
    42084192
    42094193#if DEBUG_DCACHE
     
    42174201}
    42184202#endif
    4219  
     4203            if ( word == r_tgt_word_max.read() )        // last word
     4204            {
     4205                r_tgt_dcache_rsp = true;
     4206                r_tgt_dcache_req = false;
     4207                r_dcache_fsm     = r_dcache_fsm_cc_save.read();
     4208            }
     4209        }
     4210
    42204211        break;
    42214212    }
Note: See TracChangeset for help on using the changeset viewer.