diff mbox

[1/1] mmc: debugfs: Set frequency to maximum possible on higher request

Message ID 1346670519-13097-1-git-send-email-vinit.shenoy@st.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vinit Shenoy Sept. 3, 2012, 11:08 a.m. UTC
Currently if we enter a frequency greater than maximum supported,
-EINVAL is returned. Due to this clock is not switched to maximum
supported frequency.

For example consider the max supported frequency to be 48MHz

echo 20000000 > /sys/kernel/debug/mmc0/clock Here clock is switched to 20Mhz.

echo 80000000 > /sys/kernel/debug/mmc0/clock
Ideally clock should be set back to 48MHz, but it is still set to 20MHz.

This patch sets value to f_max when the requested frequency is greater
than f_max

Signed-off-by: Vinit Shenoy <vinit.shenoy@st.com>
---
 drivers/mmc/core/debugfs.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Andy Shevchenko Sept. 3, 2012, 11:36 a.m. UTC | #1
On Mon, Sep 3, 2012 at 2:08 PM, Vinit Shenoy <vinit.shenoy@st.com> wrote:
> Currently if we enter a frequency greater than maximum supported,
> -EINVAL is returned. Due to this clock is not switched to maximum
> supported frequency.
>
> For example consider the max supported frequency to be 48MHz
>
> echo 20000000 > /sys/kernel/debug/mmc0/clock Here clock is switched to 20Mhz.
>
> echo 80000000 > /sys/kernel/debug/mmc0/clock
> Ideally clock should be set back to 48MHz, but it is still set to 20MHz.
>
> This patch sets value to f_max when the requested frequency is greater
> than f_max
>
> Signed-off-by: Vinit Shenoy <vinit.shenoy@st.com>
> ---
>  drivers/mmc/core/debugfs.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
> index 9ab5b17..c71d3eb 100644
> --- a/drivers/mmc/core/debugfs.c
> +++ b/drivers/mmc/core/debugfs.c
> @@ -174,7 +174,7 @@ static int mmc_clock_opt_set(void *data, u64 val)
>
>         /* We need this check due to input value is u64 */
>         if (val > host->f_max)
> -               return -EINVAL;
> +               val = host->f_max;
It's a matter of taste. However, I think it's time to start
Documentation/mmc/debugfs.txt
and describe the file there.
subhashj@codeaurora.org Sept. 3, 2012, 11:50 a.m. UTC | #2
On 9/3/2012 4:38 PM, Vinit Shenoy wrote:
> Currently if we enter a frequency greater than maximum supported,
> -EINVAL is returned. Due to this clock is not switched to maximum
> supported frequency.
>
> For example consider the max supported frequency to be 48MHz
>
> echo 20000000 > /sys/kernel/debug/mmc0/clock Here clock is switched to 20Mhz.
>
> echo 80000000 > /sys/kernel/debug/mmc0/clock
> Ideally clock should be set back to 48MHz, but it is still set to 20MHz.
>
> This patch sets value to f_max when the requested frequency is greater
> than f_max
>
> Signed-off-by: Vinit Shenoy <vinit.shenoy@st.com>
> ---
>   drivers/mmc/core/debugfs.c |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
> index 9ab5b17..c71d3eb 100644
> --- a/drivers/mmc/core/debugfs.c
> +++ b/drivers/mmc/core/debugfs.c
> @@ -174,7 +174,7 @@ static int mmc_clock_opt_set(void *data, u64 val)
>   
>   	/* We need this check due to input value is u64 */
>   	if (val > host->f_max)
> -		return -EINVAL;
> +		val = host->f_max;

As such this is ok if you want this behaviour. But i see other issue 
which is not related to your patch.

Let's say if the host supports 400KHz, 25 MHz,  50MHz, 100MHz and 
currently card is operating in HS (High Speed) mode@50MHz. and now if 
someone tries to change the frequency to 100MHz, then we should just 
don't let the clock change to 100MHz before we put the card in 
appropriate bus speed mode (in SD cards case, it would be SDR50 and eMMC 
case it would be HS200). Although this is anyway not an issue created by 
your patch but this is just to let you know that frequency can't be 
changed indepently without informing the card beforehand.

As far as this patch is concerned, it looks good to me.
Reviewed-by: Subhash Jadavani <subhashj@codeaurora.org>

>   
>   	mmc_claim_host(host);
>   	mmc_set_clock(host, (unsigned int) val);

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Andy Shevchenko Sept. 3, 2012, 12:30 p.m. UTC | #3
On Mon, Sep 3, 2012 at 2:50 PM, Subhash Jadavani
<subhashj@codeaurora.org> wrote:
> As such this is ok if you want this behaviour. But i see other issue which
> is not related to your patch.

> Let's say if the host supports 400KHz, 25 MHz,  50MHz, 100MHz and currently
> card is operating in HS (High Speed) mode@50MHz. and now if someone tries to
> change the frequency to 100MHz, then we should just don't let the clock
> change to 100MHz before we put the card in appropriate bus speed mode (in SD
> cards case, it would be SDR50 and eMMC case it would be HS200). Although
> this is anyway not an issue created by your patch but this is just to let
> you know that frequency can't be changed indepently without informing the
> card beforehand.

That's why the file is located under debugfs. There is an assumption
that developer understands
what he or she is doing by changing this parameter.
subhashj@codeaurora.org Sept. 3, 2012, 12:35 p.m. UTC | #4
On 9/3/2012 6:00 PM, Andy Shevchenko wrote:
> On Mon, Sep 3, 2012 at 2:50 PM, Subhash Jadavani
> <subhashj@codeaurora.org> wrote:
>> As such this is ok if you want this behaviour. But i see other issue which
>> is not related to your patch.
>> Let's say if the host supports 400KHz, 25 MHz,  50MHz, 100MHz and currently
>> card is operating in HS (High Speed) mode@50MHz. and now if someone tries to
>> change the frequency to 100MHz, then we should just don't let the clock
>> change to 100MHz before we put the card in appropriate bus speed mode (in SD
>> cards case, it would be SDR50 and eMMC case it would be HS200). Although
>> this is anyway not an issue created by your patch but this is just to let
>> you know that frequency can't be changed indepently without informing the
>> card beforehand.
> That's why the file is located under debugfs. There is an assumption
> that developer understands
> what he or she is doing by changing this parameter.
Agreed. Thanks.
>
>
>

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

Patch

diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
index 9ab5b17..c71d3eb 100644
--- a/drivers/mmc/core/debugfs.c
+++ b/drivers/mmc/core/debugfs.c
@@ -174,7 +174,7 @@  static int mmc_clock_opt_set(void *data, u64 val)
 
 	/* We need this check due to input value is u64 */
 	if (val > host->f_max)
-		return -EINVAL;
+		val = host->f_max;
 
 	mmc_claim_host(host);
 	mmc_set_clock(host, (unsigned int) val);