Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-07-01 Thread Bjorn Andersson
On Wed 01 Jul 05:13 PDT 2020, Arnaud POULIQUEN wrote:

> 
> 
> On 7/1/20 12:02 AM, Siddharth Gupta wrote:
> > 
> > On 6/30/2020 12:43 AM, Arnaud POULIQUEN wrote:
> >>
> >> On 6/30/20 7:38 AM, Siddharth Gupta wrote:
> >>> On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:
>  On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:
> > On 2020-04-30 01:30, Arnaud POULIQUEN wrote:
[..]
> >> IOCTLs should probaly be documented.
> > I have added documentation to
> > Documentation/userspace-api/ioctl/ioctl-number.rst
> > Is there another place where I need to add documentation for this?
>  Could you add in this file comments that describe
>  the IOCTL usage and associated parameter?
> 
>  Regards,
>  Arnaud
> > 
> > I don't see any for of comments that describe in detail the IOCTL usage, 
> > i.e.,
> > input parameters, etc. Could you provide an example so I can follow it?
> > 
> > If not, should I instead put them in Documentation/remoteproc.txt?
> 
> Bjorn and Mathieu are the right persons to decide on the best place.
> 
> Here are 2 exemples of "inline" documented IOCTRLs.
> 
> https://elixir.bootlin.com/linux/latest/source/arch/s390/include/uapi/asm/tape390.h#L15
> https://elixir.bootlin.com/linux/latest/source/drivers/net/wan/cosa.h#L63 
> 
> Could be something like that:
> 
> /*
>  * The RPROC_SET_SHUTDOWN_ON_RELEASE ioctl allows to enable/disable the 
>  * automatic remote processors shutdown when the controlling userpsace
>  * closes the char device interface.
>  *
>  * input parameter: integer
>  *   0: disable automatic shutdown
>  *   other: enable automatic shutdown
>  */ 
> #define RPROC_SET_SHUTDOWN_ON_RELEASE _IOW(RPROC_MAGIC, 1, int)
> 
> /*
>  * The RPROC_GET_SHUTDOWN_ON_RELEASE ioctl gets information about the 
>  * automatic remote processors shutdown when the controlling userpsace
>  * closes the char device interface.
>  *
>  * output parameter: integer
>  *   0: automatic shutdown disable
>  *   1: automatic shutdown enable
>  */ 
> #define RPROC_GET_SHUTDOWN_ON_RELEASE _IOR(RPROC_MAGIC, 2, int)
> 

I like this. Thanks for digging up an example Arnaud!

Regards,
Bjorn


Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-07-01 Thread Arnaud POULIQUEN



On 7/1/20 12:02 AM, Siddharth Gupta wrote:
> 
> On 6/30/2020 12:43 AM, Arnaud POULIQUEN wrote:
>>
>> On 6/30/20 7:38 AM, Siddharth Gupta wrote:
>>> On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:
 On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:
> On 2020-04-30 01:30, Arnaud POULIQUEN wrote:
>> Hi Rishabh,
>>
>>
>> On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
>>> Add the character device interface into remoteproc framework.
>>> This interface can be used in order to boot/shutdown remote
>>> subsystems and provides a basic ioctl based interface to implement
>>> supplementary functionality. An ioctl call is implemented to enable
>>> the shutdown on release feature which will allow remote processors to
>>> be shutdown when the controlling userpsace application crashes or
>>> hangs.
>>>
>> Thanks for intruducing Ioctl, this will help for future evolutions.
>>
>>> Signed-off-by: Rishabh Bhatnagar 
>>> ---
>>>Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
>>>drivers/remoteproc/Kconfig |   9 ++
>>>drivers/remoteproc/Makefile|   1 +
>>>drivers/remoteproc/remoteproc_cdev.c   | 143
>>> +
>>>drivers/remoteproc/remoteproc_internal.h   |  21 +++
>>>include/linux/remoteproc.h |   3 +
>>>include/uapi/linux/remoteproc_cdev.h   |  20 +++
>>>7 files changed, 198 insertions(+)
>>>create mode 100644 drivers/remoteproc/remoteproc_cdev.c
>>>create mode 100644 include/uapi/linux/remoteproc_cdev.h
>>>
>>> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> b/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> index 2e91370..412b2a0 100644
>>> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> @@ -337,6 +337,7 @@ Code  Seq#Include File
>>> Comments
>>>0xB4  00-0F  linux/gpio.h
>>> 
>>>0xB5  00-0F  uapi/linux/rpmsg.h
>>> 
>>>0xB6  alllinux/fpga-dfl.h
>>> +0xB7  alluapi/linux/remoteproc_cdev.h  
>>> 
>>>0xC0  00-0F  linux/usb/iowarrior.h
>>>0xCA  00-0F  uapi/misc/cxl.h
>>>0xCA  10-2F  uapi/misc/ocxl.h
>>> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
>>> index de3862c..6374b79 100644
>>> --- a/drivers/remoteproc/Kconfig
>>> +++ b/drivers/remoteproc/Kconfig
>>> @@ -14,6 +14,15 @@ config REMOTEPROC
>>>
>>>if REMOTEPROC
>>>
>>> +config REMOTEPROC_CDEV
>>> +   bool "Remoteproc character device interface"
>>> +   help
>>> + Say y here to have a character device interface for Remoteproc
>>> + framework. Userspace can boot/shutdown remote processors 
>>> through
>>> + this interface.
>>> +
>>> + It's safe to say N if you don't want to use this interface.
>>> +
>>>config IMX_REMOTEPROC
>>> tristate "IMX6/7 remoteproc support"
>>> depends on ARCH_MXC
>>> diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
>>> index e30a1b1..b7d4f77 100644
>>> --- a/drivers/remoteproc/Makefile
>>> +++ b/drivers/remoteproc/Makefile
>>> @@ -9,6 +9,7 @@ remoteproc-y+= 
>>> remoteproc_debugfs.o
>>>remoteproc-y += remoteproc_sysfs.o
>>>remoteproc-y += remoteproc_virtio.o
>>>remoteproc-y += remoteproc_elf_loader.o
>>> +obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
>>>obj-$(CONFIG_IMX_REMOTEPROC) += imx_rproc.o
>>>obj-$(CONFIG_MTK_SCP)+= mtk_scp.o 
>>> mtk_scp_ipi.o
>>>obj-$(CONFIG_OMAP_REMOTEPROC)+= omap_remoteproc.o
>>> diff --git a/drivers/remoteproc/remoteproc_cdev.c
>>> b/drivers/remoteproc/remoteproc_cdev.c
>>> new file mode 100644
>>> index 000..65142ec
>>> --- /dev/null
>>> +++ b/drivers/remoteproc/remoteproc_cdev.c
>>> @@ -0,0 +1,143 @@
>>> +// SPDX-License-Identifier: GPL-2.0-only
>>> +/*
>>> + * Character device interface driver for Remoteproc framework.
>>> + *
>>> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
>>> + */
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#include "remoteproc_internal.h"
>>> +
>>> +#define NUM_RPROC_DEVICES  64
>>> +static dev_t rproc_major;
>>> +
>>> 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-30 Thread Bjorn Andersson
On Tue 30 Jun 00:43 PDT 2020, Arnaud POULIQUEN wrote:

> 
> 
> On 6/30/20 7:38 AM, Siddharth Gupta wrote:
> > 
> > On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:
> >>
> >> On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:
> >>> On 2020-04-30 01:30, Arnaud POULIQUEN wrote:
>  Hi Rishabh,
> 
> 
>  On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
> > Add the character device interface into remoteproc framework.
> > This interface can be used in order to boot/shutdown remote
> > subsystems and provides a basic ioctl based interface to implement
> > supplementary functionality. An ioctl call is implemented to enable
> > the shutdown on release feature which will allow remote processors to
> > be shutdown when the controlling userpsace application crashes or
> > hangs.
> >
>  Thanks for intruducing Ioctl, this will help for future evolutions.
> 
> > Signed-off-by: Rishabh Bhatnagar 
> > ---
> >   Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
> >   drivers/remoteproc/Kconfig |   9 ++
> >   drivers/remoteproc/Makefile|   1 +
> >   drivers/remoteproc/remoteproc_cdev.c   | 143
> > +
> >   drivers/remoteproc/remoteproc_internal.h   |  21 +++
> >   include/linux/remoteproc.h |   3 +
> >   include/uapi/linux/remoteproc_cdev.h   |  20 +++
> >   7 files changed, 198 insertions(+)
> >   create mode 100644 drivers/remoteproc/remoteproc_cdev.c
> >   create mode 100644 include/uapi/linux/remoteproc_cdev.h
> >
> > diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst
> > b/Documentation/userspace-api/ioctl/ioctl-number.rst
> > index 2e91370..412b2a0 100644
> > --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> > +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> > @@ -337,6 +337,7 @@ Code  Seq#Include File
> >Comments
> >   0xB4  00-0F  linux/gpio.h
> > 
> >   0xB5  00-0F  uapi/linux/rpmsg.h
> > 
> >   0xB6  alllinux/fpga-dfl.h
> > +0xB7  alluapi/linux/remoteproc_cdev.h  
> > 
> >   0xC0  00-0F  linux/usb/iowarrior.h
> >   0xCA  00-0F  uapi/misc/cxl.h
> >   0xCA  10-2F  uapi/misc/ocxl.h
> > diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> > index de3862c..6374b79 100644
> > --- a/drivers/remoteproc/Kconfig
> > +++ b/drivers/remoteproc/Kconfig
> > @@ -14,6 +14,15 @@ config REMOTEPROC
> >
> >   if REMOTEPROC
> >
> > +config REMOTEPROC_CDEV
> > +   bool "Remoteproc character device interface"
> > +   help
> > + Say y here to have a character device interface for Remoteproc
> > + framework. Userspace can boot/shutdown remote processors 
> > through
> > + this interface.
> > +
> > + It's safe to say N if you don't want to use this interface.
> > +
> >   config IMX_REMOTEPROC
> > tristate "IMX6/7 remoteproc support"
> > depends on ARCH_MXC
> > diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
> > index e30a1b1..b7d4f77 100644
> > --- a/drivers/remoteproc/Makefile
> > +++ b/drivers/remoteproc/Makefile
> > @@ -9,6 +9,7 @@ remoteproc-y+= 
> > remoteproc_debugfs.o
> >   remoteproc-y  += remoteproc_sysfs.o
> >   remoteproc-y  += remoteproc_virtio.o
> >   remoteproc-y  += remoteproc_elf_loader.o
> > +obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
> >   obj-$(CONFIG_IMX_REMOTEPROC)  += imx_rproc.o
> >   obj-$(CONFIG_MTK_SCP) += mtk_scp.o mtk_scp_ipi.o
> >   obj-$(CONFIG_OMAP_REMOTEPROC) += omap_remoteproc.o
> > diff --git a/drivers/remoteproc/remoteproc_cdev.c
> > b/drivers/remoteproc/remoteproc_cdev.c
> > new file mode 100644
> > index 000..65142ec
> > --- /dev/null
> > +++ b/drivers/remoteproc/remoteproc_cdev.c
> > @@ -0,0 +1,143 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Character device interface driver for Remoteproc framework.
> > + *
> > + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> > + */
> > +
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +
> > +#include "remoteproc_internal.h"
> > +
> > +#define NUM_RPROC_DEVICES  64
> > +static dev_t rproc_major;
> > +
> > +static ssize_t rproc_cdev_write(struct file *filp, const char __user
> > 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-30 Thread Siddharth Gupta



On 6/30/2020 12:43 AM, Arnaud POULIQUEN wrote:


On 6/30/20 7:38 AM, Siddharth Gupta wrote:

On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:

On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:

On 2020-04-30 01:30, Arnaud POULIQUEN wrote:

Hi Rishabh,


On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:

Add the character device interface into remoteproc framework.
This interface can be used in order to boot/shutdown remote
subsystems and provides a basic ioctl based interface to implement
supplementary functionality. An ioctl call is implemented to enable
the shutdown on release feature which will allow remote processors to
be shutdown when the controlling userpsace application crashes or
hangs.


Thanks for intruducing Ioctl, this will help for future evolutions.


Signed-off-by: Rishabh Bhatnagar 
---
   Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
   drivers/remoteproc/Kconfig |   9 ++
   drivers/remoteproc/Makefile|   1 +
   drivers/remoteproc/remoteproc_cdev.c   | 143
+
   drivers/remoteproc/remoteproc_internal.h   |  21 +++
   include/linux/remoteproc.h |   3 +
   include/uapi/linux/remoteproc_cdev.h   |  20 +++
   7 files changed, 198 insertions(+)
   create mode 100644 drivers/remoteproc/remoteproc_cdev.c
   create mode 100644 include/uapi/linux/remoteproc_cdev.h

diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst
b/Documentation/userspace-api/ioctl/ioctl-number.rst
index 2e91370..412b2a0 100644
--- a/Documentation/userspace-api/ioctl/ioctl-number.rst
+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
@@ -337,6 +337,7 @@ Code  Seq#Include File
Comments
   0xB4  00-0F  linux/gpio.h

   0xB5  00-0F  uapi/linux/rpmsg.h

   0xB6  alllinux/fpga-dfl.h
+0xB7  alluapi/linux/remoteproc_cdev.h  

   0xC0  00-0F  linux/usb/iowarrior.h
   0xCA  00-0F  uapi/misc/cxl.h
   0xCA  10-2F  uapi/misc/ocxl.h
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index de3862c..6374b79 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -14,6 +14,15 @@ config REMOTEPROC

   if REMOTEPROC

+config REMOTEPROC_CDEV
+   bool "Remoteproc character device interface"
+   help
+ Say y here to have a character device interface for Remoteproc
+ framework. Userspace can boot/shutdown remote processors through
+ this interface.
+
+ It's safe to say N if you don't want to use this interface.
+
   config IMX_REMOTEPROC
tristate "IMX6/7 remoteproc support"
depends on ARCH_MXC
diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
index e30a1b1..b7d4f77 100644
--- a/drivers/remoteproc/Makefile
+++ b/drivers/remoteproc/Makefile
@@ -9,6 +9,7 @@ remoteproc-y+= remoteproc_debugfs.o
   remoteproc-y += remoteproc_sysfs.o
   remoteproc-y += remoteproc_virtio.o
   remoteproc-y += remoteproc_elf_loader.o
+obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
   obj-$(CONFIG_IMX_REMOTEPROC) += imx_rproc.o
   obj-$(CONFIG_MTK_SCP)+= mtk_scp.o mtk_scp_ipi.o
   obj-$(CONFIG_OMAP_REMOTEPROC)+= omap_remoteproc.o
diff --git a/drivers/remoteproc/remoteproc_cdev.c
b/drivers/remoteproc/remoteproc_cdev.c
new file mode 100644
index 000..65142ec
--- /dev/null
+++ b/drivers/remoteproc/remoteproc_cdev.c
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Character device interface driver for Remoteproc framework.
+ *
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "remoteproc_internal.h"
+
+#define NUM_RPROC_DEVICES  64
+static dev_t rproc_major;
+
+static ssize_t rproc_cdev_write(struct file *filp, const char __user
*buf,
+size_t len, loff_t *pos)
+{
+   struct rproc *rproc = container_of(filp->f_inode->i_cdev,
+  struct rproc, char_dev);
+   int ret = 0;
+   char cmd[10];
+
+   if (!len || len > sizeof(cmd))
+   return -EINVAL;
+
+   ret = copy_from_user(cmd, buf, sizeof(cmd));
+   if (ret)
+   return -EFAULT;
+
+   if (sysfs_streq(cmd, "start")) {
+   if (rproc->state == RPROC_RUNNING)
+   return -EBUSY;
+
+   ret = rproc_boot(rproc);
+   if (ret)
+   dev_err(>dev, "Boot failed:%d\n", ret);
+   } else if (sysfs_streq(cmd, "stop")) {
+   if (rproc->state == RPROC_OFFLINE)
+   return -ENXIO;

returning ENXIO in 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-30 Thread Arnaud POULIQUEN



On 6/30/20 7:38 AM, Siddharth Gupta wrote:
> 
> On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:
>>
>> On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:
>>> On 2020-04-30 01:30, Arnaud POULIQUEN wrote:
 Hi Rishabh,


 On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
> Add the character device interface into remoteproc framework.
> This interface can be used in order to boot/shutdown remote
> subsystems and provides a basic ioctl based interface to implement
> supplementary functionality. An ioctl call is implemented to enable
> the shutdown on release feature which will allow remote processors to
> be shutdown when the controlling userpsace application crashes or
> hangs.
>
 Thanks for intruducing Ioctl, this will help for future evolutions.

> Signed-off-by: Rishabh Bhatnagar 
> ---
>   Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
>   drivers/remoteproc/Kconfig |   9 ++
>   drivers/remoteproc/Makefile|   1 +
>   drivers/remoteproc/remoteproc_cdev.c   | 143
> +
>   drivers/remoteproc/remoteproc_internal.h   |  21 +++
>   include/linux/remoteproc.h |   3 +
>   include/uapi/linux/remoteproc_cdev.h   |  20 +++
>   7 files changed, 198 insertions(+)
>   create mode 100644 drivers/remoteproc/remoteproc_cdev.c
>   create mode 100644 include/uapi/linux/remoteproc_cdev.h
>
> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst
> b/Documentation/userspace-api/ioctl/ioctl-number.rst
> index 2e91370..412b2a0 100644
> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> @@ -337,6 +337,7 @@ Code  Seq#Include File
>Comments
>   0xB4  00-0F  linux/gpio.h
> 
>   0xB5  00-0F  uapi/linux/rpmsg.h
> 
>   0xB6  alllinux/fpga-dfl.h
> +0xB7  alluapi/linux/remoteproc_cdev.h
> 
>   0xC0  00-0F  linux/usb/iowarrior.h
>   0xCA  00-0F  uapi/misc/cxl.h
>   0xCA  10-2F  uapi/misc/ocxl.h
> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> index de3862c..6374b79 100644
> --- a/drivers/remoteproc/Kconfig
> +++ b/drivers/remoteproc/Kconfig
> @@ -14,6 +14,15 @@ config REMOTEPROC
>
>   if REMOTEPROC
>
> +config REMOTEPROC_CDEV
> + bool "Remoteproc character device interface"
> + help
> +   Say y here to have a character device interface for Remoteproc
> +   framework. Userspace can boot/shutdown remote processors through
> +   this interface.
> +
> +   It's safe to say N if you don't want to use this interface.
> +
>   config IMX_REMOTEPROC
>   tristate "IMX6/7 remoteproc support"
>   depends on ARCH_MXC
> diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
> index e30a1b1..b7d4f77 100644
> --- a/drivers/remoteproc/Makefile
> +++ b/drivers/remoteproc/Makefile
> @@ -9,6 +9,7 @@ remoteproc-y  += 
> remoteproc_debugfs.o
>   remoteproc-y+= remoteproc_sysfs.o
>   remoteproc-y+= remoteproc_virtio.o
>   remoteproc-y+= remoteproc_elf_loader.o
> +obj-$(CONFIG_REMOTEPROC_CDEV)+= remoteproc_cdev.o
>   obj-$(CONFIG_IMX_REMOTEPROC)+= imx_rproc.o
>   obj-$(CONFIG_MTK_SCP)   += mtk_scp.o mtk_scp_ipi.o
>   obj-$(CONFIG_OMAP_REMOTEPROC)   += omap_remoteproc.o
> diff --git a/drivers/remoteproc/remoteproc_cdev.c
> b/drivers/remoteproc/remoteproc_cdev.c
> new file mode 100644
> index 000..65142ec
> --- /dev/null
> +++ b/drivers/remoteproc/remoteproc_cdev.c
> @@ -0,0 +1,143 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Character device interface driver for Remoteproc framework.
> + *
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "remoteproc_internal.h"
> +
> +#define NUM_RPROC_DEVICES64
> +static dev_t rproc_major;
> +
> +static ssize_t rproc_cdev_write(struct file *filp, const char __user
> *buf,
> +  size_t len, loff_t *pos)
> +{
> + struct rproc *rproc = container_of(filp->f_inode->i_cdev,
> +struct rproc, char_dev);
> + int ret = 0;
> + char cmd[10];
> +
> + if (!len || len > sizeof(cmd))
> + 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-29 Thread Siddharth Gupta



On 6/17/2020 1:44 AM, Arnaud POULIQUEN wrote:


On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:

On 2020-04-30 01:30, Arnaud POULIQUEN wrote:

Hi Rishabh,


On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:

Add the character device interface into remoteproc framework.
This interface can be used in order to boot/shutdown remote
subsystems and provides a basic ioctl based interface to implement
supplementary functionality. An ioctl call is implemented to enable
the shutdown on release feature which will allow remote processors to
be shutdown when the controlling userpsace application crashes or
hangs.


Thanks for intruducing Ioctl, this will help for future evolutions.


Signed-off-by: Rishabh Bhatnagar 
---
  Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
  drivers/remoteproc/Kconfig |   9 ++
  drivers/remoteproc/Makefile|   1 +
  drivers/remoteproc/remoteproc_cdev.c   | 143
+
  drivers/remoteproc/remoteproc_internal.h   |  21 +++
  include/linux/remoteproc.h |   3 +
  include/uapi/linux/remoteproc_cdev.h   |  20 +++
  7 files changed, 198 insertions(+)
  create mode 100644 drivers/remoteproc/remoteproc_cdev.c
  create mode 100644 include/uapi/linux/remoteproc_cdev.h

diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst
b/Documentation/userspace-api/ioctl/ioctl-number.rst
index 2e91370..412b2a0 100644
--- a/Documentation/userspace-api/ioctl/ioctl-number.rst
+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
@@ -337,6 +337,7 @@ Code  Seq#Include File
   Comments
  0xB4  00-0F  linux/gpio.h

  0xB5  00-0F  uapi/linux/rpmsg.h

  0xB6  alllinux/fpga-dfl.h
+0xB7  alluapi/linux/remoteproc_cdev.h  

  0xC0  00-0F  linux/usb/iowarrior.h
  0xCA  00-0F  uapi/misc/cxl.h
  0xCA  10-2F  uapi/misc/ocxl.h
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index de3862c..6374b79 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -14,6 +14,15 @@ config REMOTEPROC

  if REMOTEPROC

+config REMOTEPROC_CDEV
+   bool "Remoteproc character device interface"
+   help
+ Say y here to have a character device interface for Remoteproc
+ framework. Userspace can boot/shutdown remote processors through
+ this interface.
+
+ It's safe to say N if you don't want to use this interface.
+
  config IMX_REMOTEPROC
tristate "IMX6/7 remoteproc support"
depends on ARCH_MXC
diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
index e30a1b1..b7d4f77 100644
--- a/drivers/remoteproc/Makefile
+++ b/drivers/remoteproc/Makefile
@@ -9,6 +9,7 @@ remoteproc-y+= remoteproc_debugfs.o
  remoteproc-y  += remoteproc_sysfs.o
  remoteproc-y  += remoteproc_virtio.o
  remoteproc-y  += remoteproc_elf_loader.o
+obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
  obj-$(CONFIG_IMX_REMOTEPROC)  += imx_rproc.o
  obj-$(CONFIG_MTK_SCP) += mtk_scp.o mtk_scp_ipi.o
  obj-$(CONFIG_OMAP_REMOTEPROC) += omap_remoteproc.o
diff --git a/drivers/remoteproc/remoteproc_cdev.c
b/drivers/remoteproc/remoteproc_cdev.c
new file mode 100644
index 000..65142ec
--- /dev/null
+++ b/drivers/remoteproc/remoteproc_cdev.c
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Character device interface driver for Remoteproc framework.
+ *
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "remoteproc_internal.h"
+
+#define NUM_RPROC_DEVICES  64
+static dev_t rproc_major;
+
+static ssize_t rproc_cdev_write(struct file *filp, const char __user
*buf,
+size_t len, loff_t *pos)
+{
+   struct rproc *rproc = container_of(filp->f_inode->i_cdev,
+  struct rproc, char_dev);
+   int ret = 0;
+   char cmd[10];
+
+   if (!len || len > sizeof(cmd))
+   return -EINVAL;
+
+   ret = copy_from_user(cmd, buf, sizeof(cmd));
+   if (ret)
+   return -EFAULT;
+
+   if (sysfs_streq(cmd, "start")) {
+   if (rproc->state == RPROC_RUNNING)
+   return -EBUSY;
+
+   ret = rproc_boot(rproc);
+   if (ret)
+   dev_err(>dev, "Boot failed:%d\n", ret);
+   } else if (sysfs_streq(cmd, "stop")) {
+   if (rproc->state == RPROC_OFFLINE)
+   return -ENXIO;

returning ENXIO in this case seems to me no appropriate , what about
EPERM or
EINVAL (rproc_sysfs) ?


I think EPERM would indicate the operation is 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-17 Thread Arnaud POULIQUEN



On 6/16/20 9:56 PM, risha...@codeaurora.org wrote:
> On 2020-04-30 01:30, Arnaud POULIQUEN wrote:
>> Hi Rishabh,
>>
>>
>> On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
>>> Add the character device interface into remoteproc framework.
>>> This interface can be used in order to boot/shutdown remote
>>> subsystems and provides a basic ioctl based interface to implement
>>> supplementary functionality. An ioctl call is implemented to enable
>>> the shutdown on release feature which will allow remote processors to
>>> be shutdown when the controlling userpsace application crashes or 
>>> hangs.
>>>
>>
>> Thanks for intruducing Ioctl, this will help for future evolutions.
>>
>>> Signed-off-by: Rishabh Bhatnagar 
>>> ---
>>>  Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
>>>  drivers/remoteproc/Kconfig |   9 ++
>>>  drivers/remoteproc/Makefile|   1 +
>>>  drivers/remoteproc/remoteproc_cdev.c   | 143 
>>> +
>>>  drivers/remoteproc/remoteproc_internal.h   |  21 +++
>>>  include/linux/remoteproc.h |   3 +
>>>  include/uapi/linux/remoteproc_cdev.h   |  20 +++
>>>  7 files changed, 198 insertions(+)
>>>  create mode 100644 drivers/remoteproc/remoteproc_cdev.c
>>>  create mode 100644 include/uapi/linux/remoteproc_cdev.h
>>>
>>> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst 
>>> b/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> index 2e91370..412b2a0 100644
>>> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
>>> @@ -337,6 +337,7 @@ Code  Seq#Include File 
>>>   Comments
>>>  0xB4  00-0F  linux/gpio.h
>>> 
>>>  0xB5  00-0F  uapi/linux/rpmsg.h  
>>> 
>>>  0xB6  alllinux/fpga-dfl.h
>>> +0xB7  alluapi/linux/remoteproc_cdev.h   
>>> 
>>>  0xC0  00-0F  linux/usb/iowarrior.h
>>>  0xCA  00-0F  uapi/misc/cxl.h
>>>  0xCA  10-2F  uapi/misc/ocxl.h
>>> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
>>> index de3862c..6374b79 100644
>>> --- a/drivers/remoteproc/Kconfig
>>> +++ b/drivers/remoteproc/Kconfig
>>> @@ -14,6 +14,15 @@ config REMOTEPROC
>>>
>>>  if REMOTEPROC
>>>
>>> +config REMOTEPROC_CDEV
>>> +   bool "Remoteproc character device interface"
>>> +   help
>>> + Say y here to have a character device interface for Remoteproc
>>> + framework. Userspace can boot/shutdown remote processors through
>>> + this interface.
>>> +
>>> + It's safe to say N if you don't want to use this interface.
>>> +
>>>  config IMX_REMOTEPROC
>>> tristate "IMX6/7 remoteproc support"
>>> depends on ARCH_MXC
>>> diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
>>> index e30a1b1..b7d4f77 100644
>>> --- a/drivers/remoteproc/Makefile
>>> +++ b/drivers/remoteproc/Makefile
>>> @@ -9,6 +9,7 @@ remoteproc-y+= 
>>> remoteproc_debugfs.o
>>>  remoteproc-y   += remoteproc_sysfs.o
>>>  remoteproc-y   += remoteproc_virtio.o
>>>  remoteproc-y   += remoteproc_elf_loader.o
>>> +obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
>>>  obj-$(CONFIG_IMX_REMOTEPROC)   += imx_rproc.o
>>>  obj-$(CONFIG_MTK_SCP)  += mtk_scp.o mtk_scp_ipi.o
>>>  obj-$(CONFIG_OMAP_REMOTEPROC)  += omap_remoteproc.o
>>> diff --git a/drivers/remoteproc/remoteproc_cdev.c 
>>> b/drivers/remoteproc/remoteproc_cdev.c
>>> new file mode 100644
>>> index 000..65142ec
>>> --- /dev/null
>>> +++ b/drivers/remoteproc/remoteproc_cdev.c
>>> @@ -0,0 +1,143 @@
>>> +// SPDX-License-Identifier: GPL-2.0-only
>>> +/*
>>> + * Character device interface driver for Remoteproc framework.
>>> + *
>>> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
>>> + */
>>> +
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +#include 
>>> +
>>> +#include "remoteproc_internal.h"
>>> +
>>> +#define NUM_RPROC_DEVICES  64
>>> +static dev_t rproc_major;
>>> +
>>> +static ssize_t rproc_cdev_write(struct file *filp, const char __user 
>>> *buf,
>>> +size_t len, loff_t *pos)
>>> +{
>>> +   struct rproc *rproc = container_of(filp->f_inode->i_cdev,
>>> +  struct rproc, char_dev);
>>> +   int ret = 0;
>>> +   char cmd[10];
>>> +
>>> +   if (!len || len > sizeof(cmd))
>>> +   return -EINVAL;
>>> +
>>> +   ret = copy_from_user(cmd, buf, sizeof(cmd));
>>> +   if (ret)
>>> +   return -EFAULT;
>>> +
>>> +   if (sysfs_streq(cmd, "start")) {
>>> +   if (rproc->state == 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-06-16 Thread rishabhb

On 2020-04-30 01:30, Arnaud POULIQUEN wrote:

Hi Rishabh,


On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:

Add the character device interface into remoteproc framework.
This interface can be used in order to boot/shutdown remote
subsystems and provides a basic ioctl based interface to implement
supplementary functionality. An ioctl call is implemented to enable
the shutdown on release feature which will allow remote processors to
be shutdown when the controlling userpsace application crashes or 
hangs.




Thanks for intruducing Ioctl, this will help for future evolutions.


Signed-off-by: Rishabh Bhatnagar 
---
 Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
 drivers/remoteproc/Kconfig |   9 ++
 drivers/remoteproc/Makefile|   1 +
 drivers/remoteproc/remoteproc_cdev.c   | 143 
+

 drivers/remoteproc/remoteproc_internal.h   |  21 +++
 include/linux/remoteproc.h |   3 +
 include/uapi/linux/remoteproc_cdev.h   |  20 +++
 7 files changed, 198 insertions(+)
 create mode 100644 drivers/remoteproc/remoteproc_cdev.c
 create mode 100644 include/uapi/linux/remoteproc_cdev.h

diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst 
b/Documentation/userspace-api/ioctl/ioctl-number.rst

index 2e91370..412b2a0 100644
--- a/Documentation/userspace-api/ioctl/ioctl-number.rst
+++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
@@ -337,6 +337,7 @@ Code  Seq#Include File 
  Comments
 0xB4  00-0F  linux/gpio.h

 0xB5  00-0F  uapi/linux/rpmsg.h  


 0xB6  alllinux/fpga-dfl.h
+0xB7  alluapi/linux/remoteproc_cdev.h			 


 0xC0  00-0F  linux/usb/iowarrior.h
 0xCA  00-0F  uapi/misc/cxl.h
 0xCA  10-2F  uapi/misc/ocxl.h
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index de3862c..6374b79 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -14,6 +14,15 @@ config REMOTEPROC

 if REMOTEPROC

+config REMOTEPROC_CDEV
+   bool "Remoteproc character device interface"
+   help
+ Say y here to have a character device interface for Remoteproc
+ framework. Userspace can boot/shutdown remote processors through
+ this interface.
+
+ It's safe to say N if you don't want to use this interface.
+
 config IMX_REMOTEPROC
tristate "IMX6/7 remoteproc support"
depends on ARCH_MXC
diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
index e30a1b1..b7d4f77 100644
--- a/drivers/remoteproc/Makefile
+++ b/drivers/remoteproc/Makefile
@@ -9,6 +9,7 @@ remoteproc-y+= remoteproc_debugfs.o
 remoteproc-y   += remoteproc_sysfs.o
 remoteproc-y   += remoteproc_virtio.o
 remoteproc-y   += remoteproc_elf_loader.o
+obj-$(CONFIG_REMOTEPROC_CDEV)  += remoteproc_cdev.o
 obj-$(CONFIG_IMX_REMOTEPROC)   += imx_rproc.o
 obj-$(CONFIG_MTK_SCP)  += mtk_scp.o mtk_scp_ipi.o
 obj-$(CONFIG_OMAP_REMOTEPROC)  += omap_remoteproc.o
diff --git a/drivers/remoteproc/remoteproc_cdev.c 
b/drivers/remoteproc/remoteproc_cdev.c

new file mode 100644
index 000..65142ec
--- /dev/null
+++ b/drivers/remoteproc/remoteproc_cdev.c
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Character device interface driver for Remoteproc framework.
+ *
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "remoteproc_internal.h"
+
+#define NUM_RPROC_DEVICES  64
+static dev_t rproc_major;
+
+static ssize_t rproc_cdev_write(struct file *filp, const char __user 
*buf,

+size_t len, loff_t *pos)
+{
+   struct rproc *rproc = container_of(filp->f_inode->i_cdev,
+  struct rproc, char_dev);
+   int ret = 0;
+   char cmd[10];
+
+   if (!len || len > sizeof(cmd))
+   return -EINVAL;
+
+   ret = copy_from_user(cmd, buf, sizeof(cmd));
+   if (ret)
+   return -EFAULT;
+
+   if (sysfs_streq(cmd, "start")) {
+   if (rproc->state == RPROC_RUNNING)
+   return -EBUSY;
+
+   ret = rproc_boot(rproc);
+   if (ret)
+   dev_err(>dev, "Boot failed:%d\n", ret);
+   } else if (sysfs_streq(cmd, "stop")) {
+   if (rproc->state == RPROC_OFFLINE)
+   return -ENXIO;


returning ENXIO in this case seems to me no appropriate , what about 
EPERM or

EINVAL (rproc_sysfs) ?


+
+   rproc_shutdown(rproc);
+   } else {

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-04-30 Thread Mathieu Poirier
On Thu, 30 Apr 2020 at 02:30, Arnaud POULIQUEN  wrote:
>
> Hi Rishabh,
>
>
> On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
> > Add the character device interface into remoteproc framework.
> > This interface can be used in order to boot/shutdown remote
> > subsystems and provides a basic ioctl based interface to implement
> > supplementary functionality. An ioctl call is implemented to enable
> > the shutdown on release feature which will allow remote processors to
> > be shutdown when the controlling userpsace application crashes or hangs.
> >
>
> Thanks for intruducing Ioctl, this will help for future evolutions.
>
> > Signed-off-by: Rishabh Bhatnagar 
> > ---
> >  Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
> >  drivers/remoteproc/Kconfig |   9 ++
> >  drivers/remoteproc/Makefile|   1 +
> >  drivers/remoteproc/remoteproc_cdev.c   | 143 
> > +
> >  drivers/remoteproc/remoteproc_internal.h   |  21 +++
> >  include/linux/remoteproc.h |   3 +
> >  include/uapi/linux/remoteproc_cdev.h   |  20 +++
> >  7 files changed, 198 insertions(+)
> >  create mode 100644 drivers/remoteproc/remoteproc_cdev.c
> >  create mode 100644 include/uapi/linux/remoteproc_cdev.h
> >
> > diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst 
> > b/Documentation/userspace-api/ioctl/ioctl-number.rst
> > index 2e91370..412b2a0 100644
> > --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> > +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> > @@ -337,6 +337,7 @@ Code  Seq#Include File  
> >  Comments
> >  0xB4  00-0F  linux/gpio.h
> > 
> >  0xB5  00-0F  uapi/linux/rpmsg.h  
> > 
> >  0xB6  alllinux/fpga-dfl.h
> > +0xB7  alluapi/linux/remoteproc_cdev.h 
> > 
> >  0xC0  00-0F  linux/usb/iowarrior.h
> >  0xCA  00-0F  uapi/misc/cxl.h
> >  0xCA  10-2F  uapi/misc/ocxl.h
> > diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> > index de3862c..6374b79 100644
> > --- a/drivers/remoteproc/Kconfig
> > +++ b/drivers/remoteproc/Kconfig
> > @@ -14,6 +14,15 @@ config REMOTEPROC
> >
> >  if REMOTEPROC
> >
> > +config REMOTEPROC_CDEV
> > + bool "Remoteproc character device interface"
> > + help
> > +   Say y here to have a character device interface for Remoteproc
> > +   framework. Userspace can boot/shutdown remote processors through
> > +   this interface.
> > +
> > +   It's safe to say N if you don't want to use this interface.
> > +
> >  config IMX_REMOTEPROC
> >   tristate "IMX6/7 remoteproc support"
> >   depends on ARCH_MXC
> > diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
> > index e30a1b1..b7d4f77 100644
> > --- a/drivers/remoteproc/Makefile
> > +++ b/drivers/remoteproc/Makefile
> > @@ -9,6 +9,7 @@ remoteproc-y  += 
> > remoteproc_debugfs.o
> >  remoteproc-y += remoteproc_sysfs.o
> >  remoteproc-y += remoteproc_virtio.o
> >  remoteproc-y += remoteproc_elf_loader.o
> > +obj-$(CONFIG_REMOTEPROC_CDEV)+= remoteproc_cdev.o
> >  obj-$(CONFIG_IMX_REMOTEPROC) += imx_rproc.o
> >  obj-$(CONFIG_MTK_SCP)+= mtk_scp.o mtk_scp_ipi.o
> >  obj-$(CONFIG_OMAP_REMOTEPROC)+= omap_remoteproc.o
> > diff --git a/drivers/remoteproc/remoteproc_cdev.c 
> > b/drivers/remoteproc/remoteproc_cdev.c
> > new file mode 100644
> > index 000..65142ec
> > --- /dev/null
> > +++ b/drivers/remoteproc/remoteproc_cdev.c
> > @@ -0,0 +1,143 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Character device interface driver for Remoteproc framework.
> > + *
> > + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> > + */
> > +
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +#include 
> > +
> > +#include "remoteproc_internal.h"
> > +
> > +#define NUM_RPROC_DEVICES64
> > +static dev_t rproc_major;
> > +
> > +static ssize_t rproc_cdev_write(struct file *filp, const char __user *buf,
> > +  size_t len, loff_t *pos)
> > +{
> > + struct rproc *rproc = container_of(filp->f_inode->i_cdev,
> > +struct rproc, char_dev);
> > + int ret = 0;
> > + char cmd[10];
> > +
> > + if (!len || len > sizeof(cmd))
> > + return -EINVAL;
> > +
> > + ret = copy_from_user(cmd, buf, sizeof(cmd));
> > + if (ret)
> > + return -EFAULT;
> > +
> > + if (sysfs_streq(cmd, "start")) {
> > + if (rproc->state == RPROC_RUNNING)
> > + 

Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-04-30 Thread Arnaud POULIQUEN
Hi Rishabh,


On 4/21/20 8:10 PM, Rishabh Bhatnagar wrote:
> Add the character device interface into remoteproc framework.
> This interface can be used in order to boot/shutdown remote
> subsystems and provides a basic ioctl based interface to implement
> supplementary functionality. An ioctl call is implemented to enable
> the shutdown on release feature which will allow remote processors to
> be shutdown when the controlling userpsace application crashes or hangs.
> 

Thanks for intruducing Ioctl, this will help for future evolutions.

> Signed-off-by: Rishabh Bhatnagar 
> ---
>  Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
>  drivers/remoteproc/Kconfig |   9 ++
>  drivers/remoteproc/Makefile|   1 +
>  drivers/remoteproc/remoteproc_cdev.c   | 143 
> +
>  drivers/remoteproc/remoteproc_internal.h   |  21 +++
>  include/linux/remoteproc.h |   3 +
>  include/uapi/linux/remoteproc_cdev.h   |  20 +++
>  7 files changed, 198 insertions(+)
>  create mode 100644 drivers/remoteproc/remoteproc_cdev.c
>  create mode 100644 include/uapi/linux/remoteproc_cdev.h
> 
> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst 
> b/Documentation/userspace-api/ioctl/ioctl-number.rst
> index 2e91370..412b2a0 100644
> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> @@ -337,6 +337,7 @@ Code  Seq#Include File
>Comments
>  0xB4  00-0F  linux/gpio.h
> 
>  0xB5  00-0F  uapi/linux/rpmsg.h  
> 
>  0xB6  alllinux/fpga-dfl.h
> +0xB7  alluapi/linux/remoteproc_cdev.h 
> 
>  0xC0  00-0F  linux/usb/iowarrior.h
>  0xCA  00-0F  uapi/misc/cxl.h
>  0xCA  10-2F  uapi/misc/ocxl.h
> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> index de3862c..6374b79 100644
> --- a/drivers/remoteproc/Kconfig
> +++ b/drivers/remoteproc/Kconfig
> @@ -14,6 +14,15 @@ config REMOTEPROC
>  
>  if REMOTEPROC
>  
> +config REMOTEPROC_CDEV
> + bool "Remoteproc character device interface"
> + help
> +   Say y here to have a character device interface for Remoteproc
> +   framework. Userspace can boot/shutdown remote processors through
> +   this interface.
> +
> +   It's safe to say N if you don't want to use this interface.
> +
>  config IMX_REMOTEPROC
>   tristate "IMX6/7 remoteproc support"
>   depends on ARCH_MXC
> diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
> index e30a1b1..b7d4f77 100644
> --- a/drivers/remoteproc/Makefile
> +++ b/drivers/remoteproc/Makefile
> @@ -9,6 +9,7 @@ remoteproc-y  += remoteproc_debugfs.o
>  remoteproc-y += remoteproc_sysfs.o
>  remoteproc-y += remoteproc_virtio.o
>  remoteproc-y += remoteproc_elf_loader.o
> +obj-$(CONFIG_REMOTEPROC_CDEV)+= remoteproc_cdev.o
>  obj-$(CONFIG_IMX_REMOTEPROC) += imx_rproc.o
>  obj-$(CONFIG_MTK_SCP)+= mtk_scp.o mtk_scp_ipi.o
>  obj-$(CONFIG_OMAP_REMOTEPROC)+= omap_remoteproc.o
> diff --git a/drivers/remoteproc/remoteproc_cdev.c 
> b/drivers/remoteproc/remoteproc_cdev.c
> new file mode 100644
> index 000..65142ec
> --- /dev/null
> +++ b/drivers/remoteproc/remoteproc_cdev.c
> @@ -0,0 +1,143 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Character device interface driver for Remoteproc framework.
> + *
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "remoteproc_internal.h"
> +
> +#define NUM_RPROC_DEVICES64
> +static dev_t rproc_major;
> +
> +static ssize_t rproc_cdev_write(struct file *filp, const char __user *buf,
> +  size_t len, loff_t *pos)
> +{
> + struct rproc *rproc = container_of(filp->f_inode->i_cdev,
> +struct rproc, char_dev);
> + int ret = 0;
> + char cmd[10];
> +
> + if (!len || len > sizeof(cmd))
> + return -EINVAL;
> +
> + ret = copy_from_user(cmd, buf, sizeof(cmd));
> + if (ret)
> + return -EFAULT;
> +
> + if (sysfs_streq(cmd, "start")) {
> + if (rproc->state == RPROC_RUNNING)
> + return -EBUSY;
> +
> + ret = rproc_boot(rproc);
> + if (ret)
> + dev_err(>dev, "Boot failed:%d\n", ret);
> + } else if (sysfs_streq(cmd, "stop")) {
> + if (rproc->state == RPROC_OFFLINE)
> + return -ENXIO;


Re: [PATCH v3 1/2] remoteproc: Add remoteproc character device interface

2020-04-29 Thread Mathieu Poirier
On Tue, Apr 21, 2020 at 11:10:17AM -0700, Rishabh Bhatnagar wrote:
> Add the character device interface into remoteproc framework.
> This interface can be used in order to boot/shutdown remote
> subsystems and provides a basic ioctl based interface to implement
> supplementary functionality. An ioctl call is implemented to enable
> the shutdown on release feature which will allow remote processors to
> be shutdown when the controlling userpsace application crashes or hangs.
> 
> Signed-off-by: Rishabh Bhatnagar 
> ---
>  Documentation/userspace-api/ioctl/ioctl-number.rst |   1 +
>  drivers/remoteproc/Kconfig |   9 ++
>  drivers/remoteproc/Makefile|   1 +
>  drivers/remoteproc/remoteproc_cdev.c   | 143 
> +
>  drivers/remoteproc/remoteproc_internal.h   |  21 +++
>  include/linux/remoteproc.h |   3 +
>  include/uapi/linux/remoteproc_cdev.h   |  20 +++
>  7 files changed, 198 insertions(+)
>  create mode 100644 drivers/remoteproc/remoteproc_cdev.c
>  create mode 100644 include/uapi/linux/remoteproc_cdev.h
> 
> diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst 
> b/Documentation/userspace-api/ioctl/ioctl-number.rst
> index 2e91370..412b2a0 100644
> --- a/Documentation/userspace-api/ioctl/ioctl-number.rst
> +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst
> @@ -337,6 +337,7 @@ Code  Seq#Include File
>Comments
>  0xB4  00-0F  linux/gpio.h
> 
>  0xB5  00-0F  uapi/linux/rpmsg.h  
> 
>  0xB6  alllinux/fpga-dfl.h
> +0xB7  alluapi/linux/remoteproc_cdev.h 
> 
>  0xC0  00-0F  linux/usb/iowarrior.h
>  0xCA  00-0F  uapi/misc/cxl.h
>  0xCA  10-2F  uapi/misc/ocxl.h
> diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
> index de3862c..6374b79 100644
> --- a/drivers/remoteproc/Kconfig
> +++ b/drivers/remoteproc/Kconfig
> @@ -14,6 +14,15 @@ config REMOTEPROC
>  
>  if REMOTEPROC
>  
> +config REMOTEPROC_CDEV
> + bool "Remoteproc character device interface"
> + help
> +   Say y here to have a character device interface for Remoteproc

s/Remoteproc/"the remoteproc"

> +   framework. Userspace can boot/shutdown remote processors through
> +   this interface.
> +
> +   It's safe to say N if you don't want to use this interface.
> +
>  config IMX_REMOTEPROC
>   tristate "IMX6/7 remoteproc support"
>   depends on ARCH_MXC
> diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile
> index e30a1b1..b7d4f77 100644
> --- a/drivers/remoteproc/Makefile
> +++ b/drivers/remoteproc/Makefile
> @@ -9,6 +9,7 @@ remoteproc-y  += remoteproc_debugfs.o
>  remoteproc-y += remoteproc_sysfs.o
>  remoteproc-y += remoteproc_virtio.o
>  remoteproc-y += remoteproc_elf_loader.o
> +obj-$(CONFIG_REMOTEPROC_CDEV)+= remoteproc_cdev.o
>  obj-$(CONFIG_IMX_REMOTEPROC) += imx_rproc.o
>  obj-$(CONFIG_MTK_SCP)+= mtk_scp.o mtk_scp_ipi.o
>  obj-$(CONFIG_OMAP_REMOTEPROC)+= omap_remoteproc.o
> diff --git a/drivers/remoteproc/remoteproc_cdev.c 
> b/drivers/remoteproc/remoteproc_cdev.c
> new file mode 100644
> index 000..65142ec
> --- /dev/null
> +++ b/drivers/remoteproc/remoteproc_cdev.c
> @@ -0,0 +1,143 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Character device interface driver for Remoteproc framework.
> + *
> + * Copyright (c) 2020, The Linux Foundation. All rights reserved.
> + */
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#include "remoteproc_internal.h"
> +
> +#define NUM_RPROC_DEVICES64
> +static dev_t rproc_major;
> +
> +static ssize_t rproc_cdev_write(struct file *filp, const char __user *buf,
> +  size_t len, loff_t *pos)
> +{
> + struct rproc *rproc = container_of(filp->f_inode->i_cdev,
> +struct rproc, char_dev);
> + int ret = 0;
> + char cmd[10];
> +
> + if (!len || len > sizeof(cmd))
> + return -EINVAL;
> +
> + ret = copy_from_user(cmd, buf, sizeof(cmd));
> + if (ret)
> + return -EFAULT;
> +
> + if (sysfs_streq(cmd, "start")) {
> + if (rproc->state == RPROC_RUNNING)
> + return -EBUSY;
> +
> + ret = rproc_boot(rproc);
> + if (ret)
> + dev_err(>dev, "Boot failed:%d\n", ret);
> + } else if (sysfs_streq(cmd, "stop")) {
> + if (rproc->state == RPROC_OFFLINE)
> + return -ENXIO;
> +
> +