[U-Boot] [PATCH]: common/cmd_flash.c: Fix mtdparts usage in "erase" and "protect"

Teh Kok How khteh at smartbridges.com
Fri Feb 12 11:35:52 CET 2010


Fixes wrong argument to mtd_id_parse that affects u-boot command `erase`
and `protect` <part-id>. This fix passes the correct part-id to the commands
so that `erase rootfs` and `protect rootfs` work.


Signed-off-by: Kok How, Teh <k_h_teh at yahoo.com>
--- u-boot-2009.11.1.orig/common/cmd_flash.c    2010-01-25
16:35:12.000000000 +0800
+++ u-boot-2009.11.1.new/common/cmd_flash.c     2010-02-12
16:18:10.565540182 +0800
@@ -43,6 +43,7 @@

 #ifndef CONFIG_SYS_NO_FLASH
 extern flash_info_t flash_info[];      /* info for FLASH chips */
+extern struct mtd_device *current_mtd_dev;

 /*
  * The user interface starts numbering for Flash banks with 1
@@ -331,6 +332,7 @@
        u8 dev_type, dev_num, pnum;
 #endif
        int rcode = 0;
+       char mtd_dev[10];

        if (argc < 2) {
                cmd_usage(cmdtp);
@@ -359,7 +361,8 @@

 #if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_CMD_MTDPARTS)
        /* erase <part-id> - erase partition */
-       if ((argc == 2) && (mtd_id_parse(argv[1], NULL, &dev_type, &dev_num)
== 0)) {
+        sprintf(mtd_dev, "%s%d", MTD_DEV_TYPE(current_mtd_dev->id->type),
current_mtd_dev->id->num);
+       if ((argc == 2) && (mtd_id_parse(mtd_dev, NULL, &dev_type, &dev_num)
== 0)) {
                mtdparts_init();
                if (find_dev_and_part(argv[1], &dev, &pnum, &part) == 0) {
                        if (dev->id->type == MTD_DEV_TYPE_NOR) {
@@ -481,6 +484,7 @@
 #endif
        int p;
        int rcode = 0;
+       char mtd_dev[10];

        if (argc < 3) {
                cmd_usage(cmdtp);
@@ -567,7 +571,8 @@

 #if defined(CONFIG_CMD_JFFS2) && defined(CONFIG_CMD_MTDPARTS)
        /* protect on/off <part-id> */
-       if ((argc == 3) && (mtd_id_parse(argv[2], NULL, &dev_type, &dev_num)
== 0)) {
+        sprintf(mtd_dev, "%s%d", MTD_DEV_TYPE(current_mtd_dev->id->type),
current_mtd_dev->id->num);
+       if ((argc == 3) && (mtd_id_parse(mtd_dev, NULL, &dev_type, &dev_num)
== 0)) {
                mtdparts_init();
                if (find_dev_and_part(argv[2], &dev, &pnum, &part) == 0) {
                        if (dev->id->type == MTD_DEV_TYPE_NOR) {



More information about the U-Boot mailing list