Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3901641ybz; Mon, 4 May 2020 11:48:41 -0700 (PDT) X-Google-Smtp-Source: APiQypJXC/kHwWccl5Ob2hvygKHESI04bdo90Ec18QgRSFwTXc45NMrwjmza6mgrjBHKjF1sXpO5 X-Received: by 2002:a05:6402:1b08:: with SMTP id by8mr15704552edb.286.1588618121572; Mon, 04 May 2020 11:48:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588618121; cv=none; d=google.com; s=arc-20160816; b=uO6ypHFFPGLIAOTJYCu5fwwrjVRzLzQH8Sy+cSC1+Ttwy55OzFqBjinZAaM8L99kJq KP8LXbiqj3k+0sosgVDlOuHEXslAV9iiqfLeRrcwIqJlcUSJ28N1CuWfd50to7aM6lKi 1a4pJr1XeIvNKR+I2oi41eOo71J8lakOJH4Pxiqx2/BcL5LOH7BNPPIAUDsv+3Cct8gH /spwdH6+yfgARgqX5C+sazipvW4+KDbQBFa6pARtgiQ+O0myDRO3324EVo+B3DDUdgKM 13/JClqIMlk6sKGIknB5XnWx4REVKw2M2EGR1Hx5scyTGPqrpZ5vXcVkrAoY2UWBWX6Q KROw== 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=uyI6HkaQBf81VfVOUjOKWiiZhjZIqYqT2AFNxOxsSHs=; b=NClOVgoGgLHxk9s601SdG/slaPI+FRJNc8bmZbJ22asdNXcoXYtwx0v88xyopjB+uf GgshK0RpCsgMDn4IF1TiujYNWmGrC3cN9kI/erLbWrppXF/58mVsNw7BV++WtmY/ChwR cBK+xcXfE0hGvKG4VaJ1wEuToKXuuN/FAEUGfiGd+v89cT8QHvavS8csG8zqBWPqQ2RY iuoAWcyZx3Cvh5aIw2DX9F9Qrqem8/q+szNFPX3J7z5jPol5T8eMIVzPyyRjqUbVVnqs aHmm3+4bBC3jjyBdS0bw/Yy9h9mt/c8obKbEUmD9LY3x2j1n/HsYF4SjHVqq0QKrn+vi ++yA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=NREXNb1h; 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 u3si6917519edq.473.2020.05.04.11.48.17; Mon, 04 May 2020 11:48:41 -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; dkim=pass header.i=@kernel.org header.s=default header.b=NREXNb1h; 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 S1732136AbgEDSHY (ORCPT + 99 others); Mon, 4 May 2020 14:07:24 -0400 Received: from mail.kernel.org ([198.145.29.99]:38086 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732104AbgEDSHU (ORCPT ); Mon, 4 May 2020 14:07:20 -0400 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 3308C205ED; Mon, 4 May 2020 18:07:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588615639; bh=YkAKodN6UufF5X2rzXlFeZr6xUI5WiB5/Lb6gaqDR/c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NREXNb1hL6BBTHFxcB3/MbCElCIA8P7NLFAwU8DPP/2TBwFMlqydab4hdeUgsoyo6 JWt6gUToNLRuYVOL2p9f/aT/wIxzbC69DK/xEDdOyYCVFbusjCeqr7j4wJ26v72Vet WT3uPBC7yn0Gp0W4Kglfq1W4YmGwSZMlNde3WUDo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, ryan_chen , Benjamin Herrenschmidt , Wolfram Sang Subject: [PATCH 5.6 63/73] i2c: aspeed: Avoid i2c interrupt status clear race condition. Date: Mon, 4 May 2020 19:58:06 +0200 Message-Id: <20200504165509.990369803@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200504165501.781878940@linuxfoundation.org> References: <20200504165501.781878940@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: ryan_chen commit c926c87b8e36dcc0ea5c2a0a0227ed4f32d0516a upstream. In AST2600 there have a slow peripheral bus between CPU and i2c controller. Therefore GIC i2c interrupt status clear have delay timing, when CPU issue write clear i2c controller interrupt status. To avoid this issue, the driver need have read after write clear at i2c ISR. Fixes: f327c686d3ba ("i2c: aspeed: added driver for Aspeed I2C") Signed-off-by: ryan_chen Acked-by: Benjamin Herrenschmidt [wsa: added Fixes tag] Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman --- drivers/i2c/busses/i2c-aspeed.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/drivers/i2c/busses/i2c-aspeed.c +++ b/drivers/i2c/busses/i2c-aspeed.c @@ -603,6 +603,7 @@ static irqreturn_t aspeed_i2c_bus_irq(in /* Ack all interrupts except for Rx done */ writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE, bus->base + ASPEED_I2C_INTR_STS_REG); + readl(bus->base + ASPEED_I2C_INTR_STS_REG); irq_remaining = irq_received; #if IS_ENABLED(CONFIG_I2C_SLAVE) @@ -645,9 +646,11 @@ static irqreturn_t aspeed_i2c_bus_irq(in irq_received, irq_handled); /* Ack Rx done */ - if (irq_received & ASPEED_I2CD_INTR_RX_DONE) + if (irq_received & ASPEED_I2CD_INTR_RX_DONE) { writel(ASPEED_I2CD_INTR_RX_DONE, bus->base + ASPEED_I2C_INTR_STS_REG); + readl(bus->base + ASPEED_I2C_INTR_STS_REG); + } spin_unlock(&bus->lock); return irq_remaining ? IRQ_NONE : IRQ_HANDLED; }