for (index = 0; index < (msg->cmd_data_size / 4); index++)
                        writel_relaxed(word_buf[index],
-                                      mbox->mbox_base + index * 0x4);
+                                      mbox->mbox_base + msg->mbox_offset + index * 0x4);
                if (extra_bits) {
                        u8 i;
                        u8 byte_off = ALIGN_DOWN(msg->cmd_data_size, 4);
                        u8 *byte_buf = msg->cmd_data + byte_off;
 
-                       val = readl_relaxed(mbox->mbox_base + index * 0x4);
+                       val = readl_relaxed(mbox->mbox_base + msg->mbox_offset + index * 0x4);
 
                        for (i = 0u; i < extra_bits; i++) {
                                val &= ~(0xffu << (i * 8u));
                                val |= (byte_buf[i] << (i * 8u));
                        }
 
-                       writel_relaxed(val,
-                                      mbox->mbox_base + index * 0x4);
+                       writel_relaxed(val, mbox->mbox_base + msg->mbox_offset + index * 0x4);
                }
        }