Received: by 2002:ab2:3141:0:b0:1ed:23cc:44d1 with SMTP id i1csp1586425lqg; Sun, 3 Mar 2024 18:16:52 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVdw4kDObNyEfMz6kEN1UCJQ3Urxlpo7kPaCnIRZgVqrauiKvjAS4rzL15xr/+GArDj+lMQuUb+Vj1wqZuoqYDXuMXdexOI6sT7+AriJw== X-Google-Smtp-Source: AGHT+IEU+z9Z/ezAVH9CjmbWD/8iGMth0eIyES39WmDqNwYCdlM+lwPJWcEiVU8bBID2y3icf3Xi X-Received: by 2002:a05:6a00:1707:b0:6e5:9698:84a8 with SMTP id h7-20020a056a00170700b006e5969884a8mr7741855pfc.27.1709518611739; Sun, 03 Mar 2024 18:16:51 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709518611; cv=pass; d=google.com; s=arc-20160816; b=q8m7bV05foVfl9niutDUcSktYHew9nap9mNNxTmbvggBihjxXAGuUdozm8ehvfK7Bv klvEWAJ0d0g0ZX76FYNtHNjYTUJAG/3777eydGeqV5vwlDdEzGvp7NS28lP3IUjWTsj/ 1Peq8P0tWQ1dw0Alp8TI5urYLwJT2DLUtxerdl/9L5n8PFnCjlmcEHTEZ14bJWyycwag cpkm9iKBUFO5qJZuQxSo7yy/0l0dnnnxg9TEWAYpkNtixXEubtiBRxCnamDR8+JeKYo7 Wk6x3Eoa7khixisRu5o23/6q7lFyVApDATXA34s8TKbrZ0GE/asTt2bHv36F/vRvtP0l Qvaw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=T3vSBlEzkaGHFGN34YgOwaijg7xlCZ270ALmHFqkhwQ=; fh=HUZY1mAwsL2RV4ebiSFRpiMBK5XT8gtCNRH/y4zO0W8=; b=m4IVdzqhGDZ9W1pykwhvPXauyd8MAgYM9FiwcI45VufWdg+nyJ7c/v5ymP+81ksdod 4wI/KRWCqf6rz/G6cqrVwxocuDulfW/VMNqOQEnXbWM/s5X4JSsMOMjaLlogo07aXJ5t hAIEDEGHu0Vy/hYueOpe2Vw4MfmCg2MklmzZEasZsN1nTUiWR7luzVbLYubUaVndNm+P yAPx88T6wDj709qedbFOoMclfQY0+gYcTiajTkc4RgCo7226MQyW77VdqVz5Lr4aYM3E MaAFxjkat+4RR5lDbMrWvpI2L3lIpRHxCl7ldRKT/wyQQr2KgCwOxjDHXe4PPEqPVXrh g2lw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=g+XtzxXs; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-wireless+bounces-4326-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4326-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id u11-20020a655c0b000000b005cf8b79f90csi7328230pgr.501.2024.03.03.18.16.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Mar 2024 18:16:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless+bounces-4326-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=g+XtzxXs; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-wireless+bounces-4326-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4326-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 6D615B20C00 for ; Mon, 4 Mar 2024 02:16:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D263117C8; Mon, 4 Mar 2024 02:16:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="g+XtzxXs" X-Original-To: linux-wireless@vger.kernel.org Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C89615A4; Mon, 4 Mar 2024 02:16:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709518591; cv=none; b=Gg2D2+b4pr/+aJiSu7LxMmLJurv6vjvnfVbztdCBrxKjYCwSXrYH7qgcCtAWaX74bKeziZ+4nGE+E67LJH2QMJH6eYXD/KOzkkDqjis0OrhLqACIsYnpX84CbKenpKv9rUljho+n/0bIkh3g7AbnRhe9FlmjL6dfMF9VPoLeCNE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709518591; c=relaxed/simple; bh=Zs0enebDVUoLgccbVVbSO5ka5/eX9KcPfYfpiafBA9g=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=imXi3J3jsSphsMgQYm9G0ZjaeNY4AKwInm3cz1Vg3REdRrl8JDirX5UrO5exZuohFur/4gVZmPIxObVywrYOvptZ02Mv93pOg4eeG7PmsTi2/ajoICJfUPhMozhIDRE8FbOchPuiTECxc033LTJYU3BB6+6HweZZJeVi+LmqugE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=g+XtzxXs; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 4242AiX1011320; Mon, 4 Mar 2024 02:16:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= qcppdkim1; bh=T3vSBlEzkaGHFGN34YgOwaijg7xlCZ270ALmHFqkhwQ=; b=g+ XtzxXse9x/0DjUuoSHAC0PLiMHm+7z27fguW1BAsWmmKClqlm4Lstqp9m9rs6PWs GC2SZ+kOgpJeCzsZBB4sm1ENOP2j0XUIT5vNYcPSM8bs0woZdsk8P/y/FpsxwAcS psMnf7GSNgHnHBpz5hIvABq3m8JI1hH5sZryLk6paonsC80vKdjU8GGeos/wH4cv kDKVitGjt/kcNZtVa5xeNbR4dXOre1NlioVd2eFZtataZt45+Ki7Gvk3A5X3DcZH WR0KEhYPQnbNMdu68H4ccorVsp9t2mo5E8kcrLxiP1jKHYkDd6szVY9a+SCEsxYu uAUOBEYMF0e3M9cOcMLA== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3wkstk2kcg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 04 Mar 2024 02:16:17 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 4242GHVp007333 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 4 Mar 2024 02:16:17 GMT Received: from bqiang-SFF.qca.qualcomm.com (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Sun, 3 Mar 2024 18:16:14 -0800 From: Baochen Qiang To: , CC: , , , , , , , , Subject: [PATCH v5 2/3] net: qrtr: support suspend/hibernation Date: Mon, 4 Mar 2024 10:15:53 +0800 Message-ID: <20240304021554.77782-3-quic_bqiang@quicinc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240304021554.77782-1-quic_bqiang@quicinc.com> References: <20240304021554.77782-1-quic_bqiang@quicinc.com> Precedence: bulk X-Mailing-List: linux-wireless@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: 5U8wzw4LXnIByksUqnJudWwj1afTTa7I X-Proofpoint-ORIG-GUID: 5U8wzw4LXnIByksUqnJudWwj1afTTa7I X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-03-04_01,2024-03-01_03,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=981 spamscore=0 suspectscore=0 impostorscore=0 adultscore=0 malwarescore=0 clxscore=1015 mlxscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2403040015 MHI devices may not be destroyed during suspend/hibernation, so need to unprepare/prepare MHI channels throughout the transition, this is done by adding suspend/resume callbacks. The suspend callback is called in the late suspend stage, this means MHI channels are still alive at suspend stage, and that makes it possible for an MHI controller driver to communicate with others over those channels at suspend stage. While the resume callback is called in the early resume stage, for a similar reason. Also note that we won't do unprepare/prepare when MHI device is in suspend state because it's pointless if MHI is only meant to go through a suspend/resume transition, instead of a complete power cycle. Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30 Signed-off-by: Baochen Qiang --- net/qrtr/mhi.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/net/qrtr/mhi.c b/net/qrtr/mhi.c index 9ced13c0627a..69f53625a049 100644 --- a/net/qrtr/mhi.c +++ b/net/qrtr/mhi.c @@ -118,6 +118,51 @@ static const struct mhi_device_id qcom_mhi_qrtr_id_table[] = { }; MODULE_DEVICE_TABLE(mhi, qcom_mhi_qrtr_id_table); +static int __maybe_unused qcom_mhi_qrtr_pm_suspend_late(struct device *dev) +{ + struct mhi_device *mhi_dev = container_of(dev, struct mhi_device, dev); + enum mhi_state state; + + state = mhi_get_mhi_state(mhi_dev->mhi_cntrl); + /* + * If the device is in suspend state, then no need for the + * client driver to unprepare the channels. + */ + if (state == MHI_STATE_M3) + return 0; + + mhi_unprepare_from_transfer(mhi_dev); + + return 0; +} + +static int __maybe_unused qcom_mhi_qrtr_pm_resume_early(struct device *dev) +{ + struct mhi_device *mhi_dev = container_of(dev, struct mhi_device, dev); + enum mhi_state state; + int rc; + + state = mhi_get_mhi_state(mhi_dev->mhi_cntrl); + /* + * If the device is in suspend state, we won't unprepare channels + * in suspend callback, therefore no need to prepare channels when + * resume. + */ + if (state == MHI_STATE_M3) + return 0; + + rc = mhi_prepare_for_transfer_autoqueue(mhi_dev); + if (rc) + dev_err(dev, "failed to prepare for autoqueue transfer %d\n", rc); + + return rc; +} + +static const struct dev_pm_ops qcom_mhi_qrtr_pm_ops = { + SET_LATE_SYSTEM_SLEEP_PM_OPS(qcom_mhi_qrtr_pm_suspend_late, + qcom_mhi_qrtr_pm_resume_early) +}; + static struct mhi_driver qcom_mhi_qrtr_driver = { .probe = qcom_mhi_qrtr_probe, .remove = qcom_mhi_qrtr_remove, @@ -126,6 +171,7 @@ static struct mhi_driver qcom_mhi_qrtr_driver = { .id_table = qcom_mhi_qrtr_id_table, .driver = { .name = "qcom_mhi_qrtr", + .pm = &qcom_mhi_qrtr_pm_ops, }, }; -- 2.25.1