[PATCH 2/3] mmc: core: remove the invalid message in mmc_select_timing

Ulf Hansson ulf.hansson at linaro.org
Tue May 10 02:46:45 PDT 2016


On 28 April 2016 at 16:58, Dong Aisheng <dongas86 at gmail.com> wrote:
> On Thu, Apr 28, 2016 at 11:24:07AM +0200, Ulf Hansson wrote:
>> On 20 April 2016 at 18:51, Dong Aisheng <aisheng.dong at nxp.com> wrote:
>> > mmc_select_hs200() and mmc_select_hs() will keep the timing
>> > as before if switch fails. So it's meaningless to print the
>> > failed switched mode outside based on the current host timing.
>> >
>> > Furthermore, the original print is wrong, it should be:
>> > pr_warn("%s: switch to %s failed\n",
>> >         mmc_hostname(card->host),
>> >         mmc_card_hs(card) ? "high-speed" :
>> >         (mmc_card_hs200(card) ? "hs200" : ""));
>> >
>> > Since we already have error message in mmc_select_hs200(),
>> > simply remove it outside.
>> >
>> > Signed-off-by: Dong Aisheng <aisheng.dong at nxp.com>
>> > ---
>> >  drivers/mmc/core/mmc.c | 10 +---------
>> >  1 file changed, 1 insertion(+), 9 deletions(-)
>> >
>> > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>> > index f6683a9..55c8201 100644
>> > --- a/drivers/mmc/core/mmc.c
>> > +++ b/drivers/mmc/core/mmc.c
>> > @@ -1321,21 +1321,13 @@ static int mmc_select_timing(struct mmc_card *card)
>> >         if (err && err != -EBADMSG)
>> >                 return err;
>> >
>> > -       if (err) {
>> > -               pr_warn("%s: switch to %s failed\n",
>> > -                       mmc_card_hs(card) ? "high-speed" :
>> > -                       (mmc_card_hs200(card) ? "hs200" : ""),
>> > -                       mmc_hostname(card->host));
>> > -               err = 0;
>> > -       }
>> > -
>>
>> No, this is not correct.
>>
>> First, in patch1/3, you change to return an error code immediately
>> when __mmc_set_signal_voltage() fails, instead of using the "goto
>> err". Thus there will be no error printed for this case any more.
>>
>
> I noticed this issue when i made up this patch.
> Why i simply return is because i want to avoid write the following code:
> static int mmc_select_hs200(struct mmc_card *card)
> {
> ...
>         err = voltage_switch();
>         /* If fails try again during next card power cycle */
>         if (err)
>                 goto err;
> ....
>                 /* swith HS TIMING */
>                 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>                                    EXT_CSD_HS_TIMING, val,
>                                    card->ext_csd.generic_cmd6_time,
>                                    true, send_status, true);
>                 if (err)
>                         goto err2;
> ..........
>
> err2:
>         if (err) {
>                 /* fall back to the old signal voltage, if fails report error */
>                 if (__mmc_set_signal_voltage(host, old_signal_voltage))
>                         err = -EIO;
>         }
>
> err:
>         if (err)
>                 pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
>                        __func__, err);
>
>         return err;
> }
>
> Because if first signal switch fails, we don't need fall back to original
> voltage. But HS timing switch needs.
>
> goto err makes the code a bit ugly.
> So i choose to avoid it and simply return since it's not so important
> and most host driver may already implement their debug IO switch debug info.
>
> Do you think if we can accept it?

Okay.

>
>> Second, mmc_select_hs() may fail and there is no print done within
>> that function which is why above print is also needed.
>>
>
> The same as above, i think this print is not so important.
> And __mmc_switch already has a err warn.
>
> And the most important reason is the original print outside is
> meaningless because it intends to print out the speed mode it
> wants to switch, however,it actually prints out the restored
> original speed mode.
>
>> On the other hand I agree with you, it doesn't seems necessary to
>> print two messages when mmc_select_hs200() fails. One should be
>> enough. Can we change this so *only* mmc_select_timing() will deal
>> with the print at all errors?
>>
>
> Yes, i agree with your idea.
> I also thought about it before, but it seems after patch 3,
> it may not be so necessary.
> Can you help check it?
>
>> >  bus_speed:
>> >         /*
>> >          * Set the bus speed to the selected bus timing.
>> >          * If timing is not selected, backward compatible is the default.
>> >          */
>> >         mmc_set_bus_speed(card);
>> > -       return err;
>> > +       return 0;
>> >  }
>> >
>> >  /*
>> > --
>> > 1.9.1
>> >
>>
>> Kind regards
>> Uffe
>
> Regards
> Dong Aisheng

I decided to apply this as is for next. Thanks!

Kind regards
Uffe



More information about the linux-arm-kernel mailing list