Armada100: Add SPI support for Marvell gplugD
authorAjay Bhargav <[ajay.bhargav@einfochips.com]>
Mon, 3 Oct 2011 08:30:57 +0000 (14:00 +0530)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Thu, 27 Oct 2011 19:56:32 +0000 (21:56 +0200)
This patch add SPI driver support for Marvell gplugD

Signed-off-by: Ajay Bhargav <ajay.bhargav@einfochips.com>
arch/arm/include/asm/arch-armada100/armada100.h
arch/arm/include/asm/arch-armada100/mfp.h
board/Marvell/gplugd/gplugd.c
include/configs/gplugd.h

index c449d4e63997d73a3e7cbfc82fdd4d1ac38e142c..a8181b68db851035d0a7b9753e3ffa58e6eabd0f 100644 (file)
 #define FE_CLK_RST             0x1
 #define FE_CLK_ENA             0x8
 
+/* SSP2 Clock Control */
+#define SSP2_APBCLK            0x01
+#define SSP2_FNCLK             0x02
+
 /* Register Base Addresses */
 #define ARMD1_DRAM_BASE                0xB0000000
 #define ARMD1_FEC_BASE         0xC0800000
@@ -175,5 +179,20 @@ struct armd1apb1_registers {
        u32 ac97;       /*0x084*/
 };
 
+/*
+* APB2 Clock Reset/Control Registers
+* Refer Datasheet Appendix A.11
+*/
+struct armd1apb2_registers {
+       u32 pad1[0x01C - 0x000];
+       u32 ssp1_clkrst;                /* 0x01C */
+       u32 ssp2_clkrst;                /* 0x020 */
+       u32 pad2[0x04C - 0x020 - 4];
+       u32 ssp3_clkrst;                /* 0x04C */
+       u32 pad3[0x058 - 0x04C - 4];
+       u32 ssp4_clkrst;                /* 0x058 */
+       u32 ssp5_clkrst;                /* 0x05C */
+};
+
 #endif /* CONFIG_ARMADA100 */
 #endif /* _ASM_ARCH_ARMADA100_H */
index da76b58405e1274767075e7a83dbd5c6df6947f1..d48251af200ab882fcc832fa9eaa94dadbac3151 100644 (file)
 #define MFP101_ETH_MDIO                (MFP_REG(0x194) | MFP_AF5 | MFP_DRIVE_MEDIUM)
 #define MFP103_ETH_RXDV                (MFP_REG(0x19C) | MFP_AF5 | MFP_DRIVE_MEDIUM)
 
+/* SPI */
+#define MFP107_SSP2_RXD                (MFP_REG(0x1AC) | MFP_AF4 | MFP_DRIVE_MEDIUM)
+#define MFP108_SSP2_TXD                (MFP_REG(0x1B0) | MFP_AF4 | MFP_DRIVE_MEDIUM)
+#define MFP110_SSP2_CS         (MFP_REG(0x1B8) | MFP_AF0 | MFP_DRIVE_MEDIUM)
+#define MFP111_SSP2_CLK                (MFP_REG(0x1BC) | MFP_AF4 | MFP_DRIVE_MEDIUM)
+
 /* More macros can be defined here... */
 
 #define MFP_PIN_MAX    117
index b4f7f81583ece4586e840b4b130ac73841bbe08b..42c8389558a6a36d53b51a42d1ac32b48a93bc44 100644 (file)
@@ -72,6 +72,12 @@ int board_early_init_f(void)
                MFP101_ETH_MDIO,
                MFP103_ETH_RXDV,
 
+               /* SSP2 */
+               MFP107_SSP2_RXD,
+               MFP108_SSP2_TXD,
+               MFP110_SSP2_CS,
+               MFP111_SSP2_CLK,
+
                MFP_EOC         /*End of configuration*/
        };
        /* configure MFP's */
@@ -81,6 +87,9 @@ int board_early_init_f(void)
 
 int board_init(void)
 {
+       struct armd1apb2_registers *apb2_regs =
+               (struct armd1apb2_registers *)ARMD1_APBC2_BASE;
+
        /* arch number of Board */
        gd->bd->bi_arch_number = MACH_TYPE_SHEEVAD;
        /* adress of boot parameters */
@@ -90,6 +99,9 @@ int board_init(void)
        udelay(10);
        /* Deassert PHY_RST# */
        gpio_set_value(CONFIG_SYS_GPIO_PHY_RST, GPIO_HIGH);
+
+       /* Enable SSP2 clock */
+       writel(SSP2_APBCLK | SSP2_FNCLK, &apb2_regs->ssp2_clkrst);
        return 0;
 }
 
index a9f3b3b3054bf9ea6be616668697386ba5ec7b61..6fa724ae452697cb0c7dfd36df1d7b8f07b6084e 100644 (file)
 /* GPIO Configuration for PHY */
 #define CONFIG_SYS_GPIO_PHY_RST                104     /* GPIO104 */
 
+/* SPI Support */
+#define CONFIG_ARMADA100_SPI
+#define CONFIG_ENV_SPI_CS              110
+#define CONFIG_SYS_SSP_PORT            2
+
 /*
  * mv-common.h should be defined after CMD configs since it used them
  * to enable certain macros