From patchwork Mon Jul 12 06:01:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kroah-Hartman X-Patchwork-Id: 473002 Delivered-To: patch@linaro.org Received: by 2002:a02:c94a:0:0:0:0:0 with SMTP id u10csp2689992jao; Mon, 12 Jul 2021 00:34:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwLuPMIyGGaYtAI7ZgOLWmUyCAj1kaNKd64z1EX75nNEB/Ny0rqSuF47TORBshVTAwPIzy5 X-Received: by 2002:aa7:ccc1:: with SMTP id y1mr63228689edt.321.1626075262263; Mon, 12 Jul 2021 00:34:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626075262; cv=none; d=google.com; s=arc-20160816; b=MaH7S7VStU/wq6jEkzegzfrl8vLZHreJZmFvvl1PWKG/5Lc40Nw530LKsApjXRf+ms R0RJ/EhySwJBUzw0+dSfDPoLq0wWF5NTpUQDRrDHSkrdwu/Fja9GnRdKkRyLSjCHhobA QyD5k4sLIWE2HuHLI1c3L8Qgu7OpXsoUP0oOrdo/nVQt5Sg28YPS66CnNDc069W9s1iO OKH3N0fscVKj/X0vbOaNIJOq8/NBJesItpnIJnYc8QLSOzSw4Pmx+5lBLhqd0txXB8Pb tevdH2Xh5MFAowAV716ID8a80/cILAyMEYLIzcAam+bCFLEko+RjbOaan1FEry075Xk4 R+JA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HpJdQBec7Dt1Q1JP9k4HsJlQhfbe7rQHqzj/YQYNMyM=; b=ZzBdzJBizUSRoqDnB4yxijLvv+yKJmVocstJz2AprjyoxM9Ol0PB9gNwksFQ7W9xem ltAwmREXzezL8rn3vxielXBR0pkeCVxIrBxdcetrKv8oC1oTIuJTqiV16i/wTlqAq08g KU/te5KNQYnq6umhR7EUuawzUYPKX0eIo/HIej11fGPF9zQD/t3NfNCOsBpOrf0vIXIf MQ0mglGWjTaitGtGNMVvdF4FilMVBqlXRm0pU64OatSSGSK2I0IvhiXqPH96ev/N5Nro 5ASfxd1i/rTEBJaSSObVvHtYGwFujb9BGWPksdgFtc5m8v7gr97Le8CWIpnemxl6wNA9 GREw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=mqrwjjLf; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e9si16596658edv.146.2021.07.12.00.34.22; Mon, 12 Jul 2021 00:34:22 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=mqrwjjLf; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345025AbhGLHfj (ORCPT + 12 others); Mon, 12 Jul 2021 03:35:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:54416 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240243AbhGLHc7 (ORCPT ); Mon, 12 Jul 2021 03:32:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id DF1DA60230; Mon, 12 Jul 2021 07:30:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626075001; bh=51hGTpUobY2VDKXE295OLpeHzJT02q2JldvUypcW9cE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mqrwjjLf6h27jmiNZUbbriHScJEu6nq8QjzZxI6YQnuXvTtuzctJEaIYbophmWcHc IOb77hNT3iP+Hbu3ZUCol89GLMZhnnRYnKycEKx5mgJDGiMX5vGnx3N65Ws22JiA5E uTYQUk9WnPksd2D5jG8U5OsqVyrTRdZt7XFXwjS8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Loic Poulain , Bhaumik Bhatt , Manivannan Sadhasivam , Hemant Kumar Subject: [PATCH 5.13 069/800] bus: mhi: core: Fix power down latency Date: Mon, 12 Jul 2021 08:01:32 +0200 Message-Id: <20210712060922.934921601@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060912.995381202@linuxfoundation.org> References: <20210712060912.995381202@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Loic Poulain commit 44b1eba44dc537edf076f131f1eeee7544d0e04f upstream. On graceful power-down/disable transition, when an MHI reset is performed, the MHI device loses its context, including interrupt configuration. However, the current implementation is waiting for event(irq) driven state change to confirm reset has been completed, which never happens, and causes reset timeout, leading to unexpected high latency of the mhi_power_down procedure (up to 45 seconds). Fix that by moving to the recently introduced poll_reg_field method, waiting for the reset bit to be cleared, in the same way as the power_on procedure. Cc: stable@vger.kernel.org Fixes: a6e2e3522f29 ("bus: mhi: core: Add support for PM state transitions") Signed-off-by: Loic Poulain Reviewed-by: Bhaumik Bhatt Reviewed-by: Manivannan Sadhasivam Reviewed-by: Hemant Kumar Link: https://lore.kernel.org/r/1620029090-8975-1-git-send-email-loic.poulain@linaro.org Signed-off-by: Manivannan Sadhasivam Link: https://lore.kernel.org/r/20210621161616.77524-3-manivannan.sadhasivam@linaro.org Signed-off-by: Greg Kroah-Hartman --- drivers/bus/mhi/core/pm.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) --- a/drivers/bus/mhi/core/pm.c +++ b/drivers/bus/mhi/core/pm.c @@ -465,23 +465,15 @@ static void mhi_pm_disable_transition(st /* Trigger MHI RESET so that the device will not access host memory */ if (!MHI_PM_IN_FATAL_STATE(mhi_cntrl->pm_state)) { - u32 in_reset = -1; - unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms); - dev_dbg(dev, "Triggering MHI Reset in device\n"); mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET); /* Wait for the reset bit to be cleared by the device */ - ret = wait_event_timeout(mhi_cntrl->state_event, - mhi_read_reg_field(mhi_cntrl, - mhi_cntrl->regs, - MHICTRL, - MHICTRL_RESET_MASK, - MHICTRL_RESET_SHIFT, - &in_reset) || - !in_reset, timeout); - if (!ret || in_reset) - dev_err(dev, "Device failed to exit MHI Reset state\n"); + ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL, + MHICTRL_RESET_MASK, MHICTRL_RESET_SHIFT, 0, + 25000); + if (ret) + dev_err(dev, "Device failed to clear MHI Reset\n"); /* * Device will clear BHI_INTVEC as a part of RESET processing,