Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp2580102pxb; Sat, 28 Aug 2021 20:06:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxheuLoPCPzcBRSxiH4yZRyWHj5TiBQ0e6BeG+9pAWfczNvnDOKD+8a1LaJCIt3BYxfEmiT X-Received: by 2002:aa7:ca4b:: with SMTP id j11mr17524638edt.342.1630206415742; Sat, 28 Aug 2021 20:06:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630206415; cv=none; d=google.com; s=arc-20160816; b=TijC/cx4iTB9wY1E3MBdoKHWNCbKLPYoOamtwcbueVsnHuBWRVpw9bAr6JdHpIM2Jf ruMJ1fotAMBKpOXcH9iIeITGjbJMNg1rxWfjwCo3FMBNzBLFuMGPDQ4VhK8GOMpvtSTW wZLagymXu6Lh4M3IGHV1xgKIVp9EWFs6XGvVgIyluIXAMpDbbuEA3mYhbVk6iK8NxRAR /6cJ8X/LcUhLmkSlFS8Wat0VXknjNyxkEnZD/Pv6jOvy+A+lOjp5qMJXfu9rQznlmGAu onY0keqr/Es3Ka/e/sFsSeWmz5wbuR5XaS1JLoga0AlJGImoi3QAlaEAiClw0Qpyl68N IzTg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=keUa/kfdJ7VZ92O0OFIwr5vIaQ0WkJson6myn69p28I=; b=KEmjqCc2scSwX+1MJxeqpHNhQP7mkPaJDk4xIStzV54/oc5O+simOh4abfRMJj9seW K7um/q3aiGJwZ7FcWy17Ym6XTjorIiFgGEAJgE2uAityv9eV7ZIcRJCGEQKLA3z9u59G W8QJNgEk+PDp2CoJ6/QxcmCRmxg6KUTSmXG07Y6aw/6NJzJ1WYwZxUv7trPXGRxS4Kgf hTTtP6IxYypkRBFAVdiSRD69zu6Yfs4Q48Dzd4svIEJXPKmMyoQYvMiewlPDj1cFmuun wqq02bsQO6lV9TapOoZq2/kpw2n2OvR6+0WbK2VPj1jsE9JCJjdCIyjBwGox6TncqkOn vWvA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@megous.com header.s=mail header.b=HxffAQce; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=megous.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u15si12537816edt.211.2021.08.28.20.06.32; Sat, 28 Aug 2021 20:06:55 -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=@megous.com header.s=mail header.b=HxffAQce; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=megous.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233559AbhH2C5x (ORCPT + 99 others); Sat, 28 Aug 2021 22:57:53 -0400 Received: from vps.xff.cz ([195.181.215.36]:38356 "EHLO vps.xff.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233430AbhH2C5x (ORCPT ); Sat, 28 Aug 2021 22:57:53 -0400 X-Greylist: delayed 315 seconds by postgrey-1.27 at vger.kernel.org; Sat, 28 Aug 2021 22:57:52 EDT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megous.com; s=mail; t=1630205504; bh=E3TX1uiaCCo6JfafnOTAiv2GSkpdyPupucanyUViILw=; h=From:To:Cc:Subject:Date:From; b=HxffAQce1C4GrbdZuSfvWQ6+DfavBnHR8xKIsPIslQG3FhoFGGbRlrteInNazk00O WOkbtalW52HnlvgKym4wERSuB+ypwNPltSMgWmRct2JI+2z4PolTGC4XFkcIdjIZp2 MiEPTtMX+JdF29gbECu3Jw/gL4SQe70/odNFijmw= From: Ondrej Jirman To: Heiko Stuebner , linux-arm-kernel@lists.infradead.org (moderated list:ARM/Rockchip SoC support), linux-rockchip@lists.infradead.org (open list:ARM/Rockchip SoC support), linux-i2c@vger.kernel.org (open list:I2C SUBSYSTEM HOST DRIVERS), linux-kernel@vger.kernel.org (open list) Cc: Ondrej Jirman Subject: [PATCH] i2c: rk3x: Handle a spurious start completion interrupt flag Date: Sun, 29 Aug 2021 04:51:30 +0200 Message-Id: <20210829025130.1058877-1-megous@megous.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In a typical read transfer, start completion flag is being set after read finishes (notice ipd bit 4 being set): trasnfer poll=0 i2c start rk3x-i2c fdd40000.i2c: IRQ: state 1, ipd: 10 i2c read rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 1b i2c stop rk3x-i2c fdd40000.i2c: IRQ: state 4, ipd: 33 This causes I2C transfer being aborted in polled mode from a stop completion handler: trasnfer poll=1 i2c start rk3x-i2c fdd40000.i2c: IRQ: state 1, ipd: 10 i2c read rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 0 rk3x-i2c fdd40000.i2c: IRQ: state 2, ipd: 1b i2c stop rk3x-i2c fdd40000.i2c: IRQ: state 4, ipd: 13 i2c stop rk3x-i2c fdd40000.i2c: unexpected irq in STOP: 0x10 Clearing the START flag after read fixes the issue without any obvious side effects. This issue was dicovered on RK3566 when adding support for powering off the RK817 PMIC. Signed-off-by: Ondrej Jirman --- drivers/i2c/busses/i2c-rk3x.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c index 819ab4ee517e..02ddb237f69a 100644 --- a/drivers/i2c/busses/i2c-rk3x.c +++ b/drivers/i2c/busses/i2c-rk3x.c @@ -423,8 +423,8 @@ static void rk3x_i2c_handle_read(struct rk3x_i2c *i2c, unsigned int ipd) if (!(ipd & REG_INT_MBRF)) return; - /* ack interrupt */ - i2c_writel(i2c, REG_INT_MBRF, REG_IPD); + /* ack interrupt (read also produces a spurious START flag, clear it too) */ + i2c_writel(i2c, REG_INT_MBRF | REG_INT_START, REG_IPD); /* Can only handle a maximum of 32 bytes at a time */ if (len > 32) -- 2.33.0