public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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
> 

  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