Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp2103299rdb; Thu, 7 Dec 2023 19:57:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IG7xc8j3ky7c628XGB/evN0VVnikf4919tAEKxfKvw9Vv0D+yR8bgy+JGd4bzY9bbwfw3xP X-Received: by 2002:a05:6a20:8f1a:b0:190:1460:731d with SMTP id b26-20020a056a208f1a00b001901460731dmr1757408pzk.32.1702007827120; Thu, 07 Dec 2023 19:57:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702007827; cv=none; d=google.com; s=arc-20160816; b=Xpe2oxSciODhzpBuNtHTp7EoIXWHPbv6mVSCF7KcoNd8ul19FqGUfelrU6SAEA31mm 2Z0DXn82lFPATFwZG7rkU5KNsLRNjwCbqGgcqWS7kKta+KCC2Z6pY+JjRVLPP6TH4ilu Ntx1Fs2N2dA6VrhLCzTzsPtZKTDe+YWIvn67YidSl+0tDqyirNNS4qaua8TUPFcyJQAY syPEce/ikkAHy3ozWrqitvVwViU4LUpyzED9TEpJV0OmdGHiPMK+8lyeeluFugn6+HZp IdSp35+l8k5noGWeDz9ej8XkBi8H1BEGsnXYoc2Zq0NXm1zNv/GROOyLoCxDznSO0lda Xm5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=tyllIWdZHFdzvGcGSWMb1b2dzbhWG0Dcolc/GscISJs=; fh=yDkQzEl6IxZLQSJVtYl4ZVgHjrQZ2Js7dKd11NaUo5c=; b=tvEdYhApFU5KU+GeNwjSZZX4sFcm30S2QmjCLjneyL0f13eLc3+7IB1qhkQReRacZ2 J78AUJzulA6I2BbzstLHjFGqHhDlJwY7R9HTpmLwSXlwjrmNl4RzPkye0sXZLEKGvKue P6QDhTA085Q2RTfVnZcZIh9FPLNti9YqcIpSjyzyJu99pYGAqfA4iFBJwaRW0smf32nX VO+0pvkZCVZrJipzmUc5GdW8UKOOoU7ZkAavkulQTu8kPDR4jr1arH8UeQ0WdDd5NT0N xL4pHIZ5vCFU3Cms26K84jd9sj5YB7MeIqvveqBZs9Xgk+lfLS7i8VitV5GmpXCto/l5 gP4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=IpkBpjVl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Return-Path: Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id j3-20020a056a00174300b006cd852a8a83si839510pfc.147.2023.12.07.19.57.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 19:57:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@codeconstruct.com.au header.s=2022a header.b=IpkBpjVl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=codeconstruct.com.au Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 7852580FE29E; Thu, 7 Dec 2023 19:57:04 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231892AbjLHD4k (ORCPT + 99 others); Thu, 7 Dec 2023 22:56:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55448 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230225AbjLHD4j (ORCPT ); Thu, 7 Dec 2023 22:56:39 -0500 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0CD3A1706; Thu, 7 Dec 2023 19:56:45 -0800 (PST) Received: from [192.168.68.112] (ppp118-210-181-59.adl-adc-lon-bras34.tpg.internode.on.net [118.210.181.59]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id E526920016; Fri, 8 Dec 2023 11:56:33 +0800 (AWST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1702007800; bh=tyllIWdZHFdzvGcGSWMb1b2dzbhWG0Dcolc/GscISJs=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=IpkBpjVlJqrjJbUQM32dDSX0YGxz6gBIhe/tBGjUEzsc8/aqUO/E57MQSLhQJmW+g HARu1kXb4P3QDUh5Jg2MiyauB8vTYbUlMHFgGCqgQJK+DltJy6AQd0+N7gPyfPTqH7 USmh9YZfNr0wzfkWYs/l9AtBgIPZhIlp490vLAPCX+oRx5vkE5mCKSdC3v/fn/jLuf S3xtdMlrNhHdpFc+PpuQkJl15BtayAhWbaq0qmGZbOcxl7xIU+7769WluDh2AkGiy+ lnvUXItICteaSiZzEKyHAZ3wE1cVuWuQcVg7wGScpPnypxaBnY9ML6O/VrzBUlHox/ snvJVTJb19R2A== Message-ID: <79ce9162faeb113ecb13efeb58d95f8a71e1a060.camel@codeconstruct.com.au> Subject: Re: [PATCH v3 1/2] i2c: aspeed: Handle the coalesced stop conditions with the start conditions. From: Andrew Jeffery To: Quan Nguyen , Brendan Higgins , Benjamin Herrenschmidt , Joel Stanley , Andi Shyti , Wolfram Sang , Jae Hyun Yoo , Guenter Roeck , linux-i2c@vger.kernel.org, openbmc@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-kernel@vger.kernel.org Cc: Cosmo Chou , Open Source Submission , Phong Vo , "Thang Q . Nguyen" Date: Fri, 08 Dec 2023 14:26:31 +1030 In-Reply-To: <20231208033142.1673232-2-quan@os.amperecomputing.com> References: <20231208033142.1673232-1-quan@os.amperecomputing.com> <20231208033142.1673232-2-quan@os.amperecomputing.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Thu, 07 Dec 2023 19:57:04 -0800 (PST) On Fri, 2023-12-08 at 10:31 +0700, Quan Nguyen wrote: > Some masters may drive the transfers with low enough latency between > the nak/stop phase of the current command and the start/address phase > of the following command that the interrupts are coalesced by the > time we process them. > Handle the stop conditions before processing SLAVE_MATCH to fix the > complaints that sometimes occur below. >=20 > "aspeed-i2c-bus 1e78a040.i2c-bus: irq handled !=3D irq. Expected > 0x00000086, but was 0x00000084" >=20 > Fixes: f9eb91350bb2 ("i2c: aspeed: added slave support for Aspeed I2C dri= ver") > Signed-off-by: Quan Nguyen > --- > v3: > + Change to handle the coalesced stop condition with the start > conditions [An= drew] > + Revised commit message [= Quan] >=20 > v2: > + Split to separate series [= Joel] > + Added the Fixes line [= Joel] > + Revised commit message [= Quan] >=20 > v1: > + First introduced in > https://lore.kernel.org/all/20210519074934.20712-1-quan@os.amperecomputin= g.com/ > --- > drivers/i2c/busses/i2c-aspeed.c | 47 ++++++++++++++++++++++----------- > 1 file changed, 31 insertions(+), 16 deletions(-) >=20 > diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-asp= eed.c > index 28e2a5fc4528..1c2a4f4c4e1b 100644 > --- a/drivers/i2c/busses/i2c-aspeed.c > +++ b/drivers/i2c/busses/i2c-aspeed.c > @@ -249,18 +249,45 @@ static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_b= us *bus, u32 irq_status) > if (!slave) > return 0; > =20 > - command =3D readl(bus->base + ASPEED_I2C_CMD_REG); > + /* > + * Handle stop conditions early, prior to SLAVE_MATCH. Some masters may= drive > + * transfers with low enough latency between the nak/stop phase of the = current > + * command and the start/address phase of the following command that th= e > + * interrupts are coalesced by the time we process them. > + */ > + if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) { > + irq_handled |=3D ASPEED_I2CD_INTR_NORMAL_STOP; > + bus->slave_state =3D ASPEED_I2C_SLAVE_STOP; > + } > =20 > - /* Slave was requested, restart state machine. */ > + if (irq_status & ASPEED_I2CD_INTR_TX_NAK && > + bus->slave_state =3D=3D ASPEED_I2C_SLAVE_READ_PROCESSED) { > + irq_handled |=3D ASPEED_I2CD_INTR_TX_NAK; > + bus->slave_state =3D ASPEED_I2C_SLAVE_STOP; > + } > + > + /* Propagate any stop conditions to the slave implementation. */ > + if (bus->slave_state =3D=3D ASPEED_I2C_SLAVE_STOP) { > + i2c_slave_event(slave, I2C_SLAVE_STOP, &value); > + bus->slave_state =3D ASPEED_I2C_SLAVE_INACTIVE; > + } > + /* If there's a reason to do a v4 then an extra empty line above the comment would be nice. But let's not get hung up on that if everyone else is happy. Thanks for the fixes! Reviewed-by: Andrew Jeffery > + * Now that we've dealt with any potentially coalesced stop conditions, > + * address any start conditions. > + */ > if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) { > irq_handled |=3D ASPEED_I2CD_INTR_SLAVE_MATCH; > bus->slave_state =3D ASPEED_I2C_SLAVE_START; > } > =20