public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jaehoon Chung <jh80.chung@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH RESEND] MMC: DWMMC: Correct the CLKDIV register value
Date: Thu, 06 Feb 2014 10:54:07 +0900	[thread overview]
Message-ID: <52F2EB3F.7020803@samsung.com> (raw)
In-Reply-To: <CAPs=JDfekAnaBiGCftZNfJ5LaURRXSUf1BGMQgeBO4RCWGQOoA@mail.gmail.com>

Hi.

Right, It's reasonable. Looks good to me. 

Acked-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

On 02/05/2014 02:58 PM, Rajeshwari Birje wrote:
> Hi All,
> 
> CCing Jaehoon Chung.
> 
> Regards,
> Rajeshwari
> 
> On Wed, Feb 5, 2014 at 10:48 AM, Rajeshwari Shinde
> <rajeshwari.s@samsung.com> wrote:
>> From: Rajeshwari S Shinde <rajeshwari.s@samsung.com>
>>
>> This patch corrects the divider value written to CLKDIV register.
>> Since SDCLKIN is divided inside controller by the DIVRATIO value set
>> in the CLKSEL register, we need to use the same output clock value to
>> calculate the CLKDIV value.
>> as per user manual: cclk_in = SDCLKIN / (DIVRATIO + 1)
>>
>> Input parameter to mmc_clk is changed to dwmci_host, since
>> we need the same to read DWMCI_CLKSEL register.
>>
>> This improves the read timing values for channel 0 on SMDK5250
>> from 0.288sec to 0.144sec
>>
>> Signed-off-by: Rajeshwari S Shinde <rajeshwari.s@samsung.com>
>> ---
>>  arch/arm/include/asm/arch-exynos/dwmmc.h |  4 ++++
>>  drivers/mmc/dw_mmc.c                     |  2 +-
>>  drivers/mmc/exynos_dw_mmc.c              | 17 +++++++++++++++--
>>  include/dwmmc.h                          |  2 +-
>>  4 files changed, 21 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/arm/include/asm/arch-exynos/dwmmc.h b/arch/arm/include/asm/arch-exynos/dwmmc.h
>> index 09d739d..a7ca12c 100644
>> --- a/arch/arm/include/asm/arch-exynos/dwmmc.h
>> +++ b/arch/arm/include/asm/arch-exynos/dwmmc.h
>> @@ -23,6 +23,10 @@
>>  #define MPSCTRL_ENCRYPTION             (0x1<<1)
>>  #define MPSCTRL_VALID                  (0x1<<0)
>>
>> +/* CLKSEL Register */
>> +#define DWMCI_DIVRATIO_BIT             24
>> +#define DWMCI_DIVRATIO_MASK            0x7
>> +
>>  #ifdef CONFIG_OF_CONTROL
>>  int exynos_dwmmc_init(const void *blob);
>>  #endif
>> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
>> index 4cec5aa..d45c15c 100644
>> --- a/drivers/mmc/dw_mmc.c
>> +++ b/drivers/mmc/dw_mmc.c
>> @@ -237,7 +237,7 @@ static int dwmci_setup_bus(struct dwmci_host *host, u32 freq)
>>          * host->bus_hz should be set from user.
>>          */
>>         if (host->get_mmc_clk)
>> -               sclk = host->get_mmc_clk(host->dev_index);
>> +               sclk = host->get_mmc_clk(host);
>>         else if (host->bus_hz)
>>                 sclk = host->bus_hz;
>>         else {
>> diff --git a/drivers/mmc/exynos_dw_mmc.c b/drivers/mmc/exynos_dw_mmc.c
>> index b3e5c5e..de8cdcc 100644
>> --- a/drivers/mmc/exynos_dw_mmc.c
>> +++ b/drivers/mmc/exynos_dw_mmc.c
>> @@ -29,9 +29,22 @@ static void exynos_dwmci_clksel(struct dwmci_host *host)
>>         dwmci_writel(host, DWMCI_CLKSEL, host->clksel_val);
>>  }
>>
>> -unsigned int exynos_dwmci_get_clk(int dev_index)
>> +unsigned int exynos_dwmci_get_clk(struct dwmci_host *host)
>>  {
>> -       return get_mmc_clk(dev_index);
>> +       unsigned long sclk;
>> +       int8_t clk_div;
>> +
>> +       /*
>> +        * Since SDCLKIN is divided inside controller by the DIVRATIO
>> +        * value set in the CLKSEL register, we need to use the same output
>> +        * clock value to calculate the CLKDIV value.
>> +        * as per user manual:cclk_in = SDCLKIN / (DIVRATIO + 1)
>> +        */
>> +       clk_div = ((dwmci_readl(host, DWMCI_CLKSEL) >> DWMCI_DIVRATIO_BIT)
>> +                       & DWMCI_DIVRATIO_MASK) + 1;
>> +       sclk = get_mmc_clk(host->dev_index);
>> +
>> +       return sclk / clk_div;
>>  }
>>
>>  static void exynos_dwmci_board_init(struct dwmci_host *host)
>> diff --git a/include/dwmmc.h b/include/dwmmc.h
>> index a02dd67..b641558 100644
>> --- a/include/dwmmc.h
>> +++ b/include/dwmmc.h
>> @@ -142,7 +142,7 @@ struct dwmci_host {
>>
>>         void (*clksel)(struct dwmci_host *host);
>>         void (*board_init)(struct dwmci_host *host);
>> -       unsigned int (*get_mmc_clk)(int dev_index);
>> +       unsigned int (*get_mmc_clk)(struct dwmci_host *host);
>>  };
>>
>>  struct dwmci_idmac {
>> --
>> 1.7.12.4
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
> 
> 
> 

  reply	other threads:[~2014-02-06  1:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-05  5:18 [U-Boot] [PATCH RESEND] MMC: DWMMC: Correct the CLKDIV register value Rajeshwari Shinde
2014-02-05  5:58 ` Rajeshwari Birje
2014-02-06  1:54   ` Jaehoon Chung [this message]
2014-02-07  4:42     ` Rajeshwari Birje
2014-02-07 15:40 ` Pantelis Antoniou

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=52F2EB3F.7020803@samsung.com \
    --to=jh80.chung@samsung.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