Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e996a28 authored by Alexander Shishkin's avatar Alexander Shishkin Committed by Greg Kroah-Hartman
Browse files

stm class: Support devices that override software assigned masters



Some STM devices adjust software assigned master numbers depending on
the trace source and its runtime state and whatnot. This patch adds
a sysfs attribute to inform the trace-side software that master numbers
assigned to software sources will not match those in the STP stream,
so that, for example, master/channel allocation policy can be adjusted
accordingly.

Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6327a454
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -12,3 +12,13 @@ KernelVersion: 4.3
Contact:	Alexander Shishkin <alexander.shishkin@linux.intel.com>
Description:
		Shows the number of channels per master on this STM device.

What:		/sys/class/stm/<stm>/hw_override
Date:		March 2016
KernelVersion:	4.7
Contact:	Alexander Shishkin <alexander.shishkin@linux.intel.com>
Description:
		Reads as 0 if master numbers in the STP stream produced by
		this stm device will match the master numbers assigned by
		the software or 1 if the stm hardware overrides software
		assigned masters.
+15 −0
Original line number Diff line number Diff line
@@ -67,9 +67,24 @@ static ssize_t channels_show(struct device *dev,

static DEVICE_ATTR_RO(channels);

static ssize_t hw_override_show(struct device *dev,
				struct device_attribute *attr,
				char *buf)
{
	struct stm_device *stm = to_stm_device(dev);
	int ret;

	ret = sprintf(buf, "%u\n", stm->data->hw_override);

	return ret;
}

static DEVICE_ATTR_RO(hw_override);

static struct attribute *stm_attrs[] = {
	&dev_attr_masters.attr,
	&dev_attr_channels.attr,
	&dev_attr_hw_override.attr,
	NULL,
};

+3 −0
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ struct stm_device;
 * @sw_end:		last STP master available to software
 * @sw_nchannels:	number of STP channels per master
 * @sw_mmiosz:		size of one channel's IO space, for mmap, optional
 * @hw_override:	masters in the STP stream will not match the ones
 *			assigned by software, but are up to the STM hardware
 * @packet:		callback that sends an STP packet
 * @mmio_addr:		mmap callback, optional
 * @link:		called when a new stm_source gets linked to us, optional
@@ -85,6 +87,7 @@ struct stm_data {
	unsigned int		sw_end;
	unsigned int		sw_nchannels;
	unsigned int		sw_mmiosz;
	unsigned int		hw_override;
	ssize_t			(*packet)(struct stm_data *, unsigned int,
					  unsigned int, unsigned int,
					  unsigned int, unsigned int,