From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
To: Bhaumik Bhatt <bbhatt@codeaurora.org>
Cc: linux-arm-msm@vger.kernel.org, hemantk@codeaurora.org,
jhugo@codeaurora.org, linux-kernel@vger.kernel.org,
loic.poulain@linaro.org, carl.yin@quectel.com,
naveen.kumar@quectel.com
Subject: Re: [PATCH v6 1/4] bus: mhi: core: Destroy SBL devices when moving to mission mode
Date: Wed, 10 Mar 2021 19:33:51 +0530 [thread overview]
Message-ID: <20210310140351.GP30275@thinkpad> (raw)
In-Reply-To: <1614208985-20851-2-git-send-email-bbhatt@codeaurora.org>
On Wed, Feb 24, 2021 at 03:23:02PM -0800, Bhaumik Bhatt wrote:
> Currently, client devices are created in SBL or AMSS (mission
> mode) and only destroyed after power down or SYS ERROR. When
> moving between certain execution environments, such as from SBL
> to AMSS, no clean-up is required. This presents an issue where
> SBL-specific channels are left open and client drivers now run in
> an execution environment where they cannot operate. Fix this by
> expanding the mhi_destroy_device() to do an execution environment
> specific clean-up if one is requested. Close the gap and destroy
> devices in such scenarios that allow SBL client drivers to clean
> up once device enters mission mode.
>
> Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Thanks,
Mani
> ---
> drivers/bus/mhi/core/main.c | 29 +++++++++++++++++++++++++----
> drivers/bus/mhi/core/pm.c | 3 +++
> 2 files changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
> index 4e0131b..7a2e98c 100644
> --- a/drivers/bus/mhi/core/main.c
> +++ b/drivers/bus/mhi/core/main.c
> @@ -244,8 +244,10 @@ static void mhi_del_ring_element(struct mhi_controller *mhi_cntrl,
>
> int mhi_destroy_device(struct device *dev, void *data)
> {
> + struct mhi_chan *ul_chan, *dl_chan;
> struct mhi_device *mhi_dev;
> struct mhi_controller *mhi_cntrl;
> + enum mhi_ee_type ee = MHI_EE_MAX;
>
> if (dev->bus != &mhi_bus_type)
> return 0;
> @@ -257,6 +259,17 @@ int mhi_destroy_device(struct device *dev, void *data)
> if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER)
> return 0;
>
> + ul_chan = mhi_dev->ul_chan;
> + dl_chan = mhi_dev->dl_chan;
> +
> + /*
> + * If execution environment is specified, remove only those devices that
> + * started in them based on ee_mask for the channels as we move on to a
> + * different execution environment
> + */
> + if (data)
> + ee = *(enum mhi_ee_type *)data;
> +
> /*
> * For the suspend and resume case, this function will get called
> * without mhi_unregister_controller(). Hence, we need to drop the
> @@ -264,11 +277,19 @@ int mhi_destroy_device(struct device *dev, void *data)
> * be sure that there will be no instances of mhi_dev left after
> * this.
> */
> - if (mhi_dev->ul_chan)
> - put_device(&mhi_dev->ul_chan->mhi_dev->dev);
> + if (ul_chan) {
> + if (ee != MHI_EE_MAX && !(ul_chan->ee_mask & BIT(ee)))
> + return 0;
>
> - if (mhi_dev->dl_chan)
> - put_device(&mhi_dev->dl_chan->mhi_dev->dev);
> + put_device(&ul_chan->mhi_dev->dev);
> + }
> +
> + if (dl_chan) {
> + if (ee != MHI_EE_MAX && !(dl_chan->ee_mask & BIT(ee)))
> + return 0;
> +
> + put_device(&dl_chan->mhi_dev->dev);
> + }
>
> dev_dbg(&mhi_cntrl->mhi_dev->dev, "destroy device for chan:%s\n",
> mhi_dev->name);
> diff --git a/drivers/bus/mhi/core/pm.c b/drivers/bus/mhi/core/pm.c
> index 681960c..3bd81d0 100644
> --- a/drivers/bus/mhi/core/pm.c
> +++ b/drivers/bus/mhi/core/pm.c
> @@ -377,6 +377,7 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl)
> {
> struct mhi_event *mhi_event;
> struct device *dev = &mhi_cntrl->mhi_dev->dev;
> + enum mhi_ee_type current_ee = mhi_cntrl->ee;
> int i, ret;
>
> dev_dbg(dev, "Processing Mission Mode transition\n");
> @@ -395,6 +396,8 @@ static int mhi_pm_mission_mode_transition(struct mhi_controller *mhi_cntrl)
>
> wake_up_all(&mhi_cntrl->state_event);
>
> + device_for_each_child(&mhi_cntrl->mhi_dev->dev, ¤t_ee,
> + mhi_destroy_device);
> mhi_cntrl->status_cb(mhi_cntrl, MHI_CB_EE_MISSION_MODE);
>
> /* Force MHI to be in M0 state before continuing */
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
next prev parent reply other threads:[~2021-03-10 14:04 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-24 23:23 [PATCH v6 0/4] Serialize execution environment changes for MHI Bhaumik Bhatt
2021-02-24 23:23 ` [PATCH v6 1/4] bus: mhi: core: Destroy SBL devices when moving to mission mode Bhaumik Bhatt
2021-02-26 22:06 ` Hemant Kumar
2021-03-04 8:41 ` Loic Poulain
2021-03-10 14:03 ` Manivannan Sadhasivam [this message]
2021-02-24 23:23 ` [PATCH v6 2/4] bus: mhi: core: Download AMSS image from appropriate function Bhaumik Bhatt
2021-03-04 8:42 ` Loic Poulain
2021-02-24 23:23 ` [PATCH v6 3/4] bus: mhi: core: Process execution environment changes serially Bhaumik Bhatt
2021-03-04 8:43 ` Loic Poulain
2021-03-10 14:04 ` Manivannan Sadhasivam
2021-08-23 18:43 ` Jeffrey Hugo
2021-08-23 19:19 ` Bhaumik Bhatt
2021-08-23 19:38 ` Jeffrey Hugo
2021-08-26 18:04 ` Bhaumik Bhatt
2021-02-24 23:23 ` [PATCH v6 4/4] bus: mhi: core: Update debug prints to include local device state Bhaumik Bhatt
2021-03-04 8:45 ` Loic Poulain
2021-03-10 14:07 ` [PATCH v6 0/4] Serialize execution environment changes for MHI Manivannan Sadhasivam
2021-05-26 19:03 ` patchwork-bot+linux-arm-msm
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=20210310140351.GP30275@thinkpad \
--to=manivannan.sadhasivam@linaro.org \
--cc=bbhatt@codeaurora.org \
--cc=carl.yin@quectel.com \
--cc=hemantk@codeaurora.org \
--cc=jhugo@codeaurora.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=loic.poulain@linaro.org \
--cc=naveen.kumar@quectel.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.