summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2008-08-13 14:39:44 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2008-08-13 16:52:15 +0200
commit1a0737524721c422a9580143c75171bac746a3e4 (patch)
tree0fccb4272a03048dd733eed0f435b3a8650c8d2e
parentfd12d4cd77f385cb57c83fc293d0c4c116aa1354 (diff)
downloadbarebox-1a0737524721c422a9580143c75171bac746a3e4.tar.gz
barebox-1a0737524721c422a9580143c75171bac746a3e4.tar.xz
pcm038: use environment in NAND/NOR depending on where we started from
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--board/pcm038/pcm038.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/board/pcm038/pcm038.c b/board/pcm038/pcm038.c
index 6155b724b2..51f44d1520 100644
--- a/board/pcm038/pcm038.c
+++ b/board/pcm038/pcm038.c
@@ -66,7 +66,6 @@ static struct device_d fec_dev = {
.type = DEVICE_TYPE_ETHER,
};
-#if defined CONFIG_DRIVER_SPI_IMX && defined CONFIG_DRIVER_SPI_MC13783
static struct device_d spi_dev = {
.name = "imx_spi",
.id = "spi0",
@@ -81,7 +80,6 @@ static struct spi_board_info pcm038_spi_board_info[] = {
.chip_select = 0,
}
};
-#endif
struct imx_nand_platform_data nand_info = {
.width = 1,
@@ -97,6 +95,9 @@ static struct device_d nand_dev = {
static int pcm038_devices_init(void)
{
int i;
+ struct device_d *nand, *dev;
+ char *envdev;
+
unsigned int mode[] = {
PD0_AIN_FEC_TXD0,
PD1_AIN_FEC_TXD1,
@@ -145,16 +146,30 @@ static int pcm038_devices_init(void)
PCCR0 |= PCCR0_CSPI1_EN;
PCCR1 |= PCCR1_PERCLK2_EN;
-#if defined CONFIG_DRIVER_SPI_IMX && defined CONFIG_DRIVER_SPI_MC13783
spi_register_board_info(pcm038_spi_board_info, ARRAY_SIZE(pcm038_spi_board_info));
register_device(&spi_dev);
-#endif
-#ifdef CONFIG_PARTITION
- dev_add_partition(&cfi_dev, 0x00000, 0x20000, PARTITION_FIXED, "self");
- dev_add_partition(&cfi_dev, 0x20000, 0x20000, PARTITION_FIXED, "env");
-#endif
- dev_protect(&cfi_dev, 0x20000, 0, 1);
+ switch ((GPCR & GPCR_BOOT_MASK) >> GPCR_BOOT_SHIFT) {
+ case GPCR_BOOT_8BIT_NAND_2k:
+ case GPCR_BOOT_16BIT_NAND_2k:
+ case GPCR_BOOT_16BIT_NAND_512:
+ case GPCR_BOOT_8BIT_NAND_512:
+ nand = get_device_by_path("/dev/nand0");
+ dev = dev_add_partition(nand, 0x00000, 0x40000, PARTITION_FIXED, "self_raw");
+ dev_add_bb_dev(dev, "self0");
+
+ dev = dev_add_partition(nand, 0x40000, 0x20000, PARTITION_FIXED, "env_raw");
+ dev_add_bb_dev(dev, "env0");
+ envdev = "NAND";
+ break;
+ default:
+ dev_add_partition(&cfi_dev, 0x00000, 0x40000, PARTITION_FIXED, "self");
+ dev_add_partition(&cfi_dev, 0x40000, 0x20000, PARTITION_FIXED, "env");
+ dev_protect(&cfi_dev, 0x40000, 0, 1);
+ envdev = "NOR";
+ }
+
+ printf("Using environment in %s Flash\n", envdev);
armlinux_set_bootparams((void *)0xa0000100);
armlinux_set_architecture(MACH_TYPE_PCM038);
@@ -182,7 +197,7 @@ console_initcall(pcm038_console_init);
static int pcm038_power_init(void)
{
-#if defined CONFIG_DRIVER_SPI_IMX && defined CONFIG_DRIVER_SPI_MC13783
+#ifdef CONFIG_DRIVER_SPI_MC13783
volatile int i = 0;
int ret;