ARM: omap: add support for GPMC and ELM controllers on OMAP4 and OMAP5 platforms
cover ARM: omap: add support for GPMC and ELM controllers on OMAP4 and OMAP5 platforms
This patch series intends to:
- Add support for GPMC and ELM controllers for OMAP4 and OMAP5 platform devices by moving all generic arch specific code shared between arch/AM33xx, arch/OMAP4 and arch/OMAP5 into arch/omap-common/
- Separate out arch specific header for future scalability
- Remove redundant code
Pekon Gupta (3):
ARM: omap4: add platform specific info for GPMC and ELM controllers
ARM: omap5: add platform specific info for GPMC and ELM controllers
ARM: omap: merge GPMC initialization code for all platform
arch/arm/cpu/armv7/am33xx/Makefile | 1 -
arch/arm/cpu/armv7/omap-common/Makefile | 4 -
.../{am33xx/mem.c => omap-common/mem-common.c} | 39 ++++++
arch/arm/cpu/armv7/omap3/Makefile | 1 -
arch/arm/cpu/armv7/omap3/mem.c | 139 ---------------------
arch/arm/include/asm/arch-omap4/cpu.h | 5 +-
arch/arm/include/asm/arch-omap4/hardware.h | 26 ++++
arch/arm/include/asm/arch-omap4/mem.h | 62 +++++++++
arch/arm/include/asm/arch-omap4/omap.h | 3 -
arch/arm/include/asm/arch-omap5/cpu.h | 5 +-
arch/arm/include/asm/arch-omap5/hardware.h | 26 ++++
arch/arm/include/asm/arch-omap5/mem.h | 62 +++++++++
arch/arm/include/asm/arch-omap5/omap.h | 3 -
13 files changed, 219 insertions(+), 157 deletions(-)
rename arch/arm/cpu/armv7/{am33xx/mem.c => omap-common/mem-common.c} (68%)
delete mode 100644 arch/arm/cpu/armv7/omap3/mem.c
create mode 100644 arch/arm/include/asm/arch-omap4/hardware.h
create mode 100644 arch/arm/include/asm/arch-omap4/mem.h
create mode 100644 arch/arm/include/asm/arch-omap5/hardware.h
create mode 100644 arch/arm/include/asm/arch-omap5/mem.hSignature · 1 line
1.8.5.1.163.gd7aced9
PATCH 1/3 ARM: omap4: add platform specific info for GPMC and ELM controllers
This patch moves platform specific information for GPMC and ELM controller into separate header files, so that any derivative devices do not mess other header files.
Platform specific information added into arch-xx/../hardware.h
- CPU related platform specific details like base-address of GPMC and ELM
Platform specific information added into arch-xx/../mem.h
- Generic configs for GPMC and ELM initialization.
- Hardware parameters or constrains specific to GPMC and ELM IP like; number of max number of chip-selects available
--- arch/arm/include/asm/arch-omap4/cpu.h | 5 +-- arch/arm/include/asm/arch-omap4/hardware.h | 26 +++++++++++++ arch/arm/include/asm/arch-omap4/mem.h | 62 ++++++++++++++++++++++++++++++ arch/arm/include/asm/arch-omap4/omap.h | 3 -- 4 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 arch/arm/include/asm/arch-omap4/hardware.h create mode 100644 arch/arm/include/asm/arch-omap4/mem.h
arch/arm/include/asm/arch-omap4/cpu.h +2 -3
@@ -12,6 +12,8 @@#include <asm/types.h> #endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */ +#include <asm/arch/hardware.h> +#ifndef __KERNEL_STRICT_NAMES#ifndef __ASSEMBLY__ struct gptimer {
@@ -57,9 +59,6 @@ struct watchdog {#define TCLR_AR (0x1 << 1)#define TCLR_PRE (0x1 << 5) -/* GPMC BASE */ -#define GPMC_BASE (OMAP44XX_GPMC_BASE) -/* I2C base */ #define I2C_BASE1 (OMAP44XX_L4_PER_BASE + 0x70000)#define I2C_BASE2 (OMAP44XX_L4_PER_BASE + 0x72000)
arch/arm/include/asm/arch-omap4/hardware.h new file +26 -0
@@ -0,0 +1,26 @@ +/* +* hardware.h +* +* hardware specific header +* +* Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/ +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef __OMAP_HARDWARE_H +#define __OMAP_HARDWARE_H + +#include <asm/arch/omap.h> + +/* +* Common hardware definitions +*/ + +/* BCH Error Location Module */ +#define ELM_BASE 0x48078000 + +/* GPMC Base address */ +#define GPMC_BASE 0x50000000 + +#endif
arch/arm/include/asm/arch-omap4/mem.h new file +62 -0
62 lines not on this page · raw message
arch/arm/include/asm/arch-omap4/omap.h +0 -3
@@ -60,9 +60,6 @@/* Watchdog Timer2 - MPU watchdog */ #define WDT2_BASE (OMAP44XX_L4_WKUP_BASE + 0x14000) -/* GPMC */ -#define OMAP44XX_GPMC_BASE 0x50000000 -/* * Hardware Register Details */
Signature · 1 line
1.8.5.1.163.gd7aced9
PATCH 1/3 ARM: omap4: add platform specific info for GPMC and ELM controllers
Quoted 7 lines · pekon gupta
This patch moves platform specific information for GPMC and ELM controller into separate header files, so that any derivative devices do not mess other header files.
Platform specific information added into
arch-xx/../hardware.h
- CPU related platform specific details like base-address of GPMC and ELM
Quoted 6 lines
Platform specific information added into
arch-xx/../mem.h
- Generic configs for GPMC and ELM initialization.
- Hardware parameters or constrains specific to GPMC and ELM IP like; number of max number of chip-selects availableSigned-off-by Pekon Gupta <[email protected]>
Applied to u-boot-ti/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140523/6f8511cd/attachment.pgp>
PATCH 2/3 ARM: omap5: add platform specific info for GPMC and ELM controllers
In reply to Pekon GuptaThis patch moves platform specific information for GPMC and ELM controller into separate header files, so that any derivative devices do not mess other header files.
Platform specific information added into arch-xx/../hardware.h
- CPU related platform specific details like base-address of GPMC and ELM
Platform specific information added into arch-xx/../mem.h
- Generic configs for GPMC and ELM initialization.
- Hardware parameters or constrains specific to GPMC and ELM IP like; number of max number of chip-selects available
--- arch/arm/include/asm/arch-omap5/cpu.h | 5 +-- arch/arm/include/asm/arch-omap5/hardware.h | 26 +++++++++++++ arch/arm/include/asm/arch-omap5/mem.h | 62 ++++++++++++++++++++++++++++++ arch/arm/include/asm/arch-omap5/omap.h | 3 -- 4 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 arch/arm/include/asm/arch-omap5/hardware.h create mode 100644 arch/arm/include/asm/arch-omap5/mem.h
arch/arm/include/asm/arch-omap5/cpu.h +2 -3
@@ -14,6 +14,8 @@#include <asm/types.h> #endif /* !(__KERNEL_STRICT_NAMES || __ASSEMBLY__) */ +#include <asm/arch/hardware.h> +#ifndef __KERNEL_STRICT_NAMES#ifndef __ASSEMBLY__ struct gptimer {
@@ -63,9 +65,6 @@ struct watchdog {#define TCLR_AR (0x1 << 1)#define TCLR_PRE (0x1 << 5) -/* GPMC BASE */ -#define GPMC_BASE (OMAP54XX_GPMC_BASE) -/* I2C base */ #define I2C_BASE1 (OMAP54XX_L4_PER_BASE + 0x70000)#define I2C_BASE2 (OMAP54XX_L4_PER_BASE + 0x72000)
arch/arm/include/asm/arch-omap5/hardware.h new file +26 -0
@@ -0,0 +1,26 @@ +/* +* hardware.h +* +* hardware specific header +* +* Copyright (C) 2013, Texas Instruments, Incorporated - http://www.ti.com/ +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef __OMAP_HARDWARE_H +#define __OMAP_HARDWARE_H + +#include <asm/arch/omap.h> + +/* +* Common hardware definitions +*/ + +/* BCH Error Location Module */ +#define ELM_BASE 0x48078000 + +/* GPMC Base address */ +#define GPMC_BASE 0x50000000 + +#endif
arch/arm/include/asm/arch-omap5/mem.h new file +62 -0
62 lines not on this page · raw message
arch/arm/include/asm/arch-omap5/omap.h +0 -3
@@ -59,9 +59,6 @@/* Watchdog Timer2 - MPU watchdog */ #define WDT2_BASE (OMAP54XX_L4_WKUP_BASE + 0x14000) -/* GPMC */ -#define OMAP54XX_GPMC_BASE 0x50000000 -/* QSPI */ #define QSPI_BASE 0x4B300000
Signature · 1 line
1.8.5.1.163.gd7aced9
PATCH 2/3 ARM: omap5: add platform specific info for GPMC and ELM controllers
Quoted 7 lines · pekon gupta
This patch moves platform specific information for GPMC and ELM controller into separate header files, so that any derivative devices do not mess other header files.
Platform specific information added into
arch-xx/../hardware.h
- CPU related platform specific details like base-address of GPMC and ELM
Quoted 6 lines
Platform specific information added into
arch-xx/../mem.h
- Generic configs for GPMC and ELM initialization.
- Hardware parameters or constrains specific to GPMC and ELM IP like; number of max number of chip-selects availableSigned-off-by Pekon Gupta <[email protected]>
Applied to u-boot-ti/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140523/91534662/attachment.pgp>
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
In reply to Pekon GuptaGPMC controller on TI's OMAP SoC is general purpose controller to interface with different types of external devices like;
- parallel NOR flash
- parallel NAND flash
- OneNand flash
- SDR RAM
- Ethernet Devices like LAN9220
Though GPMC configurations may be different for each platform depending on clock-frequency and external device interfacing with controller. But initialization sequence remains common across all platfoms.
Thus this patch merges gpmc_init() scattered in different arch-xx/mem.c files into single omap-common/mem-common.c
However, actual platforms specific register config values are still sourced from corresponding platform specific headers like;
AM33xx: arch/arm/include/asm/arch-am33xx/mem.h
OMAP3: arch/arm/include/asm/arch-omap3/mem.h OMAP4: arch/arm/include/asm/arch-omap4/mem.h OMAP4: arch/arm/include/asm/arch-omap5/mem.h
Also, CONFIG_xx passed by board-profile decide config for which set of macros need to be used for initialization
CONFIG_NAND: initialize GPMC for NAND device
CONFIG_NOR: initialize GPMC for NOR device
CONFIG_ONENAND: initialize GPMC for ONENAND device
---
arch/arm/cpu/armv7/am33xx/Makefile | 1 -
arch/arm/cpu/armv7/omap-common/Makefile | 4 -
.../{am33xx/mem.c => omap-common/mem-common.c} | 39 ++++++
arch/arm/cpu/armv7/omap3/Makefile | 1 -
arch/arm/cpu/armv7/omap3/mem.c | 139 ---------------------
5 files changed, 39 insertions(+), 145 deletions(-)
rename arch/arm/cpu/armv7/{am33xx/mem.c => omap-common/mem-common.c} (68%)
delete mode 100644 arch/arm/cpu/armv7/omap3/mem.carch/arm/cpu/armv7/am33xx/Makefile +0 -1
@@ -14,7 +14,6 @@ endif obj-$(CONFIG_TI816X) += clock_ti816x.o obj-y += sys_info.o -obj-y += mem.o obj-y += ddr.o obj-y += emif4.o obj-y += board.o
arch/arm/cpu/armv7/omap-common/Makefile +0 -4
@@ -27,8 +27,4 @@ obj-y += boot-common.o obj-y += lowlevel_init.o endif -ifndef CONFIG_SPL_BUILD -ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),) obj-y += mem-common.o -endif -endif
arch/arm/cpu/armv7/omap-common/mem-common.c renamed from arch/arm/cpu/armv7/am33xx/mem.c +39 -0
@@ -19,9 +19,36 @@#include <asm/arch/mem.h> #include <asm/arch/sys_proto.h> #include <command.h> +#include <linux/mtd/omap_gpmc.h> struct gpmc *gpmc_cfg; +#if defined(CONFIG_OMAP34XX ) +/******************************************************** +* mem_ok() - test used to see if timings are correct +* for a part. Helps in guessing which part +* we are currently using. +*******************************************************/ +u32 mem_ok (u32 cs) +{ +u32 val1, val2, addr; +u32 pattern =0x12345678 ; + + addr =OMAP34XX_SDRC_CS0 +get_sdr_cs_offset (cs); + +writel (0x0 , addr +0x400 );/* clear pos A */ +writel (pattern, addr);/* pattern to pos B */ +writel (0x0 , addr +4 );/* remove pattern off the bus */ + val1 =readl (addr +0x400 );/* get pos A value */ + val2 =readl (addr);/* get val2 */ +writel (0x0 , addr +0x400 );/* clear pos A */ + +if ((val1 !=0 ) || (val2 != pattern))/* see if pos A val changed */ +return 0 ; +else +return 1 ; +} +#endif void enable_gpmc_cs_config (const u32 *gpmc_config,struct gpmc_cs *cs,u32 base,u32 size)
@@ -74,6 +101,17 @@ void gpmc_init(void) };u32 size =GPMC_SIZE_256M ;u32 base =CONFIG_SYS_NAND_BASE ; +#elif defined(CONFIG_CMD_ONENAND) +const u32 gpmc_regs[GPMC_MAX_REG ] = {ONENAND_GPMC_CONFIG1 , +ONENAND_GPMC_CONFIG2 , +ONENAND_GPMC_CONFIG3 , +ONENAND_GPMC_CONFIG4 , +ONENAND_GPMC_CONFIG5 , +ONENAND_GPMC_CONFIG6 , +0 + }; +u32 base =PISMO1_ONEN_BASE ; +u32 size =PISMO1_ONEN_SIZE ;#else const u32 gpmc_regs[GPMC_MAX_REG ] = {0 ,0 ,0 ,0 ,0 ,0 ,0 };u32 size =0 ;
@@ -83,6 +121,7 @@ void gpmc_init(void)writel (0x00000008 , &gpmc_cfg->sysconfig);writel (0x00000000 , &gpmc_cfg->irqstatus);writel (0x00000000 , &gpmc_cfg->irqenable); +writel (0x00000000 , &gpmc_cfg->timeout_control);#ifdef CONFIG_NOR writel (0x00000200 , &gpmc_cfg->config);#else
arch/arm/cpu/armv7/omap3/Makefile +0 -1
@@ -9,7 +9,6 @@ obj-y := lowlevel_init.o obj-y += board.o obj-y += clock.o -obj-y += mem.o obj-y += sys_info.o ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_OMAP3_ID_NAND) += spl_id_nand.o
arch/arm/cpu/armv7/omap3/mem.c deleted +0 -0
Signature · 1 line
1.8.5.1.163.gd7aced9
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
Quoted 22 lines · pekon gupta
GPMC controller on TI's OMAP SoC is general purpose controller to interface with different types of external devices like;
- parallel NOR flash
- parallel NAND flash
- OneNand flash
- SDR RAM
- Ethernet Devices like LAN9220Though GPMC configurations may be different for each platform depending on clock-frequency and external device interfacing with controller. But initialization sequence remains common across all platfoms.
Thus this patch merges
gpmc_init()scattered in differentarch-xx/mem.cfiles into singleomap-common/mem-common.cHowever, actual platforms specific register config values are still sourced from corresponding platform specific headers like;
AM33xx:arch/arm/include/asm/arch-am33xx/mem.hOMAP3: arch/arm/include/asm/arch-omap3/mem.h OMAP4: arch/arm/include/asm/arch-omap4/mem.h OMAP4: arch/arm/include/asm/arch-omap5/mem.h
Quoted 7 lines
Also,
CONFIG_xxpassed by board-profile decide config for which set of macros need to be used for initialization
CONFIG_NAND: initialize GPMC for NAND device
CONFIG_NOR: initialize GPMC for NOR device
CONFIG_ONENAND: initialize GPMC for ONENAND deviceSigned-off-by Pekon Gupta <[email protected]>
After adding GPMC_SIZE_256M to omap3/mem.h, applied to u-boot-ti/master, thanks!
And note that git detect renames got a bit too agressive here so I had to apply it kinda by hand, but I think I did everything right.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140523/c80fd16f/attachment.pgp>
Gupta
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
Quoted 31 lines
From: Tom Rini [mailto:tom.rini at gmail.com] On Behalf Of Rini, Tom
Quoted 28 lines · pekon gupta
GPMC controller on TI's OMAP SoC is general purpose controller to interface with different types of external devices like;
- parallel NOR flash
- parallel NAND flash
- OneNand flash
- SDR RAM
- Ethernet Devices like LAN9220Though GPMC configurations may be different for each platform depending on clock-frequency and external device interfacing with controller. But initialization sequence remains common across all platfoms.
Thus this patch merges
gpmc_init()scattered in differentarch-xx/mem.cfiles into singleomap-common/mem-common.cHowever, actual platforms specific register config values are still sourced from corresponding platform specific headers like;
AM33xx:arch/arm/include/asm/arch-am33xx/mem.hOMAP3: arch/arm/include/asm/arch-omap3/mem.h OMAP4: arch/arm/include/asm/arch-omap4/mem.h OMAP4: arch/arm/include/asm/arch-omap5/mem.hAlso,
CONFIG_xxpassed by board-profile decide config for which set of macros need to be used for initialization
CONFIG_NAND: initialize GPMC for NAND device
CONFIG_NOR: initialize GPMC for NOR device
CONFIG_ONENAND: initialize GPMC for ONENAND device
Quoted 8 lines
Quoted 1 line
Signed-off-by Pekon Gupta <[email protected]>After adding
GPMC_SIZE_256Mtoomap3/mem.h, applied to u-boot-ti/master, thanks!And note that git detect renames got a bit too agressive here so I had to apply it kinda by hand, but I think I did everything right.
Thanks much .. I'll review the changes.
with regards, pekon
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
Hi,
I'm actually seeing some breakage from this commit (a0a37183bd75e74608bc78c8d0e2a34454f95a91). When booting the DuoVero board (no NAND/NOR/ONENAND but a network card on GPMC), it hangs as it enters the kernel.
These lines in gpmc_init() in arch/arm/cpu/armv7/omap-common/mem-common.c
...
writel(0, &gpmc_cfg->cs[0].config7);
sdelay(1000);
/* enable chip-select specific configurations */
enable_gpmc_cs_config(gpmc_regs, &gpmc_cfg->cs[0], base, size);...
seem to be the source of the issue. Even though we have nothing connected on CS0, the last line of enable_gpmc_cs_config() enables the interface despite it being disabled right before in writel(0, &gpmc_cfg->cs[0].config7);
--Ash
Quoted 46 lines · Pekon
Quoted 31 lines
From: Tom Rini [mailto:tom.rini at gmail.com] On Behalf Of Rini, Tom
Quoted 28 lines · pekon gupta
GPMC controller on TI's OMAP SoC is general purpose controller to interface with different types of external devices like;
- parallel NOR flash
- parallel NAND flash
- OneNand flash
- SDR RAM
- Ethernet Devices like LAN9220Though GPMC configurations may be different for each platform depending on clock-frequency and external device interfacing with controller. But initialization sequence remains common across all platfoms.
Thus this patch merges
gpmc_init()scattered in differentarch-xx/mem.cfiles into singleomap-common/mem-common.cHowever, actual platforms specific register config values are still sourced from corresponding platform specific headers like;
AM33xx:arch/arm/include/asm/arch-am33xx/mem.hOMAP3: arch/arm/include/asm/arch-omap3/mem.h OMAP4: arch/arm/include/asm/arch-omap4/mem.h OMAP4: arch/arm/include/asm/arch-omap5/mem.hAlso,
CONFIG_xxpassed by board-profile decide config for which set of macros need to be used for initialization
CONFIG_NAND: initialize GPMC for NAND device
CONFIG_NOR: initialize GPMC for NOR device
CONFIG_ONENAND: initialize GPMC for ONENAND deviceQuoted 8 lines
Quoted 1 line
Signed-off-by Pekon Gupta <[email protected]>After adding
GPMC_SIZE_256Mtoomap3/mem.h, applied to u-boot-ti/master, thanks!And note that git detect renames got a bit too agressive here so I had to apply it kinda by hand, but I think I did everything right.
Thanks much .. I'll review the changes.
with regards, pekon
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
PATCH 1/1 omap: Don't enable GPMC CS0 with nothing attached
If CONFIG_(NAND|NOR|ONENAND) is not defined, no configuration is set for GPMC on chip select #0---size is 0. In this case, the GPMC configuration should be reset but not enabled. Enabling causes the Gumstix DuoVero board to hang when entering Linux.
--- arch/arm/cpu/armv7/omap-common/mem-common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/arm/cpu/armv7/omap-common/mem-common.c +2 -1
@@ -133,5 +133,6 @@ void gpmc_init(void)writel (0 , &gpmc_cfg->cs[0 ].config7);sdelay (1000 );/* enable chip-select specific configurations */ -enable_gpmc_cs_config (gpmc_regs, &gpmc_cfg->cs[0 ], base, size); +if (size !=0 ) +enable_gpmc_cs_config (gpmc_regs, &gpmc_cfg->cs[0 ], base, size); }
Signature · 1 line
1.8.3.2
[U-Boot] omap: Don't enable GPMC CS0 with nothing attached
Quoted 6 lines · Ash Charles
If
CONFIG_(NAND|NOR|ONENAND)is not defined, no configuration is set for GPMC on chip select #0---size is 0. In this case, the GPMC configuration should be reset but not enabled. Enabling causes the Gumstix DuoVero board to hang when entering Linux.Signed-off-by Ash Charles <[email protected]>
After changing the test to be on 'base' not 'size' (as GPMC_SIZE_256M is 0x0), applied to u-boot-ti/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140619/0ec9448b/attachment.pgp>
[U-Boot] omap: Don't enable GPMC CS0 with nothing attached
Thanks for the correction Tom.
--Ash
Quoted 14 lines · Tom Rini
Quoted 6 lines · Ash Charles
If
CONFIG_(NAND|NOR|ONENAND)is not defined, no configuration is set for GPMC on chip select #0---size is 0. In this case, the GPMC configuration should be reset but not enabled. Enabling causes the Gumstix DuoVero board to hang when entering Linux.Signed-off-by Ash Charles <[email protected]>After changing the test to be on 'base' not 'size' (as
GPMC_SIZE_256Mis0x0), applied to u-boot-ti/master, thanks!--
Tom
Gupta
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
In reply to Ash CharlesHi Ash,
From: [email protected]
Quoted 13 lines
Hi,
I'm actually seeing some breakage from this commit (
a0a37183bd75e74608bc78c8d0e2a34454f95a91). When booting the DuoVero board (no NAND/NOR/ONENAND but a network card on GPMC), it hangs as it enters the kernel.These lines in
gpmc_init()inarch/arm/cpu/armv7/omap-common/mem-common.c
...writel(0, &gpmc_cfg->cs[0].config7); sdelay(1000); /* enable chip-select specific configurations */ enable_gpmc_cs_config(gpmc_regs, &gpmc_cfg->cs[0], base, size);
Quoted 6 lines
...
seem to be the source of the issue. Even though we have nothing connected on CS0, the last line ofenable_gpmc_cs_config()enables the interface despite it being disabled right before inwritel(0, &gpmc_cfg->cs[0].config7);
Sorry seeing this bit late. Were you able to root cause the issue ? All Ethernet related GPMC configurations are defined by following macros
File: $U-BOOT/arch/arm/include/asm/arch-omap3/mem.h
#define NET_GPMC_CONFIG1 0x00001000
#define NET_GPMC_CONFIG2 0x001e1e01
#define NET_GPMC_CONFIG3 0x00080300
#define NET_GPMC_CONFIG4 0x1c091c09
#define NET_GPMC_CONFIG5 0x04181f1f
#define NET_GPMC_CONFIG6 0x00000FCF
#define NET_GPMC_CONFIG7 0x00000f6c
OR
/* GPMC CS configuration for an SMSC LAN9221 ethernet controller */
#define NET_LAN9221_GPMC_CONFIG1 0x00001000 #define NET_LAN9221_GPMC_CONFIG2 0x00060700 #define NET_LAN9221_GPMC_CONFIG3 0x00020201 #define NET_LAN9221_GPMC_CONFIG4 0x06000700 #define NET_LAN9221_GPMC_CONFIG5 0x0006090A #define NET_LAN9221_GPMC_CONFIG6 0x87030000 #define NET_LAN9221_GPMC_CONFIG7 0x00000f6c
I havn't touched these values, except for moving some of them from one header-file to other.
Also, the change in u-boot, should not affect the kernel. That means kernel's GPMC driver was depending on some pre-configured value, which is wrong.
There were couple of fixes for SMSC controller pushed in 3.16 kernel, Are following in your tree ?
fb677ef tony at atomide.com ARM: OMAP2+: Fix GPMC remap for devices using an offset efe8072 tony at atomide.com ARM: OMAP2+: Fix oops for GPMC free
with regards, pekon
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
Hi Pekon,
Quoted 1 line · Pekon
Sorry seeing this bit late. Were you able to root cause the issue ?
Did you see http://patchwork.ozlabs.org/patch/356984/ ? This resolves the issue for me but I'd welcome any feedback you have on this fix.
...
Quoted 7 lines
Also, the change in u-boot, should not affect the kernel. That means kernel's GPMC driver was depending on some pre-configured value, which is wrong.
There were couple of fixes for SMSC controller pushed in 3.16 kernel, Are following in your tree ?fb677ef tony at atomide.com ARM: OMAP2+: Fix GPMC remap for devices using an offset efe8072 tony at atomide.com ARM: OMAP2+: Fix oops for GPMC free
Okay---I'd seen the breakage on both the standard 3.5 kernel for my board (overo) as well as on the then-mainline version 3.15+ which is why I dived into u-boot to find a fix. I was likely missing these two commits though!
Thanks,
Ash
Gupta
PATCH 3/3 ARM: omap: merge GPMC initialization code for all platform
From: [email protected]
Quoted 5 lines
Quoted 2 lines · Pekon
Sorry seeing this bit late. Were you able to root cause the issue ?
Did you see http://patchwork.ozlabs.org/patch/356984/ ? This resolves the issue for me but I'd welcome any feedback you have on this fix.
Thanks for the fix.
Though I don't know why GPMC initialization without any device connected should cause a hang, that too on kernel side.
with regards, pekon
Gupta
cover ARM: omap: add support for GPMC and ELM controllers on OMAP4 and OMAP5 platforms
In reply to Pekon GuptaQuoted 35 lines
From: Gupta, Pekon
This patch series intends to:
- Add support for GPMC and ELM controllers for OMAP4 and OMAP5 platform devices by moving all generic arch specific code shared betweenarch/AM33xx,arch/OMAP4andarch/OMAP5intoarch/omap-common/
- Separate out arch specific header for future scalability
- Remove redundant codePekon Gupta (3):
ARM: omap4: add platform specific info for GPMC and ELM controllers
ARM: omap5: add platform specific info for GPMC and ELM controllers
ARM: omap: merge GPMC initialization code for all platformarch/arm/cpu/armv7/am33xx/Makefile | 1 - arch/arm/cpu/armv7/omap-common/Makefile | 4 - .../{am33xx/mem.c => omap-common/mem-common.c} | 39 ++++++ arch/arm/cpu/armv7/omap3/Makefile | 1 - arch/arm/cpu/armv7/omap3/mem.c | 139 --------------------- arch/arm/include/asm/arch-omap4/cpu.h | 5 +- arch/arm/include/asm/arch-omap4/hardware.h | 26 ++++ arch/arm/include/asm/arch-omap4/mem.h | 62 +++++++++ arch/arm/include/asm/arch-omap4/omap.h | 3 - arch/arm/include/asm/arch-omap5/cpu.h | 5 +- arch/arm/include/asm/arch-omap5/hardware.h | 26 ++++ arch/arm/include/asm/arch-omap5/mem.h | 62 +++++++++ arch/arm/include/asm/arch-omap5/omap.h | 3 - 13 files changed, 219 insertions(+), 157 deletions(-)rename
arch/arm/cpu/armv7/{am33xx/mem.c=>omap-common/mem-common.c} (68%) delete mode 100644arch/arm/cpu/armv7/omap3/mem.c
create mode 100644arch/arm/include/asm/arch-omap4/hardware.hcreate mode 100644arch/arm/include/asm/arch-omap4/mem.hcreate mode 100644arch/arm/include/asm/arch-omap5/hardware.hcreate mode 100644arch/arm/include/asm/arch-omap5/mem.h
Quoted 2 lines
--
1.8.5.1.163.gd7aced9
Missed adding
with regards, pekon