Received: by 2002:a05:7208:9594:b0:7e:5202:c8b4 with SMTP id gs20csp2296844rbb; Tue, 27 Feb 2024 18:23:16 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCU6klAmfW7UlVlbWLGV0OP3UnhhyBprbjXEeO/wPYrUCsmY7urUftpmASaSRIUepY5p0qj+btXxt4ZjA2IkYJ9Zyw4o78CiuJF1LrGqSw== X-Google-Smtp-Source: AGHT+IHgwmoqPZbv0Nxdy5gVKQm1tpxjUhjcDCTY7X2DOIIj/spZ4Hh4N+HxJaEW/95+9YxQKG6Q X-Received: by 2002:a05:6871:781a:b0:21e:a957:efef with SMTP id oy26-20020a056871781a00b0021ea957efefmr15918894oac.19.1709086996006; Tue, 27 Feb 2024 18:23:16 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709086995; cv=pass; d=google.com; s=arc-20160816; b=jdvkyHSr+lnGei8NZ5zVtUS2D7oajK5HiZLRHzr7GTk2btBEzoZUjbceu5e9NGOI/y ZChAybvrBkfnyWaI6Dd7DeQOtWGeOqiKCtIjj0IjWYHlbVg24zHtXytEZz+kA4wRP2+t 1tQ29Wdg8pfaFFoW2IYiQJpbDdYctdj+ayun9+tH8OXwdwGZw50dp/Dtdm2INYkQjwpL NGlAmV2hUD0Ta/QlfsBrri5ClpK8LkAuFApSReLpv5mWe1lgsIfri6Ex1rsWVgbMeUA7 HfDKfi/8e5dkDQPp9wPFd+kPL/CFYV3EkQX0clC5bTFqZqGAhB5MwXYGkp47QYB5fwgd 8Ttg== 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:message-id:date:subject:cc:to :from:dkim-signature; bh=EUQhPB5HOs9D3HY3g5HLAgCcZ0EnNg/W5/kCd9f7bEs=; fh=HUZY1mAwsL2RV4ebiSFRpiMBK5XT8gtCNRH/y4zO0W8=; b=yh7CqqYHRpSBw53fsjtPfUl6YKkxDfAuPisSK1yFjPKg83HyIX3sd53LKonAdFrvwE aV3hVnowndhNu1X/CmOMRldVrStHvitW5mPh8T2mZsPyFshETthItd1PTTj4W+ceGUce JDJAsV8yZ7YbbEFczv+SpMUJSXuCQT3Gppr0oF3zoKqPRhGUJC6LNHOoSpNOD8alPkBo 2EPbJYCWzfl8BKhkX7epm8+In6pfN/4GDO5sJ5cy6h6nqgrBgTzbxnpAzlsDBGaxvH3C rWl9gxGYxTLB6eu8sgHxVGJZFxNZYX41KTZjdH4urdwcahpWmWOFKP/OO1rWaP+7vTWB XYTA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=KHhGJh5f; 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-4128-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4128-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id 9-20020a630009000000b005dc98dad591si6505330pga.707.2024.02.27.18.23.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 18:23:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless+bounces-4128-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=KHhGJh5f; 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-4128-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-wireless+bounces-4128-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 4ADEB283A19 for ; Wed, 28 Feb 2024 02:23:15 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 992BD134AA; Wed, 28 Feb 2024 02:23:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="KHhGJh5f" X-Original-To: linux-wireless@vger.kernel.org Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 010C76AC2; Wed, 28 Feb 2024 02:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709086992; cv=none; b=ZpouWEPUNU+5lqUWbogdblJ/Qqa90tXUKzgZEpbCBUDj7QV3blWFjsT76FPW7iAlxzMANBndZa00lKWxiCp03JqUCE/EUxvp8lq5fw8u7rG03n9KMV3lEb1O2yW3bt8tqVLRcMUk/ASYC8R25dWiuB4Tf1z2Xl0EXDzl9x7rAvg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709086992; c=relaxed/simple; bh=1C7+PWFE2/r+R+YKasT96c105mnpr+/S57WiEyPr0uA=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=WocXweIXnHL1YBdtuC1a607KKxvs9DY+4RzLOBIeTCPpAFq6zIWP9yRJsTF8vwQtBXbfLAPYPJM+TI2yFz3xHVHnUwORwDlzXg49IpVarIfDBJJseDUs8nEb0kTlqZaVNNxdw8AzuUpmr4uTJg24do8J4nhJD55n+ZgnmMMHeXw= 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=KHhGJh5f; arc=none smtp.client-ip=205.220.180.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 (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41S1uDXu026373; Wed, 28 Feb 2024 02:22:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding:content-type; s=qcppdkim1; bh=EUQhPB5 HOs9D3HY3g5HLAgCcZ0EnNg/W5/kCd9f7bEs=; b=KHhGJh5fvQ9o3oChv/xSOHy nCdz2Tq8lJ7ktG0nTI/wbmsX5/2RshJsEeJWu6JKkAfOYrWj3Dc+A5DM0LnSviYH SCn1uK8OZ5xQJJEZwksTay/8qRjYmoi0fDA/7F/umTcQG2wBxYDWGovtGWE6g9qy FT2ZdBp1+oX1kNAZclzsEPXZDzB2B7O4Aw8GCtgxiKPp6x+AeXy5o0V1yZtPbyjM 2G6kWFSRvlajwzsk0LlzVz//829Ea9wuKAd4PDPaDBZVBUHyMxiNfY7KqoijMg+/ dn5dPT+qvOoB9U2hrR/9wvehyI0nduZl2WIgdZ817Vr/608UTpn6AlTY4z1HD5w= = Received: from nalasppmta01.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3whuksr1fb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Feb 2024 02:22:57 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 41S2MtlN023659 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 28 Feb 2024 02:22:55 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; Tue, 27 Feb 2024 18:22:52 -0800 From: Baochen Qiang To: , CC: , , , , , , , , Subject: [PATCH v4 0/3] wifi: ath11k: hibernation support Date: Wed, 28 Feb 2024 10:22:40 +0800 Message-ID: <20240228022243.17762-1-quic_bqiang@quicinc.com> X-Mailer: git-send-email 2.25.1 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: nasanex01b.na.qualcomm.com (10.46.141.250) 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: HswP0XT9w-qTYJPL_DikFVPxqjOw3M1B X-Proofpoint-ORIG-GUID: HswP0XT9w-qTYJPL_DikFVPxqjOw3M1B 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-02-28_01,2024-02-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 impostorscore=0 mlxlogscore=980 clxscore=1011 malwarescore=0 phishscore=0 adultscore=0 priorityscore=1501 spamscore=0 bulkscore=0 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2402120000 definitions=main-2402280017 Currently in ath11k we keep the firmware running on the WLAN device when the network interface (wlan0) is down. The problem is that this will break hibernation, obviously the firmware can't be running after the whole system is powered off. To power down the ath11k firmware for suspend/hibernation some changes both in MHI subsystem and ath11k are needed. This patchset fixes a longstanding bug report about broken hibernation support: https://bugzilla.kernel.org/show_bug.cgi?id=214649 There already is an RFC version which has been tested by multiple users with positive results: https://patchwork.kernel.org/project/linux-wireless/cover/20231127162022.518834-1-kvalo@kernel.org/ Basically the RFC version adds two APIs to MHI stack: with the first one ath11k is able to keep MHI devices when going to suspend/hibernation, getting us rid of the probe deferral issue when resume back. while with the second one ath11k could manually prepare/unprepare MHI channels by itself, which is needed because QRTR doesn't probe those channels automatically in this case. Mani, the MHI maintainer, firstly doesn't like that version and insists that an MHI device should be destroyed when suspend/hibernation, according to his understanding on device driver model. See https://lore.kernel.org/mhi/20231127162022.518834-1-kvalo@kernel.org/ After a long discussion Mani thought we might need a new PM callback with which ath11k is able to wait until kernel unblocks device probe and thus MHI channels get probed. So we came to the kernel PM list and there Mani realized that his understanding is not correct so he finally agrees to keep MHI device during suspend/hibernation. See https://lore.kernel.org/all/21cd2098-97e1-4947-a5bb-a97582902ead@quicinc.com/ Mani also pointed out that an MHI controller driver (ath11k here) should not touch MHI channels directly because those channels are managed by the corresponding MHI client driver (QRTR here). To address this, we come up with this version. Compared with that RFC version, this version adds PM callbacks in QRTR module: suspend callback unprepares MHI channels during suspend and resume callback prepares those channels during resume. In this way ath11k doesn't need to do unprepare/prepare work by itself so those two APIs added in RFC version are removed now. The power down/up procedure requires a specific sequence in which PM callbacks of wiphy, ath11k and QRTR are called, this is achieved by exploiting the child-father relationship between their device struct, and also the PM framework which separates whole suspend/resume process into several stages. Details in patch [3/3]. v4: - resend v3 as v4 to CC netdev folks. No changes in patches themselves. v3: - skip QRTR suspend/resume if MHI device is found to be in suspend state. v2: - add comment on why destroying the device is optional in mhi_pm_disable_transition(). - rename mhi_power_down_no_destroy() as mhi_power_down_keep_dev(). - refine API description of mhi_power_down() and mhi_power_down_keep_dev(). - add/remove __maybe_unused to QRTR PM callbacks. - remove '#ifdef CONFIG_PM'. - refine commit log of patch 1/3 and 2/3. Baochen Qiang (3): bus: mhi: host: add mhi_power_down_keep_dev() net: qrtr: support suspend/hibernation wifi: ath11k: support hibernation drivers/bus/mhi/host/internal.h | 4 +- drivers/bus/mhi/host/pm.c | 42 ++++++++-- drivers/net/wireless/ath/ath11k/ahb.c | 6 +- drivers/net/wireless/ath/ath11k/core.c | 105 +++++++++++++++++-------- drivers/net/wireless/ath/ath11k/core.h | 6 +- drivers/net/wireless/ath/ath11k/hif.h | 14 +++- drivers/net/wireless/ath/ath11k/mhi.c | 12 ++- drivers/net/wireless/ath/ath11k/mhi.h | 5 +- drivers/net/wireless/ath/ath11k/pci.c | 44 +++++++++-- drivers/net/wireless/ath/ath11k/qmi.c | 2 +- include/linux/mhi.h | 18 ++++- net/qrtr/mhi.c | 46 +++++++++++ 12 files changed, 244 insertions(+), 60 deletions(-) base-commit: c39a5cfa0448f3afbee78373f16d87815a674f11 -- 2.25.1