Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
Tony, On Tue, Dec 22, 2009 at 2:21 PM, Vimal Singh wrote: > On Tue, Dec 15, 2009 at 1:01 AM, Tony Lindgren wrote: >> * Vimal Singh [091214 01:58]: >>> On Tue, Dec 8, 2009 at 12:06 AM, Tony Lindgren wrote: >>> > * Vimal Singh [091206 22:39]: >>> >> On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: >>> >> > Hi, >>> >> > >>> >> > * Vimal Singh [091203 06:09]: >>> >> >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 >>> >> >> From: Vimal Singh >>> >> >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 >>> >> >> ++ >>> >> >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ >>> >> >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + >>> >> >> 3 files changed, 270 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..fbbcd0e >>> >> >> --- /dev/null >>> >> >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c >>> >> > >>> >> > >>> >> > >>> >> >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) >>> >> >> +{ >>> >> >> + sdp_nand_data.cs = cs; >>> >> >> + sdp_nand_data.parts = sdp_nand_parts.parts; >>> >> >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; >>> >> >> + >>> >> >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + >>> >> >> + GPMC_CS0_BASE + >>> >> >> + cs * >>> >> >> GPMC_CS_SIZE); >>> >> >> + sdp_nand_data.gpmc_baseaddr = (void *) >>> >> >> (OMAP34XX_GPMC_VIRT); >>> >> >> + >>> >> >> + gpmc_nand_init(&sdp_nand_data); >>> >> >> +} >>> >> > >>> >> > This does not look right. You're supposed to use gpmc_cs_request() >>> >> > for allocating the GPMC area based on the chip select and size. >>> >> >>> >> I guess you are getting confuse a bit here: >>> >> gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also >>> >> base address for GPMC). >>> >> gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for >>> >> specified cs number. >>> >> >>> >> These are needed by nand driver. >>> > >>> > Right.. Looks like drivers/mtd/nand/omap2.c needs to be fixed so we >>> > can get rid of this. >>> > >>> > And looks like we already are doing it all over the place anyways :( >>> > >>> >> While 'gpmc_cs_request' gives physical address to the device resource. >>> >> And this is done in 'nand/omap2.c'. This is done in driver itself so >>> >> that we don't allocate a resource even before driver gets loaded. >>> > >>> > Yuk.. The nand driver should be generic. >>> > >>> >> >> --- a/arch/arm/plat-omap/include/plat/gpmc.h >>> >> >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h >>> >> >> @@ -27,6 +27,8 @@ >>> >> >> >>> >> >> #define GPMC_CONFIG 0x50 >>> >> >> #define GPMC_STATUS 0x54 >>> >> >> +#define GPMC_CS0_BASE 0x60 >>> >> >> +#define GPMC_CS_SIZE 0x30 >>> >> > >>> >> > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to >>> >> > your board, not for the GPMC hardware. >>> >> >>> >> These are offsets and very much specific to GPMC hardware. >>> >> >>> >> GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 >>> >> register. >>> >> GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. >>> >> size for cs config registers. >>> > >>> > Let's keep it local until drivers/m
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
On Tue, Dec 15, 2009 at 1:01 AM, Tony Lindgren wrote: > * Vimal Singh [091214 01:58]: >> On Tue, Dec 8, 2009 at 12:06 AM, Tony Lindgren wrote: >> > * Vimal Singh [091206 22:39]: >> >> On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: >> >> > Hi, >> >> > >> >> > * Vimal Singh [091203 06:09]: >> >> >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 >> >> >> From: Vimal Singh >> >> >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 >> >> >> ++ >> >> >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ >> >> >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + >> >> >> 3 files changed, 270 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..fbbcd0e >> >> >> --- /dev/null >> >> >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c >> >> > >> >> > >> >> > >> >> >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) >> >> >> +{ >> >> >> + sdp_nand_data.cs = cs; >> >> >> + sdp_nand_data.parts = sdp_nand_parts.parts; >> >> >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; >> >> >> + >> >> >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + >> >> >> + GPMC_CS0_BASE + >> >> >> + cs * >> >> >> GPMC_CS_SIZE); >> >> >> + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); >> >> >> + >> >> >> + gpmc_nand_init(&sdp_nand_data); >> >> >> +} >> >> > >> >> > This does not look right. You're supposed to use gpmc_cs_request() >> >> > for allocating the GPMC area based on the chip select and size. >> >> >> >> I guess you are getting confuse a bit here: >> >> gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also >> >> base address for GPMC). >> >> gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for >> >> specified cs number. >> >> >> >> These are needed by nand driver. >> > >> > Right.. Looks like drivers/mtd/nand/omap2.c needs to be fixed so we >> > can get rid of this. >> > >> > And looks like we already are doing it all over the place anyways :( >> > >> >> While 'gpmc_cs_request' gives physical address to the device resource. >> >> And this is done in 'nand/omap2.c'. This is done in driver itself so >> >> that we don't allocate a resource even before driver gets loaded. >> > >> > Yuk.. The nand driver should be generic. >> > >> >> >> --- a/arch/arm/plat-omap/include/plat/gpmc.h >> >> >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h >> >> >> @@ -27,6 +27,8 @@ >> >> >> >> >> >> #define GPMC_CONFIG 0x50 >> >> >> #define GPMC_STATUS 0x54 >> >> >> +#define GPMC_CS0_BASE 0x60 >> >> >> +#define GPMC_CS_SIZE 0x30 >> >> > >> >> > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to >> >> > your board, not for the GPMC hardware. >> >> >> >> These are offsets and very much specific to GPMC hardware. >> >> >> >> GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 register. >> >> GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. >> >> size for cs config registers. >> > >> > Let's keep it local until drivers/mtd/nand/omap2.c is fixed. >> > >> > Care to take a look at using some generic nand driver instead >> > if we merge this for now? >> >> To me it seems ok, for now, to get this merged and later
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
* Vimal Singh [091214 01:58]: > On Tue, Dec 8, 2009 at 12:06 AM, Tony Lindgren wrote: > > * Vimal Singh [091206 22:39]: > >> On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: > >> > Hi, > >> > > >> > * Vimal Singh [091203 06:09]: > >> >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 > >> >> From: Vimal Singh > >> >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 > >> >> ++ > >> >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ > >> >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + > >> >> 3 files changed, 270 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..fbbcd0e > >> >> --- /dev/null > >> >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c > >> > > >> > > >> > > >> >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) > >> >> +{ > >> >> + sdp_nand_data.cs = cs; > >> >> + sdp_nand_data.parts = sdp_nand_parts.parts; > >> >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; > >> >> + > >> >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + > >> >> + GPMC_CS0_BASE + > >> >> + cs * > >> >> GPMC_CS_SIZE); > >> >> + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); > >> >> + > >> >> + gpmc_nand_init(&sdp_nand_data); > >> >> +} > >> > > >> > This does not look right. You're supposed to use gpmc_cs_request() > >> > for allocating the GPMC area based on the chip select and size. > >> > >> I guess you are getting confuse a bit here: > >> gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also > >> base address for GPMC). > >> gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for > >> specified cs number. > >> > >> These are needed by nand driver. > > > > Right.. Looks like drivers/mtd/nand/omap2.c needs to be fixed so we > > can get rid of this. > > > > And looks like we already are doing it all over the place anyways :( > > > >> While 'gpmc_cs_request' gives physical address to the device resource. > >> And this is done in 'nand/omap2.c'. This is done in driver itself so > >> that we don't allocate a resource even before driver gets loaded. > > > > Yuk.. The nand driver should be generic. > > > >> >> --- a/arch/arm/plat-omap/include/plat/gpmc.h > >> >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h > >> >> @@ -27,6 +27,8 @@ > >> >> > >> >> #define GPMC_CONFIG 0x50 > >> >> #define GPMC_STATUS 0x54 > >> >> +#define GPMC_CS0_BASE 0x60 > >> >> +#define GPMC_CS_SIZE 0x30 > >> > > >> > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to > >> > your board, not for the GPMC hardware. > >> > >> These are offsets and very much specific to GPMC hardware. > >> > >> GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 register. > >> GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. > >> size for cs config registers. > > > > Let's keep it local until drivers/mtd/nand/omap2.c is fixed. > > > > Care to take a look at using some generic nand driver instead > > if we merge this for now? > > To me it seems ok, for now, to get this merged and later we can work > on cleaning 'nand/omap2.c' driver. OK, sounds good to me. Let's plan on moving to use the gpmc-nand.c as posted on this list. Regards, Tony -- To unsubscr
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
On Tue, Dec 8, 2009 at 12:06 AM, Tony Lindgren wrote: > * Vimal Singh [091206 22:39]: >> On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: >> > Hi, >> > >> > * Vimal Singh [091203 06:09]: >> >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 >> >> From: Vimal Singh >> >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 >> >> ++ >> >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ >> >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + >> >> 3 files changed, 270 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..fbbcd0e >> >> --- /dev/null >> >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c >> > >> > >> > >> >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) >> >> +{ >> >> + sdp_nand_data.cs = cs; >> >> + sdp_nand_data.parts = sdp_nand_parts.parts; >> >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; >> >> + >> >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + >> >> + GPMC_CS0_BASE + >> >> + cs * GPMC_CS_SIZE); >> >> + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); >> >> + >> >> + gpmc_nand_init(&sdp_nand_data); >> >> +} >> > >> > This does not look right. You're supposed to use gpmc_cs_request() >> > for allocating the GPMC area based on the chip select and size. >> >> I guess you are getting confuse a bit here: >> gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also >> base address for GPMC). >> gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for >> specified cs number. >> >> These are needed by nand driver. > > Right.. Looks like drivers/mtd/nand/omap2.c needs to be fixed so we > can get rid of this. > > And looks like we already are doing it all over the place anyways :( > >> While 'gpmc_cs_request' gives physical address to the device resource. >> And this is done in 'nand/omap2.c'. This is done in driver itself so >> that we don't allocate a resource even before driver gets loaded. > > Yuk.. The nand driver should be generic. > >> >> --- a/arch/arm/plat-omap/include/plat/gpmc.h >> >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h >> >> @@ -27,6 +27,8 @@ >> >> >> >> #define GPMC_CONFIG 0x50 >> >> #define GPMC_STATUS 0x54 >> >> +#define GPMC_CS0_BASE 0x60 >> >> +#define GPMC_CS_SIZE 0x30 >> > >> > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to >> > your board, not for the GPMC hardware. >> >> These are offsets and very much specific to GPMC hardware. >> >> GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 register. >> GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. >> size for cs config registers. > > Let's keep it local until drivers/mtd/nand/omap2.c is fixed. > > Care to take a look at using some generic nand driver instead > if we merge this for now? To me it seems ok, for now, to get this merged and later we can work on cleaning 'nand/omap2.c' driver. -- Regards, Vimal Singh -- 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
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
* Vimal Singh [091206 22:39]: > On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: > > Hi, > > > > * Vimal Singh [091203 06:09]: > >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 > >> From: Vimal Singh > >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 > >> ++ > >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ > >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + > >> 3 files changed, 270 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..fbbcd0e > >> --- /dev/null > >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c > > > > > > > >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) > >> +{ > >> + sdp_nand_data.cs = cs; > >> + sdp_nand_data.parts = sdp_nand_parts.parts; > >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; > >> + > >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + > >> + GPMC_CS0_BASE + > >> + cs * GPMC_CS_SIZE); > >> + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); > >> + > >> + gpmc_nand_init(&sdp_nand_data); > >> +} > > > > This does not look right. You're supposed to use gpmc_cs_request() > > for allocating the GPMC area based on the chip select and size. > > I guess you are getting confuse a bit here: > gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also > base address for GPMC). > gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for > specified cs number. > > These are needed by nand driver. Right.. Looks like drivers/mtd/nand/omap2.c needs to be fixed so we can get rid of this. And looks like we already are doing it all over the place anyways :( > While 'gpmc_cs_request' gives physical address to the device resource. > And this is done in 'nand/omap2.c'. This is done in driver itself so > that we don't allocate a resource even before driver gets loaded. Yuk.. The nand driver should be generic. > >> --- a/arch/arm/plat-omap/include/plat/gpmc.h > >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h > >> @@ -27,6 +27,8 @@ > >> > >> #define GPMC_CONFIG 0x50 > >> #define GPMC_STATUS 0x54 > >> +#define GPMC_CS0_BASE 0x60 > >> +#define GPMC_CS_SIZE 0x30 > > > > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to > > your board, not for the GPMC hardware. > > These are offsets and very much specific to GPMC hardware. > > GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 register. > GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. > size for cs config registers. Let's keep it local until drivers/mtd/nand/omap2.c is fixed. Care to take a look at using some generic nand driver instead if we merge this for now? Regards, Tony -- 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
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
On Sat, Dec 5, 2009 at 3:47 AM, Tony Lindgren wrote: > Hi, > > * Vimal Singh [091203 06:09]: >> From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 >> From: Vimal Singh >> Date: Thu, 26 Nov 2009 16:10:24 +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 | 246 >> ++ >> arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ >> arch/arm/plat-omap/include/plat/gpmc.h | 2 + >> 3 files changed, 270 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..fbbcd0e >> --- /dev/null >> +++ b/arch/arm/mach-omap2/board-sdp-flash.c > > > >> +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) >> +{ >> + sdp_nand_data.cs = cs; >> + sdp_nand_data.parts = sdp_nand_parts.parts; >> + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; >> + >> + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + >> + GPMC_CS0_BASE + >> + cs * GPMC_CS_SIZE); >> + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); >> + >> + gpmc_nand_init(&sdp_nand_data); >> +} > > This does not look right. You're supposed to use gpmc_cs_request() > for allocating the GPMC area based on the chip select and size. I guess you are getting confuse a bit here: gpmc_baseaddr: is the virtual address for GPMC_REVISION (which is also base address for GPMC). gpmc_cs_baseaddr : This is offset from above to 'GPMC_CONFIG(cs)' for specified cs number. These are needed by nand driver. While 'gpmc_cs_request' gives physical address to the device resource. And this is done in 'nand/omap2.c'. This is done in driver itself so that we don't allocate a resource even before driver gets loaded. > >> --- a/arch/arm/plat-omap/include/plat/gpmc.h >> +++ b/arch/arm/plat-omap/include/plat/gpmc.h >> @@ -27,6 +27,8 @@ >> >> #define GPMC_CONFIG 0x50 >> #define GPMC_STATUS 0x54 >> +#define GPMC_CS0_BASE 0x60 >> +#define GPMC_CS_SIZE 0x30 > > The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to > your board, not for the GPMC hardware. These are offsets and very much specific to GPMC hardware. GPMC_CS0_BASE: is offset from GPMC base to first cs GPMC_CONFIG1 register. GPMC_CS_SIZE : is offset (gap) between next cs config registers, e.i. size for cs config registers. -- Regards, Vimal Singh -- 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
Re: [PATCH 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
Hi, * Vimal Singh [091203 06:09]: > From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 > From: Vimal Singh > Date: Thu, 26 Nov 2009 16:10:24 +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| 246 > ++ > arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ > arch/arm/plat-omap/include/plat/gpmc.h |2 + > 3 files changed, 270 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..fbbcd0e > --- /dev/null > +++ b/arch/arm/mach-omap2/board-sdp-flash.c > +__init board_nand_init(struct flash_partitions sdp_nand_parts, u8 cs) > +{ > + sdp_nand_data.cs= cs; > + sdp_nand_data.parts = sdp_nand_parts.parts; > + sdp_nand_data.nr_parts = sdp_nand_parts.nr_parts; > + > + sdp_nand_data.gpmc_cs_baseaddr = (void *)(OMAP34XX_GPMC_VIRT + > + GPMC_CS0_BASE + > + cs * GPMC_CS_SIZE); > + sdp_nand_data.gpmc_baseaddr = (void *) (OMAP34XX_GPMC_VIRT); > + > + gpmc_nand_init(&sdp_nand_data); > +} This does not look right. You're supposed to use gpmc_cs_request() for allocating the GPMC area based on the chip select and size. > --- a/arch/arm/plat-omap/include/plat/gpmc.h > +++ b/arch/arm/plat-omap/include/plat/gpmc.h > @@ -27,6 +27,8 @@ > > #define GPMC_CONFIG 0x50 > #define GPMC_STATUS 0x54 > +#define GPMC_CS0_BASE0x60 > +#define GPMC_CS_SIZE 0x30 The GPMC_CS0_BASE and GPMC_CS_SIZE seem to be values specic to your board, not for the GPMC hardware. Tony -- 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 1/2]: OMAP: SDP: Introducing 'board-sdp-flash.c' for flash init
>From 13d52884956a26f93826c443e2b8bd78615f74d6 Mon Sep 17 00:00:00 2001 From: Vimal Singh Date: Thu, 26 Nov 2009 16:10:24 +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| 246 ++ arch/arm/mach-omap2/include/mach/board-sdp.h | 22 +++ arch/arm/plat-omap/include/plat/gpmc.h |2 + 3 files changed, 270 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..fbbcd0e --- /dev/null +++ b/arch/arm/mach-omap2/board-sdp-flash.c @@ -0,0 +1,246 @@ +/* + * 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 + +#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 flash_platform_data sdp_nor_data = { + .map_name = "cfi_probe", + .width = 2, +}; + +static struct resource sdp_nor_resource = { + .flags = IORESOURCE_MEM, +}; + +static struct platform_device sdp_nor_device = { + .name = "omapflash", + .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 omap_onenand_platform_data board_onenand_data = { + .dma_c