.. | .. |
---|
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; |
---|