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.k...@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@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot