All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Chaotian Jing <chaotian.jing@mediatek.com>
Cc: "Rob Herring" <robh+dt@kernel.org>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Chris Ball" <chris@printf.net>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"James Liao" <jamesjj.liao@mediatek.com>,
	srv_heupstream <srv_heupstream@mediatek.com>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"Hongzhou Yang" <hongzhou.yang@mediatek.com>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	"Will Deacon" <will.deacon@arm.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
	"Sascha Hauer" <kernel@pengutronix.de>,
	"Joe.C" <yingjoe.chen@mediatek.com>,
	"Eddie Huang" <eddie.huang@mediatek.com>,
	"Bin Zhang (章斌)" <bin.zhang@mediatek.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v4 2/7] mmc: mediatek: Add Mediatek MMC driver
Date: Fri, 22 May 2015 14:51:56 +0200	[thread overview]
Message-ID: <CAPDyKFpWCvJXL-W5P83ucBM2-b5cDFEtSLnN6J6WLyR_9CuvWw@mail.gmail.com> (raw)
In-Reply-To: <1432284000.23435.38.camel@mhfsdcap03>

[...]

>> You are invoking msdc_gate_clock() and msdc_ungate_clock() in a
>> balanced manner, thus hclk_enabled is redundant. Please remove it.
>
> on drv->probe(), already invoke the msdc_ungate_clock(), so, when the
> runtime pm resume invoke the msdc_ungate_clock(), the hclk already
> enabled.


That's why you invoke pm_runtime_set_active() during ->probe() when
deploying PM support in patch3. It's not an issue then.

[...]

>> I assume it's possible to gate the clock by updating a MSDC register
>> instead!? That would be prefereable since then you can leave clock
>> gating/ungating via the clk API, to be dealt from runtime PM. That
>> would also make "sclk_enabled" in the struct msdc_host redundant.
>>
>> Adopting to above, obviously requires MSDC to be able to ungate the
>> clock by also updating a MSDC register. I assume that's possible as
>> well!?
>>
> We can set the bit1 of MSDC_CFG, when this bit is 0, the bus clock was
> gated to 0 if no command or data is transmitted.
> And, from our designer, when we operate the MSDC register, we need make
> sure both HCLK and source are enabled, if source clock was disabled,
> write some MSDC registers will have no effect(eg. send CMD, without
> source clock, not only cannot send CMD, but also cannot get CMD timeout
> interrupt.)

Thanks, that answered my question. As I understand it you should be
able to adopt to my propsual.

[...]

>> > +{
>> > +       unsigned long tmo = jiffies + msecs_to_jiffies(20);
>> > +
>> > +       while ((readl(host->base + SDC_STS) & SDC_STS_CMDBUSY)
>> > +                       && time_before(jiffies, tmo))
>> > +               continue;
>> > +
>> > +       if (readl(host->base + SDC_STS) & SDC_STS_CMDBUSY) {
>> > +               dev_err(host->dev, "CMD bus busy detected\n");
>> > +               host->error |= REQ_CMD_BUSY;
>> > +               msdc_cmd_done(host, MSDC_INT_CMDTMO, mrq, cmd);
>> > +               return false;
>> > +       }
>> > +
>> > +       if (mmc_resp_type(cmd) == MMC_RSP_R1B || cmd->data) {
>> > +               /* R1B or with data, should check SDCBUSY */
>> > +               while (readl(host->base + SDC_STS) & SDC_STS_SDCBUSY)
>> > +                       cpu_relax();
>> > +       }
>>
>> MSDC seems to be handling card busy detection in HW, right?
>>
> Do not have this ability, HW only know if CMD/DAT is low, but do not
> have any interrupt for it,

I see, but doesn't the above polling mean that msdc will not propagate
the response until the card have stopped signal busy? That's what
MMC_CAP_WAIT_WHILE_BUSY shall be used for.

Perhaps you should remove the above polling, and rely on the MMC core
to poll with CMD13 instead?

>> If so, you should enable MMC_CAP_WAIT_WHILE_BUSY and set
>> "max_busy_timeout" to DAT_TIMEOUT to inform the mmc core about it.
>>

[...]

Kind regards
Uffe

WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Chaotian Jing <chaotian.jing@mediatek.com>
Cc: "Rob Herring" <robh+dt@kernel.org>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Chris Ball" <chris@printf.net>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"James Liao" <jamesjj.liao@mediatek.com>,
	srv_heupstream <srv_heupstream@mediatek.com>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"Hongzhou Yang" <hongzhou.yang@mediatek.com>,
	"Catalin Marinas" <catalin.marinas@arm.com>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	"Will Deacon" <will.deacon@arm.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
	"Sascha Hauer" <kernel@pengutronix.de>,
	"Joe.C" <yingjoe.chen@mediatek.com>,
	"Eddie Huang" <eddie.huang@mediatek.com>,
	"Bin Zhang (章斌)" <bin.zhang@mediatek.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	linux-mediatek@lists.infradead.org
Subject: Re: [PATCH v4 2/7] mmc: mediatek: Add Mediatek MMC driver
Date: Fri, 22 May 2015 14:51:56 +0200	[thread overview]
Message-ID: <CAPDyKFpWCvJXL-W5P83ucBM2-b5cDFEtSLnN6J6WLyR_9CuvWw@mail.gmail.com> (raw)
In-Reply-To: <1432284000.23435.38.camel@mhfsdcap03>

[...]

>> You are invoking msdc_gate_clock() and msdc_ungate_clock() in a
>> balanced manner, thus hclk_enabled is redundant. Please remove it.
>
> on drv->probe(), already invoke the msdc_ungate_clock(), so, when the
> runtime pm resume invoke the msdc_ungate_clock(), the hclk already
> enabled.


That's why you invoke pm_runtime_set_active() during ->probe() when
deploying PM support in patch3. It's not an issue then.

[...]

>> I assume it's possible to gate the clock by updating a MSDC register
>> instead!? That would be prefereable since then you can leave clock
>> gating/ungating via the clk API, to be dealt from runtime PM. That
>> would also make "sclk_enabled" in the struct msdc_host redundant.
>>
>> Adopting to above, obviously requires MSDC to be able to ungate the
>> clock by also updating a MSDC register. I assume that's possible as
>> well!?
>>
> We can set the bit1 of MSDC_CFG, when this bit is 0, the bus clock was
> gated to 0 if no command or data is transmitted.
> And, from our designer, when we operate the MSDC register, we need make
> sure both HCLK and source are enabled, if source clock was disabled,
> write some MSDC registers will have no effect(eg. send CMD, without
> source clock, not only cannot send CMD, but also cannot get CMD timeout
> interrupt.)

Thanks, that answered my question. As I understand it you should be
able to adopt to my propsual.

[...]

>> > +{
>> > +       unsigned long tmo = jiffies + msecs_to_jiffies(20);
>> > +
>> > +       while ((readl(host->base + SDC_STS) & SDC_STS_CMDBUSY)
>> > +                       && time_before(jiffies, tmo))
>> > +               continue;
>> > +
>> > +       if (readl(host->base + SDC_STS) & SDC_STS_CMDBUSY) {
>> > +               dev_err(host->dev, "CMD bus busy detected\n");
>> > +               host->error |= REQ_CMD_BUSY;
>> > +               msdc_cmd_done(host, MSDC_INT_CMDTMO, mrq, cmd);
>> > +               return false;
>> > +       }
>> > +
>> > +       if (mmc_resp_type(cmd) == MMC_RSP_R1B || cmd->data) {
>> > +               /* R1B or with data, should check SDCBUSY */
>> > +               while (readl(host->base + SDC_STS) & SDC_STS_SDCBUSY)
>> > +                       cpu_relax();
>> > +       }
>>
>> MSDC seems to be handling card busy detection in HW, right?
>>
> Do not have this ability, HW only know if CMD/DAT is low, but do not
> have any interrupt for it,

I see, but doesn't the above polling mean that msdc will not propagate
the response until the card have stopped signal busy? That's what
MMC_CAP_WAIT_WHILE_BUSY shall be used for.

Perhaps you should remove the above polling, and rely on the MMC core
to poll with CMD13 instead?

>> If so, you should enable MMC_CAP_WAIT_WHILE_BUSY and set
>> "max_busy_timeout" to DAT_TIMEOUT to inform the mmc core about it.
>>

[...]

Kind regards
Uffe

WARNING: multiple messages have this Message-ID (diff)
From: ulf.hansson@linaro.org (Ulf Hansson)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 2/7] mmc: mediatek: Add Mediatek MMC driver
Date: Fri, 22 May 2015 14:51:56 +0200	[thread overview]
Message-ID: <CAPDyKFpWCvJXL-W5P83ucBM2-b5cDFEtSLnN6J6WLyR_9CuvWw@mail.gmail.com> (raw)
In-Reply-To: <1432284000.23435.38.camel@mhfsdcap03>

[...]

>> You are invoking msdc_gate_clock() and msdc_ungate_clock() in a
>> balanced manner, thus hclk_enabled is redundant. Please remove it.
>
> on drv->probe(), already invoke the msdc_ungate_clock(), so, when the
> runtime pm resume invoke the msdc_ungate_clock(), the hclk already
> enabled.


That's why you invoke pm_runtime_set_active() during ->probe() when
deploying PM support in patch3. It's not an issue then.

[...]

>> I assume it's possible to gate the clock by updating a MSDC register
>> instead!? That would be prefereable since then you can leave clock
>> gating/ungating via the clk API, to be dealt from runtime PM. That
>> would also make "sclk_enabled" in the struct msdc_host redundant.
>>
>> Adopting to above, obviously requires MSDC to be able to ungate the
>> clock by also updating a MSDC register. I assume that's possible as
>> well!?
>>
> We can set the bit1 of MSDC_CFG, when this bit is 0, the bus clock was
> gated to 0 if no command or data is transmitted.
> And, from our designer, when we operate the MSDC register, we need make
> sure both HCLK and source are enabled, if source clock was disabled,
> write some MSDC registers will have no effect(eg. send CMD, without
> source clock, not only cannot send CMD, but also cannot get CMD timeout
> interrupt.)

Thanks, that answered my question. As I understand it you should be
able to adopt to my propsual.

[...]

>> > +{
>> > +       unsigned long tmo = jiffies + msecs_to_jiffies(20);
>> > +
>> > +       while ((readl(host->base + SDC_STS) & SDC_STS_CMDBUSY)
>> > +                       && time_before(jiffies, tmo))
>> > +               continue;
>> > +
>> > +       if (readl(host->base + SDC_STS) & SDC_STS_CMDBUSY) {
>> > +               dev_err(host->dev, "CMD bus busy detected\n");
>> > +               host->error |= REQ_CMD_BUSY;
>> > +               msdc_cmd_done(host, MSDC_INT_CMDTMO, mrq, cmd);
>> > +               return false;
>> > +       }
>> > +
>> > +       if (mmc_resp_type(cmd) == MMC_RSP_R1B || cmd->data) {
>> > +               /* R1B or with data, should check SDCBUSY */
>> > +               while (readl(host->base + SDC_STS) & SDC_STS_SDCBUSY)
>> > +                       cpu_relax();
>> > +       }
>>
>> MSDC seems to be handling card busy detection in HW, right?
>>
> Do not have this ability, HW only know if CMD/DAT is low, but do not
> have any interrupt for it,

I see, but doesn't the above polling mean that msdc will not propagate
the response until the card have stopped signal busy? That's what
MMC_CAP_WAIT_WHILE_BUSY shall be used for.

Perhaps you should remove the above polling, and rely on the MMC core
to poll with CMD13 instead?

>> If so, you should enable MMC_CAP_WAIT_WHILE_BUSY and set
>> "max_busy_timeout" to DAT_TIMEOUT to inform the mmc core about it.
>>

[...]

Kind regards
Uffe

  reply	other threads:[~2015-05-22 12:51 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-19  6:36 [PATCH v4 0/7] Add Mediatek MMC driver Chaotian Jing
2015-05-19  6:36 ` Chaotian Jing
     [not found] ` <1432017411-2996-1-git-send-email-chaotian.jing-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-05-19  6:36   ` [PATCH v4 1/7] mmc: dt-bindings: add Mediatek MMC bindings Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
     [not found]     ` <1432017411-2996-2-git-send-email-chaotian.jing-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-05-19  9:41       ` Ulf Hansson
2015-05-19  9:41         ` Ulf Hansson
2015-05-19  9:41         ` Ulf Hansson
     [not found]         ` <CAPDyKFq+YAz2pt1820YnqWaVKO6sn5eB+NxuM2dhP236FSKa9g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-26  6:27           ` Chaotian Jing
2015-05-26  6:27             ` Chaotian Jing
2015-05-19  6:36   ` [PATCH v4 2/7] mmc: mediatek: Add Mediatek MMC driver Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
     [not found]     ` <1432017411-2996-3-git-send-email-chaotian.jing-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2015-05-19 10:27       ` Ulf Hansson
2015-05-19 10:27         ` Ulf Hansson
     [not found]         ` <CAPDyKFo5788uRqAaXUZ-OiS1XF8NPmg4tn2ipZNJdx4dci+KMQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-22  8:40           ` Chaotian Jing
2015-05-22  8:40             ` Chaotian Jing
2015-05-22 12:51             ` Ulf Hansson [this message]
2015-05-22 12:51               ` Ulf Hansson
2015-05-22 12:51               ` Ulf Hansson
     [not found]               ` <CAPDyKFpWCvJXL-W5P83ucBM2-b5cDFEtSLnN6J6WLyR_9CuvWw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-26  6:16                 ` Chaotian Jing
2015-05-26  6:16                   ` Chaotian Jing
2015-05-26 12:33                   ` Ulf Hansson
2015-05-26 12:33                     ` Ulf Hansson
2015-05-26 12:33                     ` Ulf Hansson
     [not found]                     ` <CAPDyKFrNQ6E4cU1_gK56ZNYgb=9EzHoJ=vXyraYoKNnRL=Umyg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-05-27 11:34                       ` Chaotian Jing
2015-05-27 11:34                         ` Chaotian Jing
2015-06-04  7:32                         ` Ulf Hansson
2015-06-04  7:32                           ` Ulf Hansson
2015-06-04  7:32                           ` Ulf Hansson
2015-05-19 11:15     ` Sascha Hauer
2015-05-19 11:15       ` Sascha Hauer
     [not found]       ` <20150519111558.GD6325-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2015-06-04  2:54         ` Chaotian Jing
2015-06-04  2:54           ` Chaotian Jing
2015-06-04  9:02           ` Sascha Hauer
2015-06-04  9:02             ` Sascha Hauer
2015-05-19 11:19     ` Russell King - ARM Linux
2015-05-19 11:19       ` Russell King - ARM Linux
     [not found]       ` <20150519111936.GC2067-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2015-05-20  9:14         ` Chaotian Jing
2015-05-20  9:14           ` Chaotian Jing
2015-05-19  6:36   ` [PATCH v4 3/7] mmc: mediatek: Add PM support for " Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
2015-05-19 10:41     ` Ulf Hansson
2015-05-19 10:41       ` Ulf Hansson
2015-05-19 10:41       ` Ulf Hansson
2015-05-19 11:04     ` Sascha Hauer
2015-05-19 11:04       ` Sascha Hauer
2015-05-19 11:55       ` Ulf Hansson
2015-05-19 11:55         ` Ulf Hansson
2015-05-19 11:55         ` Ulf Hansson
2015-05-19  6:36   ` [PATCH v4 4/7] arm64: dts: mediatek: Add MT8173 MMC dts Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
2015-05-19  6:36   ` [PATCH v4 5/7] arm64: mediatek: Add Mediatek MMC support in defconfig Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
2015-05-19  6:36   ` [PATCH v4 6/7] ARM: mediatek: dts: Add emmc support to mt8135 Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing
2015-05-19  6:36   ` [PATCH v4 7/7] ARM: multi_v7_defconfig: Enable Mediatek MMC support multi-v7 Chaotian Jing
2015-05-19  6:36     ` Chaotian Jing

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=CAPDyKFpWCvJXL-W5P83ucBM2-b5cDFEtSLnN6J6WLyR_9CuvWw@mail.gmail.com \
    --to=ulf.hansson@linaro.org \
    --cc=arnd@arndb.de \
    --cc=bin.zhang@mediatek.com \
    --cc=catalin.marinas@arm.com \
    --cc=chaotian.jing@mediatek.com \
    --cc=chris@printf.net \
    --cc=devicetree@vger.kernel.org \
    --cc=eddie.huang@mediatek.com \
    --cc=hongzhou.yang@mediatek.com \
    --cc=jamesjj.liao@mediatek.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=srv_heupstream@mediatek.com \
    --cc=will.deacon@arm.com \
    --cc=yingjoe.chen@mediatek.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.