2019-05-09 21:19:28

by Gwendal Grignou

[permalink] [raw]
Subject: [PATCH v3 00/30] Update cros_ec_commands.h

The interface between CrosEC embedded controller and the host,
described by cros_ec_commands.h, as diverged from what the embedded
controller really support.

The source of thruth is at
https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h

That include file is converted to remove ACPI and Embedded only code.

From now on, cros_ec_commands.h will be automatically generated from
the file above, do not modify directly.

Fell free to squash the commits below.

Changes in v3:
- Rebase after commit 81888d8ab1532 ("mfd: cros_ec: Update the EC feature codes")
- Add Acked-by: Benson Leung <[email protected]>

Changes in v2:
- Move I2S changes at the end of the patchset, squashed with change in
sound/soc/codecs/cros_ec_codec.c to match new interface.
- Add Acked-by: Enric Balletbo i Serra <[email protected]>

Gwendal Grignou (30):
mfd: cros_ec: Update license term
mfd: cros_ec: Zero BUILD_ macro
mfd: cros_ec: set comments properly
mfd: cros_ec: add ec_align macros
mfd: cros_ec: Define commands as 4-digit UPPER CASE hex values
mfd: cros_ec: use BIT macro
mfd: cros_ec: Update ACPI interface definition
mfd: cros_ec: move HDMI CEC API definition
mfd: cros_ec: Remove zero-size structs
mfd: cros_ec: Add Flash V2 commands API
mfd: cros_ec: Add PWM_SET_DUTY API
mfd: cros_ec: Add lightbar v2 API
mfd: cros_ec: Expand hash API
mfd: cros_ec: Add EC transport protocol v4
mfd: cros_ec: Complete MEMS sensor API
mfd: cros_ec: Fix event processing API
mfd: cros_ec: Add fingerprint API
mfd: cros_ec: Fix temperature API
mfd: cros_ec: Complete Power and USB PD API
mfd: cros_ec: Add API for keyboard testing
mfd: cros_ec: Add Hibernate API
mfd: cros_ec: Add Smart Battery Firmware update API
mfd: cros_ec: Add I2C passthru protection API
mfd: cros_ec: Add API for EC-EC communication
mfd: cros_ec: Add API for Touchpad support
mfd: cros_ec: Add API for Fingerprint support
mfd: cros_ec: Add API for rwsig
mfd: cros_ec: Add SKU ID and Secure storage API
mfd: cros_ec: Add Management API entry points
mfd: cros_ec: Update I2S API

include/linux/mfd/cros_ec_commands.h | 3658 ++++++++++++++++++++------
sound/soc/codecs/cros_ec_codec.c | 8 +-
2 files changed, 2915 insertions(+), 751 deletions(-)

--
2.21.0.1020.gf2820cf01a-goog


2019-05-09 21:19:38

by Gwendal Grignou

[permalink] [raw]
Subject: [PATCH v3 04/30] mfd: cros_ec: add ec_align macros

To reduce code and improve performance of the embedded controller
firmware, pragma __aligned(2) or __aligned(4) are used when alignment to
16 or 32 bit boundary is expected.

Define all ec_align to packed when compiling kernel.

Acked-by: Enric Balletbo i Serra <[email protected]>
Acked-by: Benson Leung <[email protected]>
Signed-off-by: Gwendal Grignou <[email protected]>
---
include/linux/mfd/cros_ec_commands.h | 442 ++++++++++++++-------------
1 file changed, 238 insertions(+), 204 deletions(-)

diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
index a7a7060f44f7..c12ae9742e20 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -188,12 +188,46 @@
#ifndef __ACPI__

/*
- * Define __packed if someone hasn't beat us to it. Linux kernel style
- * checking prefers __packed over __attribute__((packed)).
+ * Attributes for EC request and response packets. Just defining __packed
+ * results in inefficient assembly code on ARM, if the structure is actually
+ * 32-bit aligned, as it should be for all buffers.
+ *
+ * Be very careful when adding these to existing structures. They will round
+ * up the structure size to the specified boundary.
+ *
+ * Also be very careful to make that if a structure is included in some other
+ * parent structure that the alignment will still be true given the packing of
+ * the parent structure. This is particularly important if the sub-structure
+ * will be passed as a pointer to another function, since that function will
+ * not know about the misaligment caused by the parent structure's packing.
+ *
+ * Also be very careful using __packed - particularly when nesting non-packed
+ * structures inside packed ones. In fact, DO NOT use __packed directly;
+ * always use one of these attributes.
+ *
+ * Once everything is annotated properly, the following search strings should
+ * not return ANY matches in this file other than right here:
+ *
+ * "__packed" - generates inefficient code; all sub-structs must also be packed
+ *
+ * "struct [^_]" - all structs should be annotated, except for structs that are
+ * members of other structs/unions (and their original declarations should be
+ * annotated).
*/
-#ifndef __packed
-#define __packed __attribute__((packed))
-#endif
+
+/*
+ * Packed structures make no assumption about alignment, so they do inefficient
+ * byte-wise reads.
+ */
+#define __ec_align1 __packed
+#define __ec_align2 __packed
+#define __ec_align4 __packed
+#define __ec_align_size1 __packed
+#define __ec_align_offset1 __packed
+#define __ec_align_offset2 __packed
+#define __ec_todo_packed __packed
+#define __ec_todo_unpacked
+

/* LPC command status byte masks */
/* EC has written a byte in the data register and host hasn't read it yet */
@@ -317,7 +351,7 @@ struct ec_lpc_host_args {
uint8_t command_version;
uint8_t data_size;
uint8_t checksum;
-} __packed;
+} __ec_align4;

/* Flags for ec_lpc_host_args.flags */
/*
@@ -488,7 +522,7 @@ struct ec_host_request {
uint8_t command_version;
uint8_t reserved;
uint16_t data_len;
-} __packed;
+} __ec_align4;

#define EC_HOST_RESPONSE_VERSION 3

@@ -507,7 +541,7 @@ struct ec_host_response {
uint16_t result;
uint16_t data_len;
uint16_t reserved;
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/*
@@ -536,7 +570,7 @@ struct ec_host_response {
*/
struct ec_response_proto_version {
uint32_t version;
-} __packed;
+} __ec_align4;

/*
* Hello. This is a simple command to test the EC is responsive to
@@ -550,7 +584,7 @@ struct ec_response_proto_version {
*/
struct ec_params_hello {
uint32_t in_data;
-} __packed;
+} __ec_align4;

/**
* struct ec_response_hello - Response to the hello command.
@@ -558,7 +592,7 @@ struct ec_params_hello {
*/
struct ec_response_hello {
uint32_t out_data;
-} __packed;
+} __ec_align4;

/* Get version number */
#define EC_CMD_GET_VERSION 0x02
@@ -581,7 +615,7 @@ struct ec_response_get_version {
char version_string_rw[32];
char reserved[32];
uint32_t current_image;
-} __packed;
+} __ec_align4;

/* Read test */
#define EC_CMD_READ_TEST 0x03
@@ -594,7 +628,7 @@ struct ec_response_get_version {
struct ec_params_read_test {
uint32_t offset;
uint32_t size;
-} __packed;
+} __ec_align4;

/**
* struct ec_response_read_test - Response to the read test command.
@@ -602,7 +636,7 @@ struct ec_params_read_test {
*/
struct ec_response_read_test {
uint32_t data[32];
-} __packed;
+} __ec_align4;

/*
* Get build information
@@ -624,7 +658,7 @@ struct ec_response_get_chip_info {
char vendor[32];
char name[32];
char revision[32];
-} __packed;
+} __ec_align4;

/* Get board HW version */
#define EC_CMD_GET_BOARD_VERSION 0x06
@@ -635,7 +669,7 @@ struct ec_response_get_chip_info {
*/
struct ec_response_board_version {
uint16_t board_version;
-} __packed;
+} __ec_align2;

/*
* Read memory-mapped data.
@@ -655,7 +689,7 @@ struct ec_response_board_version {
struct ec_params_read_memmap {
uint8_t offset;
uint8_t size;
-} __packed;
+} __ec_align1;

/* Read versions supported for a command */
#define EC_CMD_GET_CMD_VERSIONS 0x08
@@ -666,7 +700,7 @@ struct ec_params_read_memmap {
*/
struct ec_params_get_cmd_versions {
uint8_t cmd;
-} __packed;
+} __ec_align1;

/**
* struct ec_params_get_cmd_versions_v1 - Parameters for the get command
@@ -675,7 +709,7 @@ struct ec_params_get_cmd_versions {
*/
struct ec_params_get_cmd_versions_v1 {
uint16_t cmd;
-} __packed;
+} __ec_align2;

/**
* struct ec_response_get_cmd_version - Response to the get command versions.
@@ -684,7 +718,7 @@ struct ec_params_get_cmd_versions_v1 {
*/
struct ec_response_get_cmd_versions {
uint32_t version_mask;
-} __packed;
+} __ec_align4;

/*
* Check EC communications status (busy). This is needed on i2c/spi but not
@@ -707,7 +741,7 @@ enum ec_comms_status {
*/
struct ec_response_get_comms_status {
uint32_t flags; /* Mask of enum ec_comms_status */
-} __packed;
+} __ec_align4;

/* Fake a variety of responses, purely for testing purposes. */
#define EC_CMD_TEST_PROTOCOL 0x0a
@@ -717,12 +751,12 @@ struct ec_params_test_protocol {
uint32_t ec_result;
uint32_t ret_len;
uint8_t buf[32];
-} __packed;
+} __ec_align4;

/* Here it comes... */
struct ec_response_test_protocol {
uint8_t buf[32];
-} __packed;
+} __ec_align4;

/* Get protocol information */
#define EC_CMD_GET_PROTOCOL_INFO 0x0b
@@ -745,7 +779,7 @@ struct ec_response_get_protocol_info {
uint16_t max_request_packet_size;
uint16_t max_response_packet_size;
uint32_t flags;
-} __packed;
+} __ec_align4;


/*****************************************************************************/
@@ -763,12 +797,12 @@ struct ec_response_get_protocol_info {
struct ec_params_get_set_value {
uint32_t flags;
uint32_t value;
-} __packed;
+} __ec_align4;

struct ec_response_get_set_value {
uint32_t flags;
uint32_t value;
-} __packed;
+} __ec_align4;

/* More than one command can use these structs to get/set parameters. */
#define EC_CMD_GSV_PAUSE_IN_S5 0x0c
@@ -893,7 +927,7 @@ enum ec_feature_code {

struct ec_response_get_features {
uint32_t flags[2];
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* Flash commands */
@@ -918,7 +952,7 @@ struct ec_response_flash_info {
uint32_t write_block_size;
uint32_t erase_block_size;
uint32_t protect_block_size;
-} __packed;
+} __ec_align4;

/*
* Flags for version 1+ flash info command
@@ -959,7 +993,7 @@ struct ec_response_flash_info_1 {
/* Version 1 adds these fields: */
uint32_t write_ideal_size;
uint32_t flags;
-} __packed;
+} __ec_align4;

/*
* Read flash
@@ -976,7 +1010,7 @@ struct ec_response_flash_info_1 {
struct ec_params_flash_read {
uint32_t offset;
uint32_t size;
-} __packed;
+} __ec_align4;

/* Write flash */
#define EC_CMD_FLASH_WRITE 0x12
@@ -994,7 +1028,7 @@ struct ec_params_flash_write {
uint32_t offset;
uint32_t size;
/* Followed by data to write */
-} __packed;
+} __ec_align4;

/* Erase flash */
#define EC_CMD_FLASH_ERASE 0x13
@@ -1007,7 +1041,7 @@ struct ec_params_flash_write {
struct ec_params_flash_erase {
uint32_t offset;
uint32_t size;
-} __packed;
+} __ec_align4;

/*
* Get/set flash protection.
@@ -1053,7 +1087,7 @@ struct ec_params_flash_erase {
struct ec_params_flash_protect {
uint32_t mask;
uint32_t flags;
-} __packed;
+} __ec_align4;

/**
* struct ec_response_flash_protect - Response to the flash protect command.
@@ -1068,7 +1102,7 @@ struct ec_response_flash_protect {
uint32_t flags;
uint32_t valid_flags;
uint32_t writable_flags;
-} __packed;
+} __ec_align4;

/*
* Note: commands 0x14 - 0x19 version 0 were old commands to get/set flash
@@ -1100,12 +1134,12 @@ enum ec_flash_region {
*/
struct ec_params_flash_region_info {
uint32_t region;
-} __packed;
+} __ec_align4;

struct ec_response_flash_region_info {
uint32_t offset;
uint32_t size;
-} __packed;
+} __ec_align4;

/* Read/write VbNvContext */
#define EC_CMD_VBNV_CONTEXT 0x17
@@ -1120,11 +1154,11 @@ enum ec_vbnvcontext_op {
struct ec_params_vbnvcontext {
uint32_t op;
uint8_t block[EC_VBNV_BLOCK_SIZE];
-} __packed;
+} __ec_align4;

struct ec_response_vbnvcontext {
uint8_t block[EC_VBNV_BLOCK_SIZE];
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* PWM commands */
@@ -1134,14 +1168,14 @@ struct ec_response_vbnvcontext {

struct ec_response_pwm_get_fan_rpm {
uint32_t rpm;
-} __packed;
+} __ec_align4;

/* Set target fan RPM */
-#define EC_CMD_PWM_SET_FAN_TARGET_RPM 0x21
+#define EC_CMD_PWM_SET_FAN_TARGET_RPM 0x0021

struct ec_params_pwm_set_fan_target_rpm {
uint32_t rpm;
-} __packed;
+} __ec_align_size1;

/* Get keyboard backlight */
#define EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT 0x22
@@ -1149,21 +1183,21 @@ struct ec_params_pwm_set_fan_target_rpm {
struct ec_response_pwm_get_keyboard_backlight {
uint8_t percent;
uint8_t enabled;
-} __packed;
+} __ec_align1;

/* Set keyboard backlight */
#define EC_CMD_PWM_SET_KEYBOARD_BACKLIGHT 0x23

struct ec_params_pwm_set_keyboard_backlight {
uint8_t percent;
-} __packed;
+} __ec_align1;

/* Set target fan PWM duty cycle */
#define EC_CMD_PWM_SET_FAN_DUTY 0x24

struct ec_params_pwm_set_fan_duty {
uint32_t percent;
-} __packed;
+} __ec_align4;

#define EC_CMD_PWM_SET_DUTY 0x25
/* 16 bit duty cycle, 0xffff = 100% */
@@ -1183,18 +1217,18 @@ struct ec_params_pwm_set_duty {
uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
uint8_t pwm_type; /* ec_pwm_type */
uint8_t index; /* Type-specific index, or 0 if unique */
-} __packed;
+} __ec_align4;

#define EC_CMD_PWM_GET_DUTY 0x26

struct ec_params_pwm_get_duty {
uint8_t pwm_type; /* ec_pwm_type */
uint8_t index; /* Type-specific index, or 0 if unique */
-} __packed;
+} __ec_align1;

struct ec_response_pwm_get_duty {
uint16_t duty; /* Duty cycle, EC_PWM_MAX_DUTY = 100% */
-} __packed;
+} __ec_align2;

/*****************************************************************************/
/*
@@ -1207,7 +1241,7 @@ struct ec_response_pwm_get_duty {

struct rgb_s {
uint8_t r, g, b;
-};
+} __ec_todo_unpacked;

#define LB_BATTERY_LEVELS 4

@@ -1247,7 +1281,7 @@ struct lightbar_params_v0 {

/* Color palette */
struct rgb_s color[8]; /* 0-3 are Google colors */
-} __packed;
+} __ec_todo_packed;

struct lightbar_params_v1 {
/* Timing */
@@ -1290,14 +1324,14 @@ struct lightbar_params_v1 {

/* Color palette */
struct rgb_s color[8]; /* 0-3 are Google colors */
-} __packed;
+} __ec_todo_packed;

/* Lightbar program */
#define EC_LB_PROG_LEN 192
struct lightbar_program {
uint8_t size;
uint8_t data[EC_LB_PROG_LEN];
-};
+} __ec_todo_unpacked;

struct ec_params_lightbar {
uint8_t cmd; /* Command (see enum lightbar_command) */
@@ -1307,23 +1341,23 @@ struct ec_params_lightbar {
} dump, off, on, init, get_seq, get_params_v0, get_params_v1,
version, get_brightness, get_demo, suspend, resume;

- struct {
+ struct __ec_todo_unpacked {
uint8_t num;
} set_brightness, seq, demo;

- struct {
+ struct __ec_todo_unpacked {
uint8_t ctrl, reg, value;
} reg;

- struct {
+ struct __ec_todo_unpacked {
uint8_t led, red, green, blue;
} set_rgb;

- struct {
+ struct __ec_todo_unpacked {
uint8_t led;
} get_rgb;

- struct {
+ struct __ec_todo_unpacked {
uint8_t enable;
} manual_suspend_ctrl;

@@ -1331,31 +1365,31 @@ struct ec_params_lightbar {
struct lightbar_params_v1 set_params_v1;
struct lightbar_program set_program;
};
-} __packed;
+} __ec_todo_packed;

struct ec_response_lightbar {
union {
- struct {
- struct {
+ struct __ec_todo_unpacked {
+ struct __ec_todo_unpacked {
uint8_t reg;
uint8_t ic0;
uint8_t ic1;
} vals[23];
} dump;

- struct {
+ struct __ec_todo_unpacked {
uint8_t num;
} get_seq, get_brightness, get_demo;

struct lightbar_params_v0 get_params_v0;
struct lightbar_params_v1 get_params_v1;

- struct {
+ struct __ec_todo_unpacked {
uint32_t num;
uint32_t flags;
} version;

- struct {
+ struct __ec_todo_unpacked {
uint8_t red, green, blue;
} get_rgb;

@@ -1365,7 +1399,7 @@ struct ec_response_lightbar {
demo, set_params_v0, set_params_v1,
set_program, manual_suspend_ctrl, suspend, resume;
};
-} __packed;
+} __ec_todo_packed;

/* Lightbar commands */
enum lightbar_command {
@@ -1432,7 +1466,7 @@ struct ec_params_led_control {
uint8_t flags; /* Control flags */

uint8_t brightness[EC_LED_COLOR_COUNT];
-} __packed;
+} __ec_align1;

struct ec_response_led_control {
/*
@@ -1443,7 +1477,7 @@ struct ec_response_led_control {
* Other values means the LED is control by PWM.
*/
uint8_t brightness_range[EC_LED_COLOR_COUNT];
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* Verified boot commands */
@@ -1464,7 +1498,7 @@ struct ec_params_vboot_hash {
uint32_t offset; /* Offset in flash to hash */
uint32_t size; /* Number of bytes to hash */
uint8_t nonce_data[64]; /* Nonce data; ignored if nonce_size=0 */
-} __packed;
+} __ec_align4;

struct ec_response_vboot_hash {
uint8_t status; /* enum ec_vboot_hash_status */
@@ -1474,7 +1508,7 @@ struct ec_response_vboot_hash {
uint32_t offset; /* Offset in flash which was hashed */
uint32_t size; /* Number of bytes hashed */
uint8_t hash_digest[64]; /* Hash digest data */
-} __packed;
+} __ec_align4;

enum ec_vboot_hash_cmd {
EC_VBOOT_HASH_GET = 0, /* Get current hash status */
@@ -1634,23 +1668,23 @@ struct ec_response_motion_sensor_data {
/* Each sensor is up to 3-axis. */
union {
int16_t data[3];
- struct {
+ struct __ec_todo_packed {
uint16_t reserved;
uint32_t timestamp;
- } __packed;
- struct {
+ };
+ struct __ec_todo_unpacked {
uint8_t activity; /* motionsensor_activity */
uint8_t state;
int16_t add_info[2];
};
};
-} __packed;
+} __ec_todo_packed;

struct ec_params_motion_sense {
uint8_t cmd;
union {
/* Used for MOTIONSENSE_CMD_DUMP. */
- struct {
+ struct __ec_todo_unpacked {
/* no args */
} dump;

@@ -1658,13 +1692,13 @@ struct ec_params_motion_sense {
* Used for MOTIONSENSE_CMD_EC_RATE and
* MOTIONSENSE_CMD_KB_WAKE_ANGLE.
*/
- struct {
+ struct __ec_todo_unpacked {
/* Data to set or EC_MOTION_SENSE_NO_VALUE to read. */
int16_t data;
} ec_rate, kb_wake_angle;

/* Used for MOTIONSENSE_CMD_SENSOR_OFFSET */
- struct {
+ struct __ec_todo_packed {
uint8_t sensor_num;

/*
@@ -1690,10 +1724,10 @@ struct ec_params_motion_sense {
* Compass: 1/16 uT
*/
int16_t offset[3];
- } __packed sensor_offset;
+ } sensor_offset;

/* Used for MOTIONSENSE_CMD_INFO. */
- struct {
+ struct __ec_todo_packed {
uint8_t sensor_num;
} info;

@@ -1714,12 +1748,12 @@ struct ec_params_motion_sense {
int32_t data;
} sensor_odr, sensor_range;
};
-} __packed;
+} __ec_todo_packed;

struct ec_response_motion_sense {
union {
/* Used for MOTIONSENSE_CMD_DUMP. */
- struct {
+ struct __ec_todo_unpacked {
/* Flags representing the motion sensor module. */
uint8_t module_flags;

@@ -1734,7 +1768,7 @@ struct ec_response_motion_sense {
} dump;

/* Used for MOTIONSENSE_CMD_INFO. */
- struct {
+ struct __ec_todo_unpacked {
/* Should be element of enum motionsensor_type. */
uint8_t type;

@@ -1753,18 +1787,18 @@ struct ec_response_motion_sense {
* MOTIONSENSE_CMD_SENSOR_RANGE, and
* MOTIONSENSE_CMD_KB_WAKE_ANGLE.
*/
- struct {
+ struct __ec_todo_unpacked {
/* 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 {
+ struct __ec_todo_unpacked {
int16_t temp;
int16_t offset[3];
} sensor_offset, perform_calib;
};
-} __packed;
+} __ec_todo_packed;

/*****************************************************************************/
/* USB charging control commands */
@@ -1775,7 +1809,7 @@ struct ec_response_motion_sense {
struct ec_params_usb_charge_set_mode {
uint8_t usb_port_id;
uint8_t mode;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* Persistent storage for host */
@@ -1791,7 +1825,7 @@ struct ec_response_pstore_info {
uint32_t pstore_size;
/* Access size; read/write offset and size must be a multiple of this */
uint32_t access_size;
-} __packed;
+} __ec_align4;

/*
* Read persistent storage
@@ -1803,7 +1837,7 @@ struct ec_response_pstore_info {
struct ec_params_pstore_read {
uint32_t offset; /* Byte offset to read */
uint32_t size; /* Size to read in bytes */
-} __packed;
+} __ec_align4;

/* Write persistent storage */
#define EC_CMD_PSTORE_WRITE 0x42
@@ -1812,7 +1846,7 @@ struct ec_params_pstore_write {
uint32_t offset; /* Byte offset to write */
uint32_t size; /* Size to write in bytes */
uint8_t data[EC_PSTORE_SIZE_MAX];
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* Real-time clock */
@@ -1820,11 +1854,11 @@ struct ec_params_pstore_write {
/* RTC params and response structures */
struct ec_params_rtc {
uint32_t time;
-} __packed;
+} __ec_align4;

struct ec_response_rtc {
uint32_t time;
-} __packed;
+} __ec_align4;

/* These use ec_response_rtc */
#define EC_CMD_RTC_GET_VALUE 0x44
@@ -1855,29 +1889,29 @@ enum ec_port80_subcmd {
struct ec_params_port80_read {
uint16_t subcmd;
union {
- struct {
+ struct __ec_todo_unpacked {
uint32_t offset;
uint32_t num_entries;
} read_buffer;
};
-} __packed;
+} __ec_todo_packed;

struct ec_response_port80_read {
union {
- struct {
+ struct __ec_todo_unpacked {
uint32_t writes;
uint32_t history_size;
uint32_t last_boot;
} get_info;
- struct {
+ struct __ec_todo_unpacked {
uint16_t codes[EC_PORT80_SIZE_MAX];
} data;
};
-} __packed;
+} __ec_todo_packed;

struct ec_response_port80_last_boot {
uint16_t code;
-} __packed;
+} __ec_align2;

/*****************************************************************************/
/* Thermal engine commands. Note that there are two implementations. We'll
@@ -1898,17 +1932,17 @@ struct ec_params_thermal_set_threshold {
uint8_t sensor_type;
uint8_t threshold_id;
uint16_t value;
-} __packed;
+} __ec_align2;

/* Version 0 - get */
struct ec_params_thermal_get_threshold {
uint8_t sensor_type;
uint8_t threshold_id;
-} __packed;
+} __ec_align1;

struct ec_response_thermal_get_threshold {
uint16_t value;
-} __packed;
+} __ec_align2;


/* The version 1 structs are visible. */
@@ -1928,12 +1962,12 @@ struct ec_thermal_config {
uint32_t temp_host[EC_TEMP_THRESH_COUNT]; /* levels of hotness */
uint32_t temp_fan_off; /* no active cooling needed */
uint32_t temp_fan_max; /* max active cooling needed */
-} __packed;
+} __ec_align4;

/* Version 1 - get config for one sensor. */
struct ec_params_thermal_get_threshold_v1 {
uint32_t sensor_num;
-} __packed;
+} __ec_align4;
/* This returns a struct ec_thermal_config */

/*
@@ -1943,7 +1977,7 @@ struct ec_params_thermal_get_threshold_v1 {
struct ec_params_thermal_set_threshold_v1 {
uint32_t sensor_num;
struct ec_thermal_config cfg;
-} __packed;
+} __ec_align4;
/* This returns no data */

/****************************************************************************/
@@ -1956,14 +1990,14 @@ struct ec_params_thermal_set_threshold_v1 {

struct ec_params_tmp006_get_calibration {
uint8_t index;
-} __packed;
+} __ec_align1;

struct ec_response_tmp006_get_calibration {
float s0;
float b0;
float b1;
float b2;
-} __packed;
+} __ec_align4;

/* Set TMP006 calibration data */
#define EC_CMD_TMP006_SET_CALIBRATION 0x54
@@ -1975,19 +2009,19 @@ struct ec_params_tmp006_set_calibration {
float b0;
float b1;
float b2;
-} __packed;
+} __ec_align4;

/* Read raw TMP006 data */
#define EC_CMD_TMP006_GET_RAW 0x55

struct ec_params_tmp006_get_raw {
uint8_t index;
-} __packed;
+} __ec_align1;

struct ec_response_tmp006_get_raw {
int32_t t; /* In 1/100 K */
int32_t v; /* In nV */
-};
+} __ec_align4;

/*****************************************************************************/
/* MKBP - Matrix KeyBoard Protocol */
@@ -2014,12 +2048,12 @@ struct ec_response_mkbp_info {
uint32_t cols;
/* Formerly "switches", which was 0. */
uint8_t reserved;
-} __packed;
+} __ec_align_size1;

struct ec_params_mkbp_info {
uint8_t info_type;
uint8_t event_type;
-} __packed;
+} __ec_align1;

enum ec_mkbp_info_type {
/*
@@ -2067,7 +2101,7 @@ struct ec_params_mkbp_simulate_key {
uint8_t col;
uint8_t row;
uint8_t pressed;
-} __packed;
+} __ec_align1;

/* Configure keyboard scanning */
#define EC_CMD_MKBP_SET_CONFIG 0x64
@@ -2113,15 +2147,15 @@ struct ec_mkbp_config {
uint16_t debounce_up_us; /* time for debounce on key up */
/* maximum depth to allow for fifo (0 = no keyscan output) */
uint8_t fifo_max_depth;
-} __packed;
+} __ec_align_size1;

struct ec_params_mkbp_set_config {
struct ec_mkbp_config config;
-} __packed;
+} __ec_align_size1;

struct ec_response_mkbp_get_config {
struct ec_mkbp_config config;
-} __packed;
+} __ec_align_size1;

/* Run the key scan emulation */
#define EC_CMD_KEYSCAN_SEQ_CTRL 0x66
@@ -2144,18 +2178,18 @@ enum ec_collect_flags {

struct ec_collect_item {
uint8_t flags; /* some flags (enum ec_collect_flags) */
-};
+} __ec_align1;

struct ec_params_keyscan_seq_ctrl {
uint8_t cmd; /* Command to send (enum ec_keyscan_seq_cmd) */
union {
- struct {
+ struct __ec_align1 {
uint8_t active; /* still active */
uint8_t num_items; /* number of items */
/* Current item being presented */
uint8_t cur_item;
} status;
- struct {
+ struct __ec_todo_unpacked {
/*
* Absolute time for this scan, measured from the
* start of the sequence.
@@ -2163,22 +2197,22 @@ struct ec_params_keyscan_seq_ctrl {
uint32_t time_us;
uint8_t scan[0]; /* keyscan data */
} add;
- struct {
+ struct __ec_align1 {
uint8_t start_item; /* First item to return */
uint8_t num_items; /* Number of items to return */
} collect;
};
-} __packed;
+} __ec_todo_packed;

struct ec_result_keyscan_seq_ctrl {
union {
- struct {
+ struct __ec_todo_unpacked {
uint8_t num_items; /* Number of items */
/* Data for each item */
struct ec_collect_item item[0];
} collect;
};
-} __packed;
+} __ec_todo_packed;

/*
* Command for retrieving the next pending MKBP event from the EC device
@@ -2216,8 +2250,8 @@ enum ec_mkbp_event {
EC_MKBP_EVENT_COUNT,
};

-union ec_response_get_next_data {
- uint8_t key_matrix[13];
+union __ec_align_offset1 ec_response_get_next_data {
+ uint8_t key_matrix[13];

/* Unaligned */
uint32_t host_event;
@@ -2225,9 +2259,9 @@ union ec_response_get_next_data {
uint32_t buttons;
uint32_t switches;
uint32_t sysrq;
-} __packed;
+};

-union ec_response_get_next_data_v1 {
+union __ec_align_offset1 ec_response_get_next_data_v1 {
uint8_t key_matrix[16];
uint32_t host_event;
uint32_t buttons;
@@ -2235,19 +2269,19 @@ union ec_response_get_next_data_v1 {
uint32_t sysrq;
uint32_t cec_events;
uint8_t cec_message[16];
-} __packed;
+};

struct ec_response_get_next_event {
uint8_t event_type;
/* Followed by event data if any */
union ec_response_get_next_data data;
-} __packed;
+} __ec_align1;

struct ec_response_get_next_event_v1 {
uint8_t event_type;
/* Followed by event data if any */
union ec_response_get_next_data_v1 data;
-} __packed;
+} __ec_align1;

/* Bit indices for buttons and switches.*/
/* Buttons */
@@ -2268,12 +2302,12 @@ struct ec_response_get_next_event_v1 {

struct ec_params_temp_sensor_get_info {
uint8_t id;
-} __packed;
+} __ec_align1;

struct ec_response_temp_sensor_get_info {
char sensor_name[32];
uint8_t sensor_type;
-} __packed;
+} __ec_align1;

/*****************************************************************************/

@@ -2292,11 +2326,11 @@ struct ec_response_temp_sensor_get_info {
*/
struct ec_params_host_event_mask {
uint32_t mask;
-} __packed;
+} __ec_align4;

struct ec_response_host_event_mask {
uint32_t mask;
-} __packed;
+} __ec_align4;

/* These all use ec_response_host_event_mask */
#define EC_CMD_HOST_EVENT_GET_B 0x87
@@ -2319,7 +2353,7 @@ struct ec_response_host_event_mask {

struct ec_params_switch_enable_backlight {
uint8_t enabled;
-} __packed;
+} __ec_align1;

/* Enable/disable WLAN/Bluetooth */
#define EC_CMD_SWITCH_ENABLE_WIRELESS 0x91
@@ -2328,7 +2362,7 @@ struct ec_params_switch_enable_backlight {
/* Version 0 params; no response */
struct ec_params_switch_enable_wireless_v0 {
uint8_t enabled;
-} __packed;
+} __ec_align1;

/* Version 1 params */
struct ec_params_switch_enable_wireless_v1 {
@@ -2347,7 +2381,7 @@ struct ec_params_switch_enable_wireless_v1 {

/* Which flags to copy from suspend_flags */
uint8_t suspend_mask;
-} __packed;
+} __ec_align1;

/* Version 1 response */
struct ec_response_switch_enable_wireless_v1 {
@@ -2356,7 +2390,7 @@ struct ec_response_switch_enable_wireless_v1 {

/* Flags to leave enabled in S3 */
uint8_t suspend_flags;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* GPIO commands. Only available on EC if write protect has been disabled. */
@@ -2367,7 +2401,7 @@ struct ec_response_switch_enable_wireless_v1 {
struct ec_params_gpio_set {
char name[32];
uint8_t val;
-} __packed;
+} __ec_align1;

/* Get GPIO value */
#define EC_CMD_GPIO_GET 0x93
@@ -2375,37 +2409,37 @@ struct ec_params_gpio_set {
/* Version 0 of input params and response */
struct ec_params_gpio_get {
char name[32];
-} __packed;
+} __ec_align1;

struct ec_response_gpio_get {
uint8_t val;
-} __packed;
+} __ec_align1;

/* Version 1 of input params and response */
struct ec_params_gpio_get_v1 {
uint8_t subcmd;
union {
- struct {
+ struct __ec_align1 {
char name[32];
} get_value_by_name;
- struct {
+ struct __ec_align1 {
uint8_t index;
} get_info;
};
-} __packed;
+} __ec_align1;

struct ec_response_gpio_get_v1 {
union {
- struct {
+ struct __ec_align1 {
uint8_t val;
} get_value_by_name, get_count;
- struct {
+ struct __ec_todo_unpacked {
uint8_t val;
char name[32];
uint32_t flags;
} get_info;
};
-} __packed;
+} __ec_todo_packed;

enum gpio_get_subcmd {
EC_GPIO_GET_BY_NAME = 0,
@@ -2431,11 +2465,11 @@ struct ec_params_i2c_read {
uint8_t read_size; /* Either 8 or 16. */
uint8_t port;
uint8_t offset;
-} __packed;
+} __ec_align_size1;

struct ec_response_i2c_read {
uint16_t data;
-} __packed;
+} __ec_align2;

/* Write I2C bus */
#define EC_CMD_I2C_WRITE 0x95
@@ -2446,7 +2480,7 @@ struct ec_params_i2c_write {
uint8_t write_size; /* Either 8 or 16. */
uint8_t port;
uint8_t offset;
-} __packed;
+} __ec_align_size1;

/*****************************************************************************/
/* Charge state commands. Only available when flash write protect unlocked. */
@@ -2465,7 +2499,7 @@ enum ec_charge_control_mode {

struct ec_params_charge_control {
uint32_t mode; /* enum charge_control_mode */
-} __packed;
+} __ec_align4;

/*****************************************************************************/

@@ -2493,7 +2527,7 @@ enum ec_console_read_subcmd {

struct ec_params_console_read_v1 {
uint8_t subcmd; /* enum ec_console_read_subcmd */
-} __packed;
+} __ec_align1;

/*****************************************************************************/

@@ -2511,7 +2545,7 @@ struct ec_params_console_read_v1 {

struct ec_params_battery_cutoff {
uint8_t flags;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* USB port mux control. */
@@ -2523,7 +2557,7 @@ struct ec_params_battery_cutoff {

struct ec_params_usb_mux {
uint8_t mux;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* LDOs / FETs control. */
@@ -2541,7 +2575,7 @@ enum ec_ldo_state {
struct ec_params_ldo_set {
uint8_t index;
uint8_t state;
-} __packed;
+} __ec_align1;

/*
* Get LDO state.
@@ -2550,11 +2584,11 @@ struct ec_params_ldo_set {

struct ec_params_ldo_get {
uint8_t index;
-} __packed;
+} __ec_align1;

struct ec_response_ldo_get {
uint8_t state;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* Power info. */
@@ -2570,7 +2604,7 @@ struct ec_response_power_info {
uint16_t voltage_system;
uint16_t current_system;
uint16_t usb_current_limit;
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* I2C passthru command */
@@ -2592,20 +2626,20 @@ struct ec_response_power_info {
struct ec_params_i2c_passthru_msg {
uint16_t addr_flags; /* I2C slave address (7 or 10 bits) and flags */
uint16_t len; /* Number of bytes to read or write */
-} __packed;
+} __ec_align2;

struct ec_params_i2c_passthru {
uint8_t port; /* I2C port number */
uint8_t num_msgs; /* Number of messages */
struct ec_params_i2c_passthru_msg msg[];
/* Data to write for all messages is concatenated here */
-} __packed;
+} __ec_align2;

struct ec_response_i2c_passthru {
uint8_t i2c_status; /* Status flags (EC_I2C_STATUS_...) */
uint8_t num_msgs; /* Number of messages processed */
uint8_t data[]; /* Data read by messages concatenated here */
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* Power button hang detect */
@@ -2660,7 +2694,7 @@ struct ec_params_hang_detect {

/* Timeout in msec before generating warm reboot, if enabled */
uint16_t warm_reboot_timeout_msec;
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* Commands for battery charging */
@@ -2706,20 +2740,20 @@ struct ec_params_charge_state {
/* no args */
} get_state;

- struct {
+ struct __ec_todo_unpacked {
uint32_t param; /* enum charge_state_param */
} get_param;

- struct {
+ struct __ec_todo_unpacked {
uint32_t param; /* param to set */
uint32_t value; /* value to set */
} set_param;
};
-} __packed;
+} __ec_todo_packed;

struct ec_response_charge_state {
union {
- struct {
+ struct __ec_align4 {
int ac;
int chg_voltage;
int chg_current;
@@ -2727,14 +2761,14 @@ struct ec_response_charge_state {
int batt_state_of_charge;
} get_state;

- struct {
+ struct __ec_align4 {
uint32_t value;
} get_param;
struct {
/* no return values */
} set_param;
};
-} __packed;
+} __ec_align4;


/*
@@ -2744,7 +2778,7 @@ struct ec_response_charge_state {

struct ec_params_current_limit {
uint32_t limit; /* in mA */
-} __packed;
+} __ec_align4;

/*
* Set maximum external voltage / current.
@@ -2755,7 +2789,7 @@ struct ec_params_current_limit {
struct ec_params_external_power_limit_v1 {
uint16_t current_lim; /* in mA, or EC_POWER_LIMIT_NONE to clear limit */
uint16_t voltage_lim; /* in mV, or EC_POWER_LIMIT_NONE to clear limit */
-} __packed;
+} __ec_align2;

#define EC_POWER_LIMIT_NONE 0xffff

@@ -2771,7 +2805,7 @@ enum host_sleep_event {

struct ec_params_host_sleep_event {
uint8_t sleep_event;
-} __packed;
+} __ec_align1;

/*
* Use a default timeout value (CONFIG_SLEEP_TIMEOUT_MS) for detecting sleep
@@ -2802,7 +2836,7 @@ struct ec_params_host_sleep_event_v1 {

/* No parameters for non-suspend messages. */
};
-} __packed;
+} __ec_align2;

/* A timeout occurred when this bit is set */
#define EC_HOST_RESUME_SLEEP_TIMEOUT 0x80000000
@@ -2828,7 +2862,7 @@ struct ec_response_host_sleep_event_v1 {

/* No response fields for non-resume messages. */
};
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* Smart battery pass-through */
@@ -2845,25 +2879,25 @@ struct ec_response_host_sleep_event_v1 {

struct ec_params_sb_rd {
uint8_t reg;
-} __packed;
+} __ec_align1;

struct ec_response_sb_rd_word {
uint16_t value;
-} __packed;
+} __ec_align2;

struct ec_params_sb_wr_word {
uint8_t reg;
uint16_t value;
-} __packed;
+} __ec_align1;

struct ec_response_sb_rd_block {
uint8_t data[32];
-} __packed;
+} __ec_align1;

struct ec_params_sb_wr_block {
uint8_t reg;
uint16_t data[32];
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* Battery vendor parameters
@@ -2885,11 +2919,11 @@ struct ec_params_battery_vendor_param {
uint32_t param;
uint32_t value;
uint8_t mode;
-} __packed;
+} __ec_align_size1;

struct ec_response_battery_vendor_param {
uint32_t value;
-} __packed;
+} __ec_align4;

/*****************************************************************************/
/* Commands for I2S recording on audio codec. */
@@ -2920,7 +2954,7 @@ enum ec_i2s_config {
EC_DAI_FMT_PCM_TDM = 5,
};

-struct ec_param_codec_i2s {
+struct __ec_todo_packed ec_param_codec_i2s {
/* enum ec_codec_i2s_subcmd */
uint8_t cmd;
union {
@@ -2934,10 +2968,10 @@ struct ec_param_codec_i2s {
* EC_CODEC_SET_GAIN
* Value should be 0~43 for both channels.
*/
- struct ec_param_codec_i2s_set_gain {
+ struct __ec_align1 ec_param_codec_i2s_set_gain {
uint8_t left;
uint8_t right;
- } __packed gain;
+ } gain;

/*
* EC_CODEC_I2S_ENABLE
@@ -2955,7 +2989,7 @@ struct ec_param_codec_i2s {
* EC_CODEC_I2S_SET_TDM_CONFIG
* Value should be one of ec_i2s_config.
*/
- struct ec_param_codec_i2s_tdm {
+ struct __ec_todo_unpacked ec_param_codec_i2s_tdm {
/*
* 0 to 496
*/
@@ -2966,14 +3000,14 @@ struct ec_param_codec_i2s {
int16_t ch1_delay;
uint8_t adjacent_to_ch0;
uint8_t adjacent_to_ch1;
- } __packed tdm_param;
+ } tdm_param;

/*
* EC_CODEC_I2S_SET_BCLK
*/
uint32_t bclk;
};
-} __packed;
+};

/*
* For subcommand EC_CODEC_GET_GAIN.
@@ -2981,7 +3015,7 @@ struct ec_param_codec_i2s {
struct ec_response_codec_gain {
uint8_t left;
uint8_t right;
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/* System commands */
@@ -3010,7 +3044,7 @@ enum ec_reboot_cmd {
struct ec_params_reboot_ec {
uint8_t cmd; /* enum ec_reboot_cmd */
uint8_t flags; /* See EC_REBOOT_FLAG_* */
-} __packed;
+} __ec_align1;

/*
* Get information on last EC panic.
@@ -3153,7 +3187,7 @@ struct ec_params_reboot_ec {
*/
struct ec_params_cec_write {
uint8_t msg[EC_MAX_CEC_MSG_LEN];
-} __packed;
+} __ec_align1;

/* Set various CEC parameters */
#define EC_CMD_CEC_SET 0x00BA
@@ -3169,7 +3203,7 @@ struct ec_params_cec_write {
struct ec_params_cec_set {
uint8_t cmd; /* enum cec_command */
uint8_t val;
-} __packed;
+} __ec_align1;

/* Read various CEC parameters */
#define EC_CMD_CEC_GET 0x00BB
@@ -3180,7 +3214,7 @@ struct ec_params_cec_set {
*/
struct ec_params_cec_get {
uint8_t cmd; /* enum cec_command */
-} __packed;
+} __ec_align1;

/**
* struct ec_response_cec_get - CEC parameters get response
@@ -3191,7 +3225,7 @@ struct ec_params_cec_get {
*/
struct ec_response_cec_get {
uint8_t val;
-} __packed;
+} __ec_align1;

/* CEC parameters command */
enum ec_cec_command {
@@ -3264,13 +3298,13 @@ enum mkbp_cec_event {
/* Status of EC being sent to PD */
struct ec_params_pd_status {
int8_t batt_soc; /* battery state of charge */
-} __packed;
+} __ec_align1;

/* Status of PD being sent back to EC */
struct ec_response_pd_status {
int8_t status; /* PD MCU status */
uint32_t curr_lim_ma; /* input current limit */
-} __packed;
+} __ec_align_size1;

/* Set USB type-C port role and muxes */
#define EC_CMD_USB_PD_CONTROL 0x101
@@ -3305,7 +3339,7 @@ struct ec_params_usb_pd_control {
uint8_t role;
uint8_t mux;
uint8_t swap;
-} __packed;
+} __ec_align1;

#define PD_CTRL_RESP_ENABLED_COMMS (1 << 0) /* Communication enabled */
#define PD_CTRL_RESP_ENABLED_CONNECTED (1 << 1) /* Device connected */
@@ -3324,7 +3358,7 @@ struct ec_response_usb_pd_control_v1 {
uint8_t role;
uint8_t polarity;
char state[32];
-} __packed;
+} __ec_align1;

#define EC_CMD_USB_PD_PORTS 0x102

@@ -3333,14 +3367,14 @@ struct ec_response_usb_pd_control_v1 {

struct ec_response_usb_pd_ports {
uint8_t num_ports;
-} __packed;
+} __ec_align1;

#define EC_CMD_USB_PD_POWER_INFO 0x103

#define PD_POWER_CHARGING_PORT 0xff
struct ec_params_usb_pd_power_info {
uint8_t port;
-} __packed;
+} __ec_align1;

enum usb_chg_type {
USB_CHG_TYPE_NONE,
@@ -3366,7 +3400,7 @@ struct usb_chg_measures {
uint16_t voltage_now;
uint16_t current_max;
uint16_t current_lim;
-} __packed;
+} __ec_align2;

struct ec_response_usb_pd_power_info {
uint8_t role;
@@ -3375,11 +3409,11 @@ struct ec_response_usb_pd_power_info {
uint8_t reserved1;
struct usb_chg_measures meas;
uint32_t max_power;
-} __packed;
+} __ec_align4;

struct ec_params_usb_pd_info_request {
uint8_t port;
-} __packed;
+} __ec_align1;

/*
* This command will return the number of USB PD charge port + the number
@@ -3389,7 +3423,7 @@ struct ec_params_usb_pd_info_request {
#define EC_CMD_CHARGE_PORT_COUNT 0x0105
struct ec_response_charge_port_count {
uint8_t port_count;
-} __packed;
+} __ec_align1;

/* Read USB-PD Device discovery info */
#define EC_CMD_USB_PD_DISCOVERY 0x0113
@@ -3397,7 +3431,7 @@ struct ec_params_usb_pd_discovery_entry {
uint16_t vid; /* USB-IF VID */
uint16_t pid; /* USB-IF PID */
uint8_t ptype; /* product type (hub,periph,cable,ama) */
-} __packed;
+} __ec_align_size1;

/* Override default charge behavior */
#define EC_CMD_PD_CHARGE_PORT_OVERRIDE 0x0114
@@ -3411,7 +3445,7 @@ enum usb_pd_override_ports {

struct ec_params_charge_port_override {
int16_t override_port; /* Override port# */
-} __packed;
+} __ec_align2;

/* Read (and delete) one entry of PD event log */
#define EC_CMD_PD_GET_LOG_ENTRY 0x0115
@@ -3422,7 +3456,7 @@ struct ec_response_pd_log {
uint8_t size_port; /* [7:5] port number [4:0] payload size in bytes */
uint16_t data; /* type-defined data payload */
uint8_t payload[0]; /* optional additional data payload: 0..16 bytes */
-} __packed;
+} __ec_align4;

/* The timestamp is the microsecond counter shifted to get about a ms. */
#define PD_LOG_TIMESTAMP_SHIFT 10 /* 1 LSB = 1024us */
@@ -3488,14 +3522,14 @@ struct mcdp_version {
uint8_t major;
uint8_t minor;
uint16_t build;
-} __packed;
+} __ec_align4;

struct mcdp_info {
uint8_t family[2];
uint8_t chipid[2];
struct mcdp_version irom;
struct mcdp_version fw;
-} __packed;
+} __ec_align4;

/* struct mcdp_info field decoding */
#define MCDP_CHIPID(chipid) ((chipid[0] << 8) | chipid[1])
@@ -3506,7 +3540,7 @@ struct mcdp_info {

struct ec_params_usb_pd_mux_info {
uint8_t port; /* USB-C port number */
-} __packed;
+} __ec_align1;

/* Flags representing mux state */
#define USB_PD_MUX_USB_ENABLED (1 << 0)
@@ -3516,7 +3550,7 @@ struct ec_params_usb_pd_mux_info {

struct ec_response_usb_pd_mux_info {
uint8_t flags; /* USB_PD_MUX_*-encoded USB mux state */
-} __packed;
+} __ec_align1;

/*****************************************************************************/
/*
--
2.21.0.1020.gf2820cf01a-goog

2019-05-09 21:19:51

by Gwendal Grignou

[permalink] [raw]
Subject: [PATCH v3 01/30] mfd: cros_ec: Update license term

Update to SPDX-License-Identifier, GPL-2.0

Acked-by: Enric Balletbo i Serra <[email protected]>
Acked-by: Benson Leung <[email protected]>
Signed-off-by: Gwendal Grignou <[email protected]>
---
include/linux/mfd/cros_ec_commands.h | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
index dcec96f01879..48292d449921 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -1,25 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0 */
/*
* Host communication command constants for ChromeOS EC
*
* Copyright (C) 2012 Google, Inc
*
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * The ChromeOS EC multi function device is used to mux all the requests
- * to the EC device for its multiple features: keyboard controller,
- * battery charging and regulator control, firmware update.
- *
- * NOTE: This file is copied verbatim from the ChromeOS EC Open Source
- * project in an attempt to make future updates easy to make.
+ * NOTE: This file is auto-generated from ChromeOS EC Open Source code from
+ * https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h
*/

+/* Host communication command constants for Chrome EC */
+
#ifndef __CROS_EC_COMMANDS_H
#define __CROS_EC_COMMANDS_H

--
2.21.0.1020.gf2820cf01a-goog

2019-05-18 00:59:26

by Gwendal Grignou

[permalink] [raw]
Subject: Re: [PATCH v3 00/30] Update cros_ec_commands.h

Lee,

I verified and merged the changes on the kernels (3.18, 4.4 and 4.14)
used on chromebook using a squashed version of these patches.
(crrev.com/c/1583322, crrev.com/c/1583385, crrev.com/c/1583321
respectively)
Please let me know if you have any questions.

Thanks,

Gwendal.

On Thu, May 9, 2019 at 2:14 PM Gwendal Grignou <[email protected]> wrote:
>
> The interface between CrosEC embedded controller and the host,
> described by cros_ec_commands.h, as diverged from what the embedded
> controller really support.
>
> The source of thruth is at
> https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h
>
> That include file is converted to remove ACPI and Embedded only code.
>
> From now on, cros_ec_commands.h will be automatically generated from
> the file above, do not modify directly.
>
> Fell free to squash the commits below.
>
> Changes in v3:
> - Rebase after commit 81888d8ab1532 ("mfd: cros_ec: Update the EC feature codes")
> - Add Acked-by: Benson Leung <[email protected]>
>
> Changes in v2:
> - Move I2S changes at the end of the patchset, squashed with change in
> sound/soc/codecs/cros_ec_codec.c to match new interface.
> - Add Acked-by: Enric Balletbo i Serra <[email protected]>
>
> Gwendal Grignou (30):
> mfd: cros_ec: Update license term
> mfd: cros_ec: Zero BUILD_ macro
> mfd: cros_ec: set comments properly
> mfd: cros_ec: add ec_align macros
> mfd: cros_ec: Define commands as 4-digit UPPER CASE hex values
> mfd: cros_ec: use BIT macro
> mfd: cros_ec: Update ACPI interface definition
> mfd: cros_ec: move HDMI CEC API definition
> mfd: cros_ec: Remove zero-size structs
> mfd: cros_ec: Add Flash V2 commands API
> mfd: cros_ec: Add PWM_SET_DUTY API
> mfd: cros_ec: Add lightbar v2 API
> mfd: cros_ec: Expand hash API
> mfd: cros_ec: Add EC transport protocol v4
> mfd: cros_ec: Complete MEMS sensor API
> mfd: cros_ec: Fix event processing API
> mfd: cros_ec: Add fingerprint API
> mfd: cros_ec: Fix temperature API
> mfd: cros_ec: Complete Power and USB PD API
> mfd: cros_ec: Add API for keyboard testing
> mfd: cros_ec: Add Hibernate API
> mfd: cros_ec: Add Smart Battery Firmware update API
> mfd: cros_ec: Add I2C passthru protection API
> mfd: cros_ec: Add API for EC-EC communication
> mfd: cros_ec: Add API for Touchpad support
> mfd: cros_ec: Add API for Fingerprint support
> mfd: cros_ec: Add API for rwsig
> mfd: cros_ec: Add SKU ID and Secure storage API
> mfd: cros_ec: Add Management API entry points
> mfd: cros_ec: Update I2S API
>
> include/linux/mfd/cros_ec_commands.h | 3658 ++++++++++++++++++++------
> sound/soc/codecs/cros_ec_codec.c | 8 +-
> 2 files changed, 2915 insertions(+), 751 deletions(-)
>
> --
> 2.21.0.1020.gf2820cf01a-goog
>

2019-05-18 06:41:47

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v3 00/30] Update cros_ec_commands.h

On Fri, 17 May 2019, Gwendal Grignou wrote:

> Lee,
>
> I verified and merged the changes on the kernels (3.18, 4.4 and 4.14)
> used on chromebook using a squashed version of these patches.
> (crrev.com/c/1583322, crrev.com/c/1583385, crrev.com/c/1583321
> respectively)
> Please let me know if you have any questions.

Is no one else from Chromium going to review?

These seem like quite important changes.

--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

2019-05-21 13:47:08

by Fabien Lahoudere

[permalink] [raw]
Subject: Re: [alsa-devel] [PATCH v3 00/30] Update cros_ec_commands.h

Le jeudi 09 mai 2019 à 14:13 -0700, Gwendal Grignou a écrit :
> The interface between CrosEC embedded controller and the host,
> described by cros_ec_commands.h, as diverged from what the embedded
> controller really support.
>
> The source of thruth is at
> https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h
>
> That include file is converted to remove ACPI and Embedded only code.

Hi,

I reviewed patches of the series and they looks good to me.

Reviewed-by: Fabien Lahoudere <[email protected]>


2019-05-21 17:47:41

by Benson Leung

[permalink] [raw]
Subject: Re: [PATCH v3 00/30] Update cros_ec_commands.h

Hi Lee,

On Sat, May 18, 2019 at 07:39:49AM +0100, Lee Jones wrote:
> On Fri, 17 May 2019, Gwendal Grignou wrote:
>
> > Lee,
> >
> > I verified and merged the changes on the kernels (3.18, 4.4 and 4.14)
> > used on chromebook using a squashed version of these patches.
> > (crrev.com/c/1583322, crrev.com/c/1583385, crrev.com/c/1583321
> > respectively)
> > Please let me know if you have any questions.
>
> Is no one else from Chromium going to review?
>
> These seem like quite important changes.
>

I've gone ahead and acked the whole series. Enric and I are OK with this going
in for 5.3, and as Gwendal mentioned, he's landed these changes into our
production kernels for Chrome OS as well, so this is what we want to sync on.

Let me know if you have any other concerns.

Thanks,
Benson

--
Benson Leung
Staff Software Engineer
Chrome OS Kernel
Google Inc.
[email protected]
Chromium OS Project
[email protected]


Attachments:
(No filename) (962.00 B)
signature.asc (235.00 B)
Download all attachments

2019-05-22 05:54:43

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v3 00/30] Update cros_ec_commands.h

On Tue, 21 May 2019, Benson Leung wrote:

> Hi Lee,
>
> On Sat, May 18, 2019 at 07:39:49AM +0100, Lee Jones wrote:
> > On Fri, 17 May 2019, Gwendal Grignou wrote:
> >
> > > Lee,
> > >
> > > I verified and merged the changes on the kernels (3.18, 4.4 and 4.14)
> > > used on chromebook using a squashed version of these patches.
> > > (crrev.com/c/1583322, crrev.com/c/1583385, crrev.com/c/1583321
> > > respectively)
> > > Please let me know if you have any questions.
> >
> > Is no one else from Chromium going to review?
> >
> > These seem like quite important changes.
> >
>
> I've gone ahead and acked the whole series. Enric and I are OK with this going
> in for 5.3, and as Gwendal mentioned, he's landed these changes into our
> production kernels for Chrome OS as well, so this is what we want to sync on.

Wonderful, thank you.

> Let me know if you have any other concerns.
>
> Thanks,
> Benson
>



--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

2019-05-22 05:55:36

by Lee Jones

[permalink] [raw]
Subject: Re: [alsa-devel] [PATCH v3 00/30] Update cros_ec_commands.h

On Tue, 21 May 2019, Fabien Lahoudere wrote:

> Le jeudi 09 mai 2019 à 14:13 -0700, Gwendal Grignou a écrit :
> > The interface between CrosEC embedded controller and the host,
> > described by cros_ec_commands.h, as diverged from what the embedded
> > controller really support.
> >
> > The source of thruth is at
> > https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h
> >
> > That include file is converted to remove ACPI and Embedded only code.
>
> Hi,
>
> I reviewed patches of the series and they looks good to me.
>
> Reviewed-by: Fabien Lahoudere <[email protected]>

Thanks Fabien.

--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

2019-06-03 12:56:16

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v3 00/30] Update cros_ec_commands.h

On Thu, 09 May 2019, Gwendal Grignou wrote:

> The interface between CrosEC embedded controller and the host,
> described by cros_ec_commands.h, as diverged from what the embedded
> controller really support.
>
> The source of thruth is at
> https://chromium.googlesource.com/chromiumos/platform/ec/+/master/include/ec_commands.h
>
> That include file is converted to remove ACPI and Embedded only code.
>
> From now on, cros_ec_commands.h will be automatically generated from
> the file above, do not modify directly.
>
> Fell free to squash the commits below.
>
> Changes in v3:
> - Rebase after commit 81888d8ab1532 ("mfd: cros_ec: Update the EC feature codes")
> - Add Acked-by: Benson Leung <[email protected]>
>
> Changes in v2:
> - Move I2S changes at the end of the patchset, squashed with change in
> sound/soc/codecs/cros_ec_codec.c to match new interface.
> - Add Acked-by: Enric Balletbo i Serra <[email protected]>
>
> Gwendal Grignou (30):
> mfd: cros_ec: Update license term
> mfd: cros_ec: Zero BUILD_ macro
> mfd: cros_ec: set comments properly
> mfd: cros_ec: add ec_align macros
> mfd: cros_ec: Define commands as 4-digit UPPER CASE hex values
> mfd: cros_ec: use BIT macro
> mfd: cros_ec: Update ACPI interface definition
> mfd: cros_ec: move HDMI CEC API definition
> mfd: cros_ec: Remove zero-size structs
> mfd: cros_ec: Add Flash V2 commands API
> mfd: cros_ec: Add PWM_SET_DUTY API
> mfd: cros_ec: Add lightbar v2 API
> mfd: cros_ec: Expand hash API
> mfd: cros_ec: Add EC transport protocol v4
> mfd: cros_ec: Complete MEMS sensor API
> mfd: cros_ec: Fix event processing API
> mfd: cros_ec: Add fingerprint API
> mfd: cros_ec: Fix temperature API
> mfd: cros_ec: Complete Power and USB PD API
> mfd: cros_ec: Add API for keyboard testing
> mfd: cros_ec: Add Hibernate API
> mfd: cros_ec: Add Smart Battery Firmware update API
> mfd: cros_ec: Add I2C passthru protection API
> mfd: cros_ec: Add API for EC-EC communication
> mfd: cros_ec: Add API for Touchpad support
> mfd: cros_ec: Add API for Fingerprint support
> mfd: cros_ec: Add API for rwsig
> mfd: cros_ec: Add SKU ID and Secure storage API
> mfd: cros_ec: Add Management API entry points
> mfd: cros_ec: Update I2S API
>
> include/linux/mfd/cros_ec_commands.h | 3658 ++++++++++++++++++++------
> sound/soc/codecs/cros_ec_codec.c | 8 +-
> 2 files changed, 2915 insertions(+), 751 deletions(-)

Okay, I'm ready to apply this now. Could you collect all of the Acks
you received and submit a RESEND please?

--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog