static inline u32 _iwl3945_read_prph(struct iwl3945_priv *priv, u32 reg)
 {
        _iwl3945_write_direct32(priv, HBUS_TARG_PRPH_RADDR, reg | (3 << 24));
+       rmb();
        return _iwl3945_read_direct32(priv, HBUS_TARG_PRPH_RDAT);
 }
 #ifdef CONFIG_IWL3945_DEBUG
 {
        _iwl3945_write_direct32(priv, HBUS_TARG_PRPH_WADDR,
                              ((addr & 0x0000FFFF) | (3 << 24)));
+       wmb();
        _iwl3945_write_direct32(priv, HBUS_TARG_PRPH_WDAT, val);
 }
 #ifdef CONFIG_IWL3945_DEBUG
 static inline u32 iwl3945_read_targ_mem(struct iwl3945_priv *priv, u32 addr)
 {
        iwl3945_write_direct32(priv, HBUS_TARG_MEM_RADDR, addr);
+       rmb();
        return iwl3945_read_direct32(priv, HBUS_TARG_MEM_RDAT);
 }
 
 static inline void iwl3945_write_targ_mem(struct iwl3945_priv *priv, u32 addr, u32 val)
 {
        iwl3945_write_direct32(priv, HBUS_TARG_MEM_WADDR, addr);
+       wmb();
        iwl3945_write_direct32(priv, HBUS_TARG_MEM_WDAT, val);
 }
 
                                          u32 len, u32 *values)
 {
        iwl3945_write_direct32(priv, HBUS_TARG_MEM_WADDR, addr);
+       wmb();
        for (; 0 < len; len -= sizeof(u32), values++)
                iwl3945_write_direct32(priv, HBUS_TARG_MEM_WDAT, *values);
 }
 
 static inline u32 _iwl_read_prph(struct iwl_priv *priv, u32 reg)
 {
        _iwl_write_direct32(priv, HBUS_TARG_PRPH_RADDR, reg | (3 << 24));
+       rmb();
        return _iwl_read_direct32(priv, HBUS_TARG_PRPH_RDAT);
 }
 #ifdef CONFIG_IWLWIFI_DEBUG
 {
        _iwl_write_direct32(priv, HBUS_TARG_PRPH_WADDR,
                              ((addr & 0x0000FFFF) | (3 << 24)));
+       wmb();
        _iwl_write_direct32(priv, HBUS_TARG_PRPH_WDAT, val);
 }
 #ifdef CONFIG_IWLWIFI_DEBUG
 static inline u32 iwl_read_targ_mem(struct iwl_priv *priv, u32 addr)
 {
        iwl_write_direct32(priv, HBUS_TARG_MEM_RADDR, addr);
+       rmb();
        return iwl_read_direct32(priv, HBUS_TARG_MEM_RDAT);
 }
 
 static inline void iwl_write_targ_mem(struct iwl_priv *priv, u32 addr, u32 val)
 {
        iwl_write_direct32(priv, HBUS_TARG_MEM_WADDR, addr);
+       wmb();
        iwl_write_direct32(priv, HBUS_TARG_MEM_WDAT, val);
 }
 
                                          u32 len, u32 *values)
 {
        iwl_write_direct32(priv, HBUS_TARG_MEM_WADDR, addr);
+       wmb();
        for (; 0 < len; len -= sizeof(u32), values++)
                iwl_write_direct32(priv, HBUS_TARG_MEM_WDAT, *values);
 }