Ignore:
Timestamp:
Sep 2, 2010, 2:22:12 PM (14 years ago)
Author:
guthmull
Message:

Add broadcast limitation compatibility, indicate the type of response when possible

File:
1 edited

Legend:

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

    r2 r82  
    434434
    435435                    // multi-update or multi-invalidate for data type
    436                     if ( (address != 0x3) && (! m_segment.contains(address)) )
     436                    if ( ((address&0x3) != 0x3) && (! m_segment.contains(address)) )
    437437                    {
    438438                        std::cout << "error in component VCI_CC_XCACHE_WRAPPER " << name() << std::endl;
     
    448448                    r_tgt_plen  = p_vci_tgt.plen.read();
    449449                   
    450                     if ( address == 0x3 )   // broadcast invalidate for data or instruction type
     450                    if ( (address&0x3) == 0x3 )   // broadcast invalidate for data or instruction type
    451451                    {
    452452                        if ( ! p_vci_tgt.eop.read() )
     
    14871487                    r_vci_rsp_fsm = RSP_IDLE;
    14881488                }
    1489                 if ( p_vci_ini_rw.rerror.read() != vci_param::ERR_NORMAL ) r_vci_rsp_ins_error = true;
     1489                if ( (p_vci_ini_rw.rerror.read()&0x1) != vci_param::ERR_NORMAL ) r_vci_rsp_ins_error = true;
    14901490                break;
    14911491
     
    14991499                r_vci_rsp_fsm = RSP_IDLE;
    15001500                r_icache_unc_req = false;
    1501                 if ( p_vci_ini_rw.rerror.read() != vci_param::ERR_NORMAL ) r_vci_rsp_ins_error = true;
     1501                if ( (p_vci_ini_rw.rerror.read()&0x1) != vci_param::ERR_NORMAL ) r_vci_rsp_ins_error = true;
    15021502                break;
    15031503
     
    15161516                    r_vci_rsp_fsm = RSP_IDLE;
    15171517                }
    1518                 if ( p_vci_ini_rw.rerror.read() != vci_param::ERR_NORMAL ) r_vci_rsp_data_error = true;
     1518                if ( (p_vci_ini_rw.rerror.read()&0x1) != vci_param::ERR_NORMAL ) r_vci_rsp_data_error = true;
    15191519                break;
    15201520
     
    15271527                    r_dcache_write_req = false;
    15281528                }
    1529                 if ( p_vci_ini_rw.rerror.read() != vci_param::ERR_NORMAL ) m_iss.setWriteBerr();
     1529                if ( (p_vci_ini_rw.rerror.read()&0x1) != vci_param::ERR_NORMAL ) m_iss.setWriteBerr();
    15301530                break;
    15311531
     
    15391539                r_vci_rsp_fsm = RSP_IDLE;
    15401540                r_dcache_unc_req = false;
    1541                 if ( p_vci_ini_rw.rerror.read() != vci_param::ERR_NORMAL ) r_vci_rsp_data_error = true;
     1541                if ( (p_vci_ini_rw.rerror.read()&0x1) != vci_param::ERR_NORMAL ) r_vci_rsp_data_error = true;
    15421542                break;
    15431543
     
    15481548                assert( p_vci_ini_c.reop.read() &&
    15491549                        "illegal VCI response packet for icache cleanup");
    1550                 assert( (p_vci_ini_c.rerror.read() == vci_param::ERR_NORMAL) &&
     1550                assert( ((p_vci_ini_c.rerror.read()&0x1) == vci_param::ERR_NORMAL) &&
    15511551                        "error in response packet for icache cleanup");
    15521552                if ( r_vci_rsp_fsm == RSP_INS_CLEANUP ) r_icache_cleanup_req = false;
     
    18871887                p_vci_tgt.rtrdid  = r_tgt_trdid.read();
    18881888                p_vci_tgt.rdata   = 0;
    1889                 p_vci_tgt.rerror  = 0;
     1889                p_vci_tgt.rerror  = 0x2 & ( (1 << (vci_param::E + 1)) - 1); // Write OK
    18901890                p_vci_tgt.reop    = true;
    18911891                break;
     
    18981898                p_vci_tgt.rtrdid  = r_tgt_trdid.read();
    18991899                p_vci_tgt.rdata   = 0;
    1900                 p_vci_tgt.rerror  = 0;
     1900                p_vci_tgt.rerror  = 0x2 & ( (1 << (vci_param::E + 1)) - 1); // Write OK
    19011901                p_vci_tgt.reop    = true;
    19021902                break;
     
    19091909                p_vci_tgt.rtrdid  = r_tgt_trdid.read();
    19101910                p_vci_tgt.rdata   = 0;
    1911                 p_vci_tgt.rerror  = 0;
     1911                p_vci_tgt.rerror  = 0x2 & ( (1 << (vci_param::E + 1)) - 1); // Write OK
    19121912                p_vci_tgt.reop    = true;
    19131913                break;
Note: See TracChangeset for help on using the changeset viewer.