hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
u-boot/cmd/mtd.c
....@@ -13,6 +13,10 @@
1313 #include <mapmem.h>
1414 #include <mtd.h>
1515
16
+#define DEV_NAME_MAX_LENGTH 0x40
17
+static char g_devname[DEV_NAME_MAX_LENGTH];
18
+static struct mtd_info *g_mtd;
19
+
1620 static uint mtd_len_to_pages(struct mtd_info *mtd, u64 len)
1721 {
1822 do_div(len, mtd->writesize);
....@@ -244,14 +248,20 @@
244248 return CMD_RET_USAGE;
245249
246250 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));
253264 }
254
- put_mtd_device(mtd);
255265
256266 argc -= 3;
257267 argv += 3;