linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Enric Balletbo Serra <eballetbo@gmail.com>
To: Rajat Jain <rajatja@google.com>
Cc: Evan Green <evgreen@chromium.org>,
	Benson Leung <bleung@chromium.org>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	Furquan Shaikh <furquan@chromium.org>,
	Rajat Jain <rajatja@chromium.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Guenter Roeck <groeck@chromium.org>,
	Lee Jones <lee.jones@linaro.org>
Subject: Re: [PATCH v3 2/2] platform/chrome: Add support for v1 of host sleep event
Date: Fri, 5 Apr 2019 11:57:35 +0200	[thread overview]
Message-ID: <CAFqH_51+vvnAQ0tNgDT=oph0V+hDk+tGu_9RGEQY0oN83NBWxw@mail.gmail.com> (raw)
In-Reply-To: <CACK8Z6Ev-7Yikmdhy89hWuCr-Lj3=ZGaK_eCyrdUzL17dVaCHQ@mail.gmail.com>

Missatge de Rajat Jain <rajatja@google.com> del dia dj., 4 d’abr. 2019
a les 20:41:
>
> On Wed, Apr 3, 2019 at 2:34 PM Evan Green <evgreen@chromium.org> wrote:
> >
> > Add support in code for the new forms of the host sleep event.
> > Detects the presence of this version of the command at runtime,
> > and use whichever form the EC supports. At this time, always
> > request the default timeout, and only report the failing response
> > via a WARN_ONCE(). Future versions could accept the sleep parameter
> > from outside the driver, and return the response information to
> > usermode or elsewhere.
> >
> > Signed-off-by: Evan Green <evgreen@chromium.org>
> Reviewed-by: Rajat Jain <rajatja@chromium.org>

Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>

>
> >
> > ---
> >
> > Changes in v3:
> > - Consolidated boolean logic for host_sleep_v1 (Guenter)
> >
> > Changes in v2:
> > - Removed unnecessary version assignment (Guenter)
> > - Changed WARN to WARN_ONCE (Guenter)
> > - Fixed C code to use anonymous unions
> > - insize is only bigger for resume events.
> >
> >  drivers/mfd/cros_ec.c                   | 39 +++++++++++++++++++++----
> >  drivers/platform/chrome/cros_ec_proto.c |  6 ++++

Lee, how do you want to manage this, do you want to create an
immutable branch? Or do you want I do?

Thanks,
 - Enric

> >  include/linux/mfd/cros_ec.h             |  2 ++
> >  3 files changed, 42 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
> > index 6acfe036d522..bd2bcdd4718b 100644
> > --- a/drivers/mfd/cros_ec.c
> > +++ b/drivers/mfd/cros_ec.c
> > @@ -75,20 +75,49 @@ static irqreturn_t ec_irq_thread(int irq, void *data)
> >
> >  static int cros_ec_sleep_event(struct cros_ec_device *ec_dev, u8 sleep_event)
> >  {
> > +       int ret;
> >         struct {
> >                 struct cros_ec_command msg;
> > -               struct ec_params_host_sleep_event req;
> > +               union {
> > +                       struct ec_params_host_sleep_event req0;
> > +                       struct ec_params_host_sleep_event_v1 req1;
> > +                       struct ec_response_host_sleep_event_v1 resp1;
> > +               } u;
> >         } __packed buf;
> >
> >         memset(&buf, 0, sizeof(buf));
> >
> > -       buf.req.sleep_event = sleep_event;
> > +       if (ec_dev->host_sleep_v1) {
> > +               buf.u.req1.sleep_event = sleep_event;
> > +               buf.u.req1.suspend_params.sleep_timeout_ms =
> > +                               EC_HOST_SLEEP_TIMEOUT_DEFAULT;
> > +
> > +               buf.msg.outsize = sizeof(buf.u.req1);
> > +               if ((sleep_event == HOST_SLEEP_EVENT_S3_RESUME) ||
> > +                   (sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME))
> > +                       buf.msg.insize = sizeof(buf.u.resp1);
> > +
> > +               buf.msg.version = 1;
> > +
> > +       } else {
> > +               buf.u.req0.sleep_event = sleep_event;
> > +               buf.msg.outsize = sizeof(buf.u.req0);
> > +       }
> >
> >         buf.msg.command = EC_CMD_HOST_SLEEP_EVENT;
> > -       buf.msg.version = 0;
> > -       buf.msg.outsize = sizeof(buf.req);
> >
> > -       return cros_ec_cmd_xfer(ec_dev, &buf.msg);
> > +       ret = cros_ec_cmd_xfer(ec_dev, &buf.msg);
> > +
> > +       /* For now, report failure to transition to S0ix with a warning. */
> > +       if (ret >= 0 && ec_dev->host_sleep_v1 &&
> > +           (sleep_event == HOST_SLEEP_EVENT_S0IX_RESUME))
> > +               WARN_ONCE(buf.u.resp1.resume_response.sleep_transitions &
> > +                         EC_HOST_RESUME_SLEEP_TIMEOUT,
> > +                         "EC detected sleep transition timeout. Total slp_s0 transitions: %d",
> > +                         buf.u.resp1.resume_response.sleep_transitions &
> > +                         EC_HOST_RESUME_SLEEP_TRANSITIONS_MASK);
> > +
> > +       return ret;
> >  }
> >
> >  int cros_ec_register(struct cros_ec_device *ec_dev)
> > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > index 97a068dff192..52ca564a64e7 100644
> > --- a/drivers/platform/chrome/cros_ec_proto.c
> > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > @@ -414,6 +414,12 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev)
> >         else
> >                 ec_dev->mkbp_event_supported = 1;
> >
> > +       /* Probe if host sleep v1 is supported for S0ix failure detection. */
> > +       ret = cros_ec_get_host_command_version_mask(ec_dev,
> > +                                                   EC_CMD_HOST_SLEEP_EVENT,
> > +                                                   &ver_mask);
> > +       ec_dev->host_sleep_v1 = (ret >= 0 && (ver_mask & EC_VER_MASK(1)));
> > +
> >         /*
> >          * Get host event wake mask, assume all events are wake events
> >          * if unavailable.
> > diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
> > index 8f2a8918bfa3..b6442201f77f 100644
> > --- a/include/linux/mfd/cros_ec.h
> > +++ b/include/linux/mfd/cros_ec.h
> > @@ -120,6 +120,7 @@ struct cros_ec_command {
> >   * @pkt_xfer: Send packet to EC and get response.
> >   * @lock: One transaction at a time.
> >   * @mkbp_event_supported: True if this EC supports the MKBP event protocol.
> > + * @host_sleep_v1: True if this EC supports the sleep v1 command.
> >   * @event_notifier: Interrupt event notifier for transport devices.
> >   * @event_data: Raw payload transferred with the MKBP event.
> >   * @event_size: Size in bytes of the event data.
> > @@ -153,6 +154,7 @@ struct cros_ec_device {
> >                         struct cros_ec_command *msg);
> >         struct mutex lock;
> >         bool mkbp_event_supported;
> > +       bool host_sleep_v1;
> >         struct blocking_notifier_head event_notifier;
> >
> >         struct ec_response_get_next_event_v1 event_data;
> > --
> > 2.20.1
> >

  reply	other threads:[~2019-04-05  9:57 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-03 21:34 [PATCH v3 0/2] platform/chrome: Add support for host sleep event command v1 Evan Green
2019-04-03 21:34 ` [PATCH v3 1/2] mfd: cros_ec: Add host_sleep_event_v1 command Evan Green
2019-04-04  8:23   ` Lee Jones
2019-04-04 14:42   ` Guenter Roeck
2019-04-04 18:38   ` Rajat Jain
2019-04-05  9:54     ` Enric Balletbo Serra
2019-05-08  7:10   ` Lee Jones
2019-04-03 21:34 ` [PATCH v3 2/2] platform/chrome: Add support for v1 of host sleep event Evan Green
2019-04-04  8:26   ` Lee Jones
2019-04-04 14:43   ` Guenter Roeck
2019-04-04 18:38   ` Rajat Jain
2019-04-05  9:57     ` Enric Balletbo Serra [this message]
2019-05-08  7:10   ` Lee Jones

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='CAFqH_51+vvnAQ0tNgDT=oph0V+hDk+tGu_9RGEQY0oN83NBWxw@mail.gmail.com' \
    --to=eballetbo@gmail.com \
    --cc=bleung@chromium.org \
    --cc=enric.balletbo@collabora.com \
    --cc=evgreen@chromium.org \
    --cc=furquan@chromium.org \
    --cc=groeck@chromium.org \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rajatja@chromium.org \
    --cc=rajatja@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).