All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Generic gpmc-onenand initialization, v2
@ 2009-04-29 21:49 Tony Lindgren
  2009-04-29 21:50 ` [PATCH 1/4] onenand init: Rename board-n800-flash.c to gpmc-onenand.c Tony Lindgren
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:49 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter

Hi all,

Please ignore the previous message, I had a typo in my stg mail options..

This series creates a generic gpmc-onenand.c from the board-n800-flash.c.
Eventually we should be able to use this for all boards with onenand
connected.

This should allow us to start syncing up the mach-omap2/board-*.c files
with mainline, and the the gpmc-onenand code into the mainline.

Testing & patches welcome to convert more boards! Adrian & Artem, could
you guys please check the partition tables I created in these patches?

Regards,

Tony

---

Tony Lindgren (4):
      onenand init: Pass configuration data from board-*.c files
      onenand init: Rename n800_* functions to gpmc_onenand_* functions
      onenand init: Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2
      onenand init: Rename board-n800-flash.c to gpmc-onenand.c


 arch/arm/mach-omap2/Makefile                 |    7 ++-
 arch/arm/mach-omap2/board-n800.c             |   49 ++++++++++++++++++++++++
 arch/arm/mach-omap2/board-rx51-flash.c       |   21 ----------
 arch/arm/mach-omap2/board-rx51-peripherals.c |   46 +++++++++++++++++++++++
 arch/arm/mach-omap2/board-rx51.c             |    2 -
 arch/arm/mach-omap2/gpmc-onenand.c           |   53 ++++++--------------------
 arch/arm/plat-omap/include/mach/board.h      |    8 ----
 arch/arm/plat-omap/include/mach/onenand.h    |   22 +++++++++++
 8 files changed, 132 insertions(+), 76 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/board-rx51-flash.c
 rename arch/arm/mach-omap2/{board-n800-flash.c => gpmc-onenand.c} (85%)

-- 
Signature

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

* [PATCH 1/4] onenand init: Rename board-n800-flash.c to gpmc-onenand.c
  2009-04-29 21:49 [PATCH 0/4] Generic gpmc-onenand initialization, v2 Tony Lindgren
@ 2009-04-29 21:50 ` Tony Lindgren
  2009-04-29 21:50 ` [PATCH 2/4] onenand init: Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2 Tony Lindgren
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:50 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter; +Cc: Tony Lindgren

Rename board-n800-flash.c to gpmc-onenand.c.

Signed-off-by: Tony Lindgren <tony@atommide.com>
---
 arch/arm/mach-omap2/Makefile           |    4 ++--
 arch/arm/mach-omap2/gpmc-onenand.c     |    0 
 2 files changed, 2 insertions(+), 2 deletions(-)
 rename arch/arm/mach-omap2/{board-n800-flash.c => gpmc-onenand.c} (100%)

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 76acefa..9127a94 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -55,14 +55,14 @@ obj-$(CONFIG_MACH_OMAP_LDP)		+= board-ldp.o \
 obj-$(CONFIG_MACH_OMAP_APOLLON)		+= board-apollon.o \
 					   board-apollon-mmc.o	\
 					   board-apollon-keys.o
-obj-$(CONFIG_MACH_NOKIA_N800)		+= board-n800.o board-n800-flash.o \
+obj-$(CONFIG_MACH_NOKIA_N800)		+= board-n800.o gpmc-onenand.o \
 					   board-n800-mmc.o board-n800-bt.o \
 					   board-n800-usb.o \
 					   board-n800-dsp.o \
 					   board-n800-camera.o
 obj-$(CONFIG_MACH_NOKIA_N810)		+= board-n810.o
 obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
-					   board-n800-flash.o \
+					   gpmc-onenand.o \
 					   board-rx51-flash.o \
 					   board-rx51-sdram.o \
 					   board-rx51-video.o \
diff --git a/arch/arm/mach-omap2/board-n800-flash.c b/arch/arm/mach-omap2/gpmc-onenand.c
similarity index 100%
rename from arch/arm/mach-omap2/board-n800-flash.c
rename to arch/arm/mach-omap2/gpmc-onenand.c


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

* [PATCH 2/4] onenand init: Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2
  2009-04-29 21:49 [PATCH 0/4] Generic gpmc-onenand initialization, v2 Tony Lindgren
  2009-04-29 21:50 ` [PATCH 1/4] onenand init: Rename board-n800-flash.c to gpmc-onenand.c Tony Lindgren
@ 2009-04-29 21:50 ` Tony Lindgren
  2009-04-29 21:50 ` [PATCH 3/4] onenand init: Rename n800_* functions to gpmc_onenand_* functions Tony Lindgren
  2009-04-29 21:50 ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Tony Lindgren
  3 siblings, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:50 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter

Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2

Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 arch/arm/mach-omap2/Makefile |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 9127a94..9cb2662 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -55,14 +55,13 @@ obj-$(CONFIG_MACH_OMAP_LDP)		+= board-ldp.o \
 obj-$(CONFIG_MACH_OMAP_APOLLON)		+= board-apollon.o \
 					   board-apollon-mmc.o	\
 					   board-apollon-keys.o
-obj-$(CONFIG_MACH_NOKIA_N800)		+= board-n800.o gpmc-onenand.o \
+obj-$(CONFIG_MACH_NOKIA_N800)		+= board-n800.o \
 					   board-n800-mmc.o board-n800-bt.o \
 					   board-n800-usb.o \
 					   board-n800-dsp.o \
 					   board-n800-camera.o
 obj-$(CONFIG_MACH_NOKIA_N810)		+= board-n810.o
 obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
-					   gpmc-onenand.o \
 					   board-rx51-flash.o \
 					   board-rx51-sdram.o \
 					   board-rx51-video.o \
@@ -79,6 +78,9 @@ obj-$(CONFIG_MACH_OMAP3_PANDORA)	+= board-omap3pandora.o \
 obj-$(CONFIG_USB_MUSB_SOC)		+= usb-musb.o
 obj-$(CONFIG_MACH_OMAP2_TUSB6010)	+= usb-tusb6010.o
 
+onenand-$(CONFIG_MTD_ONENAND_OMAP2)	:= gpmc-onenand.o
+obj-y					+= $(onenand-m) $(onenand-y)
+
 ifneq ($(CONFIG_USB_EHCI_HCD),)
 	obj-y				+= usb-ehci.o
 endif


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

* [PATCH 3/4] onenand init: Rename n800_* functions to gpmc_onenand_* functions
  2009-04-29 21:49 [PATCH 0/4] Generic gpmc-onenand initialization, v2 Tony Lindgren
  2009-04-29 21:50 ` [PATCH 1/4] onenand init: Rename board-n800-flash.c to gpmc-onenand.c Tony Lindgren
  2009-04-29 21:50 ` [PATCH 2/4] onenand init: Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2 Tony Lindgren
@ 2009-04-29 21:50 ` Tony Lindgren
  2009-04-29 21:50 ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Tony Lindgren
  3 siblings, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:50 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter

Rename n800_* functions to gpmc_onenand_* functions

Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 arch/arm/mach-omap2/Makefile              |    1 -
 arch/arm/mach-omap2/board-n800.c          |    2 +-
 arch/arm/mach-omap2/board-rx51-flash.c    |   21 -------------------
 arch/arm/mach-omap2/board-rx51.c          |    4 ++--
 arch/arm/mach-omap2/gpmc-onenand.c        |   32 +++++++++++++++--------------
 arch/arm/plat-omap/include/mach/onenand.h |   12 +++++++++++
 6 files changed, 31 insertions(+), 41 deletions(-)
 delete mode 100644 arch/arm/mach-omap2/board-rx51-flash.c

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 9cb2662..d35996d 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -62,7 +62,6 @@ obj-$(CONFIG_MACH_NOKIA_N800)		+= board-n800.o \
 					   board-n800-camera.o
 obj-$(CONFIG_MACH_NOKIA_N810)		+= board-n810.o
 obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
-					   board-rx51-flash.o \
 					   board-rx51-sdram.o \
 					   board-rx51-video.o \
 					   board-rx51-peripherals.o \
diff --git a/arch/arm/mach-omap2/board-n800.c b/arch/arm/mach-omap2/board-n800.c
index f1552f0..3d0a83b 100644
--- a/arch/arm/mach-omap2/board-n800.c
+++ b/arch/arm/mach-omap2/board-n800.c
@@ -689,7 +689,7 @@ void __init nokia_n800_common_init(void)
 {
 	platform_add_devices(n800_devices, ARRAY_SIZE(n800_devices));
 
-	n800_flash_init();
+	gpmc_onenand_init();
 	n800_mmc_init();
 	n800_bt_init();
 	n800_dsp_init();
diff --git a/arch/arm/mach-omap2/board-rx51-flash.c b/arch/arm/mach-omap2/board-rx51-flash.c
deleted file mode 100644
index f3b7eaf..0000000
--- a/arch/arm/mach-omap2/board-rx51-flash.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * linux/arch/arm/mach-omap2/board-rx51-flash.c
- *
- * Copyright (C) 2008 Nokia
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <mach/board-rx51.h>
-
-extern void __init n800_flash_init(void);
-
-void __init rx51_flash_init(void)
-{
-	n800_flash_init();
-}
-
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index c800b24..20a2470 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -30,6 +30,7 @@
 #include <mach/dma.h>
 #include <mach/gpmc.h>
 #include <mach/usb.h>
+#include <mach/onenand.h>
 #include <mach/board-rx51.h>
 
 static struct omap_uart_config rx51_uart_config = {
@@ -67,7 +68,6 @@ static void __init rx51_init_irq(void)
 	omap_gpio_init();
 }
 
-extern void __init rx51_flash_init(void);
 extern void __init rx51_peripherals_init(void);
 extern void __init rx51_video_init(void);
 
@@ -77,7 +77,7 @@ static void __init rx51_init(void)
 	omap_board_config_size = ARRAY_SIZE(rx51_config);
 	omap_serial_init();
 	usb_musb_init();
-	rx51_flash_init();
+	gpmc_onenand_init();
 	rx51_peripherals_init();
 	rx51_video_init();
 }
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 52aaf76..96f9358 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -19,22 +19,22 @@
 #include <mach/board.h>
 #include <mach/gpmc.h>
 
-struct mtd_partition n800_partitions[ONENAND_MAX_PARTITIONS];
+struct mtd_partition gpmc_onenand_partitions[ONENAND_MAX_PARTITIONS];
 
-int n800_onenand_setup(void __iomem *, int freq);
+int gpmc_onenand_setup(void __iomem *, int freq);
 
-static struct omap_onenand_platform_data n800_onenand_data = {
+static struct omap_onenand_platform_data gpmc_onenand_data = {
 	.cs = 0,
-	.parts = n800_partitions,
+	.parts = gpmc_onenand_partitions,
 	.nr_parts = 0, /* filled later */
-	.onenand_setup = n800_onenand_setup,
+	.onenand_setup = gpmc_onenand_setup,
 };
 
-static struct platform_device n800_onenand_device = {
+static struct platform_device gpmc_onenand_device = {
 	.name		= "omap2-onenand",
 	.id		= -1,
 	.dev = {
-		.platform_data = &n800_onenand_data,
+		.platform_data = &gpmc_onenand_data,
 	},
 };
 
@@ -305,10 +305,10 @@ static int omap2_onenand_set_sync_mode(int cs, void __iomem *onenand_base,
 	return 0;
 }
 
-int n800_onenand_setup(void __iomem *onenand_base, int freq)
+int gpmc_onenand_setup(void __iomem *onenand_base, int freq)
 {
-	struct omap_onenand_platform_data *datap = &n800_onenand_data;
-	struct device *dev = &n800_onenand_device.dev;
+	struct omap_onenand_platform_data *datap = &gpmc_onenand_data;
+	struct device *dev = &gpmc_onenand_device.dev;
 
 	/* Set sync timings in GPMC */
 	if (omap2_onenand_set_sync_mode(datap->cs, onenand_base, freq) < 0) {
@@ -319,30 +319,30 @@ int n800_onenand_setup(void __iomem *onenand_base, int freq)
 	return 0;
 }
 
-void __init n800_flash_init(void)
+void __init gpmc_flash_init(void)
 {
 	const struct omap_partition_config *part;
 	int i = 0;
 
-	n800_onenand_data.gpio_irq = cpu_is_omap34xx() ? 65 : 26;
+	gpmc_onenand_data.gpio_irq = cpu_is_omap34xx() ? 65 : 26;
 
 	while ((part = omap_get_nr_config(OMAP_TAG_PARTITION,
 				struct omap_partition_config, i)) != NULL) {
 		struct mtd_partition *mpart;
 
-		mpart = n800_partitions + i;
+		mpart = gpmc_onenand_partitions + i;
 		mpart->name = (char *) part->name;
 		mpart->size = part->size;
 		mpart->offset = part->offset;
 		mpart->mask_flags = part->mask_flags;
 		i++;
-		if (i == ARRAY_SIZE(n800_partitions)) {
+		if (i == ARRAY_SIZE(gpmc_onenand_partitions)) {
 			printk(KERN_ERR "Too many partitions supplied\n");
 			return;
 		}
 	}
-	n800_onenand_data.nr_parts = i;
-	if (platform_device_register(&n800_onenand_device) < 0) {
+	gpmc_onenand_data.nr_parts = i;
+	if (platform_device_register(&gpmc_onenand_device) < 0) {
 		printk(KERN_ERR "Unable to register OneNAND device\n");
 		return;
 	}
diff --git a/arch/arm/plat-omap/include/mach/onenand.h b/arch/arm/plat-omap/include/mach/onenand.h
index 4649d30..f97cf55 100644
--- a/arch/arm/plat-omap/include/mach/onenand.h
+++ b/arch/arm/plat-omap/include/mach/onenand.h
@@ -23,3 +23,15 @@ struct omap_onenand_platform_data {
 int omap2_onenand_rephase(void);
 
 #define ONENAND_MAX_PARTITIONS 8
+
+#if defined(CONFIG_MTD_ONENAND) || defined(CONFIG_MTD_ONENAND_MODULE)
+
+extern void gpmc_onenand_init(void);
+
+#else
+
+static inline void gpmc_onenand_init(void)
+{
+}
+
+#endif


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

* [PATCH 4/4] onenand init: Pass configuration data from board-*.c files
  2009-04-29 21:49 [PATCH 0/4] Generic gpmc-onenand initialization, v2 Tony Lindgren
                   ` (2 preceding siblings ...)
  2009-04-29 21:50 ` [PATCH 3/4] onenand init: Rename n800_* functions to gpmc_onenand_* functions Tony Lindgren
@ 2009-04-29 21:50 ` Tony Lindgren
  2009-04-29 21:54   ` [PATCH 5/4] onenand init: Debug patch to print out the onenand partitions from bootloader Tony Lindgren
  2009-04-30  5:53   ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Adrian Hunter
  3 siblings, 2 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:50 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter

Pass configuration data from board-*.c files.

Also remove support for the OMAP_TAG_PARTITION tag.
If the partition info is passed, it should be passed from
cmdline, and probably should be done in a generic way
in the drivers/mtd.

Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 arch/arm/mach-omap2/board-n800.c             |   49 +++++++++++++++++++++++++-
 arch/arm/mach-omap2/board-rx51-peripherals.c |   46 ++++++++++++++++++++++++
 arch/arm/mach-omap2/board-rx51.c             |    2 -
 arch/arm/mach-omap2/gpmc-onenand.c           |   47 +++++--------------------
 arch/arm/plat-omap/include/mach/board.h      |    8 ----
 arch/arm/plat-omap/include/mach/onenand.h    |   16 +++++++-
 6 files changed, 116 insertions(+), 52 deletions(-)

diff --git a/arch/arm/mach-omap2/board-n800.c b/arch/arm/mach-omap2/board-n800.c
index 3d0a83b..e882e4b 100644
--- a/arch/arm/mach-omap2/board-n800.c
+++ b/arch/arm/mach-omap2/board-n800.c
@@ -41,6 +41,7 @@
 #include <mach/gpio-switch.h>
 #include <mach/omapfb.h>
 #include <mach/blizzard.h>
+#include <mach/onenand.h>
 #include <mach/board-nokia.h>
 
 #include <../drivers/cbus/tahvo.h>
@@ -685,11 +686,55 @@ static struct i2c_board_info __initdata_or_module n810_i2c_board_info_2[] = {
 	},
 };
 
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
+
+static struct mtd_partition onenand_partitions[] = {
+	{
+		.name           = "bootloader",
+		.offset         = 0,
+		.size           = 0x20000,
+		.mask_flags     = MTD_WRITEABLE,	/* Force read-only */
+	},
+	{
+		.name           = "config",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x60000,
+	},
+	{
+		.name           = "kernel",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x200000,
+	},
+	{
+		.name           = "initfs",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x400000,
+	},
+	{
+		.name           = "rootfs",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = MTDPART_SIZ_FULL,
+	},
+};
+
+static struct omap_onenand_platform_data board_onenand_data = {
+	.cs		= 0,
+	.gpio_irq	= 26,
+	.parts		= onenand_partitions,
+	.nr_parts	= ARRAY_SIZE(onenand_partitions),
+};
+
+static void __init board_onenand_init(void)
+{
+	gpmc_onenand_init(&board_onenand_data);
+}
+
+#endif
+
 void __init nokia_n800_common_init(void)
 {
 	platform_add_devices(n800_devices, ARRAY_SIZE(n800_devices));
 
-	gpmc_onenand_init();
 	n800_mmc_init();
 	n800_bt_init();
 	n800_dsp_init();
@@ -717,6 +762,7 @@ void __init nokia_n800_common_init(void)
 		
 	mipid_dev_init();
 	blizzard_dev_init();
+	board_onenand_init();
 }
 
 static void __init nokia_n800_init(void)
@@ -728,6 +774,7 @@ static void __init nokia_n800_init(void)
 	tea5761_dev_init();
 	omap_register_gpio_switches(n800_gpio_switches,
 				    ARRAY_SIZE(n800_gpio_switches));
+	board_onenand_init();
 }
 
 void __init nokia_n800_map_io(void)
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index 22183af..7b1ee3d 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -27,6 +27,7 @@
 #include <mach/common.h>
 #include <mach/dma.h>
 #include <mach/gpmc.h>
+#include <mach/onenand.h>
 
 #include "mmc-twl4030.h"
 
@@ -478,6 +479,50 @@ static int __init rx51_i2c_init(void)
 	return 0;
 }
 
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
+
+static struct mtd_partition onenand_partitions[] = {
+	{
+		.name           = "bootloader",
+		.offset         = 0,
+		.size           = 0x20000,
+		.mask_flags     = MTD_WRITEABLE,	/* Force read-only */
+	},
+	{
+		.name           = "config",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x60000,
+	},
+	{
+		.name           = "kernel",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x200000,
+	},
+	{
+		.name           = "initfs",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = 0x200000,
+	},
+	{
+		.name           = "rootfs",
+		.offset         = MTDPART_OFS_APPEND,
+		.size           = MTDPART_SIZ_FULL,
+	},
+};
+
+static struct omap_onenand_platform_data board_onenand_data = {
+	.cs		= 0,
+	.gpio_irq	= 65,
+	.parts		= onenand_partitions,
+	.nr_parts	= ARRAY_SIZE(onenand_partitions),
+};
+
+static void __init board_onenand_init(void)
+{
+	gpmc_onenand_init(&board_onenand_data);
+}
+
+#endif
 
 void __init rx51_peripherals_init(void)
 {
@@ -488,5 +533,6 @@ void __init rx51_peripherals_init(void)
 	rx51_i2c_init();
 	rx51_init_smc91x();
 	rx51_init_tsc2005();
+	board_onenand_init();
 }
 
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 20a2470..5ee62f8 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -30,7 +30,6 @@
 #include <mach/dma.h>
 #include <mach/gpmc.h>
 #include <mach/usb.h>
-#include <mach/onenand.h>
 #include <mach/board-rx51.h>
 
 static struct omap_uart_config rx51_uart_config = {
@@ -77,7 +76,6 @@ static void __init rx51_init(void)
 	omap_board_config_size = ARRAY_SIZE(rx51_config);
 	omap_serial_init();
 	usb_musb_init();
-	gpmc_onenand_init();
 	rx51_peripherals_init();
 	rx51_video_init();
 }
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 96f9358..fc79183 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -19,23 +19,11 @@
 #include <mach/board.h>
 #include <mach/gpmc.h>
 
-struct mtd_partition gpmc_onenand_partitions[ONENAND_MAX_PARTITIONS];
-
-int gpmc_onenand_setup(void __iomem *, int freq);
-
-static struct omap_onenand_platform_data gpmc_onenand_data = {
-	.cs = 0,
-	.parts = gpmc_onenand_partitions,
-	.nr_parts = 0, /* filled later */
-	.onenand_setup = gpmc_onenand_setup,
-};
+static struct omap_onenand_platform_data *gpmc_onenand_data;
 
 static struct platform_device gpmc_onenand_device = {
 	.name		= "omap2-onenand",
 	.id		= -1,
-	.dev = {
-		.platform_data = &gpmc_onenand_data,
-	},
 };
 
 static int omap2_onenand_set_async_mode(int cs, void __iomem *onenand_base)
@@ -305,13 +293,13 @@ static int omap2_onenand_set_sync_mode(int cs, void __iomem *onenand_base,
 	return 0;
 }
 
-int gpmc_onenand_setup(void __iomem *onenand_base, int freq)
+static int gpmc_onenand_setup(void __iomem *onenand_base, int freq)
 {
-	struct omap_onenand_platform_data *datap = &gpmc_onenand_data;
 	struct device *dev = &gpmc_onenand_device.dev;
 
 	/* Set sync timings in GPMC */
-	if (omap2_onenand_set_sync_mode(datap->cs, onenand_base, freq) < 0) {
+	if (omap2_onenand_set_sync_mode(gpmc_onenand_data->cs, onenand_base,
+			freq) < 0) {
 		dev_err(dev, "Unable to set synchronous mode\n");
 		return -EINVAL;
 	}
@@ -319,29 +307,12 @@ int gpmc_onenand_setup(void __iomem *onenand_base, int freq)
 	return 0;
 }
 
-void __init gpmc_flash_init(void)
+void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
 {
-	const struct omap_partition_config *part;
-	int i = 0;
-
-	gpmc_onenand_data.gpio_irq = cpu_is_omap34xx() ? 65 : 26;
-
-	while ((part = omap_get_nr_config(OMAP_TAG_PARTITION,
-				struct omap_partition_config, i)) != NULL) {
-		struct mtd_partition *mpart;
-
-		mpart = gpmc_onenand_partitions + i;
-		mpart->name = (char *) part->name;
-		mpart->size = part->size;
-		mpart->offset = part->offset;
-		mpart->mask_flags = part->mask_flags;
-		i++;
-		if (i == ARRAY_SIZE(gpmc_onenand_partitions)) {
-			printk(KERN_ERR "Too many partitions supplied\n");
-			return;
-		}
-	}
-	gpmc_onenand_data.nr_parts = i;
+	gpmc_onenand_data = _onenand_data;
+	gpmc_onenand_data->onenand_setup = gpmc_onenand_setup;
+	gpmc_onenand_device.dev.platform_data = gpmc_onenand_data;
+
 	if (platform_device_register(&gpmc_onenand_device) < 0) {
 		printk(KERN_ERR "Unable to register OneNAND device\n");
 		return;
diff --git a/arch/arm/plat-omap/include/mach/board.h b/arch/arm/plat-omap/include/mach/board.h
index ae8c2db..4d8d10a 100644
--- a/arch/arm/plat-omap/include/mach/board.h
+++ b/arch/arm/plat-omap/include/mach/board.h
@@ -125,14 +125,6 @@ struct omap_tmp105_config {
 	int (* set_power)(int enable);
 };
 
-struct omap_partition_config {
-	char name[16];
-	unsigned int size;
-	unsigned int offset;
-	/* same as in include/linux/mtd/partitions.h */
-	unsigned int mask_flags;
-};
-
 struct omap_flash_part_str_config {
 	char part_table[0];
 };
diff --git a/arch/arm/plat-omap/include/mach/onenand.h b/arch/arm/plat-omap/include/mach/onenand.h
index f97cf55..2a391fa 100644
--- a/arch/arm/plat-omap/include/mach/onenand.h
+++ b/arch/arm/plat-omap/include/mach/onenand.h
@@ -9,8 +9,11 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 
+#ifndef __ASM_ARCH_OMAP_ONENAND_H__
+
 struct omap_onenand_platform_data {
 	int			cs;
 	int			gpio_irq;
@@ -24,14 +27,21 @@ int omap2_onenand_rephase(void);
 
 #define ONENAND_MAX_PARTITIONS 8
 
-#if defined(CONFIG_MTD_ONENAND) || defined(CONFIG_MTD_ONENAND_MODULE)
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
 
-extern void gpmc_onenand_init(void);
+extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
 
 #else
 
-static inline void gpmc_onenand_init(void)
+#define board_onenand_data	NULL
+
+static inline void board_onenand_init(void)
+{
+}
+
+static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
 {
 }
 
 #endif
+#endif


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

* [PATCH 5/4] onenand init: Debug patch to print out the onenand partitions from bootloader
  2009-04-29 21:50 ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Tony Lindgren
@ 2009-04-29 21:54   ` Tony Lindgren
  2009-04-30  5:53   ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Adrian Hunter
  1 sibling, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-29 21:54 UTC (permalink / raw)
  To: dedekind, linux-omap, adrian.hunter

[-- Attachment #1: Type: text/plain, Size: 70 bytes --]

FYI, here's the debug patch I used to dump the ATAG partitions.

Tony

[-- Attachment #2: dump-atag-partitions.patch --]
[-- Type: text/x-diff, Size: 3650 bytes --]

>From b65441b89ae7003adb983ac2f225f0bc1ddfba76 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <tony@atomide.com>
Date: Wed, 29 Apr 2009 14:52:20 -0700
Subject: [PATCH] onenand init: Debug patch to print out the onenand partitions from bootloader

Not for merging

diff --git a/arch/arm/mach-omap2/board-n800.c b/arch/arm/mach-omap2/board-n800.c
index e882e4b..e69b3b2 100644
--- a/arch/arm/mach-omap2/board-n800.c
+++ b/arch/arm/mach-omap2/board-n800.c
@@ -726,6 +726,7 @@ static struct omap_onenand_platform_data board_onenand_data = {
 
 static void __init board_onenand_init(void)
 {
+	gpmc_set_atag_partitions(onenand_partitions, ONENAND_MAX_PARTITIONS);
 	gpmc_onenand_init(&board_onenand_data);
 }
 
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index 2d53315..664b732 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -519,6 +519,7 @@ static struct omap_onenand_platform_data board_onenand_data = {
 
 static void __init board_onenand_init(void)
 {
+	gpmc_set_atag_partitions(onenand_partitions, ONENAND_MAX_PARTITIONS);
 	gpmc_onenand_init(&board_onenand_data);
 }
 
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 9f5c191..dbf2096 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -327,3 +327,30 @@ void __init gpmc_onenand_init(struct omap_onenand_platform_data *_onenand_data)
 		return;
 	}
 }
+
+void __init gpmc_set_atag_partitions(struct mtd_partition *parts, int nr_parts)
+{
+	const struct omap_partition_config *part;
+	int i = 0;
+
+	while ((part = omap_get_nr_config(OMAP_TAG_PARTITION,
+				struct omap_partition_config, i)) != NULL) {
+		struct mtd_partition *mpart;
+
+		mpart = parts;
+		mpart->name = (char *)part->name;
+		mpart->size = part->size;
+		mpart->offset = part->offset;
+		mpart->mask_flags = part->mask_flags;
+		printk(KERN_INFO "Partition%i\n", i);
+		printk(KERN_INFO "\t{\n");
+		printk(KERN_INFO "\t\t.name\t\t= \"%s\",\n", mpart->name);
+		printk(KERN_INFO "\t\t.offset\t\t= 0x%llx,\n", mpart->offset);
+		printk(KERN_INFO "\t\t.size\t\t= 0x%llx,\n", mpart->size);
+		printk(KERN_INFO "\t\t.mask_flags\t= 0x%x,\n",
+							mpart->mask_flags);
+		printk(KERN_INFO "\t},\n");
+		i++;
+		parts++;
+	}
+}
diff --git a/arch/arm/plat-omap/include/mach/board.h b/arch/arm/plat-omap/include/mach/board.h
index 4d8d10a..ae8c2db 100644
--- a/arch/arm/plat-omap/include/mach/board.h
+++ b/arch/arm/plat-omap/include/mach/board.h
@@ -125,6 +125,14 @@ struct omap_tmp105_config {
 	int (* set_power)(int enable);
 };
 
+struct omap_partition_config {
+	char name[16];
+	unsigned int size;
+	unsigned int offset;
+	/* same as in include/linux/mtd/partitions.h */
+	unsigned int mask_flags;
+};
+
 struct omap_flash_part_str_config {
 	char part_table[0];
 };
diff --git a/arch/arm/plat-omap/include/mach/onenand.h b/arch/arm/plat-omap/include/mach/onenand.h
index 2a391fa..f6a5320 100644
--- a/arch/arm/plat-omap/include/mach/onenand.h
+++ b/arch/arm/plat-omap/include/mach/onenand.h
@@ -30,6 +30,8 @@ int omap2_onenand_rephase(void);
 #if defined(CONFIG_MTD_ONENAND_OMAP2) || defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
 
 extern void gpmc_onenand_init(struct omap_onenand_platform_data *d);
+extern void gpmc_set_atag_partitions(struct mtd_partition *parts,
+								int nr_parts);
 
 #else
 
@@ -43,5 +45,10 @@ static inline void gpmc_onenand_init(struct omap_onenand_platform_data *d)
 {
 }
 
+static inline void gpmc_set_atag_partitions(struct mtd_partition *parts,
+								int nr_parts)
+{
+}
+
 #endif
 #endif

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

* Re: [PATCH 4/4] onenand init: Pass configuration data from board-*.c files
  2009-04-29 21:50 ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Tony Lindgren
  2009-04-29 21:54   ` [PATCH 5/4] onenand init: Debug patch to print out the onenand partitions from bootloader Tony Lindgren
@ 2009-04-30  5:53   ` Adrian Hunter
  2009-04-30 14:01     ` Tony Lindgren
  1 sibling, 1 reply; 8+ messages in thread
From: Adrian Hunter @ 2009-04-30  5:53 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: dedekind, linux-omap

Tony Lindgren wrote:
> Pass configuration data from board-*.c files.
> 
> Also remove support for the OMAP_TAG_PARTITION tag.
> If the partition info is passed, it should be passed from
> cmdline, and probably should be done in a generic way
> in the drivers/mtd.
> 
> Signed-off-by: Tony Lindgren <tony@atomide.com>
> ---

NAK

This would break all our flashing infrastructure.

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

* Re: [PATCH 4/4] onenand init: Pass configuration data from board-*.c files
  2009-04-30  5:53   ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Adrian Hunter
@ 2009-04-30 14:01     ` Tony Lindgren
  0 siblings, 0 replies; 8+ messages in thread
From: Tony Lindgren @ 2009-04-30 14:01 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: dedekind, linux-omap

* Adrian Hunter <adrian.hunter@nokia.com> [090429 22:52]:
> Tony Lindgren wrote:
>> Pass configuration data from board-*.c files.
>>
>> Also remove support for the OMAP_TAG_PARTITION tag.
>> If the partition info is passed, it should be passed from
>> cmdline, and probably should be done in a generic way
>> in the drivers/mtd.
>>
>> Signed-off-by: Tony Lindgren <tony@atomide.com>
>> ---
>
> NAK
>
> This would break all our flashing infrastructure.

The OMAP_TAG_PARTITION and others will have to go,
the omap tags have been rejected several times by RMK.

The right solution is to follow Linux standards and pass
the options from the cmdline.

Tony

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

end of thread, other threads:[~2009-04-30 14:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-29 21:49 [PATCH 0/4] Generic gpmc-onenand initialization, v2 Tony Lindgren
2009-04-29 21:50 ` [PATCH 1/4] onenand init: Rename board-n800-flash.c to gpmc-onenand.c Tony Lindgren
2009-04-29 21:50 ` [PATCH 2/4] onenand init: Build gpmc-onenand.o based on CONFIG_MTD_ONENAND_OMAP2 Tony Lindgren
2009-04-29 21:50 ` [PATCH 3/4] onenand init: Rename n800_* functions to gpmc_onenand_* functions Tony Lindgren
2009-04-29 21:50 ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Tony Lindgren
2009-04-29 21:54   ` [PATCH 5/4] onenand init: Debug patch to print out the onenand partitions from bootloader Tony Lindgren
2009-04-30  5:53   ` [PATCH 4/4] onenand init: Pass configuration data from board-*.c files Adrian Hunter
2009-04-30 14:01     ` Tony Lindgren

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.