All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: mhi@lists.linux.dev
Cc: loic.poulain@linaro.org, hemantk@codeaurora.org,
	bbhatt@codeaurora.org, linux-arm-msm@vger.kernel.org,
	netdev@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>,
	"David S . Miller" <davem@davemloft.net>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH v2] bus: mhi: core: Add an API for auto queueing buffers for DL channel
Date: Thu, 16 Dec 2021 11:05:13 +0530	[thread overview]
Message-ID: <20211216053513.GC42608@thinkpad> (raw)
In-Reply-To: <20211207071339.123794-1-manivannan.sadhasivam@linaro.org>

On Tue, Dec 07, 2021 at 12:43:39PM +0530, Manivannan Sadhasivam wrote:
> Add a new API "mhi_prepare_for_transfer_autoqueue" for using with client
> drivers like QRTR to request MHI core to autoqueue buffers for the DL
> channel along with starting both UL and DL channels.
> 
> So far, the "auto_queue" flag specified by the controller drivers in
> channel definition served this purpose but this will be removed at some
> point in future.
> 
> Cc: netdev@vger.kernel.org
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Co-developed-by: Loic Poulain <loic.poulain@linaro.org>
> Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

Applied to mhi-next with Ack from Jakub!

Thanks,
Mani

> ---
> 
> Changes in v2:
> 
> * Rebased on top of 5.16-rc1
> * Fixed an issue reported by kernel test bot
> * CCed netdev folks and Greg
> * Slight change to the commit subject for reflecting "core" sub-directory
> 
>  drivers/bus/mhi/core/internal.h |  6 +++++-
>  drivers/bus/mhi/core/main.c     | 21 +++++++++++++++++----
>  include/linux/mhi.h             | 21 ++++++++++++++++-----
>  net/qrtr/mhi.c                  |  2 +-
>  4 files changed, 39 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/bus/mhi/core/internal.h b/drivers/bus/mhi/core/internal.h
> index 9d72b1d1e986..e2e10474a9d9 100644
> --- a/drivers/bus/mhi/core/internal.h
> +++ b/drivers/bus/mhi/core/internal.h
> @@ -682,8 +682,12 @@ void mhi_deinit_free_irq(struct mhi_controller *mhi_cntrl);
>  void mhi_rddm_prepare(struct mhi_controller *mhi_cntrl,
>  		      struct image_info *img_info);
>  void mhi_fw_load_handler(struct mhi_controller *mhi_cntrl);
> +
> +/* Automatically allocate and queue inbound buffers */
> +#define MHI_CH_INBOUND_ALLOC_BUFS BIT(0)
>  int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
> -			struct mhi_chan *mhi_chan);
> +			struct mhi_chan *mhi_chan, unsigned int flags);
> +
>  int mhi_init_chan_ctxt(struct mhi_controller *mhi_cntrl,
>  		       struct mhi_chan *mhi_chan);
>  void mhi_deinit_chan_ctxt(struct mhi_controller *mhi_cntrl,
> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
> index 930aba666b67..ffde617f93a3 100644
> --- a/drivers/bus/mhi/core/main.c
> +++ b/drivers/bus/mhi/core/main.c
> @@ -1430,7 +1430,7 @@ static void mhi_unprepare_channel(struct mhi_controller *mhi_cntrl,
>  }
>  
>  int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
> -			struct mhi_chan *mhi_chan)
> +			struct mhi_chan *mhi_chan, unsigned int flags)
>  {
>  	int ret = 0;
>  	struct device *dev = &mhi_chan->mhi_dev->dev;
> @@ -1455,6 +1455,9 @@ int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
>  	if (ret)
>  		goto error_pm_state;
>  
> +	if (mhi_chan->dir == DMA_FROM_DEVICE)
> +		mhi_chan->pre_alloc = !!(flags & MHI_CH_INBOUND_ALLOC_BUFS);
> +
>  	/* Pre-allocate buffer for xfer ring */
>  	if (mhi_chan->pre_alloc) {
>  		int nr_el = get_nr_avail_ring_elements(mhi_cntrl,
> @@ -1610,8 +1613,7 @@ void mhi_reset_chan(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan)
>  	read_unlock_bh(&mhi_cntrl->pm_lock);
>  }
>  
> -/* Move channel to start state */
> -int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
> +static int __mhi_prepare_for_transfer(struct mhi_device *mhi_dev, unsigned int flags)
>  {
>  	int ret, dir;
>  	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
> @@ -1622,7 +1624,7 @@ int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
>  		if (!mhi_chan)
>  			continue;
>  
> -		ret = mhi_prepare_channel(mhi_cntrl, mhi_chan);
> +		ret = mhi_prepare_channel(mhi_cntrl, mhi_chan, flags);
>  		if (ret)
>  			goto error_open_chan;
>  	}
> @@ -1640,8 +1642,19 @@ int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
>  
>  	return ret;
>  }
> +
> +int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
> +{
> +	return __mhi_prepare_for_transfer(mhi_dev, 0);
> +}
>  EXPORT_SYMBOL_GPL(mhi_prepare_for_transfer);
>  
> +int mhi_prepare_for_transfer_autoqueue(struct mhi_device *mhi_dev)
> +{
> +	return __mhi_prepare_for_transfer(mhi_dev, MHI_CH_INBOUND_ALLOC_BUFS);
> +}
> +EXPORT_SYMBOL_GPL(mhi_prepare_for_transfer_autoqueue);
> +
>  void mhi_unprepare_from_transfer(struct mhi_device *mhi_dev)
>  {
>  	struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
> diff --git a/include/linux/mhi.h b/include/linux/mhi.h
> index 723985879035..271db1d6da85 100644
> --- a/include/linux/mhi.h
> +++ b/include/linux/mhi.h
> @@ -717,15 +717,26 @@ void mhi_device_put(struct mhi_device *mhi_dev);
>  
>  /**
>   * mhi_prepare_for_transfer - Setup UL and DL channels for data transfer.
> - *                            Allocate and initialize the channel context and
> - *                            also issue the START channel command to both
> - *                            channels. Channels can be started only if both
> - *                            host and device execution environments match and
> - *                            channels are in a DISABLED state.
>   * @mhi_dev: Device associated with the channels
> + *
> + * Allocate and initialize the channel context and also issue the START channel
> + * command to both channels. Channels can be started only if both host and
> + * device execution environments match and channels are in a DISABLED state.
>   */
>  int mhi_prepare_for_transfer(struct mhi_device *mhi_dev);
>  
> +/**
> + * mhi_prepare_for_transfer_autoqueue - Setup UL and DL channels with auto queue
> + *                                      buffers for DL traffic
> + * @mhi_dev: Device associated with the channels
> + *
> + * Allocate and initialize the channel context and also issue the START channel
> + * command to both channels. Channels can be started only if both host and
> + * device execution environments match and channels are in a DISABLED state.
> + * The MHI core will automatically allocate and queue buffers for the DL traffic.
> + */
> +int mhi_prepare_for_transfer_autoqueue(struct mhi_device *mhi_dev);
> +
>  /**
>   * mhi_unprepare_from_transfer - Reset UL and DL channels for data transfer.
>   *                               Issue the RESET channel command and let the
> diff --git a/net/qrtr/mhi.c b/net/qrtr/mhi.c
> index fa611678af05..18196e1c8c2f 100644
> --- a/net/qrtr/mhi.c
> +++ b/net/qrtr/mhi.c
> @@ -79,7 +79,7 @@ static int qcom_mhi_qrtr_probe(struct mhi_device *mhi_dev,
>  	int rc;
>  
>  	/* start channels */
> -	rc = mhi_prepare_for_transfer(mhi_dev);
> +	rc = mhi_prepare_for_transfer_autoqueue(mhi_dev);
>  	if (rc)
>  		return rc;
>  
> -- 
> 2.25.1
> 

      parent reply	other threads:[~2021-12-16  5:35 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-07  7:13 [PATCH v2] bus: mhi: core: Add an API for auto queueing buffers for DL channel Manivannan Sadhasivam
2021-12-07  7:19 ` Manivannan Sadhasivam
2021-12-07 15:59   ` Jakub Kicinski
2021-12-16  5:35 ` Manivannan Sadhasivam [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=20211216053513.GC42608@thinkpad \
    --to=manivannan.sadhasivam@linaro.org \
    --cc=bbhatt@codeaurora.org \
    --cc=davem@davemloft.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=hemantk@codeaurora.org \
    --cc=kuba@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=loic.poulain@linaro.org \
    --cc=mhi@lists.linux.dev \
    --cc=netdev@vger.kernel.org \
    /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.