From: Sonic Zhang <sonic.adi@gmail.com> To: Wolfram Sang <w.sang@pengutronix.de>, Ben Dooks <ben-linux@fluff.org> Cc: <linux-i2c@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>, <uclinux-dist-devel@blackfin.uclinux.org>, Michael Hennerich <michael.hennerich@analog.com>, Sonic Zhang <sonic.zhang@analog.com> Subject: [PATCH 1/8 v2] i2c: i2c-bfin-twi: Illegal i2c bus lock upon certain transfer scenarios. Date: Wed, 13 Jun 2012 16:22:40 +0800 [thread overview] Message-ID: <1339575767-22985-1-git-send-email-sonic.adi@gmail.com> (raw) From: Michael Hennerich <michael.hennerich@analog.com> For transfer counts > 255 bytes i2c-bfin-twi sets the data transfer counter DCNT to 0xFF indicating unlimited transfers. It then uses a flag iface->manual_stop to manually issue the STOP condition, once the required amount of bytes are received. We found that on I2C receive operation issuing the STOP condition together with a FULL RCV FIFO (2bytes) will cause SDA and SCL be constantly driven low. Temporary workaround until further investigation: Discard the RCV FIFO before issuing the STOP condition. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> --- drivers/i2c/busses/i2c-bfin-twi.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/drivers/i2c/busses/i2c-bfin-twi.c b/drivers/i2c/busses/i2c-bfin-twi.c index cdb59e5..33031f0 100644 --- a/drivers/i2c/busses/i2c-bfin-twi.c +++ b/drivers/i2c/busses/i2c-bfin-twi.c @@ -131,6 +131,10 @@ static void bfin_twi_handle_interrupt(struct bfin_twi_iface *iface, iface->transPtr++; iface->readNum--; } else if (iface->manual_stop) { + /* Temporary workaround to avoid possible bus stall - + * Flush FIFO before issuing the STOP condition + */ + read_RCV_DATA16(iface); write_MASTER_CTL(iface, read_MASTER_CTL(iface) | STOP); } else if (iface->cur_mode == TWI_I2C_MODE_REPEAT && -- 1.7.0.4
WARNING: multiple messages have this Message-ID (diff)
From: Sonic Zhang <sonic.adi-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> To: Wolfram Sang <w.sang-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>, Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org> Cc: uclinux-dist-devel-ZG0+EudsQA8dtHy/vicBwGD2FQJk+8+b@public.gmane.org, linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Michael Hennerich <michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org>, LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> Subject: [PATCH 1/8 v2] i2c: i2c-bfin-twi: Illegal i2c bus lock upon certain transfer scenarios. Date: Wed, 13 Jun 2012 16:22:40 +0800 [thread overview] Message-ID: <1339575767-22985-1-git-send-email-sonic.adi@gmail.com> (raw) From: Michael Hennerich <michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org> For transfer counts > 255 bytes i2c-bfin-twi sets the data transfer counter DCNT to 0xFF indicating unlimited transfers. It then uses a flag iface->manual_stop to manually issue the STOP condition, once the required amount of bytes are received. We found that on I2C receive operation issuing the STOP condition together with a FULL RCV FIFO (2bytes) will cause SDA and SCL be constantly driven low. Temporary workaround until further investigation: Discard the RCV FIFO before issuing the STOP condition. Signed-off-by: Michael Hennerich <michael.hennerich-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org> Signed-off-by: Sonic Zhang <sonic.zhang-OyLXuOCK7orQT0dZR+AlfA@public.gmane.org> --- drivers/i2c/busses/i2c-bfin-twi.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/drivers/i2c/busses/i2c-bfin-twi.c b/drivers/i2c/busses/i2c-bfin-twi.c index cdb59e5..33031f0 100644 --- a/drivers/i2c/busses/i2c-bfin-twi.c +++ b/drivers/i2c/busses/i2c-bfin-twi.c @@ -131,6 +131,10 @@ static void bfin_twi_handle_interrupt(struct bfin_twi_iface *iface, iface->transPtr++; iface->readNum--; } else if (iface->manual_stop) { + /* Temporary workaround to avoid possible bus stall - + * Flush FIFO before issuing the STOP condition + */ + read_RCV_DATA16(iface); write_MASTER_CTL(iface, read_MASTER_CTL(iface) | STOP); } else if (iface->cur_mode == TWI_I2C_MODE_REPEAT && -- 1.7.0.4
next reply other threads:[~2012-06-13 8:30 UTC|newest] Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-06-13 8:22 Sonic Zhang [this message] 2012-06-13 8:22 ` [PATCH 1/8 v2] i2c: i2c-bfin-twi: Illegal i2c bus lock upon certain transfer scenarios Sonic Zhang 2012-06-13 8:22 ` [PATCH 2/8 v2] i2c: i2c-bfin-twi: Improve the patch for bug "Illegal i2c bus lock upon certain transfer scenarios" Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-06-13 8:22 ` [PATCH 3/8 v2] i2c: i2c-bfin-twi: Break dead waiting loop if i2c device misbehaves Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-06-13 8:22 ` [PATCH 4/8 v2] i2c: i2c-bfin-twi: Tighten condition when failing I2C transfer if MEN bit is reset unexpectedly Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-07-13 6:31 ` Wolfram Sang 2012-07-13 6:31 ` Wolfram Sang 2012-06-13 8:22 ` [PATCH 5/8 v2] i2c:i2c-bfin-twi: TWI fails to restart next transfer in high system load Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-07-13 6:38 ` Wolfram Sang 2012-07-13 6:38 ` Wolfram Sang 2012-06-13 8:22 ` [PATCH 6/8 v2] i2c:i2c-bfin-twi: include twi head file Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-06-13 8:22 ` [PATCH 7/8 v2] i2c: i2c-bfin-twi: Move TWI peripheral pin request array to platform data Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-06-13 8:22 ` [PATCH 8/8 v2] i2c: i2c-bfin-twi: Move blackfin TWI register access Macro to head file Sonic Zhang 2012-06-13 8:22 ` Sonic Zhang 2012-07-13 6:31 ` [PATCH 1/8 v2] i2c: i2c-bfin-twi: Illegal i2c bus lock upon certain transfer scenarios Wolfram Sang
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=1339575767-22985-1-git-send-email-sonic.adi@gmail.com \ --to=sonic.adi@gmail.com \ --cc=ben-linux@fluff.org \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=michael.hennerich@analog.com \ --cc=sonic.zhang@analog.com \ --cc=uclinux-dist-devel@blackfin.uclinux.org \ --cc=w.sang@pengutronix.de \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.