All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Chuang <benchuanggli@gmail.com>
To: AKASHI Takahiro <takahiro.akashi@linaro.org>,
	Ben Chuang <benchuanggli@gmail.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Ben Chuang <ben.chuang@genesyslogic.com.tw>,
	greg.tu@genesyslogic.com.tw
Subject: Re: [RFC PATCH V3 13/21] mmc: sdhci: UHS-II support, skip signal_voltage_switch()
Date: Thu, 17 Sep 2020 18:52:58 +0800	[thread overview]
Message-ID: <CACT4zj_1-mmmm4kzQqFD0i+7K5iAm0OhT04GOtFa-o5WEC+RBQ@mail.gmail.com> (raw)
In-Reply-To: <20200917005605.GA3071249@laputa>

On Thu, Sep 17, 2020 at 8:56 AM AKASHI Takahiro
<takahiro.akashi@linaro.org> wrote:
>
> Ben,
>
> On Wed, Sep 16, 2020 at 05:42:07PM +0800, Ben Chuang wrote:
> > On Wed, Sep 16, 2020 at 8:52 AM AKASHI Takahiro
> > <takahiro.akashi@linaro.org> wrote:
> > >
> > > On Tue, Sep 15, 2020 at 07:36:14PM +0800, Ben Chuang wrote:
> > > > Hi Takahiro,
> > > >
> > > > On Tue, Sep 15, 2020 at 2:03 PM AKASHI Takahiro
> > > > <takahiro.akashi@linaro.org> wrote:
> > > > >
> > > > > Ben, Adrian,
> > > > >
> > > > > On Mon, Sep 14, 2020 at 11:08:14AM +0300, Adrian Hunter wrote:
> > > > > > On 14/09/20 9:40 am, AKASHI Takahiro wrote:
> > > > > > > Adrian,
> > > > > > >
> > > > > > > On Fri, Aug 21, 2020 at 05:09:01PM +0300, Adrian Hunter wrote:
> > > > > > >> On 10/07/20 2:11 pm, Ben Chuang wrote:
> > > > > > >>> From: AKASHI Takahiro <takahiro.akashi@linaro.org>
> > > > > > >>>
> > > > > > >>> sdhci_start_signal_voltage_switch() should be called only in UHS-I mode,
> > > > > > >>> and not for UHS-II mode.
> > > > > > >>>
> > > > > > >>> Signed-off-by: Ben Chuang <ben.chuang@genesyslogic.com.tw>
> > > > > > >>> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> > > > > > >>> ---
> > > > > > >>>  drivers/mmc/host/sdhci.c | 7 ++++++-
> > > > > > >>>  1 file changed, 6 insertions(+), 1 deletion(-)
> > > > > > >>>
> > > > > > >>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> > > > > > >>> index 5511649946b9..7f2537648a08 100644
> > > > > > >>> --- a/drivers/mmc/host/sdhci.c
> > > > > > >>> +++ b/drivers/mmc/host/sdhci.c
> > > > > > >>> @@ -2623,8 +2623,13 @@ int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
> > > > > > >>>   /*
> > > > > > >>>    * Signal Voltage Switching is only applicable for Host Controllers
> > > > > > >>>    * v3.00 and above.
> > > > > > >>> +  * But for UHS2, the signal voltage is supplied by vdd2 which is
> > > > > > >>> +  * already 1.8v so no voltage switch required.
> > > > >
> > > > > I have been confused with this comment.
> > > > > (I know it came from the original Intel code, not from Ben.)
> > > > >
> > > > > If this comment is true,
> > > > >
> > > > > > >>>    */
> > > > > > >>> - if (host->version < SDHCI_SPEC_300)
> > > > > > >>> + if (host->version < SDHCI_SPEC_300 ||
> > > > > > >>> +     (IS_ENABLED(CONFIG_MMC_SDHCI_UHS2) &&
> > > > > > >>> +      host->version >= SDHCI_SPEC_400 &&
> > > > > > >>> +      host->mmc->flags & MMC_UHS2_SUPPORT))
> > > > >
> > > > > the condition above must be wrong since 'flags & MMC_UHS2_SUPPORT'
> > > > > is one of capabilities for a host controller, not a card
> > > > > while the selection of voltage depends on a card type.
> > > >
> > > > The flag MMC_UHS2_SUPPORT is set at the beginning of mmc_uhs2_rescan_try_freq().
> > > > In UHS-II flow, it stays set.
> > > > If the attempt to UHS-II fails finally, it will be unset.
> > >
> > > Right, but MMC_UHS2_SUPPORT is also set, at least initially,
> > > in sdhci_uhs2_add_host(). It is confusing, isn't it?
> >
> > I think it can be removed from sdhci_uhs2_add_host() to avoid making confusion.
>
> Okay,
>
> > >
> > > As we discussed before, any card-specific properties, like UHS-II mode,
> > > should be placed in a card structure, not a host structure.
>
> Do you have any idea on this?
> I remember that Ulf also made a similar comment on the "core" side.

We may list those properties to do first. i.e. MMC_UHS2_INITIALIZED.

>
> -Takahiro Akashi
>
> > >
> > > > >
> > > > > So I wonder why this code still works.
> > > > > I guess that it is because set_signal_voltage(), or other variant functions,
> > > > > will never be called for UHS-II cards under the current implementation.
> > > > >
> > > > > Looking at mmc_sd_init_card(), we have added some hack:
> > > > > mmc_sd_init_card()
> > > > > {
> > > > >         ...
> > > > >         /* For UHS2, skip the UHS-I initialization. */
> > > > >         if ((host->flags & MMC_UHS2_SUPPORT) &&
> > > > >             (host->flags & MMC_UHS2_INITIALIZED))
> > > > >                 goto done;
> > > > >         ...
> > > > >                 if (mmc_sd_card_using_v18(card)) {
> > > > >                         if (mmc_host_set_uhs_voltage(host) ||
> > > > >                             mmc_sd_init_uhs_card(card)) {
> > > > >                 ...
> > > > > }
> > > > >
> > > > > Ben, can you confirm this?
> > > > > (There is another callsite of mmc_host_set_uhs_voltage() though.)
> > > >
> > > > UHS-II cards use differential signals and don't need to signal voltage switch.
> > > > But the main task is to set the parameters of UHS-II card interface.
> > >
> > > Whoever sets MMC_UHS2_SUPPORT (and MMC_UHS2_INITIALIZED), my assertion above
> > > (mmc_host_set_uhs_voltage, and hence [sdhci_]start_signal_voltage_switch(), is
> > > never called for UHS-II cards) will be valid, isn't it?
> > >
> > > -Takahiro Akashi
> > >
> > > > >
> > > > > > >> Please look at hooking ->start_signal_voltage_switch() instead
> > > > > > >
> > > > > > > Do you mean that you want every platform driver who wants to support UHS-II
> > > > > > > to set NULL to start_signal_voltage_switch hook even if this hack is
> > > > > > > platform agnostic?
> > > > > >
> > > > > > No, I see UHS-II as a separate layer i.e.
> > > > > >
> > > > > >  UHS-II host controller driver
> > > > > >   |   |
> > > > > >   |   v
> > > > > >   |   sdhci-uhs2 e.g. sdhci_uhs2_start_signal_voltage_switch
> > > > > >   |   |
> > > > > >   v   v
> > > > > >   sdhci e.g. sdhci_start_signal_voltage_switch
> > > > > >
> > > > > > Most things should go through sdhci-uhs2 but not nessarily everything.
> > > > >
> > > > > What I meant by my previous comment is that we don't have to
> > > > > call any function, sdhci_uhs2_start_signal_voltage_switch in above example,
> > > > > for UHS-II cards in any case since it is always simply empty.
> > > > >
> > > > > -Takahiro Akashi

  reply	other threads:[~2020-09-17 10:55 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-10 11:11 [RFC PATCH V3 13/21] mmc: sdhci: UHS-II support, skip signal_voltage_switch() Ben Chuang
2020-08-21 14:09 ` Adrian Hunter
2020-09-14  6:40   ` AKASHI Takahiro
2020-09-14  8:08     ` Adrian Hunter
2020-09-15  6:03       ` AKASHI Takahiro
2020-09-15 11:36         ` Ben Chuang
2020-09-16  0:52           ` AKASHI Takahiro
2020-09-16  9:42             ` Ben Chuang
2020-09-17  0:56               ` AKASHI Takahiro
2020-09-17 10:52                 ` Ben Chuang [this message]
     [not found]         ` <bd394015-abb7-f134-c883-ec28b42f1fc5@intel.com>
2020-09-16  6:24           ` AKASHI Takahiro

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=CACT4zj_1-mmmm4kzQqFD0i+7K5iAm0OhT04GOtFa-o5WEC+RBQ@mail.gmail.com \
    --to=benchuanggli@gmail.com \
    --cc=adrian.hunter@intel.com \
    --cc=ben.chuang@genesyslogic.com.tw \
    --cc=greg.tu@genesyslogic.com.tw \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=takahiro.akashi@linaro.org \
    --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 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.