aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch')
-rw-r--r--recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch b/recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch
new file mode 100644
index 0000000000..2bda1bcdc3
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/beagleboard/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch
@@ -0,0 +1,126 @@
+From 7252b81ec10aea48672f66e33cb6962b98fb0782 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 29 Apr 2010 10:28:14 -0700
+Subject: [PATCH] OMAP: mmc: add support for second and third mmc channels
+
+Boards wishing to use this feature should define CONFIG_SYS_MMC_SET_DEV
+
+Signed-off-by: Jason Kridner <jkridner@beagleboard.org>
+---
+ drivers/mmc/omap3_mmc.c | 39 +++++++++++++++++++++++++++-
+ include/asm-arm/arch-omap3/mmc_host_def.h | 15 +++++++++--
+ 2 files changed, 49 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/mmc/omap3_mmc.c b/drivers/mmc/omap3_mmc.c
+index 96c0e65..bf650ba 100644
+--- a/drivers/mmc/omap3_mmc.c
++++ b/drivers/mmc/omap3_mmc.c
+@@ -52,7 +52,27 @@ const unsigned short mmc_transspeed_val[15][4] = {
+
+ mmc_card_data cur_card_data;
+ static block_dev_desc_t mmc_blk_dev;
+-static hsmmc_t *mmc_base = (hsmmc_t *)OMAP_HSMMC_BASE;
++static hsmmc_t *mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE;
++
++unsigned char mmc_set_dev(int dev)
++{
++ switch (dev) {
++ case 1:
++ mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE;
++ break;
++ case 2:
++ mmc_base = (hsmmc_t *)OMAP_HSMMC2_BASE;
++ break;
++ case 3:
++ mmc_base = (hsmmc_t *)OMAP_HSMMC3_BASE;
++ break;
++ default:
++ mmc_base = (hsmmc_t *)OMAP_HSMMC1_BASE;
++ return 1;
++ }
++
++ return 0;
++}
+
+ block_dev_desc_t *mmc_get_dev(int dev)
+ {
+@@ -62,6 +82,7 @@ block_dev_desc_t *mmc_get_dev(int dev)
+ unsigned char mmc_board_init(void)
+ {
+ t2_t *t2_base = (t2_t *)T2_BASE;
++ struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
+
+ #if defined(CONFIG_TWL4030_POWER)
+ twl4030_power_mmc_init();
+@@ -74,6 +95,17 @@ unsigned char mmc_board_init(void)
+ writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
+ &t2_base->devconf0);
+
++ writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,
++ &t2_base->devconf1);
++
++ writel(readl(&prcm_base->fclken1_core) |
++ EN_MMC1 | EN_MMC2 | EN_MMC3,
++ &prcm_base->fclken1_core);
++
++ writel(readl(&prcm_base->iclken1_core) |
++ EN_MMC1 | EN_MMC2 | EN_MMC3,
++ &prcm_base->iclken1_core);
++
+ return 1;
+ }
+
+@@ -512,8 +544,11 @@ unsigned long mmc_bread(int dev_num, unsigned long blknr, lbaint_t blkcnt,
+ return 1;
+ }
+
+-int mmc_legacy_init(int verbose)
++int mmc_legacy_init(int dev)
+ {
++ if (mmc_set_dev(dev) != 0)
++ return 1;
++
+ if (configure_mmc(&cur_card_data) != 1)
+ return 1;
+
+diff --git a/include/asm-arm/arch-omap3/mmc_host_def.h b/include/asm-arm/arch-omap3/mmc_host_def.h
+index aa751c9..43dd705 100644
+--- a/include/asm-arm/arch-omap3/mmc_host_def.h
++++ b/include/asm-arm/arch-omap3/mmc_host_def.h
+@@ -29,13 +29,20 @@
+ #define T2_BASE 0x48002000
+
+ typedef struct t2 {
+- unsigned char res1[0x274];
++ unsigned char res1[0x274]; /* 0x000 */
+ unsigned int devconf0; /* 0x274 */
+- unsigned char res2[0x2A8];
++ unsigned char res2[0x060]; /* 0x278 */
++ unsigned int devconf1; /* 0x2D8 */
++ unsigned char res3[0x244]; /* 0x2DC */
+ unsigned int pbias_lite; /* 0x520 */
+ } t2_t;
+
+ #define MMCSDIO1ADPCLKISEL (1 << 24)
++#define MMCSDIO2ADPCLKISEL (1 << 6)
++
++#define EN_MMC1 (1 << 24)
++#define EN_MMC2 (1 << 25)
++#define EN_MMC3 (1 << 30)
+
+ #define PBIASLITEPWRDNZ0 (1 << 1)
+ #define PBIASSPEEDCTRL0 (1 << 2)
+@@ -44,7 +51,9 @@ typedef struct t2 {
+ /*
+ * OMAP HSMMC register definitions
+ */
+-#define OMAP_HSMMC_BASE 0x4809C000
++#define OMAP_HSMMC1_BASE 0x4809C000
++#define OMAP_HSMMC2_BASE 0x480B4000
++#define OMAP_HSMMC3_BASE 0x480AD000
+
+ typedef struct hsmmc {
+ unsigned char res1[0x10];
+--
+1.5.6.4
+