From d44c5d157ad8901a1fa89fd291c2d84d069bff0b Mon Sep 17 00:00:00 2001 From: daeinki Date: Mon, 30 Nov 2009 16:53:57 +0900 Subject: [PATCH] s5pc110: onenand: added onenand read operation. Signed-off-by: daeinki --- common/cmd_onenand.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/common/cmd_onenand.c b/common/cmd_onenand.c index 2b8f01b..34be0aa 100644 --- a/common/cmd_onenand.c +++ b/common/cmd_onenand.c @@ -292,6 +292,42 @@ next: return 0; } +int onenand_read(ulong off, char *buf, unsigned int *out_size) +{ + mtd = &onenand_mtd; + + int ret; + u_char *datbuf; + struct mtd_oob_ops ops; + loff_t addr; + + datbuf = malloc(mtd->writesize); + if (!datbuf) { + puts("No memory for page buffer\n"); + return -1; + } + off &= ~(mtd->writesize - 1); + addr = (loff_t) off; + memset(&ops, 0, sizeof(ops)); + ops.datbuf = datbuf; + + ops.len = mtd->writesize; + ops.retlen = 0; + ret = mtd->read_oob(mtd, addr, &ops); + if (ret < 0) { + printf("Error (%d) reading page %08lx\n", ret, off); + free(datbuf); + return -1; + } + + memcpy(buf, datbuf, ops.retlen); + *out_size = ops.retlen; + + free(datbuf); + + return 0; +} + static int onenand_dump(struct mtd_info *mtd, ulong off, int only_oob) { int i; -- 2.7.4