All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] mxc: Fix SDHC multi-instance clock
Date: Fri, 28 Sep 2012 15:09:45 +0200 (CEST)	[thread overview]
Message-ID: <2090170786.5419874.1348837785801.JavaMail.root@advansee.com> (raw)
In-Reply-To: <863918819.5372716.1348777862610.JavaMail.root@advansee.com>

On Thursday, September 27, 2012 10:31:02 PM, Beno?t Th?baudeau wrote:
> On mxc, each SDHC instance has a dedicated clock, so gd->sdhc_clk is
> not
> suitable for the multi-instance use case (initialization made
> directly with
> fsl_esdhc_initialize()).
> 
> This patch fixes this issue by adding a configuration field for the
> SDHC input
> clock frequency.
> 
> Signed-off-by: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Eric B?nard <eric@eukrea.com>
> Cc: Otavio Salvador <otavio@ossystems.com.br>
> Cc: Fabio Estevam <fabio.estevam@freescale.com>
> Cc: Jason Liu <r64343@freescale.com>
> Cc: Matt Sealey <matt@genesi-usa.com>
> Cc: Andy Fleming <afleming@gmail.com>
> ---
> This patch should be applied after (series of series...):
> http://patchwork.ozlabs.org/patch/187467/
> http://patchwork.ozlabs.org/patch/187468/
> http://patchwork.ozlabs.org/patch/187475/
> 
>  .../board/esg/ima3-mx53/ima3-mx53.c                |    1 +
>  .../board/freescale/mx35pdk/mx35pdk.c              |    2 ++
>  .../board/freescale/mx51evk/mx51evk.c              |    4 ++++
>  .../board/freescale/mx53ard/mx53ard.c              |    4 ++++
>  .../board/freescale/mx53evk/mx53evk.c              |    4 ++++
>  .../board/freescale/mx53loco/mx53loco.c            |    3 +++
>  .../board/freescale/mx53smd/mx53smd.c              |    3 +++
>  .../board/freescale/mx6qarm2/mx6qarm2.c            |    4 ++++
>  .../board/freescale/mx6qsabrelite/mx6qsabrelite.c  |    3 +++
>  .../board/genesi/mx51_efikamx/efikamx.c            |    4 ++++
>  .../board/ttcontrol/vision2/vision2.c              |    2 ++
>  .../drivers/mmc/fsl_esdhc.c                        |    5 +++--
>  .../include/fsl_esdhc.h                            |    1 +
>  13 files changed, 38 insertions(+), 2 deletions(-)
> 
> diff --git u-boot-imx-e1eb75b.orig/board/esg/ima3-mx53/ima3-mx53.c
> u-boot-imx-e1eb75b/board/esg/ima3-mx53/ima3-mx53.c
> index e947330..41d6bb6 100644
> --- u-boot-imx-e1eb75b.orig/board/esg/ima3-mx53/ima3-mx53.c
> +++ u-boot-imx-e1eb75b/board/esg/ima3-mx53/ima3-mx53.c
> @@ -217,6 +217,7 @@ int board_mmc_init(bd_t *bis)
>  		PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
>  		PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
>  
> +	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
>  	return fsl_esdhc_initialize(bis, &esdhc_cfg);
>  }
>  #endif
> diff --git u-boot-imx-e1eb75b.orig/board/freescale/mx35pdk/mx35pdk.c
> u-boot-imx-e1eb75b/board/freescale/mx35pdk/mx35pdk.c
> index 7cb6b30..a12531f 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx35pdk/mx35pdk.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx35pdk/mx35pdk.c
> @@ -27,6 +27,7 @@
>  #include <asm/errno.h>
>  #include <asm/arch/imx-regs.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <asm/arch/mx35_pins.h>
>  #include <asm/arch/iomux.h>
>  #include <i2c.h>
> @@ -292,6 +293,7 @@ int board_mmc_init(bd_t *bis)
>  	mxc_request_iomux(MX35_PIN_SD1_DATA2, MUX_CONFIG_FUNC);
>  	mxc_request_iomux(MX35_PIN_SD1_DATA3, MUX_CONFIG_FUNC);
>  
> +	esdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);
>  	return fsl_esdhc_initialize(bis, &esdhc_cfg);
>  }
>  
> diff --git u-boot-imx-e1eb75b.orig/board/freescale/mx51evk/mx51evk.c
> u-boot-imx-e1eb75b/board/freescale/mx51evk/mx51evk.c
> index a94701c..3412952 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx51evk/mx51evk.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx51evk/mx51evk.c
> @@ -29,6 +29,7 @@
>  #include <asm/errno.h>
>  #include <asm/arch/sys_proto.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <i2c.h>
>  #include <mmc.h>
>  #include <fsl_esdhc.h>
> @@ -358,6 +359,9 @@ int board_mmc_init(bd_t *bis)
>  	u32 index;
>  	s32 status = 0;
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +	esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM;
>  			index++) {
>  		switch (index) {
> diff --git u-boot-imx-e1eb75b.orig/board/freescale/mx53ard/mx53ard.c
> u-boot-imx-e1eb75b/board/freescale/mx53ard/mx53ard.c
> index 08c7795..2fc8570 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx53ard/mx53ard.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx53ard/mx53ard.c
> @@ -26,6 +26,7 @@
>  #include <asm/arch/mx5x_pins.h>
>  #include <asm/arch/sys_proto.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <asm/arch/iomux.h>
>  #include <asm/errno.h>
>  #include <netdev.h>
> @@ -106,6 +107,9 @@ int board_mmc_init(bd_t *bis)
>  	u32 index;
>  	s32 status = 0;
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +	esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
>  		switch (index) {
>  		case 0:
> diff --git u-boot-imx-e1eb75b.orig/board/freescale/mx53evk/mx53evk.c
> u-boot-imx-e1eb75b/board/freescale/mx53evk/mx53evk.c
> index b11a94c..bb4621d 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx53evk/mx53evk.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx53evk/mx53evk.c
> @@ -26,6 +26,7 @@
>  #include <asm/arch/mx5x_pins.h>
>  #include <asm/arch/sys_proto.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <asm/arch/iomux.h>
>  #include <asm/errno.h>
>  #include <asm/imx-common/boot_mode.h>
> @@ -232,6 +233,9 @@ int board_mmc_init(bd_t *bis)
>  	u32 index;
>  	s32 status = 0;
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +	esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
>  		switch (index) {
>  		case 0:
> diff --git
> u-boot-imx-e1eb75b.orig/board/freescale/mx53loco/mx53loco.c
> u-boot-imx-e1eb75b/board/freescale/mx53loco/mx53loco.c
> index 8f82125..8f9b8df 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx53loco/mx53loco.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx53loco/mx53loco.c
> @@ -192,6 +192,9 @@ int board_mmc_init(bd_t *bis)
>  	u32 index;
>  	s32 status = 0;
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +	esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
>  		switch (index) {
>  		case 0:
> diff --git u-boot-imx-e1eb75b.orig/board/freescale/mx53smd/mx53smd.c
> u-boot-imx-e1eb75b/board/freescale/mx53smd/mx53smd.c
> index 7f35ddd..761f727 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx53smd/mx53smd.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx53smd/mx53smd.c
> @@ -26,6 +26,7 @@
>  #include <asm/arch/mx5x_pins.h>
>  #include <asm/arch/sys_proto.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <asm/arch/iomux.h>
>  #include <asm/errno.h>
>  #include <netdev.h>
> @@ -144,6 +145,8 @@ int board_mmc_init(bd_t *bis)
>  	u32 index;
>  	s32 status = 0;
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
>  		switch (index) {
>  		case 0:
> diff --git
> u-boot-imx-e1eb75b.orig/board/freescale/mx6qarm2/mx6qarm2.c
> u-boot-imx-e1eb75b/board/freescale/mx6qarm2/mx6qarm2.c
> index d43b327..dad4b95 100644
> --- u-boot-imx-e1eb75b.orig/board/freescale/mx6qarm2/mx6qarm2.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx6qarm2/mx6qarm2.c
> @@ -24,6 +24,7 @@
>  #include <asm/io.h>
>  #include <asm/arch/imx-regs.h>
>  #include <asm/arch/mx6x_pins.h>
> +#include <asm/arch/clock.h>
>  #include <asm/errno.h>
>  #include <asm/gpio.h>
>  #include <asm/imx-common/iomux-v3.h>
> @@ -139,6 +140,9 @@ int board_mmc_init(bd_t *bis)
>  	s32 status = 0;
>  	u32 index = 0;
>  
> +	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> +	usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
> +
>  	for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
>  		switch (index) {
>  		case 0:
> diff --git
> u-boot-imx-e1eb75b.orig/board/freescale/mx6qsabrelite/mx6qsabrelite.c
> u-boot-imx-e1eb75b/board/freescale/mx6qsabrelite/mx6qsabrelite.c
> index 4b4e89b..3af8437 100644
> ---
> u-boot-imx-e1eb75b.orig/board/freescale/mx6qsabrelite/mx6qsabrelite.c
> +++ u-boot-imx-e1eb75b/board/freescale/mx6qsabrelite/mx6qsabrelite.c
> @@ -264,6 +264,9 @@ int board_mmc_init(bd_t *bis)
>         s32 status = 0;
>         u32 index = 0;
>  
> +	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> +	usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
> +
>         for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
>  	       switch (index) {
>  	       case 0:
> diff --git
> u-boot-imx-e1eb75b.orig/board/genesi/mx51_efikamx/efikamx.c
> u-boot-imx-e1eb75b/board/genesi/mx51_efikamx/efikamx.c
> index cfd2e93..e334c01 100644
> --- u-boot-imx-e1eb75b.orig/board/genesi/mx51_efikamx/efikamx.c
> +++ u-boot-imx-e1eb75b/board/genesi/mx51_efikamx/efikamx.c
> @@ -29,6 +29,7 @@
>  #include <asm/errno.h>
>  #include <asm/arch/sys_proto.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <i2c.h>
>  #include <mmc.h>
>  #include <fsl_esdhc.h>
> @@ -349,6 +350,9 @@ int board_mmc_init(bd_t *bis)
>  		gpio_direction_input(EFIKASB_SDHC1_CD);
>  	}
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
> +	esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
> +
>  	ret = fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
>  
>  	if (machine_is_efikasb()) {
> diff --git u-boot-imx-e1eb75b.orig/board/ttcontrol/vision2/vision2.c
> u-boot-imx-e1eb75b/board/ttcontrol/vision2/vision2.c
> index f28eab0..ba3307b 100644
> --- u-boot-imx-e1eb75b.orig/board/ttcontrol/vision2/vision2.c
> +++ u-boot-imx-e1eb75b/board/ttcontrol/vision2/vision2.c
> @@ -28,6 +28,7 @@
>  #include <asm/arch/imx-regs.h>
>  #include <asm/arch/mx5x_pins.h>
>  #include <asm/arch/crm_regs.h>
> +#include <asm/arch/clock.h>
>  #include <asm/arch/iomux.h>
>  #include <asm/gpio.h>
>  #include <asm/arch/sys_proto.h>
> @@ -590,6 +591,7 @@ int board_mmc_init(bd_t *bis)
>  	mxc_iomux_set_pad(MX51_PIN_GPIO1_1,
>  		PAD_CTL_HYS_ENABLE);
>  
> +	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
>  	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
>  }
>  #endif
> diff --git u-boot-imx-e1eb75b.orig/drivers/mmc/fsl_esdhc.c
> u-boot-imx-e1eb75b/drivers/mmc/fsl_esdhc.c
> index 3f8d30d..aa6a9f1 100644
> --- u-boot-imx-e1eb75b.orig/drivers/mmc/fsl_esdhc.c
> +++ u-boot-imx-e1eb75b/drivers/mmc/fsl_esdhc.c
> @@ -410,12 +410,12 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd
> *cmd, struct mmc_data *data)
>  	return 0;
>  }
>  
> -void set_sysctl(struct mmc *mmc, uint clock)
> +static void set_sysctl(struct mmc *mmc, uint clock)
>  {
> -	int sdhc_clk = gd->sdhc_clk;
>  	int div, pre_div;
>  	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
>  	volatile struct fsl_esdhc *regs = (struct fsl_esdhc
>  	*)cfg->esdhc_base;
> +	int sdhc_clk = cfg->sdhc_clk;
>  	uint clk;
>  
>  	if (clock < mmc->f_min)
> @@ -598,6 +598,7 @@ int fsl_esdhc_mmc_init(bd_t *bis)
>  	cfg = malloc(sizeof(struct fsl_esdhc_cfg));
>  	memset(cfg, 0, sizeof(struct fsl_esdhc_cfg));
>  	cfg->esdhc_base = CONFIG_SYS_FSL_ESDHC_ADDR;
> +	cfg->sdhc_clk = gd->sdhc_clk;
>  	return fsl_esdhc_initialize(bis, cfg);
>  }
>  
> diff --git u-boot-imx-e1eb75b.orig/include/fsl_esdhc.h
> u-boot-imx-e1eb75b/include/fsl_esdhc.h
> index 4e321e7..47d2fe4 100644
> --- u-boot-imx-e1eb75b.orig/include/fsl_esdhc.h
> +++ u-boot-imx-e1eb75b/include/fsl_esdhc.h
> @@ -167,6 +167,7 @@
>  
>  struct fsl_esdhc_cfg {
>  	u32	esdhc_base;
> +	u32	sdhc_clk;
>  };
>  
>  /* Select the correct accessors depending on endianess */
> 

Note that, just like for http://patchwork.ozlabs.org/patch/187454/, this will
have to be extended to new boards like mx6qsabresd if this is applied to
u-boot-imx/next rather than to u-boot-imx/master.

Best regards,
Beno?t

  reply	other threads:[~2012-09-28 13:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-27 20:31 [U-Boot] [PATCH] mxc: Fix SDHC multi-instance clock Benoît Thébaudeau
2012-09-28 13:09 ` Benoît Thébaudeau [this message]
2012-10-01 18:36 ` [U-Boot] [PATCH v2] " Benoît Thébaudeau
2012-10-09 10:35   ` Benoît Thébaudeau
2012-10-09 10:58     ` Stefano Babic
2012-10-10 11:29   ` Stefano Babic

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=2090170786.5419874.1348837785801.JavaMail.root@advansee.com \
    --to=benoit.thebaudeau@advansee.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.