Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp105714pxb; Tue, 17 Nov 2020 22:38:09 -0800 (PST) X-Google-Smtp-Source: ABdhPJwu+YS9oRfUl0EVGhjkTmP39r+F3H9YArvUFjHUuVIEfsiq09fcnFJElA34GHmg0BT4knxO X-Received: by 2002:a17:906:60c4:: with SMTP id f4mr22814030ejk.336.1605681488816; Tue, 17 Nov 2020 22:38:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605681488; cv=none; d=google.com; s=arc-20160816; b=vaBy81zNo8IxZid2UdLBhOTZ2rWXv/6/kL/QJ+bqoHVepnGvrH7Jg+nzhZmfzWPDPc +R5rXTMrAfa8ATPOZHXUMsRgzG0bOXgLYS42WzlveYGQBqujBGNwGKEmABJobsaDK6zo kH0pzzzo22sSWk58mKz5S3ScCnni1D+fDHFRi038h+YnZhsqt8jaKXNertJoXsKfUl5R /QVbQ896T0tI2EqDwkdlLLIodXvUpnmXhhwpGFlVMM0pj3Dp89VRIlm7f+EQIOPI53Bz TDDl779/7sSVQ0H20dO3qXIOhcJS+5QdLHiw7aqKHOEm2FoCpBSn5eeow4ZkE9lx6s69 WYQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=wHBJq+dqXrVt6eCMh2L1Pa1D0baehkxU9Lit57Xif6E=; b=E1A1/AoM+vwCF6kgCLbs9lyVpHGTyspfB0DrrFmXKcu41XcJ2z2mubsLCVtQPBjdgw GR+W9qFqCJFZcGlYO1uSG+8W8C/VUB46jE9Leipa7W4iJ6mJVmg+ZBA4SwUPv0yyjx9L hP2VQJal3AMlU86f5TkaKkvZ3z9H9hd0gukujUWycRRQBCVP/Ws7EzdLFwxLxgn/y7eW /G+aVgRUaDnCW4B03KLf7cFyE+W203yg75CdBqBI3lZ2CNAUXSiItEyiFFWrx7CAlO6b DO4iRUYfFyf4h/Tf/rbPnkKGFthPH7sc0f1Uo2uOVWoAl5esnIICpar511dhWamGqEpo EhNA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h7si9367658edz.566.2020.11.17.22.37.45; Tue, 17 Nov 2020 22:38:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726460AbgKRGeN (ORCPT + 99 others); Wed, 18 Nov 2020 01:34:13 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:50528 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725794AbgKRGeN (ORCPT ); Wed, 18 Nov 2020 01:34:13 -0500 X-UUID: 92d89cdc1c634cf28d265d8639f7634b-20201118 X-UUID: 92d89cdc1c634cf28d265d8639f7634b-20201118 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 462278039; Wed, 18 Nov 2020 14:34:09 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 18 Nov 2020 14:34:07 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 18 Nov 2020 14:34:07 +0800 From: Wenbin Mei To: Ulf Hansson CC: Chaotian Jing , Matthias Brugger , , , , , , Wenbin Mei Subject: [PATCH] mmc: mediatek: Add system suspend/resume interface Date: Wed, 18 Nov 2020 14:34:05 +0800 Message-ID: <20201118063405.24906-1-wenbin.mei@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Before we got these errors on MT8192 platform: [ 59.153891] Restarting tasks ... [ 59.154540] done. [ 59.159175] PM: suspend exit [ 59.218724] mtk-msdc 11f60000.mmc: phase: [map:fffffffe] [maxlen:31] [final:16] [ 119.776083] mmc0: cqhci: timeout for tag 9 [ 119.780196] mmc0: cqhci: ============ CQHCI REGISTER DUMP =========== [ 119.786709] mmc0: cqhci: Caps: 0x100020b6 | Version: 0x00000510 [ 119.793225] mmc0: cqhci: Config: 0x00000101 | Control: 0x00000000 [ 119.799706] mmc0: cqhci: Int stat: 0x00000000 | Int enab: 0x00000000 [ 119.806177] mmc0: cqhci: Int sig: 0x00000000 | Int Coal: 0x00000000 [ 119.812670] mmc0: cqhci: TDL base: 0x00000000 | TDL up32: 0x00000000 [ 119.819149] mmc0: cqhci: Doorbell: 0x003ffc00 | TCN: 0x00000200 [ 119.825656] mmc0: cqhci: Dev queue: 0x00000000 | Dev Pend: 0x00000000 [ 119.832155] mmc0: cqhci: Task clr: 0x00000000 | SSC1: 0x00001000 [ 119.838627] mmc0: cqhci: SSC2: 0x00000000 | DCMD rsp: 0x00000000 [ 119.845174] mmc0: cqhci: RED mask: 0xfdf9a080 | TERRI: 0x0000891c [ 119.851654] mmc0: cqhci: Resp idx: 0x00000000 | Resp arg: 0x00000000 [ 119.865773] mmc0: cqhci: : =========================================== [ 119.872358] mmc0: running CQE recovery From these logs, we found TDL base was back to the default value. After suspend, the mmc host is powered off by HW, and bring CQE register to the default value, so we add system suspend/resume interface, then bring CQE to deactivated state before suspend, it will be enabled by CQE first request after resume. Signed-off-by: Wenbin Mei --- drivers/mmc/host/mtk-sd.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c index fc5ee5df91ad..c5f9cd6fc951 100644 --- a/drivers/mmc/host/mtk-sd.c +++ b/drivers/mmc/host/mtk-sd.c @@ -2758,11 +2758,29 @@ static int msdc_runtime_resume(struct device *dev) msdc_restore_reg(host); return 0; } + +static int msdc_sys_suspend(struct device *dev) +{ + struct mmc_host *mmc = dev_get_drvdata(dev); + int ret; + + if (mmc->caps2 & MMC_CAP2_CQE) { + ret = cqhci_suspend(mmc); + if (ret) + return ret; + } + + return pm_runtime_force_suspend(dev); +} + +static int msdc_sys_resume(struct device *dev) +{ + return pm_runtime_force_resume(dev); +} #endif static const struct dev_pm_ops msdc_dev_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, - pm_runtime_force_resume) + SET_SYSTEM_SLEEP_PM_OPS(msdc_sys_suspend, msdc_sys_resume) SET_RUNTIME_PM_OPS(msdc_runtime_suspend, msdc_runtime_resume, NULL) }; -- 2.18.0