All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: "Wolfgang Mües" <wolfgang.mues@auerswald.de>
Cc: Pierre Ossman <drzeus@drzeus.cx>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Matt Fleming" <matt@console-pimps.org>,
	"Mike Frysinger" <vapier.adi@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/7 revised] mmc_spi: adjust for delayed data token response
Date: Mon, 16 Mar 2009 12:37:36 -0700	[thread overview]
Message-ID: <200903161237.36301.david-b@pacbell.net> (raw)
In-Reply-To: <200903161223.03402.wolfgang.mues@auerswald.de>

On Monday 16 March 2009, Wolfgang Mües wrote:
> From: Wolfgang Muees <wolfgang.mues@auerswald.de>
> 
> o some cards are not able to send the data token in time, but
>   miss the time frame for some bits(!). So synchronize to the
>   start of the token.
> 
> Signed-off-by: Wolfgang Muees <wolfgang.mues@auerswald.de>

Acked-by: David Brownell <dbrownell@users.sourceforge.net>


> ---
> 
> This is the revised patch #3, to apply after the already accepted 
> patches #1,2 and #5. It contains the bugfix and a better explanation
> of what is going on here.
> 
> diff -uprN 2_6_29_rc7_patch125/drivers/mmc/host/mmc_spi.c 2_6_29_rc7_patch1253/drivers/mmc/host/mmc_spi.c
> --- 2_6_29_rc7_patch125/drivers/mmc/host/mmc_spi.c	2009-03-11 13:00:06.000000000 +0100
> +++ 2_6_29_rc7_patch1253/drivers/mmc/host/mmc_spi.c	2009-03-16 12:15:36.000000000 +0100
> @@ -612,6 +612,7 @@ mmc_spi_writeblock(struct mmc_spi_host *
>  	struct spi_device	*spi = host->spi;
>  	int			status, i;
>  	struct scratch		*scratch = host->data;
> +	u32			pattern;
>  
>  	if (host->mmc->use_spi_crc)
>  		scratch->crc_val = cpu_to_be16(
> @@ -639,8 +640,27 @@ mmc_spi_writeblock(struct mmc_spi_host *
>  	 * doesn't necessarily tell whether the write operation succeeded;
>  	 * it just says if the transmission was ok and whether *earlier*
>  	 * writes succeeded; see the standard.
> -	 */
> -	switch (SPI_MMC_RESPONSE_CODE(scratch->status[0])) {
> +	 *
> +	 * In practice, there are (even modern SDHC-)cards which are late
> +	 * in sending the response, and miss the time frame by a few bits,
> +	 * so we have to cope with this situation and check the response 
> +	 * bit-by-bit. Arggh!!!
> +	 */
> +	pattern  = scratch->status[0] << 24;
> +	pattern |= scratch->status[1] << 16;
> +	pattern |= scratch->status[2] << 8;
> +	pattern |= scratch->status[3];
> +
> +	/* First 3 bit of pattern are undefined */
> +	pattern |= 0xE0000000;
> +
> +	/* left-adjust to leading 0 bit */
> +	while (pattern & 0x80000000)
> +		pattern <<= 1;
> +	/* right-adjust for pattern matching. Code is in bit 4..0 now. */
> +	pattern >>= 27;
> +
> +	switch (pattern) {
>  	case SPI_RESPONSE_ACCEPTED:
>  		status = 0;
>  		break;
> @@ -671,8 +691,9 @@ mmc_spi_writeblock(struct mmc_spi_host *
>  	/* Return when not busy.  If we didn't collect that status yet,
>  	 * we'll need some more I/O.
>  	 */
> -	for (i = 1; i < sizeof(scratch->status); i++) {
> -		if (scratch->status[i] != 0)
> +	for (i = 4; i < sizeof(scratch->status); i++) {
> +		/* card is non-busy if the most recent bit is 1 */
> +		if (scratch->status[i] & 0x01)
>  			return 0;
>  	}
>  	return mmc_spi_wait_unbusy(host, timeout);
> 
> ---
> regards
> 
> i. A. Wolfgang Mües
> -- 
> Auerswald GmbH & Co. KG
> Hardware Development
> Telefon: +49 (0)5306 9219 0
> Telefax: +49 (0)5306 9219 94 
> E-Mail: Wolfgang.Mues@Auerswald.de
> Web: http://www.auerswald.de
>  
> --------------------------------------------------------------
> Auerswald GmbH & Co. KG, Vor den Grashöfen 1, 38162 Cremlingen
> Registriert beim AG Braunschweig HRA 13289
> p.h.G Auerswald Geschäftsführungsges. mbH
> Registriert beim AG Braunschweig HRB 7463
> Geschäftsführer: Dipl-Ing. Gerhard Auerswald
> 
> 




  reply	other threads:[~2009-03-16 19:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-16 11:23 [PATCH 3/7 revised] mmc_spi: adjust for delayed data token response Wolfgang Mües
2009-03-16 19:37 ` David Brownell [this message]
2009-03-22 14:47 ` Pierre Ossman

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=200903161237.36301.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=akpm@linux-foundation.org \
    --cc=drzeus@drzeus.cx \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt@console-pimps.org \
    --cc=vapier.adi@gmail.com \
    --cc=wolfgang.mues@auerswald.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: 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.