From: Lee Jones <lee.jones@linaro.org>
To: Neil Armstrong <narmstrong@baylibre.com>
Cc: seanpaul@google.com, fparent@baylibre.com, airlied@linux.ie,
sadolfsson@google.com, intel-gfx@lists.freedesktop.org,
eballetbo@gmail.com, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org,
Stefan Adolfsson <sadolfsson@chromium.org>,
felixe@google.com, hans.verkuil@cisco.com, olof@lixom.net,
bleung@google.com, darekm@google.com,
linux-media@vger.kernel.org
Subject: Re: [PATCH v7 3/6] mfd: cros-ec: Increase maximum mkbp event size
Date: Mon, 18 Jun 2018 08:44:43 +0100 [thread overview]
Message-ID: <20180618074443.GK31141@dell> (raw)
In-Reply-To: <1527841154-24832-4-git-send-email-narmstrong@baylibre.com>
On Fri, 01 Jun 2018, Neil Armstrong wrote:
> Having a 16 byte mkbp event size makes it possible to send CEC
> messages from the EC to the AP directly inside the mkbp event
> instead of first doing a notification and then a read.
>
> Signed-off-by: Stefan Adolfsson <sadolfsson@chromium.org>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> ---
> drivers/platform/chrome/cros_ec_proto.c | 40 +++++++++++++++++++++++++--------
> include/linux/mfd/cros_ec.h | 2 +-
> include/linux/mfd/cros_ec_commands.h | 19 ++++++++++++++++
> 3 files changed, 51 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index e7bbdf9..c4f6c44 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -504,10 +504,31 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> }
> EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
>
> +static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> + struct cros_ec_command *msg,
> + int version, uint32_t size)
> +{
> + int ret;
> +
> + msg->version = version;
> + msg->command = EC_CMD_GET_NEXT_EVENT;
> + msg->insize = size;
> + msg->outsize = 0;
> +
> + ret = cros_ec_cmd_xfer(ec_dev, msg);
> + if (ret > 0) {
> + ec_dev->event_size = ret - 1;
> + memcpy(&ec_dev->event_data, msg->data, ec_dev->event_size);
> + }
> +
> + return ret;
> +}
> +
> static int get_next_event(struct cros_ec_device *ec_dev)
> {
> u8 buffer[sizeof(struct cros_ec_command) + sizeof(ec_dev->event_data)];
> struct cros_ec_command *msg = (struct cros_ec_command *)&buffer;
> + static int cmd_version = 1;
> int ret;
>
> if (ec_dev->suspended) {
> @@ -515,18 +536,19 @@ static int get_next_event(struct cros_ec_device *ec_dev)
> return -EHOSTDOWN;
> }
>
> - msg->version = 0;
> - msg->command = EC_CMD_GET_NEXT_EVENT;
> - msg->insize = sizeof(ec_dev->event_data);
> - msg->outsize = 0;
> + if (cmd_version == 1) {
> + ret = get_next_event_xfer(ec_dev, msg, cmd_version,
> + sizeof(struct ec_response_get_next_event_v1));
> + if (ret < 0 || msg->result != EC_RES_INVALID_VERSION)
> + return ret;
>
> - ret = cros_ec_cmd_xfer(ec_dev, msg);
> - if (ret > 0) {
> - ec_dev->event_size = ret - 1;
> - memcpy(&ec_dev->event_data, msg->data,
> - sizeof(ec_dev->event_data));
> + /* Fallback to version 0 for future send attempts */
> + cmd_version = 0;
> }
>
> + ret = get_next_event_xfer(ec_dev, msg, cmd_version,
> + sizeof(struct ec_response_get_next_event));
> +
> return ret;
> }
>
> diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
> index f36125e..32caef3 100644
> --- a/include/linux/mfd/cros_ec.h
> +++ b/include/linux/mfd/cros_ec.h
> @@ -147,7 +147,7 @@ struct cros_ec_device {
> bool mkbp_event_supported;
> struct blocking_notifier_head event_notifier;
>
> - struct ec_response_get_next_event event_data;
> + struct ec_response_get_next_event_v1 event_data;
> int event_size;
> u32 host_event_wake_mask;
> };
> diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
> index f2edd99..cc0768e 100644
> --- a/include/linux/mfd/cros_ec_commands.h
> +++ b/include/linux/mfd/cros_ec_commands.h
> @@ -2093,12 +2093,31 @@ union ec_response_get_next_data {
> uint32_t sysrq;
> } __packed;
>
> +union ec_response_get_next_data_v1 {
> + uint8_t key_matrix[16];
> +
> + /* Unaligned */
That's funny!
> + uint32_t host_event;
> +
> + uint32_t buttons;
> + uint32_t switches;
> + uint32_t sysrq;
> + uint32_t cec_events;
> + uint8_t cec_message[16];
Since there are some whitespace alignment issues in here.
> +} __packed;
How come these guys have kerneldoc headers?
> struct ec_response_get_next_event {
> uint8_t event_type;
> /* Followed by event data if any */
> union ec_response_get_next_data data;
> } __packed;
>
> +struct ec_response_get_next_event_v1 {
> + uint8_t event_type;
> + /* Followed by event data if any */
> + union ec_response_get_next_data_v1 data;
> +} __packed;
> +
> /* Bit indices for buttons and switches.*/
> /* Buttons */
> #define EC_MKBP_POWER_BUTTON 0
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
WARNING: multiple messages have this Message-ID (diff)
From: Lee Jones <lee.jones@linaro.org>
To: Neil Armstrong <narmstrong@baylibre.com>
Cc: airlied@linux.ie, hans.verkuil@cisco.com, olof@lixom.net,
seanpaul@google.com, sadolfsson@google.com, felixe@google.com,
bleung@google.com, darekm@google.com, marcheu@chromium.org,
fparent@baylibre.com, dri-devel@lists.freedesktop.org,
linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org,
linux-kernel@vger.kernel.org, eballetbo@gmail.com,
Stefan Adolfsson <sadolfsson@chromium.org>
Subject: Re: [PATCH v7 3/6] mfd: cros-ec: Increase maximum mkbp event size
Date: Mon, 18 Jun 2018 08:44:43 +0100 [thread overview]
Message-ID: <20180618074443.GK31141@dell> (raw)
In-Reply-To: <1527841154-24832-4-git-send-email-narmstrong@baylibre.com>
On Fri, 01 Jun 2018, Neil Armstrong wrote:
> Having a 16 byte mkbp event size makes it possible to send CEC
> messages from the EC to the AP directly inside the mkbp event
> instead of first doing a notification and then a read.
>
> Signed-off-by: Stefan Adolfsson <sadolfsson@chromium.org>
> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> ---
> drivers/platform/chrome/cros_ec_proto.c | 40 +++++++++++++++++++++++++--------
> include/linux/mfd/cros_ec.h | 2 +-
> include/linux/mfd/cros_ec_commands.h | 19 ++++++++++++++++
> 3 files changed, 51 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index e7bbdf9..c4f6c44 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -504,10 +504,31 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> }
> EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
>
> +static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> + struct cros_ec_command *msg,
> + int version, uint32_t size)
> +{
> + int ret;
> +
> + msg->version = version;
> + msg->command = EC_CMD_GET_NEXT_EVENT;
> + msg->insize = size;
> + msg->outsize = 0;
> +
> + ret = cros_ec_cmd_xfer(ec_dev, msg);
> + if (ret > 0) {
> + ec_dev->event_size = ret - 1;
> + memcpy(&ec_dev->event_data, msg->data, ec_dev->event_size);
> + }
> +
> + return ret;
> +}
> +
> static int get_next_event(struct cros_ec_device *ec_dev)
> {
> u8 buffer[sizeof(struct cros_ec_command) + sizeof(ec_dev->event_data)];
> struct cros_ec_command *msg = (struct cros_ec_command *)&buffer;
> + static int cmd_version = 1;
> int ret;
>
> if (ec_dev->suspended) {
> @@ -515,18 +536,19 @@ static int get_next_event(struct cros_ec_device *ec_dev)
> return -EHOSTDOWN;
> }
>
> - msg->version = 0;
> - msg->command = EC_CMD_GET_NEXT_EVENT;
> - msg->insize = sizeof(ec_dev->event_data);
> - msg->outsize = 0;
> + if (cmd_version == 1) {
> + ret = get_next_event_xfer(ec_dev, msg, cmd_version,
> + sizeof(struct ec_response_get_next_event_v1));
> + if (ret < 0 || msg->result != EC_RES_INVALID_VERSION)
> + return ret;
>
> - ret = cros_ec_cmd_xfer(ec_dev, msg);
> - if (ret > 0) {
> - ec_dev->event_size = ret - 1;
> - memcpy(&ec_dev->event_data, msg->data,
> - sizeof(ec_dev->event_data));
> + /* Fallback to version 0 for future send attempts */
> + cmd_version = 0;
> }
>
> + ret = get_next_event_xfer(ec_dev, msg, cmd_version,
> + sizeof(struct ec_response_get_next_event));
> +
> return ret;
> }
>
> diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
> index f36125e..32caef3 100644
> --- a/include/linux/mfd/cros_ec.h
> +++ b/include/linux/mfd/cros_ec.h
> @@ -147,7 +147,7 @@ struct cros_ec_device {
> bool mkbp_event_supported;
> struct blocking_notifier_head event_notifier;
>
> - struct ec_response_get_next_event event_data;
> + struct ec_response_get_next_event_v1 event_data;
> int event_size;
> u32 host_event_wake_mask;
> };
> diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
> index f2edd99..cc0768e 100644
> --- a/include/linux/mfd/cros_ec_commands.h
> +++ b/include/linux/mfd/cros_ec_commands.h
> @@ -2093,12 +2093,31 @@ union ec_response_get_next_data {
> uint32_t sysrq;
> } __packed;
>
> +union ec_response_get_next_data_v1 {
> + uint8_t key_matrix[16];
> +
> + /* Unaligned */
That's funny!
> + uint32_t host_event;
> +
> + uint32_t buttons;
> + uint32_t switches;
> + uint32_t sysrq;
> + uint32_t cec_events;
> + uint8_t cec_message[16];
Since there are some whitespace alignment issues in here.
> +} __packed;
How come these guys have kerneldoc headers?
> struct ec_response_get_next_event {
> uint8_t event_type;
> /* Followed by event data if any */
> union ec_response_get_next_data data;
> } __packed;
>
> +struct ec_response_get_next_event_v1 {
> + uint8_t event_type;
> + /* Followed by event data if any */
> + union ec_response_get_next_data_v1 data;
> +} __packed;
> +
> /* Bit indices for buttons and switches.*/
> /* Buttons */
> #define EC_MKBP_POWER_BUTTON 0
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
next prev parent reply other threads:[~2018-06-18 7:44 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-01 8:19 [PATCH v7 0/6] Add ChromeOS EC CEC Support Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-01 8:19 ` [PATCH v7 1/6] media: cec-notifier: Get notifier by device and connector name Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-01 8:19 ` [PATCH v7 2/6] drm/i915: hdmi: add CEC notifier to intel_hdmi Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-01 8:19 ` [PATCH v7 3/6] mfd: cros-ec: Increase maximum mkbp event size Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-01 8:38 ` Hans Verkuil
2018-06-01 8:38 ` Hans Verkuil
2018-06-18 7:44 ` Lee Jones [this message]
2018-06-18 7:44 ` Lee Jones
2018-06-18 8:35 ` Neil Armstrong
2018-06-18 8:35 ` Neil Armstrong
2018-07-03 9:43 ` Lee Jones
2018-07-03 9:43 ` Lee Jones
2018-07-03 12:27 ` Neil Armstrong
2018-07-03 12:27 ` Neil Armstrong
2018-06-01 8:19 ` [PATCH v7 4/6] mfd: cros-ec: Introduce CEC commands and events definitions Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-18 7:45 ` Lee Jones
2018-06-18 7:45 ` Lee Jones
2018-06-01 8:19 ` [PATCH v7 5/6] mfd: cros_ec_dev: Add CEC sub-device registration Neil Armstrong
2018-07-04 7:47 ` Lee Jones
2018-07-04 7:47 ` Lee Jones
2018-07-04 12:38 ` Neil Armstrong
2018-07-04 12:38 ` Neil Armstrong
2018-07-04 13:12 ` Lee Jones
2018-07-04 13:12 ` Lee Jones
2018-06-01 8:19 ` [PATCH v7 6/6] media: platform: Add ChromeOS EC CEC driver Neil Armstrong
2018-06-01 8:19 ` Neil Armstrong
2018-06-01 8:27 ` ✗ Fi.CI.BAT: failure for Add ChromeOS EC CEC Support (rev8) Patchwork
2018-06-08 7:53 ` [PATCH v7 0/6] Add ChromeOS EC CEC Support Hans Verkuil
2018-06-08 7:53 ` Hans Verkuil
2018-06-08 8:17 ` Neil Armstrong
2018-06-08 8:17 ` Neil Armstrong
2018-06-08 8:24 ` Hans Verkuil
2018-06-11 6:03 ` Lee Jones
2018-06-11 6:03 ` Lee Jones
2018-06-11 8:56 ` Neil Armstrong
2018-06-11 8:56 ` Neil Armstrong
2018-06-11 10:17 ` Hans Verkuil
2018-06-11 10:17 ` Hans Verkuil
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=20180618074443.GK31141@dell \
--to=lee.jones@linaro.org \
--cc=airlied@linux.ie \
--cc=bleung@google.com \
--cc=darekm@google.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eballetbo@gmail.com \
--cc=felixe@google.com \
--cc=fparent@baylibre.com \
--cc=hans.verkuil@cisco.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=narmstrong@baylibre.com \
--cc=olof@lixom.net \
--cc=sadolfsson@chromium.org \
--cc=sadolfsson@google.com \
--cc=seanpaul@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.