mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Merge tag 'tag-chrome-platform-for-v6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux
Pull chrome platform updates from Tzung-Bi Shih: "New drivers: - cros_ec_uart for ChromeOS EC protocol over UART - cros_typec_vdm for USB PD Vendor Defined Message Improvements: - Preserve logs as much as possible when EC panics - Shutdown to refrain from potential HW damages when EC panics Fixes: - Fix DP_PORT_VDO to include DP_CAP_RECEPTACLE - Fix a lockdep false positive Cleanups: - Use sysfs_emit*() instead of scnprintf() - Use asm instead of asm-generic for unaligned.h Misc: - Rename module name from cros_ec_typec to cros-ec-typec - Minor fixes" * tag 'tag-chrome-platform-for-v6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux: (34 commits) platform/chrome: cros_ec_typec: Fix spelling mistake platform/chrome: cros_typec_vdm: Add Attention support platform/chrome: cros_ec: Add VDM attention headers platform/chrome: cros_typec_vdm: Fix VDO copy platform/chrome: cros_ec_typec: allow deferred probe of switch handles platform/chrome: cros_ec_proto: remove big stub objects from stack platform/chrome: cros_ec_uart: fix negative type promoted to high platform/chrome: cros_ec: Use per-device lockdep key platform/chrome: fix kernel-doc warnings for cros_ec_command platform/chrome: fix kernel-doc warning for last_resume_result platform/chrome: fix kernel-doc warning for suspend_timeout_ms platform/chrome: fix kernel-doc warnings for panic notifier platform/chrome: cros_ec_lpc: initialize the buf variable platform/chrome: cros_ec: Fix panic notifier registration platform/chrome: cros_typec_switch: Check for retimer flag platform/chrome: cros_typec_switch: Use fwnode* prop check platform/chrome: cros_typec_vdm: Add VDM send support platform/chrome: cros_typec_vdm: Add VDM reply support platform/chrome: cros_ec_typec: Add initial VDM support platform/chrome: cros_ec_typec: Alter module name with hyphens ...
This commit is contained in:
@@ -1082,7 +1082,7 @@ struct ec_params_get_cmd_versions_v1 {
|
||||
} __ec_align2;
|
||||
|
||||
/**
|
||||
* struct ec_response_get_cmd_version - Response to the get command versions.
|
||||
* struct ec_response_get_cmd_versions - Response to the get command versions.
|
||||
* @version_mask: Mask of supported versions; use EC_VER_MASK() to compare with
|
||||
* a desired version.
|
||||
*/
|
||||
@@ -1300,8 +1300,18 @@ enum ec_feature_code {
|
||||
* mux.
|
||||
*/
|
||||
EC_FEATURE_TYPEC_MUX_REQUIRE_AP_ACK = 43,
|
||||
/* The MCU is a System Companion Processor (SCP) 2nd Core. */
|
||||
EC_FEATURE_SCP_C1 = 45,
|
||||
/*
|
||||
* The EC supports entering and residing in S4.
|
||||
*/
|
||||
EC_FEATURE_S4_RESIDENCY = 44,
|
||||
/*
|
||||
* The EC supports the AP directing mux sets for the board.
|
||||
*/
|
||||
EC_FEATURE_TYPEC_AP_MUX_SET = 45,
|
||||
/*
|
||||
* The EC supports the AP composing VDMs for us to send.
|
||||
*/
|
||||
EC_FEATURE_TYPEC_AP_VDM_SEND = 46,
|
||||
};
|
||||
|
||||
#define EC_FEATURE_MASK_0(event_code) BIT(event_code % 32)
|
||||
@@ -5470,7 +5480,7 @@ struct ec_response_rollback_info {
|
||||
/* Issue AP reset */
|
||||
#define EC_CMD_AP_RESET 0x0125
|
||||
|
||||
/**
|
||||
/*
|
||||
* Get the number of peripheral charge ports
|
||||
*/
|
||||
#define EC_CMD_PCHG_COUNT 0x0134
|
||||
@@ -5481,7 +5491,7 @@ struct ec_response_pchg_count {
|
||||
uint8_t port_count;
|
||||
} __ec_align1;
|
||||
|
||||
/**
|
||||
/*
|
||||
* Get the status of a peripheral charge port
|
||||
*/
|
||||
#define EC_CMD_PCHG 0x0135
|
||||
@@ -5726,6 +5736,8 @@ enum typec_control_command {
|
||||
TYPEC_CONTROL_COMMAND_ENTER_MODE,
|
||||
TYPEC_CONTROL_COMMAND_TBT_UFP_REPLY,
|
||||
TYPEC_CONTROL_COMMAND_USB_MUX_SET,
|
||||
TYPEC_CONTROL_COMMAND_BIST_SHARE_MODE,
|
||||
TYPEC_CONTROL_COMMAND_SEND_VDM_REQ,
|
||||
};
|
||||
|
||||
/* Replies the AP may specify to the TBT EnterMode command as a UFP */
|
||||
@@ -5739,6 +5751,17 @@ struct typec_usb_mux_set {
|
||||
uint8_t mux_flags; /* USB_PD_MUX_*-encoded USB mux state to set */
|
||||
} __ec_align1;
|
||||
|
||||
#define VDO_MAX_SIZE 7
|
||||
|
||||
struct typec_vdm_req {
|
||||
/* VDM data, including VDM header */
|
||||
uint32_t vdm_data[VDO_MAX_SIZE];
|
||||
/* Number of 32-bit fields filled in */
|
||||
uint8_t vdm_data_objects;
|
||||
/* Partner to address - see enum typec_partner_type */
|
||||
uint8_t partner_type;
|
||||
} __ec_align1;
|
||||
|
||||
struct ec_params_typec_control {
|
||||
uint8_t port;
|
||||
uint8_t command; /* enum typec_control_command */
|
||||
@@ -5754,6 +5777,8 @@ struct ec_params_typec_control {
|
||||
uint8_t mode_to_enter; /* enum typec_mode */
|
||||
uint8_t tbt_ufp_reply; /* enum typec_tbt_ufp_reply */
|
||||
struct typec_usb_mux_set mux_params;
|
||||
/* Used for VMD_REQ */
|
||||
struct typec_vdm_req vdm_req_params;
|
||||
uint8_t placeholder[128];
|
||||
};
|
||||
} __ec_align1;
|
||||
@@ -5835,6 +5860,9 @@ enum tcpc_cc_polarity {
|
||||
#define PD_STATUS_EVENT_DISCONNECTED BIT(3)
|
||||
#define PD_STATUS_EVENT_MUX_0_SET_DONE BIT(4)
|
||||
#define PD_STATUS_EVENT_MUX_1_SET_DONE BIT(5)
|
||||
#define PD_STATUS_EVENT_VDM_REQ_REPLY BIT(6)
|
||||
#define PD_STATUS_EVENT_VDM_REQ_FAILED BIT(7)
|
||||
#define PD_STATUS_EVENT_VDM_ATTENTION BIT(8)
|
||||
|
||||
struct ec_params_typec_status {
|
||||
uint8_t port;
|
||||
@@ -5878,6 +5906,37 @@ struct ec_response_typec_status {
|
||||
uint32_t sink_cap_pdos[7]; /* Max 7 PDOs can be present */
|
||||
} __ec_align1;
|
||||
|
||||
/*
|
||||
* Gather the response to the most recent VDM REQ from the AP, as well
|
||||
* as popping the oldest VDM:Attention from the DPM queue
|
||||
*/
|
||||
#define EC_CMD_TYPEC_VDM_RESPONSE 0x013C
|
||||
|
||||
struct ec_params_typec_vdm_response {
|
||||
uint8_t port;
|
||||
} __ec_align1;
|
||||
|
||||
struct ec_response_typec_vdm_response {
|
||||
/* Number of 32-bit fields filled in */
|
||||
uint8_t vdm_data_objects;
|
||||
/* Partner to address - see enum typec_partner_type */
|
||||
uint8_t partner_type;
|
||||
/* enum ec_status describing VDM response */
|
||||
uint16_t vdm_response_err;
|
||||
/* VDM data, including VDM header */
|
||||
uint32_t vdm_response[VDO_MAX_SIZE];
|
||||
/* Number of 32-bit Attention fields filled in */
|
||||
uint8_t vdm_attention_objects;
|
||||
/* Number of remaining messages to consume */
|
||||
uint8_t vdm_attention_left;
|
||||
/* Reserved */
|
||||
uint16_t reserved1;
|
||||
/* VDM:Attention contents */
|
||||
uint32_t vdm_attention[2];
|
||||
} __ec_align1;
|
||||
|
||||
#undef VDO_MAX_SIZE
|
||||
|
||||
/*****************************************************************************/
|
||||
/* The command range 0x200-0x2FF is reserved for Rotor. */
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#define __LINUX_CROS_EC_PROTO_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/lockdep_types.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
@@ -19,7 +20,6 @@
|
||||
#define CROS_EC_DEV_ISH_NAME "cros_ish"
|
||||
#define CROS_EC_DEV_PD_NAME "cros_pd"
|
||||
#define CROS_EC_DEV_SCP_NAME "cros_scp"
|
||||
#define CROS_EC_DEV_SCP_C1_NAME "cros_scp_c1"
|
||||
#define CROS_EC_DEV_TP_NAME "cros_tp"
|
||||
|
||||
#define CROS_EC_DEV_EC_INDEX 0
|
||||
@@ -41,6 +41,13 @@
|
||||
#define EC_MAX_REQUEST_OVERHEAD 1
|
||||
#define EC_MAX_RESPONSE_OVERHEAD 32
|
||||
|
||||
/*
|
||||
* EC panic is not covered by the standard (0-F) ACPI notify values.
|
||||
* Arbitrarily choosing B0 to notify ec panic, which is in the 84-BF
|
||||
* device specific ACPI notify range.
|
||||
*/
|
||||
#define ACPI_NOTIFY_CROS_EC_PANIC 0xB0
|
||||
|
||||
/*
|
||||
* Command interface between EC and AP, for LPC, I2C and SPI interfaces.
|
||||
*/
|
||||
@@ -116,6 +123,8 @@ struct cros_ec_command {
|
||||
* command. The caller should check msg.result for the EC's result
|
||||
* code.
|
||||
* @pkt_xfer: Send packet to EC and get response.
|
||||
* @lockdep_key: Lockdep class for each instance. Unused if CONFIG_LOCKDEP is
|
||||
* not enabled.
|
||||
* @lock: One transaction at a time.
|
||||
* @mkbp_event_supported: 0 if MKBP not supported. Otherwise its value is
|
||||
* the maximum supported version of the MKBP host event
|
||||
@@ -125,6 +134,15 @@ struct cros_ec_command {
|
||||
* @event_data: Raw payload transferred with the MKBP event.
|
||||
* @event_size: Size in bytes of the event data.
|
||||
* @host_event_wake_mask: Mask of host events that cause wake from suspend.
|
||||
* @suspend_timeout_ms: The timeout in milliseconds between when sleep event
|
||||
* is received and when the EC will declare sleep
|
||||
* transition failure if the sleep signal is not
|
||||
* asserted. See also struct
|
||||
* ec_params_host_sleep_event_v1 in cros_ec_commands.h.
|
||||
* @last_resume_result: The number of sleep power signal transitions that
|
||||
* occurred since the suspend message. The high bit
|
||||
* indicates a timeout occurred. See also struct
|
||||
* ec_response_host_sleep_event_v1 in cros_ec_commands.h.
|
||||
* @last_event_time: exact time from the hard irq when we got notified of
|
||||
* a new event.
|
||||
* @notifier_ready: The notifier_block to let the kernel re-query EC
|
||||
@@ -134,6 +152,7 @@ struct cros_ec_command {
|
||||
* main EC.
|
||||
* @pd: The platform_device used by the mfd driver to interface with the
|
||||
* PD behind an EC.
|
||||
* @panic_notifier: EC panic notifier.
|
||||
*/
|
||||
struct cros_ec_device {
|
||||
/* These are used by other drivers that want to talk to the EC */
|
||||
@@ -160,6 +179,7 @@ struct cros_ec_device {
|
||||
struct cros_ec_command *msg);
|
||||
int (*pkt_xfer)(struct cros_ec_device *ec,
|
||||
struct cros_ec_command *msg);
|
||||
struct lock_class_key lockdep_key;
|
||||
struct mutex lock;
|
||||
u8 mkbp_event_supported;
|
||||
bool host_sleep_v1;
|
||||
@@ -176,6 +196,8 @@ struct cros_ec_device {
|
||||
/* The platform devices used by the mfd driver */
|
||||
struct platform_device *ec;
|
||||
struct platform_device *pd;
|
||||
|
||||
struct blocking_notifier_head panic_notifier;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user