summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeresa Gámez <t.gamez@phytec.de>2013-07-09 11:23:12 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-07-09 19:33:15 +0200
commitedf6a0f805209b254bb1bc3cb3e5d74665b05cc0 (patch)
treeef112ffa9c2de80c6a5c679c6c84e25935c18ceb
parent63ae7219e9782b33099f104b7f54ad60db8aa10b (diff)
downloadbarebox-edf6a0f805209b254bb1bc3cb3e5d74665b05cc0.tar.gz
barebox-edf6a0f805209b254bb1bc3cb3e5d74665b05cc0.tar.xz
PCM051: Add basic nand support
Add basic NAND support for pcm051. Signed-off-by: Teresa Gámez <t.gamez@phytec.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/boards/pcm051/board.c54
-rw-r--r--arch/arm/boards/pcm051/env/boot/nand-ubi10
-rw-r--r--arch/arm/boards/pcm051/env/init/mtdparts-nand11
-rw-r--r--arch/arm/configs/pcm051_defconfig3
4 files changed, 75 insertions, 3 deletions
diff --git a/arch/arm/boards/pcm051/board.c b/arch/arm/boards/pcm051/board.c
index eea5ebb575..db371e5e40 100644
--- a/arch/arm/boards/pcm051/board.c
+++ b/arch/arm/boards/pcm051/board.c
@@ -17,9 +17,11 @@
*
*/
+#include <bootsource.h>
#include <common.h>
#include <init.h>
#include <io.h>
+#include <nand.h>
#include <sizes.h>
#include <ns16550.h>
#include <asm/armlinux.h>
@@ -30,6 +32,8 @@
#include <mach/am33xx-mux.h>
#include <mach/am33xx-silicon.h>
#include <mach/cpsw.h>
+#include <mach/gpmc.h>
+#include <mach/gpmc_nand.h>
#include <spi/spi.h>
#include <spi/flash.h>
#include <i2c/i2c.h>
@@ -97,6 +101,25 @@ static struct i2c_board_info i2c0_devices[] = {
},
};
+static struct gpmc_config pcm051_nand_cfg = {
+ .cfg = {
+ 0x00000800, /* CONF1 */
+ 0x00030300, /* CONF2 */
+ 0x00030300, /* CONF3 */
+ 0x02000311, /* CONF4 */
+ 0x00030303, /* CONF5 */
+ 0x03000540, /* CONF6 */
+ },
+ .base = 0x08000000,
+ .size = GPMC_SIZE_16M,
+};
+
+static struct gpmc_nand_platform_data nand_plat = {
+ .wait_mon_pin = 1,
+ .ecc_mode = OMAP_ECC_BCH8_CODE_HW,
+ .nand_cfg = &pcm051_nand_cfg,
+};
+
static void pcm051_spi_init(void)
{
int ret;
@@ -128,6 +151,15 @@ static void pcm051_i2c_init(void)
am33xx_add_i2c0(NULL);
}
+static void pcm051_nand_init(void)
+{
+ am33xx_enable_nand_pin_mux();
+
+ gpmc_generic_init(0x12);
+
+ omap_add_gpmc_nand_device(&nand_plat);
+}
+
static int pcm051_devices_init(void)
{
pcm051_enable_mmc0_pin_mux();
@@ -137,13 +169,29 @@ static int pcm051_devices_init(void)
pcm051_spi_init();
pcm051_eth_init();
pcm051_i2c_init();
+ pcm051_nand_init();
- devfs_add_partition("nor0", 0x00000, SZ_128K,
+ switch (bootsource_get()) {
+ case BOOTSOURCE_SPI:
+ devfs_add_partition("nor0", 0x00000, SZ_128K,
DEVFS_PARTITION_FIXED, "xload");
- devfs_add_partition("nor0", SZ_128K, SZ_512K,
+ devfs_add_partition("nor0", SZ_128K, SZ_512K,
DEVFS_PARTITION_FIXED, "self0");
- devfs_add_partition("nor0", SZ_128K + SZ_512K, SZ_128K,
+ devfs_add_partition("nor0", SZ_128K + SZ_512K, SZ_128K,
DEVFS_PARTITION_FIXED, "env0");
+ break;
+ default:
+ devfs_add_partition("nand0", 0x00000, SZ_128K,
+ DEVFS_PARTITION_FIXED, "xload_raw");
+ dev_add_bb_dev("xload_raw", "xload");
+ devfs_add_partition("nand0", SZ_512K, SZ_512K,
+ DEVFS_PARTITION_FIXED, "self_raw");
+ dev_add_bb_dev("self_raw", "self0");
+ devfs_add_partition("nand0", SZ_512K + SZ_512K, SZ_128K,
+ DEVFS_PARTITION_FIXED, "env_raw");
+ dev_add_bb_dev("env_raw", "env0");
+ break;
+ }
armlinux_set_bootparams((void *)(AM33XX_DRAM_ADDR_SPACE_START + 0x100));
armlinux_set_architecture(MACH_TYPE_PCM051);
diff --git a/arch/arm/boards/pcm051/env/boot/nand-ubi b/arch/arm/boards/pcm051/env/boot/nand-ubi
new file mode 100644
index 0000000000..efea518e10
--- /dev/null
+++ b/arch/arm/boards/pcm051/env/boot/nand-ubi
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+if [ "$1" = menu ]; then
+ boot-menu-add-entry "$0" "nand (UBI)"
+ exit
+fi
+
+global.bootm.image="/dev/nand0.kernel.bb"
+#global.bootm.oftree="/env/oftree"
+bootargs-root-ubi -r root -m nand0.root,2048
diff --git a/arch/arm/boards/pcm051/env/init/mtdparts-nand b/arch/arm/boards/pcm051/env/init/mtdparts-nand
new file mode 100644
index 0000000000..12f0ffd4db
--- /dev/null
+++ b/arch/arm/boards/pcm051/env/init/mtdparts-nand
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ "$1" = menu ]; then
+ init-menu-add-entry "$0" "NAND partitions"
+ exit
+fi
+
+mtdparts="128k(nand0.xload),128k(nand0.xload_backup1),128k(nand0.xload_backup2),128k(nand0.xload_backup3),512k(nand0.barebox)ro,128k(nand0.bareboxenv),8M(nand0.kernel),-(nand0.root)"
+kernelname="omap2-nand.0"
+
+mtdparts-add -b -d nand0 -k ${kernelname} -p ${mtdparts}
diff --git a/arch/arm/configs/pcm051_defconfig b/arch/arm/configs/pcm051_defconfig
index 8de3714da9..e90e27ff5f 100644
--- a/arch/arm/configs/pcm051_defconfig
+++ b/arch/arm/configs/pcm051_defconfig
@@ -33,6 +33,7 @@ CONFIG_CMD_CRC=y
CONFIG_CMD_CRC_CMP=y
CONFIG_CMD_MD5SUM=y
CONFIG_CMD_FLASH=y
+CONFIG_CMD_UBIFORMAT=y
CONFIG_CMD_BOOTM_SHOW_TYPE=y
CONFIG_CMD_UIMAGE=y
CONFIG_CMD_BOOTZ=y
@@ -56,6 +57,8 @@ CONFIG_I2C_OMAP=y
CONFIG_MTD=y
CONFIG_MTD_M25P80=y
CONFIG_NAND=y
+CONFIG_NAND_OMAP_GPMC=y
+CONFIG_UBI=y
CONFIG_USB=y
CONFIG_MCI=y
CONFIG_MCI_STARTUP=y