From: Jaehoon Chung <jh80.chung@samsung.com>
To: Addy Ke <addy.ke@rock-chips.com>,
robh+dt@kernel.org, pawel.moll@arm.com, mark.rutland@arm.com,
ijc+devicetree@hellion.org.uk, galak@codeaurora.org,
rdunlap@infradead.org, tgih.jun@samsung.com,
jh80.chung@samsung.com, chris@printf.net, ulf.hansson@linaro.org,
dinguyen@altera.com, heiko@sntech.de, olof@lixom.net,
dianders@chromium.org
Cc: devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
zhenfu.fang@rock-chips.com, cf@rock-chips.com,
lintao@rock-chips.com, chenfen@rock-chips.com,
zyf@rock-chips.com, xjq@rock-chips.com, huangtao@rock-chips.com,
zyw@rock-chips.com, yzq@rock-chips.com, hj@rock-chips.com,
kever.yang@rock-chips.com, zhangqing@rock-chips.com,
hl@rock-chips.com
Subject: Re: [PATCH] mmc: dw_mmc: add support for RK3288
Date: Thu, 07 Aug 2014 17:47:38 +0900 [thread overview]
Message-ID: <53E33D2A.7030109@samsung.com> (raw)
In-Reply-To: <1406786498-3935-1-git-send-email-addy.ke@rock-chips.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Best Regards,
Jaehoon Chung
On 07/31/2014 03:01 PM, Addy Ke wrote:
> This patch focuses on clock setting for RK3288 mmc controller.
>
> In RK3288 mmc controller, CLKDIV register can only be set 0 or 1,
> and if DDR 8bit mode, CLKDIV register must be set 1.
>
> Reported-by Doug Anderson <dianders@chromium.org>
> Suggested-by: Jaehoon Chung <jh80.chung@samsung.com>
> Suggested-by: Doug Anderson <dianders@chromium.org>
> Signed-off-by: Addy Ke <addy.ke@rock-chips.com>
> ---
> changes since v1:
> - dw_mci_rk3288_setup_clock: do not call clk_get_rate(), just use the
> host->bus_hz which is already called by dw_mmc.c, suggested by Jaehoon Chung
>
> changes since v2:
> - merge from ChromiumOS tree, fix up clock settting bug,
> which cause DDR50 mode for emmc not to work, reported by Doug Anderson
> - remove MMC_TIMING_UHS_DDR50 condition, because on RK3288 only emmc can work
> in 8bit mode, suggested by Doug Anderson
>
> .../devicetree/bindings/mmc/rockchip-dw-mshc.txt | 6 ++-
> drivers/mmc/host/dw_mmc-pltfm.c | 56 +++++++++++++++++++++-
> 2 files changed, 58 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt b/Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
> index c559f3f..c327c2d 100644
> --- a/Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
> +++ b/Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
> @@ -10,12 +10,14 @@ extensions to the Synopsys Designware Mobile Storage Host Controller.
> Required Properties:
>
> * compatible: should be
> - - "rockchip,rk2928-dw-mshc": for Rockchip RK2928 and following
> + - "rockchip,rk2928-dw-mshc": for Rockchip RK2928 and following,
> + before RK3288
> + - "rockchip,rk3288-dw-mshc": for Rockchip RK3288
>
> Example:
>
> rkdwmmc0@12200000 {
> - compatible = "rockchip,rk2928-dw-mshc";
> + compatible = "rockchip,rk3288-dw-mshc";
> reg = <0x12200000 0x1000>;
> interrupts = <0 75 0>;
> #address-cells = <1>;
> diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c
> index d4a47a9..b547f7a 100644
> --- a/drivers/mmc/host/dw_mmc-pltfm.c
> +++ b/drivers/mmc/host/dw_mmc-pltfm.c
> @@ -21,17 +21,67 @@
> #include <linux/mmc/mmc.h>
> #include <linux/mmc/dw_mmc.h>
> #include <linux/of.h>
> +#include <linux/clk.h>
>
> #include "dw_mmc.h"
> #include "dw_mmc-pltfm.h"
>
> +#define RK3288_CLKGEN_DIV 2
> +
> static void dw_mci_pltfm_prepare_command(struct dw_mci *host, u32 *cmdr)
> {
> *cmdr |= SDMMC_CMD_USE_HOLD_REG;
> }
>
> -static const struct dw_mci_drv_data rockchip_drv_data = {
> +static int dw_mci_rk3288_setup_clock(struct dw_mci *host)
> +{
> + host->bus_hz /= RK3288_CLKGEN_DIV;
> +
> + return 0;
> +}
> +
> +static void dw_mci_rk3288_set_ios(struct dw_mci *host, struct mmc_ios *ios)
> +{
> + int ret;
> + unsigned int cclkin;
> + u32 bus_hz;
> +
> + /*
> + * cclkin: source clock of mmc controller.
> + * bus_hz: card interface clock generated by CLKGEN.
> + * bus_hz = cclkin / RK3288_CLKGEN_DIV;
> + * ios->clock = (div == 0) ? bus_hz : (bus_hz / (2 * div))
> + *
> + * Note: div can only be 0 or 1
> + * if DDR50 8bit mode(only emmc work in 8bit mode),
> + * div must be set 1
> + */
> + if ((ios->bus_width == MMC_BUS_WIDTH_8) &&
> + (ios->timing == MMC_TIMING_MMC_DDR52))
> + cclkin = 2 * ios->clock * RK3288_CLKGEN_DIV;
> + else
> + cclkin = ios->clock * RK3288_CLKGEN_DIV;
> +
> + ret = clk_set_rate(host->ciu_clk, cclkin);
> + if (ret)
> + dev_warn(host->dev, "failed to set rate %uHz\n", ios->clock);
> +
> + bus_hz = clk_get_rate(host->ciu_clk) / RK3288_CLKGEN_DIV;
> + if (bus_hz != host->bus_hz) {
> + host->bus_hz = bus_hz;
> + /* force dw_mci_setup_bus() */
> + host->current_speed = 0;
> + }
> +}
> +
> +static const struct dw_mci_drv_data rk2928_drv_data = {
> + .prepare_command = dw_mci_pltfm_prepare_command,
> +};
> +
> +static const struct dw_mci_drv_data rk3288_drv_data = {
> .prepare_command = dw_mci_pltfm_prepare_command,
> + .set_ios = dw_mci_rk3288_set_ios,
> + .setup_clock = dw_mci_rk3288_setup_clock,
> };
>
> static const struct dw_mci_drv_data socfpga_drv_data = {
> @@ -95,7 +145,9 @@ EXPORT_SYMBOL_GPL(dw_mci_pltfm_pmops);
> static const struct of_device_id dw_mci_pltfm_match[] = {
> { .compatible = "snps,dw-mshc", },
> { .compatible = "rockchip,rk2928-dw-mshc",
> - .data = &rockchip_drv_data },
> + .data = &rk2928_drv_data },
> + { .compatible = "rockchip,rk3288-dw-mshc",
> + .data = &rk3288_drv_data },
> { .compatible = "altr,socfpga-dw-mshc",
> .data = &socfpga_drv_data },
> {},
>
next prev parent reply other threads:[~2014-08-07 8:47 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-05 12:59 [PATCH] mmc: dw_mmc: add support for RK3288 addy ke
2014-07-05 12:59 ` addy ke
2014-07-07 2:07 ` Jaehoon Chung
2014-07-07 2:42 ` addy ke
2014-07-10 3:31 ` [PATCH v2] " Addy Ke
2014-07-29 4:52 ` Doug Anderson
2014-07-29 16:38 ` Doug Anderson
2014-07-31 6:01 ` [PATCH] " Addy Ke
2014-07-31 15:40 ` Doug Anderson
2014-08-12 12:17 ` Ulf Hansson
2014-08-07 8:47 ` Jaehoon Chung [this message]
[not found] ` <1406786498-3935-1-git-send-email-addy.ke-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2014-08-14 8:01 ` [PATCH] mmc: dw_mmc: move rockchip related code to a separate file Addy Ke
2014-08-14 8:01 ` Addy Ke
2014-08-14 12:16 ` Bartlomiej Zolnierkiewicz
2014-08-14 17:09 ` Doug Anderson
2014-08-15 19:52 ` Heiko Stübner
2014-08-19 4:36 ` [PATCH v2] " Addy Ke
2014-08-19 5:08 ` Jaehoon Chung
2014-08-19 17:28 ` Doug Anderson
2014-08-19 17:28 ` Doug Anderson
2014-08-29 11:05 ` Ulf Hansson
2014-08-29 11:05 ` Ulf Hansson
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=53E33D2A.7030109@samsung.com \
--to=jh80.chung@samsung.com \
--cc=addy.ke@rock-chips.com \
--cc=cf@rock-chips.com \
--cc=chenfen@rock-chips.com \
--cc=chris@printf.net \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=dinguyen@altera.com \
--cc=galak@codeaurora.org \
--cc=heiko@sntech.de \
--cc=hj@rock-chips.com \
--cc=hl@rock-chips.com \
--cc=huangtao@rock-chips.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=kever.yang@rock-chips.com \
--cc=lintao@rock-chips.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=olof@lixom.net \
--cc=pawel.moll@arm.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=tgih.jun@samsung.com \
--cc=ulf.hansson@linaro.org \
--cc=xjq@rock-chips.com \
--cc=yzq@rock-chips.com \
--cc=zhangqing@rock-chips.com \
--cc=zhenfu.fang@rock-chips.com \
--cc=zyf@rock-chips.com \
--cc=zyw@rock-chips.com \
/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.