Message ID | 1358768638-14187-10-git-send-email-amarendra.xt@samsung.com |
---|---|
State | New |
Headers | show |
Hi Amar, On Tue, Jan 22, 2013 at 12:43 AM, Amar <amarendra.xt@samsung.com> wrote: > This patch adds commands to access(open/close) and resize boot partitions on EMMC. Acked-by: Simon Glass <sjg@chromium.org> (Minor nit below) > > Signed-off-by: Amar <amarendra.xt@samsung.com> > --- > Changes since V1: > 1)Combined the common piece of code between 'open' and 'close' > operations. > > Changes since V2: > 1)Updation of commit message and resubmition of proper patch set. > > Changes since V3: > No change. > > Changes since V4: > 1)Added a new funtion boot_part_access() to combine the common parts of > 'mmc open' and 'mmc close' functionalities. > 2)Used the generic function "mmc_boot_part_access()" instead of > two functions "mmc_boot_open()" and "mmc_boot_close()". By doing so user > can specify which boot partition to be accessed (opened / closed). > > common/cmd_mmc.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 97 insertions(+), 1 deletion(-) > > diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c > index 7dacd51..d036d34 100644 > --- a/common/cmd_mmc.c > +++ b/common/cmd_mmc.c > @@ -147,6 +147,31 @@ U_BOOT_CMD( > "- display info of the current MMC device" > ); > > +static int boot_part_access(struct mmc *mmc, u32 ack, u32 part_num, u32 access) > +{ > + int err; > + err = mmc_boot_part_access(mmc, ack, part_num, access); > + > + if ((err == 0) && (access != 0)) { > + printf("\t\t\t!!!Notice!!!\n"); > + printf("!You must close EMMC boot Partition after all" > + "images are written\n"); > + printf("!EMMC boot partition has continuity at image" > + "writing time.\n"); > + printf("!So, Do not close boot partition, Before, all" > + "images are written.\n"); So, do not close the boot partition before all images are written > + return 0; > + } else if ((err == 0) && (access == 0)) > + return 0; > + else if ((err != 0) && (access != 0)) { > + printf("EMMC boot partition-%d OPEN Failed.\n", part_num); > + return 1; > + } else { > + printf("EMMC boot partition-%d CLOSE Failed.\n", part_num); > + return 1; > + } > +} > + > static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > { > enum mmc_state state; > @@ -248,6 +273,71 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > curr_device, mmc->part_num); > > return 0; > + } else if ((strcmp(argv[1], "open") == 0) || > + (strcmp(argv[1], "close") == 0)) { > + int dev; > + struct mmc *mmc; > + u32 ack, part_num, access = 0; > + > + if (argc == 4) { > + dev = simple_strtoul(argv[2], NULL, 10); > + part_num = simple_strtoul(argv[3], NULL, 10); > + } else > + return CMD_RET_USAGE; > + > + mmc = find_mmc_device(dev); > + if (!mmc) { > + printf("no mmc device at slot %x\n", dev); > + return 1; > + } > + > + if (IS_SD(mmc)) { > + printf("SD device cannot be opened/closed\n"); > + return 1; > + } > + > + if ((part_num <= 0) || (part_num > MMC_NUM_BOOT_PARTITION)) { > + printf("Invalid boot partition number:\n"); > + printf("Boot partition number cannot be <= 0\n"); > + printf("EMMC44 supports only 2 boot partitions\n"); > + return 1; > + } > + > + if (strcmp(argv[1], "open") == 0) > + access = part_num; /* enable R/W access to boot part*/ > + if (strcmp(argv[1], "close") == 0) > + access = 0; /* No access to boot partition */ > + > + /* acknowledge to be sent during boot operation */ > + ack = 1; > + return boot_part_access(mmc, ack, part_num, access); > + > + } else if (strcmp(argv[1], "bootpart") == 0) { > + int dev; > + dev = simple_strtoul(argv[2], NULL, 10); > + > + u32 bootsize = simple_strtoul(argv[3], NULL, 10); > + u32 rpmbsize = simple_strtoul(argv[4], NULL, 10); > + struct mmc *mmc = find_mmc_device(dev); > + if (!mmc) { > + printf("no mmc device at slot %x\n", dev); > + return 1; > + } > + > + if (IS_SD(mmc)) { > + printf("It is not a EMMC device\n"); > + return 1; > + } > + > + if (0 == mmc_boot_partition_size_change(mmc, > + bootsize, rpmbsize)) { > + printf("EMMC boot partition Size %d MB\n", bootsize); > + printf("EMMC RPMB partition Size %d MB\n", rpmbsize); > + return 0; > + } else { > + printf("EMMC boot partition Size change Failed.\n"); > + return 1; > + } > } > > state = MMC_INVALID; > @@ -317,5 +407,11 @@ U_BOOT_CMD( > "mmc rescan\n" > "mmc part - lists available partition on current mmc device\n" > "mmc dev [dev] [part] - show or set current mmc device [partition]\n" > - "mmc list - lists available devices"); > + "mmc list - lists available devices\n" > + "mmc open <dev> <boot_partition>\n" > + " - Enable boot_part for booting and enable R/W access of boot_part\n" > + "mmc close <dev> <boot_partition>\n" > + " - Enable boot_part for booting and disable access to boot_part\n" > + "mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n" > + " - change sizes of boot and RPMB partions of specified device\n"); > #endif > -- > 1.8.0 > Regards, Simon
Hi Simon, Please find the response below. Thanks & Regards Amarendra Reddy On 27 January 2013 01:57, Simon Glass <sjg@chromium.org> wrote: > Hi Amar, > > On Tue, Jan 22, 2013 at 12:43 AM, Amar <amarendra.xt@samsung.com> wrote: > > This patch adds commands to access(open/close) and resize boot > partitions on EMMC. > > Acked-by: Simon Glass <sjg@chromium.org> > > (Minor nit below) > > > > > Signed-off-by: Amar <amarendra.xt@samsung.com> > > --- > > Changes since V1: > > 1)Combined the common piece of code between 'open' and 'close' > > operations. > > > > Changes since V2: > > 1)Updation of commit message and resubmition of proper patch set. > > > > Changes since V3: > > No change. > > > > Changes since V4: > > 1)Added a new funtion boot_part_access() to combine the common > parts of > > 'mmc open' and 'mmc close' functionalities. > > 2)Used the generic function "mmc_boot_part_access()" instead of > > two functions "mmc_boot_open()" and "mmc_boot_close()". By doing > so user > > can specify which boot partition to be accessed (opened / > closed). > > > > common/cmd_mmc.c | 98 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++- > > 1 file changed, 97 insertions(+), 1 deletion(-) > > > > diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c > > index 7dacd51..d036d34 100644 > > --- a/common/cmd_mmc.c > > +++ b/common/cmd_mmc.c > > @@ -147,6 +147,31 @@ U_BOOT_CMD( > > "- display info of the current MMC device" > > ); > > > > +static int boot_part_access(struct mmc *mmc, u32 ack, u32 part_num, u32 > access) > > +{ > > + int err; > > + err = mmc_boot_part_access(mmc, ack, part_num, access); > > + > > + if ((err == 0) && (access != 0)) { > > + printf("\t\t\t!!!Notice!!!\n"); > > + printf("!You must close EMMC boot Partition after all" > > + "images are written\n"); > > + printf("!EMMC boot partition has continuity at image" > > + "writing time.\n"); > > + printf("!So, Do not close boot partition, Before, all" > > + "images are written.\n"); > > So, do not close the boot partition before all images are written > > Ok. will update the sentence. > > + return 0; > > + } else if ((err == 0) && (access == 0)) > > + return 0; > > + else if ((err != 0) && (access != 0)) { > > + printf("EMMC boot partition-%d OPEN Failed.\n", > part_num); > > + return 1; > > + } else { > > + printf("EMMC boot partition-%d CLOSE Failed.\n", > part_num); > > + return 1; > > + } > > +} > > + > > static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const > argv[]) > > { > > enum mmc_state state; > > @@ -248,6 +273,71 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, > int argc, char * const argv[]) > > curr_device, mmc->part_num); > > > > return 0; > > + } else if ((strcmp(argv[1], "open") == 0) || > > + (strcmp(argv[1], "close") == 0)) { > > + int dev; > > + struct mmc *mmc; > > + u32 ack, part_num, access = 0; > > + > > + if (argc == 4) { > > + dev = simple_strtoul(argv[2], NULL, 10); > > + part_num = simple_strtoul(argv[3], NULL, 10); > > + } else > > + return CMD_RET_USAGE; > > + > > + mmc = find_mmc_device(dev); > > + if (!mmc) { > > + printf("no mmc device at slot %x\n", dev); > > + return 1; > > + } > > + > > + if (IS_SD(mmc)) { > > + printf("SD device cannot be opened/closed\n"); > > + return 1; > > + } > > + > > + if ((part_num <= 0) || (part_num > > MMC_NUM_BOOT_PARTITION)) { > > + printf("Invalid boot partition number:\n"); > > + printf("Boot partition number cannot be <= 0\n"); > > + printf("EMMC44 supports only 2 boot > partitions\n"); > > + return 1; > > + } > > + > > + if (strcmp(argv[1], "open") == 0) > > + access = part_num; /* enable R/W access to boot > part*/ > > + if (strcmp(argv[1], "close") == 0) > > + access = 0; /* No access to boot partition */ > > + > > + /* acknowledge to be sent during boot operation */ > > + ack = 1; > > + return boot_part_access(mmc, ack, part_num, access); > > + > > + } else if (strcmp(argv[1], "bootpart") == 0) { > > + int dev; > > + dev = simple_strtoul(argv[2], NULL, 10); > > + > > + u32 bootsize = simple_strtoul(argv[3], NULL, 10); > > + u32 rpmbsize = simple_strtoul(argv[4], NULL, 10); > > + struct mmc *mmc = find_mmc_device(dev); > > + if (!mmc) { > > + printf("no mmc device at slot %x\n", dev); > > + return 1; > > + } > > + > > + if (IS_SD(mmc)) { > > + printf("It is not a EMMC device\n"); > > + return 1; > > + } > > + > > + if (0 == mmc_boot_partition_size_change(mmc, > > + bootsize, rpmbsize)) { > > + printf("EMMC boot partition Size %d MB\n", > bootsize); > > + printf("EMMC RPMB partition Size %d MB\n", > rpmbsize); > > + return 0; > > + } else { > > + printf("EMMC boot partition Size change > Failed.\n"); > > + return 1; > > + } > > } > > > > state = MMC_INVALID; > > @@ -317,5 +407,11 @@ U_BOOT_CMD( > > "mmc rescan\n" > > "mmc part - lists available partition on current mmc device\n" > > "mmc dev [dev] [part] - show or set current mmc device > [partition]\n" > > - "mmc list - lists available devices"); > > + "mmc list - lists available devices\n" > > + "mmc open <dev> <boot_partition>\n" > > + " - Enable boot_part for booting and enable R/W access of > boot_part\n" > > + "mmc close <dev> <boot_partition>\n" > > + " - Enable boot_part for booting and disable access to > boot_part\n" > > + "mmc bootpart <device num> <boot part size MB> <RPMB part size > MB>\n" > > + " - change sizes of boot and RPMB partions of specified > device\n"); > > #endif > > -- > > 1.8.0 > > > > Regards, > Simon > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot >
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 7dacd51..d036d34 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -147,6 +147,31 @@ U_BOOT_CMD( "- display info of the current MMC device" ); +static int boot_part_access(struct mmc *mmc, u32 ack, u32 part_num, u32 access) +{ + int err; + err = mmc_boot_part_access(mmc, ack, part_num, access); + + if ((err == 0) && (access != 0)) { + printf("\t\t\t!!!Notice!!!\n"); + printf("!You must close EMMC boot Partition after all" + "images are written\n"); + printf("!EMMC boot partition has continuity at image" + "writing time.\n"); + printf("!So, Do not close boot partition, Before, all" + "images are written.\n"); + return 0; + } else if ((err == 0) && (access == 0)) + return 0; + else if ((err != 0) && (access != 0)) { + printf("EMMC boot partition-%d OPEN Failed.\n", part_num); + return 1; + } else { + printf("EMMC boot partition-%d CLOSE Failed.\n", part_num); + return 1; + } +} + static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { enum mmc_state state; @@ -248,6 +273,71 @@ static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) curr_device, mmc->part_num); return 0; + } else if ((strcmp(argv[1], "open") == 0) || + (strcmp(argv[1], "close") == 0)) { + int dev; + struct mmc *mmc; + u32 ack, part_num, access = 0; + + if (argc == 4) { + dev = simple_strtoul(argv[2], NULL, 10); + part_num = simple_strtoul(argv[3], NULL, 10); + } else + return CMD_RET_USAGE; + + mmc = find_mmc_device(dev); + if (!mmc) { + printf("no mmc device at slot %x\n", dev); + return 1; + } + + if (IS_SD(mmc)) { + printf("SD device cannot be opened/closed\n"); + return 1; + } + + if ((part_num <= 0) || (part_num > MMC_NUM_BOOT_PARTITION)) { + printf("Invalid boot partition number:\n"); + printf("Boot partition number cannot be <= 0\n"); + printf("EMMC44 supports only 2 boot partitions\n"); + return 1; + } + + if (strcmp(argv[1], "open") == 0) + access = part_num; /* enable R/W access to boot part*/ + if (strcmp(argv[1], "close") == 0) + access = 0; /* No access to boot partition */ + + /* acknowledge to be sent during boot operation */ + ack = 1; + return boot_part_access(mmc, ack, part_num, access); + + } else if (strcmp(argv[1], "bootpart") == 0) { + int dev; + dev = simple_strtoul(argv[2], NULL, 10); + + u32 bootsize = simple_strtoul(argv[3], NULL, 10); + u32 rpmbsize = simple_strtoul(argv[4], NULL, 10); + struct mmc *mmc = find_mmc_device(dev); + if (!mmc) { + printf("no mmc device at slot %x\n", dev); + return 1; + } + + if (IS_SD(mmc)) { + printf("It is not a EMMC device\n"); + return 1; + } + + if (0 == mmc_boot_partition_size_change(mmc, + bootsize, rpmbsize)) { + printf("EMMC boot partition Size %d MB\n", bootsize); + printf("EMMC RPMB partition Size %d MB\n", rpmbsize); + return 0; + } else { + printf("EMMC boot partition Size change Failed.\n"); + return 1; + } } state = MMC_INVALID; @@ -317,5 +407,11 @@ U_BOOT_CMD( "mmc rescan\n" "mmc part - lists available partition on current mmc device\n" "mmc dev [dev] [part] - show or set current mmc device [partition]\n" - "mmc list - lists available devices"); + "mmc list - lists available devices\n" + "mmc open <dev> <boot_partition>\n" + " - Enable boot_part for booting and enable R/W access of boot_part\n" + "mmc close <dev> <boot_partition>\n" + " - Enable boot_part for booting and disable access to boot_part\n" + "mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n" + " - change sizes of boot and RPMB partions of specified device\n"); #endif
This patch adds commands to access(open/close) and resize boot partitions on EMMC. Signed-off-by: Amar <amarendra.xt@samsung.com> --- Changes since V1: 1)Combined the common piece of code between 'open' and 'close' operations. Changes since V2: 1)Updation of commit message and resubmition of proper patch set. Changes since V3: No change. Changes since V4: 1)Added a new funtion boot_part_access() to combine the common parts of 'mmc open' and 'mmc close' functionalities. 2)Used the generic function "mmc_boot_part_access()" instead of two functions "mmc_boot_open()" and "mmc_boot_close()". By doing so user can specify which boot partition to be accessed (opened / closed). common/cmd_mmc.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-)