mx28evk: add SPI support
authorMatthias Fuchs <matthias.fuchs@esd.eu>
Wed, 18 Jan 2012 01:33:09 +0000 (01:33 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Mon, 27 Feb 2012 20:19:22 +0000 (21:19 +0100)
This patch adds SPI support for the MX28EVK. Support for
an optionally installed SPI flash is also added. An example
configuration for redundant envrionment from SPI flash is also
added but disabled by default.

This patch has been tested on a MX28EVK Rev. D with an installed
SST25VF032B 32Mbit SPI flash.

Signed-off-by: Matthias Fuchs <matthias.fuchs@esd.eu>
Acked-by: Fabio Estevam <fabio.estevam@freescale.com>
board/freescale/mx28evk/iomux.c
include/configs/mx28evk.h

index 904e3f38b7874fcc4054b41d0546d2d772c96c30..396761bdff02d2f57294002ea4de207bbafa5191 100644 (file)
@@ -28,6 +28,7 @@
 #define        MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
 #define        MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
 #define        MUX_CONFIG_EMI  (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
+#define        MUX_CONFIG_SSP2 (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
 
 const iomux_cfg_t iomux_setup[] = {
        /* DUART */
@@ -130,6 +131,13 @@ const iomux_cfg_t iomux_setup[] = {
        MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
        MX28_PAD_EMI_CE1N__EMI_CE1N | MUX_CONFIG_EMI,
        MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
+
+       /* SPI2 (for SPI flash) */
+       MX28_PAD_SSP2_SCK__SSP2_SCK | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_MOSI__SSP2_CMD | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_MISO__SSP2_D0 | MUX_CONFIG_SSP2,
+       MX28_PAD_SSP2_SS0__SSP2_D3 |
+               (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP),
 };
 
 void board_init_ll(void)
index 8f791aa4847dcb63d09b2619aeca1fc48410682a..04967d7d2c6a0af770773840ffb0badbf71ede2c 100644 (file)
@@ -64,6 +64,8 @@
 #define CONFIG_CMD_NET
 #define CONFIG_CMD_NFS
 #define CONFIG_CMD_PING
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_SPI
 #define CONFIG_CMD_USB
 
 /*
  * MMC Driver
  */
 #define CONFIG_ENV_IS_IN_MMC
-#define CONFIG_ENV_OFFSET      (256 * 1024)
-#define CONFIG_ENV_SIZE        (16 * 1024)
-#define CONFIG_SYS_MMC_ENV_DEV 0
+#ifdef CONFIG_ENV_IS_IN_MMC
+ #define CONFIG_ENV_OFFSET     (256 * 1024)
+ #define CONFIG_ENV_SIZE       (16 * 1024)
+ #define CONFIG_SYS_MMC_ENV_DEV 0
+#endif
 #define CONFIG_CMD_SAVEENV
 #ifdef CONFIG_CMD_MMC
 #define CONFIG_MMC
 #define        CONFIG_USB_STORAGE
 #endif
 
+/*
+ * SPI
+ */
+#ifdef CONFIG_CMD_SPI
+#define CONFIG_HARD_SPI
+#define CONFIG_MXS_SPI
+#define CONFIG_SPI_HALF_DUPLEX
+#define CONFIG_DEFAULT_SPI_BUS         2
+#define CONFIG_DEFAULT_SPI_MODE                SPI_MODE_0
+
+/* SPI Flash */
+#ifdef CONFIG_CMD_SF
+#define CONFIG_SPI_FLASH
+/* this may vary and depends on the installed chip */
+#define CONFIG_SPI_FLASH_SST
+#define CONFIG_SF_DEFAULT_MODE         SPI_MODE_0
+#define CONFIG_SF_DEFAULT_SPEED                24000000
+
+/* (redundant) environemnt in SPI flash */
+#undef CONFIG_ENV_IS_IN_SPI_FLASH
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_SIZE                        0x1000          /* 4KB */
+#define CONFIG_ENV_OFFSET              0x40000         /* 256K */
+#define CONFIG_ENV_OFFSET_REDUND       (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
+#define CONFIG_ENV_SECT_SIZE           0x1000
+#define CONFIG_ENV_SPI_CS              0
+#define CONFIG_ENV_SPI_BUS             2
+#define CONFIG_ENV_SPI_MAX_HZ          24000000
+#define CONFIG_ENV_SPI_MODE            SPI_MODE_0
+#endif
+#endif
+#endif
+
 /*
  * Boot Linux
  */