Index: trunk/modules/vci_mem_cache_v3/caba/source/include/vci_mem_cache_v3.h
===================================================================
--- trunk/modules/vci_mem_cache_v3/caba/source/include/vci_mem_cache_v3.h	(revision 57)
+++ trunk/modules/vci_mem_cache_v3/caba/source/include/vci_mem_cache_v3.h	(revision 82)
@@ -61,5 +61,4 @@
 #define TRANSACTION_TAB_LINES 4     // Number of lines in the transaction tab
 #define UPDATE_TAB_LINES 4          // Number of lines in the update tab
-#define BROADCAST_ADDR 0x0000000003 // Address to send the broadcast invalidate
 
 namespace soclib {  namespace caba {
@@ -362,4 +361,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_v3/caba/source/src/vci_mem_cache_v3.cpp
===================================================================
--- trunk/modules/vci_mem_cache_v3/caba/source/src/vci_mem_cache_v3.cpp	(revision 57)
+++ trunk/modules/vci_mem_cache_v3/caba/source/src/vci_mem_cache_v3.cpp	(revision 82)
@@ -325,4 +325,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 
@@ -2358,5 +2360,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) {
 
@@ -4337,5 +4339,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;
@@ -4421,5 +4423,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);
@@ -4431,5 +4433,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);
@@ -4476,5 +4478,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);
@@ -4549,5 +4551,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;
