From: Sebastian Heutling <heutling-U9zb0o/1OQCELgA04lAiVw@public.gmane.org>
To: dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: [PATCH 1/1] spi: Fix "not ready" timeout after write in at25
Date: Mon, 08 Jun 2009 11:57:19 +0200 [thread overview]
Message-ID: <4A2CE07F.2060302@who-ing.de> (raw)
Under certain circumstances msleep(1) within the loop, which waits
for the EEPROM to be finished, might take longer than the timeout.
On the next loop the status register might return to be ready and
therefore the loop finishes. The following check now tests if
a timeout occurred and if so returns an error although the device
reported to be finished.
This fix replaces testing the occurrence of the timeout by testing
the "not ready" bit in the status register.
The patch is against 2.6.29.2.
Signed-off-by: Sebastian Heutling <heutling-U9zb0o/1OQCELgA04lAiVw@public.gmane.org>
---
drivers/misc/eeprom/at25.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
index 290dbe9..ea83604 100644
--- a/drivers/misc/eeprom/at25.c
+++ b/drivers/misc/eeprom/at25.c
@@ -160,6 +160,7 @@ at25_ee_write(struct at25_data *at25, char *buf,
loff_t off, size_t count)
bounce[0] = AT25_WRITE;
mutex_lock(&at25->lock);
do {
+ int sr;
unsigned long timeout, retries;
unsigned segment;
unsigned offset = (unsigned) off;
@@ -205,7 +206,6 @@ at25_ee_write(struct at25_data *at25, char *buf,
loff_t off, size_t count)
timeout = jiffies + msecs_to_jiffies(EE_TIMEOUT);
retries = 0;
do {
- int sr;
sr = spi_w8r8(at25->spi, AT25_RDSR);
if (sr < 0 || (sr & AT25_SR_nRDY)) {
@@ -219,7 +219,7 @@ at25_ee_write(struct at25_data *at25, char *buf,
loff_t off, size_t count)
break;
} while (retries++ < 3 || time_before_eq(jiffies, timeout));
- if (time_after(jiffies, timeout)) {
+ if ((sr < 0) || (sr & AT25_SR_nRDY)) {
dev_err(&at25->spi->dev,
"write %d bytes offset %d, "
"timeout after %u msecs\n",
--
1.6.3.2
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises
looking to deploy the next generation of Solaris that includes the latest
innovations from Sun and the OpenSource community. Download a copy and
enjoy capabilities such as Networking, Storage and Virtualization.
Go to: http://p.sf.net/sfu/opensolaris-get
next reply other threads:[~2009-06-08 9:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-08 9:57 Sebastian Heutling [this message]
[not found] ` <4A2CE07F.2060302-U9zb0o/1OQCELgA04lAiVw@public.gmane.org>
2009-07-03 1:48 ` [PATCH 1/1] spi: Fix "not ready" timeout after write in at25 David Brownell
-- strict thread matches above, loose matches on Subject: below --
2009-07-03 7:10 Sebastian Heutling
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=4A2CE07F.2060302@who-ing.de \
--to=heutling-u9zb0o/1oqcelga04laivw@public.gmane.org \
--cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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 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.