Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp71783ybt; Thu, 9 Jul 2020 15:48:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw+0Q/6NyYdx6/gYVO/isCt5xKk/wc/dawiv41X2Gv+0UbpAElM/A+f1NrarR7BnlDW+ZF6 X-Received: by 2002:a17:906:2b0e:: with SMTP id a14mr31595265ejg.459.1594334908301; Thu, 09 Jul 2020 15:48:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594334908; cv=none; d=google.com; s=arc-20160816; b=UYABi9H3/YMT/OZa5fvqpgCbUqVh+zIrY5WyOPT7p7qrprlGSSs2gKxFt1jvimwCZD KFz/IjMNAaUgL9FuJ4MlDr/+mp5T1wwGBSSUV72dCDTUliQkjGxbCYmyFqdfjdWbRUfL z8Ta9xhiDiNnxedBbnl+WmVameGkku/SdGyCXs3ehAiAHReOrcpsOxYZnOlqqdkGQb4f 1aydl3y4oY5mwjjkSp73I9HQymCNO0bTt/IvoImBYWieFVKDi/rND64VxHbQJIAeZYUr 62bpmlrvpS+vZLIs/HaAWR0Ddasd7Lkff6CbY3bpXpx4HznRhZpO/qZ8YKScrjWtIFxv GLIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=KCl2yRBGaSOXwk58XHR4C5FIIKxNCHcKxQhxmKSWLjU=; b=S7nHKaQryDDjO3Yp5Kozn0sHcYCF/ndPoaHPsFntjzFlGo4bzjG6F3ZvIOz6T/xvc8 QRAsqMUF9UQoqraMdR2okxGA8xGBRqTfVhk1SD5MM/sQYDKd9XMxDxmO4Ws9z1d7qa1t cfBlQPC2UCD3lKLBRJA8L9AUOr+hJiY21/O8YperNnPJHI66r8eK+0K0T6XGa3Go23wB Qyvxx21qyFVMkv+hDm2JWjl0xgrOjNEJ0mGmhB6LnVAAiehwT9E6ad2jcndD3RuNk0qD zYfncCUtcZ8qxK0plI2vSEg3FJwbwDReErRrZM/1iqXmRcgvx6MVULRqOZofBwi29DCt XKQA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l22si2904799edw.118.2020.07.09.15.48.05; Thu, 09 Jul 2020 15:48:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727951AbgGIWq7 (ORCPT + 99 others); Thu, 9 Jul 2020 18:46:59 -0400 Received: from mail.baikalelectronics.com ([87.245.175.226]:48198 "EHLO mail.baikalelectronics.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727044AbgGIWqR (ORCPT ); Thu, 9 Jul 2020 18:46:17 -0400 Received: from localhost (unknown [127.0.0.1]) by mail.baikalelectronics.ru (Postfix) with ESMTP id A38248040A6A; Thu, 9 Jul 2020 22:46:13 +0000 (UTC) X-Virus-Scanned: amavisd-new at baikalelectronics.ru Received: from mail.baikalelectronics.ru ([127.0.0.1]) by localhost (mail.baikalelectronics.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id isblU5sAe9Qf; Fri, 10 Jul 2020 01:46:13 +0300 (MSK) From: Serge Semin To: Vinod Koul , Viresh Kumar , Andy Shevchenko , Dan Williams CC: Serge Semin , Serge Semin , Alexey Malahov , Thomas Bogendoerfer , Arnd Bergmann , Rob Herring , , , , Subject: [PATCH v7 06/11] dmaengine: dw: Take HC_LLP flag into account for noLLP auto-config Date: Fri, 10 Jul 2020 01:45:45 +0300 Message-ID: <20200709224550.15539-7-Sergey.Semin@baikalelectronics.ru> In-Reply-To: <20200709224550.15539-1-Sergey.Semin@baikalelectronics.ru> References: <20200709224550.15539-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Full multi-block transfers functionality is enabled in DW DMA controller only if CHx_MULTI_BLK_EN is set. But LLP-based transfers can be executed only if hardcode channel x LLP register feature isn't enabled, which can be switched on at the IP core synthesis for optimization. If it's enabled then the LLP register is hardcoded to zero, so the blocks chaining based on the LLPs is unsupported. Signed-off-by: Serge Semin Reviewed-by: Andy Shevchenko Cc: Alexey Malahov Cc: Thomas Bogendoerfer Cc: Arnd Bergmann Cc: Rob Herring Cc: linux-mips@vger.kernel.org Cc: devicetree@vger.kernel.org --- Changelog v2: - Rearrange SoBs. - Add comment about why hardware accelerated LLP list support depends on both MBLK_EN and HC_LLP configs setting. - Use explicit bits state comparison operator. Changelog v3: - Move the patch to the head of the series. --- drivers/dma/dw/core.c | 11 ++++++++++- drivers/dma/dw/regs.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c index 21cb2a58dbd2..33e99d95b3d3 100644 --- a/drivers/dma/dw/core.c +++ b/drivers/dma/dw/core.c @@ -1178,8 +1178,17 @@ int do_dma_probe(struct dw_dma_chip *chip) */ dwc->block_size = (4 << ((pdata->block_size >> 4 * i) & 0xf)) - 1; + + /* + * According to the DW DMA databook the true scatter- + * gether LLPs aren't available if either multi-block + * config is disabled (CHx_MULTI_BLK_EN == 0) or the + * LLP register is hard-coded to zeros + * (CHx_HC_LLP == 1). + */ dwc->nollp = - (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0; + (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0 || + (dwc_params >> DWC_PARAMS_HC_LLP & 0x1) == 1; } else { dwc->block_size = pdata->block_size; dwc->nollp = !pdata->multi_block[i]; diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h index 3fce66ecee7a..1ab840b06e79 100644 --- a/drivers/dma/dw/regs.h +++ b/drivers/dma/dw/regs.h @@ -125,6 +125,7 @@ struct dw_dma_regs { /* Bitfields in DWC_PARAMS */ #define DWC_PARAMS_MBLK_EN 11 /* multi block transfer */ +#define DWC_PARAMS_HC_LLP 13 /* set LLP register to zero */ /* bursts size */ enum dw_dma_msize { -- 2.26.2