/* Ensure all unused data is 0 */
                data_trail &= 0xFFFFFFFF >> (8 * (sizeof(u32) - trail_bytes));
                writel(data_trail, data_reg);
-               data_reg++;
+               data_reg += sizeof(u32);
        }
+
        /*
         * 'data_reg' indicates next register to write. If we did not already
         * write on tx complete reg(last reg), we must do so for transmit
+        * In addition, we also need to make sure all intermediate data
+        * registers(if any required), are reset to 0 for TISCI backward
+        * compatibility to be maintained.
         */
-       if (data_reg <= qinst->queue_buff_end)
-               writel(0, qinst->queue_buff_end);
+       while (data_reg <= qinst->queue_buff_end) {
+               writel(0, data_reg);
+               data_reg += sizeof(u32);
+       }
 
        /* If we are in polled mode, wait for a response before proceeding */
        if (ti_msgmgr_chan_has_polled_queue_rx(message->chan_rx))