Patchwork [U-Boot] AT91: enable MMC on at91sam(9260/9g20/0xe)ek

login
register
mail settings
Submitter Reinhard Meyer
Date July 8, 2011, 5:22 p.m.
Message ID <1310145772-26420-1-git-send-email-u-boot@emk-elektronik.de>
Download mbox | patch
Permalink /patch/103904/
State Accepted
Delegated to: Reinhard Meyer
Headers show

Comments

Reinhard Meyer - July 8, 2011, 5:22 p.m.
Signed-off-by: Reinhard Meyer <u-boot@emk-elektronik.de>
---
 board/atmel/at91sam9260ek/at91sam9260ek.c |   33 +++++++++++++++++++++
 include/configs/at91sam9260ek.h           |   45 ++++++++++++++++++----------
 2 files changed, 62 insertions(+), 16 deletions(-)

Patch

diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c
index 682b922..784632e 100644
--- a/board/atmel/at91sam9260ek/at91sam9260ek.c
+++ b/board/atmel/at91sam9260ek/at91sam9260ek.c
@@ -23,6 +23,7 @@ 
  */
 
 #include <common.h>
+#include <mmc.h>
 #include <asm/io.h>
 #include <asm/arch/at91sam9260_matrix.h>
 #include <asm/arch/at91sam9_smc.h>
@@ -143,6 +144,38 @@  static void at91sam9260ek_macb_hw_init(void)
 }
 #endif
 
+#ifdef CONFIG_GENERIC_ATMEL_MCI
+/* this is a weak define that we are overriding */
+int board_mmc_init(bd_t *bd)
+{
+	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
+
+	/* Enable MCI clock */
+	writel(1 << ATMEL_ID_MCI, &pmc->pcer);
+
+	/* Initialize MCI hardware */
+	at91_mci_hw_init();
+
+	/* This calls the atmel_mmc_init in gen_atmel_mci.c */
+	return atmel_mci_init((void *)ATMEL_BASE_MCI);
+}
+
+/* this is a weak define that we are overriding */
+int board_mmc_getcd(u8 *cd, struct mmc *mmc)
+{
+	/*
+	 * the only currently existing use of this function
+	 * (fsl_esdhc.c) suggests this function must return
+	 * *cs = TRUE if a card is NOT detected -> in most
+	 * cases the value of the pin when the detect switch
+	 * closes to GND
+	 */
+	*cd = at91_get_gpio_value(CONFIG_SYS_MMC_CD_PIN) ? 1 : 0;
+	return 0;
+}
+
+#endif
+
 int board_early_init_f(void)
 {
 	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
diff --git a/include/configs/at91sam9260ek.h b/include/configs/at91sam9260ek.h
index 88578c6..f12e83a 100644
--- a/include/configs/at91sam9260ek.h
+++ b/include/configs/at91sam9260ek.h
@@ -75,6 +75,14 @@ 
 #define CONFIG_BAUDRATE			115200
 #define CONFIG_SYS_BAUDRATE_TABLE	{115200 , 19200, 38400, 57600, 9600 }
 
+/* SD/MMC card */
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_GENERIC_ATMEL_MCI
+#define CONFIG_SYS_MMC_CD_PIN		AT91_PIN_PC9
+#define CONFIG_CMD_MMC
+#define CONFIG_ATMEL_MCI_PORTB		/* use port B on those boards */
+
 /* LED */
 #define CONFIG_AT91_LED
 #define	CONFIG_RED_LED		AT91_PIN_PA9	/* this is the power led */
@@ -127,21 +135,26 @@ 
 	(ATMEL_BASE_SRAM1 + 0x1000 - GENERATED_GBL_DATA_SIZE)
 #endif
 
-/* DataFlash */
-#define CONFIG_ATMEL_DATAFLASH_SPI
-#define CONFIG_HAS_DATAFLASH		1
-#define CONFIG_SYS_SPI_WRITE_TOUT		(5*CONFIG_SYS_HZ)
-#define CONFIG_SYS_MAX_DATAFLASH_BANKS		2
-#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0	0xC0000000	/* CS0 */
-#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1	0xD0000000	/* CS1 */
-#define AT91_SPI_CLK			15000000
-
-#ifdef CONFIG_AT91SAM9G20EK
-#define DATAFLASH_TCSS			(0x22 << 16)
-#else
-#define DATAFLASH_TCSS			(0x1a << 16)
-#endif
-#define DATAFLASH_TCHS			(0x1 << 24)
+/*
+ * DataFlash
+ * cannot coexist with MMC due to shared pins.
+ */
+#ifndef CONFIG_MMC
+# define CONFIG_ATMEL_DATAFLASH_SPI
+# define CONFIG_HAS_DATAFLASH		1
+# define CONFIG_SYS_SPI_WRITE_TOUT		(5*CONFIG_SYS_HZ)
+# define CONFIG_SYS_MAX_DATAFLASH_BANKS		2
+# define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0	0xC0000000	/* CS0 */
+# define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1	0xD0000000	/* CS1 */
+# define AT91_SPI_CLK			15000000
+
+# ifdef CONFIG_AT91SAM9G20EK
+#  define DATAFLASH_TCSS			(0x22 << 16)
+# else
+#  define DATAFLASH_TCSS			(0x1a << 16)
+# endif
+# define DATAFLASH_TCHS			(0x1 << 24)
+#endif /* ifndef CONFIG_MMC */
 
 /* NAND flash */
 #ifdef CONFIG_CMD_NAND