tpm fixes for coral
binman fixes support for symbols in sub-sections
support for additional cros_ec commands
various minor fixes / tweaks
This commit is contained in:
Tom Rini
2021-01-31 08:49:53 -05:00
62 changed files with 1487 additions and 137 deletions

View File

@@ -234,11 +234,61 @@ int cros_ec_flash_update_rw(struct udevice *dev, const uint8_t *image,
struct udevice *board_get_cros_ec_dev(void);
struct dm_cros_ec_ops {
/**
* check_version() - Check the protocol version being used (optional)
*
* If provided, this function should check that the EC can be supported
* by the driver. If not provided, HELLO messages will be sent to try
* to determine the protocol version.
*
* @dev: Device to check
* @return 0 if the protocol is valid, -ve if not supported
*/
int (*check_version)(struct udevice *dev);
/**
* command() - Old-style command interface
*
* This sends a command and receives a response (deprecated, use
* packet())
*
* @dev: Device to use
* @cmd: Command to send (only supports 0-0xff)
* @cmd_version: Version of command to send (often 0)
* @dout: Output data (may be NULL If dout_len=0)
* @dout_len: Length of output data excluding 4-byte header
* @dinp: On input, set to point to input data, often struct
* cros_ec_dev->din - typically this is left alone but may be
* updated by the driver
* @din_len: Maximum length of response
* @return number of bytes in response, or -ve on error
*/
int (*command)(struct udevice *dev, uint8_t cmd, int cmd_version,
const uint8_t *dout, int dout_len,
uint8_t **dinp, int din_len);
/**
* packet() - New-style command interface
*
* This interface is preferred over command(), since it is typically
* easier to implement.
*
* @dev: Device to use
* @out_bytes: Number of bytes to send (from struct cros_ec_dev->dout)
* @in_bytes: Maximum number of bytes to expect in response
* @return number of bytes in response, or -ve on error
*/
int (*packet)(struct udevice *dev, int out_bytes, int in_bytes);
/**
* get_switches() - Get value of EC switches
*
* This is currently supported on the LPC EC.
*
* @dev: Device to use
* @return current switches value, or -ENOSYS if not supported
*/
int (*get_switches)(struct udevice *dev);
};
#define dm_cros_ec_get_ops(dev) \
@@ -329,6 +379,14 @@ int cros_ec_flash_write(struct udevice *dev, const uint8_t *data,
int cros_ec_flash_offset(struct udevice *dev, enum ec_flash_region region,
uint32_t *offset, uint32_t *size);
/**
* cros_ec_get_sku_id() - Read the SKU ID
*
* @dev: CROS-EC device
* return SKU ID, or -ve on error
*/
int cros_ec_get_sku_id(struct udevice *dev);
/**
* Read/write non-volatile data from/to a CROS-EC device.
*
@@ -497,4 +555,88 @@ int cros_ec_get_lid_shutdown_mask(struct udevice *dev);
*/
int cros_ec_set_lid_shutdown_mask(struct udevice *dev, int enable);
/**
* cros_ec_hello() - Send a hello message
*
* Sends a message with a fixed input value and checks that the expected output
* value is received
*
* @dev: CROS-EC device
* @handshakep: If non-NULL, returns received handshake value on error
* @return 0 if OK, -ve on error
*/
int cros_ec_hello(struct udevice *dev, uint *handshakep);
/**
* cros_ec_get_features() - Get the set of features provided by the EC
*
* See enum ec_feature_code for the list of available features
*
* @dev: CROS-EC device
* @featuresp: Returns a bitmask of supported features
* @return 0 if OK, -ve on error
*/
int cros_ec_get_features(struct udevice *dev, u64 *featuresp);
/**
* cros_ec_check_feature() - Check if a feature is supported
*
* @dev: CROS-EC device
* @feature: Feature number to check (enum ec_feature_code)
* @return true if supported, false if not, -ve on error
*/
int cros_ec_check_feature(struct udevice *dev, uint feature);
/**
* cros_ec_get_switches() - Get switches value
*
* @dev: CROS-EC device
* @return switches value, or -ENOSYS if not supported, or other -ve value on
* other error
*/
int cros_ec_get_switches(struct udevice *dev);
/**
* cros_ec_vstore_supported() - Check if vstore is supported
*
* @dev: CROS-EC device
* @return false if not supported, true if supported, -ve on error
*/
int cros_ec_vstore_supported(struct udevice *dev);
/**
* cros_ec_vstore_info() - Get vstore information
*
* @dev: CROS-EC device
* @lockedp: mask of locked slots
* @return number of vstore slots supported by the EC,, -ve on error
*/
int cros_ec_vstore_info(struct udevice *dev, u32 *lockedp);
/**
* cros_ec_vstore_read() - Read data from EC vstore slot
*
* @dev: CROS-EC device
* @slot: vstore slot to read from
* @data: buffer to store read data, must be EC_VSTORE_SLOT_SIZE bytes
* @return 0 if OK, -ve on error
*/
int cros_ec_vstore_read(struct udevice *dev, int slot, uint8_t *data);
/**
* cros_ec_vstore_write() - Save data into EC vstore slot
*
* The maximum size of data is EC_VSTORE_SLOT_SIZE. It is the caller's
* responsibility to check the number of implemented slots by querying the
* vstore info.
*
* @dev: CROS-EC device
* @slot: vstore slot to write into
* @data: data to write
* @size: size of data in bytes
* @return 0 if OK, -ve on error
*/
int cros_ec_vstore_write(struct udevice *dev, int slot, const uint8_t *data,
size_t size);
#endif

1
include/ctype.h Symbolic link
View File

@@ -0,0 +1 @@
linux/ctype.h

View File

@@ -111,7 +111,7 @@ enum {
* probe method if the device has a device tree node.
*
* All three of plat, priv and uclass_priv can be allocated by the
* driver, or you can use the auto_alloc_size members of struct driver and
* driver, or you can use the auto members of struct driver and
* struct uclass_driver to have driver model do this automatically.
*
* @driver: The driver used by this device

View File

@@ -30,8 +30,7 @@ static inline const struct device_node *dev_np(const struct udevice *dev)
}
#endif
#ifndef CONFIG_DM_DEV_READ_INLINE
#if !defined(CONFIG_DM_DEV_READ_INLINE) || CONFIG_IS_ENABLED(OF_PLATDATA)
/**
* dev_read_u32() - read a 32-bit integer from a device's DT property
*
@@ -1007,7 +1006,7 @@ static inline u64 dev_translate_dma_address(const struct udevice *dev,
static inline int dev_read_alias_highest_id(const char *stem)
{
if (!CONFIG_IS_ENABLED(OF_LIBFDT))
if (!CONFIG_IS_ENABLED(OF_LIBFDT) || !gd->fdt_blob)
return -1;
return fdtdec_get_alias_highest_id(gd->fdt_blob, stem);
}

View File

@@ -1101,13 +1101,50 @@ enum ec_feature_code {
EC_FEATURE_DEVICE_EVENT = 31,
/* EC supports the unified wake masks for LPC/eSPI systems */
EC_FEATURE_UNIFIED_WAKE_MASKS = 32,
/* EC supports 64-bit host events */
EC_FEATURE_HOST_EVENT64 = 33,
/* EC runs code in RAM (not in place, a.k.a. XIP) */
EC_FEATURE_EXEC_IN_RAM = 34,
/* EC supports CEC commands */
EC_FEATURE_CEC = 35,
/* EC supports tight sensor timestamping. */
EC_FEATURE_MOTION_SENSE_TIGHT_TIMESTAMPS = 36,
/*
* EC supports tablet mode detection aligned to Chrome and allows
* setting of threshold by host command using
* 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 */
EC_FEATURE_ISH = 40,
/* New TCPMv2 TYPEC_ prefaced commands supported */
EC_FEATURE_TYPEC_CMD = 41,
/*
* The EC will wait for direction from the AP to enter Type-C alternate
* modes or USB4.
*/
EC_FEATURE_TYPEC_REQUIRE_AP_MODE_ENTRY = 42,
/*
* The EC will wait for an acknowledge from the AP after setting the
* mux.
*/
EC_FEATURE_TYPEC_MUX_REQUIRE_AP_ACK = 43,
};
#define EC_FEATURE_MASK_0(event_code) (1UL << (event_code % 32))
#define EC_FEATURE_MASK_1(event_code) (1UL << (event_code - 32))
struct __ec_align4 ec_response_get_features {
#define EC_FEATURE_MASK_0(event_code) BIT(event_code % 32)
#define EC_FEATURE_MASK_1(event_code) BIT(event_code - 32)
struct ec_response_get_features {
uint32_t flags[2];
};
} __ec_align4;
/*****************************************************************************/
/* Get the board's SKU ID from EC */

View File

@@ -424,4 +424,22 @@ int os_setup_signal_handlers(void);
*/
void os_signal_action(int sig, unsigned long pc);
/**
* os_get_time_offset() - get time offset
*
* Get the time offset from environment variable UBOOT_SB_TIME_OFFSET.
*
* Return: offset in seconds
*/
long os_get_time_offset(void);
/**
* os_set_time_offset() - set time offset
*
* Save the time offset in environment variable UBOOT_SB_TIME_OFFSET.
*
* @offset: offset in seconds
*/
void os_set_time_offset(long offset);
#endif