dmaengine: bcm-sba-raid: Explicitly ACK mailbox message after sending
authorAnup Patel <anup.patel@broadcom.com>
Tue, 22 Aug 2017 09:57:05 +0000 (15:27 +0530)
committerVinod Koul <vinod.koul@intel.com>
Mon, 28 Aug 2017 11:14:24 +0000 (16:44 +0530)
We should explicitly ACK mailbox message because after
sending message we can know the send status via error
attribute of brcm_message.

This will also help SBA-RAID to use "txdone_ack" method
whenever mailbox controller supports it.

Signed-off-by: Anup Patel <anup.patel@broadcom.com>
Reviewed-by: Ray Jui <ray.jui@broadcom.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/bcm-sba-raid.c

index 53161b3ca8b991e0ed8ae5d5afb2f27e70adb11c..c3643d30e31babebf2bddd119f701e877ba02beb 100644 (file)
@@ -396,13 +396,17 @@ static int sba_send_mbox_request(struct sba_device *sba,
                dev_err(sba->dev, "send message failed with error %d", ret);
                return ret;
        }
+
+       /* Check error returned by mailbox controller */
        ret = req->msg.error;
        if (ret < 0) {
                dev_err(sba->dev, "message error %d", ret);
-               return ret;
        }
 
-       return 0;
+       /* Signal txdone for mailbox channel */
+       mbox_client_txdone(sba->mchans[mchans_idx], ret);
+
+       return ret;
 }
 
 /* Note: Must be called with sba->reqs_lock held */
@@ -1724,7 +1728,7 @@ static int sba_probe(struct platform_device *pdev)
        sba->client.dev                 = &pdev->dev;
        sba->client.rx_callback         = sba_receive_message;
        sba->client.tx_block            = false;
-       sba->client.knows_txdone        = false;
+       sba->client.knows_txdone        = true;
        sba->client.tx_tout             = 0;
 
        /* Allocate mailbox channel array */