All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Clement Leger <cleger@kalray.eu>
Cc: Ohad Ben-Cohen <ohad@wizery.com>,
	linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Loic PALLARDY <loic.pallardy@st.com>,
	Arnaud Pouliquen <arnaud.pouliquen@st.com>
Subject: Re: [PATCH] remoteproc: add vendor resources handling
Date: Sat, 29 Jun 2019 12:02:29 -0700	[thread overview]
Message-ID: <20190629190229.GE23094@builder> (raw)
In-Reply-To: <20190617125730.23688-1-cleger@kalray.eu>

On Mon 17 Jun 05:57 PDT 2019, Clement Leger wrote:

> In order to allow rproc backend to handle vendor resources such as in
> OpenAMP, add a handle_rsc hook. This hook allow the rproc backends to
> handle vendor resources as they like. The hook will be called only for
> vendor resources and should return RSC_HANDLED on successful resource
> handling, RSC_IGNORED if resource was ignored, or a negative value on
> error.
> 
> Signed-off-by: Clement Leger <cleger@kalray.eu>

Applied

Thanks,
Bjorn

> ---
>  Documentation/remoteproc.txt             | 14 +++++++++-----
>  drivers/remoteproc/remoteproc_core.c     | 14 ++++++++++++++
>  drivers/remoteproc/remoteproc_internal.h | 11 +++++++++++
>  include/linux/remoteproc.h               | 32 ++++++++++++++++++++++++++------
>  4 files changed, 60 insertions(+), 11 deletions(-)
> 
> diff --git a/Documentation/remoteproc.txt b/Documentation/remoteproc.txt
> index 77fb03acdbb4..03c3d2e568b0 100644
> --- a/Documentation/remoteproc.txt
> +++ b/Documentation/remoteproc.txt
> @@ -314,6 +314,8 @@ Here are the various resource types that are currently supported::
>     * @RSC_VDEV:       declare support for a virtio device, and serve as its
>     *		    virtio header.
>     * @RSC_LAST:       just keep this one at the end
> +   * @RSC_VENDOR_START:	start of the vendor specific resource types range
> +   * @RSC_VENDOR_END:	end of the vendor specific resource types range
>     *
>     * Please note that these values are used as indices to the rproc_handle_rsc
>     * lookup table, so please keep them sane. Moreover, @RSC_LAST is used to
> @@ -321,11 +323,13 @@ Here are the various resource types that are currently supported::
>     * please update it as needed.
>     */
>    enum fw_resource_type {
> -	RSC_CARVEOUT	= 0,
> -	RSC_DEVMEM	= 1,
> -	RSC_TRACE	= 2,
> -	RSC_VDEV	= 3,
> -	RSC_LAST	= 4,
> +	RSC_CARVEOUT		= 0,
> +	RSC_DEVMEM		= 1,
> +	RSC_TRACE		= 2,
> +	RSC_VDEV		= 3,
> +	RSC_LAST		= 4,
> +	RSC_VENDOR_START	= 128,
> +	RSC_VENDOR_END		= 512,
>    };
>  
>  For more details regarding a specific resource type, please see its
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index 48feebd6d0a2..263e9c9614a8 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -1066,6 +1066,20 @@ static int rproc_handle_resources(struct rproc *rproc,
>  
>  		dev_dbg(dev, "rsc: type %d\n", hdr->type);
>  
> +		if (hdr->type >= RSC_VENDOR_START &&
> +		    hdr->type <= RSC_VENDOR_END) {
> +			ret = rproc_handle_rsc(rproc, hdr->type, rsc,
> +					       offset + sizeof(*hdr), avail);
> +			if (ret == RSC_HANDLED)
> +				continue;
> +			else if (ret < 0)
> +				break;
> +
> +			dev_warn(dev, "unsupported vendor resource %d\n",
> +				 hdr->type);
> +			continue;
> +		}
> +
>  		if (hdr->type >= RSC_LAST) {
>  			dev_warn(dev, "unsupported resource %d\n", hdr->type);
>  			continue;
> diff --git a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h
> index 45ff76a06c72..4c77bdd517b9 100644
> --- a/drivers/remoteproc/remoteproc_internal.h
> +++ b/drivers/remoteproc/remoteproc_internal.h
> @@ -106,6 +106,17 @@ static inline int rproc_parse_fw(struct rproc *rproc, const struct firmware *fw)
>  	return 0;
>  }
>  
> +static inline
> +int rproc_handle_rsc(struct rproc *rproc, u32 rsc_type, void *rsc, int offset,
> +		     int avail)
> +{
> +	if (rproc->ops->handle_rsc)
> +		return rproc->ops->handle_rsc(rproc, rsc_type, rsc, offset,
> +					      avail);
> +
> +	return RSC_IGNORED;
> +}
> +
>  static inline
>  struct resource_table *rproc_find_loaded_rsc_table(struct rproc *rproc,
>  						   const struct firmware *fw)
> diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h
> index 04d04709f2bd..16ad66683ad0 100644
> --- a/include/linux/remoteproc.h
> +++ b/include/linux/remoteproc.h
> @@ -100,7 +100,9 @@ struct fw_rsc_hdr {
>   *		    the remote processor will be writing logs.
>   * @RSC_VDEV:       declare support for a virtio device, and serve as its
>   *		    virtio header.
> - * @RSC_LAST:       just keep this one at the end
> + * @RSC_LAST:       just keep this one at the end of standard resources
> + * @RSC_VENDOR_START:	start of the vendor specific resource types range
> + * @RSC_VENDOR_END:	end of the vendor specific resource types range
>   *
>   * For more details regarding a specific resource type, please see its
>   * dedicated structure below.
> @@ -111,11 +113,13 @@ struct fw_rsc_hdr {
>   * please update it as needed.
>   */
>  enum fw_resource_type {
> -	RSC_CARVEOUT	= 0,
> -	RSC_DEVMEM	= 1,
> -	RSC_TRACE	= 2,
> -	RSC_VDEV	= 3,
> -	RSC_LAST	= 4,
> +	RSC_CARVEOUT		= 0,
> +	RSC_DEVMEM		= 1,
> +	RSC_TRACE		= 2,
> +	RSC_VDEV		= 3,
> +	RSC_LAST		= 4,
> +	RSC_VENDOR_START	= 128,
> +	RSC_VENDOR_END		= 512,
>  };
>  
>  #define FW_RSC_ADDR_ANY (-1)
> @@ -339,6 +343,16 @@ struct rproc_mem_entry {
>  
>  struct firmware;
>  
> +/**
> + * enum rsc_handling_status - return status of rproc_ops handle_rsc hook
> + * @RSC_HANDLED:	resource was handled
> + * @RSC_IGNORED:	resource was ignored
> + */
> +enum rsc_handling_status {
> +	RSC_HANDLED	= 0,
> +	RSC_IGNORED	= 1,
> +};
> +
>  /**
>   * struct rproc_ops - platform-specific device handlers
>   * @start:	power on the device and boot it
> @@ -346,6 +360,10 @@ struct firmware;
>   * @kick:	kick a virtqueue (virtqueue id given as a parameter)
>   * @da_to_va:	optional platform hook to perform address translations
>   * @parse_fw:	parse firmware to extract information (e.g. resource table)
> + * @handle_rsc:	optional platform hook to handle vendor resources. Should return
> + * RSC_HANDLED if resource was handled, RSC_IGNORED if not handled and a
> + * negative value on error
> + * @load_rsc_table:	load resource table from firmware image
>   * @find_loaded_rsc_table: find the loaded resouce table
>   * @load:		load firmware to memory, where the remote processor
>   *			expects to find it
> @@ -358,6 +376,8 @@ struct rproc_ops {
>  	void (*kick)(struct rproc *rproc, int vqid);
>  	void * (*da_to_va)(struct rproc *rproc, u64 da, int len);
>  	int (*parse_fw)(struct rproc *rproc, const struct firmware *fw);
> +	int (*handle_rsc)(struct rproc *rproc, u32 rsc_type, void *rsc,
> +			  int offset, int avail);
>  	struct resource_table *(*find_loaded_rsc_table)(
>  				struct rproc *rproc, const struct firmware *fw);
>  	int (*load)(struct rproc *rproc, const struct firmware *fw);
> -- 
> 2.15.0.276.g89ea799
> 

      reply	other threads:[~2019-06-29 19:02 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-17 12:57 [PATCH] remoteproc: add vendor resources handling Clement Leger
2019-06-29 19:02 ` Bjorn Andersson [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190629190229.GE23094@builder \
    --to=bjorn.andersson@linaro.org \
    --cc=arnaud.pouliquen@st.com \
    --cc=cleger@kalray.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=loic.pallardy@st.com \
    --cc=ohad@wizery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.