All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes
@ 2011-11-10  8:41 Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
                   ` (5 more replies)
  0 siblings, 6 replies; 23+ messages in thread
From: Lukasz Majewski @ 2011-11-10  8:41 UTC (permalink / raw)
  To: u-boot

This patch sets add board dependent onenand probes.
Several fixes for GONI and C210_universal targets have been added.

I'd like to ask other users of OneNAND infrastructure to _TEST_ if
changes made on the onenand_base common code haven't broken anything.

Tested at:
	Samsung S5PC110 GONI
        Samsung S5PC210 Universal

Lukasz Majewski (4):
  onenand:samsung Target dependent OneNAND chip probe function
  onenand:samsung OneNAND chip probe functions added for GONI and
    C210_Universal
  onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  onenand: samsung: Enable support OneNAND support at Samsung's
    S5PC210_Universal

 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 +
 drivers/mtd/onenand/onenand_base.c     |   88 +++++++++++++++++++++++--------
 drivers/mtd/onenand/samsung.c          |   10 ++++
 include/configs/s5pc210_universal.h    |    1 +
 include/linux/mtd/onenand.h            |    5 ++
 include/linux/mtd/samsung_onenand.h    |    2 +
 7 files changed, 86 insertions(+), 23 deletions(-)

-- 
1.7.2.3

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
@ 2011-11-10  8:41 ` Lukasz Majewski
  2011-11-20  0:06   ` Marek Vasut
  2011-11-10  8:41 ` [U-Boot] [PATCH 2/4] onenand:samsung OneNAND chip probe functions added for GONI and C210_Universal Lukasz Majewski
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 23+ messages in thread
From: Lukasz Majewski @ 2011-11-10  8:41 UTC (permalink / raw)
  To: u-boot

Separate callback for probing OneNAND memory chip.
If no special function is defined, default implementation will be used.

This approach gives more flexibility for OneNAND device probing.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 ./tools/checkpatch.pl -
total: 0 errors, 0 warnings, 108 lines checked

NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE

---
 drivers/mtd/onenand/onenand_base.c  |   43 +++++++++++++++++++++++++++++-----
 drivers/mtd/onenand/samsung.c       |   10 ++++++++
 include/linux/mtd/onenand.h         |    1 +
 include/linux/mtd/samsung_onenand.h |    2 +
 4 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 24e02c2..a557d48 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -2505,23 +2505,24 @@ out:
 }
 
 /**
- * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * onenand_chip_probe - [OneNAND Interface] Probe the OneNAND chip
  * @param mtd		MTD device structure
  *
  * OneNAND detection method:
  *   Compare the the values from command with ones from register
  */
-static int onenand_probe(struct mtd_info *mtd)
+static int onenand_chip_probe(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
-	int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
-	int density;
+	int bram_maf_id, bram_dev_id, maf_id, dev_id;
 	int syscfg;
 
 	/* Save system configuration 1 */
 	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
+
 	/* Clear Sync. Burst Read mode to read BootRAM */
-	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base + ONENAND_REG_SYS_CFG1);
+	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ),
+			 this->base + ONENAND_REG_SYS_CFG1);
 
 	/* Send the command for reading device ID from BootRAM */
 	this->write_word(ONENAND_CMD_READID, this->base + ONENAND_BOOTRAM);
@@ -2546,13 +2547,38 @@ static int onenand_probe(struct mtd_info *mtd)
 	/* Read manufacturer and device IDs from Register */
 	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
 	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
-	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
-	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
 
 	/* Check OneNAND device */
 	if (maf_id != bram_maf_id || dev_id != bram_dev_id)
 		return -ENXIO;
 
+	return 0;
+}
+
+/**
+ * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * @param mtd		MTD device structure
+ *
+ * OneNAND detection method:
+ *   Compare the the values from command with ones from register
+ */
+int onenand_probe(struct mtd_info *mtd)
+{
+	struct onenand_chip *this = mtd->priv;
+	int maf_id, dev_id, ver_id;
+	int density;
+	int ret;
+
+	ret = this->chip_probe(mtd);
+	if (ret)
+		return ret;
+
+	/* Read manufacturer and device IDs from Register */
+	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
+	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
+	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
+	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
+
 	/* Flash device information */
 	mtd->name = onenand_print_device_info(dev_id, ver_id);
 	this->device_id = dev_id;
@@ -2659,6 +2685,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
 	if (!this->write_bufferram)
 		this->write_bufferram = onenand_write_bufferram;
 
+	if (!this->chip_probe)
+		this->chip_probe = onenand_chip_probe;
+
 	if (!this->block_markbad)
 		this->block_markbad = onenand_default_block_markbad;
 	if (!this->scan_bbt)
diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
index 20b4912..1f4bd81 100644
--- a/drivers/mtd/onenand/samsung.c
+++ b/drivers/mtd/onenand/samsung.c
@@ -590,6 +590,16 @@ static void s3c_set_width_regs(struct onenand_chip *this)
 }
 #endif
 
+int s5pc110_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
+int s5pc210_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
 void s3c_onenand_init(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index 5465562..dea42f4 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -101,6 +101,7 @@ struct onenand_chip {
 				size_t count);
 	unsigned short (*read_word) (void __iomem *addr);
 	void (*write_word) (unsigned short value, void __iomem *addr);
+	int (*chip_probe)(struct mtd_info *mtd);
 	void (*mmcontrol) (struct mtd_info *mtd, int sync_read);
 	int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
 	int (*scan_bbt)(struct mtd_info *mtd);
diff --git a/include/linux/mtd/samsung_onenand.h b/include/linux/mtd/samsung_onenand.h
index 021fa27..ddb29bb 100644
--- a/include/linux/mtd/samsung_onenand.h
+++ b/include/linux/mtd/samsung_onenand.h
@@ -127,5 +127,7 @@ struct samsung_onenand {
 
 /* common initialize function */
 extern void s3c_onenand_init(struct mtd_info *);
+extern int s5pc110_chip_probe(struct mtd_info *);
+extern int s5pc210_chip_probe(struct mtd_info *);
 
 #endif
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 2/4] onenand:samsung OneNAND chip probe functions added for GONI and C210_Universal
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
@ 2011-11-10  8:41 ` Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2011-11-10  8:41 UTC (permalink / raw)
  To: u-boot

Separate callback for probing OneNAND memory chip.

Tested at:
       Samsung S5PC110 GONI
       Samsung S5PC210 Universal

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
./tools/checkpatch.pl -
total: 0 errors, 0 warnings, 17 lines checked

NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE

---
 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 ++
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/board/samsung/goni/onenand.c b/board/samsung/goni/onenand.c
index 8d3769b..9dd80fa 100644
--- a/board/samsung/goni/onenand.c
+++ b/board/samsung/goni/onenand.c
@@ -33,4 +33,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc110_chip_probe;
 }
diff --git a/board/samsung/universal_c210/onenand.c b/board/samsung/universal_c210/onenand.c
index 20e1dc5..5b92308 100644
--- a/board/samsung/universal_c210/onenand.c
+++ b/board/samsung/universal_c210/onenand.c
@@ -24,6 +24,7 @@
 #include <common.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/onenand.h>
+#include <linux/mtd/samsung_onenand.h>
 
 void onenand_board_init(struct mtd_info *mtd)
 {
@@ -31,4 +32,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc210_chip_probe;
 }
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 2/4] onenand:samsung OneNAND chip probe functions added for GONI and C210_Universal Lukasz Majewski
@ 2011-11-10  8:41 ` Lukasz Majewski
  2011-11-10  8:41 ` [U-Boot] [PATCH 4/4] onenand: samsung: Enable support OneNAND support at Samsung's S5PC210_Universal Lukasz Majewski
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2011-11-10  8:41 UTC (permalink / raw)
  To: u-boot

This replacement is for causing 4KB page size devices to work properly
with u-boot.

The old ONENAND_IS_MLC() behavior has been preserved by explicitly
setting ONENAND_HAS_4KB_PAGE for those devices.

This change makes the onenand_base.c file more resembling the respective
kernel sources.

Tested at:
       Samsung S5PC110 GONI
       Samsung S5PC210 Universal

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
./tools/checkpatch.pl -
total: 0 errors, 0 warnings, 162 lines checked

NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE

---
 drivers/mtd/onenand/onenand_base.c |   45 +++++++++++++++++++++++------------
 include/linux/mtd/onenand.h        |    4 +++
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index a557d48..d049473 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -367,7 +367,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		this->write_word(value,
 				 this->base + ONENAND_REG_START_ADDRESS2);
 
-		if (ONENAND_IS_MLC(this))
+		if (ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_BUFFERRAM0(this);
 		else
 			/* Switch to the next data buffer */
@@ -395,7 +395,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		case FLEXONENAND_CMD_RECOVER_LSB:
 		case ONENAND_CMD_READ:
 		case ONENAND_CMD_READOOB:
-			if (ONENAND_IS_MLC(this))
+			if (ONENAND_IS_4KB_PAGE(this))
 				dataram = ONENAND_SET_BUFFERRAM0(this);
 			else
 				dataram = ONENAND_SET_NEXT_BUFFERRAM(this);
@@ -893,7 +893,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 	while (!ret) {
 		/* If there is more to load then start next load */
 		from += thislen;
-		if (!ONENAND_IS_MLC(this) && read + thislen < len) {
+		if (!ONENAND_IS_4KB_PAGE(this) && read + thislen < len) {
 			this->main_buf = buf + thislen;
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			/*
@@ -927,7 +927,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 			oobcolumn = 0;
 		}
 
-		if (ONENAND_IS_MLC(this) && (read + thislen < len)) {
+		if (ONENAND_IS_4KB_PAGE(this) && (read + thislen < len)) {
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			ret = this->wait(mtd, FL_READING);
 			if (unlikely(ret))
@@ -944,13 +944,13 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 		/* Set up for next read from bufferRAM */
 		if (unlikely(boundary))
 			this->write_word(ONENAND_DDP_CHIP1, this->base + ONENAND_REG_START_ADDRESS2);
-		if (!ONENAND_IS_MLC(this))
+		if (!ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_NEXT_BUFFERRAM(this);
 		buf += thislen;
 		thislen = min_t(int, writesize, len - read);
 		column = 0;
 
-		if (!ONENAND_IS_MLC(this)) {
+		if (!ONENAND_IS_4KB_PAGE(this)) {
 			/* Now wait for load */
 			ret = this->wait(mtd, FL_READING);
 			onenand_update_bufferram(mtd, from, !ret);
@@ -1024,7 +1024,8 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from,
 
 	stats = mtd->ecc_stats;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	while (read < len) {
 		thislen = oobsize - column;
@@ -1202,7 +1203,8 @@ int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
 
 	MTDDEBUG(MTD_DEBUG_LEVEL3, "onenand_bbt_read_oob: from = 0x%08x, len = %zi\n", (unsigned int) from, len);
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	/* Initialize return value */
 	ops->oobretlen = 0;
@@ -1271,7 +1273,8 @@ static int onenand_verify_oob(struct mtd_info *mtd, const u_char *buf, loff_t to
 	u_char *oob_buf = this->oob_buf;
 	int status, i, readcmd;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	this->command(mtd, readcmd, to, mtd->oobsize);
 	onenand_update_bufferram(mtd, to, 0);
@@ -1560,7 +1563,8 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 
 	oobbuf = this->oob_buf;
 
-	oobcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
+	oobcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
 
 	/* Loop until all data write */
 	while (written < len) {
@@ -1577,7 +1581,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 			memcpy(oobbuf + column, buf, thislen);
 		this->write_bufferram(mtd, 0, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize);
 
-		if (ONENAND_IS_MLC(this)) {
+		if (ONENAND_IS_4KB_PAGE(this)) {
 			/* Set main area of DataRAM to 0xff*/
 			memset(this->page_buf, 0xff, mtd->writesize);
 			this->write_bufferram(mtd, 0, ONENAND_DATARAM,
@@ -2146,7 +2150,10 @@ static void onenand_check_features(struct mtd_info *mtd)
 	/* Lock scheme */
 	switch (density) {
 	case ONENAND_DEVICE_DENSITY_4Gb:
-		this->options |= ONENAND_HAS_2PLANE;
+		if (ONENAND_IS_DDP(this))
+			this->options |= ONENAND_HAS_2PLANE;
+		else
+			this->options |= ONENAND_HAS_4KB_PAGE;
 
 	case ONENAND_DEVICE_DENSITY_2Gb:
 		/* 2Gb DDP don't have 2 plane */
@@ -2168,6 +2175,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 	}
 
 	if (ONENAND_IS_MLC(this))
+		this->options |= ONENAND_HAS_4KB_PAGE;
+
+	if (ONENAND_IS_4KB_PAGE(this))
 		this->options &= ~ONENAND_HAS_2PLANE;
 
 	if (FLEXONENAND(this)) {
@@ -2181,6 +2191,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 		printk(KERN_DEBUG "Chip support all block unlock\n");
 	if (this->options & ONENAND_HAS_2PLANE)
 		printk(KERN_DEBUG "Chip has 2 plane\n");
+	if (this->options & ONENAND_HAS_4KB_PAGE)
+		printk(KERN_DEBUG "Chip has 4KiB pagesize\n");
+
 }
 
 /**
@@ -2584,6 +2597,9 @@ int onenand_probe(struct mtd_info *mtd)
 	this->device_id = dev_id;
 	this->version_id = ver_id;
 
+	/* Check OneNAND features */
+	onenand_check_features(mtd);
+
 	density = onenand_get_density(dev_id);
 	if (FLEXONENAND(this)) {
 		this->dies = ONENAND_IS_DDP(this) ? 2 : 1;
@@ -2606,7 +2622,7 @@ int onenand_probe(struct mtd_info *mtd)
 	mtd->writesize =
 	    this->read_word(this->base + ONENAND_REG_DATA_BUFFER_SIZE);
 	/* We use the full BufferRAM */
-	if (ONENAND_IS_MLC(this))
+	if (ONENAND_IS_4KB_PAGE(this))
 		mtd->writesize <<= 1;
 
 	mtd->oobsize = mtd->writesize >> 5;
@@ -2637,9 +2653,6 @@ int onenand_probe(struct mtd_info *mtd)
 	else
 		mtd->size = this->chipsize;
 
-	/* Check OneNAND features */
-	onenand_check_features(mtd);
-
 	mtd->flags = MTD_CAP_NANDFLASH;
 	mtd->erase = onenand_erase;
 	mtd->read = onenand_read;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index dea42f4..bb4a4a6 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -140,6 +140,9 @@ struct onenand_chip {
 #define ONENAND_IS_DDP(this)						\
 	(this->device_id & ONENAND_DEVICE_IS_DDP)
 
+#define ONENAND_IS_4KB_PAGE(this)					\
+	(this->options & ONENAND_HAS_4KB_PAGE)
+
 #define ONENAND_IS_2PLANE(this)			(0)
 
 /*
@@ -148,6 +151,7 @@ struct onenand_chip {
 #define ONENAND_HAS_CONT_LOCK		(0x0001)
 #define ONENAND_HAS_UNLOCK_ALL		(0x0002)
 #define ONENAND_HAS_2PLANE		(0x0004)
+#define ONENAND_HAS_4KB_PAGE            (0x0008)
 #define ONENAND_RUNTIME_BADBLOCK_CHECK	(0x0200)
 #define ONENAND_PAGEBUF_ALLOC		(0x1000)
 #define ONENAND_OOBBUF_ALLOC		(0x2000)
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 4/4] onenand: samsung: Enable support OneNAND support at Samsung's S5PC210_Universal
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
                   ` (2 preceding siblings ...)
  2011-11-10  8:41 ` [U-Boot] [PATCH 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
@ 2011-11-10  8:41 ` Lukasz Majewski
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
  5 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2011-11-10  8:41 UTC (permalink / raw)
  To: u-boot

Enable OneNAND support for C210 universal.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
./tools/checkpatch.pl -
total: 0 errors, 0 warnings, 7 lines checked

NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE

---
 include/configs/s5pc210_universal.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
index 4031016..18831ee 100644
--- a/include/configs/s5pc210_universal.h
+++ b/include/configs/s5pc210_universal.h
@@ -232,6 +232,7 @@
 #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 2 sectors */
 
 #define CONFIG_USE_ONENAND_BOARD_INIT
+#define CONFIG_SAMSUNG_ONENAND
 #define CONFIG_SYS_ONENAND_BASE		0x0C000000
 
 #define CONFIG_ENV_IS_IN_MMC		1
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function
  2011-11-10  8:41 ` [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
@ 2011-11-20  0:06   ` Marek Vasut
  2011-11-20 23:29     ` Kyungmin Park
  0 siblings, 1 reply; 23+ messages in thread
From: Marek Vasut @ 2011-11-20  0:06 UTC (permalink / raw)
  To: u-boot

> Separate callback for probing OneNAND memory chip.
> If no special function is defined, default implementation will be used.
> 
> This approach gives more flexibility for OneNAND device probing.
> 
> Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> ---
>  ./tools/checkpatch.pl -
> total: 0 errors, 0 warnings, 108 lines checked
> 
> NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX
> MULTISTATEMENT_MACRO_USE_DO_WHILE
> 
> ---
>  drivers/mtd/onenand/onenand_base.c  |   43
> +++++++++++++++++++++++++++++----- drivers/mtd/onenand/samsung.c       |  
> 10 ++++++++
>  include/linux/mtd/onenand.h         |    1 +
>  include/linux/mtd/samsung_onenand.h |    2 +
>  4 files changed, 49 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/mtd/onenand/onenand_base.c
> b/drivers/mtd/onenand/onenand_base.c index 24e02c2..a557d48 100644
> --- a/drivers/mtd/onenand/onenand_base.c
> +++ b/drivers/mtd/onenand/onenand_base.c
> @@ -2505,23 +2505,24 @@ out:
>  }
> 
>  /**
> - * onenand_probe - [OneNAND Interface] Probe the OneNAND device
> + * onenand_chip_probe - [OneNAND Interface] Probe the OneNAND chip
>   * @param mtd		MTD device structure
>   *
>   * OneNAND detection method:
>   *   Compare the the values from command with ones from register
>   */
> -static int onenand_probe(struct mtd_info *mtd)
> +static int onenand_chip_probe(struct mtd_info *mtd)
>  {
>  	struct onenand_chip *this = mtd->priv;
> -	int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
> -	int density;
> +	int bram_maf_id, bram_dev_id, maf_id, dev_id;
>  	int syscfg;
> 
>  	/* Save system configuration 1 */
>  	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
> +
>  	/* Clear Sync. Burst Read mode to read BootRAM */
> -	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base +
> ONENAND_REG_SYS_CFG1); +	this->write_word((syscfg &
> ~ONENAND_SYS_CFG1_SYNC_READ),
> +			 this->base + ONENAND_REG_SYS_CFG1);
> 
>  	/* Send the command for reading device ID from BootRAM */
>  	this->write_word(ONENAND_CMD_READID, this->base + ONENAND_BOOTRAM);
> @@ -2546,13 +2547,38 @@ static int onenand_probe(struct mtd_info *mtd)
>  	/* Read manufacturer and device IDs from Register */
>  	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
>  	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
> -	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
> -	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
> 
>  	/* Check OneNAND device */
>  	if (maf_id != bram_maf_id || dev_id != bram_dev_id)
>  		return -ENXIO;
> 
> +	return 0;
> +}
> +
> +/**
> + * onenand_probe - [OneNAND Interface] Probe the OneNAND device
> + * @param mtd		MTD device structure
> + *
> + * OneNAND detection method:
> + *   Compare the the values from command with ones from register
> + */
> +int onenand_probe(struct mtd_info *mtd)
> +{
> +	struct onenand_chip *this = mtd->priv;
> +	int maf_id, dev_id, ver_id;
> +	int density;
> +	int ret;
> +
> +	ret = this->chip_probe(mtd);
> +	if (ret)
> +		return ret;
> +
> +	/* Read manufacturer and device IDs from Register */
> +	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
> +	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
> +	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
> +	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
> +
>  	/* Flash device information */
>  	mtd->name = onenand_print_device_info(dev_id, ver_id);
>  	this->device_id = dev_id;
> @@ -2659,6 +2685,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
>  	if (!this->write_bufferram)
>  		this->write_bufferram = onenand_write_bufferram;
> 
> +	if (!this->chip_probe)
> +		this->chip_probe = onenand_chip_probe;
> +
>  	if (!this->block_markbad)
>  		this->block_markbad = onenand_default_block_markbad;
>  	if (!this->scan_bbt)
> diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
> index 20b4912..1f4bd81 100644
> --- a/drivers/mtd/onenand/samsung.c
> +++ b/drivers/mtd/onenand/samsung.c
> @@ -590,6 +590,16 @@ static void s3c_set_width_regs(struct onenand_chip
> *this) }
>  #endif
> 
> +int s5pc110_chip_probe(struct mtd_info *mtd)
> +{
> +	return 0;
> +}
> +
> +int s5pc210_chip_probe(struct mtd_info *mtd)
> +{
> +	return 0;
> +}
> +

Will there be a problem if you used the default chip_probe() method from the 
driver ?

>  void s3c_onenand_init(struct mtd_info *mtd)
>  {
>  	struct onenand_chip *this = mtd->priv;
> diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
> index 5465562..dea42f4 100644
> --- a/include/linux/mtd/onenand.h
> +++ b/include/linux/mtd/onenand.h
> @@ -101,6 +101,7 @@ struct onenand_chip {
>  				size_t count);
>  	unsigned short (*read_word) (void __iomem *addr);
>  	void (*write_word) (unsigned short value, void __iomem *addr);
> +	int (*chip_probe)(struct mtd_info *mtd);
>  	void (*mmcontrol) (struct mtd_info *mtd, int sync_read);
>  	int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
>  	int (*scan_bbt)(struct mtd_info *mtd);
> diff --git a/include/linux/mtd/samsung_onenand.h
> b/include/linux/mtd/samsung_onenand.h index 021fa27..ddb29bb 100644
> --- a/include/linux/mtd/samsung_onenand.h
> +++ b/include/linux/mtd/samsung_onenand.h
> @@ -127,5 +127,7 @@ struct samsung_onenand {
> 
>  /* common initialize function */
>  extern void s3c_onenand_init(struct mtd_info *);
> +extern int s5pc110_chip_probe(struct mtd_info *);
> +extern int s5pc210_chip_probe(struct mtd_info *);
> 
>  #endif

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function
  2011-11-20  0:06   ` Marek Vasut
@ 2011-11-20 23:29     ` Kyungmin Park
  0 siblings, 0 replies; 23+ messages in thread
From: Kyungmin Park @ 2011-11-20 23:29 UTC (permalink / raw)
  To: u-boot

On 11/20/11, Marek Vasut <marek.vasut@gmail.com> wrote:
>> Separate callback for probing OneNAND memory chip.
>> If no special function is defined, default implementation will be used.
>>
>> This approach gives more flexibility for OneNAND device probing.
>>
>> Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>> ---
>>  ./tools/checkpatch.pl -
>> total: 0 errors, 0 warnings, 108 lines checked
>>
>> NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX
>> MULTISTATEMENT_MACRO_USE_DO_WHILE
>>
>> ---
>>  drivers/mtd/onenand/onenand_base.c  |   43
>> +++++++++++++++++++++++++++++----- drivers/mtd/onenand/samsung.c       |
>> 10 ++++++++
>>  include/linux/mtd/onenand.h         |    1 +
>>  include/linux/mtd/samsung_onenand.h |    2 +
>>  4 files changed, 49 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/mtd/onenand/onenand_base.c
>> b/drivers/mtd/onenand/onenand_base.c index 24e02c2..a557d48 100644
>> --- a/drivers/mtd/onenand/onenand_base.c
>> +++ b/drivers/mtd/onenand/onenand_base.c
>> @@ -2505,23 +2505,24 @@ out:
>>  }
>>
>>  /**
>> - * onenand_probe - [OneNAND Interface] Probe the OneNAND device
>> + * onenand_chip_probe - [OneNAND Interface] Probe the OneNAND chip
>>   * @param mtd		MTD device structure
>>   *
>>   * OneNAND detection method:
>>   *   Compare the the values from command with ones from register
>>   */
>> -static int onenand_probe(struct mtd_info *mtd)
>> +static int onenand_chip_probe(struct mtd_info *mtd)
>>  {
>>  	struct onenand_chip *this = mtd->priv;
>> -	int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
>> -	int density;
>> +	int bram_maf_id, bram_dev_id, maf_id, dev_id;
>>  	int syscfg;
>>
>>  	/* Save system configuration 1 */
>>  	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
>> +
>>  	/* Clear Sync. Burst Read mode to read BootRAM */
>> -	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base +
>> ONENAND_REG_SYS_CFG1); +	this->write_word((syscfg &
>> ~ONENAND_SYS_CFG1_SYNC_READ),
>> +			 this->base + ONENAND_REG_SYS_CFG1);
>>
>>  	/* Send the command for reading device ID from BootRAM */
>>  	this->write_word(ONENAND_CMD_READID, this->base + ONENAND_BOOTRAM);
>> @@ -2546,13 +2547,38 @@ static int onenand_probe(struct mtd_info *mtd)
>>  	/* Read manufacturer and device IDs from Register */
>>  	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
>>  	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
>> -	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
>> -	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
>>
>>  	/* Check OneNAND device */
>>  	if (maf_id != bram_maf_id || dev_id != bram_dev_id)
>>  		return -ENXIO;
>>
>> +	return 0;
>> +}
>> +
>> +/**
>> + * onenand_probe - [OneNAND Interface] Probe the OneNAND device
>> + * @param mtd		MTD device structure
>> + *
>> + * OneNAND detection method:
>> + *   Compare the the values from command with ones from register
>> + */
>> +int onenand_probe(struct mtd_info *mtd)
>> +{
>> +	struct onenand_chip *this = mtd->priv;
>> +	int maf_id, dev_id, ver_id;
>> +	int density;
>> +	int ret;
>> +
>> +	ret = this->chip_probe(mtd);
>> +	if (ret)
>> +		return ret;
>> +
>> +	/* Read manufacturer and device IDs from Register */
>> +	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
>> +	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
>> +	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
>> +	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
>> +
>>  	/* Flash device information */
>>  	mtd->name = onenand_print_device_info(dev_id, ver_id);
>>  	this->device_id = dev_id;
>> @@ -2659,6 +2685,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
>>  	if (!this->write_bufferram)
>>  		this->write_bufferram = onenand_write_bufferram;
>>
>> +	if (!this->chip_probe)
>> +		this->chip_probe = onenand_chip_probe;
>> +
>>  	if (!this->block_markbad)
>>  		this->block_markbad = onenand_default_block_markbad;
>>  	if (!this->scan_bbt)
>> diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
>> index 20b4912..1f4bd81 100644
>> --- a/drivers/mtd/onenand/samsung.c
>> +++ b/drivers/mtd/onenand/samsung.c
>> @@ -590,6 +590,16 @@ static void s3c_set_width_regs(struct onenand_chip
>> *this) }
>>  #endif
>>
>> +int s5pc110_chip_probe(struct mtd_info *mtd)
>> +{
>> +	return 0;
>> +}
>> +
>> +int s5pc210_chip_probe(struct mtd_info *mtd)
>> +{
>> +	return 0;
>> +}
>> +
>
> Will there be a problem if you used the default chip_probe() method from the
> driver ?
Samsung SoCs have their own OneNAND controller and difficult to access
OneNAND directly. instead it provides the registers which is mapped
OneNAND registers.
e.g., Manufacture ID, device ID and so on.

Yes it's Samsung SoCs specific. that's reason introduce chip_probe
function. it's same as kernel.

Thank you,
Kyungmin Park
>
>>  void s3c_onenand_init(struct mtd_info *mtd)
>>  {
>>  	struct onenand_chip *this = mtd->priv;
>> diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
>> index 5465562..dea42f4 100644
>> --- a/include/linux/mtd/onenand.h
>> +++ b/include/linux/mtd/onenand.h
>> @@ -101,6 +101,7 @@ struct onenand_chip {
>>  				size_t count);
>>  	unsigned short (*read_word) (void __iomem *addr);
>>  	void (*write_word) (unsigned short value, void __iomem *addr);
>> +	int (*chip_probe)(struct mtd_info *mtd);
>>  	void (*mmcontrol) (struct mtd_info *mtd, int sync_read);
>>  	int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
>>  	int (*scan_bbt)(struct mtd_info *mtd);
>> diff --git a/include/linux/mtd/samsung_onenand.h
>> b/include/linux/mtd/samsung_onenand.h index 021fa27..ddb29bb 100644
>> --- a/include/linux/mtd/samsung_onenand.h
>> +++ b/include/linux/mtd/samsung_onenand.h
>> @@ -127,5 +127,7 @@ struct samsung_onenand {
>>
>>  /* common initialize function */
>>  extern void s3c_onenand_init(struct mtd_info *);
>> +extern int s5pc110_chip_probe(struct mtd_info *);
>> +extern int s5pc210_chip_probe(struct mtd_info *);
>>
>>  #endif
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
                   ` (3 preceding siblings ...)
  2011-11-10  8:41 ` [U-Boot] [PATCH 4/4] onenand: samsung: Enable support OneNAND support at Samsung's S5PC210_Universal Lukasz Majewski
@ 2012-03-05 16:41 ` Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
                     ` (4 more replies)
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
  5 siblings, 5 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-05 16:41 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Lukasz Majewski, Scott Wood, Minkyu Kang

This patch sets add board dependent onenand probes.

Several fixes for GONI and Exynos4210 (C210_universal) targets have been added.

Tested at:
	Samsung S5PC110 GONI
        Samsung Exynos4210 (S5PC210 Universal)

Lukasz Majewski (4):
  onenand:samsung Target dependent OneNAND chip probe function
  onenand:samsung OneNAND chip probe functions added for GONI and
    Exynos4210
  onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  onenand: samsung: Enable support OneNAND support at Samsung's
    Exynos4210

 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 +
 drivers/mtd/onenand/onenand_base.c     |   88 +++++++++++++++++++++++--------
 drivers/mtd/onenand/samsung.c          |   10 ++++
 include/configs/s5pc210_universal.h    |    1 +
 include/linux/mtd/onenand.h            |    5 ++
 include/linux/mtd/samsung_onenand.h    |    2 +
 7 files changed, 86 insertions(+), 23 deletions(-)

-- 
1.7.2.3

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
@ 2012-03-05 16:41   ` Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-05 16:41 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Lukasz Majewski, Scott Wood, Minkyu Kang,
	Kyungmin Park

Separate callback for probing OneNAND memory chip.
If no special function is defined, default implementation will be used.

This approach gives more flexibility for OneNAND device probing.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/mtd/onenand/onenand_base.c  |   43 +++++++++++++++++++++++++++++-----
 drivers/mtd/onenand/samsung.c       |   10 ++++++++
 include/linux/mtd/onenand.h         |    1 +
 include/linux/mtd/samsung_onenand.h |    2 +
 4 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 06f187f..0b375e6 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -2501,23 +2501,24 @@ out:
 }
 
 /**
- * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * onenand_chip_probe - [OneNAND Interface] Probe the OneNAND chip
  * @param mtd		MTD device structure
  *
  * OneNAND detection method:
  *   Compare the the values from command with ones from register
  */
-static int onenand_probe(struct mtd_info *mtd)
+static int onenand_chip_probe(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
-	int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
-	int density;
+	int bram_maf_id, bram_dev_id, maf_id, dev_id;
 	int syscfg;
 
 	/* Save system configuration 1 */
 	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
+
 	/* Clear Sync. Burst Read mode to read BootRAM */
-	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base + ONENAND_REG_SYS_CFG1);
+	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ),
+			 this->base + ONENAND_REG_SYS_CFG1);
 
 	/* Send the command for reading device ID from BootRAM */
 	this->write_word(ONENAND_CMD_READID, this->base + ONENAND_BOOTRAM);
@@ -2542,13 +2543,38 @@ static int onenand_probe(struct mtd_info *mtd)
 	/* Read manufacturer and device IDs from Register */
 	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
 	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
-	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
-	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
 
 	/* Check OneNAND device */
 	if (maf_id != bram_maf_id || dev_id != bram_dev_id)
 		return -ENXIO;
 
+	return 0;
+}
+
+/**
+ * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * @param mtd		MTD device structure
+ *
+ * OneNAND detection method:
+ *   Compare the the values from command with ones from register
+ */
+int onenand_probe(struct mtd_info *mtd)
+{
+	struct onenand_chip *this = mtd->priv;
+	int maf_id, dev_id, ver_id;
+	int density;
+	int ret;
+
+	ret = this->chip_probe(mtd);
+	if (ret)
+		return ret;
+
+	/* Read manufacturer and device IDs from Register */
+	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
+	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
+	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
+	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
+
 	/* Flash device information */
 	mtd->name = onenand_print_device_info(dev_id, ver_id);
 	this->device_id = dev_id;
@@ -2655,6 +2681,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
 	if (!this->write_bufferram)
 		this->write_bufferram = onenand_write_bufferram;
 
+	if (!this->chip_probe)
+		this->chip_probe = onenand_chip_probe;
+
 	if (!this->block_markbad)
 		this->block_markbad = onenand_default_block_markbad;
 	if (!this->scan_bbt)
diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
index ff59064..c9d33ec 100644
--- a/drivers/mtd/onenand/samsung.c
+++ b/drivers/mtd/onenand/samsung.c
@@ -589,6 +589,16 @@ static void s3c_set_width_regs(struct onenand_chip *this)
 }
 #endif
 
+int s5pc110_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
+int s5pc210_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
 void s3c_onenand_init(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index 5465562..dea42f4 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -101,6 +101,7 @@ struct onenand_chip {
 				size_t count);
 	unsigned short (*read_word) (void __iomem *addr);
 	void (*write_word) (unsigned short value, void __iomem *addr);
+	int (*chip_probe)(struct mtd_info *mtd);
 	void (*mmcontrol) (struct mtd_info *mtd, int sync_read);
 	int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
 	int (*scan_bbt)(struct mtd_info *mtd);
diff --git a/include/linux/mtd/samsung_onenand.h b/include/linux/mtd/samsung_onenand.h
index 021fa27..ddb29bb 100644
--- a/include/linux/mtd/samsung_onenand.h
+++ b/include/linux/mtd/samsung_onenand.h
@@ -127,5 +127,7 @@ struct samsung_onenand {
 
 /* common initialize function */
 extern void s3c_onenand_init(struct mtd_info *);
+extern int s5pc110_chip_probe(struct mtd_info *);
+extern int s5pc210_chip_probe(struct mtd_info *);
 
 #endif
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
@ 2012-03-05 16:41   ` Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-05 16:41 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Lukasz Majewski, Scott Wood, Minkyu Kang,
	Kyungmin Park

Separate callback for probing OneNAND memory chip.

Tested at:
       Samsung S5PC110 GONI
       Samsung Exynos4210 (S5PC210 Universal)

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 ++
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/board/samsung/goni/onenand.c b/board/samsung/goni/onenand.c
index 8d3769b..9dd80fa 100644
--- a/board/samsung/goni/onenand.c
+++ b/board/samsung/goni/onenand.c
@@ -33,4 +33,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc110_chip_probe;
 }
diff --git a/board/samsung/universal_c210/onenand.c b/board/samsung/universal_c210/onenand.c
index 20e1dc5..5b92308 100644
--- a/board/samsung/universal_c210/onenand.c
+++ b/board/samsung/universal_c210/onenand.c
@@ -24,6 +24,7 @@
 #include <common.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/onenand.h>
+#include <linux/mtd/samsung_onenand.h>
 
 void onenand_board_init(struct mtd_info *mtd)
 {
@@ -31,4 +32,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc210_chip_probe;
 }
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
@ 2012-03-05 16:41   ` Lukasz Majewski
  2012-03-05 16:41   ` [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
  2012-03-06  6:48   ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-05 16:41 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Lukasz Majewski, Scott Wood, Minkyu Kang,
	Kyungmin Park

This replacement is for causing 4KB page size devices to work properly
with u-boot.

The old ONENAND_IS_MLC() behavior has been preserved by explicitly
setting ONENAND_HAS_4KB_PAGE for those devices.

This change makes the onenand_base.c file more resembling the respective
kernel sources.

Tested at:
       Samsung S5PC110 GONI
       Samsung S5PC210 Universal

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/mtd/onenand/onenand_base.c |   45 +++++++++++++++++++++++------------
 include/linux/mtd/onenand.h        |    4 +++
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 0b375e6..480ae7a 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -367,7 +367,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		this->write_word(value,
 				 this->base + ONENAND_REG_START_ADDRESS2);
 
-		if (ONENAND_IS_MLC(this))
+		if (ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_BUFFERRAM0(this);
 		else
 			/* Switch to the next data buffer */
@@ -395,7 +395,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		case FLEXONENAND_CMD_RECOVER_LSB:
 		case ONENAND_CMD_READ:
 		case ONENAND_CMD_READOOB:
-			if (ONENAND_IS_MLC(this))
+			if (ONENAND_IS_4KB_PAGE(this))
 				dataram = ONENAND_SET_BUFFERRAM0(this);
 			else
 				dataram = ONENAND_SET_NEXT_BUFFERRAM(this);
@@ -893,7 +893,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 	while (!ret) {
 		/* If there is more to load then start next load */
 		from += thislen;
-		if (!ONENAND_IS_MLC(this) && read + thislen < len) {
+		if (!ONENAND_IS_4KB_PAGE(this) && read + thislen < len) {
 			this->main_buf = buf + thislen;
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			/*
@@ -927,7 +927,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 			oobcolumn = 0;
 		}
 
-		if (ONENAND_IS_MLC(this) && (read + thislen < len)) {
+		if (ONENAND_IS_4KB_PAGE(this) && (read + thislen < len)) {
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			ret = this->wait(mtd, FL_READING);
 			if (unlikely(ret))
@@ -944,13 +944,13 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 		/* Set up for next read from bufferRAM */
 		if (unlikely(boundary))
 			this->write_word(ONENAND_DDP_CHIP1, this->base + ONENAND_REG_START_ADDRESS2);
-		if (!ONENAND_IS_MLC(this))
+		if (!ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_NEXT_BUFFERRAM(this);
 		buf += thislen;
 		thislen = min_t(int, writesize, len - read);
 		column = 0;
 
-		if (!ONENAND_IS_MLC(this)) {
+		if (!ONENAND_IS_4KB_PAGE(this)) {
 			/* Now wait for load */
 			ret = this->wait(mtd, FL_READING);
 			onenand_update_bufferram(mtd, from, !ret);
@@ -1024,7 +1024,8 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from,
 
 	stats = mtd->ecc_stats;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	while (read < len) {
 		thislen = oobsize - column;
@@ -1202,7 +1203,8 @@ int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
 
 	MTDDEBUG(MTD_DEBUG_LEVEL3, "onenand_bbt_read_oob: from = 0x%08x, len = %zi\n", (unsigned int) from, len);
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	/* Initialize return value */
 	ops->oobretlen = 0;
@@ -1271,7 +1273,8 @@ static int onenand_verify_oob(struct mtd_info *mtd, const u_char *buf, loff_t to
 	u_char *oob_buf = this->oob_buf;
 	int status, i, readcmd;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	this->command(mtd, readcmd, to, mtd->oobsize);
 	onenand_update_bufferram(mtd, to, 0);
@@ -1560,7 +1563,8 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 
 	oobbuf = this->oob_buf;
 
-	oobcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
+	oobcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
 
 	/* Loop until all data write */
 	while (written < len) {
@@ -1577,7 +1581,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 			memcpy(oobbuf + column, buf, thislen);
 		this->write_bufferram(mtd, 0, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize);
 
-		if (ONENAND_IS_MLC(this)) {
+		if (ONENAND_IS_4KB_PAGE(this)) {
 			/* Set main area of DataRAM to 0xff*/
 			memset(this->page_buf, 0xff, mtd->writesize);
 			this->write_bufferram(mtd, 0, ONENAND_DATARAM,
@@ -2140,7 +2144,10 @@ static void onenand_check_features(struct mtd_info *mtd)
 	/* Lock scheme */
 	switch (density) {
 	case ONENAND_DEVICE_DENSITY_4Gb:
-		this->options |= ONENAND_HAS_2PLANE;
+		if (ONENAND_IS_DDP(this))
+			this->options |= ONENAND_HAS_2PLANE;
+		else
+			this->options |= ONENAND_HAS_4KB_PAGE;
 
 	case ONENAND_DEVICE_DENSITY_2Gb:
 		/* 2Gb DDP don't have 2 plane */
@@ -2162,6 +2169,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 	}
 
 	if (ONENAND_IS_MLC(this))
+		this->options |= ONENAND_HAS_4KB_PAGE;
+
+	if (ONENAND_IS_4KB_PAGE(this))
 		this->options &= ~ONENAND_HAS_2PLANE;
 
 	if (FLEXONENAND(this)) {
@@ -2175,6 +2185,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 		printk(KERN_DEBUG "Chip support all block unlock\n");
 	if (this->options & ONENAND_HAS_2PLANE)
 		printk(KERN_DEBUG "Chip has 2 plane\n");
+	if (this->options & ONENAND_HAS_4KB_PAGE)
+		printk(KERN_DEBUG "Chip has 4KiB pagesize\n");
+
 }
 
 /**
@@ -2580,6 +2593,9 @@ int onenand_probe(struct mtd_info *mtd)
 	this->device_id = dev_id;
 	this->version_id = ver_id;
 
+	/* Check OneNAND features */
+	onenand_check_features(mtd);
+
 	density = onenand_get_density(dev_id);
 	if (FLEXONENAND(this)) {
 		this->dies = ONENAND_IS_DDP(this) ? 2 : 1;
@@ -2602,7 +2618,7 @@ int onenand_probe(struct mtd_info *mtd)
 	mtd->writesize =
 	    this->read_word(this->base + ONENAND_REG_DATA_BUFFER_SIZE);
 	/* We use the full BufferRAM */
-	if (ONENAND_IS_MLC(this))
+	if (ONENAND_IS_4KB_PAGE(this))
 		mtd->writesize <<= 1;
 
 	mtd->oobsize = mtd->writesize >> 5;
@@ -2633,9 +2649,6 @@ int onenand_probe(struct mtd_info *mtd)
 	else
 		mtd->size = this->chipsize;
 
-	/* Check OneNAND features */
-	onenand_check_features(mtd);
-
 	mtd->flags = MTD_CAP_NANDFLASH;
 	mtd->erase = onenand_erase;
 	mtd->read = onenand_read;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index dea42f4..bb4a4a6 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -140,6 +140,9 @@ struct onenand_chip {
 #define ONENAND_IS_DDP(this)						\
 	(this->device_id & ONENAND_DEVICE_IS_DDP)
 
+#define ONENAND_IS_4KB_PAGE(this)					\
+	(this->options & ONENAND_HAS_4KB_PAGE)
+
 #define ONENAND_IS_2PLANE(this)			(0)
 
 /*
@@ -148,6 +151,7 @@ struct onenand_chip {
 #define ONENAND_HAS_CONT_LOCK		(0x0001)
 #define ONENAND_HAS_UNLOCK_ALL		(0x0002)
 #define ONENAND_HAS_2PLANE		(0x0004)
+#define ONENAND_HAS_4KB_PAGE            (0x0008)
 #define ONENAND_RUNTIME_BADBLOCK_CHECK	(0x0200)
 #define ONENAND_PAGEBUF_ALLOC		(0x1000)
 #define ONENAND_OOBBUF_ALLOC		(0x2000)
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
                     ` (2 preceding siblings ...)
  2012-03-05 16:41   ` [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
@ 2012-03-05 16:41   ` Lukasz Majewski
  2012-03-06  6:48   ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-05 16:41 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: Marek Szyprowski, Lukasz Majewski, Scott Wood, Minkyu Kang,
	Kyungmin Park

Enable OneNAND support for Exynos4210 (C210 universal).

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 include/configs/s5pc210_universal.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
index 8286680..1301275 100644
--- a/include/configs/s5pc210_universal.h
+++ b/include/configs/s5pc210_universal.h
@@ -233,6 +233,7 @@
 #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 2 sectors */
 
 #define CONFIG_USE_ONENAND_BOARD_INIT
+#define CONFIG_SAMSUNG_ONENAND
 #define CONFIG_SYS_ONENAND_BASE		0x0C000000
 
 #define CONFIG_ENV_IS_IN_MMC		1
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
                     ` (3 preceding siblings ...)
  2012-03-05 16:41   ` [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
@ 2012-03-06  6:48   ` Lukasz Majewski
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:48 UTC (permalink / raw)
  To: linux-samsung-soc

On Mon, 05 Mar 2012 17:41:27 +0100
Lukasz Majewski <l.majewski@samsung.com> wrote:

> This patch sets add board dependent onenand probes.
> 
> Several fixes for GONI and Exynos4210 (C210_universal) targets have
> been added.
> 
> Tested at:
> 	Samsung S5PC110 GONI
>         Samsung Exynos4210 (S5PC210 Universal)
> 
> Lukasz Majewski (4):
>   onenand:samsung Target dependent OneNAND chip probe function
>   onenand:samsung OneNAND chip probe functions added for GONI and
>     Exynos4210
>   onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
>   onenand: samsung: Enable support OneNAND support at Samsung's
>     Exynos4210
> 
>  board/samsung/goni/onenand.c           |    1 +
>  board/samsung/universal_c210/onenand.c |    2 +
>  drivers/mtd/onenand/onenand_base.c     |   88
> +++++++++++++++++++++++--------
> drivers/mtd/onenand/samsung.c          |   10 ++++
> include/configs/s5pc210_universal.h    |    1 +
> include/linux/mtd/onenand.h            |    5 ++
> include/linux/mtd/samsung_onenand.h    |    2 + 7 files changed, 86
> insertions(+), 23 deletions(-)
> 

I'm very sorry, but this is a wrong mailing list.
It was meant to go to u-boot mailing list, not linux-samsung-soc :-)

-- 
Best regards,

Lukasz Majewski

Samsung Poland R&D Center
Platform Group

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets
  2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
                   ` (4 preceding siblings ...)
  2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
@ 2012-03-06  6:54 ` Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
                     ` (4 more replies)
  5 siblings, 5 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:54 UTC (permalink / raw)
  To: u-boot

This patch sets add board dependent onenand probes.

Several fixes for GONI and Exynos4210 (C210_universal) targets have been added.

Tested at:
	Samsung S5PC110 GONI
        Samsung Exynos4210 (S5PC210 Universal)

Lukasz Majewski (4):
  onenand:samsung Target dependent OneNAND chip probe function
  onenand:samsung OneNAND chip probe functions added for GONI and
    Exynos4210
  onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  onenand: samsung: Enable support OneNAND support at Samsung's
    Exynos4210

 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 +
 drivers/mtd/onenand/onenand_base.c     |   88 +++++++++++++++++++++++--------
 drivers/mtd/onenand/samsung.c          |   10 ++++
 include/configs/s5pc210_universal.h    |    1 +
 include/linux/mtd/onenand.h            |    5 ++
 include/linux/mtd/samsung_onenand.h    |    2 +
 7 files changed, 86 insertions(+), 23 deletions(-)

-- 
1.7.2.3

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
@ 2012-03-06  6:54   ` Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:54 UTC (permalink / raw)
  To: u-boot

Separate callback for probing OneNAND memory chip.
If no special function is defined, default implementation will be used.

This approach gives more flexibility for OneNAND device probing.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/mtd/onenand/onenand_base.c  |   43 +++++++++++++++++++++++++++++-----
 drivers/mtd/onenand/samsung.c       |   10 ++++++++
 include/linux/mtd/onenand.h         |    1 +
 include/linux/mtd/samsung_onenand.h |    2 +
 4 files changed, 49 insertions(+), 7 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 06f187f..0b375e6 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -2501,23 +2501,24 @@ out:
 }
 
 /**
- * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * onenand_chip_probe - [OneNAND Interface] Probe the OneNAND chip
  * @param mtd		MTD device structure
  *
  * OneNAND detection method:
  *   Compare the the values from command with ones from register
  */
-static int onenand_probe(struct mtd_info *mtd)
+static int onenand_chip_probe(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
-	int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
-	int density;
+	int bram_maf_id, bram_dev_id, maf_id, dev_id;
 	int syscfg;
 
 	/* Save system configuration 1 */
 	syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
+
 	/* Clear Sync. Burst Read mode to read BootRAM */
-	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base + ONENAND_REG_SYS_CFG1);
+	this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ),
+			 this->base + ONENAND_REG_SYS_CFG1);
 
 	/* Send the command for reading device ID from BootRAM */
 	this->write_word(ONENAND_CMD_READID, this->base + ONENAND_BOOTRAM);
@@ -2542,13 +2543,38 @@ static int onenand_probe(struct mtd_info *mtd)
 	/* Read manufacturer and device IDs from Register */
 	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
 	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
-	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
-	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
 
 	/* Check OneNAND device */
 	if (maf_id != bram_maf_id || dev_id != bram_dev_id)
 		return -ENXIO;
 
+	return 0;
+}
+
+/**
+ * onenand_probe - [OneNAND Interface] Probe the OneNAND device
+ * @param mtd		MTD device structure
+ *
+ * OneNAND detection method:
+ *   Compare the the values from command with ones from register
+ */
+int onenand_probe(struct mtd_info *mtd)
+{
+	struct onenand_chip *this = mtd->priv;
+	int maf_id, dev_id, ver_id;
+	int density;
+	int ret;
+
+	ret = this->chip_probe(mtd);
+	if (ret)
+		return ret;
+
+	/* Read manufacturer and device IDs from Register */
+	maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
+	dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
+	ver_id = this->read_word(this->base + ONENAND_REG_VERSION_ID);
+	this->technology = this->read_word(this->base + ONENAND_REG_TECHNOLOGY);
+
 	/* Flash device information */
 	mtd->name = onenand_print_device_info(dev_id, ver_id);
 	this->device_id = dev_id;
@@ -2655,6 +2681,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
 	if (!this->write_bufferram)
 		this->write_bufferram = onenand_write_bufferram;
 
+	if (!this->chip_probe)
+		this->chip_probe = onenand_chip_probe;
+
 	if (!this->block_markbad)
 		this->block_markbad = onenand_default_block_markbad;
 	if (!this->scan_bbt)
diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
index ff59064..c9d33ec 100644
--- a/drivers/mtd/onenand/samsung.c
+++ b/drivers/mtd/onenand/samsung.c
@@ -589,6 +589,16 @@ static void s3c_set_width_regs(struct onenand_chip *this)
 }
 #endif
 
+int s5pc110_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
+int s5pc210_chip_probe(struct mtd_info *mtd)
+{
+	return 0;
+}
+
 void s3c_onenand_init(struct mtd_info *mtd)
 {
 	struct onenand_chip *this = mtd->priv;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index 5465562..dea42f4 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -101,6 +101,7 @@ struct onenand_chip {
 				size_t count);
 	unsigned short (*read_word) (void __iomem *addr);
 	void (*write_word) (unsigned short value, void __iomem *addr);
+	int (*chip_probe)(struct mtd_info *mtd);
 	void (*mmcontrol) (struct mtd_info *mtd, int sync_read);
 	int (*block_markbad)(struct mtd_info *mtd, loff_t ofs);
 	int (*scan_bbt)(struct mtd_info *mtd);
diff --git a/include/linux/mtd/samsung_onenand.h b/include/linux/mtd/samsung_onenand.h
index 021fa27..ddb29bb 100644
--- a/include/linux/mtd/samsung_onenand.h
+++ b/include/linux/mtd/samsung_onenand.h
@@ -127,5 +127,7 @@ struct samsung_onenand {
 
 /* common initialize function */
 extern void s3c_onenand_init(struct mtd_info *);
+extern int s5pc110_chip_probe(struct mtd_info *);
+extern int s5pc210_chip_probe(struct mtd_info *);
 
 #endif
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
@ 2012-03-06  6:54   ` Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:54 UTC (permalink / raw)
  To: u-boot

Separate callback for probing OneNAND memory chip.

Tested at:
       Samsung S5PC110 GONI
       Samsung Exynos4210 (S5PC210 Universal)

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 board/samsung/goni/onenand.c           |    1 +
 board/samsung/universal_c210/onenand.c |    2 ++
 2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/board/samsung/goni/onenand.c b/board/samsung/goni/onenand.c
index 8d3769b..9dd80fa 100644
--- a/board/samsung/goni/onenand.c
+++ b/board/samsung/goni/onenand.c
@@ -33,4 +33,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc110_chip_probe;
 }
diff --git a/board/samsung/universal_c210/onenand.c b/board/samsung/universal_c210/onenand.c
index 20e1dc5..5b92308 100644
--- a/board/samsung/universal_c210/onenand.c
+++ b/board/samsung/universal_c210/onenand.c
@@ -24,6 +24,7 @@
 #include <common.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/onenand.h>
+#include <linux/mtd/samsung_onenand.h>
 
 void onenand_board_init(struct mtd_info *mtd)
 {
@@ -31,4 +32,5 @@ void onenand_board_init(struct mtd_info *mtd)
 
 	this->base = (void *)CONFIG_SYS_ONENAND_BASE;
 	this->options |= ONENAND_RUNTIME_BADBLOCK_CHECK;
+	this->chip_probe = s5pc210_chip_probe;
 }
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
@ 2012-03-06  6:54   ` Lukasz Majewski
  2012-03-06  6:54   ` [U-Boot] [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
  2012-03-06 18:53   ` [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets) Scott Wood
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:54 UTC (permalink / raw)
  To: u-boot

This replacement is for causing 4KB page size devices to work properly
with u-boot.

The old ONENAND_IS_MLC() behavior has been preserved by explicitly
setting ONENAND_HAS_4KB_PAGE for those devices.

This change makes the onenand_base.c file more resembling the respective
kernel sources.

Tested at:
       Samsung S5PC110 GONI
       Samsung S5PC210 Universal

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
 drivers/mtd/onenand/onenand_base.c |   45 +++++++++++++++++++++++------------
 include/linux/mtd/onenand.h        |    4 +++
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 0b375e6..480ae7a 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -367,7 +367,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		this->write_word(value,
 				 this->base + ONENAND_REG_START_ADDRESS2);
 
-		if (ONENAND_IS_MLC(this))
+		if (ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_BUFFERRAM0(this);
 		else
 			/* Switch to the next data buffer */
@@ -395,7 +395,7 @@ static int onenand_command(struct mtd_info *mtd, int cmd, loff_t addr,
 		case FLEXONENAND_CMD_RECOVER_LSB:
 		case ONENAND_CMD_READ:
 		case ONENAND_CMD_READOOB:
-			if (ONENAND_IS_MLC(this))
+			if (ONENAND_IS_4KB_PAGE(this))
 				dataram = ONENAND_SET_BUFFERRAM0(this);
 			else
 				dataram = ONENAND_SET_NEXT_BUFFERRAM(this);
@@ -893,7 +893,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 	while (!ret) {
 		/* If there is more to load then start next load */
 		from += thislen;
-		if (!ONENAND_IS_MLC(this) && read + thislen < len) {
+		if (!ONENAND_IS_4KB_PAGE(this) && read + thislen < len) {
 			this->main_buf = buf + thislen;
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			/*
@@ -927,7 +927,7 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 			oobcolumn = 0;
 		}
 
-		if (ONENAND_IS_MLC(this) && (read + thislen < len)) {
+		if (ONENAND_IS_4KB_PAGE(this) && (read + thislen < len)) {
 			this->command(mtd, ONENAND_CMD_READ, from, writesize);
 			ret = this->wait(mtd, FL_READING);
 			if (unlikely(ret))
@@ -944,13 +944,13 @@ static int onenand_read_ops_nolock(struct mtd_info *mtd, loff_t from,
 		/* Set up for next read from bufferRAM */
 		if (unlikely(boundary))
 			this->write_word(ONENAND_DDP_CHIP1, this->base + ONENAND_REG_START_ADDRESS2);
-		if (!ONENAND_IS_MLC(this))
+		if (!ONENAND_IS_4KB_PAGE(this))
 			ONENAND_SET_NEXT_BUFFERRAM(this);
 		buf += thislen;
 		thislen = min_t(int, writesize, len - read);
 		column = 0;
 
-		if (!ONENAND_IS_MLC(this)) {
+		if (!ONENAND_IS_4KB_PAGE(this)) {
 			/* Now wait for load */
 			ret = this->wait(mtd, FL_READING);
 			onenand_update_bufferram(mtd, from, !ret);
@@ -1024,7 +1024,8 @@ static int onenand_read_oob_nolock(struct mtd_info *mtd, loff_t from,
 
 	stats = mtd->ecc_stats;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	while (read < len) {
 		thislen = oobsize - column;
@@ -1202,7 +1203,8 @@ int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
 
 	MTDDEBUG(MTD_DEBUG_LEVEL3, "onenand_bbt_read_oob: from = 0x%08x, len = %zi\n", (unsigned int) from, len);
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	/* Initialize return value */
 	ops->oobretlen = 0;
@@ -1271,7 +1273,8 @@ static int onenand_verify_oob(struct mtd_info *mtd, const u_char *buf, loff_t to
 	u_char *oob_buf = this->oob_buf;
 	int status, i, readcmd;
 
-	readcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_READ : ONENAND_CMD_READOOB;
+	readcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_READ : ONENAND_CMD_READOOB;
 
 	this->command(mtd, readcmd, to, mtd->oobsize);
 	onenand_update_bufferram(mtd, to, 0);
@@ -1560,7 +1563,8 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 
 	oobbuf = this->oob_buf;
 
-	oobcmd = ONENAND_IS_MLC(this) ? ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
+	oobcmd = ONENAND_IS_4KB_PAGE(this) ?
+		ONENAND_CMD_PROG : ONENAND_CMD_PROGOOB;
 
 	/* Loop until all data write */
 	while (written < len) {
@@ -1577,7 +1581,7 @@ static int onenand_write_oob_nolock(struct mtd_info *mtd, loff_t to,
 			memcpy(oobbuf + column, buf, thislen);
 		this->write_bufferram(mtd, 0, ONENAND_SPARERAM, oobbuf, 0, mtd->oobsize);
 
-		if (ONENAND_IS_MLC(this)) {
+		if (ONENAND_IS_4KB_PAGE(this)) {
 			/* Set main area of DataRAM to 0xff*/
 			memset(this->page_buf, 0xff, mtd->writesize);
 			this->write_bufferram(mtd, 0, ONENAND_DATARAM,
@@ -2140,7 +2144,10 @@ static void onenand_check_features(struct mtd_info *mtd)
 	/* Lock scheme */
 	switch (density) {
 	case ONENAND_DEVICE_DENSITY_4Gb:
-		this->options |= ONENAND_HAS_2PLANE;
+		if (ONENAND_IS_DDP(this))
+			this->options |= ONENAND_HAS_2PLANE;
+		else
+			this->options |= ONENAND_HAS_4KB_PAGE;
 
 	case ONENAND_DEVICE_DENSITY_2Gb:
 		/* 2Gb DDP don't have 2 plane */
@@ -2162,6 +2169,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 	}
 
 	if (ONENAND_IS_MLC(this))
+		this->options |= ONENAND_HAS_4KB_PAGE;
+
+	if (ONENAND_IS_4KB_PAGE(this))
 		this->options &= ~ONENAND_HAS_2PLANE;
 
 	if (FLEXONENAND(this)) {
@@ -2175,6 +2185,9 @@ static void onenand_check_features(struct mtd_info *mtd)
 		printk(KERN_DEBUG "Chip support all block unlock\n");
 	if (this->options & ONENAND_HAS_2PLANE)
 		printk(KERN_DEBUG "Chip has 2 plane\n");
+	if (this->options & ONENAND_HAS_4KB_PAGE)
+		printk(KERN_DEBUG "Chip has 4KiB pagesize\n");
+
 }
 
 /**
@@ -2580,6 +2593,9 @@ int onenand_probe(struct mtd_info *mtd)
 	this->device_id = dev_id;
 	this->version_id = ver_id;
 
+	/* Check OneNAND features */
+	onenand_check_features(mtd);
+
 	density = onenand_get_density(dev_id);
 	if (FLEXONENAND(this)) {
 		this->dies = ONENAND_IS_DDP(this) ? 2 : 1;
@@ -2602,7 +2618,7 @@ int onenand_probe(struct mtd_info *mtd)
 	mtd->writesize =
 	    this->read_word(this->base + ONENAND_REG_DATA_BUFFER_SIZE);
 	/* We use the full BufferRAM */
-	if (ONENAND_IS_MLC(this))
+	if (ONENAND_IS_4KB_PAGE(this))
 		mtd->writesize <<= 1;
 
 	mtd->oobsize = mtd->writesize >> 5;
@@ -2633,9 +2649,6 @@ int onenand_probe(struct mtd_info *mtd)
 	else
 		mtd->size = this->chipsize;
 
-	/* Check OneNAND features */
-	onenand_check_features(mtd);
-
 	mtd->flags = MTD_CAP_NANDFLASH;
 	mtd->erase = onenand_erase;
 	mtd->read = onenand_read;
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index dea42f4..bb4a4a6 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -140,6 +140,9 @@ struct onenand_chip {
 #define ONENAND_IS_DDP(this)						\
 	(this->device_id & ONENAND_DEVICE_IS_DDP)
 
+#define ONENAND_IS_4KB_PAGE(this)					\
+	(this->options & ONENAND_HAS_4KB_PAGE)
+
 #define ONENAND_IS_2PLANE(this)			(0)
 
 /*
@@ -148,6 +151,7 @@ struct onenand_chip {
 #define ONENAND_HAS_CONT_LOCK		(0x0001)
 #define ONENAND_HAS_UNLOCK_ALL		(0x0002)
 #define ONENAND_HAS_2PLANE		(0x0004)
+#define ONENAND_HAS_4KB_PAGE            (0x0008)
 #define ONENAND_RUNTIME_BADBLOCK_CHECK	(0x0200)
 #define ONENAND_PAGEBUF_ALLOC		(0x1000)
 #define ONENAND_OOBBUF_ALLOC		(0x2000)
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
                     ` (2 preceding siblings ...)
  2012-03-06  6:54   ` [U-Boot] [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
@ 2012-03-06  6:54   ` Lukasz Majewski
  2012-03-06 18:53   ` [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets) Scott Wood
  4 siblings, 0 replies; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-06  6:54 UTC (permalink / raw)
  To: u-boot

Enable OneNAND support for Exynos4210 (C210 universal).

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 include/configs/s5pc210_universal.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
index 8286680..1301275 100644
--- a/include/configs/s5pc210_universal.h
+++ b/include/configs/s5pc210_universal.h
@@ -233,6 +233,7 @@
 #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 2 sectors */
 
 #define CONFIG_USE_ONENAND_BOARD_INIT
+#define CONFIG_SAMSUNG_ONENAND
 #define CONFIG_SYS_ONENAND_BASE		0x0C000000
 
 #define CONFIG_ENV_IS_IN_MMC		1
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets)
  2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
                     ` (3 preceding siblings ...)
  2012-03-06  6:54   ` [U-Boot] [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
@ 2012-03-06 18:53   ` Scott Wood
  2012-03-07  0:04     ` Kyungmin Park
  2012-03-07  9:02     ` Lukasz Majewski
  4 siblings, 2 replies; 23+ messages in thread
From: Scott Wood @ 2012-03-06 18:53 UTC (permalink / raw)
  To: u-boot

On 03/06/2012 12:54 AM, Lukasz Majewski wrote:
> This patch sets add board dependent onenand probes.
> 
> Several fixes for GONI and Exynos4210 (C210_universal) targets have been added.
> 
> Tested at:
> 	Samsung S5PC110 GONI
>         Samsung Exynos4210 (S5PC210 Universal)
> 
> Lukasz Majewski (4):
>   onenand:samsung Target dependent OneNAND chip probe function
>   onenand:samsung OneNAND chip probe functions added for GONI and
>     Exynos4210
>   onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
>   onenand: samsung: Enable support OneNAND support at Samsung's
>     Exynos4210

Is anyone interested in being a OneNAND custodian?

I've taken some OneNAND patches in the past, but it's a completely
separate subsystem from NAND, and nobody seems interested in changing
that.  I not only have no hardware, but also no documentation other than
marketing materials.  I lack the context to properly review OneNAND patches.

-Scott

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets)
  2012-03-06 18:53   ` [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets) Scott Wood
@ 2012-03-07  0:04     ` Kyungmin Park
  2012-03-07  9:02     ` Lukasz Majewski
  1 sibling, 0 replies; 23+ messages in thread
From: Kyungmin Park @ 2012-03-07  0:04 UTC (permalink / raw)
  To: u-boot

On 3/7/12, Scott Wood <scottwood@freescale.com> wrote:
> On 03/06/2012 12:54 AM, Lukasz Majewski wrote:
>> This patch sets add board dependent onenand probes.
>>
>> Several fixes for GONI and Exynos4210 (C210_universal) targets have been
>> added.
>>
>> Tested at:
>> 	Samsung S5PC110 GONI
>>         Samsung Exynos4210 (S5PC210 Universal)
>>
>> Lukasz Majewski (4):
>>   onenand:samsung Target dependent OneNAND chip probe function
>>   onenand:samsung OneNAND chip probe functions added for GONI and
>>     Exynos4210
>>   onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
>>   onenand: samsung: Enable support OneNAND support at Samsung's
>>     Exynos4210
>
> Is anyone interested in being a OneNAND custodian?
>
> I've taken some OneNAND patches in the past, but it's a completely
> separate subsystem from NAND, and nobody seems interested in changing
> that.  I not only have no hardware, but also no documentation other than
> marketing materials.  I lack the context to properly review OneNAND patches.

Thanks Scott.
Now I'm no more work on OneNAND. It's almost fixed and no more new features.
These patches are syncing internal tree with mainline one. and no more changes.

So please until this time, handle this patches.

Next time, Mr. Kang handle both samsung and onenand together.
How do you think?

Thank you,
Kyungmin Park
>
> -Scott
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets)
  2012-03-06 18:53   ` [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets) Scott Wood
  2012-03-07  0:04     ` Kyungmin Park
@ 2012-03-07  9:02     ` Lukasz Majewski
  2012-03-07 20:13       ` [U-Boot] OneNAND custodian Scott Wood
  1 sibling, 1 reply; 23+ messages in thread
From: Lukasz Majewski @ 2012-03-07  9:02 UTC (permalink / raw)
  To: u-boot

On Tue, 6 Mar 2012 19:53:21 +0100
Scott Wood <scottwood@freescale.com> wrote:

> On 03/06/2012 12:54 AM, Lukasz Majewski wrote:
> > This patch sets add board dependent onenand probes.
> > 
> > Several fixes for GONI and Exynos4210 (C210_universal) targets have
> > been added.
> > 
> > Tested at:
> > 	Samsung S5PC110 GONI
> >         Samsung Exynos4210 (S5PC210 Universal)
> > 
> > Lukasz Majewski (4):
> >   onenand:samsung Target dependent OneNAND chip probe function
> >   onenand:samsung OneNAND chip probe functions added for GONI and
> >     Exynos4210
> >   onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
> >   onenand: samsung: Enable support OneNAND support at Samsung's
> >     Exynos4210
> 
> Is anyone interested in being a OneNAND custodian?
> 
> I've taken some OneNAND patches in the past, but it's a completely
> separate subsystem from NAND, and nobody seems interested in changing
> that.  I not only have no hardware, but also no documentation other
> than marketing materials.  I lack the context to properly review
> OneNAND patches.
> 
> -Scott

Hi Scott,

Some of our targets still use that kind of memory (Goni and Universal
C210). 
I can volunteer as a OneNAND custodian. 


-- 
Best regards,

Lukasz Majewski

Samsung Poland R&D Center
Platform Group

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] OneNAND custodian
  2012-03-07  9:02     ` Lukasz Majewski
@ 2012-03-07 20:13       ` Scott Wood
  2012-03-07 22:15         ` Wolfgang Denk
  0 siblings, 1 reply; 23+ messages in thread
From: Scott Wood @ 2012-03-07 20:13 UTC (permalink / raw)
  To: u-boot

On 03/07/2012 03:02 AM, Lukasz Majewski wrote:
> On Tue, 6 Mar 2012 19:53:21 +0100
> Scott Wood <scottwood@freescale.com> wrote:
> 
>> On 03/06/2012 12:54 AM, Lukasz Majewski wrote:
>>> This patch sets add board dependent onenand probes.
>>>
>>> Several fixes for GONI and Exynos4210 (C210_universal) targets have
>>> been added.
>>>
>>> Tested at:
>>> 	Samsung S5PC110 GONI
>>>         Samsung Exynos4210 (S5PC210 Universal)
>>>
>>> Lukasz Majewski (4):
>>>   onenand:samsung Target dependent OneNAND chip probe function
>>>   onenand:samsung OneNAND chip probe functions added for GONI and
>>>     Exynos4210
>>>   onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB()
>>>   onenand: samsung: Enable support OneNAND support at Samsung's
>>>     Exynos4210
>>
>> Is anyone interested in being a OneNAND custodian?
>>
>> I've taken some OneNAND patches in the past, but it's a completely
>> separate subsystem from NAND, and nobody seems interested in changing
>> that.  I not only have no hardware, but also no documentation other
>> than marketing materials.  I lack the context to properly review
>> OneNAND patches.
>>
>> -Scott
> 
> Hi Scott,
> 
> Some of our targets still use that kind of memory (Goni and Universal
> C210). 
> I can volunteer as a OneNAND custodian. 

Wolfgang, is this OK with you?

-Scott

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [U-Boot] OneNAND custodian
  2012-03-07 20:13       ` [U-Boot] OneNAND custodian Scott Wood
@ 2012-03-07 22:15         ` Wolfgang Denk
  0 siblings, 0 replies; 23+ messages in thread
From: Wolfgang Denk @ 2012-03-07 22:15 UTC (permalink / raw)
  To: u-boot

Dear Scott Wood,

In message <4F57C15F.10800@freescale.com> you wrote:
>
> > I can volunteer as a OneNAND custodian. 
> 
> Wolfgang, is this OK with you?

Yes, of course.

I plan to post a status summary / custodian update tomorrow.

To all new custodians: I need you SSH public keys.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Wisdom is one of the few things that looks bigger the further away it
is.                               - Terry Pratchett, _Witches Abroad_

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2012-03-07 22:15 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-10  8:41 [U-Boot] [PATCH 0/4] onenand: OneNAND board dependent probe and Samsung targets fixes Lukasz Majewski
2011-11-10  8:41 ` [U-Boot] [PATCH 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
2011-11-20  0:06   ` Marek Vasut
2011-11-20 23:29     ` Kyungmin Park
2011-11-10  8:41 ` [U-Boot] [PATCH 2/4] onenand:samsung OneNAND chip probe functions added for GONI and C210_Universal Lukasz Majewski
2011-11-10  8:41 ` [U-Boot] [PATCH 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
2011-11-10  8:41 ` [U-Boot] [PATCH 4/4] onenand: samsung: Enable support OneNAND support at Samsung's S5PC210_Universal Lukasz Majewski
2012-03-05 16:41 ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
2012-03-05 16:41   ` [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
2012-03-05 16:41   ` [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
2012-03-05 16:41   ` [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
2012-03-05 16:41   ` [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
2012-03-06  6:48   ` [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets Lukasz Majewski
2012-03-06  6:54 ` [U-Boot] " Lukasz Majewski
2012-03-06  6:54   ` [U-Boot] [RESEND 1/4] onenand:samsung Target dependent OneNAND chip probe function Lukasz Majewski
2012-03-06  6:54   ` [U-Boot] [RESEND 2/4] onenand:samsung OneNAND chip probe functions added for GONI and Exynos4210 Lukasz Majewski
2012-03-06  6:54   ` [U-Boot] [RESEND 3/4] onenand: Replace ONENAND_IS_MLC() test with ONENAND_HAS_4KB() Lukasz Majewski
2012-03-06  6:54   ` [U-Boot] [RESEND 4/4] onenand: samsung: Enable support OneNAND support at Samsung's Exynos4210 Lukasz Majewski
2012-03-06 18:53   ` [U-Boot] OneNAND custodian (was: Re: [RESEND 0/4] onenand: OneNAND board dependent probe and fixes for Samsung targets) Scott Wood
2012-03-07  0:04     ` Kyungmin Park
2012-03-07  9:02     ` Lukasz Majewski
2012-03-07 20:13       ` [U-Boot] OneNAND custodian Scott Wood
2012-03-07 22:15         ` Wolfgang Denk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.