[U-Boot] [PATCH] omap3: mmc: mmc2 support
Dirk Behme
dirk.behme at googlemail.com
Fri Mar 27 00:16:25 CET 2009
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 at 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
>
More information about the U-Boot
mailing list