From: Jaehoon Chung <jh80.chung@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 8/9] mmc: tegra: port to standard clock/reset APIs
Date: Thu, 28 Jul 2016 10:09:30 +0900 [thread overview]
Message-ID: <57995B4A.3070207@samsung.com> (raw)
In-Reply-To: <20160727212457.20038-8-swarren@wwwdotorg.org>
Hi Stephen,
On 07/28/2016 06:24 AM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> Tegra186 supports the new standard clock and reset APIs. Older Tegra SoCs
> still use custom APIs. Enhance the Tegra MMC driver so that it can operate
> with either set of APIs.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
> ---
> arch/arm/include/asm/arch-tegra/tegra_mmc.h | 8 ++++-
> drivers/mmc/tegra_mmc.c | 55 ++++++++++++++++++++++++-----
> 2 files changed, 53 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-tegra/tegra_mmc.h b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> index 75e56c4ea786..07ef4c04c858 100644
> --- a/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> +++ b/arch/arm/include/asm/arch-tegra/tegra_mmc.h
> @@ -9,6 +9,9 @@
> #ifndef __TEGRA_MMC_H_
> #define __TEGRA_MMC_H_
>
> +#include <common.h>
> +#include <clk.h>
> +#include <reset.h>
> #include <fdtdec.h>
> #include <asm/gpio.h>
>
> @@ -134,7 +137,10 @@ struct mmc_host {
> int id; /* device id/number, 0-3 */
> int enabled; /* 1 to enable, 0 to disable */
> int width; /* Bus Width, 1, 4 or 8 */
> -#ifndef CONFIG_TEGRA186
> +#ifdef CONFIG_TEGRA186
> + struct reset_ctl reset_ctl;
> + struct clk clk;
> +#else
> enum periph_id mmc_id; /* Peripheral ID: PERIPH_ID_... */
> #endif
> struct gpio_desc cd_gpio; /* Change Detect GPIO */
> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c
> index c9d9432e5e87..b27ca635ac50 100644
> --- a/drivers/mmc/tegra_mmc.c
> +++ b/drivers/mmc/tegra_mmc.c
> @@ -9,6 +9,7 @@
>
> #include <bouncebuf.h>
> #include <common.h>
> +#include <dm/device.h>
> #include <asm/gpio.h>
> #include <asm/io.h>
> #ifndef CONFIG_TEGRA186
> @@ -359,11 +360,14 @@ static void mmc_change_clock(struct mmc_host *host, uint clock)
> */
> if (clock == 0)
> goto out;
> -#ifndef CONFIG_TEGRA186
> +#ifdef CONFIG_TEGRA186
> + {
> + ulong rate = clk_set_rate(&host->clk, clock);
> + div = (rate + clock - 1) / clock;
> + }
It seems that doesn't need to add the bracket.
> +#else
> clock_adjust_periph_pll_div(host->mmc_id, CLOCK_ID_PERIPH, clock,
> &div);
> -#else
> - div = (20000000 + clock - 1) / clock;
> #endif
> debug("div = %d\n", div);
>
> @@ -538,6 +542,9 @@ static int do_mmc_init(int dev_index, bool removable)
> {
> struct mmc_host *host;
> struct mmc *mmc;
> +#ifdef CONFIG_TEGRA186
> + int ret;
> +#endif
>
> /* DT should have been read & host config filled in */
> host = &mmc_host[dev_index];
> @@ -549,7 +556,21 @@ static int do_mmc_init(int dev_index, bool removable)
> gpio_get_number(&host->cd_gpio));
>
> host->clock = 0;
> -#ifndef CONFIG_TEGRA186
> +
> +#ifdef CONFIG_TEGRA186
> + ret = reset_assert(&host->reset_ctl);
> + if (ret)
> + return ret;
> + ret = clk_enable(&host->clk);
> + if (ret)
> + return ret;
> + ret = clk_set_rate(&host->clk, 20000000);
> + if (IS_ERR_VALUE(ret))
> + return ret;
> + ret = reset_deassert(&host->reset_ctl);
> + if (ret)
> + return ret;
> +#else
> clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
> #endif
>
> @@ -576,11 +597,7 @@ static int do_mmc_init(int dev_index, bool removable)
> * (actually 52MHz)
> */
> host->cfg.f_min = 375000;
> -#ifndef CONFIG_TEGRA186
> host->cfg.f_max = 48000000;
> -#else
> - host->cfg.f_max = 375000;
> -#endif
>
> host->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
>
> @@ -612,7 +629,27 @@ static int mmc_get_config(const void *blob, int node, struct mmc_host *host,
> return -FDT_ERR_NOTFOUND;
> }
>
> -#ifndef CONFIG_TEGRA186
> +#ifdef CONFIG_TEGRA186
> + {
> + /*
> + * FIXME: This variable should go away when the MMC device
> + * actually is a udevice.
> + */
> + struct udevice dev;
> + int ret;
> + dev.of_offset = node;
> + ret = reset_get_by_name(&dev, "sdmmc", &host->reset_ctl);
> + if (ret) {
> + debug("reset_get_by_index() failed: %d\n", ret);
> + return ret;
> + }
> + ret = clk_get_by_name(&dev, "sdmmc", &host->clk);
> + if (ret) {
> + debug("clk_get_by_index() failed: %d\n", ret);
> + return ret;
> + }
> + }
Ditto.
Best Regards,
Jaehoon Chung
> +#else
> host->mmc_id = clock_decode_periph_id(blob, node);
> if (host->mmc_id == PERIPH_ID_NONE) {
> debug("%s: could not decode periph id\n", __func__);
>
next prev parent reply other threads:[~2016-07-28 1:09 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-27 21:24 [U-Boot] [PATCH 1/9] ARM: tegra: adapt to latest HSP DT binding Stephen Warren
2016-07-27 21:24 ` [U-Boot] [PATCH 2/9] ARM: tegra: add BPMP DT bindings Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-08-01 15:28 ` Stephen Warren
2016-07-27 21:24 ` [U-Boot] [PATCH 3/9] ARM: tegra: add BPMP and dependencies to Tegra186 DT Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-07-27 21:24 ` [U-Boot] [PATCH 4/9] misc: add Tegra BPMP driver Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-08-01 15:41 ` Stephen Warren
2016-08-01 18:46 ` Stephen Warren
2016-07-27 21:24 ` [U-Boot] [PATCH 5/9] clock: add Tegra186 clock driver Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-08-01 15:46 ` Stephen Warren
2016-08-05 1:36 ` Simon Glass
2016-08-05 16:17 ` Stephen Warren
2016-07-27 21:24 ` [U-Boot] [PATCH 6/9] reset: add Tegra186 reset driver Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-07-27 21:24 ` [U-Boot] [PATCH 7/9] power domain: add Tegra186 driver Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-07-27 21:24 ` [U-Boot] [PATCH 8/9] mmc: tegra: port to standard clock/reset APIs Stephen Warren
2016-07-28 1:09 ` Jaehoon Chung [this message]
2016-07-28 16:03 ` Stephen Warren
2016-08-01 2:20 ` Simon Glass
2016-08-01 15:50 ` Stephen Warren
2016-08-04 1:16 ` Simon Glass
2016-08-04 18:59 ` Stephen Warren
2016-08-04 21:42 ` Tom Warren
2016-07-27 21:24 ` [U-Boot] [PATCH 9/9] ARM: tegra: call tegra_board_init on Tegra186 Stephen Warren
2016-08-01 1:02 ` Simon Glass
2016-08-01 1:01 ` [U-Boot] [PATCH 1/9] ARM: tegra: adapt to latest HSP DT binding Simon Glass
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=57995B4A.3070207@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 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.