ec/google/chromeec: Update ec_commands.h
This change copies ec_commands.h directly from Chromium OS EC repo at
sha b3c3f6a8f.
Signed-off-by: Furquan Shaikh <furquan@google.com>
Change-Id: I940f5c7fe8ad4d989a1dfcd6da3ccf9fc151ec56
Reviewed-on: https://review.coreboot.org/c/coreboot/+/40266
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Rajat Jain <rajatja@google.com>
Reviewed-by: Karthik Ramasubramanian <kramasub@google.com>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
diff --git a/src/ec/google/chromeec/ec_commands.h b/src/ec/google/chromeec/ec_commands.h
index 7b5a067..18be8d3 100644
--- a/src/ec/google/chromeec/ec_commands.h
+++ b/src/ec/google/chromeec/ec_commands.h
@@ -39,12 +39,13 @@
extern "C" {
#endif
+#ifdef CHROMIUM_EC
/*
* CHROMIUM_EC is defined by the Makefile system of Chromium EC repository.
* It is used to not include macros that may cause conflicts in foreign
* projects (refer to crbug.com/984623).
*/
-#ifdef CHROMIUM_EC
+
/*
* Include common.h for CONFIG_HOSTCMD_ALIGNED, if it's defined. This
* generates more efficient code for accessing request/response structures on
@@ -54,8 +55,18 @@
#include "compile_time_macros.h"
#else
-
#define BUILD_ASSERT(_cond)
+#endif /* CHROMIUM_EC */
+
+#ifdef __KERNEL__
+#include <linux/limits.h>
+#else
+/*
+ * Defines macros that may be needed but are for sure defined by the linux
+ * kernel. This section is removed when cros_ec_commands.h is generated (by
+ * util/make_linux_ec_commands_h.sh).
+ * cros_ec_commands.h looks more integrated to the kernel.
+ */
#ifndef BIT
#define BIT(nr) (1UL << (nr))
@@ -65,7 +76,7 @@
#define BIT_ULL(nr) (1ULL << (nr))
#endif
-#endif /* CHROMIUM_EC */
+#endif /* __KERNEL__ */
/*
* Current version of this protocol
@@ -1073,10 +1084,22 @@
/* Get version number */
#define EC_CMD_GET_VERSION 0x0002
-enum ec_current_image {
+#if !defined(CHROMIUM_EC) && !defined(__KERNEL__)
+/*
+ * enum ec_current_image is deprecated and replaced by enum ec_image. This
+ * macro exists for backwards compatibility of external projects until they
+ * have been updated: b/149987779.
+ */
+#define ec_current_image ec_image
+#endif
+
+enum ec_image {
EC_IMAGE_UNKNOWN = 0,
EC_IMAGE_RO,
- EC_IMAGE_RW
+ EC_IMAGE_RW,
+ EC_IMAGE_RW_A = EC_IMAGE_RW,
+ EC_IMAGE_RO_B,
+ EC_IMAGE_RW_B
};
/**
@@ -1084,7 +1107,7 @@
* @version_string_ro: Null-terminated RO firmware version string.
* @version_string_rw: Null-terminated RW firmware version string.
* @reserved: Unused bytes; was previously RW-B firmware version string.
- * @current_image: One of ec_current_image.
+ * @current_image: One of ec_image.
*/
struct ec_response_get_version {
char version_string_ro[32];
@@ -1390,6 +1413,12 @@
* MOTIONSENSE_CMD_TABLET_MODE_LID_ANGLE.
*/
EC_FEATURE_REFINED_TABLET_MODE_HYSTERESIS = 37,
+ /*
+ * Early Firmware Selection ver.2. Enabled by CONFIG_VBOOT_EFS2.
+ * Note this is a RO feature. So, a query (EC_CMD_GET_FEATURES) should
+ * be sent to RO to be precise.
+ */
+ EC_FEATURE_EFS2 = 38,
/* The MCU is a System Companion Processor (SCP). */
EC_FEATURE_SCP = 39,
/* The MCU is an Integrated Sensor Hub */
@@ -1808,6 +1837,68 @@
BUILD_ASSERT(sizeof(struct ec_response_rand_num) == 0);
+/**
+ * Get information about the key used to sign the RW firmware.
+ * For more details on the fields, see "struct vb21_packed_key".
+ */
+#define EC_CMD_RWSIG_INFO 0x001B
+#define EC_VER_RWSIG_INFO 0
+
+#define VBOOT2_KEY_ID_BYTES 20
+
+#ifdef CHROMIUM_EC
+/* Don't force external projects to depend on the vboot headers. */
+#include "vb21_struct.h"
+BUILD_ASSERT(sizeof(struct vb2_id) == VBOOT2_KEY_ID_BYTES);
+#endif
+
+struct ec_response_rwsig_info {
+ /**
+ * Signature algorithm used by the key
+ * (enum vb2_signature_algorithm).
+ */
+ uint16_t sig_alg;
+
+ /**
+ * Hash digest algorithm used with the key
+ * (enum vb2_hash_algorithm).
+ */
+ uint16_t hash_alg;
+
+ /** Key version. */
+ uint32_t key_version;
+
+ /** Key ID (struct vb2_id). */
+ uint8_t key_id[VBOOT2_KEY_ID_BYTES];
+
+ uint8_t key_is_valid;
+
+ /** Alignment padding. */
+ uint8_t reserved[3];
+} __ec_align4;
+
+BUILD_ASSERT(sizeof(struct ec_response_rwsig_info) == 32);
+
+/**
+ * Get information about the system, such as reset flags, locked state, etc.
+ */
+#define EC_CMD_SYSINFO 0x001C
+#define EC_VER_SYSINFO 0
+
+enum sysinfo_flags {
+ SYSTEM_IS_LOCKED = BIT(0),
+ SYSTEM_IS_FORCE_LOCKED = BIT(1),
+ SYSTEM_JUMP_ENABLED = BIT(2),
+ SYSTEM_JUMPED_TO_CURRENT_IMAGE = BIT(3),
+ SYSTEM_REBOOT_AT_SHUTDOWN = BIT(4)
+};
+
+struct ec_response_sysinfo {
+ uint32_t reset_flags; /**< EC_RESET_FLAG_* flags */
+ uint32_t current_image; /**< enum ec_current_image */
+ uint32_t flags; /**< enum sysinfo_flags */
+} __ec_align4;
+
/*****************************************************************************/
/* PWM commands */
@@ -2412,7 +2503,7 @@
/*
* Sensor Offset command is a setter/getter command for the offset
- * used for calibration.
+ * used for factory calibration.
* The offsets can be calculated by the host, or via
* PERFORM_CALIB command.
*/
@@ -2457,6 +2548,11 @@
*/
MOTIONSENSE_CMD_SENSOR_SCALE = 18,
+ /*
+ * Read the current online calibration values (if available).
+ */
+ MOTIONSENSE_CMD_ONLINE_CALIB_READ = 19,
+
/* Number of motionsense sub-commands. */
MOTIONSENSE_NUM_CMDS
};
@@ -2508,6 +2604,7 @@
MOTIONSENSE_CHIP_TCS3400 = 20,
MOTIONSENSE_CHIP_LIS2DW12 = 21,
MOTIONSENSE_CHIP_LIS2DWL = 22,
+ MOTIONSENSE_CHIP_LIS2DS = 23,
MOTIONSENSE_CHIP_MAX,
};
@@ -2540,6 +2637,12 @@
};
} __ec_todo_packed;
+/* Response to AP reporting calibration data for a given sensor. */
+struct ec_response_online_calibration_data {
+ /** The calibration values. */
+ int16_t data[3];
+};
+
/* Note: used in ec_response_get_next_data */
struct ec_response_motion_sense_fifo_info {
/* Size of the fifo */
@@ -2653,7 +2756,7 @@
*/
struct __ec_todo_unpacked {
uint8_t sensor_num;
- } info, info_3, data, fifo_flush, list_activities;
+ } info, info_3, info_4, data, fifo_flush, list_activities;
/*
* Used for MOTIONSENSE_CMD_PERFORM_CALIB:
@@ -2663,6 +2766,7 @@
uint8_t sensor_num;
uint8_t enable;
} perform_calib;
+
/*
* Used for MOTIONSENSE_CMD_EC_RATE, MOTIONSENSE_CMD_SENSOR_ODR
* and MOTIONSENSE_CMD_SENSOR_RANGE.
@@ -2795,6 +2899,15 @@
*/
int16_t hys_degree;
} tablet_mode_threshold;
+
+ /*
+ * Used for MOTIONSENSE_CMD_ONLINE_CALIB_READ:
+ * Allow reading a single sensor's online calibration value.
+ */
+ struct __ec_todo_unpacked {
+ uint8_t sensor_num;
+ } online_calib_read;
+
};
} __ec_todo_packed;
@@ -2915,6 +3028,8 @@
struct ec_response_motion_sense_fifo_data fifo_read;
+ struct ec_response_online_calibration_data online_calib_read;
+
struct __ec_todo_packed {
uint16_t reserved;
uint32_t enabled;
@@ -3572,6 +3687,9 @@
/* We have entered DisplayPort Alternate Mode on a Type-C port. */
EC_MKBP_EVENT_DP_ALT_MODE_ENTERED = 10,
+ /* New online calibration values are available. */
+ EC_MKBP_EVENT_ONLINE_CALIBRATION = 11,
+
/* Number of MKBP events */
EC_MKBP_EVENT_COUNT,
};
@@ -5220,27 +5338,24 @@
PD_CC_NONE = 0, /* No port partner attached */
/* From DFP perspective */
+ PD_CC_UFP_NONE = 1, /* No UFP accessory connected */
PD_CC_UFP_AUDIO_ACC = 2, /* UFP Audio accessory connected */
PD_CC_UFP_DEBUG_ACC = 3, /* UFP Debug accessory connected */
PD_CC_UFP_ATTACHED = 4, /* Plain UFP attached */
/* From UFP perspective */
- PD_CC_DFP_DEBUG_ACC = 6, /* DFP debug accessory connected */
PD_CC_DFP_ATTACHED = 5, /* Plain DFP attached */
+ PD_CC_DFP_DEBUG_ACC = 6, /* DFP debug accessory connected */
};
-#define USBC_CABLE_TYPE_UNDEF 0 /* Undefined */
-#define USBC_CABLE_TYPE_PASSIVE 3 /* Passive cable attached */
-#define USBC_CABLE_TYPE_ACTIVE 4 /* Active cable attached */
-
/* Active/Passive Cable */
-#define USB_PD_MUX_TBT_ACTIVE_CABLE BIT(0)
+#define USB_PD_CTRL_ACTIVE_CABLE BIT(0)
/* Optical/Non-optical cable */
-#define USB_PD_MUX_TBT_CABLE_TYPE BIT(1)
+#define USB_PD_CTRL_OPTICAL_CABLE BIT(1)
/* 3rd Gen TBT device (or AMA)/2nd gen tbt Adapter */
-#define USB_PD_MUX_TBT_ADAPTER BIT(2)
-/* Active Link enabled/disabled */
-#define USB_PD_MUX_TBT_LINK BIT(3)
+#define USB_PD_CTRL_TBT_LEGACY_ADAPTER BIT(2)
+/* Active Link Uni-Direction */
+#define USB_PD_CTRL_ACTIVE_LINK_UNIDIR BIT(3)
/*
* Underdevelopement :
@@ -5253,10 +5368,10 @@
char state[32];
uint8_t cc_state; /* enum pd_cc_states representing cc state */
uint8_t dp_mode; /* Current DP pin mode (MODE_DP_PIN_[A-E]) */
- uint8_t cable_type; /* USBC_CABLE_TYPE_*cable_type */
- uint8_t control_flags; /* USB_PD_MUX_*flags */
- uint8_t cable_speed;
- uint8_t cable_gen; /* rounded_support */
+ uint8_t reserved; /* Reserved for future use */
+ uint8_t control_flags; /* USB_PD_CTRL_*flags */
+ uint8_t cable_speed; /* TBT_SS_* cable speed */
+ uint8_t cable_gen; /* TBT_GEN3_* cable rounded support */
} __ec_align1;
#define EC_CMD_USB_PD_PORTS 0x0102
@@ -5352,7 +5467,7 @@
* TODO(rspangler) but it's not aligned!
* Should have been reserved[2].
*/
- uint32_t current_image; /* One of ec_current_image */
+ uint32_t current_image; /* One of ec_image */
} __ec_align1;
/* Read USB-PD Accessory info */
@@ -5546,6 +5661,10 @@
#define USB_PD_MUX_HPD_LVL BIT(4) /* HPD level is asserted */
#define USB_PD_MUX_SAFE_MODE BIT(5) /* DP is in safe mode */
#define USB_PD_MUX_TBT_COMPAT_ENABLED BIT(6) /* TBT compat enabled */
+#define USB_PD_MUX_USB4_ENABLED BIT(7) /* USB4 enabled */
+
+/* USB-C Dock connected */
+#define USB_PD_MUX_DOCK (USB_PD_MUX_USB_ENABLED | USB_PD_MUX_DP_ENABLED)
struct ec_response_usb_pd_mux_info {
uint8_t flags; /* USB_PD_MUX_*-encoded USB mux state */
@@ -5633,6 +5752,7 @@
CBI_TAG_OEM_NAME = 4, /* variable length ascii, nul terminated. */
CBI_TAG_MODEL_ID = 5, /* uint32_t or smaller */
CBI_TAG_FW_CONFIG = 6, /* uint32_t bit field */
+ CBI_TAG_PCB_SUPPLIER = 7, /* uint32_t or smaller */
CBI_TAG_COUNT,
};
@@ -5694,6 +5814,9 @@
#define EC_RESET_FLAG_RBOX BIT(16) /* Fixed Reset Functionality */
#define EC_RESET_FLAG_SECURITY BIT(17) /* Security threat */
#define EC_RESET_FLAG_AP_WATCHDOG BIT(18) /* AP experienced a watchdog reset */
+#define EC_RESET_FLAG_STAY_IN_RO BIT(19) /* Do not select RW in EFS. This
+ * enables PD in RO for Chromebox.
+ */
struct ec_response_uptime_info {
/*
@@ -5921,6 +6044,43 @@
} __ec_align1;
/*****************************************************************************/
+/*
+ * Button press simulation
+ *
+ * This command is used to simulate a button press.
+ * Supported commands are vup(volume up) vdown(volume down) & rec(recovery)
+ * Time duration for which button needs to be pressed is an optional parameter.
+ *
+ * NOTE: This is only available on unlocked devices for testing purposes only.
+ */
+#define EC_CMD_BUTTON 0x0129
+
+struct ec_params_button {
+ /* Button mask aligned to enum keyboard_button_type */
+ uint32_t btn_mask;
+
+ /* Duration in milliseconds button needs to be pressed */
+ uint32_t press_ms;
+} __ec_align1;
+
+enum keyboard_button_type {
+ KEYBOARD_BUTTON_POWER = 0,
+ KEYBOARD_BUTTON_VOLUME_DOWN = 1,
+ KEYBOARD_BUTTON_VOLUME_UP = 2,
+ KEYBOARD_BUTTON_RECOVERY = 3,
+ KEYBOARD_BUTTON_CAPSENSE_1 = 4,
+ KEYBOARD_BUTTON_CAPSENSE_2 = 5,
+ KEYBOARD_BUTTON_CAPSENSE_3 = 6,
+ KEYBOARD_BUTTON_CAPSENSE_4 = 7,
+ KEYBOARD_BUTTON_CAPSENSE_5 = 8,
+ KEYBOARD_BUTTON_CAPSENSE_6 = 9,
+ KEYBOARD_BUTTON_CAPSENSE_7 = 10,
+ KEYBOARD_BUTTON_CAPSENSE_8 = 11,
+
+ KEYBOARD_BUTTON_COUNT
+};
+
+/*****************************************************************************/
/* The command range 0x200-0x2FF is reserved for Rotor. */
/*****************************************************************************/