From: Dirk Behme <dirk.behme@googlemail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] omap3: mmc: mmc2 support
Date: Fri, 27 Mar 2009 00:16:25 +0100 [thread overview]
Message-ID: <49CC0CC9.7060900@googlemail.com> (raw)
In-Reply-To: <49CB5D3D.1070506@samsung.com>
Minkyu Kang wrote:
> There are 3 MMC/SD/SDIO host controllers inside the device.
> This patch will support mmc2 and mmc3.
By this patch, the MMC controller actually used is configured by
CONFIG_MMC_INDEX at compile time? I.e. setting CONFIG_MMC_INDEX to 1
will use mmc1, 2 will switch to mmc2 and CONFIG_MMC_INDEX 3 will
switch to mmc3?
If I got this right, do you think we can do this at runtime? E.g.
implementing a custom command
select_mmc <# of mmc controller to be used>
?
With this, we could switch to mmc2 by doing something like
select_mmc 2
and afterwards all mmc read/write access will go to mmc2.
What do you think?
Looking at MMC commands, there is also a <device num> option available
for mmc commands, e.g.
mmc read <device num>
Not sure if this could help us here.
Maybe the MMC experts can advice how to do this the best way?
Best regards
Dirk
> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
> ---
> drivers/mmc/omap3_mmc.c | 38 ++++++++++++++++++++++-------
> include/asm-arm/arch-omap3/mmc_host_def.h | 18 ++++++++++++-
> include/asm-arm/arch-omap3/omap3.h | 3 ++
> include/configs/omap3_beagle.h | 1 +
> include/configs/omap3_evm.h | 1 +
> include/configs/omap3_overo.h | 1 +
> include/configs/omap3_pandora.h | 1 +
> include/configs/omap3_zoom1.h | 1 +
> 8 files changed, 53 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/mmc/omap3_mmc.c b/drivers/mmc/omap3_mmc.c
> index e90db7e..edc56fa 100644
> --- a/drivers/mmc/omap3_mmc.c
> +++ b/drivers/mmc/omap3_mmc.c
> @@ -62,10 +62,21 @@ void twl4030_mmc_config(void)
> {
> unsigned char data;
>
> - data = DEV_GRP_P1;
> - i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1);
> - data = VMMC1_VSEL_30;
> - i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1);
> + switch (CONFIG_MMC_INDEX) {
> + case 1:
> + data = DEV_GRP_P1;
> + i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEV_GRP, 1, &data, 1);
> + data = VMMC1_VSEL_30;
> + i2c_write(PWRMGT_ADDR_ID4, VMMC1_DEDICATED, 1, &data, 1);
> + break;
> + case 2:
> + case 3:
> + data = DEV_GRP_P1;
> + i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEV_GRP, 1, &data, 1);
> + data = VMMC2_VSEL_185;
> + i2c_write(PWRMGT_ADDR_ID4, VMMC2_DEDICATED, 1, &data, 1);
> + break;
> + }
> }
>
> unsigned char mmc_board_init(void)
> @@ -74,12 +85,21 @@ unsigned char mmc_board_init(void)
>
> twl4030_mmc_config();
>
> - writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |
> - PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
> - &t2_base->pbias_lite);
> + switch (CONFIG_MMC_INDEX) {
> + case 1:
> + writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |
> + PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
> + &t2_base->pbias_lite);
>
> - writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
> - &t2_base->devconf0);
> + writel(readl(&t2_base->devconf0) | MMCSDIO1ADPCLKISEL,
> + &t2_base->devconf0);
> + break;
> + case 2:
> + case 3:
> + writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,
> + &t2_base->devconf1);
> + break;
> + }
>
> 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..01884f9 100644
> --- a/include/asm-arm/arch-omap3/mmc_host_def.h
> +++ b/include/asm-arm/arch-omap3/mmc_host_def.h
> @@ -31,7 +31,9 @@
> typedef struct t2 {
> unsigned char res1[0x274];
> unsigned int devconf0; /* 0x274 */
> - unsigned char res2[0x2A8];
> + unsigned char res2[0x60];
> + unsigned int devconf1; /* 0x2D8 */
> + unsigned char res3[0x244];
> unsigned int pbias_lite; /* 0x520 */
> } t2_t;
>
> @@ -41,10 +43,22 @@ typedef struct t2 {
> #define PBIASSPEEDCTRL0 (1 << 2)
> #define PBIASLITEPWRDNZ1 (1 << 9)
>
> +#define MMCSDIO2ADPCLKISEL (1 << 6)
> +
> /*
> * OMAP HSMMC register definitions
> */
> -#define OMAP_HSMMC_BASE 0x4809C000
> +#define OMAP_HSMMC_BASE_MMC1 0x4809C000
> +#define OMAP_HSMMC_BASE_MMC2 0x480B4000
> +#define OMAP_HSMMC_BASE_MMC3 0x480AD000
> +
> +#if CONFIG_MMC_INDEX == 1
> +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC1
> +#elif CONFIG_MMC_INDEX == 2
> +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC2
> +#elif CONFIG_MMC_INDEX == 3
> +#define OMAP_HSMMC_BASE OMAP_HSMMC_BASE_MMC3
> +#endif
>
> typedef struct hsmmc {
> unsigned char res1[0x10];
> diff --git a/include/asm-arm/arch-omap3/omap3.h b/include/asm-arm/arch-omap3/omap3.h
> index 8c9656f..b5b5def 100644
> --- a/include/asm-arm/arch-omap3/omap3.h
> +++ b/include/asm-arm/arch-omap3/omap3.h
> @@ -206,6 +206,8 @@ typedef struct gpio {
> #define VAUX3_DEDICATED 0x7D
> #define VMMC1_DEV_GRP 0x82
> #define VMMC1_DEDICATED 0x85
> +#define VMMC2_DEV_GRP 0x86
> +#define VMMC2_DEDICATED 0x89
> #define VPLL2_DEV_GRP 0x8E
> #define VPLL2_DEDICATED 0x91
> #define VDAC_DEV_GRP 0x96
> @@ -219,5 +221,6 @@ typedef struct gpio {
> #define VPLL2_VSEL_18 0x05
> #define VDAC_VSEL_18 0x03
> #define VMMC1_VSEL_30 0x02
> +#define VMMC2_VSEL_185 0x06
>
> #endif
> diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
> index 0f9344b..3609a0d 100644
> --- a/include/configs/omap3_beagle.h
> +++ b/include/configs/omap3_beagle.h
> @@ -90,6 +90,7 @@
> 115200}
> #define CONFIG_MMC 1
> #define CONFIG_OMAP3_MMC 1
> +#define CONFIG_MMC_INDEX 1
> #define CONFIG_DOS_PARTITION 1
>
> /* commands to include */
> diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
> index f4498a9..6417eba 100644
> --- a/include/configs/omap3_evm.h
> +++ b/include/configs/omap3_evm.h
> @@ -95,6 +95,7 @@
> 115200}
> #define CONFIG_MMC 1
> #define CONFIG_OMAP3_MMC 1
> +#define CONFIG_MMC_INDEX 1
> #define CONFIG_DOS_PARTITION 1
>
> /* commands to include */
> diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
> index dee0417..af23abd 100644
> --- a/include/configs/omap3_overo.h
> +++ b/include/configs/omap3_overo.h
> @@ -82,6 +82,7 @@
> 115200}
> #define CONFIG_MMC 1
> #define CONFIG_OMAP3_MMC 1
> +#define CONFIG_MMC_INDEX 1
> #define CONFIG_DOS_PARTITION 1
>
> /* commands to include */
> diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
> index 00c0374..4e09a9a 100644
> --- a/include/configs/omap3_pandora.h
> +++ b/include/configs/omap3_pandora.h
> @@ -85,6 +85,7 @@
> 115200}
> #define CONFIG_MMC 1
> #define CONFIG_OMAP3_MMC 1
> +#define CONFIG_MMC_INDEX 1
> #define CONFIG_DOS_PARTITION 1
>
> /* commands to include */
> diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h
> index f8ae163..2af5b07 100644
> --- a/include/configs/omap3_zoom1.h
> +++ b/include/configs/omap3_zoom1.h
> @@ -91,6 +91,7 @@
> 115200}
> #define CONFIG_MMC 1
> #define CONFIG_OMAP3_MMC 1
> +#define CONFIG_MMC_INDEX 1
> #define CONFIG_DOS_PARTITION 1
>
> /* commands to include */
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
next prev parent reply other threads:[~2009-03-26 23:16 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-26 10:47 [U-Boot] [PATCH] omap3: mmc: mmc2 support Minkyu Kang
2009-03-26 23:16 ` Dirk Behme [this message]
2009-03-27 19:01 ` Wolfgang Denk
-- strict thread matches above, loose matches on Subject: below --
2009-03-27 15:17 Minkyu Kang
2009-03-28 5:07 Minkyu Kang
2009-04-01 9:27 ` Jean-Christophe PLAGNIOL-VILLARD
2009-04-02 10:19 ` Minkyu Kang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49CC0CC9.7060900@googlemail.com \
--to=dirk.behme@googlemail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox