|
@@ -85,15 +85,25 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|
ulong addr = simple_strtoul(argv[2], NULL, 16);
|
|
ulong addr = simple_strtoul(argv[2], NULL, 16);
|
|
ulong ofs = simple_strtoul(argv[3], NULL, 16);
|
|
ulong ofs = simple_strtoul(argv[3], NULL, 16);
|
|
size_t len = simple_strtoul(argv[4], NULL, 16);
|
|
size_t len = simple_strtoul(argv[4], NULL, 16);
|
|
- size_t retlen = 0;
|
|
|
|
int oob = strncmp(argv[1], "read.oob", 8) ? 0 : 1;
|
|
int oob = strncmp(argv[1], "read.oob", 8) ? 0 : 1;
|
|
|
|
+ struct mtd_oob_ops ops;
|
|
|
|
+
|
|
|
|
+ ops.mode = MTD_OOB_PLACE;
|
|
|
|
+
|
|
|
|
+ if (oob) {
|
|
|
|
+ ops.len = 0;
|
|
|
|
+ ops.datbuf = NULL;
|
|
|
|
+ ops.ooblen = len;
|
|
|
|
+ ops.oobbuf = (u_char *) addr;
|
|
|
|
+ } else {
|
|
|
|
+ ops.len = len;
|
|
|
|
+ ops.datbuf = (u_char *) addr;
|
|
|
|
+ ops.ooblen = 0;
|
|
|
|
+ ops.oobbuf = NULL;
|
|
|
|
+ }
|
|
|
|
+ ops.retlen = ops.oobretlen = 0;
|
|
|
|
|
|
- if (oob)
|
|
|
|
- onenand_read_oob(&onenand_mtd, ofs, len,
|
|
|
|
- &retlen, (u_char *) addr);
|
|
|
|
- else
|
|
|
|
- onenand_read(&onenand_mtd, ofs, len, &retlen,
|
|
|
|
- (u_char *) addr);
|
|
|
|
|
|
+ onenand_mtd.read_oob(&onenand_mtd, ofs, &ops);
|
|
printf("Done\n");
|
|
printf("Done\n");
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -117,9 +127,12 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|
ulong block = simple_strtoul(argv[3], NULL, 10);
|
|
ulong block = simple_strtoul(argv[3], NULL, 10);
|
|
ulong page = simple_strtoul(argv[4], NULL, 10);
|
|
ulong page = simple_strtoul(argv[4], NULL, 10);
|
|
size_t len = simple_strtol(argv[5], NULL, 10);
|
|
size_t len = simple_strtol(argv[5], NULL, 10);
|
|
- size_t retlen = 0;
|
|
|
|
ulong ofs;
|
|
ulong ofs;
|
|
int oob = strncmp(argv[1], "block.oob", 9) ? 0 : 1;
|
|
int oob = strncmp(argv[1], "block.oob", 9) ? 0 : 1;
|
|
|
|
+ struct mtd_oob_ops ops;
|
|
|
|
+
|
|
|
|
+ ops.mode = MTD_OOB_PLACE;
|
|
|
|
+
|
|
|
|
|
|
ofs = block << onenand_chip.erase_shift;
|
|
ofs = block << onenand_chip.erase_shift;
|
|
if (page)
|
|
if (page)
|
|
@@ -127,17 +140,21 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
|
|
|
|
|
|
if (!len) {
|
|
if (!len) {
|
|
if (oob)
|
|
if (oob)
|
|
- len = 64;
|
|
|
|
|
|
+ ops.ooblen = 64;
|
|
else
|
|
else
|
|
- len = 512;
|
|
|
|
|
|
+ ops.len = 512;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (oob) {
|
|
|
|
+ ops.datbuf = NULL;
|
|
|
|
+ ops.oobbuf = (u_char *) addr;
|
|
|
|
+ } else {
|
|
|
|
+ ops.datbuf = (u_char *) addr;
|
|
|
|
+ ops.oobbuf = NULL;
|
|
}
|
|
}
|
|
|
|
+ ops.retlen = ops.oobretlen = 0;
|
|
|
|
|
|
- if (oob)
|
|
|
|
- onenand_read_oob(&onenand_mtd, ofs, len,
|
|
|
|
- &retlen, (u_char *) addr);
|
|
|
|
- else
|
|
|
|
- onenand_read(&onenand_mtd, ofs, len, &retlen,
|
|
|
|
- (u_char *) addr);
|
|
|
|
|
|
+ onenand_read_oob(&onenand_mtd, ofs, &ops);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|