Re: [RFC PATCH v4 1/2] mmc: core: Add a new quirk for limiting clock rate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10 April 2018 at 09:00, Harish Jenny K N <harish_kandiga@xxxxxxxxxx> wrote:
> This patch adds a quirk to limit clock rate which
> can be used to reduce the SDIO clock rate for some
> chips with broken UHS.
>
> Signed-off-by: Harish Jenny K N <harish_kandiga@xxxxxxxxxx>
> ---
>  drivers/mmc/core/card.h  | 6 ++++++
>  drivers/mmc/core/sdio.c  | 6 +++++-
>  include/linux/mmc/card.h | 1 +
>  3 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h
> index 9c821ee..1170feb 100644
> --- a/drivers/mmc/core/card.h
> +++ b/drivers/mmc/core/card.h
> @@ -149,6 +149,12 @@ static inline void __maybe_unused remove_quirk(struct mmc_card *card, int data)
>         card->quirks &= ~data;
>  }
>
> +static inline void __maybe_unused add_limit_rate_quirk(struct mmc_card *card,
> +                                                      int data)
> +{
> +       card->quirk_max_rate = data;
> +}
> +
>  /*
>   * Quirk add/remove for MMC products.
>   */
> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
> index c599a62..24b510b 100644
> --- a/drivers/mmc/core/sdio.c
> +++ b/drivers/mmc/core/sdio.c
> @@ -444,6 +444,7 @@ static int sdio_set_bus_speed_mode(struct mmc_card *card)
>         unsigned int bus_speed, timing;
>         int err;
>         unsigned char speed;
> +       unsigned int max_rate;
>
>         /*
>          * If the host doesn't support any of the UHS-I modes, fallback on
> @@ -500,9 +501,12 @@ static int sdio_set_bus_speed_mode(struct mmc_card *card)
>         if (err)
>                 return err;
>
> +       max_rate = min_not_zero(card->quirk_max_rate,
> +                               card->sw_caps.uhs_max_dtr);
> +
>         if (bus_speed) {
>                 mmc_set_timing(card->host, timing);
> -               mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
> +               mmc_set_clock(card->host, max_rate);
>         }

This takes care of limiting the clock rate for SDIO UHS cards. As this
currently is the only case you want to cover I am fine with keeping
this as is.

Anyway, my point is, I think this quirk may also be useful for some
high-speed SDIO cards, all SD cards and (e)MMC cards. Although let's
skip that for now.

>
>         return 0;
> diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
> index 279b390..5ebc478 100644
> --- a/include/linux/mmc/card.h
> +++ b/include/linux/mmc/card.h
> @@ -252,6 +252,7 @@ struct mmc_card {
>  #define MMC_TYPE_SD_COMBO      3               /* SD combo (IO+mem) card */
>         unsigned int            state;          /* (our) card state */
>         unsigned int            quirks;         /* card quirks */
> +       unsigned int            quirk_max_rate; /* max rate set by quirks */
>  #define MMC_QUIRK_LENIENT_FN0  (1<<0)          /* allow SDIO FN0 writes outside of the VS CCCR range */
>  #define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1)   /* use func->cur_blksize */
>                                                 /* for byte mode */
> --
> 1.9.1
>
>

Thanks, queued for 4.18!

Kind regards
Uffe
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux