From: Sultan Alsawaf <sultan@kerneltoast.com>
To: linux-i2c@vger.kernel.org
Cc: jikos@kernel.org, aaron.ma@canonical.com, admin@kryma.net,
andriy.shevchenko@linux.intel.com, benjamin.tissoires@redhat.com,
hdegoede@redhat.com, hn.chen@weidahitech.com,
jarkko.nikula@linux.intel.com, kai.heng.feng@canonical.com,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
mika.westerberg@linux.intel.com, vicamo.yang@canonical.com,
wsa@kernel.org, Sultan Alsawaf <sultan@kerneltoast.com>
Subject: [PATCH v2 2/4] i2c: designware: Ensure tx_buf_len is nonzero for SMBus block reads
Date: Wed, 16 Sep 2020 22:22:54 -0700 [thread overview]
Message-ID: <20200917052256.5770-3-sultan@kerneltoast.com> (raw)
In-Reply-To: <20200917052256.5770-1-sultan@kerneltoast.com>
From: Sultan Alsawaf <sultan@kerneltoast.com>
The point of adding a byte to len in i2c_dw_recv_len() is to make sure
that tx_buf_len is nonzero, so that i2c_dw_xfer_msg() can let the i2c
controller know that the i2c transaction can end. Otherwise, the i2c
controller will think that the transaction can never end for block
reads, which results in the stop-detection bit never being set and thus
the transaction timing out.
Adding a byte to len is not a reliable way to do this though; sometimes
it lets tx_buf_len become zero, which results in the scenario described
above. Therefore, just directly ensure tx_buf_len cannot be zero to fix
the issue.
Fixes: c3ae106050b9 ("i2c: designware: Implement support for SMBus block read and write")
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
---
drivers/i2c/busses/i2c-designware-master.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index d78f48ca4886..22f28516bca7 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -395,8 +395,9 @@ i2c_dw_recv_len(struct dw_i2c_dev *dev, u8 len)
* Adjust the buffer length and mask the flag
* after receiving the first byte.
*/
- len += (flags & I2C_CLIENT_PEC) ? 2 : 1;
- dev->tx_buf_len = len - min_t(u8, len, dev->rx_outstanding);
+ if (flags & I2C_CLIENT_PEC)
+ len++;
+ dev->tx_buf_len = len - min_t(u8, len - 1, dev->rx_outstanding);
msgs[dev->msg_read_idx].len = len;
msgs[dev->msg_read_idx].flags &= ~I2C_M_RECV_LEN;
--
2.28.0
next prev parent reply other threads:[~2020-09-17 5:23 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-17 5:22 [PATCH v2 0/4] i2c-hid: Save power by reducing i2c xfers with block reads Sultan Alsawaf
2020-09-17 5:22 ` [PATCH v2 1/4] i2c: designware: Fix transfer failures for invalid SMBus " Sultan Alsawaf
2020-09-17 5:22 ` Sultan Alsawaf [this message]
2020-09-17 12:47 ` [PATCH v2 2/4] i2c: designware: Ensure tx_buf_len is nonzero for " Andy Shevchenko
2020-09-17 13:44 ` Jarkko Nikula
2020-09-17 14:45 ` Andy Shevchenko
2020-09-17 5:22 ` [PATCH v2 3/4] i2c: designware: Allow SMBus block reads up to 255 bytes in length Sultan Alsawaf
2020-09-17 20:57 ` Wolfram Sang
2020-09-17 23:12 ` Sultan Alsawaf
2020-09-17 5:22 ` [PATCH v2 4/4] HID: i2c-hid: Use block reads when possible to save power Sultan Alsawaf
2020-09-17 14:02 ` [PATCH v2 0/4] i2c-hid: Save power by reducing i2c xfers with block reads Andy Shevchenko
2020-09-23 13:59 ` Jarkko Nikula
2020-09-22 9:19 ` Jiri Kosina
2020-09-22 11:36 ` Wolfram Sang
2020-09-22 19:59 ` Jiri Kosina
2020-09-23 6:02 ` Sultan Alsawaf
2020-10-16 11:16 ` Hans de Goede
2020-10-16 15:24 ` Sultan Alsawaf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200917052256.5770-3-sultan@kerneltoast.com \
--to=sultan@kerneltoast.com \
--cc=aaron.ma@canonical.com \
--cc=admin@kryma.net \
--cc=andriy.shevchenko@linux.intel.com \
--cc=benjamin.tissoires@redhat.com \
--cc=hdegoede@redhat.com \
--cc=hn.chen@weidahitech.com \
--cc=jarkko.nikula@linux.intel.com \
--cc=jikos@kernel.org \
--cc=kai.heng.feng@canonical.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=vicamo.yang@canonical.com \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).