Subject: mmc: align data size for host which only supports power-of-2 block
From: Bryan Wu<cooloney@xxxxxxxxxx>
Signed-off-by: Cliff Cai<cliff.cai@xxxxxxxxxx>
Signed-off-by: Bryan Wu<cooloney@xxxxxxxxxx>
Cc: Pierre Ossman<drzeus@xxxxxxxxx>
Signed-off-by: Andrew Morton<akpm@xxxxxxxxxxxxxxxxxxxx>
---
--- a/drivers/mmc/core/core.c~mmc-align-data-size-for-host-which-only-supports-power-of-2-block
+++ a/drivers/mmc/core/core.c
@@ -321,7 +321,13 @@ unsigned int mmc_align_data_size(struct
* 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;
--- a/include/linux/mmc/host.h~mmc-align-data-size-for-host-which-only-supports-power-of-2-block
+++ a/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 */