summaryrefslogtreecommitdiff
path: root/board/freescale/mx6q_arm2/mx6q_arm2.c
diff options
context:
space:
mode:
authorTerry Lv <r65388@freescale.com>2011-11-01 15:07:04 +0800
committerTerry Lv <r65388@freescale.com>2011-11-01 15:08:46 +0800
commitc1c2931c8e4b41e949fc1e77999b41c32f26da7b (patch)
treea34e5d470e5c741e554655802c9eb37db6e6ae3a /board/freescale/mx6q_arm2/mx6q_arm2.c
parent10bff02ace00c37a31d6842376f96e0cda6889c8 (diff)
downloadu-boot-imx-c1c2931c8e4b41e949fc1e77999b41c32f26da7b.zip
u-boot-imx-c1c2931c8e4b41e949fc1e77999b41c32f26da7b.tar.gz
u-boot-imx-c1c2931c8e4b41e949fc1e77999b41c32f26da7b.tar.bz2
ENGR00161133: Add spi-nor support for mx6q
Add spi-nor support for mx6q. Signed-off-by: Terry Lv <r65388@freescale.com>
Diffstat (limited to 'board/freescale/mx6q_arm2/mx6q_arm2.c')
-rw-r--r--board/freescale/mx6q_arm2/mx6q_arm2.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/board/freescale/mx6q_arm2/mx6q_arm2.c b/board/freescale/mx6q_arm2/mx6q_arm2.c
index 54873f3..4e1cc73 100644
--- a/board/freescale/mx6q_arm2/mx6q_arm2.c
+++ b/board/freescale/mx6q_arm2/mx6q_arm2.c
@@ -35,6 +35,10 @@
#include <lcd.h>
#endif
+#ifdef CONFIG_IMX_ECSPI
+#include <imx_spi.h>
+#endif
+
#if CONFIG_I2C_MXC
#include <i2c.h>
#endif
@@ -336,6 +340,70 @@ void setup_lvds_poweron(void)
#endif
#endif
+#ifdef CONFIG_IMX_ECSPI
+s32 spi_get_cfg(struct imx_spi_dev_t *dev)
+{
+ switch (dev->slave.cs) {
+ case 0:
+ /* SPI-NOR */
+ dev->base = ECSPI1_BASE_ADDR;
+ dev->freq = 25000000;
+ dev->ss_pol = IMX_SPI_ACTIVE_LOW;
+ dev->ss = 0;
+ dev->fifo_sz = 64 * 4;
+ dev->us_delay = 0;
+ break;
+ case 1:
+ /* SPI-NOR */
+ dev->base = ECSPI1_BASE_ADDR;
+ dev->freq = 25000000;
+ dev->ss_pol = IMX_SPI_ACTIVE_LOW;
+ dev->ss = 1;
+ dev->fifo_sz = 64 * 4;
+ dev->us_delay = 0;
+ break;
+ default:
+ printf("Invalid Bus ID!\n");
+ }
+
+ return 0;
+}
+
+void spi_io_init(struct imx_spi_dev_t *dev)
+{
+ u32 reg;
+
+ switch (dev->base) {
+ case ECSPI1_BASE_ADDR:
+ /* Enable clock */
+ reg = readl(CCM_BASE_ADDR + CLKCTL_CCGR1);
+ reg |= 0x3;
+ writel(reg, CCM_BASE_ADDR + CLKCTL_CCGR1);
+
+ /* SCLK */
+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D16__ECSPI1_SCLK);
+
+ /* MISO */
+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D17__ECSPI1_MISO);
+
+ /* MOSI */
+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D18__ECSPI1_MOSI);
+
+ if (dev->ss == 0)
+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_EB2__ECSPI1_SS0);
+ else if (dev->ss == 1)
+ mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D19__ECSPI1_SS1);
+ break;
+ case ECSPI2_BASE_ADDR:
+ case ECSPI3_BASE_ADDR:
+ /* ecspi2-3 fall through */
+ break;
+ default:
+ break;
+ }
+}
+#endif
+
#define HW_OCOTP_MACn(n) (0x00000620 + (n) * 0x10)
#ifdef CONFIG_MXC_FEC