lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAFqH_51++20mDsv77hDt3tYzKpwLrGowGwS3-rC6SU5LoLCQhw@mail.gmail.com>
Date:	Tue, 19 Jul 2016 20:00:37 +0200
From:	Enric Balletbo Serra <eballetbo@...il.com>
To:	Jonathan Cameron <jic23@...nel.org>
Cc:	Enric Balletbo i Serra <enric.balletbo@...labora.com>,
	linux-kernel@...r.kernel.org, linux-iio@...r.kernel.org,
	Olof Johansson <olof@...om.net>,
	Lee Jones <lee.jones@...aro.org>,
	Hartmut Knaack <knaack.h@....de>,
	Lars-Peter Clausen <lars@...afoo.de>,
	Peter Meerwald-Stadler <pmeerw@...erw.net>,
	Guenter Roeck <groeck@...omium.org>,
	Gwendal Grignou <gwendal@...omium.org>
Subject: Re: [PATCH 02/10] mfd: cros_ec: update MOTIONSENSE definitions and commands.

Hi Jonathan,

Many thanks for your comments.

2016-07-18 15:49 GMT+02:00 Jonathan Cameron <jic23@...nel.org>:
> On 18/07/16 08:02, Enric Balletbo i Serra wrote:
>> Let's update the command header to include the definitions related to
>> the sensors attached behind the ChromeOS Embedded Controller. The new
>> commands and definitions allow us to get information from these sensors.
>>
>> Signed-off-by: Gwendal Grignou <gwendal@...omium.org>
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@...labora.com>
> Again, I'd be happier seeing this stuff introduced as and when it
> is needed rather than in a magic patch. It's hard to review stuff
> if it's broken up across multiple patches like this.
>
> A few other bits and pieces inline.
>
> Jonathan
>> ---
>>  include/linux/mfd/cros_ec_commands.h | 260 +++++++++++++++++++++++++++++++----
>>  1 file changed, 231 insertions(+), 29 deletions(-)
>>
>> diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
>> index 76728ff..f26a806 100644
>> --- a/include/linux/mfd/cros_ec_commands.h
>> +++ b/include/linux/mfd/cros_ec_commands.h
>> @@ -1290,7 +1290,13 @@ enum motionsense_command {
>>
>>       /*
>>        * EC Rate command is a setter/getter command for the EC sampling rate
>> -      * of all motion sensors in milliseconds.
>> +      * in milliseconds.
>> +      * It is per sensor, the EC run sample task  at the minimum of all
>> +      * sensors EC_RATE.
>> +      * For sensors without hardware FIFO, EC_RATE should be equals to 1/ODR
>> +      * to collect all the sensor samples.
>> +      * For sensor with hardware FIFO, EC_RATE is used as the maximal delay
>> +      * to process of all motion sensors in milliseconds.
>>        */
>>       MOTIONSENSE_CMD_EC_RATE = 2,
>>
>> @@ -1315,37 +1321,138 @@ enum motionsense_command {
>>        */
>>       MOTIONSENSE_CMD_KB_WAKE_ANGLE = 5,
>>
>> -     /* Number of motionsense sub-commands. */
>> -     MOTIONSENSE_NUM_CMDS
>> -};
>> +     /*
>> +      * Returns a single sensor data.
>> +      */
> Please use standard kernel documentation formats throughout.
> If not you may face a Linus rant ;)

Seems that this specific file does not follow the kernel-doc format
strictly [1], should I add the new entries in kernel-doc format or
follow the file style?

Or maybe I should first do a patch to change all the file to the
kernel-doc format?

Or you meant only replace  the

/*
 * one line
 */

for

/* one line */

[1] https://www.kernel.org/doc/Documentation/kernel-doc-nano-HOWTO.txt

>> +     MOTIONSENSE_CMD_DATA = 6,
>> +
>> +     /*
>> +      * Return sensor fifo info.
>> +      */
>> +     MOTIONSENSE_CMD_FIFO_INFO = 7,
>> +
>> +     /*
>> +      * Insert a flush element in the fifo and return sensor fifo info.
>> +      * The host can use that element to synchronize its operation.
>> +      */
>> +     MOTIONSENSE_CMD_FIFO_FLUSH = 8,
>>
>> -enum motionsensor_id {
>> -     EC_MOTION_SENSOR_ACCEL_BASE = 0,
>> -     EC_MOTION_SENSOR_ACCEL_LID = 1,
>> -     EC_MOTION_SENSOR_GYRO = 2,
>> +     /*
>> +      * Return a portion of the fifo.
>> +      */
>> +     MOTIONSENSE_CMD_FIFO_READ = 9,
>> +
>> +     /*
>> +      * Perform low level calibration.
>> +      * On sensors that support it, ask to do offset calibration.
>> +      */
>> +     MOTIONSENSE_CMD_PERFORM_CALIB = 10,
>> +
>> +     /*
>> +      * Sensor Offset command is a setter/getter command for the offset
>> +      * used for calibration.
>> +      * The offsets can be calculated by the host, or via
>> +      * PERFORM_CALIB command.
>> +      */
>> +     MOTIONSENSE_CMD_SENSOR_OFFSET = 11,
>> +
>> +     /*
>> +      * List available activities for a MOTION sensor.
>> +      * Indicates if they are enabled or disabled.
>> +      */
>> +     MOTIONSENSE_CMD_LIST_ACTIVITIES = 12,
>>
>>       /*
>> -      * Note, if more sensors are added and this count changes, the padding
>> -      * in ec_response_motion_sense dump command must be modified.
>> +      * Activity management
>> +      * Enable/Disable activity recognition.
>>        */
>> -     EC_MOTION_SENSOR_COUNT = 3
>> +     MOTIONSENSE_CMD_SET_ACTIVITY = 13,
>> +
>> +     /* Number of motionsense sub-commands. */
>> +     MOTIONSENSE_NUM_CMDS
>>  };
>>
>>  /* List of motion sensor types. */
>>  enum motionsensor_type {
>>       MOTIONSENSE_TYPE_ACCEL = 0,
>>       MOTIONSENSE_TYPE_GYRO = 1,
>> +     MOTIONSENSE_TYPE_MAG = 2,
>> +     MOTIONSENSE_TYPE_PROX = 3,
>> +     MOTIONSENSE_TYPE_LIGHT = 4,
>> +     MOTIONSENSE_TYPE_ACTIVITY = 5,
>> +     MOTIONSENSE_TYPE_MAX,
>>  };
>>
>>  /* List of motion sensor locations. */
>>  enum motionsensor_location {
>>       MOTIONSENSE_LOC_BASE = 0,
>>       MOTIONSENSE_LOC_LID = 1,
>> +     MOTIONSENSE_LOC_MAX,
>>  };
>>
>>  /* List of motion sensor chips. */
>>  enum motionsensor_chip {
>>       MOTIONSENSE_CHIP_KXCJ9 = 0,
>> +     MOTIONSENSE_CHIP_LSM6DS0 = 1,
>> +     MOTIONSENSE_CHIP_BMI160 = 2,
>> +     MOTIONSENSE_CHIP_SI1141 = 3,
>> +     MOTIONSENSE_CHIP_SI1142 = 4,
>> +     MOTIONSENSE_CHIP_SI1143 = 5,
>> +     MOTIONSENSE_CHIP_KX022 = 6,
>> +     MOTIONSENSE_CHIP_L3GD20H = 7,
> Interesting.  So the driver needs some knowledge of what
> is behind it.  I'll read on with interest ;)
>> +};
>> +
>> +struct ec_response_motion_sensor_data {
>> +     /* Flags for each sensor. */
>> +     uint8_t flags;
>> +     /* sensor number the data comes from */
>> +     uint8_t sensor_num;
>> +     /* Each sensor is up to 3-axis. */
>> +     union {
>> +             int16_t             data[3];
>> +             struct {
>> +                     uint16_t    rsvd;
>> +                     uint32_t    timestamp;
>> +             } __packed;
>> +             struct {
>> +                     uint8_t     activity; /* motionsensor_activity */
>> +                     uint8_t     state;
>> +                     int16_t     add_info[2];
>> +             };
>> +     };
>> +} __packed;
>> +
>> +struct ec_response_motion_sense_fifo_info {
>> +     /* Size of the fifo */
>> +     uint16_t size;
>> +     /* Amount of space used in the fifo */
>> +     uint16_t count;
>> +     /* TImestamp recorded in us */
> Timestamp
>> +     uint32_t timestamp;
>> +     /* Total amount of vector lost */
>> +     uint16_t total_lost;
>> +     /* Lost events since the last fifo_info, per sensors */
>> +     uint16_t lost[0];
>> +} __packed;
>> +
>> +struct ec_response_motion_sense_fifo_data {
>> +     uint32_t number_data;
>> +     struct ec_response_motion_sensor_data data[0];
>> +} __packed;
>> +
>> +/* List supported activity recognition */
>> +enum motionsensor_activity {
>> +     MOTIONSENSE_ACTIVITY_RESERVED = 0,
>> +     MOTIONSENSE_ACTIVITY_SIG_MOTION = 1,
>> +     MOTIONSENSE_ACTIVITY_DOUBLE_TAP = 2,
>> +};
>> +
>> +struct ec_motion_sense_activity {
>> +     uint8_t sensor_num;
>> +     uint8_t activity; /* one of enum motionsensor_activity */
>> +     uint8_t enable;   /* 1: enable, 0: disable */
>> +     uint8_t reserved;
>> +     uint16_t parameters[3]; /* activity dependent parameters */
>>  };
>>
>>  /* Module flag masks used for the dump sub-command. */
>> @@ -1355,41 +1462,61 @@ enum motionsensor_chip {
>>  #define MOTIONSENSE_SENSOR_FLAG_PRESENT (1<<0)
>>
>>  /*
>> + * Flush entry for synchronisation.
>> + * data contains time stamp
>> + */
>> +#define MOTIONSENSE_SENSOR_FLAG_FLUSH (1<<0)
>> +#define MOTIONSENSE_SENSOR_FLAG_TIMESTAMP (1<<1)
>> +#define MOTIONSENSE_SENSOR_FLAG_WAKEUP (1<<2)
>> +
>> +/*
>>   * Send this value for the data element to only perform a read. If you
>>   * send any other value, the EC will interpret it as data to set and will
>>   * return the actual value set.
>>   */
>>  #define EC_MOTION_SENSE_NO_VALUE -1
>>
>> +#define EC_MOTION_SENSE_INVALID_CALIB_TEMP 0x8000
>> +
>> +/* MOTIONSENSE_CMD_SENSOR_OFFSET subcommand flag */
>> +/* Set Calibration information */
>> +#define MOTION_SENSE_SET_OFFSET 1
>> +
>>  struct ec_params_motion_sense {
>>       uint8_t cmd;
>>       union {
>> -             /* Used for MOTIONSENSE_CMD_DUMP. */
>> +             /* Used for MOTIONSENSE_CMD_DUMP */
>>               struct {
>> -                     /* no args */
>> +                     /*
>> +                      * Maximal number of sensor the host is expecting.
>> +                      * 0 means the host is only interested in the number
>> +                      * of sensors controlled by the EC.
>> +                      */
>> +                     uint8_t max_sensor_count;
>>               } dump;
>>
>>               /*
>> -              * Used for MOTIONSENSE_CMD_EC_RATE and
>> -              * MOTIONSENSE_CMD_KB_WAKE_ANGLE.
>> +              * Used for MOTIONSENSE_CMD_KB_WAKE_ANGLE.
>>                */
>>               struct {
>> -                     /* Data to set or EC_MOTION_SENSE_NO_VALUE to read. */
>> +                     /* Data to set or EC_MOTION_SENSE_NO_VALUE to read.
>> +                      * kb_wake_angle: angle to wakup AP.
>> +                      */
>>                       int16_t data;
>> -             } ec_rate, kb_wake_angle;
>> +             } kb_wake_angle;
>>
>> -             /* Used for MOTIONSENSE_CMD_INFO. */
>> +             /* Used for MOTIONSENSE_CMD_INFO, MOTIONSENSE_CMD_DATA
>> +              * and MOTIONSENSE_CMD_PERFORM_CALIB.
>> +              */
>>               struct {
>> -                     /* Should be element of enum motionsensor_id. */
>>                       uint8_t sensor_num;
>> -             } info;
>> +             } info, data, fifo_flush, perform_calib, list_activities;
>>
>>               /*
>> -              * Used for MOTIONSENSE_CMD_SENSOR_ODR and
>> -              * MOTIONSENSE_CMD_SENSOR_RANGE.
>> +              * Used for MOTIONSENSE_CMD_EC_RATE, MOTIONSENSE_CMD_SENSOR_ODR
>> +              * and MOTIONSENSE_CMD_SENSOR_RANGE.
>>                */
>>               struct {
>> -                     /* Should be element of enum motionsensor_id. */
>>                       uint8_t sensor_num;
>>
>>                       /* Rounding flag, true for round-up, false for down. */
>> @@ -1399,22 +1526,69 @@ struct ec_params_motion_sense {
>>
>>                       /* Data to set or EC_MOTION_SENSE_NO_VALUE to read. */
>>                       int32_t data;
>> -             } sensor_odr, sensor_range;
>> +             } ec_rate, sensor_odr, sensor_range;
>> +
>> +             /* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */
>> +             struct {
>> +                     uint8_t sensor_num;
>> +
>> +                     /*
>> +                      * bit 0: If set (MOTION_SENSE_SET_OFFSET), set
>> +                      * the calibration information in the EC.
>> +                      * If unset, just retrieve calibration information.
>> +                      */
>> +                     uint16_t flags;
>> +
>> +                     /*
>> +                      * Temperature at calibration, in units of 0.01 C
>> +                      * 0x8000: invalid / unknown.
>> +                      * 0x0: 0C
>> +                      * 0x7fff: +327.67C
>> +                      */
>> +                     int16_t temp;
>> +
>> +                     /*
>> +                      * Offset for calibration.
>> +                      * Unit:
>> +                      * Accelerometer: 1/1024 g
>> +                      * Gyro:          1/1024 deg/s
>> +                      * Compass:       1/16 uT
>> +                      */
>> +                     int16_t offset[3];
>> +             } __packed sensor_offset;
>> +
>> +             /* Used for MOTIONSENSE_CMD_FIFO_INFO */
>> +             struct {
>> +             } fifo_info;
>> +
>> +             /* Used for MOTIONSENSE_CMD_FIFO_READ */
>> +             struct {
>> +                     /*
>> +                      * Number of expected vector to return.
>> +                      * EC may return less or 0 if none available.
>> +                      */
>> +                     uint32_t max_data_vector;
>> +             } fifo_read;
>> +
>> +             struct ec_motion_sense_activity set_activity;
>>       };
>>  } __packed;
>>
>>  struct ec_response_motion_sense {
>>       union {
>> -             /* Used for MOTIONSENSE_CMD_DUMP. */
>> +             /* Used for MOTIONSENSE_CMD_DUMP */
>>               struct {
>>                       /* Flags representing the motion sensor module. */
>>                       uint8_t module_flags;
>>
>> -                     /* Flags for each sensor in enum motionsensor_id. */
>> -                     uint8_t sensor_flags[EC_MOTION_SENSOR_COUNT];
>> +                     /* Number of sensors managed directly by the EC */
>> +                     uint8_t sensor_count;
>>
>> -                     /* Array of all sensor data. Each sensor is 3-axis. */
>> -                     int16_t data[3*EC_MOTION_SENSOR_COUNT];
>> +                     /*
>> +                      * sensor data is truncated if response_max is too small
>> +                      * for holding all the data.
>> +                      */
>> +                     struct ec_response_motion_sensor_data sensor[0];
>>               } dump;
>>
>>               /* Used for MOTIONSENSE_CMD_INFO. */
>> @@ -1429,6 +1603,9 @@ struct ec_response_motion_sense {
>>                       uint8_t chip;
>>               } info;
>>
>> +             /* Used for MOTIONSENSE_CMD_DATA */
>> +             struct ec_response_motion_sensor_data data;
>> +
>>               /*
>>                * Used for MOTIONSENSE_CMD_EC_RATE, MOTIONSENSE_CMD_SENSOR_ODR,
>>                * MOTIONSENSE_CMD_SENSOR_RANGE, and
>> @@ -1438,6 +1615,25 @@ struct ec_response_motion_sense {
>>                       /* Current value of the parameter queried. */
>>                       int32_t ret;
>>               } ec_rate, sensor_odr, sensor_range, kb_wake_angle;
>> +
>> +             /* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */
>> +             struct {
>> +                     int16_t temp;
>> +                     int16_t offset[3];
>> +             } sensor_offset, perform_calib;
>> +
>> +             struct ec_response_motion_sense_fifo_info fifo_info, fifo_flush;
>> +
>> +             struct ec_response_motion_sense_fifo_data fifo_read;
>> +
>> +             struct {
>> +                     uint16_t reserved;
>> +                     uint32_t enabled;
>> +                     uint32_t disabled;
>> +             } __packed list_activities;
>> +
>> +             struct {
>> +             } set_activity;
>>       };
>>  } __packed;
>>
>> @@ -1819,6 +2015,12 @@ union ec_response_get_next_data {
>>
>>       /* Unaligned */
>>       uint32_t  host_event;
>> +
>> +     struct {
>> +             /* For aligning the fifo_info */
>> +             uint8_t rsvd[3];
>> +             struct ec_response_motion_sense_fifo_info info;
>> +     }        sensor_fifo;
>>  } __packed;
>>
>>  struct ec_response_get_next_event {
>>
>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ