| .. | .. |
|---|
| 13 | 13 | #include <mapmem.h> |
|---|
| 14 | 14 | #include <mtd.h> |
|---|
| 15 | 15 | |
|---|
| 16 | +#define DEV_NAME_MAX_LENGTH 0x40 |
|---|
| 17 | +static char g_devname[DEV_NAME_MAX_LENGTH]; |
|---|
| 18 | +static struct mtd_info *g_mtd; |
|---|
| 19 | + |
|---|
| 16 | 20 | static uint mtd_len_to_pages(struct mtd_info *mtd, u64 len) |
|---|
| 17 | 21 | { |
|---|
| 18 | 22 | do_div(len, mtd->writesize); |
|---|
| .. | .. |
|---|
| 244 | 248 | return CMD_RET_USAGE; |
|---|
| 245 | 249 | |
|---|
| 246 | 250 | mtd_name = argv[2]; |
|---|
| 247 | | - mtd_probe_devices(); |
|---|
| 248 | | - mtd = get_mtd_device_nm(mtd_name); |
|---|
| 249 | | - if (IS_ERR_OR_NULL(mtd)) { |
|---|
| 250 | | - printf("MTD device %s not found, ret %ld\n", |
|---|
| 251 | | - mtd_name, PTR_ERR(mtd)); |
|---|
| 252 | | - return CMD_RET_FAILURE; |
|---|
| 251 | + if (!strncmp(mtd_name, g_devname, strlen(mtd_name)) && g_mtd) { |
|---|
| 252 | + mtd = g_mtd; |
|---|
| 253 | + } else { |
|---|
| 254 | + mtd_probe_devices(); |
|---|
| 255 | + mtd = get_mtd_device_nm(mtd_name); |
|---|
| 256 | + if (IS_ERR_OR_NULL(mtd)) { |
|---|
| 257 | + printf("MTD device %s not found, ret %ld\n", |
|---|
| 258 | + mtd_name, PTR_ERR(mtd)); |
|---|
| 259 | + return CMD_RET_FAILURE; |
|---|
| 260 | + } |
|---|
| 261 | + put_mtd_device(mtd); |
|---|
| 262 | + g_mtd = mtd; |
|---|
| 263 | + strncpy(g_devname, mtd_name, strlen(mtd_name)); |
|---|
| 253 | 264 | } |
|---|
| 254 | | - put_mtd_device(mtd); |
|---|
| 255 | 265 | |
|---|
| 256 | 266 | argc -= 3; |
|---|
| 257 | 267 | argv += 3; |
|---|