Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3179517imw; Mon, 11 Jul 2022 03:40:52 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uBrXrjcA1SS4dWchTuyNSdbbR6WukgqE2RkJTq7C4OoKsc7TepI4ISHc+cHh2xZz3nlxwH X-Received: by 2002:aa7:93a5:0:b0:51b:e0f8:97a6 with SMTP id x5-20020aa793a5000000b0051be0f897a6mr17637331pff.44.1657536051820; Mon, 11 Jul 2022 03:40:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657536051; cv=none; d=google.com; s=arc-20160816; b=daC/yKMAuERmOFQAqWcfURDJRz5GNSu2Bh3G8QNPtRu0CRKVNdBkAUOuXUKJcmWDld 6SYMOK8ZS1ThefsZFz+AHEFc6CicAn/PsJNIQ2gyrWaCepQL/zvy48x+Wg/u4aBHNf5M yodfkt87FjqPquPdpYhKU/DRgnv9a8wbDy6I7WAV7n83IjymihsaTWfWIeR/QqRPmzri GiOFux6BHa6Ph5JF9SJRQGy2fpQ0yNNUMdEAQgxp2nZmncWDGcnaGAyCjCWmE2ukXrIN sV31Rr8Bn6KiIpUbJCY1LUnLNfElABnc1c3AWYWE2jIL7STYS/dh/KhjM3wCZyMHlCvW 8v8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=NJSlbo6CPl0ERegiH0ylNnQWMUYp2D4tk95PxmI7hRc=; b=v67WciS2hQIptwcE+Bt7o4HEE2SUJVhLuauQ2iok1MzT1DyiU1Pa/2ghjWEJ+VDppw mFY4VYUNEXgVBNt2d6NlpIDudD8bstaTpHNJO5sjL8P0S5edVb7B1+d2F7fvBu0Zzqe5 KS1HWTAxuqP9ip0XM888i6qdHdlaspfta9wz3EzT9VZD9tdm5csW0mdwQ1ESQidTXWm6 s7P3wpQEMNhTogr+C5iTuJiZr8VNGmwqi1vC0BUGeqrNRC2Xol8arhLG+AF6fm10HID/ pVO52vg2MT8PCZfmJ6dqyF2sRiRcvq494e8t+qF8WVUm8mvuFj27MSdgVL71puINHfsA 4UIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UTHyPNEt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k30-20020a63ff1e000000b00412ac5a4831si8915827pgi.144.2022.07.11.03.40.38; Mon, 11 Jul 2022 03:40:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UTHyPNEt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232952AbiGKJgT (ORCPT + 99 others); Mon, 11 Jul 2022 05:36:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52884 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232118AbiGKJeu (ORCPT ); Mon, 11 Jul 2022 05:34:50 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 91D086330; Mon, 11 Jul 2022 02:18:42 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 183FEB80833; Mon, 11 Jul 2022 09:18:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7DB0FC34115; Mon, 11 Jul 2022 09:18:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1657531119; bh=mtlslkPZOGbYO1mkm2rsME8Fmx8ft0J7wjRxl8Q0S6k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UTHyPNEtckOlWmioD52H87fPcpfwPgg+Xz0udjgVcw3qnedyPkqiVWqmVpUdfmdNd 1LcQ0OPHXQ04FxeewAxHtj4kUfB8DTB7keAJMm1q6sI9erJ2euzCVGe8p6OZ5rh75S NCDQEZ787T68JiX51QduU5mWqVbMWZXVT9JpE5Ns= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Samin Guo , Emil Renner Berthing , Vinod Koul Subject: [PATCH 5.18 103/112] dmaengine: dw-axi-dmac: Fix RMW on channel suspend register Date: Mon, 11 Jul 2022 11:07:43 +0200 Message-Id: <20220711090552.494344585@linuxfoundation.org> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220711090549.543317027@linuxfoundation.org> References: <20220711090549.543317027@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Emil Renner Berthing commit 49db68d45bdcad06e28a420d5d911e4178389666 upstream. When the DMA is configured for more than 8 channels the bits controlling suspend moves to another register. However when adding support for this the new register would be completely overwritten in one case and overwritten with values from the old register in another case. Found by comparing the parallel implementation of more than 8 channel support for the StarFive JH7100 SoC by Samin. Fixes: 824351668a41 ("dmaengine: dw-axi-dmac: support DMAX_NUM_CHANNELS > 8") Co-developed-by: Samin Guo Signed-off-by: Samin Guo Signed-off-by: Emil Renner Berthing Link: https://lore.kernel.org/r/20220627090939.1775717-1-emil.renner.berthing@canonical.com Signed-off-by: Vinod Koul Signed-off-by: Greg Kroah-Hartman --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1164,8 +1164,9 @@ static int dma_chan_pause(struct dma_cha BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT; axi_dma_iowrite32(chan->chip, DMAC_CHEN, val); } else { - val = BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT | - BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT; + val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG); + val |= BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT | + BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT; axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val); } @@ -1190,12 +1191,13 @@ static inline void axi_chan_resume(struc { u32 val; - val = axi_dma_ioread32(chan->chip, DMAC_CHEN); if (chan->chip->dw->hdata->reg_map_8_channels) { + val = axi_dma_ioread32(chan->chip, DMAC_CHEN); val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP_SHIFT); val |= (BIT(chan->id) << DMAC_CHAN_SUSP_WE_SHIFT); axi_dma_iowrite32(chan->chip, DMAC_CHEN, val); } else { + val = axi_dma_ioread32(chan->chip, DMAC_CHSUSPREG); val &= ~(BIT(chan->id) << DMAC_CHAN_SUSP2_SHIFT); val |= (BIT(chan->id) << DMAC_CHAN_SUSP2_WE_SHIFT); axi_dma_iowrite32(chan->chip, DMAC_CHSUSPREG, val);