Commit 83ff59a0 authored by Mike Frysinger's avatar Mike Frysinger Committed by Artem Bityutskiy

UBI: support ubi_num on mtd.ubi command line

I want to be able to add UBI volumes with specific numbers, but the
command line API doesn't have that atm.  Add an additional token to
support it.

Artem: amended the patch a little bit.
Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
parent 584d4623
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
#define MTD_PARAM_LEN_MAX 64 #define MTD_PARAM_LEN_MAX 64
/* Maximum number of comma-separated items in the 'mtd=' parameter */ /* Maximum number of comma-separated items in the 'mtd=' parameter */
#define MTD_PARAM_MAX_COUNT 3 #define MTD_PARAM_MAX_COUNT 4
/* Maximum value for the number of bad PEBs per 1024 PEBs */ /* Maximum value for the number of bad PEBs per 1024 PEBs */
#define MAX_MTD_UBI_BEB_LIMIT 768 #define MAX_MTD_UBI_BEB_LIMIT 768
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
*/ */
struct mtd_dev_param { struct mtd_dev_param {
char name[MTD_PARAM_LEN_MAX]; char name[MTD_PARAM_LEN_MAX];
int ubi_num;
int vid_hdr_offs; int vid_hdr_offs;
int max_beb_per1024; int max_beb_per1024;
}; };
...@@ -1269,7 +1270,7 @@ static int __init ubi_init(void) ...@@ -1269,7 +1270,7 @@ static int __init ubi_init(void)
} }
mutex_lock(&ubi_devices_mutex); mutex_lock(&ubi_devices_mutex);
err = ubi_attach_mtd_dev(mtd, UBI_DEV_NUM_AUTO, err = ubi_attach_mtd_dev(mtd, p->ubi_num,
p->vid_hdr_offs, p->max_beb_per1024); p->vid_hdr_offs, p->max_beb_per1024);
mutex_unlock(&ubi_devices_mutex); mutex_unlock(&ubi_devices_mutex);
if (err < 0) { if (err < 0) {
...@@ -1387,7 +1388,7 @@ static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp) ...@@ -1387,7 +1388,7 @@ static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp)
struct mtd_dev_param *p; struct mtd_dev_param *p;
char buf[MTD_PARAM_LEN_MAX]; char buf[MTD_PARAM_LEN_MAX];
char *pbuf = &buf[0]; char *pbuf = &buf[0];
char *tokens[MTD_PARAM_MAX_COUNT]; char *tokens[MTD_PARAM_MAX_COUNT], *token;
if (!val) if (!val)
return -EINVAL; return -EINVAL;
...@@ -1427,37 +1428,53 @@ static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp) ...@@ -1427,37 +1428,53 @@ static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp)
p = &mtd_dev_param[mtd_devs]; p = &mtd_dev_param[mtd_devs];
strcpy(&p->name[0], tokens[0]); strcpy(&p->name[0], tokens[0]);
if (tokens[1]) token = tokens[1];
p->vid_hdr_offs = bytes_str_to_int(tokens[1]); if (token) {
p->vid_hdr_offs = bytes_str_to_int(token);
if (p->vid_hdr_offs < 0) if (p->vid_hdr_offs < 0)
return p->vid_hdr_offs; return p->vid_hdr_offs;
}
if (tokens[2]) { token = tokens[2];
int err = kstrtoint(tokens[2], 10, &p->max_beb_per1024); if (token) {
int err = kstrtoint(token, 10, &p->max_beb_per1024);
if (err) { if (err) {
ubi_err("bad value for max_beb_per1024 parameter: %s", ubi_err("bad value for max_beb_per1024 parameter: %s",
tokens[2]); token);
return -EINVAL; return -EINVAL;
} }
} }
token = tokens[3];
if (token) {
int err = kstrtoint(token, 10, &p->ubi_num);
if (err) {
ubi_err("bad value for ubi_num parameter: %s", token);
return -EINVAL;
}
} else
p->ubi_num = UBI_DEV_NUM_AUTO;
mtd_devs += 1; mtd_devs += 1;
return 0; return 0;
} }
module_param_call(mtd, ubi_mtd_param_parse, NULL, NULL, 000); module_param_call(mtd, ubi_mtd_param_parse, NULL, NULL, 000);
MODULE_PARM_DESC(mtd, "MTD devices to attach. Parameter format: mtd=<name|num|path>[,<vid_hdr_offs>[,max_beb_per1024]].\n" MODULE_PARM_DESC(mtd, "MTD devices to attach. Parameter format: mtd=<name|num|path>[,<vid_hdr_offs>[,max_beb_per1024[,ubi_num]]].\n"
"Multiple \"mtd\" parameters may be specified.\n" "Multiple \"mtd\" parameters may be specified.\n"
"MTD devices may be specified by their number, name, or path to the MTD character device node.\n" "MTD devices may be specified by their number, name, or path to the MTD character device node.\n"
"Optional \"vid_hdr_offs\" parameter specifies UBI VID header position to be used by UBI. (default value if 0)\n" "Optional \"vid_hdr_offs\" parameter specifies UBI VID header position to be used by UBI. (default value if 0)\n"
"Optional \"max_beb_per1024\" parameter specifies the maximum expected bad eraseblock per 1024 eraseblocks. (default value (" "Optional \"max_beb_per1024\" parameter specifies the maximum expected bad eraseblock per 1024 eraseblocks. (default value ("
__stringify(CONFIG_MTD_UBI_BEB_LIMIT) ") if 0)\n" __stringify(CONFIG_MTD_UBI_BEB_LIMIT) ") if 0)\n"
"Optional \"ubi_num\" parameter specifies UBI device number which have to be assigned to the newly created UBI device (assigned automatically by default)\n"
"\n" "\n"
"Example 1: mtd=/dev/mtd0 - attach MTD device /dev/mtd0.\n" "Example 1: mtd=/dev/mtd0 - attach MTD device /dev/mtd0.\n"
"Example 2: mtd=content,1984 mtd=4 - attach MTD device with name \"content\" using VID header offset 1984, and MTD device number 4 with default VID header offset.\n" "Example 2: mtd=content,1984 mtd=4 - attach MTD device with name \"content\" using VID header offset 1984, and MTD device number 4 with default VID header offset.\n"
"Example 3: mtd=/dev/mtd1,0,25 - attach MTD device /dev/mtd1 using default VID header offset and reserve 25*nand_size_in_blocks/1024 erase blocks for bad block handling.\n" "Example 3: mtd=/dev/mtd1,0,25 - attach MTD device /dev/mtd1 using default VID header offset and reserve 25*nand_size_in_blocks/1024 erase blocks for bad block handling.\n"
"Example 4: mtd=/dev/mtd1,0,0,5 - attach MTD device /dev/mtd1 to UBI 5 and using default values for the other fields.\n"
"\t(e.g. if the NAND *chipset* has 4096 PEB, 100 will be reserved for this UBI device)."); "\t(e.g. if the NAND *chipset* has 4096 PEB, 100 will be reserved for this UBI device).");
#ifdef CONFIG_MTD_UBI_FASTMAP #ifdef CONFIG_MTD_UBI_FASTMAP
module_param(fm_autoconvert, bool, 0644); module_param(fm_autoconvert, bool, 0644);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment