From: Adrian Hunter <adrian.hunter@intel.com>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Victor Shih <victorshihgli@gmail.com>,
linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org,
benchuanggli@gmail.com, HL.Liu@genesyslogic.com.tw,
Greg.tu@genesyslogic.com.tw, takahiro.akashi@linaro.org,
dlunev@chromium.org, Ben Chuang <ben.chuang@genesyslogic.com.tw>,
Victor Shih <victor.shih@genesyslogic.com.tw>
Subject: Re: [PATCH V12 10/23] mmc: sdhci-uhs2: add reset function and uhs2_mode function
Date: Tue, 10 Oct 2023 13:29:05 +0300 [thread overview]
Message-ID: <d76a9fff-5536-4e3e-b1c3-234de427d031@intel.com> (raw)
In-Reply-To: <CAPDyKFoc0phsXuX5W0PqFu2En57Lc9D-+MTGxAYtJhPpHcVZ2g@mail.gmail.com>
On 4/10/23 11:35, Ulf Hansson wrote:
> On Tue, 3 Oct 2023 at 17:03, Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 3/10/23 15:22, Ulf Hansson wrote:
>>> On Tue, 3 Oct 2023 at 13:37, Adrian Hunter <adrian.hunter@intel.com> wrote:
>>>>
>>>> On 3/10/23 13:30, Ulf Hansson wrote:
>>>>> On Fri, 15 Sept 2023 at 11:44, Victor Shih <victorshihgli@gmail.com> wrote:
>>>>>>
>>>>>> From: Victor Shih <victor.shih@genesyslogic.com.tw>
>>>>>>
>>>>>> Sdhci_uhs2_reset() does a UHS-II specific reset operation.
>>>>>>
>>>>>> Signed-off-by: Ben Chuang <ben.chuang@genesyslogic.com.tw>
>>>>>> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
>>>>>> Signed-off-by: Victor Shih <victor.shih@genesyslogic.com.tw>
>>>>>> Acked-by: Adrian Hunter <adrian.hunter@intel.com>
>>>>>> ---
>>>>>>
>>>>>> Updates in V8:
>>>>>> - Adjust the position of matching brackets.
>>>>>>
>>>>>> Updates in V6:
>>>>>> - Remove unnecessary functions and simplify code.
>>>>>>
>>>>>> ---
>>>>>>
>>>>>> drivers/mmc/host/sdhci-uhs2.c | 45 +++++++++++++++++++++++++++++++++++
>>>>>> drivers/mmc/host/sdhci-uhs2.h | 2 ++
>>>>>> 2 files changed, 47 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/mmc/host/sdhci-uhs2.c b/drivers/mmc/host/sdhci-uhs2.c
>>>>>> index e339821d3504..dfc80a7f1bad 100644
>>>>>> --- a/drivers/mmc/host/sdhci-uhs2.c
>>>>>> +++ b/drivers/mmc/host/sdhci-uhs2.c
>>>>>> @@ -10,7 +10,9 @@
>>>>>> * Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
>>>>>> */
>>>>>>
>>>>>> +#include <linux/delay.h>
>>>>>> #include <linux/module.h>
>>>>>> +#include <linux/iopoll.h>
>>>>>>
>>>>>> #include "sdhci.h"
>>>>>> #include "sdhci-uhs2.h"
>>>>>> @@ -49,6 +51,49 @@ void sdhci_uhs2_dump_regs(struct sdhci_host *host)
>>>>>> }
>>>>>> EXPORT_SYMBOL_GPL(sdhci_uhs2_dump_regs);
>>>>>>
>>>>>> +/*****************************************************************************\
>>>>>> + * *
>>>>>> + * Low level functions *
>>>>>> + * *
>>>>>> +\*****************************************************************************/
>>>>>> +
>>>>>> +bool sdhci_uhs2_mode(struct sdhci_host *host)
>>>>>> +{
>>>>>> + return host->mmc->flags & MMC_UHS2_SUPPORT;
>>>>>
>>>>> The MMC_UHS2_SUPPORT bit looks redundant to me. Instead, I think we
>>>>> should be using mmc->ios.timings, which already indicates whether we
>>>>> are using UHS2 (MMC_TIMING_UHS2_SPEED_*). See patch2 where we added
>>>>> this.
>>>>>
>>>>> That said, I think we should drop the sdhci_uhs2_mode() function
>>>>> altogether and instead use mmc_card_uhs2(), which means we should move
>>>>> it to include/linux/mmc/host.h, so it becomes available for host
>>>>> drivers.
>>>>>
>>>>
>>>> UHS2 mode starts at UHS2 initialization and ends either when UHS2
>>>> initialization fails, or the card is removed.
>>>>
>>>> So it includes re-initialization and reset when the transfer mode
>>>> currently transitions through MMC_TIMING_LEGACY.
>>>>
>>>> So mmc_card_uhs2() won't work correctly for the host callbacks
>>>> unless something is done about that.
>>>
>>> Right, thanks for clarifying!
>>>
>>> In that case I wonder if we couldn't change the way we update the
>>> ->ios.timing for UHS2. It seems silly to have two (similar) ways to
>>> indicate that we have moved to UHS2.
>>
>> Perhaps something like below:
>>
>> diff --git a/drivers/mmc/core/sd_uhs2.c b/drivers/mmc/core/sd_uhs2.c
>> index aacefdd6bc9e..e39d63d46041 100644
>> --- a/drivers/mmc/core/sd_uhs2.c
>> +++ b/drivers/mmc/core/sd_uhs2.c
>> @@ -70,7 +70,8 @@ static int sd_uhs2_power_off(struct mmc_host *host)
>>
>> host->ios.vdd = 0;
>> host->ios.clock = 0;
>> - host->ios.timing = MMC_TIMING_LEGACY;
>> + /* Must set UHS2 timing to identify UHS2 mode */
>> + host->ios.timing = MMC_TIMING_UHS2_SPEED_A;
>> host->ios.power_mode = MMC_POWER_OFF;
>> if (host->flags & MMC_UHS2_SD_TRAN)
>> host->flags &= ~MMC_UHS2_SD_TRAN;
>> @@ -1095,7 +1096,8 @@ static void sd_uhs2_detect(struct mmc_host *host)
>> mmc_claim_host(host);
>> mmc_detach_bus(host);
>> sd_uhs2_power_off(host);
>> - host->flags &= ~MMC_UHS2_SUPPORT;
>> + /* Remove UHS2 timing to indicate the end of UHS2 mode */
>> + host->ios.timing = MMC_TIMING_LEGACY;
>> mmc_release_host(host);
>> }
>> }
>> @@ -1338,7 +1340,8 @@ static int sd_uhs2_attach(struct mmc_host *host)
>> err:
>> mmc_detach_bus(host);
>> sd_uhs2_power_off(host);
>> - host->flags &= ~MMC_UHS2_SUPPORT;
>> + /* Remove UHS2 timing to indicate the end of UHS2 mode */
>> + host->ios.timing = MMC_TIMING_LEGACY;
>> return err;
>> }
>
> I wouldn't mind changing to the above. But, maybe an even better
> option is to use the ->timing variable in the struct sdhci_host, as
> it's there already to keep track of the current/previous timing state.
> Would that work too?
The host does not really have enough information.
>
>>
>> diff --git a/drivers/mmc/host/sdhci-uhs2.c b/drivers/mmc/host/sdhci-uhs2.c
>> index 517c497112f4..d1f3318b7d3a 100644
>> --- a/drivers/mmc/host/sdhci-uhs2.c
>> +++ b/drivers/mmc/host/sdhci-uhs2.c
>> @@ -267,10 +267,11 @@ static void __sdhci_uhs2_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
>>
>> /* UHS2 timing. Note, UHS2 timing is disabled when powering off */
>> ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
>> - if (ios->timing == MMC_TIMING_UHS2_SPEED_A ||
>> - ios->timing == MMC_TIMING_UHS2_SPEED_A_HD ||
>> - ios->timing == MMC_TIMING_UHS2_SPEED_B ||
>> - ios->timing == MMC_TIMING_UHS2_SPEED_B_HD)
>> + if (ios->power_mode != MMC_POWER_OFF &&
>> + (ios->timing == MMC_TIMING_UHS2_SPEED_A ||
>> + ios->timing == MMC_TIMING_UHS2_SPEED_A_HD ||
>> + ios->timing == MMC_TIMING_UHS2_SPEED_B ||
>> + ios->timing == MMC_TIMING_UHS2_SPEED_B_HD))
>> ctrl_2 |= SDHCI_CTRL_UHS2 | SDHCI_CTRL_UHS2_ENABLE;
>> else
>> ctrl_2 &= ~(SDHCI_CTRL_UHS2 | SDHCI_CTRL_UHS2_ENABLE);
>>
>>
>
> Kind regards
> Uffe
next prev parent reply other threads:[~2023-10-10 10:29 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-15 9:43 [PATCH V12 00/23] Add support UHS-II for GL9755 Victor Shih
2023-09-15 9:43 ` [PATCH V12 01/23] mmc: core: Cleanup printing of speed mode at card insertion Victor Shih
2023-09-15 9:43 ` [PATCH V12 02/23] mmc: core: Prepare to support SD UHS-II cards Victor Shih
2023-09-15 9:43 ` [PATCH V12 03/23] mmc: core: Announce successful insertion of an SD UHS-II card Victor Shih
2023-09-15 9:43 ` [PATCH V12 04/23] mmc: core: Extend support for mmc regulators with a vqmmc2 Victor Shih
2023-09-15 9:43 ` [PATCH V12 05/23] mmc: core: Add definitions for SD UHS-II cards Victor Shih
2023-09-15 9:43 ` [PATCH V12 06/23] mmc: core: Support UHS-II card control and access Victor Shih
2023-10-06 16:28 ` Ulf Hansson
2023-11-17 10:49 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 07/23] mmc: sdhci: add UHS-II related definitions in headers Victor Shih
2023-09-15 9:43 ` [PATCH V12 08/23] mmc: sdhci: add UHS-II module and add a kernel configuration Victor Shih
2023-09-15 9:43 ` [PATCH V12 09/23] mmc: sdhci-uhs2: dump UHS-II registers Victor Shih
2023-09-15 9:43 ` [PATCH V12 10/23] mmc: sdhci-uhs2: add reset function and uhs2_mode function Victor Shih
2023-10-03 10:30 ` Ulf Hansson
2023-10-03 11:37 ` Adrian Hunter
2023-10-03 12:22 ` Ulf Hansson
2023-10-03 15:02 ` Adrian Hunter
2023-10-04 8:35 ` Ulf Hansson
2023-10-10 10:29 ` Adrian Hunter [this message]
2023-10-10 11:08 ` Ulf Hansson
2023-11-17 10:49 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 11/23] mmc: sdhci-uhs2: add set_power() to support vdd2 Victor Shih
2023-10-03 9:46 ` Ulf Hansson
2023-11-17 10:49 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 12/23] mmc: sdhci-uhs2: skip signal_voltage_switch() Victor Shih
2023-10-03 9:58 ` Ulf Hansson
2023-10-06 10:30 ` Victor Shih
2023-10-06 10:50 ` Adrian Hunter
2023-11-17 10:49 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 13/23] mmc: sdhci-uhs2: add set_timeout() Victor Shih
2023-10-03 10:54 ` Ulf Hansson
2023-11-17 10:49 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 14/23] mmc: sdhci-uhs2: add set_ios() Victor Shih
2023-10-03 10:41 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 15/23] mmc: sdhci-uhs2: add detect_init() to detect the interface Victor Shih
2023-10-03 11:09 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 16/23] mmc: sdhci-uhs2: add clock operations Victor Shih
2023-10-03 11:12 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 17/23] mmc: sdhci-uhs2: add uhs2_control() to initialise the interface Victor Shih
2023-10-03 11:19 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 18/23] mmc: sdhci-uhs2: add request() and others Victor Shih
2023-09-25 9:41 ` Adrian Hunter
2023-10-03 12:15 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 19/23] mmc: sdhci-uhs2: add irq() " Victor Shih
2023-09-15 9:43 ` [PATCH V12 20/23] mmc: sdhci-uhs2: add add_host() and others to set up the driver Victor Shih
2023-10-05 11:38 ` Ulf Hansson
2023-11-17 10:50 ` Victor Shih
2023-09-15 9:43 ` [PATCH V12 21/23] mmc: sdhci-uhs2: add pre-detect_init hook Victor Shih
2023-09-15 9:43 ` [PATCH V12 22/23] mmc: sdhci-pci: add UHS-II support framework Victor Shih
2023-09-15 9:43 ` [PATCH V12 23/23] mmc: sdhci-pci-gli: enable UHS-II mode for GL9755 Victor Shih
2023-09-29 18:56 ` [PATCH V12 00/23] Add support UHS-II " Victor Shih
2023-10-02 14:18 ` 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=d76a9fff-5536-4e3e-b1c3-234de427d031@intel.com \
--to=adrian.hunter@intel.com \
--cc=Greg.tu@genesyslogic.com.tw \
--cc=HL.Liu@genesyslogic.com.tw \
--cc=ben.chuang@genesyslogic.com.tw \
--cc=benchuanggli@gmail.com \
--cc=dlunev@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=takahiro.akashi@linaro.org \
--cc=ulf.hansson@linaro.org \
--cc=victor.shih@genesyslogic.com.tw \
--cc=victorshihgli@gmail.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.