All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Factor out cmd_xfer_status() setup code
@ 2020-01-25  1:21 Prashant Malani
  2020-01-25  1:21 ` [PATCH 1/4] platform/chrome: Add EC command msg wrapper Prashant Malani
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-25  1:21 UTC (permalink / raw)
  To: enric.balletbo, bleung; +Cc: linux-kernel, Prashant Malani

Many callers of cros_ec_cmd_xfer_status() use similar setup and cleanup
code, including setting up the cros_ec_command message struct and
copying the received buffer.

This series introduces a wrapper function that performs this setup and
teardown, and then updates some places in platform/chrome to use the new
wrapper.

Prashant Malani (4):
  platform/chrome: Add EC command msg wrapper
  platform/chrome: Make chardev use send_cmd_msg
  platform/chrome: Use send_cmd_msg in debugfs
  platform/chrome: Make check_features() use wrapper

 drivers/platform/chrome/cros_ec_chardev.c   | 33 ++++------
 drivers/platform/chrome/cros_ec_debugfs.c   | 39 ++++-------
 drivers/platform/chrome/cros_ec_proto.c     | 73 ++++++++++++++++-----
 include/linux/platform_data/cros_ec_proto.h |  5 ++
 4 files changed, 86 insertions(+), 64 deletions(-)

-- 
2.25.0.341.g760bfbb309-goog


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-25  1:21 [PATCH 0/4] Factor out cmd_xfer_status() setup code Prashant Malani
@ 2020-01-25  1:21 ` Prashant Malani
  2020-01-27 15:29   ` Enric Balletbo i Serra
  2020-01-25  1:21 ` [PATCH 2/4] platform/chrome: Make chardev use send_cmd_msg Prashant Malani
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Prashant Malani @ 2020-01-25  1:21 UTC (permalink / raw)
  To: enric.balletbo, bleung; +Cc: linux-kernel, Prashant Malani

Many callers of cros_ec_cmd_xfer_status() use a similar set up of
allocating and filling a message buffer and then copying any received
data to a target buffer.

Create a utility function that performs this setup so that callers can
use this function instead.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
 include/linux/platform_data/cros_ec_proto.h |  5 ++
 2 files changed, 58 insertions(+)

diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index da1b1c4504333..8ef3b7d27d260 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -5,6 +5,7 @@
 
 #include <linux/delay.h>
 #include <linux/device.h>
+#include <linux/mfd/cros_ec.h>
 #include <linux/module.h>
 #include <linux/platform_data/cros_ec_commands.h>
 #include <linux/platform_data/cros_ec_proto.h>
@@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
 }
 EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
 
+/**
+ * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
+ * @ec: EC device struct.
+ * @version: Command version number (often 0).
+ * @command: Command ID including offset.
+ * @outdata: Data to be sent to the EC.
+ * @outsize: Size of the &outdata buffer.
+ * @indata: Data to be received from the EC.
+ * @insize: Size of the &indata buffer.
+ *
+ * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
+ * some of the common work involved with sending a command to the EC. This
+ * includes allocating and filling up a &struct cros_ec_command message buffer,
+ * and copying the received data to another buffer.
+ *
+ * Return: The number of bytes transferred on success or negative error code.
+ */
+int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
+			 unsigned int command, void *outdata,
+			 unsigned int outsize, void *indata,
+			 unsigned int insize)
+{
+	struct cros_ec_command *msg;
+	int ret;
+
+	msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
+	if (!msg)
+		return -ENOMEM;
+
+	msg->version = version;
+	msg->command = command;
+	msg->outsize = outsize;
+	msg->insize = insize;
+
+	if (outdata && outsize > 0)
+		memcpy(msg->data, outdata, outsize);
+
+	ret = cros_ec_cmd_xfer_status(ec, msg);
+	if (ret < 0) {
+		dev_warn(ec->dev, "Command failed: %d\n", msg->result);
+		goto cleanup;
+	}
+
+	if (insize)
+		memcpy(indata, msg->data, insize);
+
+cleanup:
+	kfree(msg);
+	return ret;
+}
+EXPORT_SYMBOL(cros_ec_send_cmd_msg);
+
 static int get_next_event_xfer(struct cros_ec_device *ec_dev,
 			       struct cros_ec_command *msg,
 			       struct ec_response_get_next_event_v1 *event,
diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
index 30098a5515231..166ce26bdd79e 100644
--- a/include/linux/platform_data/cros_ec_proto.h
+++ b/include/linux/platform_data/cros_ec_proto.h
@@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
 int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
 			    struct cros_ec_command *msg);
 
+int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
+			 unsigned int command, void *outdata,
+			 unsigned int outsize, void *indata,
+			 unsigned int insize);
+
 int cros_ec_register(struct cros_ec_device *ec_dev);
 
 int cros_ec_unregister(struct cros_ec_device *ec_dev);
-- 
2.25.0.341.g760bfbb309-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] platform/chrome: Make chardev use send_cmd_msg
  2020-01-25  1:21 [PATCH 0/4] Factor out cmd_xfer_status() setup code Prashant Malani
  2020-01-25  1:21 ` [PATCH 1/4] platform/chrome: Add EC command msg wrapper Prashant Malani
@ 2020-01-25  1:21 ` Prashant Malani
  2020-01-25  1:21 ` [PATCH 3/4] platform/chrome: Use send_cmd_msg in debugfs Prashant Malani
  2020-01-25  1:21 ` [PATCH 4/4] platform/chrome: Make check_features() use wrapper Prashant Malani
  3 siblings, 0 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-25  1:21 UTC (permalink / raw)
  To: enric.balletbo, bleung; +Cc: linux-kernel, Prashant Malani

Update the Chrome OS character device driver to use the newly introduced
cros_ec_send_cmd_msg() wrapper instead of cros_ec_cmd_xfer_status(),
thus avoiding message buffer set up work which is already done by the
wrapper.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 drivers/platform/chrome/cros_ec_chardev.c | 33 ++++++++---------------
 1 file changed, 11 insertions(+), 22 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c
index 74ded441bb500..0c43f59184acb 100644
--- a/drivers/platform/chrome/cros_ec_chardev.c
+++ b/drivers/platform/chrome/cros_ec_chardev.c
@@ -57,37 +57,26 @@ static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen)
 	static const char * const current_image_name[] = {
 		"unknown", "read-only", "read-write", "invalid",
 	};
-	struct ec_response_get_version *resp;
-	struct cros_ec_command *msg;
+	struct ec_response_get_version resp = {0};
 	int ret;
 
-	msg = kzalloc(sizeof(*msg) + sizeof(*resp), GFP_KERNEL);
-	if (!msg)
-		return -ENOMEM;
-
-	msg->command = EC_CMD_GET_VERSION + ec->cmd_offset;
-	msg->insize = sizeof(*resp);
-
-	ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
+	ret = cros_ec_send_cmd_msg(ec->ec_dev, 0,
+				   ec->cmd_offset + EC_CMD_GET_VERSION, NULL, 0,
+				   &resp, sizeof(resp));
 	if (ret < 0) {
 		snprintf(str, maxlen,
-			 "Unknown EC version, returned error: %d\n",
-			 msg->result);
-		goto exit;
+			 "Unknown EC version, returned error: %d\n", ret);
+		return ret;
 	}
 
-	resp = (struct ec_response_get_version *)msg->data;
-	if (resp->current_image >= ARRAY_SIZE(current_image_name))
-		resp->current_image = 3; /* invalid */
+	if (resp.current_image >= ARRAY_SIZE(current_image_name))
+		resp.current_image = 3; /* invalid */
 
 	snprintf(str, maxlen, "%s\n%s\n%s\n%s\n", CROS_EC_DEV_VERSION,
-		 resp->version_string_ro, resp->version_string_rw,
-		 current_image_name[resp->current_image]);
+		 resp.version_string_ro, resp.version_string_rw,
+		 current_image_name[resp.current_image]);
 
-	ret = 0;
-exit:
-	kfree(msg);
-	return ret;
+	return 0;
 }
 
 static int cros_ec_chardev_mkbp_event(struct notifier_block *nb,
-- 
2.25.0.341.g760bfbb309-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] platform/chrome: Use send_cmd_msg in debugfs
  2020-01-25  1:21 [PATCH 0/4] Factor out cmd_xfer_status() setup code Prashant Malani
  2020-01-25  1:21 ` [PATCH 1/4] platform/chrome: Add EC command msg wrapper Prashant Malani
  2020-01-25  1:21 ` [PATCH 2/4] platform/chrome: Make chardev use send_cmd_msg Prashant Malani
@ 2020-01-25  1:21 ` Prashant Malani
  2020-01-25  1:21 ` [PATCH 4/4] platform/chrome: Make check_features() use wrapper Prashant Malani
  3 siblings, 0 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-25  1:21 UTC (permalink / raw)
  To: enric.balletbo, bleung; +Cc: linux-kernel, Prashant Malani

Update Chrome EC's debugfs driver to use the cros_ec_send_cmd_msg()
wrapper instead of cros_ec_cmd_xfer_status() within the pdinfo_read()
function. This helps to remove some of the structure and buffer
definitions and some of the message buffer set up code.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 drivers/platform/chrome/cros_ec_debugfs.c | 39 +++++++----------------
 1 file changed, 12 insertions(+), 27 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
index 6ae484989d1f5..34c1c36be1c51 100644
--- a/drivers/platform/chrome/cros_ec_debugfs.c
+++ b/drivers/platform/chrome/cros_ec_debugfs.c
@@ -199,44 +199,29 @@ static ssize_t cros_ec_pdinfo_read(struct file *file,
 	char read_buf[EC_USB_PD_MAX_PORTS * 40], *p = read_buf;
 	struct cros_ec_debugfs *debug_info = file->private_data;
 	struct cros_ec_device *ec_dev = debug_info->ec->ec_dev;
-	struct {
-		struct cros_ec_command msg;
-		union {
-			struct ec_response_usb_pd_control_v1 resp;
-			struct ec_params_usb_pd_control params;
-		};
-	} __packed ec_buf;
-	struct cros_ec_command *msg;
-	struct ec_response_usb_pd_control_v1 *resp;
-	struct ec_params_usb_pd_control *params;
+	struct ec_response_usb_pd_control_v1 resp = {0};
+	struct ec_params_usb_pd_control params = {0};
 	int i;
 
-	msg = &ec_buf.msg;
-	params = (struct ec_params_usb_pd_control *)msg->data;
-	resp = (struct ec_response_usb_pd_control_v1 *)msg->data;
-
-	msg->command = EC_CMD_USB_PD_CONTROL;
-	msg->version = 1;
-	msg->insize = sizeof(*resp);
-	msg->outsize = sizeof(*params);
-
 	/*
 	 * Read status from all PD ports until failure, typically caused
 	 * by attempting to read status on a port that doesn't exist.
 	 */
 	for (i = 0; i < EC_USB_PD_MAX_PORTS; ++i) {
-		params->port = i;
-		params->role = 0;
-		params->mux = 0;
-		params->swap = 0;
-
-		if (cros_ec_cmd_xfer_status(ec_dev, msg) < 0)
+		params.port = i;
+		params.role = 0;
+		params.mux = 0;
+		params.swap = 0;
+
+		if (cros_ec_send_cmd_msg(ec_dev, 1, EC_CMD_USB_PD_CONTROL,
+					 &params, sizeof(params), &resp,
+					 sizeof(resp)) < 0)
 			break;
 
 		p += scnprintf(p, sizeof(read_buf) + read_buf - p,
 			       "p%d: %s en:%.2x role:%.2x pol:%.2x\n", i,
-			       resp->state, resp->enabled, resp->role,
-			       resp->polarity);
+			       resp.state, resp.enabled, resp.role,
+			       resp.polarity);
 	}
 
 	return simple_read_from_buffer(user_buf, count, ppos,
-- 
2.25.0.341.g760bfbb309-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] platform/chrome: Make check_features() use wrapper
  2020-01-25  1:21 [PATCH 0/4] Factor out cmd_xfer_status() setup code Prashant Malani
                   ` (2 preceding siblings ...)
  2020-01-25  1:21 ` [PATCH 3/4] platform/chrome: Use send_cmd_msg in debugfs Prashant Malani
@ 2020-01-25  1:21 ` Prashant Malani
  3 siblings, 0 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-25  1:21 UTC (permalink / raw)
  To: enric.balletbo, bleung; +Cc: linux-kernel, Prashant Malani

Replace the use of cros_ec_cmd_xfer_status() with the new wrapper
function.

Signed-off-by: Prashant Malani <pmalani@chromium.org>
---
 drivers/platform/chrome/cros_ec_proto.c | 20 +++++---------------
 1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 8ef3b7d27d260..d3540fe1b7556 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -804,31 +804,21 @@ EXPORT_SYMBOL(cros_ec_get_host_event);
  */
 int cros_ec_check_features(struct cros_ec_dev *ec, int feature)
 {
-	struct cros_ec_command *msg;
 	int ret;
 
 	if (ec->features[0] == -1U && ec->features[1] == -1U) {
 		/* features bitmap not read yet */
-		msg = kzalloc(sizeof(*msg) + sizeof(ec->features), GFP_KERNEL);
-		if (!msg)
-			return -ENOMEM;
-
-		msg->command = EC_CMD_GET_FEATURES + ec->cmd_offset;
-		msg->insize = sizeof(ec->features);
-
-		ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
+		ret = cros_ec_send_cmd_msg(ec->ec_dev, 0,
+					   ec->cmd_offset + EC_CMD_GET_FEATURES,
+					   NULL, 0, ec->features,
+					   sizeof(ec->features));
 		if (ret < 0) {
-			dev_warn(ec->dev, "cannot get EC features: %d/%d\n",
-				 ret, msg->result);
+			dev_warn(ec->dev, "cannot get EC features: %d\n", ret);
 			memset(ec->features, 0, sizeof(ec->features));
-		} else {
-			memcpy(ec->features, msg->data, sizeof(ec->features));
 		}
 
 		dev_dbg(ec->dev, "EC features %08x %08x\n",
 			ec->features[0], ec->features[1]);
-
-		kfree(msg);
 	}
 
 	return ec->features[feature / 32] & EC_FEATURE_MASK_0(feature);
-- 
2.25.0.341.g760bfbb309-goog


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-25  1:21 ` [PATCH 1/4] platform/chrome: Add EC command msg wrapper Prashant Malani
@ 2020-01-27 15:29   ` Enric Balletbo i Serra
  2020-01-27 17:11     ` Prashant Malani
  0 siblings, 1 reply; 12+ messages in thread
From: Enric Balletbo i Serra @ 2020-01-27 15:29 UTC (permalink / raw)
  To: Prashant Malani, bleung; +Cc: linux-kernel

Hi Prashant,

Many thanks for this patch.

On 25/1/20 2:21, Prashant Malani wrote:
> Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> allocating and filling a message buffer and then copying any received
> data to a target buffer.
> 

cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
one). I like the idea of have a wrapper that embeds the message allocation but
we should not confuse users with different calls that does the same.

So, I am for a change like this but I'd like to have all the users calling the
same wrapper (unless there is a good reason to not use it). A proposed roadmap
(to be discussed) for this would be.

1. Replace all the remaining "cros_ec_cmd_xfer" calls with
"cros_ec_cmd_xfer_status".
2. Modify cros_ec_cmd_xfer_status to embed the message allocation.

Thanks,
 Enric


> Create a utility function that performs this setup so that callers can
> use this function instead.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>
> ---
>  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
>  include/linux/platform_data/cros_ec_proto.h |  5 ++
>  2 files changed, 58 insertions(+)
> 
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index da1b1c4504333..8ef3b7d27d260 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -5,6 +5,7 @@
>  
>  #include <linux/delay.h>
>  #include <linux/device.h>
> +#include <linux/mfd/cros_ec.h>
>  #include <linux/module.h>
>  #include <linux/platform_data/cros_ec_commands.h>
>  #include <linux/platform_data/cros_ec_proto.h>
> @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
>  }
>  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
>  
> +/**
> + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> + * @ec: EC device struct.
> + * @version: Command version number (often 0).
> + * @command: Command ID including offset.
> + * @outdata: Data to be sent to the EC.
> + * @outsize: Size of the &outdata buffer.
> + * @indata: Data to be received from the EC.
> + * @insize: Size of the &indata buffer.
> + *
> + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> + * some of the common work involved with sending a command to the EC. This
> + * includes allocating and filling up a &struct cros_ec_command message buffer,
> + * and copying the received data to another buffer.
> + *
> + * Return: The number of bytes transferred on success or negative error code.
> + */
> +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> +			 unsigned int command, void *outdata,
> +			 unsigned int outsize, void *indata,
> +			 unsigned int insize)
> +{
> +	struct cros_ec_command *msg;
> +	int ret;
> +
> +	msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> +	if (!msg)
> +		return -ENOMEM;
> +
> +	msg->version = version;
> +	msg->command = command;
> +	msg->outsize = outsize;
> +	msg->insize = insize;
> +
> +	if (outdata && outsize > 0)
> +		memcpy(msg->data, outdata, outsize);
> +
> +	ret = cros_ec_cmd_xfer_status(ec, msg);
> +	if (ret < 0) {
> +		dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> +		goto cleanup;
> +	}
> +
> +	if (insize)
> +		memcpy(indata, msg->data, insize);
> +
> +cleanup:
> +	kfree(msg);
> +	return ret;
> +}
> +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> +
>  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
>  			       struct cros_ec_command *msg,
>  			       struct ec_response_get_next_event_v1 *event,
> diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> index 30098a5515231..166ce26bdd79e 100644
> --- a/include/linux/platform_data/cros_ec_proto.h
> +++ b/include/linux/platform_data/cros_ec_proto.h
> @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
>  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
>  			    struct cros_ec_command *msg);
>  
> +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> +			 unsigned int command, void *outdata,
> +			 unsigned int outsize, void *indata,
> +			 unsigned int insize);
> +
>  int cros_ec_register(struct cros_ec_device *ec_dev);
>  
>  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-27 15:29   ` Enric Balletbo i Serra
@ 2020-01-27 17:11     ` Prashant Malani
  2020-01-27 20:35       ` Enric Balletbo Serra
  0 siblings, 1 reply; 12+ messages in thread
From: Prashant Malani @ 2020-01-27 17:11 UTC (permalink / raw)
  To: Enric Balletbo i Serra; +Cc: Benson Leung, Linux Kernel Mailing List

Hi Enric,

On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
<enric.balletbo@collabora.com> wrote:
>
> Hi Prashant,
>
> Many thanks for this patch.
>
> On 25/1/20 2:21, Prashant Malani wrote:
> > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> > allocating and filling a message buffer and then copying any received
> > data to a target buffer.
> >
>
> cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
> ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
> one). I like the idea of have a wrapper that embeds the message allocation but
> we should not confuse users with different calls that does the same.
Yes, my intention was to eventually replace all the xfer_status()
call-sites to use the new wrapper, and then get rid of xfer_status
completely.
>
> So, I am for a change like this but I'd like to have all the users calling the
> same wrapper (unless there is a good reason to not use it). A proposed roadmap
> (to be discussed) for this would be.
>
> 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
> "cros_ec_cmd_xfer_status".
> 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.

How about the following alteration the the roadmap:
- Introducing the new wrapper.
- Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
use the new wrapper.
- Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
My thinking is that this would mean fewer changes at the call-sites
compared to the original roadmap (in the original roadmap, one would
first have to modify calls to use cros_ec_cmd_xfer_status(), and then
modify them again when cros_ec_cmd_xfer_status() itself is modified to
include message allocation).

That said I don't have any strong preference, so either would work.

Best regards,
>
> Thanks,
>  Enric
>
>
> > Create a utility function that performs this setup so that callers can
> > use this function instead.
> >
> > Signed-off-by: Prashant Malani <pmalani@chromium.org>
> > ---
> >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
> >  include/linux/platform_data/cros_ec_proto.h |  5 ++
> >  2 files changed, 58 insertions(+)
> >
> > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > index da1b1c4504333..8ef3b7d27d260 100644
> > --- a/drivers/platform/chrome/cros_ec_proto.c
> > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > @@ -5,6 +5,7 @@
> >
> >  #include <linux/delay.h>
> >  #include <linux/device.h>
> > +#include <linux/mfd/cros_ec.h>
> >  #include <linux/module.h>
> >  #include <linux/platform_data/cros_ec_commands.h>
> >  #include <linux/platform_data/cros_ec_proto.h>
> > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> >  }
> >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> >
> > +/**
> > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> > + * @ec: EC device struct.
> > + * @version: Command version number (often 0).
> > + * @command: Command ID including offset.
> > + * @outdata: Data to be sent to the EC.
> > + * @outsize: Size of the &outdata buffer.
> > + * @indata: Data to be received from the EC.
> > + * @insize: Size of the &indata buffer.
> > + *
> > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> > + * some of the common work involved with sending a command to the EC. This
> > + * includes allocating and filling up a &struct cros_ec_command message buffer,
> > + * and copying the received data to another buffer.
> > + *
> > + * Return: The number of bytes transferred on success or negative error code.
> > + */
> > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> > +                      unsigned int command, void *outdata,
> > +                      unsigned int outsize, void *indata,
> > +                      unsigned int insize)
> > +{
> > +     struct cros_ec_command *msg;
> > +     int ret;
> > +
> > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> > +     if (!msg)
> > +             return -ENOMEM;
> > +
> > +     msg->version = version;
> > +     msg->command = command;
> > +     msg->outsize = outsize;
> > +     msg->insize = insize;
> > +
> > +     if (outdata && outsize > 0)
> > +             memcpy(msg->data, outdata, outsize);
> > +
> > +     ret = cros_ec_cmd_xfer_status(ec, msg);
> > +     if (ret < 0) {
> > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> > +             goto cleanup;
> > +     }
> > +
> > +     if (insize)
> > +             memcpy(indata, msg->data, insize);
> > +
> > +cleanup:
> > +     kfree(msg);
> > +     return ret;
> > +}
> > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> > +
> >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> >                              struct cros_ec_command *msg,
> >                              struct ec_response_get_next_event_v1 *event,
> > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> > index 30098a5515231..166ce26bdd79e 100644
> > --- a/include/linux/platform_data/cros_ec_proto.h
> > +++ b/include/linux/platform_data/cros_ec_proto.h
> > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
> >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> >                           struct cros_ec_command *msg);
> >
> > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> > +                      unsigned int command, void *outdata,
> > +                      unsigned int outsize, void *indata,
> > +                      unsigned int insize);
> > +
> >  int cros_ec_register(struct cros_ec_device *ec_dev);
> >
> >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> >

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-27 17:11     ` Prashant Malani
@ 2020-01-27 20:35       ` Enric Balletbo Serra
  2020-01-28 19:29         ` Prashant Malani
  0 siblings, 1 reply; 12+ messages in thread
From: Enric Balletbo Serra @ 2020-01-27 20:35 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Enric Balletbo i Serra, Benson Leung, Linux Kernel Mailing List

Hi Prashant,

Missatge de Prashant Malani <pmalani@chromium.org> del dia dl., 27 de
gen. 2020 a les 18:13:
>
> Hi Enric,
>
> On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
> <enric.balletbo@collabora.com> wrote:
> >
> > Hi Prashant,
> >
> > Many thanks for this patch.
> >
> > On 25/1/20 2:21, Prashant Malani wrote:
> > > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> > > allocating and filling a message buffer and then copying any received
> > > data to a target buffer.
> > >
> >
> > cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
> > ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
> > one). I like the idea of have a wrapper that embeds the message allocation but
> > we should not confuse users with different calls that does the same.
> Yes, my intention was to eventually replace all the xfer_status()
> call-sites to use the new wrapper, and then get rid of xfer_status
> completely.
> >
> > So, I am for a change like this but I'd like to have all the users calling the
> > same wrapper (unless there is a good reason to not use it). A proposed roadmap
> > (to be discussed) for this would be.
> >
> > 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
> > "cros_ec_cmd_xfer_status".
> > 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.
>
> How about the following alteration the the roadmap:
> - Introducing the new wrapper.
> - Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
> use the new wrapper.
> - Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
> My thinking is that this would mean fewer changes at the call-sites
> compared to the original roadmap (in the original roadmap, one would
> first have to modify calls to use cros_ec_cmd_xfer_status(), and then
> modify them again when cros_ec_cmd_xfer_status() itself is modified to
> include message allocation).
>

Sounds like we have a plan, looks good to me.

Cheers,
 Enric

> That said I don't have any strong preference, so either would work.
>
> Best regards,
> >
> > Thanks,
> >  Enric
> >
> >
> > > Create a utility function that performs this setup so that callers can
> > > use this function instead.
> > >
> > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
> > > ---
> > >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
> > >  include/linux/platform_data/cros_ec_proto.h |  5 ++
> > >  2 files changed, 58 insertions(+)
> > >
> > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > > index da1b1c4504333..8ef3b7d27d260 100644
> > > --- a/drivers/platform/chrome/cros_ec_proto.c
> > > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > > @@ -5,6 +5,7 @@
> > >
> > >  #include <linux/delay.h>
> > >  #include <linux/device.h>
> > > +#include <linux/mfd/cros_ec.h>
> > >  #include <linux/module.h>
> > >  #include <linux/platform_data/cros_ec_commands.h>
> > >  #include <linux/platform_data/cros_ec_proto.h>
> > > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > >  }
> > >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> > >
> > > +/**
> > > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> > > + * @ec: EC device struct.
> > > + * @version: Command version number (often 0).
> > > + * @command: Command ID including offset.
> > > + * @outdata: Data to be sent to the EC.
> > > + * @outsize: Size of the &outdata buffer.
> > > + * @indata: Data to be received from the EC.
> > > + * @insize: Size of the &indata buffer.
> > > + *
> > > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> > > + * some of the common work involved with sending a command to the EC. This
> > > + * includes allocating and filling up a &struct cros_ec_command message buffer,
> > > + * and copying the received data to another buffer.
> > > + *
> > > + * Return: The number of bytes transferred on success or negative error code.
> > > + */
> > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> > > +                      unsigned int command, void *outdata,
> > > +                      unsigned int outsize, void *indata,
> > > +                      unsigned int insize)
> > > +{
> > > +     struct cros_ec_command *msg;
> > > +     int ret;
> > > +
> > > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> > > +     if (!msg)
> > > +             return -ENOMEM;
> > > +
> > > +     msg->version = version;
> > > +     msg->command = command;
> > > +     msg->outsize = outsize;
> > > +     msg->insize = insize;
> > > +
> > > +     if (outdata && outsize > 0)
> > > +             memcpy(msg->data, outdata, outsize);
> > > +
> > > +     ret = cros_ec_cmd_xfer_status(ec, msg);
> > > +     if (ret < 0) {
> > > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> > > +             goto cleanup;
> > > +     }
> > > +
> > > +     if (insize)
> > > +             memcpy(indata, msg->data, insize);
> > > +
> > > +cleanup:
> > > +     kfree(msg);
> > > +     return ret;
> > > +}
> > > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> > > +
> > >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> > >                              struct cros_ec_command *msg,
> > >                              struct ec_response_get_next_event_v1 *event,
> > > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> > > index 30098a5515231..166ce26bdd79e 100644
> > > --- a/include/linux/platform_data/cros_ec_proto.h
> > > +++ b/include/linux/platform_data/cros_ec_proto.h
> > > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
> > >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > >                           struct cros_ec_command *msg);
> > >
> > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> > > +                      unsigned int command, void *outdata,
> > > +                      unsigned int outsize, void *indata,
> > > +                      unsigned int insize);
> > > +
> > >  int cros_ec_register(struct cros_ec_device *ec_dev);
> > >
> > >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> > >

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-27 20:35       ` Enric Balletbo Serra
@ 2020-01-28 19:29         ` Prashant Malani
  2020-01-28 20:57           ` Enric Balletbo Serra
  0 siblings, 1 reply; 12+ messages in thread
From: Prashant Malani @ 2020-01-28 19:29 UTC (permalink / raw)
  To: Enric Balletbo Serra
  Cc: Enric Balletbo i Serra, Benson Leung, Linux Kernel Mailing List

Hi Enric,

On Mon, Jan 27, 2020 at 12:36 PM Enric Balletbo Serra
<eballetbo@gmail.com> wrote:
>
> Hi Prashant,
>
> Missatge de Prashant Malani <pmalani@chromium.org> del dia dl., 27 de
> gen. 2020 a les 18:13:
> >
> > Hi Enric,
> >
> > On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
> > <enric.balletbo@collabora.com> wrote:
> > >
> > > Hi Prashant,
> > >
> > > Many thanks for this patch.
> > >
> > > On 25/1/20 2:21, Prashant Malani wrote:
> > > > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> > > > allocating and filling a message buffer and then copying any received
> > > > data to a target buffer.
> > > >
> > >
> > > cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
> > > ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
> > > one). I like the idea of have a wrapper that embeds the message allocation but
> > > we should not confuse users with different calls that does the same.
> > Yes, my intention was to eventually replace all the xfer_status()
> > call-sites to use the new wrapper, and then get rid of xfer_status
> > completely.
> > >
> > > So, I am for a change like this but I'd like to have all the users calling the
> > > same wrapper (unless there is a good reason to not use it). A proposed roadmap
> > > (to be discussed) for this would be.
> > >
> > > 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
> > > "cros_ec_cmd_xfer_status".
> > > 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.
> >
> > How about the following alteration the the roadmap:
> > - Introducing the new wrapper.
> > - Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
> > use the new wrapper.
> > - Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
> > My thinking is that this would mean fewer changes at the call-sites
> > compared to the original roadmap (in the original roadmap, one would
> > first have to modify calls to use cros_ec_cmd_xfer_status(), and then
> > modify them again when cros_ec_cmd_xfer_status() itself is modified to
> > include message allocation).
> >
>
> Sounds like we have a plan, looks good to me.
>
Great. Can we use the current series as a starting point for this ?
I've identified some of the other places which use
cros_ec_cmd_xfer_status() so can submit subsequent series to convert
those.
> Cheers,
>  Enric
>
> > That said I don't have any strong preference, so either would work.
> >
> > Best regards,
> > >
> > > Thanks,
> > >  Enric
> > >
> > >
> > > > Create a utility function that performs this setup so that callers can
> > > > use this function instead.
> > > >
> > > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
> > > > ---
> > > >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
> > > >  include/linux/platform_data/cros_ec_proto.h |  5 ++
> > > >  2 files changed, 58 insertions(+)
> > > >
> > > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > > > index da1b1c4504333..8ef3b7d27d260 100644
> > > > --- a/drivers/platform/chrome/cros_ec_proto.c
> > > > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > > > @@ -5,6 +5,7 @@
> > > >
> > > >  #include <linux/delay.h>
> > > >  #include <linux/device.h>
> > > > +#include <linux/mfd/cros_ec.h>
> > > >  #include <linux/module.h>
> > > >  #include <linux/platform_data/cros_ec_commands.h>
> > > >  #include <linux/platform_data/cros_ec_proto.h>
> > > > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > >  }
> > > >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> > > >
> > > > +/**
> > > > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> > > > + * @ec: EC device struct.
> > > > + * @version: Command version number (often 0).
> > > > + * @command: Command ID including offset.
> > > > + * @outdata: Data to be sent to the EC.
> > > > + * @outsize: Size of the &outdata buffer.
> > > > + * @indata: Data to be received from the EC.
> > > > + * @insize: Size of the &indata buffer.
> > > > + *
> > > > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> > > > + * some of the common work involved with sending a command to the EC. This
> > > > + * includes allocating and filling up a &struct cros_ec_command message buffer,
> > > > + * and copying the received data to another buffer.
> > > > + *
> > > > + * Return: The number of bytes transferred on success or negative error code.
> > > > + */
> > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> > > > +                      unsigned int command, void *outdata,
> > > > +                      unsigned int outsize, void *indata,
> > > > +                      unsigned int insize)
> > > > +{
> > > > +     struct cros_ec_command *msg;
> > > > +     int ret;
> > > > +
> > > > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> > > > +     if (!msg)
> > > > +             return -ENOMEM;
> > > > +
> > > > +     msg->version = version;
> > > > +     msg->command = command;
> > > > +     msg->outsize = outsize;
> > > > +     msg->insize = insize;
> > > > +
> > > > +     if (outdata && outsize > 0)
> > > > +             memcpy(msg->data, outdata, outsize);
> > > > +
> > > > +     ret = cros_ec_cmd_xfer_status(ec, msg);
> > > > +     if (ret < 0) {
> > > > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> > > > +             goto cleanup;
> > > > +     }
> > > > +
> > > > +     if (insize)
> > > > +             memcpy(indata, msg->data, insize);
> > > > +
> > > > +cleanup:
> > > > +     kfree(msg);
> > > > +     return ret;
> > > > +}
> > > > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> > > > +
> > > >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> > > >                              struct cros_ec_command *msg,
> > > >                              struct ec_response_get_next_event_v1 *event,
> > > > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> > > > index 30098a5515231..166ce26bdd79e 100644
> > > > --- a/include/linux/platform_data/cros_ec_proto.h
> > > > +++ b/include/linux/platform_data/cros_ec_proto.h
> > > > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
> > > >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > >                           struct cros_ec_command *msg);
> > > >
> > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> > > > +                      unsigned int command, void *outdata,
> > > > +                      unsigned int outsize, void *indata,
> > > > +                      unsigned int insize);
> > > > +
> > > >  int cros_ec_register(struct cros_ec_device *ec_dev);
> > > >
> > > >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> > > >

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-28 19:29         ` Prashant Malani
@ 2020-01-28 20:57           ` Enric Balletbo Serra
  2020-01-28 22:44             ` Prashant Malani
       [not found]             ` <CACeCKaewsKMLbO=N2hY5Gen075ZuVmSb8A=A1gQ7SWFvoF7M2w@mail.gmail.com>
  0 siblings, 2 replies; 12+ messages in thread
From: Enric Balletbo Serra @ 2020-01-28 20:57 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Enric Balletbo i Serra, Benson Leung, Linux Kernel Mailing List

Missatge de Prashant Malani <pmalani@chromium.org> del dia dt., 28 de
gen. 2020 a les 20:29:
>
> Hi Enric,
>
> On Mon, Jan 27, 2020 at 12:36 PM Enric Balletbo Serra
> <eballetbo@gmail.com> wrote:
> >
> > Hi Prashant,
> >
> > Missatge de Prashant Malani <pmalani@chromium.org> del dia dl., 27 de
> > gen. 2020 a les 18:13:
> > >
> > > Hi Enric,
> > >
> > > On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
> > > <enric.balletbo@collabora.com> wrote:
> > > >
> > > > Hi Prashant,
> > > >
> > > > Many thanks for this patch.
> > > >
> > > > On 25/1/20 2:21, Prashant Malani wrote:
> > > > > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> > > > > allocating and filling a message buffer and then copying any received
> > > > > data to a target buffer.
> > > > >
> > > >
> > > > cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
> > > > ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
> > > > one). I like the idea of have a wrapper that embeds the message allocation but
> > > > we should not confuse users with different calls that does the same.
> > > Yes, my intention was to eventually replace all the xfer_status()
> > > call-sites to use the new wrapper, and then get rid of xfer_status
> > > completely.
> > > >
> > > > So, I am for a change like this but I'd like to have all the users calling the
> > > > same wrapper (unless there is a good reason to not use it). A proposed roadmap
> > > > (to be discussed) for this would be.
> > > >
> > > > 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
> > > > "cros_ec_cmd_xfer_status".
> > > > 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.
> > >
> > > How about the following alteration the the roadmap:
> > > - Introducing the new wrapper.
> > > - Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
> > > use the new wrapper.
> > > - Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
> > > My thinking is that this would mean fewer changes at the call-sites
> > > compared to the original roadmap (in the original roadmap, one would
> > > first have to modify calls to use cros_ec_cmd_xfer_status(), and then
> > > modify them again when cros_ec_cmd_xfer_status() itself is modified to
> > > include message allocation).
> > >
> >
> > Sounds like we have a plan, looks good to me.
> >
> Great. Can we use the current series as a starting point for this ?

I'd prefer have all the replacements in the same series.

> I've identified some of the other places which use
> cros_ec_cmd_xfer_status() so can submit subsequent series to convert
> those.
> > Cheers,
> >  Enric
> >
> > > That said I don't have any strong preference, so either would work.
> > >
> > > Best regards,
> > > >
> > > > Thanks,
> > > >  Enric
> > > >
> > > >
> > > > > Create a utility function that performs this setup so that callers can
> > > > > use this function instead.
> > > > >
> > > > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
> > > > > ---
> > > > >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
> > > > >  include/linux/platform_data/cros_ec_proto.h |  5 ++
> > > > >  2 files changed, 58 insertions(+)
> > > > >
> > > > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > > > > index da1b1c4504333..8ef3b7d27d260 100644
> > > > > --- a/drivers/platform/chrome/cros_ec_proto.c
> > > > > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > > > > @@ -5,6 +5,7 @@
> > > > >
> > > > >  #include <linux/delay.h>
> > > > >  #include <linux/device.h>
> > > > > +#include <linux/mfd/cros_ec.h>
> > > > >  #include <linux/module.h>
> > > > >  #include <linux/platform_data/cros_ec_commands.h>
> > > > >  #include <linux/platform_data/cros_ec_proto.h>
> > > > > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > > >  }
> > > > >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> > > > >
> > > > > +/**
> > > > > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> > > > > + * @ec: EC device struct.
> > > > > + * @version: Command version number (often 0).
> > > > > + * @command: Command ID including offset.
> > > > > + * @outdata: Data to be sent to the EC.
> > > > > + * @outsize: Size of the &outdata buffer.
> > > > > + * @indata: Data to be received from the EC.
> > > > > + * @insize: Size of the &indata buffer.
> > > > > + *
> > > > > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> > > > > + * some of the common work involved with sending a command to the EC. This
> > > > > + * includes allocating and filling up a &struct cros_ec_command message buffer,
> > > > > + * and copying the received data to another buffer.
> > > > > + *
> > > > > + * Return: The number of bytes transferred on success or negative error code.
> > > > > + */
> > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> > > > > +                      unsigned int command, void *outdata,
> > > > > +                      unsigned int outsize, void *indata,
> > > > > +                      unsigned int insize)
> > > > > +{
> > > > > +     struct cros_ec_command *msg;
> > > > > +     int ret;
> > > > > +
> > > > > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> > > > > +     if (!msg)
> > > > > +             return -ENOMEM;
> > > > > +
> > > > > +     msg->version = version;
> > > > > +     msg->command = command;
> > > > > +     msg->outsize = outsize;
> > > > > +     msg->insize = insize;
> > > > > +
> > > > > +     if (outdata && outsize > 0)
> > > > > +             memcpy(msg->data, outdata, outsize);
> > > > > +
> > > > > +     ret = cros_ec_cmd_xfer_status(ec, msg);
> > > > > +     if (ret < 0) {
> > > > > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> > > > > +             goto cleanup;
> > > > > +     }
> > > > > +
> > > > > +     if (insize)
> > > > > +             memcpy(indata, msg->data, insize);
> > > > > +
> > > > > +cleanup:
> > > > > +     kfree(msg);
> > > > > +     return ret;
> > > > > +}
> > > > > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> > > > > +
> > > > >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> > > > >                              struct cros_ec_command *msg,
> > > > >                              struct ec_response_get_next_event_v1 *event,
> > > > > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> > > > > index 30098a5515231..166ce26bdd79e 100644
> > > > > --- a/include/linux/platform_data/cros_ec_proto.h
> > > > > +++ b/include/linux/platform_data/cros_ec_proto.h
> > > > > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
> > > > >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > > >                           struct cros_ec_command *msg);
> > > > >
> > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> > > > > +                      unsigned int command, void *outdata,
> > > > > +                      unsigned int outsize, void *indata,
> > > > > +                      unsigned int insize);
> > > > > +
> > > > >  int cros_ec_register(struct cros_ec_device *ec_dev);
> > > > >
> > > > >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> > > > >

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
  2020-01-28 20:57           ` Enric Balletbo Serra
@ 2020-01-28 22:44             ` Prashant Malani
       [not found]             ` <CACeCKaewsKMLbO=N2hY5Gen075ZuVmSb8A=A1gQ7SWFvoF7M2w@mail.gmail.com>
  1 sibling, 0 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-28 22:44 UTC (permalink / raw)
  To: Enric Balletbo Serra
  Cc: Enric Balletbo i Serra, Benson Leung, Linux Kernel Mailing List

(responding again, since previous response was in richtext)


On Tue, Jan 28, 2020 at 12:57 PM Enric Balletbo Serra
<eballetbo@gmail.com> wrote:
>
> Missatge de Prashant Malani <pmalani@chromium.org> del dia dt., 28 de
> gen. 2020 a les 20:29:
> >
> > Hi Enric,
> >
> > On Mon, Jan 27, 2020 at 12:36 PM Enric Balletbo Serra
> > <eballetbo@gmail.com> wrote:
> > >
> > > Hi Prashant,
> > >
> > > Missatge de Prashant Malani <pmalani@chromium.org> del dia dl., 27 de
> > > gen. 2020 a les 18:13:
> > > >
> > > > Hi Enric,
> > > >
> > > > On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
> > > > <enric.balletbo@collabora.com> wrote:
> > > > >
> > > > > Hi Prashant,
> > > > >
> > > > > Many thanks for this patch.
> > > > >
> > > > > On 25/1/20 2:21, Prashant Malani wrote:
> > > > > > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
> > > > > > allocating and filling a message buffer and then copying any received
> > > > > > data to a target buffer.
> > > > > >
> > > > >
> > > > > cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
> > > > > ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
> > > > > one). I like the idea of have a wrapper that embeds the message allocation but
> > > > > we should not confuse users with different calls that does the same.
> > > > Yes, my intention was to eventually replace all the xfer_status()
> > > > call-sites to use the new wrapper, and then get rid of xfer_status
> > > > completely.
> > > > >
> > > > > So, I am for a change like this but I'd like to have all the users calling the
> > > > > same wrapper (unless there is a good reason to not use it). A proposed roadmap
> > > > > (to be discussed) for this would be.
> > > > >
> > > > > 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
> > > > > "cros_ec_cmd_xfer_status".
> > > > > 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.
> > > >
> > > > How about the following alteration the the roadmap:
> > > > - Introducing the new wrapper.
> > > > - Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
> > > > use the new wrapper.
> > > > - Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
> > > > My thinking is that this would mean fewer changes at the call-sites
> > > > compared to the original roadmap (in the original roadmap, one would
> > > > first have to modify calls to use cros_ec_cmd_xfer_status(), and then
> > > > modify them again when cros_ec_cmd_xfer_status() itself is modified to
> > > > include message allocation).
> > > >
> > >
> > > Sounds like we have a plan, looks good to me.
> > >
> > Great. Can we use the current series as a starting point for this ?
>
> I'd prefer have all the replacements in the same series.
Thanks for the clarification. I will begin work on this.
>
> > I've identified some of the other places which use
> > cros_ec_cmd_xfer_status() so can submit subsequent series to convert
> > those.
> > > Cheers,
> > >  Enric
> > >
> > > > That said I don't have any strong preference, so either would work.
> > > >
> > > > Best regards,
> > > > >
> > > > > Thanks,
> > > > >  Enric
> > > > >
> > > > >
> > > > > > Create a utility function that performs this setup so that callers can
> > > > > > use this function instead.
> > > > > >
> > > > > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
> > > > > > ---
> > > > > >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
> > > > > >  include/linux/platform_data/cros_ec_proto.h |  5 ++
> > > > > >  2 files changed, 58 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > > > > > index da1b1c4504333..8ef3b7d27d260 100644
> > > > > > --- a/drivers/platform/chrome/cros_ec_proto.c
> > > > > > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > > > > > @@ -5,6 +5,7 @@
> > > > > >
> > > > > >  #include <linux/delay.h>
> > > > > >  #include <linux/device.h>
> > > > > > +#include <linux/mfd/cros_ec.h>
> > > > > >  #include <linux/module.h>
> > > > > >  #include <linux/platform_data/cros_ec_commands.h>
> > > > > >  #include <linux/platform_data/cros_ec_proto.h>
> > > > > > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > > > >  }
> > > > > >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> > > > > >
> > > > > > +/**
> > > > > > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
> > > > > > + * @ec: EC device struct.
> > > > > > + * @version: Command version number (often 0).
> > > > > > + * @command: Command ID including offset.
> > > > > > + * @outdata: Data to be sent to the EC.
> > > > > > + * @outsize: Size of the &outdata buffer.
> > > > > > + * @indata: Data to be received from the EC.
> > > > > > + * @insize: Size of the &indata buffer.
> > > > > > + *
> > > > > > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
> > > > > > + * some of the common work involved with sending a command to the EC. This
> > > > > > + * includes allocating and filling up a &struct cros_ec_command message buffer,
> > > > > > + * and copying the received data to another buffer.
> > > > > > + *
> > > > > > + * Return: The number of bytes transferred on success or negative error code.
> > > > > > + */
> > > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
> > > > > > +                      unsigned int command, void *outdata,
> > > > > > +                      unsigned int outsize, void *indata,
> > > > > > +                      unsigned int insize)
> > > > > > +{
> > > > > > +     struct cros_ec_command *msg;
> > > > > > +     int ret;
> > > > > > +
> > > > > > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
> > > > > > +     if (!msg)
> > > > > > +             return -ENOMEM;
> > > > > > +
> > > > > > +     msg->version = version;
> > > > > > +     msg->command = command;
> > > > > > +     msg->outsize = outsize;
> > > > > > +     msg->insize = insize;
> > > > > > +
> > > > > > +     if (outdata && outsize > 0)
> > > > > > +             memcpy(msg->data, outdata, outsize);
> > > > > > +
> > > > > > +     ret = cros_ec_cmd_xfer_status(ec, msg);
> > > > > > +     if (ret < 0) {
> > > > > > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
> > > > > > +             goto cleanup;
> > > > > > +     }
> > > > > > +
> > > > > > +     if (insize)
> > > > > > +             memcpy(indata, msg->data, insize);
> > > > > > +
> > > > > > +cleanup:
> > > > > > +     kfree(msg);
> > > > > > +     return ret;
> > > > > > +}
> > > > > > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
> > > > > > +
> > > > > >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> > > > > >                              struct cros_ec_command *msg,
> > > > > >                              struct ec_response_get_next_event_v1 *event,
> > > > > > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
> > > > > > index 30098a5515231..166ce26bdd79e 100644
> > > > > > --- a/include/linux/platform_data/cros_ec_proto.h
> > > > > > +++ b/include/linux/platform_data/cros_ec_proto.h
> > > > > > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
> > > > > >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> > > > > >                           struct cros_ec_command *msg);
> > > > > >
> > > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
> > > > > > +                      unsigned int command, void *outdata,
> > > > > > +                      unsigned int outsize, void *indata,
> > > > > > +                      unsigned int insize);
> > > > > > +
> > > > > >  int cros_ec_register(struct cros_ec_device *ec_dev);
> > > > > >
> > > > > >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
> > > > > >

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] platform/chrome: Add EC command msg wrapper
       [not found]             ` <CACeCKaewsKMLbO=N2hY5Gen075ZuVmSb8A=A1gQ7SWFvoF7M2w@mail.gmail.com>
@ 2020-01-30 20:38               ` Prashant Malani
  0 siblings, 0 replies; 12+ messages in thread
From: Prashant Malani @ 2020-01-30 20:38 UTC (permalink / raw)
  To: Enric Balletbo Serra
  Cc: Enric Balletbo i Serra, Benson Leung, Linux Kernel Mailing List

Hi Enric,

Here is the series: https://www.spinics.net/lists/kernel/msg3392039.html

Thanks!

On Tue, Jan 28, 2020 at 12:58 PM Prashant Malani <pmalani@chromium.org> wrote:
>
>
>
> On Tue, Jan 28, 2020 at 12:57 PM Enric Balletbo Serra <eballetbo@gmail.com> wrote:
>>
>> Missatge de Prashant Malani <pmalani@chromium.org> del dia dt., 28 de
>> gen. 2020 a les 20:29:
>> >
>> > Hi Enric,
>> >
>> > On Mon, Jan 27, 2020 at 12:36 PM Enric Balletbo Serra
>> > <eballetbo@gmail.com> wrote:
>> > >
>> > > Hi Prashant,
>> > >
>> > > Missatge de Prashant Malani <pmalani@chromium.org> del dia dl., 27 de
>> > > gen. 2020 a les 18:13:
>> > > >
>> > > > Hi Enric,
>> > > >
>> > > > On Mon, Jan 27, 2020 at 7:29 AM Enric Balletbo i Serra
>> > > > <enric.balletbo@collabora.com> wrote:
>> > > > >
>> > > > > Hi Prashant,
>> > > > >
>> > > > > Many thanks for this patch.
>> > > > >
>> > > > > On 25/1/20 2:21, Prashant Malani wrote:
>> > > > > > Many callers of cros_ec_cmd_xfer_status() use a similar set up of
>> > > > > > allocating and filling a message buffer and then copying any received
>> > > > > > data to a target buffer.
>> > > > > >
>> > > > >
>> > > > > cros_ec_cmd_xfer_status is already a wrapper, I dislike the idea of having three
>> > > > > ways to do the same (cros_ec_cmd_xfer, cros_ec_cmd_xfer_status and this new
>> > > > > one). I like the idea of have a wrapper that embeds the message allocation but
>> > > > > we should not confuse users with different calls that does the same.
>> > > > Yes, my intention was to eventually replace all the xfer_status()
>> > > > call-sites to use the new wrapper, and then get rid of xfer_status
>> > > > completely.
>> > > > >
>> > > > > So, I am for a change like this but I'd like to have all the users calling the
>> > > > > same wrapper (unless there is a good reason to not use it). A proposed roadmap
>> > > > > (to be discussed) for this would be.
>> > > > >
>> > > > > 1. Replace all the remaining "cros_ec_cmd_xfer" calls with
>> > > > > "cros_ec_cmd_xfer_status".
>> > > > > 2. Modify cros_ec_cmd_xfer_status to embed the message allocation.
>> > > >
>> > > > How about the following alteration the the roadmap:
>> > > > - Introducing the new wrapper.
>> > > > - Replacing all remaining cros_ec_cmd_xfer/cros_ec_cmd_xfer_status to
>> > > > use the new wrapper.
>> > > > - Deleting cros_ec_cmd_xfer and cros_ec_cmd_xfer_status ?
>> > > > My thinking is that this would mean fewer changes at the call-sites
>> > > > compared to the original roadmap (in the original roadmap, one would
>> > > > first have to modify calls to use cros_ec_cmd_xfer_status(), and then
>> > > > modify them again when cros_ec_cmd_xfer_status() itself is modified to
>> > > > include message allocation).
>> > > >
>> > >
>> > > Sounds like we have a plan, looks good to me.
>> > >
>> > Great. Can we use the current series as a starting point for this ?
>>
>> I'd prefer have all the replacements in the same series.
>
> Thanks for the clarification. I'll work on this.
>
> Best,
>
> -Prashant
>>
>>
>> > I've identified some of the other places which use
>> > cros_ec_cmd_xfer_status() so can submit subsequent series to convert
>> > those.
>> > > Cheers,
>> > >  Enric
>> > >
>> > > > That said I don't have any strong preference, so either would work.
>> > > >
>> > > > Best regards,
>> > > > >
>> > > > > Thanks,
>> > > > >  Enric
>> > > > >
>> > > > >
>> > > > > > Create a utility function that performs this setup so that callers can
>> > > > > > use this function instead.
>> > > > > >
>> > > > > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
>> > > > > > ---
>> > > > > >  drivers/platform/chrome/cros_ec_proto.c     | 53 +++++++++++++++++++++
>> > > > > >  include/linux/platform_data/cros_ec_proto.h |  5 ++
>> > > > > >  2 files changed, 58 insertions(+)
>> > > > > >
>> > > > > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
>> > > > > > index da1b1c4504333..8ef3b7d27d260 100644
>> > > > > > --- a/drivers/platform/chrome/cros_ec_proto.c
>> > > > > > +++ b/drivers/platform/chrome/cros_ec_proto.c
>> > > > > > @@ -5,6 +5,7 @@
>> > > > > >
>> > > > > >  #include <linux/delay.h>
>> > > > > >  #include <linux/device.h>
>> > > > > > +#include <linux/mfd/cros_ec.h>
>> > > > > >  #include <linux/module.h>
>> > > > > >  #include <linux/platform_data/cros_ec_commands.h>
>> > > > > >  #include <linux/platform_data/cros_ec_proto.h>
>> > > > > > @@ -570,6 +571,58 @@ int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
>> > > > > >  }
>> > > > > >  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
>> > > > > >
>> > > > > > +/**
>> > > > > > + * cros_ec_send_cmd_msg() - Utility function to send commands to ChromeOS EC.
>> > > > > > + * @ec: EC device struct.
>> > > > > > + * @version: Command version number (often 0).
>> > > > > > + * @command: Command ID including offset.
>> > > > > > + * @outdata: Data to be sent to the EC.
>> > > > > > + * @outsize: Size of the &outdata buffer.
>> > > > > > + * @indata: Data to be received from the EC.
>> > > > > > + * @insize: Size of the &indata buffer.
>> > > > > > + *
>> > > > > > + * This function is a wrapper around &cros_ec_cmd_xfer_status, and performs
>> > > > > > + * some of the common work involved with sending a command to the EC. This
>> > > > > > + * includes allocating and filling up a &struct cros_ec_command message buffer,
>> > > > > > + * and copying the received data to another buffer.
>> > > > > > + *
>> > > > > > + * Return: The number of bytes transferred on success or negative error code.
>> > > > > > + */
>> > > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec, unsigned int version,
>> > > > > > +                      unsigned int command, void *outdata,
>> > > > > > +                      unsigned int outsize, void *indata,
>> > > > > > +                      unsigned int insize)
>> > > > > > +{
>> > > > > > +     struct cros_ec_command *msg;
>> > > > > > +     int ret;
>> > > > > > +
>> > > > > > +     msg = kzalloc(sizeof(*msg) + max(outsize, insize), GFP_KERNEL);
>> > > > > > +     if (!msg)
>> > > > > > +             return -ENOMEM;
>> > > > > > +
>> > > > > > +     msg->version = version;
>> > > > > > +     msg->command = command;
>> > > > > > +     msg->outsize = outsize;
>> > > > > > +     msg->insize = insize;
>> > > > > > +
>> > > > > > +     if (outdata && outsize > 0)
>> > > > > > +             memcpy(msg->data, outdata, outsize);
>> > > > > > +
>> > > > > > +     ret = cros_ec_cmd_xfer_status(ec, msg);
>> > > > > > +     if (ret < 0) {
>> > > > > > +             dev_warn(ec->dev, "Command failed: %d\n", msg->result);
>> > > > > > +             goto cleanup;
>> > > > > > +     }
>> > > > > > +
>> > > > > > +     if (insize)
>> > > > > > +             memcpy(indata, msg->data, insize);
>> > > > > > +
>> > > > > > +cleanup:
>> > > > > > +     kfree(msg);
>> > > > > > +     return ret;
>> > > > > > +}
>> > > > > > +EXPORT_SYMBOL(cros_ec_send_cmd_msg);
>> > > > > > +
>> > > > > >  static int get_next_event_xfer(struct cros_ec_device *ec_dev,
>> > > > > >                              struct cros_ec_command *msg,
>> > > > > >                              struct ec_response_get_next_event_v1 *event,
>> > > > > > diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
>> > > > > > index 30098a5515231..166ce26bdd79e 100644
>> > > > > > --- a/include/linux/platform_data/cros_ec_proto.h
>> > > > > > +++ b/include/linux/platform_data/cros_ec_proto.h
>> > > > > > @@ -201,6 +201,11 @@ int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
>> > > > > >  int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
>> > > > > >                           struct cros_ec_command *msg);
>> > > > > >
>> > > > > > +int cros_ec_send_cmd_msg(struct cros_ec_device *ec_dev, unsigned int version,
>> > > > > > +                      unsigned int command, void *outdata,
>> > > > > > +                      unsigned int outsize, void *indata,
>> > > > > > +                      unsigned int insize);
>> > > > > > +
>> > > > > >  int cros_ec_register(struct cros_ec_device *ec_dev);
>> > > > > >
>> > > > > >  int cros_ec_unregister(struct cros_ec_device *ec_dev);
>> > > > > >

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-01-30 20:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-25  1:21 [PATCH 0/4] Factor out cmd_xfer_status() setup code Prashant Malani
2020-01-25  1:21 ` [PATCH 1/4] platform/chrome: Add EC command msg wrapper Prashant Malani
2020-01-27 15:29   ` Enric Balletbo i Serra
2020-01-27 17:11     ` Prashant Malani
2020-01-27 20:35       ` Enric Balletbo Serra
2020-01-28 19:29         ` Prashant Malani
2020-01-28 20:57           ` Enric Balletbo Serra
2020-01-28 22:44             ` Prashant Malani
     [not found]             ` <CACeCKaewsKMLbO=N2hY5Gen075ZuVmSb8A=A1gQ7SWFvoF7M2w@mail.gmail.com>
2020-01-30 20:38               ` Prashant Malani
2020-01-25  1:21 ` [PATCH 2/4] platform/chrome: Make chardev use send_cmd_msg Prashant Malani
2020-01-25  1:21 ` [PATCH 3/4] platform/chrome: Use send_cmd_msg in debugfs Prashant Malani
2020-01-25  1:21 ` [PATCH 4/4] platform/chrome: Make check_features() use wrapper Prashant Malani

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.