Index: trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h
===================================================================
--- trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h	(revision 57)
+++ trunk/modules/vci_mem_cache_v4/caba/source/include/vci_mem_cache_v4.h	(revision 82)
@@ -354,4 +354,7 @@
       const soclib::common::AddressMaskingTable<vci_addr_t>   m_nline; 
 
+      // broadcast address
+      vci_addr_t broadcast_addr;
+
       //////////////////////////////////////////////////
       // Others registers
Index: trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp
===================================================================
--- trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp	(revision 57)
+++ trunk/modules/vci_mem_cache_v4/caba/source/src/vci_mem_cache_v4.cpp	(revision 82)
@@ -321,4 +321,6 @@
       assert(nways <= 32);
 
+      // Set the broadcast address with Xmin,Xmax,Ymin,Ymax set to maximum
+      broadcast_addr = 0x3 | (0x7C1F << (vci_param::N-20));
 
       // Get the segments associated to the MemCache 
@@ -2324,5 +2326,5 @@
             }
             if ( (p_vci_tgt_cleanup.cmd.read() == vci_param::CMD_WRITE) &&
-                (((addr_t)(p_vci_tgt_cleanup.address.read())) != BROADCAST_ADDR) &&
+                (((addr_t)(p_vci_tgt_cleanup.address.read())&0x3) != 0x3) &&
                 reached) {
 
@@ -4247,5 +4249,5 @@
         p_vci_tgt.rtrdid   = r_write_to_tgt_rsp_trdid.read();
         p_vci_tgt.rpktid   = r_write_to_tgt_rsp_pktid.read();
-        p_vci_tgt.rerror   = 0;
+        p_vci_tgt.rerror   = 0x2 & ( (1 << (vci_param::E + 1)) - 1); // Write OK
         p_vci_tgt.reop     = true;
         break;
@@ -4256,5 +4258,5 @@
         p_vci_tgt.rtrdid   = r_cleanup_to_tgt_rsp_trdid.read();
         p_vci_tgt.rpktid   = r_cleanup_to_tgt_rsp_pktid.read();
-        p_vci_tgt.rerror   = 0;
+        p_vci_tgt.rerror   = 0; // Can be a SC rsp
         p_vci_tgt.reop     = true;
         break;
@@ -4283,5 +4285,5 @@
         p_vci_tgt.rtrdid   = r_init_rsp_to_tgt_rsp_trdid.read();
         p_vci_tgt.rpktid   = r_init_rsp_to_tgt_rsp_pktid.read();
-        p_vci_tgt.rerror   = 0;
+        p_vci_tgt.rerror   = 0; // Can be a SC rsp
         p_vci_tgt.reop     = true;	
         break;
@@ -4331,5 +4333,5 @@
       case INIT_CMD_XRAM_BRDCAST:
         p_vci_ini.cmdval  = true;
-        p_vci_ini.address = BROADCAST_ADDR;
+        p_vci_ini.address = broadcast_addr;
         p_vci_ini.wdata   = (uint32_t)r_xram_rsp_to_init_cmd_nline.read();
         p_vci_ini.be      = ((r_xram_rsp_to_init_cmd_nline.read() >> 32) & 0x3);
@@ -4341,5 +4343,5 @@
       case INIT_CMD_WRITE_BRDCAST:
         p_vci_ini.cmdval  = true;
-        p_vci_ini.address = BROADCAST_ADDR;
+        p_vci_ini.address = broadcast_addr;
         p_vci_ini.wdata   = (addr_t)r_write_to_init_cmd_nline.read();
         p_vci_ini.be      = ((r_write_to_init_cmd_nline.read() >> 32) & 0x3);
@@ -4396,5 +4398,5 @@
       case INIT_CMD_SC_BRDCAST:
         p_vci_ini.cmdval  = true;
-        p_vci_ini.address = BROADCAST_ADDR;
+        p_vci_ini.address = broadcast_addr;
         p_vci_ini.wdata   = (addr_t)r_llsc_to_init_cmd_nline.read();
         p_vci_ini.be      = ((r_llsc_to_init_cmd_nline.read() >> 32) & 0x3);
@@ -4507,5 +4509,5 @@
           p_vci_tgt_cleanup.rpktid = r_cleanup_pktid.read();
           p_vci_tgt_cleanup.rtrdid = r_cleanup_trdid.read();
-          p_vci_tgt_cleanup.rerror = 0;
+          p_vci_tgt_cleanup.rerror = 0x2 & ( (1 << (vci_param::E + 1)) - 1);
           p_vci_tgt_cleanup.reop   = 1;
           break;
