Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp18117807ybl; Thu, 2 Jan 2020 18:54:13 -0800 (PST) X-Google-Smtp-Source: APXvYqxICWJE+FXzSn0jHqCixt2ukymq45ufDX0kFS3lZoOJf9DJ2F4ZKSDGqbinOdfGHQ72nupx X-Received: by 2002:a9d:6758:: with SMTP id w24mr32872497otm.155.1578020053840; Thu, 02 Jan 2020 18:54:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578020053; cv=none; d=google.com; s=arc-20160816; b=rwmPFxasmtxjBPgbIOJBwkTzUIRDzq4N4CG8nwCM3WJf9OTtHLfKwtA9Rou6rr27Y7 ike9n3K7rkJxp/bgZC6D+Nj3Vk+mr8VMD6wLUtidjdofundJfee+HsVVICGm0q+NknCo PkC5t1CfLgOxQf9bVIOW39Bht5Ff1EV43TnCjQK5+RRqWHTggKqkFyL/JV7aE06vSoY9 Dwa/pynNGo/UbwKasCRIqYGpZgO+zgDIOCI9lFm9UUl8c6pPgNATaxUV0b0jFtGDm/iw bGf9IgD9Hxfrnl22c9pc9EthA9bMOG5P7YQ7rXWUesMjwfTjsuWGj3+brFKRn4VUaDxe oxcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=gD7g6P3sFrqhjc0eaYBlp4f3Z6teuaJHaBdk2JberWQ=; b=BkFqhoodk4ZHh+/9kwCfILJoK+pWKV9xuK+gZyRER4uAiZccce12YSx6OKOru0dIoh 0jyiTpoXBsWFNY3JndiLW8BnOqxtrGDjn1GIY+3f03tWn4DVFouOtrA6NREgcGBs6+8b aL8Eo69isi6SYlm1fmqJaoPHw60mNrRaKQku6MnNwO7EbnW1wawnFO9gSzF5sBeGR9Fg H6OTfXvAjA+61kcxW85skwmUuif7EWNINRZ3vHkSfmNDXXoJJ10xgiMkXdoeI+8aDb4/ eI42hJZRwxF6XzE3Lt0gxV64/h765AelinmbBV3t7qBTezrDSDNbXFyczKrdO6bEN3Ys WUzw== ARC-Authentication-Results: i=1; mx.google.com; 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 194si28017959oii.2.2020.01.02.18.53.47; Thu, 02 Jan 2020 18:54:13 -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; 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 S1727318AbgACCwR (ORCPT + 99 others); Thu, 2 Jan 2020 21:52:17 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:8660 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726148AbgACCwQ (ORCPT ); Thu, 2 Jan 2020 21:52:16 -0500 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 89861D7AD9A991B85F6D; Fri, 3 Jan 2020 10:52:14 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.439.0; Fri, 3 Jan 2020 10:52:04 +0800 From: Xinwei Kong To: , , CC: , Xinwei Kong , fengsheng Subject: [PATCH V2] spi: dw: use "smp_mb()" to avoid sending spi data error Date: Fri, 3 Jan 2020 10:52:10 +0800 Message-ID: <1578019930-55858-1-git-send-email-kong.kongxinwei@hisilicon.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Because of out-of-order execution about some CPU architecture, In this debug stage we find Completing spi interrupt enable -> prodrucing TXEI interrupt -> running "interrupt_transfer" function will prior to set "dw->rx and dws->rx_end" data, so this patch add memory barrier to enable dw->rx and dw->rx_end to be visible and solve to send SPI data error. eg: it will fix to this following low possibility error in testing environment which using SPI control to connect TPM Modules kernel: tpm tpm0: Operation Timed out kernel: tpm tpm0: tpm_relinquish_locality: : error -1 Signed-off-by: fengsheng Signed-off-by: Xinwei Kong --- drivers/spi/spi-dw.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c index a92aa5c..9396eb5 100644 --- a/drivers/spi/spi-dw.c +++ b/drivers/spi/spi-dw.c @@ -288,6 +288,9 @@ static int dw_spi_transfer_one(struct spi_controller *master, dws->rx_end = dws->rx + transfer->len; dws->len = transfer->len; + /* Ensure dw->rx and dw->rx_end are visible */ + smp_mb(); + spi_enable_chip(dws, 0); /* Handle per transfer options for bpw and speed */ -- 2.7.4