From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
linux-mmc <linux-mmc@vger.kernel.org>, Simon <horms@verge.net.au>,
Magnus <magnus.damm@gmail.com>,
Linux-SH <linux-sh@vger.kernel.org>,
kobayashi <keita.kobayashi.ym@renesas.com>
Subject: Re: [PATCH 3/3 v3] mmc: sh_mmcif: calculate best clock with parent clock
Date: Tue, 21 Apr 2015 16:07:37 +0300 [thread overview]
Message-ID: <1433253.xXE7ok9ACb@avalon> (raw)
In-Reply-To: <CAMuHMdUM4Cizij6q+6o9mADF_UjkzpZSvsUCdG+Y=PHo=A_qLw@mail.gmail.com>
Hello,
On Tuesday 21 April 2015 12:31:21 Geert Uytterhoeven wrote:
> On Tue, Apr 21, 2015 at 10:31 AM, Kuninori Morimoto wrote:
> > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> >
> > MMCIF IP on R-Car series has parent clock which can be set
> > several rate, and it was not implemented on old SH-Mobile series
> > (= SH-Mobile series parent clock was fixed rate)
> > R-Car series MMCIF can use more high speed access if it setup
> > parent clock. This patch adds parent clock setup method,
> > and r8a7790/r8a7791 can use it.
> >
> > renesas,mmcif already contain renesas,mmcif-r8a7790/r8a7791 on
> > compatible string. So there is no update for binding Document.
> >
> > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> > Tested-by: Keita Kobayashi <keita.kobayashi.ym@renesas.com>
> >
> > diff --git a/drivers/mmc/host/sh_mmcif.c b/drivers/mmc/host/sh_mmcif.c
> > index 5282c5b..6ae836b 100644
> > --- a/drivers/mmc/host/sh_mmcif.c
> > +++ b/drivers/mmc/host/sh_mmcif.c
> > @@ -224,6 +225,12 @@ enum mmcif_wait_for {
> > MMCIF_WAIT_FOR_STOP,
> > };
> >
> > +struct sh_mmcif_parent_clk {
I'm not sure I would call this parent clock. It refers to the frequency of the
functional clock provided to the MMCIF, there's no concept of parent there.
True, the clock referenced by the MMCIF DT node is an MSTP gate clock, and
frequency control is implemented in the MSTP clock parent, but that hardware
architecture is internal to the CPG and shouldn't be considered by the MMCIF.
> > + unsigned int max; /* if exist: R-Car has MMC CKCR on CPG */
> > + unsigned int min; /* if exist: R-Car has MMC CKCR on CPG */
> > + u32 clkdiv_map; /* see CE_CLK_CTRL::CLKDIV */
> > +};
> > +
> > struct sh_mmcif_host {
> > struct mmc_host *mmc;
> > struct mmc_request *mrq;
> > @@ -249,6 +256,7 @@ struct sh_mmcif_host {
> > bool ccs_enable; /* Command Completion Signal
> > support */
> > bool clk_ctrl2_enable;
> > struct mutex thread_lock;
> > + const struct sh_mmcif_parent_clk *parent_clk;
> >
> > /* DMA support */
> > struct dma_chan *chan_rx;
> > @@ -257,8 +265,16 @@ struct sh_mmcif_host {
> > bool dma_active;
> > };
> >
> > +static const struct sh_mmcif_parent_clk mmcif_gen2_parent_clk = {
> > + .max = 97500000,
> > + .min = 12187500,
> > + .clkdiv_map = 0x3ff,
>
> Shouldn't this come from private data in the CPG clock driver, which
> supplies the parent clock? Then the mmcif driver will be independent from
> the parent clock.
The real question is where the constraint comes from. The Gen2 datasheet
documents the MMC clocks maximum frequency as 97.5 MHz in the CPG section.
However, I have a feeling the constraint doesn't come from the DIV6 which
should be able to output higher frequencies, but from the MMCIF, the clock
distribution tree, or both.
There's also the option of specifying the admissible clock range in DT, either
in the CPG node or the MMCIF node.
> > +};
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-04-21 13:07 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <873840a4ch.wl%kuninori.morimoto.gx@renesas.com>
2015-04-21 3:49 ` mmc: sh_mmcif: add PLL support Kuninori Morimoto
2015-04-21 3:50 ` [PATCH 1/3] mmc: sh_mmcif: move mmcif_of_match to upside Kuninori Morimoto
2015-04-21 3:50 ` [PATCH 2/3] mmc: sh_mmcif: cleanup to use dev instead of &pdev->dev Kuninori Morimoto
2015-04-21 3:51 ` [PATCH 3/3] mmc: sh_mmcif: calculate best clock with PLL Kuninori Morimoto
2015-04-21 7:43 ` Kuninori Morimoto
2015-04-21 7:51 ` Laurent Pinchart
2015-04-21 7:58 ` Kuninori Morimoto
2015-04-21 7:53 ` [PATCH 0/3 v2] mmc: sh_mmcif: add PLL support Kuninori Morimoto
2015-04-21 7:54 ` [PATCH 1/3 v2] mmc: sh_mmcif: move mmcif_of_match to upside Kuninori Morimoto
2015-04-21 7:54 ` [PATCH 2/3 v2] mmc: sh_mmcif: cleanup to use dev instead of &pdev->dev Kuninori Morimoto
2015-04-21 7:55 ` [PATCH 3/3 v2] mmc: sh_mmcif: calculate best clock with parent clock Kuninori Morimoto
2015-04-21 8:23 ` [PATCH 0/3 v2] mmc: sh_mmcif: add PLL support Kuninori Morimoto
2015-04-21 8:26 ` [PATCH 0/3 v3] " Kuninori Morimoto
2015-04-21 8:26 ` [PATCH 1/3 v3] mmc: sh_mmcif: move mmcif_of_match to upside Kuninori Morimoto
2015-04-21 10:07 ` Geert Uytterhoeven
2015-04-21 8:27 ` [PATCH 2/3 v3] mmc: sh_mmcif: cleanup to use dev instead of &pdev->dev Kuninori Morimoto
2015-04-21 10:07 ` Geert Uytterhoeven
2015-04-21 8:31 ` [PATCH 3/3 v3] mmc: sh_mmcif: calculate best clock with parent clock Kuninori Morimoto
2015-04-21 10:31 ` Geert Uytterhoeven
2015-04-21 13:07 ` Laurent Pinchart [this message]
2015-04-22 1:05 ` Kuninori Morimoto
2015-05-04 1:04 ` Laurent Pinchart
2015-05-11 2:15 ` Kuninori Morimoto
2015-04-22 1:04 ` Kuninori Morimoto
2015-04-22 7:49 ` Geert Uytterhoeven
2015-04-22 8:18 ` Ulf Hansson
2015-04-22 8:22 ` Geert Uytterhoeven
2015-04-22 9:16 ` Kuninori Morimoto
2015-04-23 8:11 ` [PATCH 0/7 v4] mmc: sh_mmcif: add parent clk support Kuninori Morimoto
2015-04-23 8:13 ` [PATCH 1/7 v4] mmc: sh_mmcif: move mmcif_of_match to upside Kuninori Morimoto
2015-04-23 8:14 ` [PATCH 2/7 v4] mmc: sh_mmcif: cleanup to use dev instead of &pdev->dev Kuninori Morimoto
2015-04-23 8:15 ` [PATCH 3/7 v4] mmc: sh_mmcif: remove unnecessary int clk from struct sh_mmcif_host Kuninori Morimoto
2015-04-23 10:01 ` Geert Uytterhoeven
2015-04-23 8:16 ` [PATCH 4/7 v4] mmc: sh_mmcif: separate sh_mmcif_clk_update() into setup and prepare Kuninori Morimoto
2015-04-23 10:00 ` Geert Uytterhoeven
2015-04-23 8:17 ` [PATCH 5/7 v4] mmc: sh_mmcif: calculate best clock with parent clock Kuninori Morimoto
2015-05-12 10:22 ` Laurent Pinchart
2015-05-13 0:08 ` Kuninori Morimoto
2015-04-23 8:18 ` [PATCH 6/7 v4] ARM: shmobile: r8a7790: add MMCIF parent clock range Kuninori Morimoto
2015-05-07 5:26 ` Simon Horman
2015-05-11 2:53 ` Kuninori Morimoto
2015-05-11 5:39 ` Simon Horman
2015-04-23 8:18 ` [PATCH 7/7 v4] ARM: shmobile: r8a7791: " Kuninori Morimoto
2015-04-23 10:07 ` [PATCH 0/7 v4] mmc: sh_mmcif: add parent clk support Laurent Pinchart
2015-05-05 8:33 ` Ulf Hansson
2015-05-13 2:16 ` [PATCH 0/3 v5] " Kuninori Morimoto
2015-05-13 2:17 ` [PATCH 1/3 v5] mmc: sh_mmcif: add sh_mmcif_host_to_dev() macro and use it Kuninori Morimoto
2015-05-13 2:18 ` [PATCH 2/3 v5] mmc: sh_mmcif: use sh_mmcif_xxx prefix for all functions Kuninori Morimoto
2015-05-13 2:18 ` [PATCH 3/3 v5] mmc: sh_mmcif: calculate best clock with parent clock Kuninori Morimoto
2015-05-13 7:55 ` Geert Uytterhoeven
2015-05-13 8:37 ` Kuninori Morimoto
2015-05-13 8:43 ` Geert Uytterhoeven
2015-05-13 9:27 ` Kuninori Morimoto
2015-05-14 7:20 ` [PATCH 0/3 v6] mmc: sh_mmcif: add parent clk support Kuninori Morimoto
2015-05-14 7:21 ` [PATCH 1/5 v6] mmc: sh_mmcif: add sh_mmcif_host_to_dev() macro and use it Kuninori Morimoto
2015-05-14 7:21 ` [PATCH 2/5 v6] mmc: sh_mmcif: use sh_mmcif_xxx prefix for all functions Kuninori Morimoto
2015-05-14 7:22 ` [PATCH 3/5 v6] mmc: sh_mmcif: calculate best clock with parent clock Kuninori Morimoto
2015-05-14 7:23 ` [PATCH 4/5 v6] ARM: shmobile: r8a7790: add MMCIF max-frequency Kuninori Morimoto
2015-05-14 7:23 ` [PATCH 5/5 v6] ARM: shmobile: r8a7791: " Kuninori Morimoto
2015-05-22 14:01 ` [PATCH 0/3 v6] mmc: sh_mmcif: add parent clk support Ulf Hansson
2015-05-25 0:24 ` Kuninori Morimoto
2015-05-25 0:50 ` Simon Horman
2015-05-25 0:26 ` Simon Horman
2015-05-25 0:38 ` Kuninori Morimoto
2015-05-25 8:44 ` Ulf Hansson
2015-05-25 9:38 ` Kuninori Morimoto
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=1433253.xXE7ok9ACb@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=geert@linux-m68k.org \
--cc=horms@verge.net.au \
--cc=keita.kobayashi.ym@renesas.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=ulf.hansson@linaro.org \
/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