Ignore:
Timestamp:
Apr 30, 2013, 4:18:33 PM (11 years ago)
Author:
joannou
Message:

Bugfix in vci_cc_vcache_wrapper :

  • Made cache flush states interruptible by coherence request to avoid potential deadlock situations
  • Fixed the cc_send_nline values sent for a cleanup in cache flush states by adding the set value
  • Also changed DCACHE_DIRTY_PTE_GET to DCACHE_DIRTY_GET_PTE (display purposes only)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_cc_vcache_wrapper/caba/source/src/vci_cc_vcache_wrapper.cpp

    r383 r384  
    9696        "DCACHE_XTN_DT_INVAL",
    9797
    98         "DCACHE_DIRTY_PTE_GET",
     98        "DCACHE_DIRTY_GET_PTE",
    9999        "DCACHE_DIRTY_WAIT",
    100100
     
    12301230                                        // A cleanup request is generated for each valid line
    12311231    {
     1232        // coherence request (from CC_RECEIVE FSM)
     1233        if ( r_cc_receive_icache_req.read() )
     1234        {
     1235            r_icache_fsm = ICACHE_CC_CHECK;
     1236            r_icache_fsm_save = r_icache_fsm.read();
     1237            break;
     1238        }
     1239
    12321240        if ( not r_icache_cc_send_req.read() ) // blocked until previous cc_send request is sent
    12331241        {
     
    12491257                // request cleanup
    12501258                r_icache_cc_send_req   = true;
    1251                 r_icache_cc_send_nline = tag * m_icache_sets;
     1259                r_icache_cc_send_nline = tag * m_icache_sets + set;
    12521260                r_icache_cc_send_way   = way;
    12531261                r_icache_cc_send_type  = CC_TYPE_CLEANUP;
     
    35413549                                // returns to IDLE and flush TLBs when last slot
    35423550    {
     3551        // coherence request (from CC_RECEIVE FSM)
     3552        if ( r_cc_receive_dcache_req.read() )
     3553        {
     3554            r_dcache_fsm = DCACHE_CC_CHECK;
     3555            r_dcache_fsm_cc_save = r_dcache_fsm.read();
     3556            break;
     3557        }
     3558
    35433559        if ( not r_dcache_cc_send_req.read() ) // blocked until previous cc_send request is sent
    35443560        {
     
    35603576                // request cleanup
    35613577                r_dcache_cc_send_req   = true;
    3562                 r_dcache_cc_send_nline = tag * m_dcache_sets;
     3578                r_dcache_cc_send_nline = tag * m_dcache_sets + set;
    35633579                r_dcache_cc_send_way   = way;
    35643580                r_dcache_cc_send_type  = CC_TYPE_CLEANUP;
Note: See TracChangeset for help on using the changeset viewer.