[v7,3/5] remoteproc: pru: Make sysfs entries read-only for PRU client driven boots

Message ID 20221031073801.130541-4-danishanwar@ti.com
State New
Headers
Series Introduce PRU remoteproc consumer API |

Commit Message

MD Danish Anwar Oct. 31, 2022, 7:37 a.m. UTC
  From: Suman Anna <s-anna@ti.com>

The PRU remoteproc driver is not configured for 'auto-boot' by default,
and allows to be booted either by in-kernel PRU client drivers or by
userspace using the generic remoteproc sysfs interfaces. The sysfs
interfaces should not be permitted to change the remoteproc firmwares
or states when a PRU is being managed by an in-kernel client driver.
Use the newly introduced remoteproc generic 'sysfs_read_only' flag to
provide these restrictions by setting and clearing it appropriately
during the PRU acquire and release steps.

Signed-off-by: Suman Anna <s-anna@ti.com>
Co-developed-by: Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>
Signed-off-by: Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>
Signed-off-by: Puranjay Mohan <p-mohan@ti.com>
---
 drivers/remoteproc/pru_rproc.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Roger Quadros Nov. 4, 2022, 12:57 p.m. UTC | #1
On 31/10/2022 09:37, MD Danish Anwar wrote:
> From: Suman Anna <s-anna@ti.com>
> 
> The PRU remoteproc driver is not configured for 'auto-boot' by default,
> and allows to be booted either by in-kernel PRU client drivers or by
> userspace using the generic remoteproc sysfs interfaces. The sysfs
> interfaces should not be permitted to change the remoteproc firmwares
> or states when a PRU is being managed by an in-kernel client driver.
> Use the newly introduced remoteproc generic 'sysfs_read_only' flag to
> provide these restrictions by setting and clearing it appropriately
> during the PRU acquire and release steps.
> 
> Signed-off-by: Suman Anna <s-anna@ti.com>
> Co-developed-by: Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>
> Signed-off-by: Grzegorz Jaszczyk <grzegorz.jaszczyk@linaro.org>
> Signed-off-by: Puranjay Mohan <p-mohan@ti.com>

Reviewed-by: Roger Quadros <rogerq@kernel.org>

> ---
>  drivers/remoteproc/pru_rproc.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c
> index 9ba73cfc29e2..14eb27bb5f3f 100644
> --- a/drivers/remoteproc/pru_rproc.c
> +++ b/drivers/remoteproc/pru_rproc.c
> @@ -230,6 +230,7 @@ struct rproc *pru_rproc_get(struct device_node *np, int index,
>  	}
>  
>  	pru->client_np = np;
> +	rproc->sysfs_read_only = true;
>  
>  	mutex_unlock(&pru->lock);
>  
> @@ -268,6 +269,7 @@ void pru_rproc_put(struct rproc *rproc)
>  	}
>  
>  	pru->client_np = NULL;
> +	rproc->sysfs_read_only = false;
>  	mutex_unlock(&pru->lock);
>  
>  	rproc_put(rproc);
  

Patch

diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c
index 9ba73cfc29e2..14eb27bb5f3f 100644
--- a/drivers/remoteproc/pru_rproc.c
+++ b/drivers/remoteproc/pru_rproc.c
@@ -230,6 +230,7 @@  struct rproc *pru_rproc_get(struct device_node *np, int index,
 	}
 
 	pru->client_np = np;
+	rproc->sysfs_read_only = true;
 
 	mutex_unlock(&pru->lock);
 
@@ -268,6 +269,7 @@  void pru_rproc_put(struct rproc *rproc)
 	}
 
 	pru->client_np = NULL;
+	rproc->sysfs_read_only = false;
 	mutex_unlock(&pru->lock);
 
 	rproc_put(rproc);