All of lore.kernel.org
 help / color / mirror / Atom feed
From: Abhishek Sahu <absahu@codeaurora.org>
To: Sricharan R <sricharan@codeaurora.org>
Cc: Andy Gross <andy.gross@linaro.org>,
	Wolfram Sang <wsa@the-dreams.de>,
	David Brown <david.brown@linaro.org>,
	linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org,
	linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 07/12] i2c: qup: use the complete transfer length to choose DMA mode
Date: Mon, 19 Feb 2018 16:19:48 +0530	[thread overview]
Message-ID: <0142c0722cd0d444711918741e3691ab@codeaurora.org> (raw)
In-Reply-To: <4a3d98e2-c340-1a13-eaa4-dde07768e7d8@codeaurora.org>

On 2018-02-16 10:05, Sricharan R wrote:
> On 2/3/2018 1:28 PM, Abhishek Sahu wrote:
>> Currently each message length in complete transfer is being
>> checked for determining DMA mode and if any of the message length
>> is less than FIFO length then non DMA mode is being used which
>> will increase overhead. DMA can be used for any length and it
>> should be determined with complete transfer length. Now, this
>> patch introduces DMA threshold length and the transfer will be
>> done in DMA mode if the total length is greater than this
>> threshold length.
>> 
>> Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
>> ---
>>  drivers/i2c/busses/i2c-qup.c | 15 +++++++++------
>>  1 file changed, 9 insertions(+), 6 deletions(-)
>> 
>> diff --git a/drivers/i2c/busses/i2c-qup.c 
>> b/drivers/i2c/busses/i2c-qup.c
>> index 6227a5c..a91fc70 100644
>> --- a/drivers/i2c/busses/i2c-qup.c
>> +++ b/drivers/i2c/busses/i2c-qup.c
>> @@ -192,6 +192,8 @@ struct qup_i2c_dev {
>>  	bool			is_dma;
>>  	/* To check if the current transfer is using DMA */
>>  	bool			use_dma;
>> +	/* The threshold length above which DMA will be used */
>> +	unsigned int		dma_threshold;
>>  	struct			dma_pool *dpool;
>>  	struct			qup_i2c_tag start_tag;
>>  	struct			qup_i2c_bam brx;
>> @@ -1294,7 +1296,8 @@ static int qup_i2c_xfer_v2(struct i2c_adapter 
>> *adap,
>>  			   int num)
>>  {
>>  	struct qup_i2c_dev *qup = i2c_get_adapdata(adap);
>> -	int ret, len, idx = 0;
>> +	int ret, idx = 0;
>> +	unsigned int total_len = 0;
>> 
>>  	qup->bus_err = 0;
>>  	qup->qup_err = 0;
>> @@ -1320,14 +1323,13 @@ static int qup_i2c_xfer_v2(struct i2c_adapter 
>> *adap,
>>  				goto out;
>>  			}
>> 
>> -			len = (msgs[idx].len > qup->out_fifo_sz) ||
>> -			      (msgs[idx].len > qup->in_fifo_sz);
>> -
>> -			if (is_vmalloc_addr(msgs[idx].buf) || !len)
>> +			if (is_vmalloc_addr(msgs[idx].buf))
>>  				break;
>> +
>> +			total_len += msgs[idx].len;
>>  		}
>> 
>> -		if (idx == num)
>> +		if (idx == num && total_len > qup->dma_threshold)
>>  			qup->use_dma = true;
>>  	}
>> 
>> @@ -1587,6 +1589,7 @@ static int qup_i2c_probe(struct platform_device 
>> *pdev)
>> 
>>  	size = QUP_INPUT_FIFO_SIZE(io_mode);
>>  	qup->in_fifo_sz = qup->in_blk_sz * (2 << size);
>> +	qup->dma_threshold = min(qup->out_fifo_sz, qup->in_fifo_sz);
> 
>   The patch is fine. small nit, you can avoid this global 
> dma_threshold. Instead
>   have it locally in qup_i2c_xfer_v2 itself.

  Thanks Sricharan.

  The idea for introducing global dma_threshold was to give option
  for controlling the behavior from one place. If someone wants to
  change the length above which dma will be used, then It can be
  controlled from once place in the probe function itself.

  Also, min(qup->out_fifo_sz, qup->in_fifo_sz) requires comparison
  and adding in qup_i2c_xfer_v2 will make this happen everytime.

  Regards,
  Abhishek

  reply	other threads:[~2018-02-19 10:49 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-03  7:58 [PATCH 00/12] Major code reorganization to make all i2c transfers working Abhishek Sahu
2018-02-03  7:58 ` [PATCH 01/12] i2c: qup: fixed releasing dma without flush operation completion Abhishek Sahu
2018-02-08 14:03   ` Sricharan R
2018-02-19 10:24     ` Abhishek Sahu
2018-02-27 21:46   ` Christ, Austin
2018-02-27 22:24   ` Andy Gross
2018-02-03  7:58 ` [PATCH 02/12] i2c: qup: minor code reorganization for use_dma Abhishek Sahu
2018-02-27 21:48   ` Christ, Austin
2018-02-27 22:26   ` Andy Gross
2018-02-03  7:58 ` [PATCH 03/12] i2c: qup: remove redundant variables for BAM SG count Abhishek Sahu
2018-02-09  2:16   ` Sricharan R
2018-02-19 10:26     ` Abhishek Sahu
2018-02-27 21:51   ` Christ, Austin
2018-02-27 22:28   ` Andy Gross
2018-02-03  7:58 ` [PATCH 04/12] i2c: qup: schedule EOT and FLUSH tags at the end of transfer Abhishek Sahu
2018-02-15 14:31   ` Sricharan R
2018-02-19 10:34     ` Abhishek Sahu
2018-02-27 22:36   ` Andy Gross
2018-03-08 13:40     ` Abhishek Sahu
2018-02-03  7:58 ` [PATCH 05/12] i2c: qup: fix the transfer length for BAM rx EOT FLUSH tags Abhishek Sahu
2018-02-27 22:38   ` Andy Gross
2018-02-03  7:58 ` [PATCH 06/12] i2c: qup: proper error handling for i2c error in BAM mode Abhishek Sahu
2018-02-16  4:33   ` Sricharan R
2018-02-27 22:00   ` Christ, Austin
2018-02-27 22:58   ` Andy Gross
2018-03-12 12:34     ` Abhishek Sahu
2018-02-03  7:58 ` [PATCH 07/12] i2c: qup: use the complete transfer length to choose DMA mode Abhishek Sahu
2018-02-16  4:35   ` Sricharan R
2018-02-19 10:49     ` Abhishek Sahu [this message]
2018-02-27 22:01   ` Christ, Austin
2018-02-27 22:59   ` Andy Gross
2018-02-03  7:58 ` [PATCH 08/12] i2c: qup: change completion timeout according to transfer length Abhishek Sahu
2018-02-16  4:48   ` Sricharan R
2018-02-19 10:56     ` Abhishek Sahu
2018-02-27 23:05       ` Andy Gross
2018-02-03  7:58 ` [PATCH 09/12] i2c: qup: fix buffer overflow for multiple msg of maximum xfer len Abhishek Sahu
2018-02-16  5:21   ` Sricharan R
2018-02-19 11:24     ` Abhishek Sahu
2018-02-27 22:06   ` Christ, Austin
2018-03-12 13:55     ` Abhishek Sahu
2018-02-27 23:15   ` Andy Gross
2018-03-12 12:28     ` Abhishek Sahu
2018-02-03  7:58 ` [PATCH 10/12] i2c: qup: send NACK for last read sub transfers Abhishek Sahu
2018-02-16  5:39   ` Sricharan R
2018-02-27 22:07   ` Christ, Austin
2018-02-27 23:17   ` Andy Gross
2018-02-03  7:58 ` [PATCH 11/12] i2c: qup: reorganization of driver code to remove polling for qup v1 Abhishek Sahu
2018-02-05 23:03   ` kbuild test robot
2018-02-05 23:03     ` kbuild test robot
2018-02-16  7:44   ` Sricharan R
2018-02-19 13:21     ` Abhishek Sahu
2018-02-20  4:32       ` Sricharan R
2018-02-03  7:58 ` [PATCH 12/12] i2c: qup: reorganization of driver code to remove polling for qup v2 Abhishek Sahu
2018-02-16 11:23   ` Sricharan R
2018-02-19 14:08     ` Abhishek Sahu
2018-02-27 23:24   ` Christ, Austin
2018-03-12 13:58     ` Abhishek Sahu

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=0142c0722cd0d444711918741e3691ab@codeaurora.org \
    --to=absahu@codeaurora.org \
    --cc=andy.gross@linaro.org \
    --cc=david.brown@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-soc@vger.kernel.org \
    --cc=sricharan@codeaurora.org \
    --cc=wsa@the-dreams.de \
    /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.