linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites
@ 2020-09-03  9:54 Prashant Malani
  2020-09-03  9:54 ` [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer() Prashant Malani
  2020-09-07 10:48 ` [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Enric Balletbo i Serra
  0 siblings, 2 replies; 7+ messages in thread
From: Prashant Malani @ 2020-09-03  9:54 UTC (permalink / raw)
  To: linux-kernel
  Cc: gwendal, Prashant Malani, Benson Leung, Enric Balletbo i Serra,
	Guenter Roeck

Since all the other call-sites of cros_ec_cmd_xfer() have been converted
to use cros_ec_cmd_xfer_status() instead, update the remaining
call-sites to prepare for the merge of cros_ec_cmd_xfer() into
cros_ec_cmd_xfer_status().

As part of this update, change the error handling inside
cros_ec_get_sensor_count() such that the legacy LPC interface is tried
on all error values, not just when msg->result != EC_RESULT_SUCCESS.

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

diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index dda182132a6a..2cb1defcdd13 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -650,7 +650,7 @@ static int get_next_event_xfer(struct cros_ec_device *ec_dev,
 	msg->insize = size;
 	msg->outsize = 0;
 
-	ret = cros_ec_cmd_xfer(ec_dev, msg);
+	ret = cros_ec_cmd_xfer_status(ec_dev, msg);
 	if (ret > 0) {
 		ec_dev->event_size = ret - 1;
 		ec_dev->event_data = *event;
@@ -694,7 +694,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
 	msg->insize = sizeof(ec_dev->event_data.data);
 	msg->outsize = 0;
 
-	ec_dev->event_size = cros_ec_cmd_xfer(ec_dev, msg);
+	ec_dev->event_size = cros_ec_cmd_xfer_status(ec_dev, msg);
 	ec_dev->event_data.event_type = EC_MKBP_EVENT_KEY_MATRIX;
 	memcpy(&ec_dev->event_data.data, msg->data,
 	       sizeof(ec_dev->event_data.data));
@@ -883,11 +883,9 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
 	params = (struct ec_params_motion_sense *)msg->data;
 	params->cmd = MOTIONSENSE_CMD_DUMP;
 
-	ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
+	ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
 	if (ret < 0) {
 		sensor_count = ret;
-	} else if (msg->result != EC_RES_SUCCESS) {
-		sensor_count = -EPROTO;
 	} else {
 		resp = (struct ec_response_motion_sense *)msg->data;
 		sensor_count = resp->dump.sensor_count;
@@ -898,9 +896,7 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
 	 * Check legacy mode: Let's find out if sensors are accessible
 	 * via LPC interface.
 	 */
-	if (sensor_count == -EPROTO &&
-	    ec->cmd_offset == 0 &&
-	    ec_dev->cmd_readmem) {
+	if (sensor_count < 0 && ec->cmd_offset == 0 && ec_dev->cmd_readmem) {
 		ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS,
 				1, &status);
 		if (ret >= 0 &&
@@ -915,9 +911,6 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
 			 */
 			sensor_count = 0;
 		}
-	} else if (sensor_count == -EPROTO) {
-		/* EC responded, but does not understand DUMP command. */
-		sensor_count = 0;
 	}
 	return sensor_count;
 }
-- 
2.28.0.526.ge36021eeef-goog


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

* [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer()
  2020-09-03  9:54 [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Prashant Malani
@ 2020-09-03  9:54 ` Prashant Malani
  2020-09-21  8:55   ` Enric Balletbo i Serra
  2020-09-07 10:48 ` [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Enric Balletbo i Serra
  1 sibling, 1 reply; 7+ messages in thread
From: Prashant Malani @ 2020-09-03  9:54 UTC (permalink / raw)
  To: linux-kernel
  Cc: gwendal, Prashant Malani, Benson Leung, Enric Balletbo i Serra,
	Guenter Roeck

Since cros_ec_cmd_xfer_status() now returns Linux error codes and all
other files use that command, remove the now-unused function
cros_ec_cmd_xfer().

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

diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 2cb1defcdd13..0ecee8b8773d 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -549,19 +549,22 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev)
 EXPORT_SYMBOL(cros_ec_query_all);
 
 /**
- * cros_ec_cmd_xfer() - Send a command to the ChromeOS EC.
+ * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
  * @ec_dev: EC device.
  * @msg: Message to write.
  *
- * Call this to send a command to the ChromeOS EC.  This should be used
- * instead of calling the EC's cmd_xfer() callback directly.
+ * Call this to send a command to the ChromeOS EC. This should be used instead of calling the EC's
+ * cmd_xfer() callback directly. It returns success status only if both the command was transmitted
+ * successfully and the EC replied with success status.
  *
- * Return: 0 on success or negative error code.
+ * Return:
+ * >=0 - The number of bytes transferred
+ * <0 - Linux error code
  */
-static 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 ret;
+	int ret, mapped;
 
 	mutex_lock(&ec_dev->lock);
 	if (ec_dev->proto_version == EC_PROTO_VERSION_UNKNOWN) {
@@ -598,42 +601,17 @@ static int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
 			return -EMSGSIZE;
 		}
 	}
+
 	ret = send_command(ec_dev, msg);
 	mutex_unlock(&ec_dev->lock);
 
-	return ret;
-}
-
-/**
- * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
- * @ec_dev: EC device.
- * @msg: Message to write.
- *
- * This function is identical to cros_ec_cmd_xfer, except it returns success
- * status only if both the command was transmitted successfully and the EC
- * replied with success status. It's not necessary to check msg->result when
- * using this function.
- *
- * Return:
- * >=0 - The number of bytes transferred
- * <0 - Linux error code
- */
-int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
-			    struct cros_ec_command *msg)
-{
-	int ret, mapped;
-
-	ret = cros_ec_cmd_xfer(ec_dev, msg);
-	if (ret < 0) {
-		dev_err(ec_dev->dev, "Command xfer error (err:%d)\n", ret);
-		return ret;
-	}
 	mapped = cros_ec_map_error(msg->result);
 	if (mapped) {
 		dev_dbg(ec_dev->dev, "Command result (err: %d [%d])\n",
 			msg->result, mapped);
 		ret = mapped;
 	}
+
 	return ret;
 }
 EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
-- 
2.28.0.526.ge36021eeef-goog


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

* Re: [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites
  2020-09-03  9:54 [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Prashant Malani
  2020-09-03  9:54 ` [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer() Prashant Malani
@ 2020-09-07 10:48 ` Enric Balletbo i Serra
  2020-09-14 23:29   ` Prashant Malani
  1 sibling, 1 reply; 7+ messages in thread
From: Enric Balletbo i Serra @ 2020-09-07 10:48 UTC (permalink / raw)
  To: Prashant Malani, linux-kernel; +Cc: gwendal, Benson Leung, Guenter Roeck

Hi Prashant,

Thank you for your patch.

On 3/9/20 11:54, Prashant Malani wrote:
> Since all the other call-sites of cros_ec_cmd_xfer() have been converted
> to use cros_ec_cmd_xfer_status() instead, update the remaining
> call-sites to prepare for the merge of cros_ec_cmd_xfer() into
> cros_ec_cmd_xfer_status().
> 
> As part of this update, change the error handling inside
> cros_ec_get_sensor_count() such that the legacy LPC interface is tried
> on all error values, not just when msg->result != EC_RESULT_SUCCESS.
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Gwendal, I'd like to hear from you regarding this patch as you're the one that
know most about the corner cases for the sensors in different hardware. Could
you take a look and give us your Reviewed tag if all is good?

Thanks,

 Enric

> ---
>  drivers/platform/chrome/cros_ec_proto.c | 15 ++++-----------
>  1 file changed, 4 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index dda182132a6a..2cb1defcdd13 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -650,7 +650,7 @@ static int get_next_event_xfer(struct cros_ec_device *ec_dev,
>  	msg->insize = size;
>  	msg->outsize = 0;
>  
> -	ret = cros_ec_cmd_xfer(ec_dev, msg);
> +	ret = cros_ec_cmd_xfer_status(ec_dev, msg);
>  	if (ret > 0) {
>  		ec_dev->event_size = ret - 1;
>  		ec_dev->event_data = *event;
> @@ -694,7 +694,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
>  	msg->insize = sizeof(ec_dev->event_data.data);
>  	msg->outsize = 0;
>  
> -	ec_dev->event_size = cros_ec_cmd_xfer(ec_dev, msg);
> +	ec_dev->event_size = cros_ec_cmd_xfer_status(ec_dev, msg);
>  	ec_dev->event_data.event_type = EC_MKBP_EVENT_KEY_MATRIX;
>  	memcpy(&ec_dev->event_data.data, msg->data,
>  	       sizeof(ec_dev->event_data.data));
> @@ -883,11 +883,9 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>  	params = (struct ec_params_motion_sense *)msg->data;
>  	params->cmd = MOTIONSENSE_CMD_DUMP;
>  
> -	ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
> +	ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
>  	if (ret < 0) {
>  		sensor_count = ret;
> -	} else if (msg->result != EC_RES_SUCCESS) {
> -		sensor_count = -EPROTO;
>  	} else {
>  		resp = (struct ec_response_motion_sense *)msg->data;
>  		sensor_count = resp->dump.sensor_count;
> @@ -898,9 +896,7 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>  	 * Check legacy mode: Let's find out if sensors are accessible
>  	 * via LPC interface.
>  	 */
> -	if (sensor_count == -EPROTO &&
> -	    ec->cmd_offset == 0 &&
> -	    ec_dev->cmd_readmem) {
> +	if (sensor_count < 0 && ec->cmd_offset == 0 && ec_dev->cmd_readmem) {
>  		ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS,
>  				1, &status);
>  		if (ret >= 0 &&
> @@ -915,9 +911,6 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>  			 */
>  			sensor_count = 0;
>  		}
> -	} else if (sensor_count == -EPROTO) {
> -		/* EC responded, but does not understand DUMP command. */
> -		sensor_count = 0;
>  	}
>  	return sensor_count;
>  }
> 

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

* Re: [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites
  2020-09-07 10:48 ` [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Enric Balletbo i Serra
@ 2020-09-14 23:29   ` Prashant Malani
  2020-09-18 23:38     ` Gwendal Grignou
  0 siblings, 1 reply; 7+ messages in thread
From: Prashant Malani @ 2020-09-14 23:29 UTC (permalink / raw)
  To: Enric Balletbo i Serra, Gwendal Grignou
  Cc: Linux Kernel Mailing List, Benson Leung, Guenter Roeck

Thanks Enric,

On Mon, Sep 7, 2020 at 3:48 AM Enric Balletbo i Serra
<enric.balletbo@collabora.com> wrote:
>
> Hi Prashant,
>
> Thank you for your patch.
>
> On 3/9/20 11:54, Prashant Malani wrote:
> > Since all the other call-sites of cros_ec_cmd_xfer() have been converted
> > to use cros_ec_cmd_xfer_status() instead, update the remaining
> > call-sites to prepare for the merge of cros_ec_cmd_xfer() into
> > cros_ec_cmd_xfer_status().
> >
> > As part of this update, change the error handling inside
> > cros_ec_get_sensor_count() such that the legacy LPC interface is tried
> > on all error values, not just when msg->result != EC_RESULT_SUCCESS.
> >
> > Signed-off-by: Prashant Malani <pmalani@chromium.org>
>
> Gwendal, I'd like to hear from you regarding this patch as you're the one that
> know most about the corner cases for the sensors in different hardware. Could
> you take a look and give us your Reviewed tag if all is good?
>
Gwendal, could you kindly take a look? Thanks!

> Thanks,
>
>  Enric
>
> > ---
> >  drivers/platform/chrome/cros_ec_proto.c | 15 ++++-----------
> >  1 file changed, 4 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > index dda182132a6a..2cb1defcdd13 100644
> > --- a/drivers/platform/chrome/cros_ec_proto.c
> > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > @@ -650,7 +650,7 @@ static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> >       msg->insize = size;
> >       msg->outsize = 0;
> >
> > -     ret = cros_ec_cmd_xfer(ec_dev, msg);
> > +     ret = cros_ec_cmd_xfer_status(ec_dev, msg);
> >       if (ret > 0) {
> >               ec_dev->event_size = ret - 1;
> >               ec_dev->event_data = *event;
> > @@ -694,7 +694,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
> >       msg->insize = sizeof(ec_dev->event_data.data);
> >       msg->outsize = 0;
> >
> > -     ec_dev->event_size = cros_ec_cmd_xfer(ec_dev, msg);
> > +     ec_dev->event_size = cros_ec_cmd_xfer_status(ec_dev, msg);
> >       ec_dev->event_data.event_type = EC_MKBP_EVENT_KEY_MATRIX;
> >       memcpy(&ec_dev->event_data.data, msg->data,
> >              sizeof(ec_dev->event_data.data));
> > @@ -883,11 +883,9 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> >       params = (struct ec_params_motion_sense *)msg->data;
> >       params->cmd = MOTIONSENSE_CMD_DUMP;
> >
> > -     ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
> > +     ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
> >       if (ret < 0) {
> >               sensor_count = ret;
> > -     } else if (msg->result != EC_RES_SUCCESS) {
> > -             sensor_count = -EPROTO;
> >       } else {
> >               resp = (struct ec_response_motion_sense *)msg->data;
> >               sensor_count = resp->dump.sensor_count;
> > @@ -898,9 +896,7 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> >        * Check legacy mode: Let's find out if sensors are accessible
> >        * via LPC interface.
> >        */
> > -     if (sensor_count == -EPROTO &&
> > -         ec->cmd_offset == 0 &&
> > -         ec_dev->cmd_readmem) {
> > +     if (sensor_count < 0 && ec->cmd_offset == 0 && ec_dev->cmd_readmem) {
> >               ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS,
> >                               1, &status);
> >               if (ret >= 0 &&
> > @@ -915,9 +911,6 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> >                        */
> >                       sensor_count = 0;
> >               }
> > -     } else if (sensor_count == -EPROTO) {
> > -             /* EC responded, but does not understand DUMP command. */
> > -             sensor_count = 0;
> >       }
> >       return sensor_count;
> >  }
> >

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

* Re: [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites
  2020-09-14 23:29   ` Prashant Malani
@ 2020-09-18 23:38     ` Gwendal Grignou
  2020-09-21  8:55       ` Enric Balletbo i Serra
  0 siblings, 1 reply; 7+ messages in thread
From: Gwendal Grignou @ 2020-09-18 23:38 UTC (permalink / raw)
  To: Prashant Malani
  Cc: Enric Balletbo i Serra, Linux Kernel Mailing List, Benson Leung,
	Guenter Roeck

On Mon, Sep 14, 2020 at 4:29 PM Prashant Malani <pmalani@chromium.org> wrote:
>
> Thanks Enric,
>
> On Mon, Sep 7, 2020 at 3:48 AM Enric Balletbo i Serra
> <enric.balletbo@collabora.com> wrote:
> >
> > Hi Prashant,
> >
> > Thank you for your patch.
> >
> > On 3/9/20 11:54, Prashant Malani wrote:
> > > Since all the other call-sites of cros_ec_cmd_xfer() have been converted
> > > to use cros_ec_cmd_xfer_status() instead, update the remaining
> > > call-sites to prepare for the merge of cros_ec_cmd_xfer() into
> > > cros_ec_cmd_xfer_status().
> > >
> > > As part of this update, change the error handling inside
> > > cros_ec_get_sensor_count() such that the legacy LPC interface is tried
> > > on all error values, not just when msg->result != EC_RESULT_SUCCESS.
> > >
> > > Signed-off-by: Prashant Malani <pmalani@chromium.org>
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Tested-by: Gwendal Grignou <gwendal@chromium.org>

There is a slight change in API in cros_ec_get_sensor_count(): it will
return a negative number of sensors when there
are no sensors on arm platform when MOTIONSENSE_CMD_DUMP is not
supported (typical for sensorless chromebook) instead of 0.
However, this is not a problem when probing the EC as we ignore errors
only looking for cros_ec_get_sensor_count() returning a positive
number of sensors.

> >
> > Gwendal, I'd like to hear from you regarding this patch as you're the one that
> > know most about the corner cases for the sensors in different hardware. Could
> > you take a look and give us your Reviewed tag if all is good?
> >
> Gwendal, could you kindly take a look? Thanks!
>
> > Thanks,
> >
> >  Enric
> >
> > > ---
> > >  drivers/platform/chrome/cros_ec_proto.c | 15 ++++-----------
> > >  1 file changed, 4 insertions(+), 11 deletions(-)
> > >
> > > diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> > > index dda182132a6a..2cb1defcdd13 100644
> > > --- a/drivers/platform/chrome/cros_ec_proto.c
> > > +++ b/drivers/platform/chrome/cros_ec_proto.c
> > > @@ -650,7 +650,7 @@ static int get_next_event_xfer(struct cros_ec_device *ec_dev,
> > >       msg->insize = size;
> > >       msg->outsize = 0;
> > >
> > > -     ret = cros_ec_cmd_xfer(ec_dev, msg);
> > > +     ret = cros_ec_cmd_xfer_status(ec_dev, msg);
> > >       if (ret > 0) {
> > >               ec_dev->event_size = ret - 1;
> > >               ec_dev->event_data = *event;
> > > @@ -694,7 +694,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
> > >       msg->insize = sizeof(ec_dev->event_data.data);
> > >       msg->outsize = 0;
> > >
> > > -     ec_dev->event_size = cros_ec_cmd_xfer(ec_dev, msg);
> > > +     ec_dev->event_size = cros_ec_cmd_xfer_status(ec_dev, msg);
> > >       ec_dev->event_data.event_type = EC_MKBP_EVENT_KEY_MATRIX;
> > >       memcpy(&ec_dev->event_data.data, msg->data,
> > >              sizeof(ec_dev->event_data.data));
> > > @@ -883,11 +883,9 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> > >       params = (struct ec_params_motion_sense *)msg->data;
> > >       params->cmd = MOTIONSENSE_CMD_DUMP;
> > >
> > > -     ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
> > > +     ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
> > >       if (ret < 0) {
> > >               sensor_count = ret;
> > > -     } else if (msg->result != EC_RES_SUCCESS) {
> > > -             sensor_count = -EPROTO;
> > >       } else {
> > >               resp = (struct ec_response_motion_sense *)msg->data;
> > >               sensor_count = resp->dump.sensor_count;
> > > @@ -898,9 +896,7 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> > >        * Check legacy mode: Let's find out if sensors are accessible
> > >        * via LPC interface.
> > >        */
> > > -     if (sensor_count == -EPROTO &&
> > > -         ec->cmd_offset == 0 &&
> > > -         ec_dev->cmd_readmem) {
> > > +     if (sensor_count < 0 && ec->cmd_offset == 0 && ec_dev->cmd_readmem) {
> > >               ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS,
> > >                               1, &status);
> > >               if (ret >= 0 &&
> > > @@ -915,9 +911,6 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
> > >                        */
> > >                       sensor_count = 0;
> > >               }
> > > -     } else if (sensor_count == -EPROTO) {
> > > -             /* EC responded, but does not understand DUMP command. */
> > > -             sensor_count = 0;
> > >       }
> > >       return sensor_count;
> > >  }
> > >

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

* Re: [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites
  2020-09-18 23:38     ` Gwendal Grignou
@ 2020-09-21  8:55       ` Enric Balletbo i Serra
  0 siblings, 0 replies; 7+ messages in thread
From: Enric Balletbo i Serra @ 2020-09-21  8:55 UTC (permalink / raw)
  To: Gwendal Grignou, Prashant Malani
  Cc: Linux Kernel Mailing List, Benson Leung, Guenter Roeck

Hi Prashant and Gwendal,

On 19/9/20 1:38, Gwendal Grignou wrote:
> On Mon, Sep 14, 2020 at 4:29 PM Prashant Malani <pmalani@chromium.org> wrote:
>>
>> Thanks Enric,
>>
>> On Mon, Sep 7, 2020 at 3:48 AM Enric Balletbo i Serra
>> <enric.balletbo@collabora.com> wrote:
>>>
>>> Hi Prashant,
>>>
>>> Thank you for your patch.
>>>
>>> On 3/9/20 11:54, Prashant Malani wrote:
>>>> Since all the other call-sites of cros_ec_cmd_xfer() have been converted
>>>> to use cros_ec_cmd_xfer_status() instead, update the remaining
>>>> call-sites to prepare for the merge of cros_ec_cmd_xfer() into
>>>> cros_ec_cmd_xfer_status().
>>>>
>>>> As part of this update, change the error handling inside
>>>> cros_ec_get_sensor_count() such that the legacy LPC interface is tried
>>>> on all error values, not just when msg->result != EC_RESULT_SUCCESS.
>>>>
>>>> Signed-off-by: Prashant Malani <pmalani@chromium.org>
> Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
> Tested-by: Gwendal Grignou <gwendal@chromium.org>
> 
> There is a slight change in API in cros_ec_get_sensor_count(): it will
> return a negative number of sensors when there
> are no sensors on arm platform when MOTIONSENSE_CMD_DUMP is not
> supported (typical for sensorless chromebook) instead of 0.
> However, this is not a problem when probing the EC as we ignore errors
> only looking for cros_ec_get_sensor_count() returning a positive
> number of sensors.
> 

I added this comment to the commit log and applied the patch for 5.10.

Thanks,
  Enric

>>>
>>> Gwendal, I'd like to hear from you regarding this patch as you're the one that
>>> know most about the corner cases for the sensors in different hardware. Could
>>> you take a look and give us your Reviewed tag if all is good?
>>>
>> Gwendal, could you kindly take a look? Thanks!
>>
>>> Thanks,
>>>
>>>  Enric
>>>
>>>> ---
>>>>  drivers/platform/chrome/cros_ec_proto.c | 15 ++++-----------
>>>>  1 file changed, 4 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
>>>> index dda182132a6a..2cb1defcdd13 100644
>>>> --- a/drivers/platform/chrome/cros_ec_proto.c
>>>> +++ b/drivers/platform/chrome/cros_ec_proto.c
>>>> @@ -650,7 +650,7 @@ static int get_next_event_xfer(struct cros_ec_device *ec_dev,
>>>>       msg->insize = size;
>>>>       msg->outsize = 0;
>>>>
>>>> -     ret = cros_ec_cmd_xfer(ec_dev, msg);
>>>> +     ret = cros_ec_cmd_xfer_status(ec_dev, msg);
>>>>       if (ret > 0) {
>>>>               ec_dev->event_size = ret - 1;
>>>>               ec_dev->event_data = *event;
>>>> @@ -694,7 +694,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
>>>>       msg->insize = sizeof(ec_dev->event_data.data);
>>>>       msg->outsize = 0;
>>>>
>>>> -     ec_dev->event_size = cros_ec_cmd_xfer(ec_dev, msg);
>>>> +     ec_dev->event_size = cros_ec_cmd_xfer_status(ec_dev, msg);
>>>>       ec_dev->event_data.event_type = EC_MKBP_EVENT_KEY_MATRIX;
>>>>       memcpy(&ec_dev->event_data.data, msg->data,
>>>>              sizeof(ec_dev->event_data.data));
>>>> @@ -883,11 +883,9 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>>>>       params = (struct ec_params_motion_sense *)msg->data;
>>>>       params->cmd = MOTIONSENSE_CMD_DUMP;
>>>>
>>>> -     ret = cros_ec_cmd_xfer(ec->ec_dev, msg);
>>>> +     ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg);
>>>>       if (ret < 0) {
>>>>               sensor_count = ret;
>>>> -     } else if (msg->result != EC_RES_SUCCESS) {
>>>> -             sensor_count = -EPROTO;
>>>>       } else {
>>>>               resp = (struct ec_response_motion_sense *)msg->data;
>>>>               sensor_count = resp->dump.sensor_count;
>>>> @@ -898,9 +896,7 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>>>>        * Check legacy mode: Let's find out if sensors are accessible
>>>>        * via LPC interface.
>>>>        */
>>>> -     if (sensor_count == -EPROTO &&
>>>> -         ec->cmd_offset == 0 &&
>>>> -         ec_dev->cmd_readmem) {
>>>> +     if (sensor_count < 0 && ec->cmd_offset == 0 && ec_dev->cmd_readmem) {
>>>>               ret = ec_dev->cmd_readmem(ec_dev, EC_MEMMAP_ACC_STATUS,
>>>>                               1, &status);
>>>>               if (ret >= 0 &&
>>>> @@ -915,9 +911,6 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec)
>>>>                        */
>>>>                       sensor_count = 0;
>>>>               }
>>>> -     } else if (sensor_count == -EPROTO) {
>>>> -             /* EC responded, but does not understand DUMP command. */
>>>> -             sensor_count = 0;
>>>>       }
>>>>       return sensor_count;
>>>>  }
>>>>

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

* Re: [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer()
  2020-09-03  9:54 ` [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer() Prashant Malani
@ 2020-09-21  8:55   ` Enric Balletbo i Serra
  0 siblings, 0 replies; 7+ messages in thread
From: Enric Balletbo i Serra @ 2020-09-21  8:55 UTC (permalink / raw)
  To: Prashant Malani, linux-kernel; +Cc: gwendal, Benson Leung, Guenter Roeck

Hi Prashant,

On 3/9/20 11:54, Prashant Malani wrote:
> Since cros_ec_cmd_xfer_status() now returns Linux error codes and all
> other files use that command, remove the now-unused function
> cros_ec_cmd_xfer().
> 
> Signed-off-by: Prashant Malani <pmalani@chromium.org>

Applied for 5.10

Thanks,
 Enric

> ---
>  drivers/platform/chrome/cros_ec_proto.c | 44 +++++++------------------
>  1 file changed, 11 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
> index 2cb1defcdd13..0ecee8b8773d 100644
> --- a/drivers/platform/chrome/cros_ec_proto.c
> +++ b/drivers/platform/chrome/cros_ec_proto.c
> @@ -549,19 +549,22 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev)
>  EXPORT_SYMBOL(cros_ec_query_all);
>  
>  /**
> - * cros_ec_cmd_xfer() - Send a command to the ChromeOS EC.
> + * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
>   * @ec_dev: EC device.
>   * @msg: Message to write.
>   *
> - * Call this to send a command to the ChromeOS EC.  This should be used
> - * instead of calling the EC's cmd_xfer() callback directly.
> + * Call this to send a command to the ChromeOS EC. This should be used instead of calling the EC's
> + * cmd_xfer() callback directly. It returns success status only if both the command was transmitted
> + * successfully and the EC replied with success status.
>   *
> - * Return: 0 on success or negative error code.
> + * Return:
> + * >=0 - The number of bytes transferred
> + * <0 - Linux error code
>   */
> -static 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 ret;
> +	int ret, mapped;
>  
>  	mutex_lock(&ec_dev->lock);
>  	if (ec_dev->proto_version == EC_PROTO_VERSION_UNKNOWN) {
> @@ -598,42 +601,17 @@ static int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
>  			return -EMSGSIZE;
>  		}
>  	}
> +
>  	ret = send_command(ec_dev, msg);
>  	mutex_unlock(&ec_dev->lock);
>  
> -	return ret;
> -}
> -
> -/**
> - * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
> - * @ec_dev: EC device.
> - * @msg: Message to write.
> - *
> - * This function is identical to cros_ec_cmd_xfer, except it returns success
> - * status only if both the command was transmitted successfully and the EC
> - * replied with success status. It's not necessary to check msg->result when
> - * using this function.
> - *
> - * Return:
> - * >=0 - The number of bytes transferred
> - * <0 - Linux error code
> - */
> -int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
> -			    struct cros_ec_command *msg)
> -{
> -	int ret, mapped;
> -
> -	ret = cros_ec_cmd_xfer(ec_dev, msg);
> -	if (ret < 0) {
> -		dev_err(ec_dev->dev, "Command xfer error (err:%d)\n", ret);
> -		return ret;
> -	}
>  	mapped = cros_ec_map_error(msg->result);
>  	if (mapped) {
>  		dev_dbg(ec_dev->dev, "Command result (err: %d [%d])\n",
>  			msg->result, mapped);
>  		ret = mapped;
>  	}
> +
>  	return ret;
>  }
>  EXPORT_SYMBOL(cros_ec_cmd_xfer_status);
> 

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

end of thread, other threads:[~2020-09-21  8:55 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-03  9:54 [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Prashant Malani
2020-09-03  9:54 ` [PATCH 2/2] platform/chrome: cros_ec_proto: Drop cros_ec_cmd_xfer() Prashant Malani
2020-09-21  8:55   ` Enric Balletbo i Serra
2020-09-07 10:48 ` [PATCH 1/2] platform/chrome: cros_ec_proto: Update cros_ec_cmd_xfer() call-sites Enric Balletbo i Serra
2020-09-14 23:29   ` Prashant Malani
2020-09-18 23:38     ` Gwendal Grignou
2020-09-21  8:55       ` Enric Balletbo i Serra

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).