mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
remoteproc: Introduce sysfs_read_only flag
The remoteproc framework provides sysfs interfaces for changing the firmware name and for starting/stopping a remote processor through the sysfs files 'state' and 'firmware'. The 'coredump' file is used to set the coredump configuration. The 'recovery' sysfs file can also be used similarly to control the error recovery state machine of a remoteproc. These interfaces are currently allowed irrespective of how the remoteprocs were booted (like remoteproc self auto-boot, remoteproc client-driven boot etc). These interfaces can adversely affect a remoteproc and its clients especially when a remoteproc is being controlled by a remoteproc client driver(s). Also, not all remoteproc drivers may want to support the sysfs interfaces by default. Add support to make the remoteproc sysfs files read only by introducing a state flag 'sysfs_read_only' that the individual remoteproc drivers can set based on their usage needs. The default behavior is to allow the sysfs operations as before. Implement attribute_group->is_visible() to make the sysfs entries read only when 'sysfs_read_only' flag is set. Signed-off-by: Puranjay Mohan <p-mohan@ti.com> Link: https://lore.kernel.org/r/20220216081224.9956-2-p-mohan@ti.com Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
This commit is contained in:
parent
f89672cc36
commit
26c9da5194
@ -230,6 +230,22 @@ static ssize_t name_show(struct device *dev, struct device_attribute *attr,
|
||||
}
|
||||
static DEVICE_ATTR_RO(name);
|
||||
|
||||
static umode_t rproc_is_visible(struct kobject *kobj, struct attribute *attr,
|
||||
int n)
|
||||
{
|
||||
struct device *dev = kobj_to_dev(kobj);
|
||||
struct rproc *rproc = to_rproc(dev);
|
||||
umode_t mode = attr->mode;
|
||||
|
||||
if (rproc->sysfs_read_only && (attr == &dev_attr_recovery.attr ||
|
||||
attr == &dev_attr_firmware.attr ||
|
||||
attr == &dev_attr_state.attr ||
|
||||
attr == &dev_attr_coredump.attr))
|
||||
mode = 0444;
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
static struct attribute *rproc_attrs[] = {
|
||||
&dev_attr_coredump.attr,
|
||||
&dev_attr_recovery.attr,
|
||||
@ -240,7 +256,8 @@ static struct attribute *rproc_attrs[] = {
|
||||
};
|
||||
|
||||
static const struct attribute_group rproc_devgroup = {
|
||||
.attrs = rproc_attrs
|
||||
.attrs = rproc_attrs,
|
||||
.is_visible = rproc_is_visible,
|
||||
};
|
||||
|
||||
static const struct attribute_group *rproc_devgroups[] = {
|
||||
|
@ -523,6 +523,7 @@ struct rproc_dump_segment {
|
||||
* @table_sz: size of @cached_table
|
||||
* @has_iommu: flag to indicate if remote processor is behind an MMU
|
||||
* @auto_boot: flag to indicate if remote processor should be auto-started
|
||||
* @sysfs_read_only: flag to make remoteproc sysfs files read only
|
||||
* @dump_segments: list of segments in the firmware
|
||||
* @nb_vdev: number of vdev currently handled by rproc
|
||||
* @elf_class: firmware ELF class
|
||||
@ -562,6 +563,7 @@ struct rproc {
|
||||
size_t table_sz;
|
||||
bool has_iommu;
|
||||
bool auto_boot;
|
||||
bool sysfs_read_only;
|
||||
struct list_head dump_segments;
|
||||
int nb_vdev;
|
||||
u8 elf_class;
|
||||
|
Loading…
Reference in New Issue
Block a user