mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] mmc: align data size for host which only supports power-of-2 block
@ 2009-03-06  3:15 Bryan Wu
  2009-03-14 20:30 ` Pierre Ossman
  0 siblings, 1 reply; 8+ messages in thread
From: Bryan Wu @ 2009-03-06  3:15 UTC (permalink / raw)
  To: drzeus-mmc; +Cc: linux-kernel, Cliff Cai, Bryan Wu

From: Cliff Cai <cliff.cai@analog.com>

Signed-off-by: Cliff Cai <cliff.cai@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
 drivers/mmc/core/core.c  |    8 +++++++-
 include/linux/mmc/host.h |    1 +
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index df6ce4a..15119df 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -321,7 +321,13 @@ unsigned int mmc_align_data_size(struct mmc_card *card, unsigned int sz)
 	 * the core about its problems yet, so for now we just 32-bit
 	 * align the size.
 	 */
-	sz = ((sz + 3) / 4) * 4;
+
+	/* Align size for host which only supports power-of-2 block */
+	if (card->host->powerof2_block) {
+		if (sz & (sz - 1))
+			sz = 1 << fls(sz);
+	} else
+		sz = ((sz + 3) / 4) * 4;
 
 	return sz;
 }
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 4e45725..7416ed1 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -162,6 +162,7 @@ struct mmc_host {
 	struct dentry		*debugfs_root;
 
 	unsigned long		private[0] ____cacheline_aligned;
+	unsigned int		powerof2_block;	/* host only supports power-of-2 block */
 };
 
 extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
-- 
1.5.6.3

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-03-06  3:15 [PATCH] mmc: align data size for host which only supports power-of-2 block Bryan Wu
@ 2009-03-14 20:30 ` Pierre Ossman
  2009-03-25  3:22   ` Cai, Cliff
  0 siblings, 1 reply; 8+ messages in thread
From: Pierre Ossman @ 2009-03-14 20:30 UTC (permalink / raw)
  To: Bryan Wu; +Cc: linux-kernel, Cliff Cai, Bryan Wu

On Fri,  6 Mar 2009 11:15:21 +0800
Bryan Wu <cooloney@kernel.org> wrote:

> From: Cliff Cai <cliff.cai@analog.com>
> 
> Signed-off-by: Cliff Cai <cliff.cai@analog.com>
> Signed-off-by: Bryan Wu <cooloney@kernel.org>
> ---

This patch seems premature as there is no associated modification of
any of the host drivers.

>  drivers/mmc/core/core.c  |    8 +++++++-
>  include/linux/mmc/host.h |    1 +
>  2 files changed, 8 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index df6ce4a..15119df 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -321,7 +321,13 @@ unsigned int mmc_align_data_size(struct mmc_card *card, unsigned int sz)
>  	 * the core about its problems yet, so for now we just 32-bit
>  	 * align the size.
>  	 */
> -	sz = ((sz + 3) / 4) * 4;
> +
> +	/* Align size for host which only supports power-of-2 block */
> +	if (card->host->powerof2_block) {
> +		if (sz & (sz - 1))
> +			sz = 1 << fls(sz);
> +	} else
> +		sz = ((sz + 3) / 4) * 4;
>  
>  	return sz;
>  }

At the very least, the comment at the top of this function must go. But
really, if we want to improve this we should probably do it properly
and have flags for the different limitations that are available.

Padding to a power of two size can also mean a rather large padding. We
might need to check the host data limits after doing the adjustment.

> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 4e45725..7416ed1 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -162,6 +162,7 @@ struct mmc_host {
>  	struct dentry		*debugfs_root;
>  
>  	unsigned long		private[0] ____cacheline_aligned;
> +	unsigned int		powerof2_block;	/* host only supports power-of-2 block */
>  };
>  
>  extern struct mmc_host *mmc_alloc_host(int extra, struct device *);

This is just broken. Putting it after private completely breaks
accesses to the host driver private data.

Also, there are a whole bunch of alignment issues that can occur. We
need some kind of flags field or a bitfield for this.

Rgds
-- 
     -- Pierre Ossman

  Linux kernel, MMC maintainer        http://www.kernel.org
  rdesktop, core developer          http://www.rdesktop.org

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-03-14 20:30 ` Pierre Ossman
@ 2009-03-25  3:22   ` Cai, Cliff
  2009-03-25 19:23     ` Pierre Ossman
  0 siblings, 1 reply; 8+ messages in thread
From: Cai, Cliff @ 2009-03-25  3:22 UTC (permalink / raw)
  To: Pierre Ossman, Bryan Wu; +Cc: linux-kernel, Bryan Wu



>
 

>-----Original Message-----
>From: Pierre Ossman [mailto:drzeus-mmc@drzeus.cx] 
>Sent: Sunday, March 15, 2009 4:31 AM
>To: Bryan Wu
>Cc: linux-kernel@vger.kernel.org; Cai, Cliff; Bryan Wu
>Subject: Re: [PATCH] mmc: align data size for host which only 
>supports power-of-2 block
>
>On Fri,  6 Mar 2009 11:15:21 +0800
>Bryan Wu <cooloney@kernel.org> wrote:
>
>> From: Cliff Cai <cliff.cai@analog.com>
>> 
>> Signed-off-by: Cliff Cai <cliff.cai@analog.com>
>> Signed-off-by: Bryan Wu <cooloney@kernel.org>
>> ---
>
>This patch seems premature as there is no associated 
>modification of any of the host drivers.

The SDH on Blackfin BF54x/BF51x only supports power-of-2 block
transfer,we will soon
Send the sdh driver to mainline as well.

>
>>  drivers/mmc/core/core.c  |    8 +++++++-
>>  include/linux/mmc/host.h |    1 +
>>  2 files changed, 8 insertions(+), 1 deletions(-)
>> 
>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 
>> df6ce4a..15119df 100644
>> --- a/drivers/mmc/core/core.c
>> +++ b/drivers/mmc/core/core.c
>> @@ -321,7 +321,13 @@ unsigned int mmc_align_data_size(struct 
>mmc_card *card, unsigned int sz)
>>  	 * the core about its problems yet, so for now we just 32-bit
>>  	 * align the size.
>>  	 */
>> -	sz = ((sz + 3) / 4) * 4;
>> +
>> +	/* Align size for host which only supports power-of-2 block */
>> +	if (card->host->powerof2_block) {
>> +		if (sz & (sz - 1))
>> +			sz = 1 << fls(sz);
>> +	} else
>> +		sz = ((sz + 3) / 4) * 4;
>>  
>>  	return sz;
>>  }
>
>At the very least, the comment at the top of this function 
>must go. But really, if we want to improve this we should 
>probably do it properly and have flags for the different 
>limitations that are available.
>Padding to a power of two size can also mean a rather large 
>padding. We might need to check the host data limits after 
>doing the adjustment.

Yes,but it's the higher level driver's job. 

>
>> diff --git a/include/linux/mmc/host.h 
>b/include/linux/mmc/host.h index 
>> 4e45725..7416ed1 100644
>> --- a/include/linux/mmc/host.h
>> +++ b/include/linux/mmc/host.h
>> @@ -162,6 +162,7 @@ struct mmc_host {
>>  	struct dentry		*debugfs_root;
>>  
>>  	unsigned long		private[0] ____cacheline_aligned;
>> +	unsigned int		powerof2_block;	/* host only 
>supports power-of-2 block */
>>  };
>>  
>>  extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
>
>This is just broken. Putting it after private completely 
>breaks accesses to the host driver private data.

Sure,it should be added before private.

Thanks

Cliff

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-03-25  3:22   ` Cai, Cliff
@ 2009-03-25 19:23     ` Pierre Ossman
  2009-03-26  2:22       ` Cai, Cliff
  0 siblings, 1 reply; 8+ messages in thread
From: Pierre Ossman @ 2009-03-25 19:23 UTC (permalink / raw)
  To: Cai, Cliff; +Cc: Bryan Wu, linux-kernel

On Wed, 25 Mar 2009 11:22:25 +0800
"Cai, Cliff" <Cliff.Cai@analog.com> wrote:

> >
> >This patch seems premature as there is no associated 
> >modification of any of the host drivers.
> 
> The SDH on Blackfin BF54x/BF51x only supports power-of-2 block
> transfer,we will soon
> Send the sdh driver to mainline as well.
> 

Ok. Looking forward to it. :)

> >Padding to a power of two size can also mean a rather large 
> >padding. We might need to check the host data limits after 
> >doing the adjustment.
> 
> Yes,but it's the higher level driver's job. 
> 

mmc_align_data_size() shouldn't be adjusting the size to something it
can easily determine that it's invalid.

Rgds
-- 
     -- Pierre Ossman

  Linux kernel, MMC maintainer        http://www.kernel.org
  rdesktop, core developer          http://www.rdesktop.org

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-03-25 19:23     ` Pierre Ossman
@ 2009-03-26  2:22       ` Cai, Cliff
  2009-04-05 19:09         ` Pierre Ossman
  0 siblings, 1 reply; 8+ messages in thread
From: Cai, Cliff @ 2009-03-26  2:22 UTC (permalink / raw)
  To: Pierre Ossman; +Cc: Bryan Wu, linux-kernel



>
 

>-----Original Message-----
>From: Pierre Ossman [mailto:drzeus-mmc@drzeus.cx] 
>Sent: Thursday, March 26, 2009 3:24 AM
>To: Cai, Cliff
>Cc: Bryan Wu; linux-kernel@vger.kernel.org
>Subject: Re: [PATCH] mmc: align data size for host which only 
>supports power-of-2 block
>
>On Wed, 25 Mar 2009 11:22:25 +0800
>"Cai, Cliff" <Cliff.Cai@analog.com> wrote:
>
>> >
>> >This patch seems premature as there is no associated 
>modification of 
>> >any of the host drivers.
>> 
>> The SDH on Blackfin BF54x/BF51x only supports power-of-2 block 
>> transfer,we will soon Send the sdh driver to mainline as well.
>> 
>
>Ok. Looking forward to it. :)
>
>> >Padding to a power of two size can also mean a rather large 
>> >padding. We might need to check the host data limits after 
>> >doing the adjustment.
>> 
>> Yes,but it's the higher level driver's job. 
>> 
>
>mmc_align_data_size() shouldn't be adjusting the size to something it
>can easily determine that it's invalid.

Should I create a new function to do the power-of-2 adjustment?
Or any ideal way to do it?
Otherwise,the SDH almost can't be used as sdio host.

Thanks 

Cliff

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-03-26  2:22       ` Cai, Cliff
@ 2009-04-05 19:09         ` Pierre Ossman
  2009-04-07  8:34           ` Cai, Cliff
  0 siblings, 1 reply; 8+ messages in thread
From: Pierre Ossman @ 2009-04-05 19:09 UTC (permalink / raw)
  To: Cai, Cliff; +Cc: Bryan Wu, linux-kernel

On Thu, 26 Mar 2009 10:22:54 +0800
"Cai, Cliff" <Cliff.Cai@analog.com> wrote:

> >
> >mmc_align_data_size() shouldn't be adjusting the size to something it
> >can easily determine that it's invalid.
> 
> Should I create a new function to do the power-of-2 adjustment?
> Or any ideal way to do it?

That function is the correct place. My point was that we need to check
after the adjustment that we didn't violate any of the other
restrictions the driver has set. If we do, we should just return the
original value.

> Otherwise,the SDH almost can't be used as sdio host.

Unfortunately I think this controller will be very unsuitable as an
SDIO controller anyway with that restriction.

Rgds
-- 
     -- Pierre Ossman

  Linux kernel, MMC maintainer        http://www.kernel.org
  rdesktop, core developer          http://www.rdesktop.org

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* RE: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-04-05 19:09         ` Pierre Ossman
@ 2009-04-07  8:34           ` Cai, Cliff
  2009-04-10 21:01             ` Pierre Ossman
  0 siblings, 1 reply; 8+ messages in thread
From: Cai, Cliff @ 2009-04-07  8:34 UTC (permalink / raw)
  To: Pierre Ossman; +Cc: Bryan Wu, linux-kernel

 

>-----Original Message-----
>From: Pierre Ossman [mailto:drzeus-mmc@drzeus.cx] 
>Sent: Monday, April 06, 2009 3:09 AM
>To: Cai, Cliff
>Cc: Bryan Wu; linux-kernel@vger.kernel.org
>Subject: Re: [PATCH] mmc: align data size for host which only 
>supports power-of-2 block
>
>On Thu, 26 Mar 2009 10:22:54 +0800
>"Cai, Cliff" <Cliff.Cai@analog.com> wrote:
>
>> >
>> >mmc_align_data_size() shouldn't be adjusting the size to 
>something it 
>> >can easily determine that it's invalid.
>> 
>> Should I create a new function to do the power-of-2 adjustment?
>> Or any ideal way to do it?
>
>That function is the correct place. My point was that we need 
>to check after the adjustment that we didn't violate any of 
>the other restrictions the driver has set. If we do, we should 
>just return the original value.

What are other restrictions?I don't see any other restrictions on data
size in current host driver
Except 4 byte alignment.


>> Otherwise,the SDH almost can't be used as sdio host.
>
>Unfortunately I think this controller will be very unsuitable 
>as an SDIO controller anyway with that restriction.

Yes,But since we need to support some SDIO devices according to our
customers'
Requests ,I think we have no other choice of this.


Thanks

Cliff

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] mmc: align data size for host which only supports power-of-2 block
  2009-04-07  8:34           ` Cai, Cliff
@ 2009-04-10 21:01             ` Pierre Ossman
  0 siblings, 0 replies; 8+ messages in thread
From: Pierre Ossman @ 2009-04-10 21:01 UTC (permalink / raw)
  To: Cai, Cliff; +Cc: Bryan Wu, linux-kernel

On Tue, 7 Apr 2009 16:34:37 +0800
"Cai, Cliff" <Cliff.Cai@analog.com> wrote:

>  
> 
> >-----Original Message-----
> >From: Pierre Ossman [mailto:drzeus-mmc@drzeus.cx] 
> >Sent: Monday, April 06, 2009 3:09 AM
> >To: Cai, Cliff
> >Cc: Bryan Wu; linux-kernel@vger.kernel.org
> >Subject: Re: [PATCH] mmc: align data size for host which only 
> >supports power-of-2 block
> >
> >On Thu, 26 Mar 2009 10:22:54 +0800
> >"Cai, Cliff" <Cliff.Cai@analog.com> wrote:
> >
> >> >
> >> >mmc_align_data_size() shouldn't be adjusting the size to 
> >something it 
> >> >can easily determine that it's invalid.
> >> 
> >> Should I create a new function to do the power-of-2 adjustment?
> >> Or any ideal way to do it?
> >
> >That function is the correct place. My point was that we need 
> >to check after the adjustment that we didn't violate any of 
> >the other restrictions the driver has set. If we do, we should 
> >just return the original value.
> 
> What are other restrictions?I don't see any other restrictions on data
> size in current host driver
> Except 4 byte alignment.
> 

The ones that are in the mmc_host structure:

        /* host specific block data */
        unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
        unsigned short          max_hw_segs;    /* see blk_queue_max_hw_segments */
        unsigned short          max_phys_segs;  /* see blk_queue_max_phys_segments */
        unsigned short          unused;
        unsigned int            max_req_size;   /* maximum number of bytes in one req */
        unsigned int            max_blk_size;   /* maximum size of one mmc block */
        unsigned int            max_blk_count;  /* maximum number of blocks in one req */

If you adjust a transfer from 1100 bytes to 2048, that could exceed the
limit of 2047 bytes some controllers have.

> 
> >> Otherwise,the SDH almost can't be used as sdio host.
> >
> >Unfortunately I think this controller will be very unsuitable 
> >as an SDIO controller anyway with that restriction.
> 
> Yes,But since we need to support some SDIO devices according to our
> customers'
> Requests ,I think we have no other choice of this.
> 

They should be prepared for the fact that many SDIO devices cannot be
made to work with a controller with these bugs though. The function
you're modifying is only to optimise the transfer and is not mandatory
for SDIO drivers to call in any way.

Rgds
-- 
     -- Pierre Ossman

  Linux kernel, MMC maintainer        http://www.kernel.org
  rdesktop, core developer          http://www.rdesktop.org
  TigerVNC, core developer          http://www.tigervnc.org

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-04-10 21:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-06  3:15 [PATCH] mmc: align data size for host which only supports power-of-2 block Bryan Wu
2009-03-14 20:30 ` Pierre Ossman
2009-03-25  3:22   ` Cai, Cliff
2009-03-25 19:23     ` Pierre Ossman
2009-03-26  2:22       ` Cai, Cliff
2009-04-05 19:09         ` Pierre Ossman
2009-04-07  8:34           ` Cai, Cliff
2009-04-10 21:01             ` Pierre Ossman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®