Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp6555672ybx; Mon, 11 Nov 2019 10:53:25 -0800 (PST) X-Google-Smtp-Source: APXvYqzQuQtc+uzDyst3oy7i2AnDp1gyLTX9EVv1ji8pkPHZ4s8nYImsUZddWBAiDDgoOGbzW7BS X-Received: by 2002:a05:6402:105a:: with SMTP id e26mr27682469edu.229.1573498405255; Mon, 11 Nov 2019 10:53:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573498405; cv=none; d=google.com; s=arc-20160816; b=JZDLt1GjONw7oTMQ2c/vKXfP+fD6edA2n2ZIRi2PDV2xFD6WbPorvPHkXDn/SyS2cw kO1ggc3/o0Dx+gdZqtf5qFRVt6/fI74hnQ2DeSp0uNXYMucnUi02apaNlRZw+fRDCTnu kXDRPiY270vHAWIr206Dq+7XW94Lljl5G6H5C66nz0NZy9iOnNd01t1msnP1mNqrghid BaYrK1vhkSS+KDcgdWCM+iTLUVTC6zJTw1f9xLCKnw5AY0EAiWeiQUYANJueDR70G5+M Oi/Lh5VnkSM/9XODUCrRGdJ5pA8Q39iyeJuGUF6ezg6yGBmfctjUHHdrlkY37yfVYpL3 J1nQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=J1pnCbXtWYTaIHXoQwPxEyQwflDKtgLmSyz3dooT4ek=; b=Z8jBtVli42wu6b9I6NFmJaiXTLU/QjDWnLCOZ9mZh2siiVqbcf1r5qg+zzgBnFxrGU nTfYJZkROKT2jXU0A8kWpffKGdbtV1aOxKIkGFYmotXmJSekujBKP1CxnpyHNloeu4Y2 xRmYXG1C2KKelGucb/fHIniQHz5tTvPkkcNFA3U30J+4kwn8gzhetvDcLlWzzcstA2vn it1MjAxaFIEhFAGvXlK36j1PCbwjQbiQQGEHUOe584YhmzAkEw7LzxgLx9gBIwHdHwzZ UQyrT4wwrNNFFkfnXLRQwPcvY7HBJje1aRhwYZ9094oJTRtucdzJhxVy6wqag4/iD2CW 9wsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QlRWc6Rf; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ga20si6571669ejb.14.2019.11.11.10.53.01; Mon, 11 Nov 2019 10:53:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QlRWc6Rf; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730327AbfKKSwb (ORCPT + 99 others); Mon, 11 Nov 2019 13:52:31 -0500 Received: from mail.kernel.org ([198.145.29.99]:46708 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730274AbfKKSwX (ORCPT ); Mon, 11 Nov 2019 13:52:23 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 490A0204EC; Mon, 11 Nov 2019 18:52:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573498343; bh=dguNy2Uy53wWhZ5XJNoj++7yvyxtrq34d78ej4hQFm4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QlRWc6Rfrn37VHAmJriUoDWnze0/JpXPGIugJTOairpq9Xq3HWVFi6mdZgMxjqHBM 6oHirgjhV+s1lhani/QcUCkEKBFM8GHFObH8mrmjXqBcnY/0W5uwhefSNQ8Rbh25aG VlIX655NjpVkOF8XMt6/ZsTxkvK5hu1p9flsZ/KM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Zhenfang Wang , Baolin Wang , Vinod Koul , Sasha Levin Subject: [PATCH 5.3 092/193] dmaengine: sprd: Fix the link-list pointer register configuration issue Date: Mon, 11 Nov 2019 19:27:54 +0100 Message-Id: <20191111181507.930056795@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111181459.850623879@linuxfoundation.org> References: <20191111181459.850623879@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Zhenfang Wang [ Upstream commit 8b6bc5fd71e677864d1a3b896b3069a6e0c5e214 ] We will set the link-list pointer register point to next link-list configuration's physical address, which can load DMA configuration from the link-list node automatically. But the link-list node's physical address can be larger than 32bits, and now Spreadtrum DMA driver only supports 32bits physical address, which may cause loading a incorrect DMA configuration when starting the link-list transfer mode. According to the DMA datasheet, we can use SRC_BLK_STEP register (bit28 - bit31) to save the high bits of the link-list node's physical address to fix this issue. Fixes: 4ac695464763 ("dmaengine: sprd: Support DMA link-list mode") Signed-off-by: Zhenfang Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/eadfe9295499efa003e1c344e67e2890f9d1d780.1568267061.git.baolin.wang@linaro.org Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- drivers/dma/sprd-dma.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index 525dc7338fe3b..a4a91f233121a 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -134,6 +134,10 @@ #define SPRD_DMA_SRC_TRSF_STEP_OFFSET 0 #define SPRD_DMA_TRSF_STEP_MASK GENMASK(15, 0) +/* SPRD DMA_SRC_BLK_STEP register definition */ +#define SPRD_DMA_LLIST_HIGH_MASK GENMASK(31, 28) +#define SPRD_DMA_LLIST_HIGH_SHIFT 28 + /* define DMA channel mode & trigger mode mask */ #define SPRD_DMA_CHN_MODE_MASK GENMASK(7, 0) #define SPRD_DMA_TRG_MODE_MASK GENMASK(7, 0) @@ -717,6 +721,7 @@ static int sprd_dma_fill_desc(struct dma_chan *chan, u32 int_mode = flags & SPRD_DMA_INT_MASK; int src_datawidth, dst_datawidth, src_step, dst_step; u32 temp, fix_mode = 0, fix_en = 0; + phys_addr_t llist_ptr; if (dir == DMA_MEM_TO_DEV) { src_step = sprd_dma_get_step(slave_cfg->src_addr_width); @@ -814,13 +819,16 @@ static int sprd_dma_fill_desc(struct dma_chan *chan, * Set the link-list pointer point to next link-list * configuration's physical address. */ - hw->llist_ptr = schan->linklist.phy_addr + temp; + llist_ptr = schan->linklist.phy_addr + temp; + hw->llist_ptr = lower_32_bits(llist_ptr); + hw->src_blk_step = (upper_32_bits(llist_ptr) << SPRD_DMA_LLIST_HIGH_SHIFT) & + SPRD_DMA_LLIST_HIGH_MASK; } else { hw->llist_ptr = 0; + hw->src_blk_step = 0; } hw->frg_step = 0; - hw->src_blk_step = 0; hw->des_blk_step = 0; return 0; } -- 2.20.1