All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.