Commit 00e4ac2b authored by Choraria, Rohit's avatar Choraria, Rohit Committed by Tony Lindgren

OMAP3: FLASH: Move Flash specific device info in aseparate board file

This patch does the following
	moves flash specific code to a new file board-3430sdp-flash.c
	adds support for 3430 ES2 SDP changes for ethernet
	changes the check in gpmc to OMAP34XX as same address is valid.
Signed-off-by: default avatarRohit Choraria <rohitkc@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 8a001d30
...@@ -27,7 +27,8 @@ obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o \ ...@@ -27,7 +27,8 @@ obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o \
board-2430sdp-usb.o board-2430sdp-usb.o
obj-$(CONFIG_MACH_OMAP_2430OSK) += board-2430osk.o obj-$(CONFIG_MACH_OMAP_2430OSK) += board-2430osk.o
obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
board-3430sdp-usb.o board-3430sdp-usb.o \
board-3430sdp-flash.o
obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o \ obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o \
board-apollon-mmc.o \ board-apollon-mmc.o \
board-apollon-keys.o board-apollon-keys.o
......
/*
* linux/arch/arm/mach-omap2/board-3430sdp-flash.c
*
* Copyright (c) 2007 Texas Instruments
*
* Modified from mach-omap2/board-2430sdp-flash.c
* Author: Rohit Choraria <rohitkc@ti.com>
*
* 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/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/onenand_regs.h>
#include <linux/types.h>
#include <linux/io.h>
#include <asm/mach/flash.h>
#include <asm/arch/onenand.h>
#include <asm/arch/board.h>
#include <asm/arch/gpmc.h>
static struct mtd_partition sdp_nor_partitions[] = {
/* bootloader (U-Boot, etc) in first sector */
{
.name = "Bootloader-NOR",
.offset = 0,
.size = SZ_256K,
.mask_flags = MTD_WRITEABLE, /* force read-only */
},
/* bootloader params in the next sector */
{
.name = "Params-NOR",
.offset = MTDPART_OFS_APPEND,
.size = SZ_256K,
.mask_flags = 0,
},
/* kernel */
{
.name = "Kernel-NOR",
.offset = MTDPART_OFS_APPEND,
.size = SZ_2M,
.mask_flags = 0
},
/* file system */
{
.name = "Filesystem-NOR",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
.mask_flags = 0
}
};
static struct flash_platform_data sdp_nor_data = {
.map_name = "cfi_probe",
.width = 2,
.parts = sdp_nor_partitions,
.nr_parts = ARRAY_SIZE(sdp_nor_partitions),
};
static struct resource sdp_nor_resource = {
.start = 0,
.end = 0,
.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 int sdp_onenand_setup(void __iomem *);
static struct mtd_partition sdp_onenand_partitions[] = {
{
.name = "X-Loader-OneNAND",
.offset = 0,
.size = 4 * (64 * 2048),
.mask_flags = MTD_WRITEABLE /* force read-only */
},
{
.name = "U-Boot-OneNAND",
.offset = MTDPART_OFS_APPEND,
.size = 2 * (64 * 2048),
.mask_flags = MTD_WRITEABLE /* force read-only */
},
{
.name = "U-Boot Environment-OneNAND",
.offset = MTDPART_OFS_APPEND,
.size = 1 * (64 * 2048),
},
{
.name = "Kernel-OneNAND",
.offset = MTDPART_OFS_APPEND,
.size = 16 * (64 * 2048),
},
{
.name = "File System-OneNAND",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
},
};
static struct omap_onenand_platform_data sdp_onenand_data = {
.parts = sdp_onenand_partitions,
.nr_parts = ARRAY_SIZE(sdp_onenand_partitions),
.onenand_setup = sdp_onenand_setup,
.dma_channel = -1, /* disable DMA in OMAP OneNAND driver */
};
static struct platform_device sdp_onenand_device = {
.name = "omap2-onenand",
.id = -1,
.dev = {
.platform_data = &sdp_onenand_data,
},
};
/*
* sdp_onenand_setup - The function configures the onenand flash.
* @onenand_base: Onenand base address
*
* @return int: Currently always returning zero.
*/
static int sdp_onenand_setup(void __iomem *onenand_base)
{
/* Onenand setup does nothing at present */
return 0;
}
/**
* sdp3430_flash_init - Identify devices connected to GPMC and register.
*
* @return - void.
*/
void __init sdp3430_flash_init(void)
{
u8 cs = 0;
u8 onenandcs = GPMC_CS_NUM + 1;
/* Configure start address and size of NOR device */
if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0)) {
sdp_nor_resource.start = FLASH_BASE_SDPV2;
sdp_nor_resource.end = FLASH_BASE_SDPV2
+ FLASH_SIZE_SDPV2 - 1;
} else {
sdp_nor_resource.start = FLASH_BASE_SDPV1;
sdp_nor_resource.end = FLASH_BASE_SDPV1
+ FLASH_SIZE_SDPV1 - 1;
}
if (platform_device_register(&sdp_nor_device) < 0)
printk(KERN_ERR "Unable to register NOR device\n");
while (cs < GPMC_CS_NUM) {
u32 ret = 0;
ret = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7);
/*
* xloader/Uboot would have programmed the oneNAND
* base address for us This is a ugly hack. The proper
* way of doing this is to pass the setup of u-boot up
* to kernel using kernel params - something on the
* lines of machineID. Check if oneNAND is configured
*/
if ((ret & 0x3F) == (ONENAND_MAP >> 24))
onenandcs = cs;
cs++;
}
if (onenandcs > GPMC_CS_NUM) {
printk(KERN_INFO "OneNAND: Unable to find configuration "
" in GPMC\n ");
return;
}
if (onenandcs < GPMC_CS_NUM) {
sdp_onenand_data.cs = onenandcs;
if (platform_device_register(&sdp_onenand_device) < 0)
printk(KERN_ERR "Unable to register OneNAND device\n");
}
}
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
...@@ -29,7 +27,6 @@ ...@@ -29,7 +27,6 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/flash.h>
#include <asm/arch/twl4030.h> #include <asm/arch/twl4030.h>
#include <asm/arch/mcspi.h> #include <asm/arch/mcspi.h>
...@@ -44,65 +41,11 @@ ...@@ -44,65 +41,11 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/delay.h> #include <asm/delay.h>
#define SDP3430_FLASH_CS 0
#define SDP3430_SMC91X_CS 3 #define SDP3430_SMC91X_CS 3
#define ENABLE_VAUX3_DEDICATED 0x03 #define ENABLE_VAUX3_DEDICATED 0x03
#define ENABLE_VAUX3_DEV_GRP 0x20 #define ENABLE_VAUX3_DEV_GRP 0x20
static struct mtd_partition sdp3430_partitions[] = {
/* bootloader (U-Boot, etc) in first sector */
{
.name = "bootloader",
.offset = 0,
.size = SZ_256K,
.mask_flags = MTD_WRITEABLE, /* force read-only */
},
/* bootloader params in the next sector */
{
.name = "params",
.offset = MTDPART_OFS_APPEND,
.size = SZ_128K,
.mask_flags = 0,
},
/* kernel */
{
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = SZ_2M,
.mask_flags = 0
},
/* file system */
{
.name = "filesystem",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
.mask_flags = 0
}
};
static struct flash_platform_data sdp3430_flash_data = {
.map_name = "cfi_probe",
.width = 2,
.parts = sdp3430_partitions,
.nr_parts = ARRAY_SIZE(sdp3430_partitions),
};
static struct resource sdp3430_flash_resource = {
.start = FLASH_BASE,
.end = FLASH_BASE + SZ_64M - 1,
.flags = IORESOURCE_MEM,
};
static struct platform_device sdp3430_flash_device = {
.name = "omapflash",
.id = 0,
.dev = {
.platform_data = &sdp3430_flash_data,
},
.num_resources = 1,
.resource = &sdp3430_flash_resource,
};
static struct resource sdp3430_smc91x_resources[] = { static struct resource sdp3430_smc91x_resources[] = {
[0] = { [0] = {
...@@ -111,7 +54,7 @@ static struct resource sdp3430_smc91x_resources[] = { ...@@ -111,7 +54,7 @@ static struct resource sdp3430_smc91x_resources[] = {
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
.start = OMAP_GPIO_IRQ(OMAP34XX_ETHR_GPIO_IRQ), .start = 0,
.end = 0, .end = 0,
.flags = IORESOURCE_IRQ, .flags = IORESOURCE_IRQ,
}, },
...@@ -262,7 +205,6 @@ static struct platform_device sdp3430_lcd_device = { ...@@ -262,7 +205,6 @@ static struct platform_device sdp3430_lcd_device = {
static struct platform_device *sdp3430_devices[] __initdata = { static struct platform_device *sdp3430_devices[] __initdata = {
&sdp3430_smc91x_device, &sdp3430_smc91x_device,
&sdp3430_flash_device,
&sdp3430_kp_device, &sdp3430_kp_device,
&sdp3430_lcd_device, &sdp3430_lcd_device,
}; };
...@@ -271,6 +213,7 @@ static inline void __init sdp3430_init_smc91x(void) ...@@ -271,6 +213,7 @@ static inline void __init sdp3430_init_smc91x(void)
{ {
int eth_cs; int eth_cs;
unsigned long cs_mem_base; unsigned long cs_mem_base;
int eth_gpio = 0;
eth_cs = SDP3430_SMC91X_CS; eth_cs = SDP3430_SMC91X_CS;
...@@ -283,12 +226,19 @@ static inline void __init sdp3430_init_smc91x(void) ...@@ -283,12 +226,19 @@ static inline void __init sdp3430_init_smc91x(void)
sdp3430_smc91x_resources[0].end = cs_mem_base + 0xf; sdp3430_smc91x_resources[0].end = cs_mem_base + 0xf;
udelay(100); udelay(100);
if (omap_request_gpio(OMAP34XX_ETHR_GPIO_IRQ) < 0) { if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0))
eth_gpio = OMAP34XX_ETHR_GPIO_IRQ_SDPV2;
else
eth_gpio = OMAP34XX_ETHR_GPIO_IRQ_SDPV1;
sdp3430_smc91x_resources[1].start = OMAP_GPIO_IRQ(eth_gpio);
if (omap_request_gpio(eth_gpio) < 0) {
printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n", printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n",
OMAP34XX_ETHR_GPIO_IRQ); eth_gpio);
return; return;
} }
omap_set_gpio_direction(OMAP34XX_ETHR_GPIO_IRQ, 1); omap_set_gpio_direction(eth_gpio, 1);
} }
static void __init omap_3430sdp_init_irq(void) static void __init omap_3430sdp_init_irq(void)
...@@ -320,6 +270,8 @@ static int __init omap3430_i2c_init(void) ...@@ -320,6 +270,8 @@ static int __init omap3430_i2c_init(void)
return 0; return 0;
} }
extern void __init sdp3430_flash_init(void);
static void __init omap_3430sdp_init(void) static void __init omap_3430sdp_init(void)
{ {
platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices)); platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
...@@ -328,6 +280,7 @@ static void __init omap_3430sdp_init(void) ...@@ -328,6 +280,7 @@ static void __init omap_3430sdp_init(void)
spi_register_board_info(sdp3430_spi_board_info, spi_register_board_info(sdp3430_spi_board_info,
ARRAY_SIZE(sdp3430_spi_board_info)); ARRAY_SIZE(sdp3430_spi_board_info));
ads7846_dev_init(); ads7846_dev_init();
sdp3430_flash_init();
omap_serial_init(); omap_serial_init();
sdp3430_usb_init(); sdp3430_usb_init();
} }
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#if defined(CONFIG_ARCH_OMAP2420) #if defined(CONFIG_ARCH_OMAP2420)
#define GPMC_BASE 0x6800a000 #define GPMC_BASE 0x6800a000
#elif defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3430) #elif defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
#define GPMC_BASE 0x6e000000 #define GPMC_BASE 0x6e000000
#endif #endif
......
...@@ -36,7 +36,8 @@ extern void sdp3430_usb_init(void); ...@@ -36,7 +36,8 @@ extern void sdp3430_usb_init(void);
/* Placeholder for 3430SDP specific defines */ /* Placeholder for 3430SDP specific defines */
#define OMAP34XX_ETHR_START DEBUG_BASE #define OMAP34XX_ETHR_START DEBUG_BASE
#define OMAP34XX_ETHR_GPIO_IRQ 29 #define OMAP34XX_ETHR_GPIO_IRQ_SDPV1 29
#define OMAP34XX_ETHR_GPIO_IRQ_SDPV2 6
/* /*
* GPIO used for TSC2046, TI's Touchscreen controller * GPIO used for TSC2046, TI's Touchscreen controller
...@@ -49,19 +50,25 @@ extern void sdp3430_usb_init(void); ...@@ -49,19 +50,25 @@ extern void sdp3430_usb_init(void);
/* NAND */ /* NAND */
/* IMPORTANT NOTE ON MAPPING /* IMPORTANT NOTE ON MAPPING
* 3430SDP - 343X * 3430SDP - 34XX
* ---------- * ----------
* NOR always on 0x04000000 * NOR always on 0x04000000 for SDPV1
* NOR always on 0x10000000 for SDPV2
* MPDB always on 0x08000000 * MPDB always on 0x08000000
* NAND always on 0x0C000000 * NAND always on 0x0C000000
* OneNand Mapped to 0x20000000 * OneNand Mapped to 0x20000000
* Boot Mode(NAND/NOR). The other on CS1 * Boot Mode(NAND/NOR). The other on CS1
*/ */
#define FLASH_BASE 0x04000000 /* NOR flash (64 Meg aligned) */ #define FLASH_BASE_SDPV1 0x04000000 /* NOR flash (64 Meg aligned) */
#define FLASH_BASE_SDPV2 0x10000000 /* NOR flash (256 Meg aligned) */
#define DEBUG_BASE 0x08000000 /* debug board */ #define DEBUG_BASE 0x08000000 /* debug board */
#define NAND_BASE 0x0C000000 /* NAND flash */ #define NAND_BASE 0x0C000000 /* NAND flash */
#define ONENAND_MAP 0x20000000 /* OneNand flash */ #define ONENAND_MAP 0x20000000 /* OneNand flash */
/* various memory sizes */
#define FLASH_SIZE_SDPV1 SZ_64M
#define FLASH_SIZE_SDPV2 SZ_128M
#ifdef CONFIG_TWL4030_CORE #ifdef CONFIG_TWL4030_CORE
#define TWL4030_IRQNUM INT_34XX_SYS_NIRQ #define TWL4030_IRQNUM INT_34XX_SYS_NIRQ
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment