All of lore.kernel.org
 help / color / mirror / Atom feed
From: bbhatt@codeaurora.org
To: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Cc: linux-arm-msm@vger.kernel.org, hemantk@codeaurora.org,
	jhugo@codeaurora.org, linux-kernel@vger.kernel.org,
	linux-arm-msm-owner@vger.kernel.org
Subject: Re: [PATCH v4 3/9] bus: mhi: core: Use helper API to trigger a non-blocking host resume
Date: Wed, 08 Jul 2020 13:53:49 -0700	[thread overview]
Message-ID: <ed30fd4330863c9743a019b6bd89aabd@codeaurora.org> (raw)
In-Reply-To: <20200704144714.GC3066@Mani-XPS-13-9360>

On 2020-07-04 07:47, Manivannan Sadhasivam wrote:
> On Mon, Jun 29, 2020 at 09:39:36AM -0700, Bhaumik Bhatt wrote:
>> Autonomous low power mode support requires the MHI host to resume from
>> multiple places and post a wakeup source to exit system suspend. This
>> needs to be done in a non-blocking manner. Introduce a helper API to
>> trigger the host resume for data transfers and other non-blocking use
>> cases while supporting implementation of autonomous low power modes.
>> 
> 
> Why can't you use pm_wakeup_event() as done in __mhi_device_get_sync()?
> 
> Thanks,
> Mani
> 

I forgot to address the __mhi_device_get_sync() function. Thanks for 
pointing out.

Is it preferable to always post wakeup source with hard boolean set?
We do want to wakeup from Suspend-to-Idle if system suspend happens to 
go that route.

As of now, we just by default do regular wakeup event and not hard.
I figured at some point we might need to distinguish between hard vs 
regular, hence the option but
it can be eliminated in favor of one or another.

Thanks,
Bhaumik

>> Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
>> ---
>>  drivers/bus/mhi/core/internal.h |  8 ++++++++
>>  drivers/bus/mhi/core/main.c     | 21 +++++++--------------
>>  drivers/bus/mhi/core/pm.c       |  6 ++----
>>  3 files changed, 17 insertions(+), 18 deletions(-)
>> 
>> diff --git a/drivers/bus/mhi/core/internal.h 
>> b/drivers/bus/mhi/core/internal.h
>> index bcfa7b6..cb32eaf 100644
>> --- a/drivers/bus/mhi/core/internal.h
>> +++ b/drivers/bus/mhi/core/internal.h
>> @@ -599,6 +599,14 @@ int mhi_queue_state_transition(struct 
>> mhi_controller *mhi_cntrl,
>>  int mhi_send_cmd(struct mhi_controller *mhi_cntrl, struct mhi_chan 
>> *mhi_chan,
>>  		 enum mhi_cmd_type cmd);
>> 
>> +static inline void mhi_trigger_resume(struct mhi_controller 
>> *mhi_cntrl,
>> +				      bool hard_wakeup)
>> +{
>> +	pm_wakeup_dev_event(&mhi_cntrl->mhi_dev->dev, 0, hard_wakeup);
>> +	mhi_cntrl->runtime_get(mhi_cntrl);
>> +	mhi_cntrl->runtime_put(mhi_cntrl);
>> +}
>> +
>>  /* Register access methods */
>>  void mhi_db_brstmode(struct mhi_controller *mhi_cntrl, struct db_cfg 
>> *db_cfg,
>>  		     void __iomem *db_addr, dma_addr_t db_val);
>> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
>> index 1f622ce..8d6ec34 100644
>> --- a/drivers/bus/mhi/core/main.c
>> +++ b/drivers/bus/mhi/core/main.c
>> @@ -909,8 +909,7 @@ void mhi_ctrl_ev_task(unsigned long data)
>>  		 * process it since we are probably in a suspended state,
>>  		 * so trigger a resume.
>>  		 */
>> -		mhi_cntrl->runtime_get(mhi_cntrl);
>> -		mhi_cntrl->runtime_put(mhi_cntrl);
>> +		mhi_trigger_resume(mhi_cntrl, false);
>> 
>>  		return;
>>  	}
>> @@ -971,10 +970,8 @@ int mhi_queue_skb(struct mhi_device *mhi_dev, 
>> enum dma_data_direction dir,
>>  	}
>> 
>>  	/* we're in M3 or transitioning to M3 */
>> -	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state)) {
>> -		mhi_cntrl->runtime_get(mhi_cntrl);
>> -		mhi_cntrl->runtime_put(mhi_cntrl);
>> -	}
>> +	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
>> +		mhi_trigger_resume(mhi_cntrl, false);
>> 
>>  	/* Toggle wake to exit out of M2 */
>>  	mhi_cntrl->wake_toggle(mhi_cntrl);
>> @@ -1032,10 +1029,8 @@ int mhi_queue_dma(struct mhi_device *mhi_dev, 
>> enum dma_data_direction dir,
>>  	}
>> 
>>  	/* we're in M3 or transitioning to M3 */
>> -	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state)) {
>> -		mhi_cntrl->runtime_get(mhi_cntrl);
>> -		mhi_cntrl->runtime_put(mhi_cntrl);
>> -	}
>> +	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
>> +		mhi_trigger_resume(mhi_cntrl, false);
>> 
>>  	/* Toggle wake to exit out of M2 */
>>  	mhi_cntrl->wake_toggle(mhi_cntrl);
>> @@ -1147,10 +1142,8 @@ int mhi_queue_buf(struct mhi_device *mhi_dev, 
>> enum dma_data_direction dir,
>>  	read_lock_irqsave(&mhi_cntrl->pm_lock, flags);
>> 
>>  	/* we're in M3 or transitioning to M3 */
>> -	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state)) {
>> -		mhi_cntrl->runtime_get(mhi_cntrl);
>> -		mhi_cntrl->runtime_put(mhi_cntrl);
>> -	}
>> +	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
>> +		mhi_trigger_resume(mhi_cntrl, false);
>> 
>>  	/* Toggle wake to exit out of M2 */
>>  	mhi_cntrl->wake_toggle(mhi_cntrl);
>> diff --git a/drivers/bus/mhi/core/pm.c b/drivers/bus/mhi/core/pm.c
>> index 661d704..5e3994e 100644
>> --- a/drivers/bus/mhi/core/pm.c
>> +++ b/drivers/bus/mhi/core/pm.c
>> @@ -1139,10 +1139,8 @@ void mhi_device_put(struct mhi_device *mhi_dev)
>> 
>>  	mhi_dev->dev_wake--;
>>  	read_lock_bh(&mhi_cntrl->pm_lock);
>> -	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state)) {
>> -		mhi_cntrl->runtime_get(mhi_cntrl);
>> -		mhi_cntrl->runtime_put(mhi_cntrl);
>> -	}
>> +	if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
>> +		mhi_trigger_resume(mhi_cntrl, false);
>> 
>>  	mhi_cntrl->wake_put(mhi_cntrl, false);
>>  	read_unlock_bh(&mhi_cntrl->pm_lock);
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
>> Forum,
>> a Linux Foundation Collaborative Project
>> 

  reply	other threads:[~2020-07-08 20:54 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-29 16:39 [PATCH v4 0/9] Introduce features and debugfs/sysfs entries for MHI Bhaumik Bhatt
2020-06-29 16:39 ` [PATCH v4 1/9] bus: mhi: core: Remove double occurrence for mhi_ctrl_ev_task() declaration Bhaumik Bhatt
2020-07-04 14:32   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 2/9] bus: mhi: core: Abort suspends due to outgoing pending packets Bhaumik Bhatt
2020-07-04 14:35   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 3/9] bus: mhi: core: Use helper API to trigger a non-blocking host resume Bhaumik Bhatt
2020-07-04 14:47   ` Manivannan Sadhasivam
2020-07-08 20:53     ` bbhatt [this message]
2020-07-16  6:08       ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 4/9] bus: mhi: core: Trigger a host resume when device vote is requested Bhaumik Bhatt
2020-07-04 14:56   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 5/9] bus: mhi: core: Use generic name field for an MHI device Bhaumik Bhatt
2020-07-04 15:08   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 6/9] bus: mhi: core: Introduce helper function to check device state Bhaumik Bhatt
2020-07-04 15:13   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 7/9] bus: mhi: core: Introduce debugfs entries and counters for MHI Bhaumik Bhatt
2020-07-04 15:41   ` Manivannan Sadhasivam
2020-07-09 19:33     ` bbhatt
2020-07-16  5:01       ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 8/9] bus: mhi: core: Read and save device hardware information from BHI Bhaumik Bhatt
2020-07-04 15:47   ` Manivannan Sadhasivam
2020-06-29 16:39 ` [PATCH v4 9/9] bus: mhi: core: Introduce sysfs entries for MHI Bhaumik Bhatt
2020-07-04 15:54   ` Manivannan Sadhasivam

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=ed30fd4330863c9743a019b6bd89aabd@codeaurora.org \
    --to=bbhatt@codeaurora.org \
    --cc=hemantk@codeaurora.org \
    --cc=jhugo@codeaurora.org \
    --cc=linux-arm-msm-owner@vger.kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=manivannan.sadhasivam@linaro.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.