[PATCH v3 2/3] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

2010-02-08 Thread Vimal Singh
Sorry, mailer corrupted the last patch (line wrapped).
Here is the correct patch.

-
vimal

>From f931fb85b774f97db3b0a25cde4a8154bb8d6dba Mon Sep 17 00:00:00 2001
From: Vimal Singh 
Date: Mon, 8 Feb 2010 05:02:45 +0530
Subject: [PATCH] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

This patch adds 'board-sdp-flash.c', which could be utilized
by boards similar to 3430SDP. (For ex: 2430sdp, 36030sdp).

This file does initialization for all three flash devices present
in SDP boards (NOR, NAND, OneNAND), by finding there 'cs' number
dynamically using switch setting information (S8: 1-4).
This also expects partition information from core board files (for
ex: board-3430sdp.c). Which allows to choose different default
partitions for different boards.

A new structure is created for this purpose: 'flash_partitions'
in 'mach/board-sdp.h'. This has two members:
1. struct mtd_partition *parts
2. int nr_parts

A board file is expected to fill this structure and pass it to
'sdp-flsash-init'. Partition information should be passed in
structure array of 'flash_partitions'. Partition information should
be passed in below sequence in array:
NOR
OneNAND
NAND

Signed-off-by: Vimal Singh 
---
 arch/arm/mach-omap2/board-sdp-flash.c|  272 ++
 arch/arm/mach-omap2/include/mach/board-sdp.h |   22 ++
 arch/arm/plat-omap/include/plat/gpmc.h   |2 +
 3 files changed, 296 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-sdp-flash.c
 create mode 100644 arch/arm/mach-omap2/include/mach/board-sdp.h

diff --git a/arch/arm/mach-omap2/board-sdp-flash.c
b/arch/arm/mach-omap2/board-sdp-flash.c
new file mode 100644
index 000..b1b88de
--- /dev/null
+++ b/arch/arm/mach-omap2/board-sdp-flash.c
@@ -0,0 +1,272 @@
+/*
+ * board-sdp-flash.c
+ * Modified from mach-omap2/board-3430sdp-flash.c
+ *
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2009 Texas Instruments
+ *
+ * Vimal Singh 
+ *
+ * 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 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define REG_FPGA_REV   0x10
+#define REG_FPGA_DIP_SWITCH_INPUT2 0x60
+#define MAX_SUPPORTED_GPMC_CONFIG  3
+
+#define DEBUG_BASE 0x0800 /* debug board */
+
+#define PDC_NOR1
+#define PDC_NAND   2
+#define PDC_ONENAND3
+#define DBG_MPDB   4
+
+/* various memory sizes */
+#define FLASH_SIZE_SDPV1   SZ_64M  /* NOR flash (64 Meg aligned) */
+#define FLASH_SIZE_SDPV2   SZ_128M /* NOR flash (256 Meg aligned) */
+
+/*
+ * SDP3430 V2 Board CS organization
+ * Different from SDP3430 V1. Now 4 switches used to specify CS
+ *
+ * See also the Switch S8 settings in the comments.
+ *
+ * REVISIT: Add support for 2430 SDP
+ */
+static const unsigned char chip_sel_sdp[][GPMC_CS_NUM] = {
+   {PDC_NOR, PDC_NAND, PDC_ONENAND, DBG_MPDB, 0, 0, 0, 0}, /* S8: */
+   {PDC_ONENAND, PDC_NAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1110 */
+   {PDC_NAND, PDC_ONENAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1101 */
+};
+
+static struct physmap_flash_data sdp_nor_data = {
+   .width  = 2,
+};
+
+static struct resource sdp_nor_resource = {
+   .flags  = IORESOURCE_MEM,
+};
+
+static struct platform_device sdp_nor_device = {
+   .name   = "physmap-flash",
+   .id = 0,
+   .dev= {
+   .platform_data = &sdp_nor_data,
+   },
+   .num_resources  = 1,
+   .resource   = &sdp_nor_resource,
+};
+
+static void
+__init board_nor_init(struct flash_partitions sdp_nor_parts, u8 cs)
+{
+   int err;
+
+   sdp_nor_data.parts  = sdp_nor_parts.parts;
+   sdp_nor_data.nr_parts   = sdp_nor_parts.nr_parts;
+
+   /* Configure start address and size of NOR device */
+   if (omap_rev() >= OMAP3430_REV_ES1_0) {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV2 - 1,
+   (unsigned long *)&sdp_nor_resource.start);
+   sdp_nor_resource.end = sdp_nor_resource.start
+   + FLASH_SIZE_SDPV2 - 1;
+   } else {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV1 - 1,
+   (unsigned long *)&sdp_nor_resource.start);
+   sdp_nor_resource.end = sdp_nor_resource.start
+   + FLASH_SIZE_SDPV1 - 1;
+   }
+   if (err < 0) {
+   printk(KERN_ERR "NOR: Can't request GPMC CS\n");
+   return;
+   }
+   if (platform_device_register(&sdp_nor_device) < 0)
+   printk(KERN_ERR "Unable to register NOR device\n");
+}
+
+#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
+   defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
+static struct

Re: [PATCH v3 2/3] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

2010-02-08 Thread Vimal Singh
On Mon, Feb 8, 2010 at 9:02 PM, Ladislav Michl  wrote:
> On Mon, Feb 08, 2010 at 06:38:57PM +0530, Vimal Singh wrote:
>> In this version: (as per comments recieved for 2nd version)
>> - remove 'omap_set_vpp' function
>> - set 'set_vpp' to null
>
> Ah, I'm sorry for not being quite exact. "leave set_vpp set to NULL" means
> there is no need to asign anything to that structure member, because BSS is
> zeroed (set to NULL) anyway. Something like this:
>
> static struct physmap_flash_data sdp_nor_data = {
>        .width          = 2,
> };
>
> Yes, this is a nitpick only...
>

Below is updated patch. I am not increasing the version number for
this tinny change.

-vimal

>From f931fb85b774f97db3b0a25cde4a8154bb8d6dba Mon Sep 17 00:00:00 2001
From: Vimal Singh 
Date: Mon, 8 Feb 2010 05:02:45 +0530
Subject: [PATCH] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

This patch adds 'board-sdp-flash.c', which could be utilized
by boards similar to 3430SDP. (For ex: 2430sdp, 36030sdp).

This file does initialization for all three flash devices present
in SDP boards (NOR, NAND, OneNAND), by finding there 'cs' number
dynamically using switch setting information (S8: 1-4).
This also expects partition information from core board files (for
ex: board-3430sdp.c). Which allows to choose different default
partitions for different boards.

A new structure is created for this purpose: 'flash_partitions'
in 'mach/board-sdp.h'. This has two members:
1. struct mtd_partition *parts
2. int nr_parts

A board file is expected to fill this structure and pass it to
'sdp-flsash-init'. Partition information should be passed in
structure array of 'flash_partitions'. Partition information should
be passed in below sequence in array:
NOR
OneNAND
NAND

Signed-off-by: Vimal Singh 
---
 arch/arm/mach-omap2/board-sdp-flash.c|  272 ++
 arch/arm/mach-omap2/include/mach/board-sdp.h |   22 ++
 arch/arm/plat-omap/include/plat/gpmc.h   |2 +
 3 files changed, 296 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-sdp-flash.c
 create mode 100644 arch/arm/mach-omap2/include/mach/board-sdp.h

diff --git a/arch/arm/mach-omap2/board-sdp-flash.c
b/arch/arm/mach-omap2/board-sdp-flash.c
new file mode 100644
index 000..b1b88de
--- /dev/null
+++ b/arch/arm/mach-omap2/board-sdp-flash.c
@@ -0,0 +1,272 @@
+/*
+ * board-sdp-flash.c
+ * Modified from mach-omap2/board-3430sdp-flash.c
+ *
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2009 Texas Instruments
+ *
+ * Vimal Singh 
+ *
+ * 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 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define REG_FPGA_REV   0x10
+#define REG_FPGA_DIP_SWITCH_INPUT2 0x60
+#define MAX_SUPPORTED_GPMC_CONFIG  3
+
+#define DEBUG_BASE 0x0800 /* debug board */
+
+#define PDC_NOR1
+#define PDC_NAND   2
+#define PDC_ONENAND3
+#define DBG_MPDB   4
+
+/* various memory sizes */
+#define FLASH_SIZE_SDPV1   SZ_64M  /* NOR flash (64 Meg aligned) */
+#define FLASH_SIZE_SDPV2   SZ_128M /* NOR flash (256 Meg aligned) */
+
+/*
+ * SDP3430 V2 Board CS organization
+ * Different from SDP3430 V1. Now 4 switches used to specify CS
+ *
+ * See also the Switch S8 settings in the comments.
+ *
+ * REVISIT: Add support for 2430 SDP
+ */
+static const unsigned char chip_sel_sdp[][GPMC_CS_NUM] = {
+   {PDC_NOR, PDC_NAND, PDC_ONENAND, DBG_MPDB, 0, 0, 0, 0}, /* S8: */
+   {PDC_ONENAND, PDC_NAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1110 */
+   {PDC_NAND, PDC_ONENAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1101 */
+};
+
+static struct physmap_flash_data sdp_nor_data = {
+   .width  = 2,
+};
+
+static struct resource sdp_nor_resource = {
+   .flags  = IORESOURCE_MEM,
+};
+
+static struct platform_device sdp_nor_device = {
+   .name   = "physmap-flash",
+   .id = 0,
+   .dev= {
+   .platform_data = &sdp_nor_data,
+   },
+   .num_resources  = 1,
+   .resource   = &sdp_nor_resource,
+};
+
+static void
+__init board_nor_init(struct flash_partitions sdp_nor_parts, u8 cs)
+{
+   int err;
+
+   sdp_nor_data.parts  = sdp_nor_parts.parts;
+   sdp_nor_data.nr_parts   = sdp_nor_parts.nr_parts;
+
+   /* Configure start address and size of NOR device */
+   if (omap_rev() >= OMAP3430_REV_ES1_0) {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV2 - 1,
+   (unsigned long *)&sdp_nor_resource.start);
+   sdp_nor_resource.end = sdp_nor_resource.start
+   + FLASH_SIZE_SDPV2 - 1;
+   } else {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV1 - 

Re: [PATCH v3 2/3] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

2010-02-08 Thread Ladislav Michl
On Mon, Feb 08, 2010 at 06:38:57PM +0530, Vimal Singh wrote:
> In this version: (as per comments recieved for 2nd version)
> - remove 'omap_set_vpp' function
> - set 'set_vpp' to null

Ah, I'm sorry for not being quite exact. "leave set_vpp set to NULL" means
there is no need to asign anything to that structure member, because BSS is
zeroed (set to NULL) anyway. Something like this:

static struct physmap_flash_data sdp_nor_data = {
.width  = 2,
};

Yes, this is a nitpick only...
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/3] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

2010-02-08 Thread Vimal Singh
In this version: (as per comments recieved for 2nd version)
- remove 'omap_set_vpp' function
- set 'set_vpp' to null

These changes do not have any impact on rest of the patches in series.

-vimal

>From 6199d9c4db83dfd006f7cc2e74089ca1e9fdf8dc Mon Sep 17 00:00:00 2001
From: Vimal Singh 
Date: Mon, 8 Feb 2010 05:02:45 +0530
Subject: [PATCH] OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init

This patch adds 'board-sdp-flash.c', which could be utilized
by boards similar to 3430SDP. (For ex: 2430sdp, 36030sdp).

This file does initialization for all three flash devices present
in SDP boards (NOR, NAND, OneNAND), by finding there 'cs' number
dynamically using switch setting information (S8: 1-4).
This also expects partition information from core board files (for
ex: board-3430sdp.c). Which allows to choose different default
partitions for different boards.

A new structure is created for this purpose: 'flash_partitions'
in 'mach/board-sdp.h'. This has two members:
1. struct mtd_partition *parts
2. int nr_parts

A board file is expected to fill this structure and pass it to
'sdp-flsash-init'. Partition information should be passed in
structure array of 'flash_partitions'. Partition information should
be passed in below sequence in array:
NOR
OneNAND
NAND

Signed-off-by: Vimal Singh 
---
 arch/arm/mach-omap2/board-sdp-flash.c|  273 ++
 arch/arm/mach-omap2/include/mach/board-sdp.h |   22 ++
 arch/arm/plat-omap/include/plat/gpmc.h   |2 +
 3 files changed, 297 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-sdp-flash.c
 create mode 100644 arch/arm/mach-omap2/include/mach/board-sdp.h

diff --git a/arch/arm/mach-omap2/board-sdp-flash.c
b/arch/arm/mach-omap2/board-sdp-flash.c
new file mode 100644
index 000..a0b80e7
--- /dev/null
+++ b/arch/arm/mach-omap2/board-sdp-flash.c
@@ -0,0 +1,273 @@
+/*
+ * board-sdp-flash.c
+ * Modified from mach-omap2/board-3430sdp-flash.c
+ *
+ * Copyright (C) 2009 Nokia Corporation
+ * Copyright (C) 2009 Texas Instruments
+ *
+ * Vimal Singh 
+ *
+ * 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 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define REG_FPGA_REV   0x10
+#define REG_FPGA_DIP_SWITCH_INPUT2 0x60
+#define MAX_SUPPORTED_GPMC_CONFIG  3
+
+#define DEBUG_BASE 0x0800 /* debug board */
+
+#define PDC_NOR1
+#define PDC_NAND   2
+#define PDC_ONENAND3
+#define DBG_MPDB   4
+
+/* various memory sizes */
+#define FLASH_SIZE_SDPV1   SZ_64M  /* NOR flash (64 Meg aligned) */
+#define FLASH_SIZE_SDPV2   SZ_128M /* NOR flash (256 Meg aligned) */
+
+/*
+ * SDP3430 V2 Board CS organization
+ * Different from SDP3430 V1. Now 4 switches used to specify CS
+ *
+ * See also the Switch S8 settings in the comments.
+ *
+ * REVISIT: Add support for 2430 SDP
+ */
+static const unsigned char chip_sel_sdp[][GPMC_CS_NUM] = {
+   {PDC_NOR, PDC_NAND, PDC_ONENAND, DBG_MPDB, 0, 0, 0, 0}, /* S8: */
+   {PDC_ONENAND, PDC_NAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1110 */
+   {PDC_NAND, PDC_ONENAND, PDC_NOR, DBG_MPDB, 0, 0, 0, 0}, /* S8:1101 */
+};
+
+static struct physmap_flash_data sdp_nor_data = {
+   .width  = 2,
+   .set_vpp= NULL,
+};
+
+static struct resource sdp_nor_resource = {
+   .flags  = IORESOURCE_MEM,
+};
+
+static struct platform_device sdp_nor_device = {
+   .name   = "physmap-flash",
+   .id = 0,
+   .dev= {
+   .platform_data = &sdp_nor_data,
+   },
+   .num_resources  = 1,
+   .resource   = &sdp_nor_resource,
+};
+
+static void
+__init board_nor_init(struct flash_partitions sdp_nor_parts, u8 cs)
+{
+   int err;
+
+   sdp_nor_data.parts  = sdp_nor_parts.parts;
+   sdp_nor_data.nr_parts   = sdp_nor_parts.nr_parts;
+
+   /* Configure start address and size of NOR device */
+   if (omap_rev() >= OMAP3430_REV_ES1_0) {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV2 - 1,
+   (unsigned long *)&sdp_nor_resource.start);
+   sdp_nor_resource.end = sdp_nor_resource.start
+   + FLASH_SIZE_SDPV2 - 1;
+   } else {
+   err = gpmc_cs_request(cs, FLASH_SIZE_SDPV1 - 1,
+   (unsigned long *)&sdp_nor_resource.start);
+   sdp_nor_resource.end = sdp_nor_resource.start
+   + FLASH_SIZE_SDPV1 - 1;
+   }
+   if (err < 0) {
+   printk(KERN_ERR "NOR: Can't request GPMC CS\n");
+   return;
+   }
+   if (platform_device_register(&sdp_nor_device) < 0)
+   printk(KERN_ERR "Unable to registe