From: Jaehoon Chung <jh80.chung@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V4 7/9] MMC: APIs to support resize of EMMC boot partition
Date: Mon, 07 Jan 2013 13:34:08 +0900 [thread overview]
Message-ID: <50EA5040.7090108@samsung.com> (raw)
In-Reply-To: <CAPbRUmnwGbJjnZy5SjLHMrHQ_F_8S-CJOq-sxFBWMYixtDUAUw@mail.gmail.com>
Hi Amar,
If you want to access the boot partition, Need to add open/close()?
I think we can use like "mmc_boot_part_access(struct mmc *mmc, int ack, int part_num, int access)"
How about this? i think it is more generic...
On 01/07/2013 01:19 PM, Amarendra Reddy wrote:
> Hi Jaehoon,
>
> Yes, the functions mmc_boot_partiton_size_change(), mmc_boot_open()
> & mmc_boot_close() can be used
> by any vendor to open/close/resize-boot-partition of emmc device.
How can any vendor use with resize-boot-partition?
you used the vendor command.(you added the comment "Only use this command for raw eMMC moviNAND")
And i think good that these functions are used with cmd_mmc.
Best Regards,
Jaehoon Chung
> The above 3 functions call the static function "static int
> mmc_send_cmd(...)" located in drivers/mmc/mmc.c.
> Any vendor can use the above 3 functions, if placed in drivers/mmc/mmc.c.
>
> Thanks & Regards
> Amarendra Reddy
>
> On 4 January 2013 15:57, Jaehoon Chung <jh80.chung@samsung.com> wrote:
>
>> Hi Amar,
>>
>> I wonder that include the moviNAND specific code in mmc.c?
>> mmc_boot_partiton_size_change() looks like every vendor can use this
>> function.
>>
>> Best Regards,
>> Jaehoon Chung
>>
>> On 01/04/2013 06:34 PM, Amar wrote:
>>> This patch adds APIs to open, close and to resize boot partiton for EMMC.
>>>
>>> Changes from V1:
>>> New patch.
>>>
>>> Changes from V2:
>>> 1)Updation of commit message and resubmition of proper patch set.
>>>
>>> Changes from V3:
>>> No change.
>>>
>>> Signed-off-by: Amar <amarendra.xt@samsung.com>
>>> ---
>>> drivers/mmc/mmc.c | 118
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>> include/mmc.h | 16 ++++++++
>>> 2 files changed, 134 insertions(+)
>>>
>>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
>>> index 72e8ce6..8175b49 100644
>>> --- a/drivers/mmc/mmc.c
>>> +++ b/drivers/mmc/mmc.c
>>> @@ -1327,3 +1327,121 @@ int mmc_initialize(bd_t *bis)
>>>
>>> return 0;
>>> }
>>> +
>>> +int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long
>> bootsize,
>>> + unsigned long rpmbsize)
>>> +{
>>> + int err;
>>> + struct mmc_cmd cmd;
>>> +
>>> + /* Only use this command for raw EMMC moviNAND */
>>> + /* Enter backdoor mode */
>>> + cmd.cmdidx = MMC_CMD_RES_MAN;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> + cmd.cmdarg = MMC_CMD62_ARG1;
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_partition_size_change: Error1 = %d\n",
>> err);
>>> + return err;
>>> + }
>>> +
>>> + /* Boot partition changing mode */
>>> + cmd.cmdidx = MMC_CMD_RES_MAN;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> + cmd.cmdarg = MMC_CMD62_ARG2;
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_partition_size_change: Error2 = %d\n",
>> err);
>>> + return err;
>>> + }
>>> + /* boot partition size is multiple of 128KB */
>>> + bootsize = ((bootsize*1024)/128);
>>> +
>>> + /* Arg: boot partition size */
>>> + cmd.cmdidx = MMC_CMD_RES_MAN;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> + cmd.cmdarg = bootsize;
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_partition_size_change: Error3 = %d\n",
>> err);
>>> + return err;
>>> + }
>>> + /* RPMB partition size is multiple of 128KB */
>>> + rpmbsize = ((rpmbsize*1024)/128);
>>> + /* Arg: RPMB partition size */
>>> + cmd.cmdidx = MMC_CMD_RES_MAN;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> + cmd.cmdarg = rpmbsize;
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_partition_size_change: Error4 = %d\n",
>> err);
>>> + return err;
>>> + }
>>> + return 0;
>>> +}
>>> +
>>> +int mmc_boot_open(struct mmc *mmc)
>>> +{
>>> + int err;
>>> + struct mmc_cmd cmd;
>>> +
>>> + /* Boot ack enable, boot partition enable , boot partition access
>> */
>>> + cmd.cmdidx = MMC_CMD_SWITCH;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> +
>>> + cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24 |
>>> + EXT_CSD_PART_CONF << 16 |
>>> + (EXT_CSD_BOOT_ACK_ENABLE |
>>> + EXT_CSD_BOOT_PARTITION_ENABLE |
>>> + EXT_CSD_PARTITION_ACCESS_ENABLE) << 8);
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_open: Error1 = %d\n", err);
>>> + return err;
>>> + }
>>> +
>>> + /* 4bit transfer mode at booting time. */
>>> + cmd.cmdidx = MMC_CMD_SWITCH;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> +
>>> + cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24|
>>> + EXT_CSD_BOOT_BUS_WIDTH << 16|
>>> + ((1<<0) << 8));
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_open: Error2 = %d\n", err);
>>> + return err;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +int mmc_boot_close(struct mmc *mmc)
>>> +{
>>> + int err;
>>> + struct mmc_cmd cmd;
>>> +
>>> + /* Boot ack enable, boot partition enable , boot partition access
>> */
>>> + cmd.cmdidx = MMC_CMD_SWITCH;
>>> + cmd.resp_type = MMC_RSP_R1b;
>>> +
>>> + cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24|
>>> + EXT_CSD_PART_CONF << 16|
>>> + (EXT_CSD_BOOT_ACK_ENABLE |
>>> + EXT_CSD_BOOT_PARTITION_ENABLE |
>>> + EXT_CSD_PARTITION_ACCESS_DISABLE) << 8);
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> + if (err) {
>>> + debug("mmc_boot_close: Error = %d\n", err);
>>> + return err;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> diff --git a/include/mmc.h b/include/mmc.h
>>> index a13e2bd..999f0a3 100644
>>> --- a/include/mmc.h
>>> +++ b/include/mmc.h
>>> @@ -86,6 +86,11 @@
>>> #define MMC_CMD_APP_CMD 55
>>> #define MMC_CMD_SPI_READ_OCR 58
>>> #define MMC_CMD_SPI_CRC_ON_OFF 59
>>> +#define MMC_CMD_RES_MAN 62
>>> +
>>> +#define MMC_CMD62_ARG1 0xefac62ec
>>> +#define MMC_CMD62_ARG2 0xcbaea7
>>> +
>>>
>>> #define SD_CMD_SEND_RELATIVE_ADDR 3
>>> #define SD_CMD_SWITCH_FUNC 6
>>> @@ -153,6 +158,7 @@
>>> */
>>> #define EXT_CSD_PARTITIONING_SUPPORT 160 /* RO */
>>> #define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
>>> +#define EXT_CSD_BOOT_BUS_WIDTH 177
>>> #define EXT_CSD_PART_CONF 179 /* R/W */
>>> #define EXT_CSD_BUS_WIDTH 183 /* R/W */
>>> #define EXT_CSD_HS_TIMING 185 /* R/W */
>>> @@ -177,6 +183,12 @@
>>> #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
>>> #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
>>>
>>> +#define EXT_CSD_BOOT_ACK_ENABLE (1<<6)
>>> +#define EXT_CSD_BOOT_PARTITION_ENABLE (1<<3)
>>> +#define EXT_CSD_PARTITION_ACCESS_ENABLE (1<<0)
>>> +#define EXT_CSD_PARTITION_ACCESS_DISABLE (0<<0)
>>> +
>>> +
>>> #define R1_ILLEGAL_COMMAND (1 << 22)
>>> #define R1_APP_CMD (1 << 5)
>>>
>>> @@ -275,6 +287,10 @@ int board_mmc_getcd(struct mmc *mmc);
>>> int mmc_switch_part(int dev_num, unsigned int part_num);
>>> int mmc_getcd(struct mmc *mmc);
>>> void spl_mmc_load(void) __noreturn;
>>> +int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long
>> bootsize,
>>> + unsigned long rpmbsize);
>>> +int mmc_boot_open(struct mmc *mmc);
>>> +int mmc_boot_close(struct mmc *mmc);
>>>
>>> #ifdef CONFIG_GENERIC_MMC
>>> #define mmc_host_is_spi(mmc) ((mmc)->host_caps & MMC_MODE_SPI)
>>>
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
>>
>
>
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
next prev parent reply other threads:[~2013-01-07 4:34 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-04 9:34 [U-Boot] [PATCH V4 0/9] EXYNOS5: Enable DWMMC, add FDT support for DWMMC and Amar
2013-01-04 9:34 ` [U-Boot] [PATCH V4 1/9] FDT: Add compatible string for DWMMC Amar
2013-01-04 9:34 ` [U-Boot] [PATCH V4 2/9] EXYNOS5: FDT: Add DWMMC device node data Amar
2013-01-10 15:21 ` Simon Glass
2013-01-15 9:11 ` Amarendra Reddy
2013-01-04 9:34 ` [U-Boot] [PATCH V4 3/9] DWMMC: Initialise dwmci and resolve EMMC read write issues Amar
2013-01-10 15:26 ` Simon Glass
2013-01-11 4:01 ` Jaehoon Chung
2013-01-11 5:43 ` Simon Glass
2013-01-15 8:26 ` Amarendra Reddy
2013-01-04 9:34 ` [U-Boot] [PATCH V4 4/9] EXYNOS5: DWMMC: Added FDT support for DWMMC Amar
2013-01-10 15:33 ` Simon Glass
2013-01-11 4:12 ` Jaehoon Chung
2013-01-11 5:44 ` Simon Glass
2013-01-11 13:06 ` Amarendra Reddy
2013-01-22 5:23 ` Joonyoung Shim
2013-01-22 6:41 ` Amarendra Reddy
2013-01-04 9:34 ` [U-Boot] [PATCH V4 5/9] EXYNOS5: DWMMC: API to set mmc clock divisor Amar
2013-01-10 15:35 ` Simon Glass
2013-01-11 3:52 ` Jaehoon Chung
2013-01-11 13:23 ` Amarendra Reddy
2013-01-11 14:28 ` Simon Glass
2013-01-04 9:34 ` [U-Boot] [PATCH V4 6/9] SMDK5250: Initialise and Enable DWMMC, support FDT and non-FDT Amar
2013-01-10 16:57 ` Simon Glass
2013-01-11 17:58 ` Amarendra Reddy
2013-01-12 16:41 ` Simon Glass
2013-01-15 9:16 ` Amarendra Reddy
2013-01-04 9:34 ` [U-Boot] [PATCH V4 7/9] MMC: APIs to support resize of EMMC boot partition Amar
2013-01-04 10:27 ` Jaehoon Chung
2013-01-07 4:19 ` Amarendra Reddy
2013-01-07 4:34 ` Jaehoon Chung [this message]
2013-01-07 5:54 ` Amarendra Reddy
2013-01-07 9:23 ` Jaehoon Chung
2013-01-04 9:34 ` [U-Boot] [PATCH V4 8/9] SMDK5250: Enable EMMC booting Amar
2013-01-10 16:39 ` Simon Glass
2013-01-15 9:14 ` Amarendra Reddy
2013-01-04 9:34 ` [U-Boot] [PATCH V4 9/9] COMMON: MMC: Command to support EMMC booting and to Amar
2013-01-10 16:46 ` Simon Glass
2013-01-11 3:54 ` Jaehoon Chung
2013-01-11 5:41 ` Simon Glass
2013-01-11 13:50 ` Amarendra Reddy
2013-01-11 14:31 ` Simon Glass
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=50EA5040.7090108@samsung.com \
--to=jh80.chung@samsung.com \
--cc=u-boot@lists.denx.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.