Ignore:
Timestamp:
Mar 28, 2013, 2:12:01 PM (11 years ago)
Author:
joannou
Message:
  • In vci_cc_vcache_wrapper_dspin_coherence, modified both states DCACHE_TLB_PTE1_GET and DCACHE_TLB_PTE2_GET to take into account the zombi state of a chache line
  • In vci_mem_cache_dspin_coherence, added so traces
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/v5/modules/vci_cc_vcache_wrapper_dspin_coherence/caba/source/src/vci_cc_vcache_wrapper_dspin_coherence.cpp

    r336 r338  
    28612861        size_t          set;
    28622862        size_t          word;
    2863 
    2864         bool     hit = r_dcache.read( r_dcache_tlb_paddr.read(),
    2865                                       &entry,
    2866                                       &way,
    2867                                       &set,
    2868                                       &word );
     2863        int         cache_state;
     2864        r_dcache.read( r_dcache_tlb_paddr.read(),
     2865                       &entry,
     2866                       &way,
     2867                       &set,
     2868                       &word,
     2869                       &cache_state );
    28692870#ifdef INSTRUMENTATION
    28702871m_cpt_dcache_data_read++;
    28712872m_cpt_dcache_dir_read++;
    28722873#endif
    2873         if ( hit )      // hit in dcache
     2874        if ( cache_state == CACHE_SLOT_STATE_VALID )   // hit in dcache
    28742875        {
    28752876            if ( not (entry & PTE_V_MASK) )     // unmapped
     
    29602961#endif
    29612962            }
     2963        }
     2964        else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup
     2965        {
     2966            // stalled until cleanup is acknowledged
     2967            r_dcache_fsm   = DCACHE_TLB_PTE1_GET;
    29622968        }
    29632969        else            // we must load the missing cache line in dcache
     
    31363142        size_t          set;
    31373143        size_t          word;
    3138 
    3139         bool     hit = r_dcache.read( r_dcache_tlb_paddr.read(),
    3140                                       &pte_flags,
    3141                                       &pte_ppn,
    3142                                       &way,
    3143                                       &set,
    3144                                       &word );
     3144        int         cache_state;
     3145
     3146        r_dcache.read( r_dcache_tlb_paddr.read(),
     3147                       &pte_flags,
     3148                       &pte_ppn,
     3149                       &way,
     3150                       &set,
     3151                       &word,
     3152                       &cache_state );
    31453153#ifdef INSTRUMENTATION
    31463154m_cpt_dcache_data_read++;
    31473155m_cpt_dcache_dir_read++;
    31483156#endif
    3149         if ( hit )      // request hits in dcache
     3157        if ( cache_state == CACHE_SLOT_STATE_VALID )   // hit in dcache
    31503158        {
    31513159            if ( not (pte_flags & PTE_V_MASK) ) // unmapped
     
    31623170                    r_mmu_detr             = MMU_READ_PT2_UNMAPPED;
    31633171                    r_mmu_dbvar            = r_dcache_tlb_vaddr.read();
    3164                     m_drsp.valid             = true;
    3165                     m_drsp.error             = true;
     3172                    m_drsp.valid           = true;
     3173                    m_drsp.error           = true;
    31663174                }
    3167                 r_dcache_fsm          = DCACHE_IDLE;
     3175                r_dcache_fsm               = DCACHE_IDLE;
    31683176
    31693177#if DEBUG_DCACHE
     
    31963204#endif
    31973205             }
     3206        }
     3207        else if ( cache_state == CACHE_SLOT_STATE_ZOMBI ) // pending cleanup
     3208        {
     3209            // stalled until cleanup is acknowledged
     3210            r_dcache_fsm   = DCACHE_TLB_PTE2_GET;
    31983211        }
    31993212        else            // we must load the missing cache line in dcache
Note: See TracChangeset for help on using the changeset viewer.