lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGvk5Po=BcHZ8uQJAp10cYHJcvc6-x613o-0Jj00K23xpeQpaQ@mail.gmail.com>
Date:   Thu, 9 Jul 2020 00:17:07 +0800
From:   Yu-Hsuan Hsu <yuhsuan@...omium.org>
To:     Guenter Roeck <groeck@...gle.com>
Cc:     Enric Balletbo i Serra <enric.balletbo@...labora.com>,
        linux-kernel <linux-kernel@...r.kernel.org>,
        Benson Leung <bleung@...omium.org>,
        Guenter Roeck <groeck@...omium.org>,
        Cheng-Yi Chiang <cychiang@...omium.org>,
        Liam Girdwood <lgirdwood@...il.com>,
        Mark Brown <broonie@...nel.org>,
        Jaroslav Kysela <perex@...ex.cz>,
        Takashi Iwai <tiwai@...e.com>,
        Tzung-Bi Shih <tzungbi@...gle.com>,
        Gwendal Grignou <gwendal@...omium.org>,
        Lee Jones <lee.jones@...aro.org>,
        Yicheng Li <yichengli@...omium.org>,
        ALSA development <alsa-devel@...a-project.org>
Subject: Re: [PATCH] ASoC: cros_ec_codec: Reset I2S RX when probing

Guenter Roeck <groeck@...gle.com> 於 2020年7月8日 週三 下午9:28寫道:
>
> On Wed, Jul 8, 2020 at 3:16 AM Enric Balletbo i Serra
> <enric.balletbo@...labora.com> wrote:
> >
> > Hi Yu-Hsuan,
> >
> > Thank you for your patch.
> >
> > On 8/7/20 9:11, Yu-Hsuan Hsu wrote:
> > > It is not guaranteed that I2S RX is disabled when the kernel booting.
> > > For example, if the kernel crashes while it is enabled, it will keep
> > > enabled until the next time EC reboots. Reset I2S RX when probing to
> > > fix this issue.
> > >
> > > Signed-off-by: Yu-Hsuan Hsu <yuhsuan@...omium.org>
> > > ---
> > >  include/linux/platform_data/cros_ec_commands.h | 1 +
> > >  sound/soc/codecs/cros_ec_codec.c               | 7 +++++++
> > >  2 files changed, 8 insertions(+)
> > >
> > > diff --git a/include/linux/platform_data/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
> > > index 69210881ebac8..11ce917ca924c 100644
> > > --- a/include/linux/platform_data/cros_ec_commands.h
> > > +++ b/include/linux/platform_data/cros_ec_commands.h
> > > @@ -4598,6 +4598,7 @@ enum ec_codec_i2s_rx_subcmd {
> > >       EC_CODEC_I2S_RX_SET_SAMPLE_DEPTH = 0x2,
> > >       EC_CODEC_I2S_RX_SET_DAIFMT = 0x3,
> > >       EC_CODEC_I2S_RX_SET_BCLK = 0x4,
> > > +     EC_CODEC_I2S_RX_RESET = 0x5,
> >
> > Is this a new command not available in the firmware that is already in the field?
> >
> >
> > >       EC_CODEC_I2S_RX_SUBCMD_COUNT,
> > >  };
> > >
> > > diff --git a/sound/soc/codecs/cros_ec_codec.c b/sound/soc/codecs/cros_ec_codec.c
> > > index 8d45c628e988e..5495214e73e68 100644
> > > --- a/sound/soc/codecs/cros_ec_codec.c
> > > +++ b/sound/soc/codecs/cros_ec_codec.c
> > > @@ -1034,6 +1034,13 @@ static int cros_ec_codec_platform_probe(struct platform_device *pdev)
> > >       }
> > >       priv->ec_capabilities = r.capabilities;
> > >
> > > +     /* Reset EC codec I2S RX. */
> > > +     p.cmd = EC_CODEC_I2S_RX_RESET;
> > > +     ret = send_ec_host_command(priv->ec_device, EC_CMD_EC_CODEC_I2S_RX,
> > > +                                (uint8_t *)&p, sizeof(p), NULL, 0);
> > > +     if (ret)
> > > +             dev_err(dev, "failed to EC_CODEC_I2S_RESET: %d\n", ret);
> > > +
> >
> > With an old firmware I suspect this message will appear on every boot, right?
> > So, to solve the issue and get rid of this error you're forced to upgrade the
> > firmware. Is that true?
> >
>
> It might possibly make more sense to fail this silently and to send
> EC_CODEC_I2S_RX_DISABLE as backup if it is not supported (-ENOTSUPP
> can possibly be used as trigger if the call returns it).
>
> Also, I don't accept dev_err() if the error is ignored for patches in
> my scope of responsibility.
>
> Guenter
Thanks for the suggestion. Our plan is to upstream this patch first.
And then we will merge it into the kernel after the firmware is
updated. Is it feasible? (I'm not sure whether there is the better way
if I want to update EC and the kernel at the same time.)

I think calling EC_CODEC_I2S_RX_DISABLE does not make sense because it
checks the value of i2s_rx_enabled first. If i2s_rx_enabled is false,
it will skip the function. However, we don't need to reset while the
i2s_rx_enabled is already false.

In addition, since it is a sub-command, it will return
EC_RES_INVALID_PARAM but not ENOTSUPP if the command is not supported.
And then EC_RES_INVALID_PARAM will turn into -EPROTO finally so it's
difficult to do other operators basing on the return value.

Thanks,
Yu-Hsuan

>
> > >       platform_set_drvdata(pdev, priv);
> > >
> > >       ret = devm_snd_soc_register_component(dev, &i2s_rx_component_driver,
> > >

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ