From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: Revert "dmaengine: pl330: add DMA_PAUSE feature" From: Frank Mori Hess Message-Id: <2484918.HKVQc3yJkt@bear> Date: Sat, 28 Apr 2018 17:50:58 -0400 To: Vinod Koul , dmaengine@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dan Williams , r.baldyga@hackerion.com List-ID: VGhpcyByZXZlcnRzIGNvbW1pdCA4ODk4N2QyYzc1MzRhMDI2OWY1NjdmYjEwMWU2ZDcxYTA4ZjBm MDFkLgoKVGhlIHBsMzMwLmMgcGF1c2UgaW1wbGVtZW50YXRpb24gdmlvbGF0ZXMgdGhlIGRtYWVu Z2luZSByZXF1aXJlbWVudApmb3Igbm8gZGF0YSBsb3NzLCBzaW5jZSBpdCByZWxpZXMgb24gdGhl IERNQUtJTEwKaW5zdHJ1Y3Rpb24uICBIb3dldmVyLCBETUFLSUxMIGRpc2NhcmRzIGluLWZsaWdo dCBkYXRhIGZyb20gdGhlCmRtYSBjb250cm9sbGVyJ3MgZmlmby4gIFRoaXMgaXMgZG9jdW1lbnRl ZCBpbiB0aGUgZG1hLTMzMCBtYW51YWwKYW5kIEkgaGF2ZSBvYnNlcnZlZCBpdCB3aXRoIGhhcmR3 YXJlIGRvaW5nIGRldmljZS10by1tZW1vcnkgYnVyc3QKdHJhbnNmZXJzLiAgVGhlIGRpc2NhcmRl ZCBkYXRhIG1heSBvciBtYXkgbm90IHNob3cgdXAgaW4gdGhlCnJlc2lkdWUgY291bnQsIGRlcGVu ZGluZyBvbiB0aW1pbmcgKHJlc3VsdGluZyBpbiBkYXRhIGNvcnJ1cHRpb24KZWZmZWN0aXZlbHkp LgoKU2lnbmVkLW9mZi1ieTogRnJhbmsgTW9yaSBIZXNzIDxmbWg2ampAZ21haWwuY29tPgotLS0K IGRyaXZlcnMvZG1hL3BsMzMwLmMgfCAyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAx IGZpbGUgY2hhbmdlZCwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEv cGwzMzAuYyBiL2RyaXZlcnMvZG1hL3BsMzMwLmMKaW5kZXggNjIzNzA2OTAwMWM0Li5mODAyYmQz YjA0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3BsMzMwLmMKKysrIGIvZHJpdmVycy9kbWEv cGwzMzAuYwpAQCAtMjI5MCwzMyArMjI5MCw2IEBAIHN0YXRpYyBpbnQgcGwzMzBfdGVybWluYXRl X2FsbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBXZSBk b24ndCBzdXBwb3J0IERNQV9SRVNVTUUgY29tbWFuZCBiZWNhdXNlIG9mIGhhcmR3YXJlCi0gKiBs aW1pdGF0aW9ucywgc28gYWZ0ZXIgcGF1c2luZyB0aGUgY2hhbm5lbCB3ZSBjYW5ub3QgcmVzdG9y ZQotICogaXQgdG8gYWN0aXZlIHN0YXRlLiBXZSBoYXZlIHRvIHRlcm1pbmF0ZSBjaGFubmVsIGFu ZCBzZXR1cAotICogRE1BIHRyYW5zZmVyIGFnYWluLiBUaGlzIHBhdXNlIGZlYXR1cmUgd2FzIGlt cGxlbWVudGVkIHRvCi0gKiBhbGxvdyBzYWZlbHkgcmVhZCByZXNpZHVlIGJlZm9yZSBjaGFubmVs IHRlcm1pbmF0aW9uLgotICovCi1zdGF0aWMgaW50IHBsMzMwX3BhdXNlKHN0cnVjdCBkbWFfY2hh biAqY2hhbikKLXsKLQlzdHJ1Y3QgZG1hX3BsMzMwX2NoYW4gKnBjaCA9IHRvX3BjaGFuKGNoYW4p OwotCXN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCA9IHBjaC0+ZG1hYzsKLQl1bnNpZ25lZCBsb25n IGZsYWdzOwotCi0JcG1fcnVudGltZV9nZXRfc3luYyhwbDMzMC0+ZGRtYS5kZXYpOwotCXNwaW5f bG9ja19pcnFzYXZlKCZwY2gtPmxvY2ssIGZsYWdzKTsKLQotCXNwaW5fbG9jaygmcGwzMzAtPmxv Y2spOwotCV9zdG9wKHBjaC0+dGhyZWFkKTsKLQlzcGluX3VubG9jaygmcGwzMzAtPmxvY2spOwot Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNoLT5sb2NrLCBmbGFncyk7Ci0JcG1fcnVudGlt ZV9tYXJrX2xhc3RfYnVzeShwbDMzMC0+ZGRtYS5kZXYpOwotCXBtX3J1bnRpbWVfcHV0X2F1dG9z dXNwZW5kKHBsMzMwLT5kZG1hLmRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQg cGwzMzBfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3Ry dWN0IGRtYV9wbDMzMF9jaGFuICpwY2ggPSB0b19wY2hhbihjaGFuKTsKQEAgLTMwMjcsNyArMzAw MCw2IEBAIHBsMzMwX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqYWRldiwgY29uc3Qgc3RydWN0 IGFtYmFfaWQgKmlkKQogCXBkLT5kZXZpY2VfdHhfc3RhdHVzID0gcGwzMzBfdHhfc3RhdHVzOwog CXBkLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHBsMzMwX3ByZXBfc2xhdmVfc2c7CiAJcGQtPmRl dmljZV9jb25maWcgPSBwbDMzMF9jb25maWc7Ci0JcGQtPmRldmljZV9wYXVzZSA9IHBsMzMwX3Bh dXNlOwogCXBkLT5kZXZpY2VfdGVybWluYXRlX2FsbCA9IHBsMzMwX3Rlcm1pbmF0ZV9hbGw7CiAJ cGQtPmRldmljZV9pc3N1ZV9wZW5kaW5nID0gcGwzMzBfaXNzdWVfcGVuZGluZzsKIAlwZC0+c3Jj X2FkZHJfd2lkdGhzID0gUEwzMzBfRE1BX0JVU1dJRFRIUzsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752075AbeD1VvH (ORCPT ); Sat, 28 Apr 2018 17:51:07 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:41174 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751602AbeD1VvF (ORCPT ); Sat, 28 Apr 2018 17:51:05 -0400 X-Google-Smtp-Source: AB8JxZqOEKu7Y0W/SkVRA5+ID0gXCIrJYcVf6sVkytf5xe7BjTjn77uOJ1e86PZkLUE9/CSrJ7beMQ== From: Frank Mori Hess To: Vinod Koul , dmaengine@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dan Williams , r.baldyga@hackerion.com Subject: [PATCH] Revert "dmaengine: pl330: add DMA_PAUSE feature" Date: Sat, 28 Apr 2018 17:50:58 -0400 Message-ID: <2484918.HKVQc3yJkt@bear> User-Agent: KMail/5.2.3 (Linux/4.9.0-6-amd64; KDE/5.28.0; x86_64; ; ) MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This reverts commit 88987d2c7534a0269f567fb101e6d71a08f0f01d. The pl330.c pause implementation violates the dmaengine requirement for no data loss, since it relies on the DMAKILL instruction. However, DMAKILL discards in-flight data from the dma controller's fifo. This is documented in the dma-330 manual and I have observed it with hardware doing device-to-memory burst transfers. The discarded data may or may not show up in the residue count, depending on timing (resulting in data corruption effectively). Signed-off-by: Frank Mori Hess --- drivers/dma/pl330.c | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 6237069001c4..f802bd3b0481 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -2290,33 +2290,6 @@ static int pl330_terminate_all(struct dma_chan *chan) return 0; } -/* - * We don't support DMA_RESUME command because of hardware - * limitations, so after pausing the channel we cannot restore - * it to active state. We have to terminate channel and setup - * DMA transfer again. This pause feature was implemented to - * allow safely read residue before channel termination. - */ -static int pl330_pause(struct dma_chan *chan) -{ - struct dma_pl330_chan *pch = to_pchan(chan); - struct pl330_dmac *pl330 = pch->dmac; - unsigned long flags; - - pm_runtime_get_sync(pl330->ddma.dev); - spin_lock_irqsave(&pch->lock, flags); - - spin_lock(&pl330->lock); - _stop(pch->thread); - spin_unlock(&pl330->lock); - - spin_unlock_irqrestore(&pch->lock, flags); - pm_runtime_mark_last_busy(pl330->ddma.dev); - pm_runtime_put_autosuspend(pl330->ddma.dev); - - return 0; -} - static void pl330_free_chan_resources(struct dma_chan *chan) { struct dma_pl330_chan *pch = to_pchan(chan); @@ -3027,7 +3000,6 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) pd->device_tx_status = pl330_tx_status; pd->device_prep_slave_sg = pl330_prep_slave_sg; pd->device_config = pl330_config; - pd->device_pause = pl330_pause; pd->device_terminate_all = pl330_terminate_all; pd->device_issue_pending = pl330_issue_pending; pd->src_addr_widths = PL330_DMA_BUSWIDTHS; -- 2.11.0