Commit a14a569a authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Tzung-Bi Shih
Browse files

platform/chrome: cros_ec_proto: Introduce cros_ec_cmd_readmem()



To read from the EC memory different mechanism are possible.
ECs connected via LPC expose their memory via a ->cmd_readmem operation.
Other protocols require the usage of EC_CMD_READ_MEMMAP, which on the
other hand is not implemented by LPC ECs.

Provide a helper that automatically selects the correct mechanism.

Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240529-cros_ec-hwmon-v4-1-5cdf0c5db50a@weissschuh.net


Signed-off-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
parent 7b44d538
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -1033,3 +1033,30 @@ int cros_ec_cmd(struct cros_ec_device *ec_dev,
	return ret;
}
EXPORT_SYMBOL_GPL(cros_ec_cmd);

/**
 * cros_ec_cmd_readmem - Read from EC memory.
 *
 * @ec_dev: EC device
 * @offset: Is within EC_LPC_ADDR_MEMMAP region.
 * @size: Number of bytes to read.
 * @dest: EC command output data
 *
 * Return: >= 0 on success, negative error number on failure.
 */
int cros_ec_cmd_readmem(struct cros_ec_device *ec_dev, u8 offset, u8 size, void *dest)
{
	struct ec_params_read_memmap params = {};

	if (!size)
		return -EINVAL;

	if (ec_dev->cmd_readmem)
		return ec_dev->cmd_readmem(ec_dev, offset, size, dest);

	params.offset = offset;
	params.size = size;
	return cros_ec_cmd(ec_dev, 0, EC_CMD_READ_MEMMAP,
			   &params, sizeof(params), dest, size);
}
EXPORT_SYMBOL_GPL(cros_ec_cmd_readmem);
+2 −0
Original line number Diff line number Diff line
@@ -261,6 +261,8 @@ int cros_ec_get_sensor_count(struct cros_ec_dev *ec);
int cros_ec_cmd(struct cros_ec_device *ec_dev, unsigned int version, int command, const void *outdata,
		    size_t outsize, void *indata, size_t insize);

int cros_ec_cmd_readmem(struct cros_ec_device *ec_dev, u8 offset, u8 size, void *dest);

/**
 * cros_ec_get_time_ns() - Return time in ns.
 *