diff options
Diffstat (limited to 'drivers/mailbox/ti-msgmgr.c')
| -rw-r--r-- | drivers/mailbox/ti-msgmgr.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/mailbox/ti-msgmgr.c b/drivers/mailbox/ti-msgmgr.c index ddac423ac1a9..03048cbda525 100644 --- a/drivers/mailbox/ti-msgmgr.c +++ b/drivers/mailbox/ti-msgmgr.c @@ -430,14 +430,20 @@ static int ti_msgmgr_send_data(struct mbox_chan *chan, void *data)  		/* 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))  |