All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krishna chaitanya chundru <quic_krichai@quicinc.com>
To: manivannan.sadhasivam@linaro.org
Cc: helgaas@kernel.org, linux-pci@vger.kernel.org,
	linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
	quic_vbadigan@quicinc.com, quic_nitegupt@quicinc.com,
	quic_skananth@quicinc.com, quic_ramkri@quicinc.com,
	krzysztof.kozlowski@linaro.org,
	Krishna chaitanya chundru <quic_krichai@quicinc.com>,
	Manivannan Sadhasivam <mani@kernel.org>,
	Jeffrey Hugo <quic_jhugo@quicinc.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Dan Carpenter <error27@gmail.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	mhi@lists.linux.dev (open list:MHI BUS)
Subject: [PATCH v4 9/9] bus: mhi: ep: wake up host if the MHI state is in M3
Date: Thu, 13 Jul 2023 12:40:18 +0530	[thread overview]
Message-ID: <1689232218-28265-10-git-send-email-quic_krichai@quicinc.com> (raw)
In-Reply-To: <1689232218-28265-1-git-send-email-quic_krichai@quicinc.com>

If the MHI state is in M3 then the most probably the host kept the
device in D3 hot or D3 cold, due to that endpoint transctions will not
be read by the host, so endpoint wakes up host to bring the host to D0
which eventually bring back the MHI state to M0.

Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
 drivers/bus/mhi/ep/main.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c
index 6008818..46a888e 100644
--- a/drivers/bus/mhi/ep/main.c
+++ b/drivers/bus/mhi/ep/main.c
@@ -25,6 +25,26 @@ static DEFINE_IDA(mhi_ep_cntrl_ida);
 static int mhi_ep_create_device(struct mhi_ep_cntrl *mhi_cntrl, u32 ch_id);
 static int mhi_ep_destroy_device(struct device *dev, void *data);
 
+static int mhi_ep_wake_host(struct mhi_ep_cntrl *mhi_cntrl)
+{
+	enum mhi_state state;
+	bool mhi_reset;
+	u32 count = 0;
+
+	mhi_cntrl->wakeup_host(mhi_cntrl);
+
+	/* Wait for Host to set the M0 state */
+	while (count++ < M0_WAIT_COUNT) {
+		msleep(M0_WAIT_DELAY_MS);
+
+		mhi_ep_mmio_get_mhi_state(mhi_cntrl, &state, &mhi_reset);
+		if (state == MHI_STATE_M0)
+			return 0;
+	}
+
+	return -ENODEV;
+}
+
 static int mhi_ep_send_event(struct mhi_ep_cntrl *mhi_cntrl, u32 ring_idx,
 			     struct mhi_ring_element *el, bool bei)
 {
@@ -464,6 +484,13 @@ int mhi_ep_queue_skb(struct mhi_ep_device *mhi_dev, struct sk_buff *skb)
 	buf_left = skb->len;
 	ring = &mhi_cntrl->mhi_chan[mhi_chan->chan].ring;
 
+	if (mhi_cntrl->mhi_state == MHI_STATE_M3) {
+		if (mhi_ep_wake_host(mhi_cntrl)) {
+			dev_err(dev, "Failed to wakeup host\n");
+			return -ENODEV;
+		}
+	}
+
 	mutex_lock(&mhi_chan->lock);
 
 	do {
-- 
2.7.4


  parent reply	other threads:[~2023-07-13  7:10 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-13  7:10 [PATCH v4 0/9] PCI: EPC: Add support to wake up host from D3 states Krishna chaitanya chundru
2023-07-13  7:10 ` [PATCH v4 1/9] PCI: endpoint: Add D-state change notifier support Krishna chaitanya chundru
2023-07-28  3:01   ` Manivannan Sadhasivam
2023-07-13  7:10 ` [PATCH v4 2/9] PCI: qcom-ep: Add support for D-state change notification Krishna chaitanya chundru
2023-07-28  3:57   ` Manivannan Sadhasivam
2023-07-13  7:10 ` [PATCH v4 3/9] PCI: epf-mhi: Add support for handling D-state notify from EPC Krishna chaitanya chundru
2023-07-28  4:09   ` Manivannan Sadhasivam
2023-07-31  5:35     ` Krishna Chaitanya Chundru
2023-08-01  5:01       ` Krishna Chaitanya Chundru
2023-08-01 17:21         ` Manivannan Sadhasivam
2023-07-13  7:10 ` [PATCH v4 4/9] PCI: qcom-ep: Update the D-state log Krishna chaitanya chundru
2023-07-28  4:15   ` Manivannan Sadhasivam
2023-07-13  7:10 ` [PATCH v4 5/9] PCI: endpoint: Add wakeup host API to EPC core Krishna chaitanya chundru
2023-07-28  4:21   ` Manivannan Sadhasivam
2023-07-31  5:36     ` Krishna Chaitanya Chundru
2023-07-13  7:10 ` [PATCH v4 6/9] PCI: dwc: Add wakeup host op to pci_epc_ops Krishna chaitanya chundru
2023-07-13  7:10 ` [PATCH v4 7/9] PCI: qcom-ep: Add wake up host op to dw_pcie_ep_ops Krishna chaitanya chundru
2023-07-13  7:10 ` [PATCH v4 8/9] PCI: epf-mhi: Add wakeup host op Krishna chaitanya chundru
2023-07-13  7:10 ` Krishna chaitanya chundru [this message]
2023-07-28  4:34   ` [PATCH v4 9/9] bus: mhi: ep: wake up host if the MHI state is in M3 Manivannan Sadhasivam
2023-07-28  5:50     ` Dan Carpenter
2023-07-28 15:35       ` Manivannan Sadhasivam
2023-07-31  5:37         ` Krishna Chaitanya Chundru
2023-07-28  5:51   ` Dan Carpenter
2023-07-31  5:37     ` Krishna Chaitanya Chundru
2023-07-28  4:37 ` [PATCH v4 0/9] PCI: EPC: Add support to wake up host from D3 states Manivannan Sadhasivam
2023-07-31  5:39   ` Krishna Chaitanya Chundru

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=1689232218-28265-10-git-send-email-quic_krichai@quicinc.com \
    --to=quic_krichai@quicinc.com \
    --cc=error27@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=helgaas@kernel.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mani@kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=mhi@lists.linux.dev \
    --cc=quic_jhugo@quicinc.com \
    --cc=quic_nitegupt@quicinc.com \
    --cc=quic_ramkri@quicinc.com \
    --cc=quic_skananth@quicinc.com \
    --cc=quic_vbadigan@quicinc.com \
    --cc=rafael@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.