Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp3623231pxb; Fri, 11 Feb 2022 04:16:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJzPhN5FDar9s63desyBpXzznzI/sfEcwMRExM658gm23GjL9/722Mudaex/wOTvAi3I7SBv X-Received: by 2002:a05:6a00:1253:: with SMTP id u19mr1409699pfi.8.1644581762053; Fri, 11 Feb 2022 04:16:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644581762; cv=none; d=google.com; s=arc-20160816; b=QkbpGNyW1EOBbFl9ELsv6leU2JVlZ+iJuzmiioC+9mt/aphkg+gIdFNef0AAmgbK2t lT5FKJ3DC57moM3InSh9uDyG9qnvQmRPr9lMw6XEhoUpPG71pBeeUdiTQAH+pppy4E6Z 9K63iQAohGsxSuGaW0bxc2Bpak4oqiZeIr3lSQfyKhs9Q5Wyomyi1nKSDEGUzlFEE4Dx g1K/iunPOT+oRGcxp7qjO5RRlsWhB76HbOcPBgxR3Sz38o/1wwdSyryU5fdv/jfGXEBG sKQj07KX0JxxI2LbpTDEmYN+Jp1h2owYDDq7mXW/ZRavTDHx3yx8/Et8lp3Uf3VrB5mh zirw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=MrEqW8oUEQ94blknDl9nOvbnDWbhDOBmAk/kKLlIfAY=; b=mvu5qW+E+6P++uAKnAHqbjx1mprhVnZ2wjllUVjL2Fgl2mavrYGahfGM0niLT3S7k7 hU9awcGM6l3y2E1vDLHL9jQ71VS8+bGrwsVk5jfL+EfgKYXPA1Bm93FHPK7IUaQ346Kn qk9Cqi00KJPOpkDhfLr9uZGv83wysJKoHYJ+giLvEjqhCmY6u+IE+2SSlLNVcyf5HpGJ 3qI5izOhL3/kFF3YXgrOnm+1KRzlEabHJTXldmb8xiL9yLg6PucFrb4+GlGD3pF3D9y7 Z/fhDYmmIv5K/dV54yqJZj+V/IDOuEsaK97nYAFvi6ZVulUj2ZkUdl62ipEK/9+qn4f/ PHFQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=rock-chips.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t71si1109024pgd.775.2022.02.11.04.15.48; Fri, 11 Feb 2022 04:16:02 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=rock-chips.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241869AbiBKDxm (ORCPT + 99 others); Thu, 10 Feb 2022 22:53:42 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:39946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241193AbiBKDxe (ORCPT ); Thu, 10 Feb 2022 22:53:34 -0500 Received: from mail-m17664.qiye.163.com (mail-m17664.qiye.163.com [59.111.176.64]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B82C226DA; Thu, 10 Feb 2022 19:53:33 -0800 (PST) Received: from localhost.localdomain (unknown [58.22.7.114]) by mail-m17664.qiye.163.com (Hmail) with ESMTPA id 395A4140168; Fri, 11 Feb 2022 11:43:52 +0800 (CST) From: Jon Lin To: broonie@kernel.org Cc: heiko@sntech.de, linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Jon Lin Subject: [PATCH 5/6] spi: rockchip: terminate dma transmission when slave abort Date: Fri, 11 Feb 2022 11:43:42 +0800 Message-Id: <20220211034344.4130-6-jon.lin@rock-chips.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220211034344.4130-1-jon.lin@rock-chips.com> References: <20220211034344.4130-1-jon.lin@rock-chips.com> X-HM-Spam-Status: e1kfGhgUHx5ZQUtXWQgPGg8OCBgUHx5ZQUlOS1dZCBgUCR5ZQVlLVUtZV1 kWDxoPAgseWUFZKDYvK1lXWShZQUhPN1dZLVlBSVdZDwkaFQgSH1lBWRoYSExWS0NLTR5LTR5IQx 0ZVRMBExYaEhckFA4PWVdZFhoPEhUdFFlBWVVLWQY+ X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6NiI6UTo5KT5JTx46Ng0TF0wa TTMwFAtVSlVKTU9PTk5KS0hJTUlPVTMWGhIXVREUFVUXEhU7CRQYEFYYExILCFUYFBZFWVdZEgtZ QVlOQ1VJSVVMVUpKT1lXWQgBWUFISEhJNwY+ X-HM-Tid: 0a7ee6e14e4dda2fkuws395a4140168 X-Spam-Status: No, score=-0.4 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RCVD_IN_SORBS_WEB,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no 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 After slave abort, all DMA should be stopped, or it will affect the next transmission: [ 31.693877] Unable to handle kernel paging request at virtual address ffffff8105a2a7c0 [ 31.694643] Mem abort info: [ 31.694898] ESR = 0x96000045 [ 31.695179] EC = 0x25: DABT (current EL), IL = 32 bits [ 31.695653] SET = 0, FnV = 0 [ 31.695931] EA = 0, S1PTW = 0 [ 31.696218] Data abort info: [ 31.696485] ISV = 0, ISS = 0x00000045 [ 31.696832] CM = 0, WnR = 1 [ 31.697112] swapper pgtable: 4k pages, 39-bit VAs, pgdp=000000000142f000 [ 31.697713] [ffffff8105a2a7c0] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000 [ 31.698502] Internal error: Oops: 96000045 [#1] SMP [ 31.698943] Modules linked in: [ 31.699235] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 5.10.43 #8 [ 31.699895] Hardware name: Rockchip RK3588 EVB1 LP4 V10 Board (DT) [ 31.700455] pstate: 60400089 (nZCv daIf +PAN -UAO -TCO BTYPE=--) [ 31.701000] pc : rockchip_spi_slave_abort+0x150/0x18c [ 31.701456] lr : rockchip_spi_slave_abort+0x78/0x18c Signed-off-by: Jon Lin --- drivers/spi/spi-rockchip.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c index 5457af616a44..3d4e95eda4a6 100644 --- a/drivers/spi/spi-rockchip.c +++ b/drivers/spi/spi-rockchip.c @@ -617,8 +617,6 @@ static int rockchip_spi_slave_abort(struct spi_controller *ctlr) if (atomic_read(&rs->state) & RXDMA) { dmaengine_pause(ctlr->dma_rx); status = dmaengine_tx_status(ctlr->dma_rx, ctlr->dma_rx->cookie, &state); - dmaengine_terminate_sync(ctlr->dma_rx); - atomic_set(&rs->state, 0); if (status == DMA_ERROR) { rs->rx = rs->xfer->rx_buf; rs->xfer->len = 0; @@ -648,6 +646,11 @@ static int rockchip_spi_slave_abort(struct spi_controller *ctlr) } out: + if (atomic_read(&rs->state) & RXDMA) + dmaengine_terminate_sync(ctlr->dma_rx); + if (atomic_read(&rs->state) & TXDMA) + dmaengine_terminate_sync(ctlr->dma_tx); + atomic_set(&rs->state, 0); spi_enable_chip(rs, false); rs->slave_abort = true; spi_finalize_current_transfer(ctlr); -- 2.17.1