From patchwork Sat Feb 22 13:38:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Peter via B4 Relay X-Patchwork-Id: 13986637 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 892EDC021B2 for ; Sat, 22 Feb 2025 13:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To: References:Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version: Subject:Date:From:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=cOb/dTldwv6tPq64op0KZoctOHrwNAzf2iqB8SOD9Ag=; b=J/BaHBP+lwHSgLM92e0nb35hdR i4d1zX9ZLM2+/VOmbiHBxy59e4a311vZ9S19uwl22F+FIIjpE4LDewmJj0wXGITynkyPXdrdTD6d9 UA2aUrwKumTuEbbwQMg3Jlh8y2IH6+i8YToGTQLaehEgFO3TpgFqSlpUGxS8u+98PolbS31KH2dlP b4+hOFG7HdRxZ+8L8mPBx3BmWNY4e/dtihLu3/ojGwH78955nHZE5Wn+3wLBrzlydTAi7xbchameG aIPYRVSO8fF1Io5utGkRvl8SWJo6zhNzwFqGCyjI+ecxPaEN8cYlUP8UPVmOhUxKkJA3Dux7q6z1T 3RkrJJiw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlpoC-000000086Wi-20ik; Sat, 22 Feb 2025 13:44:44 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlpiP-000000085z9-0WKD for linux-arm-kernel@lists.infradead.org; Sat, 22 Feb 2025 13:38:46 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id CE81E5C57DB; Sat, 22 Feb 2025 13:38:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 52C26C4CEE6; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740231522; bh=yyBin1h0CvRmrVfUw16qTKb6+CAFkoi2GN8BdSp/Ys8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=VjRifRoVnEdkqsIkzS09ngJyZvwcXIhzH8fD8rpVNqvwfgo+/OAFnvqAIobNA7Lzc dOjmyZYGlVO6Ose1Q/bpG7kM0bSZwWuY7WKdKCEUVutmqzbxmsiaRxzs0q7wnN6iRw yLnbdQ4QSOqmf0TkuLPcDbx8LJWhkNux6am4+UggTR4VOK67gyBGTKc7MRwP1zElgT gohHB+4lSJHlDabiStl/6aSAm/bdEcwYnSwtseqKloM5FfYW+CVUmPXwaqA06s3Ktr pDKuL+jdnErsTjrfnwOa++w77PJw7j1VlLt524UGxtgO1nM9dUXUE9d9EE2y2eWkAf JxWVvmBlLy86A== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41204C021B8; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) From: Sven Peter via B4 Relay Date: Sat, 22 Feb 2025 13:38:33 +0000 Subject: [PATCH 1/4] i2c: pasemi: Add registers bits and switch to BIT() MIME-Version: 1.0 Message-Id: <20250222-pasemi-fixes-v1-1-d7ea33d50c5e@svenpeter.dev> References: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> In-Reply-To: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> To: Janne Grunau , Alyssa Rosenzweig , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Andi Shyti Cc: linuxppc-dev@lists.ozlabs.org, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Sven Peter , Hector Martin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2037; i=sven@svenpeter.dev; h=from:subject:message-id; bh=iPv0XjpNaU2PSc1JHoHKcgCr0CRP3yf1b4EAPEcXwng=; b=owGbwMvMwCHmIlirolUq95LxtFoSQ/rOy9ESFaHHtpUbMr91cTRekSrY3mPm4vwl4djZsz+Kw 0rCA+o7SlkYxDgYZMUUWbbvtzd98vCN4NJNl97DzGFlAhnCwMUpABPpSWZk+Okau99t7x9PDrd7 Bewzl0+r1NyzLGjKtR6F2u6Y5ZpbHzIyzBb9undnbnzudPf6usJzQa0X5xRkCsf4CkWc3b3xodM 7JgA= X-Developer-Key: i=sven@svenpeter.dev; a=openpgp; fpr=A1E3E34A2B3C820DBC4955E5993B08092F131F93 X-Endpoint-Received: by B4 Relay for sven@svenpeter.dev/default with auth_id=167 X-Original-From: Sven Peter X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250222_053845_263139_DAFF448D X-CRM114-Status: UNSURE ( 9.10 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sven@svenpeter.dev Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Sven Peter Add the missing register bits to the defines and also switch those to use the BIT macro which is much more readable than using hardcoded masks Co-developed-by: Hector Martin Signed-off-by: Hector Martin Signed-off-by: Sven Peter --- drivers/i2c/busses/i2c-pasemi-core.c | 40 ++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index dac694a9d781..bd128ab2e2eb 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -5,6 +5,7 @@ * SMBus host driver for PA Semi PWRficient */ +#include #include #include #include @@ -26,21 +27,30 @@ #define REG_REV 0x28 /* Register defs */ -#define MTXFIFO_READ 0x00000400 -#define MTXFIFO_STOP 0x00000200 -#define MTXFIFO_START 0x00000100 -#define MTXFIFO_DATA_M 0x000000ff - -#define MRXFIFO_EMPTY 0x00000100 -#define MRXFIFO_DATA_M 0x000000ff - -#define SMSTA_XEN 0x08000000 -#define SMSTA_MTN 0x00200000 - -#define CTL_MRR 0x00000400 -#define CTL_MTR 0x00000200 -#define CTL_EN 0x00000800 -#define CTL_CLK_M 0x000000ff +#define MTXFIFO_READ BIT(10) +#define MTXFIFO_STOP BIT(9) +#define MTXFIFO_START BIT(8) +#define MTXFIFO_DATA_M GENMASK(7, 0) + +#define MRXFIFO_EMPTY BIT(8) +#define MRXFIFO_DATA_M GENMASK(7, 0) + +#define SMSTA_XIP BIT(28) +#define SMSTA_XEN BIT(27) +#define SMSTA_JMD BIT(25) +#define SMSTA_JAM BIT(24) +#define SMSTA_MTO BIT(23) +#define SMSTA_MTA BIT(22) +#define SMSTA_MTN BIT(21) +#define SMSTA_MRNE BIT(19) +#define SMSTA_MTE BIT(16) +#define SMSTA_TOM BIT(6) + +#define CTL_EN BIT(11) +#define CTL_MRR BIT(10) +#define CTL_MTR BIT(9) +#define CTL_UJM BIT(8) +#define CTL_CLK_M GENMASK(7, 0) static inline void reg_write(struct pasemi_smbus *smbus, int reg, int val) { From patchwork Sat Feb 22 13:38:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Peter via B4 Relay X-Patchwork-Id: 13986638 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 04426C021B2 for ; Sat, 22 Feb 2025 13:46:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To: References:Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version: Subject:Date:From:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=CLXAfmXaGriUIRefxyaQBd27LIBV1HDxn0UO9rquAAE=; b=3BHdkOvlRYPX0r3+GpobRwDaXY lkCDrgg0NOJDV6/3SQtsm+QHOCEAM1DrNpasvfdPvdxWazzLsTaT+1YUTslK6rE9M40d1DNg6FFKY LlGMyBgrN2JV+U4Hp6fX4vcaRNo0rbdZN97hWEJJwV/04r4d81HHjM4UKhJF6l0wO62axjAlpGdqN jH9yPZxIaD7VnStsEBcSkZXaa0UTZ+PLnyjj/ks+2dS/KZF9jUCfcxy+RwN7FND51BfTQqRu1EvU0 G9Lcu/YCC2LXwDPGf5v7l+Mqv2pJAPh6QceKH/IY+gJDn6nRf0lbZ/jYFpbz7OZfnXpt1tv7ARkXh dbEb5VYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlppe-000000086ew-1IYG; Sat, 22 Feb 2025 13:46:14 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlpiP-000000085z8-0WQt for linux-arm-kernel@lists.infradead.org; Sat, 22 Feb 2025 13:38:46 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id F05675C57DC; Sat, 22 Feb 2025 13:38:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 63EAAC4CEE8; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740231522; bh=stV9tpnov4yN5EBBC898RB20QY2wQygLqqMwvyDN5Eo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=B0yifpRAfaIfxTZ/0+9c3+UJ6qN5Dz2MYeH33+yGul4+clHOoYOKj7b62QejMT/8g S2CYW0YgBcPqT15Iel2fnamnYJtolkQujb5QiIQsPTkZdjqLWXT7CU4ksITzjNvJme 3d4WC6R1R5DAgSMl2jSpFMrFEJJBtx0cnCv/iiaAk1XbvL4U+/1lDEIgAQ3UBcvPw3 njE1qDOjvXAQliL9xTzqGJZOjKRdSCHxoWzDjLva1JB9wYfEweoMyEP4bsx9JsX2qP d6ZJpK0fstVTAsVJaPQsaRyx+bQOaO0r7zTn6AnlWTFK8XsWNWrUJuxSIBDSlNgPIs 12puhG4AUFbeg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50EF4C021B5; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) From: Sven Peter via B4 Relay Date: Sat, 22 Feb 2025 13:38:34 +0000 Subject: [PATCH 2/4] i2c: pasemi: Improve error recovery MIME-Version: 1.0 Message-Id: <20250222-pasemi-fixes-v1-2-d7ea33d50c5e@svenpeter.dev> References: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> In-Reply-To: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> To: Janne Grunau , Alyssa Rosenzweig , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Andi Shyti Cc: linuxppc-dev@lists.ozlabs.org, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Sven Peter , Hector Martin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4391; i=sven@svenpeter.dev; h=from:subject:message-id; bh=FOQIV4q7QbwGt8D9/MCWC8cZNMpith++DiclVxlmaig=; b=owGbwMvMwCHmIlirolUq95LxtFoSQ/rOyzHXHGYEMRdvvZQdf+b35HAG7jV1fXEBv+3epzBOj Pfwu3K+o5SFQYyDQVZMkWX7fnvTJw/fCC7ddOk9zBxWJpAhDFycAjCRhpmMDGfYv3fz+dwVN3j+ 47OXaKGTUe2hyf/CpdvNZfxfSR8pY2Rk6BTTbD4r61F6tmjvwZU3dq5/MKWRSXnxd41XE9lvpYp PZwYA X-Developer-Key: i=sven@svenpeter.dev; a=openpgp; fpr=A1E3E34A2B3C820DBC4955E5993B08092F131F93 X-Endpoint-Received: by B4 Relay for sven@svenpeter.dev/default with auth_id=167 X-Original-From: Sven Peter X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250222_053845_262871_6718D984 X-CRM114-Status: GOOD ( 17.77 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sven@svenpeter.dev Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Hector Martin The hardware (supposedly) has a 25ms timeout for clock stretching and the driver uses 100ms which should be plenty. The error reocvery itself is however lacking. Add handling for all the missing error condition, and better recovery in pasemi_smb_clear(). Also move the timeout to a #define since it's used in multiple places now. Signed-off-by: Hector Martin [sven: adjusted commit message after splitting the commit into two] Signed-off-by: Sven Peter --- drivers/i2c/busses/i2c-pasemi-core.c | 70 +++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index bd128ab2e2eb..770b86b92a10 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -52,6 +52,8 @@ #define CTL_UJM BIT(8) #define CTL_CLK_M GENMASK(7, 0) +#define TRANSFER_TIMEOUT_MS 100 + static inline void reg_write(struct pasemi_smbus *smbus, int reg, int val) { dev_dbg(smbus->dev, "smbus write reg %x val %08x\n", reg, val); @@ -80,23 +82,45 @@ static void pasemi_reset(struct pasemi_smbus *smbus) reinit_completion(&smbus->irq_completion); } -static void pasemi_smb_clear(struct pasemi_smbus *smbus) +static int pasemi_smb_clear(struct pasemi_smbus *smbus) { unsigned int status; + int timeout = TRANSFER_TIMEOUT_MS; status = reg_read(smbus, REG_SMSTA); + + /* First wait for the bus to go idle */ + while ((status & (SMSTA_XIP | SMSTA_JAM)) && timeout--) { + msleep(1); + status = reg_read(smbus, REG_SMSTA); + } + + if (timeout < 0) { + dev_warn(smbus->dev, "Bus is still stuck (status 0x%08x)\n", status); + return -EIO; + } + + /* If any badness happened or there is data in the FIFOs, reset the FIFOs */ + if ((status & (SMSTA_MRNE | SMSTA_JMD | SMSTA_MTO | SMSTA_TOM | SMSTA_MTN | SMSTA_MTA)) || + !(status & SMSTA_MTE)) + pasemi_reset(smbus); + + /* Clear the flags */ reg_write(smbus, REG_SMSTA, status); + + return 0; } static int pasemi_smb_waitready(struct pasemi_smbus *smbus) { - int timeout = 100; + int timeout = TRANSFER_TIMEOUT_MS; unsigned int status; if (smbus->use_irq) { reinit_completion(&smbus->irq_completion); - reg_write(smbus, REG_IMASK, SMSTA_XEN | SMSTA_MTN); - wait_for_completion_timeout(&smbus->irq_completion, msecs_to_jiffies(100)); + /* XEN should be set when a transaction terminates, whether due to error or not */ + reg_write(smbus, REG_IMASK, SMSTA_XEN); + wait_for_completion_timeout(&smbus->irq_completion, msecs_to_jiffies(timeout)); reg_write(smbus, REG_IMASK, 0); status = reg_read(smbus, REG_SMSTA); } else { @@ -107,16 +131,36 @@ static int pasemi_smb_waitready(struct pasemi_smbus *smbus) } } - /* Got NACK? */ - if (status & SMSTA_MTN) - return -ENXIO; + /* Controller timeout? */ + if (status & SMSTA_TOM) { + dev_warn(smbus->dev, "Controller timeout, status 0x%08x\n", status); + return -EIO; + } - if (timeout < 0) { - dev_warn(smbus->dev, "Timeout, status 0x%08x\n", status); - reg_write(smbus, REG_SMSTA, status); + /* Peripheral timeout? */ + if (status & SMSTA_MTO) { + dev_warn(smbus->dev, "Peripheral timeout, status 0x%08x\n", status); return -ETIME; } + /* Still stuck in a transaction? */ + if (status & SMSTA_XIP) { + dev_warn(smbus->dev, "Bus stuck, status 0x%08x\n", status); + return -EIO; + } + + /* Arbitration loss? */ + if (status & SMSTA_MTA) { + dev_warn(smbus->dev, "Arbitration loss, status 0x%08x\n", status); + return -EBUSY; + } + + /* Got NACK? */ + if (status & SMSTA_MTN) { + dev_warn(smbus->dev, "NACK, status 0x%08x\n", status); + return -ENXIO; + } + /* Clear XEN */ reg_write(smbus, REG_SMSTA, SMSTA_XEN); @@ -177,7 +221,8 @@ static int pasemi_i2c_xfer(struct i2c_adapter *adapter, struct pasemi_smbus *smbus = adapter->algo_data; int ret, i; - pasemi_smb_clear(smbus); + if (pasemi_smb_clear(smbus)) + return -EIO; ret = 0; @@ -200,7 +245,8 @@ static int pasemi_smb_xfer(struct i2c_adapter *adapter, addr <<= 1; read_flag = read_write == I2C_SMBUS_READ; - pasemi_smb_clear(smbus); + if (pasemi_smb_clear(smbus)) + return -EIO; switch (size) { case I2C_SMBUS_QUICK: From patchwork Sat Feb 22 13:38:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Peter via B4 Relay X-Patchwork-Id: 13986635 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 782DAC021B2 for ; Sat, 22 Feb 2025 13:41:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To: References:Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version: Subject:Date:From:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=SO0Fk6BtwRVGlHqt3kYa0/V5Y1iTIzUN0pe77N3ab/M=; b=UgKdkv9UaFIeZTYyXY+B4+KErK oJQz1HGzLk8SEwRIndsRNL/yYbs7/CWuP2HYvlXpNbtNJnIMv8U0/G5A86VePZgI1/ey9jsj0LLpO RH5RYD5Mo3npbnrKW8EVf7TMv4z/jlspQqoTSlYPlnJVtlJfoqntGl6Bpl2mYGacXyUHC/jhEeug6 LTalSP4dVow0YpK12/4WGdBSa/2yWy/0TGT+5X5iV/Cfz739VFIzG1E+VBOAWj9M5XtESTVGvYaR8 2D8y0Fdc7tJM+TLk9g43nFLxmxdxI1Ud85P/OsIxuk8kn0F/0iSGGYASRtEjTuxcf570rUSF+KQGg KqDixE6Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlplJ-000000086Ig-0XlP; Sat, 22 Feb 2025 13:41:45 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlpiN-000000085yx-3uyD for linux-arm-kernel@lists.infradead.org; Sat, 22 Feb 2025 13:38:43 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id BAC2861159; Sat, 22 Feb 2025 13:38:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 6D15FC4CEEA; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740231522; bh=3b399MgkPbalzkt0UKL/iAOTcLxAkop81OzJJhuZ+Qw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=s4q+Ybtj7eNZQ0gHWEM4mrhT5OZ5IHP4VQg29ucZqQ7rG2UtOHhHajlwxnaesYENz NoQogjKJVa3BpJPJFh7YkRsv4WhDpiMXmGZPRMGFwCbNd8+zgBf6wfERZ1itsxyXQ0 XFnKFUrhnGHqb0Z1/FcjlQOkXZkTcz8LmRrlxzqccHYi9ZBrA0YNZGPr6TW2kJgGbD Esm97bCU05N+ABKPtOl10s3g/kmWCg9bmi1Urpm0+XWXrnGU/46ZVMRHI15JVwIWVl XilqBoMGVdrBNkHE0xllGmfOY/M26Kkg1UDXHSf214+hRcSCALiYdMqz8zogTOvt7f 8/RJZgv2qb8lw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 60716C021BB; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) From: Sven Peter via B4 Relay Date: Sat, 22 Feb 2025 13:38:35 +0000 Subject: [PATCH 3/4] i2c: pasemi: Enable the unjam machine MIME-Version: 1.0 Message-Id: <20250222-pasemi-fixes-v1-3-d7ea33d50c5e@svenpeter.dev> References: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> In-Reply-To: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> To: Janne Grunau , Alyssa Rosenzweig , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Andi Shyti Cc: linuxppc-dev@lists.ozlabs.org, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Sven Peter , Hector Martin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1147; i=sven@svenpeter.dev; h=from:subject:message-id; bh=2vIJw3C8UuzlR0vDYIDEMzK/yjJe3TCpkfiUQCAlb68=; b=owGbwMvMwCHmIlirolUq95LxtFoSQ/rOy3GzHj/dEP3xtk/58bMGC1Ys+l3dfPtjVbnC09wJz A+sr00M6ChlYRDjYJAVU2TZvt/e9MnDN4JLN116DzOHlQlkCAMXpwBMpPMyI8OxM6p5HBcKLa7/ X7/syeXHrYtiGiofibCW1W198dqFXfQ5w19Z0ZporoRI5wvvvpebbs1Z9PQ7Z0SBR/BzDuu5TXW zL3ABAA== X-Developer-Key: i=sven@svenpeter.dev; a=openpgp; fpr=A1E3E34A2B3C820DBC4955E5993B08092F131F93 X-Endpoint-Received: by B4 Relay for sven@svenpeter.dev/default with auth_id=167 X-Original-From: Sven Peter X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sven@svenpeter.dev Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Hector Martin The I2C bus can get stuck under some conditions (desync between controller and device). The pasemi controllers include an unjam feature that is enabled on reset, but was being disabled by the driver. Keep it enabled by explicitly setting the UJM bit in the CTL register. This should help recover the bus from certain conditions, which would otherwise remain stuck forever. Signed-off-by: Hector Martin Signed-off-by: Sven Peter --- drivers/i2c/busses/i2c-pasemi-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index 770b86b92a10..8f0ba975172f 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -73,7 +73,7 @@ static inline int reg_read(struct pasemi_smbus *smbus, int reg) static void pasemi_reset(struct pasemi_smbus *smbus) { - u32 val = (CTL_MTR | CTL_MRR | (smbus->clk_div & CTL_CLK_M)); + u32 val = (CTL_MTR | CTL_MRR | CTL_UJM | (smbus->clk_div & CTL_CLK_M)); if (smbus->hw_rev >= 6) val |= CTL_EN; From patchwork Sat Feb 22 13:38:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sven Peter via B4 Relay X-Patchwork-Id: 13986636 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C0DCFC021B2 for ; Sat, 22 Feb 2025 13:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To: References:Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version: Subject:Date:From:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=s168HX2y2tjF7cTtvq4FItoQMlDg2AHXO+wYtF4ZRYA=; b=taeSW70QalVjngDxnGtM23E0X6 jnurlm9MzDyWKosBXeQTeAdt44jizaZNoRmoPt32lX1sGwRxnhWUth5a/iPbvC3HODF2F2VTho8kL upJJYAfy0jfb6zmyKDDmXvPQnR+tPNAJ4IZ+vOZCA9+kO3uWfom1vtXxl7tGxpcJp89S6I9DQaYV/ y8AOysUIzRtTP/S6gRS15Lra+vtaLNP8HZiASWpHP9I9b2ETcorinxC/d+p4fv2wj0fMCgpXvIdEG mGbKgCrYuVADRvg2XBf1LyOgviD19q1wC5FBm+PhUuA4tP/6dcZuPt8HU5+gBo5rT9AWNwBBPE5MO oJzE4wwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlpmk-000000086Qh-3R4a; Sat, 22 Feb 2025 13:43:14 +0000 Received: from tor.source.kernel.org ([2600:3c04::f03c:95ff:fe5e:7468]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlpiO-000000085z2-0XM2 for linux-arm-kernel@lists.infradead.org; Sat, 22 Feb 2025 13:38:44 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id BDA736115C; Sat, 22 Feb 2025 13:38:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPS id 7F325C4CEEC; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740231522; bh=8Zkxgch9g5+DTeW63q//4eNTvjzsWBLujizGZ2Rb/XA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=nC6VFvdjzBsZDWH5RX70Kx6s9SAooZ8ghZyHjSSeXQPwlCjS5qFhlH+WnzNANaYf6 26OHYklHnhoasCg2j2Xx4DwkpoQ4kRotv7CQN0HcWZlH/uW+sBDpPha0+8nQAq5V2X RXy6gk8iE0C66rvbffgrw0PaKw0/NJXk5og/r2Zfx7c7JYCy4mpXOz13sP0J23+5sT SjGYQolx0YS0O61HXeHM/9FKywwA+0L4fY4V5MaV7YzoTNxc77PoXffOUcznP+T5PS goPAwG3EU+EHSPGsqBz0ghfJqPn3OsxAm7n0kfTOlFpDL1QDtA97eP3lgyj37g7N/u bC5UMNCWiD2hA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74951C021B8; Sat, 22 Feb 2025 13:38:42 +0000 (UTC) From: Sven Peter via B4 Relay Date: Sat, 22 Feb 2025 13:38:36 +0000 Subject: [PATCH 4/4] i2c: pasemi: Log bus reset causes MIME-Version: 1.0 Message-Id: <20250222-pasemi-fixes-v1-4-d7ea33d50c5e@svenpeter.dev> References: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> In-Reply-To: <20250222-pasemi-fixes-v1-0-d7ea33d50c5e@svenpeter.dev> To: Janne Grunau , Alyssa Rosenzweig , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , Naveen N Rao , Andi Shyti Cc: linuxppc-dev@lists.ozlabs.org, asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Sven Peter , Hector Martin X-Mailer: b4 0.13.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1852; i=sven@svenpeter.dev; h=from:subject:message-id; bh=Jxw9FakomFtq1Asfv39ujqR2viJkk3GlzvSkFwhw82g=; b=owGbwMvMwCHmIlirolUq95LxtFoSQ/rOy/G9bPs878o/+CTRkbdfmm/Lhezdx5g13m4KbKiT/ 8G38L5BRykLgxgHg6yYIsv2/famTx6+EVy66dJ7mDmsTCBDGLg4BWAiGxQZ/qnyVAicXbnM/M1T hl+P9OxCS5f+WvFccDXf9t2Pfm+YK5DG8D+rcuO/gvTpxdKxP2UqBZRYb+95m3Jgi/zta3tq3zI JZbIAAA== X-Developer-Key: i=sven@svenpeter.dev; a=openpgp; fpr=A1E3E34A2B3C820DBC4955E5993B08092F131F93 X-Endpoint-Received: by B4 Relay for sven@svenpeter.dev/default with auth_id=167 X-Original-From: Sven Peter X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sven@svenpeter.dev Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Hector Martin This ensures we get all information we need to debug issues when users forward us their logs. Signed-off-by: Hector Martin Signed-off-by: Sven Peter --- drivers/i2c/busses/i2c-pasemi-core.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/busses/i2c-pasemi-core.c b/drivers/i2c/busses/i2c-pasemi-core.c index 8f0ba975172f..ae0181a76470 100644 --- a/drivers/i2c/busses/i2c-pasemi-core.c +++ b/drivers/i2c/busses/i2c-pasemi-core.c @@ -21,6 +21,7 @@ /* Register offsets */ #define REG_MTXFIFO 0x00 #define REG_MRXFIFO 0x04 +#define REG_XFSTA 0x0c #define REG_SMSTA 0x14 #define REG_IMASK 0x18 #define REG_CTL 0x1c @@ -84,7 +85,7 @@ static void pasemi_reset(struct pasemi_smbus *smbus) static int pasemi_smb_clear(struct pasemi_smbus *smbus) { - unsigned int status; + unsigned int status, xfstatus; int timeout = TRANSFER_TIMEOUT_MS; status = reg_read(smbus, REG_SMSTA); @@ -95,15 +96,21 @@ static int pasemi_smb_clear(struct pasemi_smbus *smbus) status = reg_read(smbus, REG_SMSTA); } + xfstatus = reg_read(smbus, REG_XFSTA); + if (timeout < 0) { - dev_warn(smbus->dev, "Bus is still stuck (status 0x%08x)\n", status); + dev_warn(smbus->dev, "Bus is still stuck (status 0x%08x xfstatus 0x%08x)\n", + status, xfstatus); return -EIO; } /* If any badness happened or there is data in the FIFOs, reset the FIFOs */ if ((status & (SMSTA_MRNE | SMSTA_JMD | SMSTA_MTO | SMSTA_TOM | SMSTA_MTN | SMSTA_MTA)) || - !(status & SMSTA_MTE)) + !(status & SMSTA_MTE)) { + dev_warn(smbus->dev, "Issuing reset due to status 0x%08x (xfstatus 0x%08x)\n", + status, xfstatus); pasemi_reset(smbus); + } /* Clear the flags */ reg_write(smbus, REG_SMSTA, status);