Message ID | 1362489090-7745-8-git-send-email-amarendra.xt@samsung.com |
---|---|
State | Superseded |
Headers | show |
Dear Amar,
In message <1362489090-7745-8-git-send-email-amarendra.xt@samsung.com> you wrote:
> This patch adds APIs to access(open / close) and to resize boot partiton of EMMC.
Can you please make this code conditional, so only boards that want
this feature (and actually use EMMC) suffer from the increased memory
footprint?
Thanks.
Viele Grüße,
Wolfgang Denk
Dear Wolfgang, Thank you for the comments. Ok, I will make this code conditional. I will prepare a new patch and post the same. Thanks & Regards Amarendra On 6 March 2013 02:13, Wolfgang Denk <wd@denx.de> wrote: > Dear Amar, > > In message <1362489090-7745-8-git-send-email-amarendra.xt@samsung.com> > you wrote: > > This patch adds APIs to access(open / close) and to resize boot partiton > of EMMC. > > Can you please make this code conditional, so only boards that want > this feature (and actually use EMMC) suffer from the increased memory > footprint? > > Thanks. > > Viele Grüße, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > The price of success is hard work, dedication to the job at hand, and > the determination that whether we win or lose, we have applied the > best of ourselves to the task at hand. - Vince Lombardi > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot >
On 07/03/13 18:26, Amarendra Reddy wrote: > Dear Wolfgang, > Thank you for the comments. > Ok, I will make this code conditional. please don't top posting. > I will prepare a new patch and post the same. Do you have a plan to resend? > > Thanks & Regards > Amarendra > > On 6 March 2013 02:13, Wolfgang Denk <wd@denx.de> wrote: > >> Dear Amar, >> >> In message <1362489090-7745-8-git-send-email-amarendra.xt@samsung.com> >> you wrote: >>> This patch adds APIs to access(open / close) and to resize boot partiton >> of EMMC. >> >> Can you please make this code conditional, so only boards that want >> this feature (and actually use EMMC) suffer from the increased memory >> footprint? >> >> Thanks. >> >> Viele Grüße, >> >> Wolfgang Denk >> >> -- >> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel >> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany >> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de >> The price of success is hard work, dedication to the job at hand, and >> the determination that whether we win or lose, we have applied the >> best of ourselves to the task at hand. - Vince Lombardi >> _______________________________________________ >> U-Boot mailing list >> U-Boot@lists.denx.de >> http://lists.denx.de/mailman/listinfo/u-boot >> > > > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot > Thanks, Minkyu Kang.
Dear Minkyu, I have plans to send a new patch to 'make this code conditional'. But it will be a new patch. I am planning to take up this activity after the V7 patchset is merged into mainline. All patches of V7 patchset have been ACKED. On top, DWMMC patchset is long pending, and any changes will further cause delay. Please provide your comments. Thanks & Regards Amarendra Reddy On 28 March 2013 13:48, Minkyu Kang <mk7.kang@samsung.com> wrote: > On 07/03/13 18:26, Amarendra Reddy wrote: > > Dear Wolfgang, > > Thank you for the comments. > > Ok, I will make this code conditional. > > please don't top posting. > > > I will prepare a new patch and post the same. > > Do you have a plan to resend? > > > > > Thanks & Regards > > Amarendra > > > > On 6 March 2013 02:13, Wolfgang Denk <wd@denx.de> wrote: > > > >> Dear Amar, > >> > >> In message <1362489090-7745-8-git-send-email-amarendra.xt@samsung.com> > >> you wrote: > >>> This patch adds APIs to access(open / close) and to resize boot > partiton > >> of EMMC. > >> > >> Can you please make this code conditional, so only boards that want > >> this feature (and actually use EMMC) suffer from the increased memory > >> footprint? > >> > >> Thanks. > >> > >> Viele Grüße, > >> > >> Wolfgang Denk > >> > >> -- > >> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > >> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > >> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > >> The price of success is hard work, dedication to the job at hand, and > >> the determination that whether we win or lose, we have applied the > >> best of ourselves to the task at hand. - Vince Lombardi > >> _______________________________________________ > >> U-Boot mailing list > >> U-Boot@lists.denx.de > >> http://lists.denx.de/mailman/listinfo/u-boot > >> > > > > > > > > _______________________________________________ > > U-Boot mailing list > > U-Boot@lists.denx.de > > http://lists.denx.de/mailman/listinfo/u-boot > > > > Thanks, > Minkyu Kang. >
Dear Amarendra Reddy, On 28/03/13 18:10, Amarendra Reddy wrote: > Dear Minkyu, > > I have plans to send a new patch to 'make this code conditional'. > But it will be a new patch. I always said to you. Please DO NOT top posting... please. > > I am planning to take up this activity after the V7 patchset is merged into mainline. It's OK. > All patches of V7 patchset have been ACKED. > On top, DWMMC patchset is long pending, and any changes will further cause delay. > Please provide your comments. please check my comments, patch 8 and 10. > > Thanks & Regards > Amarendra Reddy > > On 28 March 2013 13:48, Minkyu Kang <mk7.kang@samsung.com <mailto:mk7.kang@samsung.com>> wrote: > > On 07/03/13 18:26, Amarendra Reddy wrote: > > Dear Wolfgang, > > Thank you for the comments. > > Ok, I will make this code conditional. > > please don't top posting. > > > I will prepare a new patch and post the same. > > Do you have a plan to resend? > > > > > Thanks & Regards > > Amarendra > > > > On 6 March 2013 02:13, Wolfgang Denk <wd@denx.de <mailto:wd@denx.de>> wrote: > > > >> Dear Amar, > >> > >> In message <1362489090-7745-8-git-send-email-amarendra.xt@samsung.com <mailto:1362489090-7745-8-git-send-email-amarendra.xt@samsung.com>> > >> you wrote: > >>> This patch adds APIs to access(open / close) and to resize boot partiton > >> of EMMC. > >> > >> Can you please make this code conditional, so only boards that want > >> this feature (and actually use EMMC) suffer from the increased memory > >> footprint? > >> > >> Thanks. > >> > >> Viele Grüße, > >> > >> Wolfgang Denk > >> > >> -- > >> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > >> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > >> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de <mailto:wd@denx.de> > >> The price of success is hard work, dedication to the job at hand, and > >> the determination that whether we win or lose, we have applied the > >> best of ourselves to the task at hand. - Vince Lombardi > >> _______________________________________________ > >> U-Boot mailing list > >> U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de> > >> http://lists.denx.de/mailman/listinfo/u-boot > >> > > > > > > > > _______________________________________________ > > U-Boot mailing list > > U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de> > > http://lists.denx.de/mailman/listinfo/u-boot > > > > Thanks, > Minkyu Kang. > > Thanks, Minkyu Kang.
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 72e8ce6..d3e4bf7 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1327,3 +1327,135 @@ int mmc_initialize(bd_t *bis) return 0; } + +/* + * This function changes the size of boot partition and the size of rpmb + * partition present on EMMC devices. + * + * Input Parameters: + * struct *mmc: pointer for the mmc device strcuture + * bootsize: size of boot partition + * rpmbsize: size of rpmb partition + * + * Returns 0 on success. + */ + +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; +} + +/* + * This function shall form and send the commands to open / close the + * boot partition specified by user. + * + * Input Parameters: + * ack: 0x0 - No boot acknowledge sent (default) + * 0x1 - Boot acknowledge sent during boot operation + * part_num: User selects boot data that will be sent to master + * 0x0 - Device not boot enabled (default) + * 0x1 - Boot partition 1 enabled for boot + * 0x2 - Boot partition 2 enabled for boot + * access: User selects partitions to access + * 0x0 : No access to boot partition (default) + * 0x1 : R/W boot partition 1 + * 0x2 : R/W boot partition 2 + * 0x3 : R/W Replay Protected Memory Block (RPMB) + * + * Returns 0 on success. + */ +int mmc_boot_part_access(struct mmc *mmc, u32 ack, u32 part_num, u32 access) +{ + 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(ack) | + EXT_CSD_BOOT_PART_NUM(part_num) | + EXT_CSD_PARTITION_ACCESS(access)) << 8); + + err = mmc_send_cmd(mmc, &cmd, NULL); + if (err) { + if (access) { + debug("mmc boot partition#%d open failure:" + "Error1 = %d\n", part_num, err); + } else { + debug("mmc boot partition#%d close failure:" + "Error = %d\n", part_num, err); + } + return err; + } + + if (access) { + /* 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 partition#%d open failure:" + "Error2 = %d\n", part_num, err); + return err; + } + } + return 0; +} diff --git a/include/mmc.h b/include/mmc.h index a13e2bd..cbbe02d 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,16 @@ #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 EXT_CSD_BOOT_ACK(x) (x << 6) +#define EXT_CSD_BOOT_PART_NUM(x) (x << 3) +#define EXT_CSD_PARTITION_ACCESS(x) (x << 0) + + #define R1_ILLEGAL_COMMAND (1 << 22) #define R1_APP_CMD (1 << 5) @@ -201,6 +217,11 @@ #define PART_ACCESS_MASK (0x7) #define PART_SUPPORT (0x1) +/* The number of MMC physical partitions. These consist of: + * boot partitions (2), general purpose partitions (4) in MMC v4.4. + */ +#define MMC_NUM_BOOT_PARTITION 2 + struct mmc_cid { unsigned long psn; unsigned short oid; @@ -275,6 +296,11 @@ 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; +/* Function to change the size of boot partition and rpmb partitions */ +int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize, + unsigned long rpmbsize); +/* Function to send commands to open/close the specified boot partition */ +int mmc_boot_part_access(struct mmc *mmc, u32 ack, u32 part_num, u32 access); #ifdef CONFIG_GENERIC_MMC #define mmc_host_is_spi(mmc) ((mmc)->host_caps & MMC_MODE_SPI)