* [PATCH v2 1/2] [MMC-4.5] Disable emulation
@ 2012-05-17 11:02 Saugata Das
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Saugata Das @ 2012-05-17 11:02 UTC (permalink / raw)
To: linux-mmc
Cc: patches, saugata.das, subhashj, arnd.bergmann, venkat, lporzio,
linkinjeon
From: Saugata Das <saugata.das@linaro.org>
This patch adds the support for large sector size of 4KB by disabling emulation.
This patch passes eMMC DATA_SECTOR_SIZE as the logical block size during
mmc_blk_alloc_req.
In order to use this patch for 4KB sector size, ensure that USE_NATIVE_SECTOR
is enabled, partition table is 4KB sector size aligned and file system block
and sector size are 4KB multiples.
Signed-off-by: Saugata Das <saugata.das@linaro.org>
changes in v2:
Updated description, added pr_err based on review feedback
---
drivers/mmc/card/block.c | 18 ++++++++++++++++--
drivers/mmc/core/mmc.c | 2 ++
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 91cda75..d628c5d 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -1284,7 +1284,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
int ret = 1, disable_multi = 0, retry = 0, type;
enum mmc_blk_status status;
struct mmc_queue_req *mq_rq;
- struct request *req;
+ struct request *req = rqc;
struct mmc_async_req *areq;
if (!rqc && !mq->mqrq_prev->req)
@@ -1292,6 +1292,16 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
do {
if (rqc) {
+ /*
+ * When 4KB native sector is enabled, only 8 blocks
+ * multiple read or write is allowed
+ */
+ if ((brq->data.blocks & 0x07) &&
+ (card->ext_csd.data_sector_size == 4096)) {
+ pr_err("%s: Transfer size is not 4KB sector size aligned\n",
+ req->rq_disk->disk_name);
+ goto cmd_abort;
+ }
mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
areq = &mq->mqrq_cur->mmc_active;
} else
@@ -1539,7 +1549,11 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,
snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
"mmcblk%d%s", md->name_idx, subname ? subname : "");
- blk_queue_logical_block_size(md->queue.queue, 512);
+ if (mmc_card_mmc(card))
+ blk_queue_logical_block_size(md->queue.queue,
+ card->ext_csd.data_sector_size);
+ else
+ blk_queue_logical_block_size(md->queue.queue, 512);
set_capacity(md->disk, size);
if (mmc_host_cmd23(card->host)) {
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 7268c26..11444c6 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -516,6 +516,8 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
} else {
card->ext_csd.data_tag_unit_size = 0;
}
+ } else {
+ card->ext_csd.data_sector_size = 512;
}
out:
--
1.7.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] Disable emulation
2012-05-17 11:02 [PATCH v2 1/2] [MMC-4.5] Disable emulation Saugata Das
@ 2012-05-17 11:02 ` Saugata Das
2012-05-17 11:37 ` Subhash Jadavani
2012-05-17 13:41 ` Chris Ball
2012-05-17 11:09 ` [PATCH v2 1/2] [MMC-4.5] " Namjae Jeon
` (2 subsequent siblings)
3 siblings, 2 replies; 8+ messages in thread
From: Saugata Das @ 2012-05-17 11:02 UTC (permalink / raw)
To: linux-mmc
Cc: patches, saugata.das, subhashj, arnd.bergmann, venkat, lporzio,
linkinjeon
From: Saugata Das <saugata.das@linaro.org>
In this patch, we add utility to disable emulation mode in the eMMC-4.5.
This is done to increase the data sector size to 4KB.
Signed-off-by: Saugata Das <saugata.das@linaro.org>
changes in v2:
Removed extra blank lines around do_disable_512B_emulation
Review rework based on comments from Subhash
---
mmc.c | 6 ++++++
mmc.h | 10 ++++++++++
mmc_cmds.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
mmc_cmds.h | 1 +
4 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/mmc.c b/mmc.c
index c27fc24..ebc7ab2 100644
--- a/mmc.c
+++ b/mmc.c
@@ -65,6 +65,12 @@ static struct Command commands[] = {
"Set the eMMC writeprotect status of <device>.",
NULL
},
+ { do_disable_512B_emulation, -1,
+ "disable 512B emulation", "<device>\n"
+ "Set the eMMC data sector size to 4KB by disabling emulation <device>.",
+ NULL
+ },
+
{ 0, 0, 0, 0 }
};
diff --git a/mmc.h b/mmc.h
index 3af36f1..34c31d3 100644
--- a/mmc.h
+++ b/mmc.h
@@ -35,6 +35,16 @@
#define EXT_CSD_PART_SWITCH_TIME 199
#define EXT_CSD_BOOT_CFG 179
#define EXT_CSD_BOOT_WP 173
+#define EXT_CSD_WR_REL_PARAM 166
+#define EXT_CSD_NATIVE_SECTOR_SIZE 63 /* R */
+#define EXT_CSD_USE_NATIVE_SECTOR 62 /* R/W */
+#define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */
+
+/*
+ * WR_REL_PARAM field definitions
+ */
+#define HS_CTRL_REL (1<<0)
+#define EN_REL_WR (1<<2)
/*
* EXT_CSD field definitions
diff --git a/mmc_cmds.c b/mmc_cmds.c
index 4562cef..4bc1fd6 100644
--- a/mmc_cmds.c
+++ b/mmc_cmds.c
@@ -168,6 +168,55 @@ int do_writeprotect_set(int nargs, char **argv)
return ret;
}
+int do_disable_512B_emulation(int nargs, char **argv)
+{
+ __u8 ext_csd[512], native_sector_size, data_sector_size, wr_rel_param;
+ int fd, ret;
+ char *device;
+
+ CHECK(nargs != 2, "Usage: mmc </path/to/mmcblkX>\n", exit(1));
+
+ device = argv[1];
+
+ fd = open(device, O_RDWR);
+ if (fd < 0) {
+ perror("open");
+ exit(1);
+ }
+
+ ret = read_extcsd(fd, ext_csd);
+ if (ret) {
+ fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
+ exit(1);
+ }
+
+ wr_rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
+ native_sector_size = ext_csd[EXT_CSD_NATIVE_SECTOR_SIZE];
+ data_sector_size = ext_csd[EXT_CSD_DATA_SECTOR_SIZE];
+
+ if (native_sector_size &&
+ !data_sector_size &&
+ (wr_rel_param & EN_REL_WR)) {
+ ret = write_extcsd_value(fd, EXT_CSD_USE_NATIVE_SECTOR, 1);
+
+ if (ret) {
+ fprintf(stderr, "Could not write 0x%02x to "
+ "EXT_CSD[%d] in %s\n",
+ 1, EXT_CSD_BOOT_WP, device);
+ exit(1);
+ }
+ printf("MMC disable 512B emulation successful\n"
+ "Now reset the device to switch to 4KB "
+ "native sector mode\n");
+ } else if (native_sector_size && data_sector_size) {
+ printf("MMC already disabled 512B emulation mode\n");
+ } else {
+ printf("MMC does not support disabling 512B emulation mode\n");
+ }
+
+ return ret;
+}
+
int do_read_extcsd(int nargs, char **argv)
{
__u8 ext_csd[512], ext_csd_rev, reg;
diff --git a/mmc_cmds.h b/mmc_cmds.h
index 66e9acb..56f46d7 100644
--- a/mmc_cmds.h
+++ b/mmc_cmds.h
@@ -19,3 +19,4 @@ int do_read_extcsd(int nargs, char **argv);
int do_write_extcsd(int nargs, char **argv);
int do_writeprotect_get(int nargs, char **argv);
int do_writeprotect_set(int nargs, char **argv);
+int do_disable_512B_emulation(int nargs, char **argv);
--
1.7.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] [MMC-4.5] Disable emulation
2012-05-17 11:02 [PATCH v2 1/2] [MMC-4.5] Disable emulation Saugata Das
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
@ 2012-05-17 11:09 ` Namjae Jeon
2012-05-17 11:43 ` Subhash Jadavani
2012-05-17 13:38 ` Chris Ball
3 siblings, 0 replies; 8+ messages in thread
From: Namjae Jeon @ 2012-05-17 11:09 UTC (permalink / raw)
To: Saugata Das
Cc: linux-mmc, patches, saugata.das, subhashj, arnd.bergmann, venkat,
lporzio
2012/5/17, Saugata Das <saugata.das@stericsson.com>:
> From: Saugata Das <saugata.das@linaro.org>
>
> This patch adds the support for large sector size of 4KB by disabling
> emulation.
> This patch passes eMMC DATA_SECTOR_SIZE as the logical block size during
> mmc_blk_alloc_req.
>
> In order to use this patch for 4KB sector size, ensure that
> USE_NATIVE_SECTOR
> is enabled, partition table is 4KB sector size aligned and file system
> block
> and sector size are 4KB multiples.
>
> Signed-off-by: Saugata Das <saugata.das@linaro.org>
Looks good.
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] Disable emulation
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
@ 2012-05-17 11:37 ` Subhash Jadavani
2012-05-17 13:41 ` Chris Ball
1 sibling, 0 replies; 8+ messages in thread
From: Subhash Jadavani @ 2012-05-17 11:37 UTC (permalink / raw)
To: 'Saugata Das', linux-mmc
Cc: patches, saugata.das, arnd.bergmann, venkat, lporzio, linkinjeon
Thanks Saugata.
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
Regards,
Subhash
> -----Original Message-----
> From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-
> owner@vger.kernel.org] On Behalf Of Saugata Das
> Sent: Thursday, May 17, 2012 4:32 PM
> To: linux-mmc@vger.kernel.org
> Cc: patches@linaro.org; saugata.das@linaro.org; subhashj@codeaurora.org;
> arnd.bergmann@linaro.org; venkat@linaro.org; lporzio@micron.com;
> linkinjeon@gmail.com
> Subject: [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] Disable emulation
>
> From: Saugata Das <saugata.das@linaro.org>
>
> In this patch, we add utility to disable emulation mode in the eMMC-4.5.
> This is done to increase the data sector size to 4KB.
>
> Signed-off-by: Saugata Das <saugata.das@linaro.org>
>
> changes in v2:
> Removed extra blank lines around do_disable_512B_emulation
> Review rework based on comments from Subhash
> ---
> mmc.c | 6 ++++++
> mmc.h | 10 ++++++++++
> mmc_cmds.c | 49
> +++++++++++++++++++++++++++++++++++++++++++++++++
> mmc_cmds.h | 1 +
> 4 files changed, 66 insertions(+), 0 deletions(-)
>
> diff --git a/mmc.c b/mmc.c
> index c27fc24..ebc7ab2 100644
> --- a/mmc.c
> +++ b/mmc.c
> @@ -65,6 +65,12 @@ static struct Command commands[] = {
> "Set the eMMC writeprotect status of <device>.",
> NULL
> },
> + { do_disable_512B_emulation, -1,
> + "disable 512B emulation", "<device>\n"
> + "Set the eMMC data sector size to 4KB by disabling emulation
> <device>.",
> + NULL
> + },
> +
> { 0, 0, 0, 0 }
> };
>
> diff --git a/mmc.h b/mmc.h
> index 3af36f1..34c31d3 100644
> --- a/mmc.h
> +++ b/mmc.h
> @@ -35,6 +35,16 @@
> #define EXT_CSD_PART_SWITCH_TIME 199
> #define EXT_CSD_BOOT_CFG 179
> #define EXT_CSD_BOOT_WP 173
> +#define EXT_CSD_WR_REL_PARAM 166
> +#define EXT_CSD_NATIVE_SECTOR_SIZE 63 /* R */
> +#define EXT_CSD_USE_NATIVE_SECTOR 62 /* R/W */
> +#define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */
> +
> +/*
> + * WR_REL_PARAM field definitions
> + */
> +#define HS_CTRL_REL (1<<0)
> +#define EN_REL_WR (1<<2)
>
> /*
> * EXT_CSD field definitions
> diff --git a/mmc_cmds.c b/mmc_cmds.c
> index 4562cef..4bc1fd6 100644
> --- a/mmc_cmds.c
> +++ b/mmc_cmds.c
> @@ -168,6 +168,55 @@ int do_writeprotect_set(int nargs, char **argv)
> return ret;
> }
>
> +int do_disable_512B_emulation(int nargs, char **argv) {
> + __u8 ext_csd[512], native_sector_size, data_sector_size,
> wr_rel_param;
> + int fd, ret;
> + char *device;
> +
> + CHECK(nargs != 2, "Usage: mmc </path/to/mmcblkX>\n", exit(1));
> +
> + device = argv[1];
> +
> + fd = open(device, O_RDWR);
> + if (fd < 0) {
> + perror("open");
> + exit(1);
> + }
> +
> + ret = read_extcsd(fd, ext_csd);
> + if (ret) {
> + fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
> + exit(1);
> + }
> +
> + wr_rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
> + native_sector_size = ext_csd[EXT_CSD_NATIVE_SECTOR_SIZE];
> + data_sector_size = ext_csd[EXT_CSD_DATA_SECTOR_SIZE];
> +
> + if (native_sector_size &&
> + !data_sector_size &&
> + (wr_rel_param & EN_REL_WR)) {
> + ret = write_extcsd_value(fd,
> EXT_CSD_USE_NATIVE_SECTOR, 1);
> +
> + if (ret) {
> + fprintf(stderr, "Could not write 0x%02x to "
> + "EXT_CSD[%d] in %s\n",
> + 1, EXT_CSD_BOOT_WP, device);
> + exit(1);
> + }
> + printf("MMC disable 512B emulation successful\n"
> + "Now reset the device to switch to 4KB "
> + "native sector mode\n");
> + } else if (native_sector_size && data_sector_size) {
> + printf("MMC already disabled 512B emulation mode\n");
> + } else {
> + printf("MMC does not support disabling 512B emulation
> mode\n");
> + }
> +
> + return ret;
> +}
> +
> int do_read_extcsd(int nargs, char **argv) {
> __u8 ext_csd[512], ext_csd_rev, reg;
> diff --git a/mmc_cmds.h b/mmc_cmds.h
> index 66e9acb..56f46d7 100644
> --- a/mmc_cmds.h
> +++ b/mmc_cmds.h
> @@ -19,3 +19,4 @@ int do_read_extcsd(int nargs, char **argv); int
> do_write_extcsd(int nargs, char **argv); int do_writeprotect_get(int
nargs,
> char **argv); int do_writeprotect_set(int nargs, char **argv);
> +int do_disable_512B_emulation(int nargs, char **argv);
> --
> 1.7.4.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the
> body of a message to majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH v2 1/2] [MMC-4.5] Disable emulation
2012-05-17 11:02 [PATCH v2 1/2] [MMC-4.5] Disable emulation Saugata Das
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
2012-05-17 11:09 ` [PATCH v2 1/2] [MMC-4.5] " Namjae Jeon
@ 2012-05-17 11:43 ` Subhash Jadavani
2012-05-17 13:15 ` Saugata Das
2012-05-17 13:38 ` Chris Ball
3 siblings, 1 reply; 8+ messages in thread
From: Subhash Jadavani @ 2012-05-17 11:43 UTC (permalink / raw)
To: 'Saugata Das', linux-mmc
Cc: patches, saugata.das, arnd.bergmann, venkat, lporzio, linkinjeon
Looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
Regards,
Subhash
> -----Original Message-----
> From: Saugata Das [mailto:saugata.das@stericsson.com]
> Sent: Thursday, May 17, 2012 4:32 PM
> To: linux-mmc@vger.kernel.org
> Cc: patches@linaro.org; saugata.das@linaro.org; subhashj@codeaurora.org;
> arnd.bergmann@linaro.org; venkat@linaro.org; lporzio@micron.com;
> linkinjeon@gmail.com
> Subject: [PATCH v2 1/2] [MMC-4.5] Disable emulation
>
> From: Saugata Das <saugata.das@linaro.org>
>
> This patch adds the support for large sector size of 4KB by disabling
> emulation.
> This patch passes eMMC DATA_SECTOR_SIZE as the logical block size during
> mmc_blk_alloc_req.
>
> In order to use this patch for 4KB sector size, ensure that
> USE_NATIVE_SECTOR is enabled, partition table is 4KB sector size aligned
and
> file system block and sector size are 4KB multiples.
>
> Signed-off-by: Saugata Das <saugata.das@linaro.org>
>
> changes in v2:
> Updated description, added pr_err based on review feedback
> ---
> drivers/mmc/card/block.c | 18 ++++++++++++++++--
> drivers/mmc/core/mmc.c | 2 ++
> 2 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index
> 91cda75..d628c5d 100644
> --- a/drivers/mmc/card/block.c
> +++ b/drivers/mmc/card/block.c
> @@ -1284,7 +1284,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue
> *mq, struct request *rqc)
> int ret = 1, disable_multi = 0, retry = 0, type;
> enum mmc_blk_status status;
> struct mmc_queue_req *mq_rq;
> - struct request *req;
> + struct request *req = rqc;
> struct mmc_async_req *areq;
>
> if (!rqc && !mq->mqrq_prev->req)
> @@ -1292,6 +1292,16 @@ static int mmc_blk_issue_rw_rq(struct
> mmc_queue *mq, struct request *rqc)
>
> do {
> if (rqc) {
> + /*
> + * When 4KB native sector is enabled, only 8 blocks
> + * multiple read or write is allowed
> + */
> + if ((brq->data.blocks & 0x07) &&
> + (card->ext_csd.data_sector_size == 4096)) {
> + pr_err("%s: Transfer size is not 4KB sector
> size aligned\n",
> + req->rq_disk->disk_name);
> + goto cmd_abort;
> + }
> mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
> areq = &mq->mqrq_cur->mmc_active;
> } else
> @@ -1539,7 +1549,11 @@ static struct mmc_blk_data
> *mmc_blk_alloc_req(struct mmc_card *card,
> snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
> "mmcblk%d%s", md->name_idx, subname ? subname : "");
>
> - blk_queue_logical_block_size(md->queue.queue, 512);
> + if (mmc_card_mmc(card))
> + blk_queue_logical_block_size(md->queue.queue,
> + card->ext_csd.data_sector_size);
> + else
> + blk_queue_logical_block_size(md->queue.queue, 512);
> set_capacity(md->disk, size);
>
> if (mmc_host_cmd23(card->host)) {
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
> 7268c26..11444c6 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -516,6 +516,8 @@ static int mmc_read_ext_csd(struct mmc_card *card,
> u8 *ext_csd)
> } else {
> card->ext_csd.data_tag_unit_size = 0;
> }
> + } else {
> + card->ext_csd.data_sector_size = 512;
> }
>
> out:
> --
> 1.7.4.3
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] [MMC-4.5] Disable emulation
2012-05-17 11:43 ` Subhash Jadavani
@ 2012-05-17 13:15 ` Saugata Das
0 siblings, 0 replies; 8+ messages in thread
From: Saugata Das @ 2012-05-17 13:15 UTC (permalink / raw)
To: Chris Ball
Cc: Saugata Das, linux-mmc, patches, arnd.bergmann, venkat, lporzio,
linkinjeon, Subhash Jadavani
On 17 May 2012 17:13, Subhash Jadavani <subhashj@codeaurora.org> wrote:
> Looks good to me.
> Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>
>
Thanks Subhash, Namjae Jeon.
Chris, will you please merge this patch for your next release.
> Regards,
> Subhash
>
>> -----Original Message-----
>> From: Saugata Das [mailto:saugata.das@stericsson.com]
>> Sent: Thursday, May 17, 2012 4:32 PM
>> To: linux-mmc@vger.kernel.org
>> Cc: patches@linaro.org; saugata.das@linaro.org; subhashj@codeaurora.org;
>> arnd.bergmann@linaro.org; venkat@linaro.org; lporzio@micron.com;
>> linkinjeon@gmail.com
>> Subject: [PATCH v2 1/2] [MMC-4.5] Disable emulation
>>
>> From: Saugata Das <saugata.das@linaro.org>
>>
>> This patch adds the support for large sector size of 4KB by disabling
>> emulation.
>> This patch passes eMMC DATA_SECTOR_SIZE as the logical block size during
>> mmc_blk_alloc_req.
>>
>> In order to use this patch for 4KB sector size, ensure that
>> USE_NATIVE_SECTOR is enabled, partition table is 4KB sector size aligned
> and
>> file system block and sector size are 4KB multiples.
>>
>> Signed-off-by: Saugata Das <saugata.das@linaro.org>
>>
>> changes in v2:
>> Updated description, added pr_err based on review feedback
>> ---
>> drivers/mmc/card/block.c | 18 ++++++++++++++++--
>> drivers/mmc/core/mmc.c | 2 ++
>> 2 files changed, 18 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index
>> 91cda75..d628c5d 100644
>> --- a/drivers/mmc/card/block.c
>> +++ b/drivers/mmc/card/block.c
>> @@ -1284,7 +1284,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue
>> *mq, struct request *rqc)
>> int ret = 1, disable_multi = 0, retry = 0, type;
>> enum mmc_blk_status status;
>> struct mmc_queue_req *mq_rq;
>> - struct request *req;
>> + struct request *req = rqc;
>> struct mmc_async_req *areq;
>>
>> if (!rqc && !mq->mqrq_prev->req)
>> @@ -1292,6 +1292,16 @@ static int mmc_blk_issue_rw_rq(struct
>> mmc_queue *mq, struct request *rqc)
>>
>> do {
>> if (rqc) {
>> + /*
>> + * When 4KB native sector is enabled, only 8 blocks
>> + * multiple read or write is allowed
>> + */
>> + if ((brq->data.blocks & 0x07) &&
>> + (card->ext_csd.data_sector_size == 4096)) {
>> + pr_err("%s: Transfer size is not 4KB sector
>> size aligned\n",
>> + req->rq_disk->disk_name);
>> + goto cmd_abort;
>> + }
>> mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
>> areq = &mq->mqrq_cur->mmc_active;
>> } else
>> @@ -1539,7 +1549,11 @@ static struct mmc_blk_data
>> *mmc_blk_alloc_req(struct mmc_card *card,
>> snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
>> "mmcblk%d%s", md->name_idx, subname ? subname : "");
>>
>> - blk_queue_logical_block_size(md->queue.queue, 512);
>> + if (mmc_card_mmc(card))
>> + blk_queue_logical_block_size(md->queue.queue,
>> + card->ext_csd.data_sector_size);
>> + else
>> + blk_queue_logical_block_size(md->queue.queue, 512);
>> set_capacity(md->disk, size);
>>
>> if (mmc_host_cmd23(card->host)) {
>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index
>> 7268c26..11444c6 100644
>> --- a/drivers/mmc/core/mmc.c
>> +++ b/drivers/mmc/core/mmc.c
>> @@ -516,6 +516,8 @@ static int mmc_read_ext_csd(struct mmc_card *card,
>> u8 *ext_csd)
>> } else {
>> card->ext_csd.data_tag_unit_size = 0;
>> }
>> + } else {
>> + card->ext_csd.data_sector_size = 512;
>> }
>>
>> out:
>> --
>> 1.7.4.3
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] [MMC-4.5] Disable emulation
2012-05-17 11:02 [PATCH v2 1/2] [MMC-4.5] Disable emulation Saugata Das
` (2 preceding siblings ...)
2012-05-17 11:43 ` Subhash Jadavani
@ 2012-05-17 13:38 ` Chris Ball
3 siblings, 0 replies; 8+ messages in thread
From: Chris Ball @ 2012-05-17 13:38 UTC (permalink / raw)
To: Saugata Das
Cc: linux-mmc, patches, saugata.das, subhashj, arnd.bergmann, venkat,
lporzio, linkinjeon
Hi,
On Thu, May 17 2012, Saugata Das wrote:
> From: Saugata Das <saugata.das@linaro.org>
>
> This patch adds the support for large sector size of 4KB by disabling emulation.
> This patch passes eMMC DATA_SECTOR_SIZE as the logical block size during
> mmc_blk_alloc_req.
>
> In order to use this patch for 4KB sector size, ensure that USE_NATIVE_SECTOR
> is enabled, partition table is 4KB sector size aligned and file system block
> and sector size are 4KB multiples.
>
> Signed-off-by: Saugata Das <saugata.das@linaro.org>
Thanks, pushed to mmc-next for 3.5.
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] Disable emulation
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
2012-05-17 11:37 ` Subhash Jadavani
@ 2012-05-17 13:41 ` Chris Ball
1 sibling, 0 replies; 8+ messages in thread
From: Chris Ball @ 2012-05-17 13:41 UTC (permalink / raw)
To: Saugata Das
Cc: linux-mmc, patches, saugata.das, subhashj, arnd.bergmann, venkat,
lporzio, linkinjeon
Hi,
On Thu, May 17 2012, Saugata Das wrote:
> From: Saugata Das <saugata.das@linaro.org>
>
> In this patch, we add utility to disable emulation mode in the eMMC-4.5.
> This is done to increase the data sector size to 4KB.
>
> Signed-off-by: Saugata Das <saugata.das@linaro.org>
>
> changes in v2:
> Removed extra blank lines around do_disable_512B_emulation
> Review rework based on comments from Subhash
> ---
Pushed to mmc-utils, thanks!
(Please put your patch changelogs below the "---", so that they don't
end up in the commit message.)
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
One Laptop Per Child
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-05-17 13:41 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-17 11:02 [PATCH v2 1/2] [MMC-4.5] Disable emulation Saugata Das
2012-05-17 11:02 ` [PATCH v2 2/2] [MMC-4.5] [MMC UTIL] " Saugata Das
2012-05-17 11:37 ` Subhash Jadavani
2012-05-17 13:41 ` Chris Ball
2012-05-17 11:09 ` [PATCH v2 1/2] [MMC-4.5] " Namjae Jeon
2012-05-17 11:43 ` Subhash Jadavani
2012-05-17 13:15 ` Saugata Das
2012-05-17 13:38 ` Chris Ball
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox