Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp4117130ybc; Thu, 14 Nov 2019 22:13:51 -0800 (PST) X-Google-Smtp-Source: APXvYqx5BTbAXt0IzT/xopWpSZ+4mPe0GPmDs2fCk1lkPWrhsK115zu37uPAprMsq18JvwnqRNNg X-Received: by 2002:a17:906:70d6:: with SMTP id g22mr11162841ejk.221.1573798431781; Thu, 14 Nov 2019 22:13:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573798431; cv=none; d=google.com; s=arc-20160816; b=eeBx8dK2Hp9diqiqEB6vMpUKWrrwvObEjZ8JpVbtDP0ZYUIsVgI3KWXKbGj9eVKJqy 6Zq5OAnrDG1yz0nNJvDySgxEKlZseJ6uoBMW1JDOmtpGyieVA1w0dfoSRLLbU0p8lEJT GKprYNyhvmxpXT9DZ8PO5F/HkM1irjafvtWGAOqLwp3GQrSbqL5ZQ7D/1JiAXBcWsETQ Kb7BUPQaaJzpEncwkXQPVzE89PGT50zBQ3mUrOwxQqcSOyxQB/+FEdVuZf6VxPjFZ6Vx xq2YEo9LU3Z8MzjwLwfk6gDoljGBri8lLU2lXDiC+Ffi6BwRuPvTcAgsotQoez/p7iOB smfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature:dkim-signature; bh=Pgpxoy9BXUAaY//kjxL9fqposOR23uH6kTa1MdLY5D8=; b=dwXBklWKPQ29dPPli8iESqdQp/LG3WYVZJ27/3wN3nVAxsu2DORZgugBbxiM+RDPf8 cDaBYQTsLyr4WbZ8fG8POko+y2bL1zCxOcVghdHKdTpHMOGhSANff6Wxujnjx950t/uu n8ghccJs+6ofxaw7d4e4NaezAXlwvd94cJx+twk5P5qakI1Wh4Pl2zHeW+HMOSFXLOrw o5qjR0ex71181Yt6rNJUuIHkXiY1ZcMSy0lVslF6wWeYMx9gzRvdhick1KQJPyRjU+rV nHFWPG+9V65LP1Qp+SF2YOiJWZu8tZIiAOpMbWU7CcE0SrSesOy6BvfZsPcXitngGfcP CI0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=hueIDgC4; dkim=pass header.i=@codeaurora.org header.s=default header.b="L/jrEf8f"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f12si4857707eje.253.2019.11.14.22.13.26; Thu, 14 Nov 2019 22:13:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=hueIDgC4; dkim=pass header.i=@codeaurora.org header.s=default header.b="L/jrEf8f"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727336AbfKOGKJ (ORCPT + 99 others); Fri, 15 Nov 2019 01:10:09 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:38088 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfKOGKI (ORCPT ); Fri, 15 Nov 2019 01:10:08 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B6CDA611BD; Fri, 15 Nov 2019 06:10:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1573798207; bh=FwdFdOmJd9KNWRI6RrHvYALDn8KmaSzJOep2nOMopZk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hueIDgC4vp6Ioq1PDSuG+Csm/Wa1PG7fcMHrGHja9kZ5W8x6uo/26AuwEQs1tTRcg 3QUwnyjyT6iLfJEL4GYp4jYOwCLiNYnz8JGtDD0TX5wV2EPKX/9VE10EVIH1zfePxD c+M4w7ptpaO5mJek44AlslfYTZMFU1Sr5W31OSRg= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED,SPF_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from pacamara-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: cang@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 8BD1B611A3; Fri, 15 Nov 2019 06:09:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1573798199; bh=FwdFdOmJd9KNWRI6RrHvYALDn8KmaSzJOep2nOMopZk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L/jrEf8fCBPdBVAD7Ud34HdNZZ0ZJ7eEj0DO+aReG7AL8qoZ8SrirMmzSERGobjo2 csz7zbmiYPic/8uvVRoJQirmW4x/lnW5wg6y617UFLgAQdfcLZihJPG+50EfMVgtTV dN3GxIJ5/ThYzUXArfJ/xZrPZGhvuCkXL3AkboBU= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 8BD1B611A3 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=cang@codeaurora.org From: Can Guo To: asutoshd@codeaurora.org, nguyenb@codeaurora.org, rnayak@codeaurora.org, linux-scsi@vger.kernel.org, kernel-team@android.com, saravanak@google.com, salyzyn@google.com, cang@codeaurora.org Cc: Alim Akhtar , Avri Altman , Pedro Sousa , "James E.J. Bottomley" , "Martin K. Petersen" , Bean Huo , Stanley Chu , Tomas Winkler , Venkat Gopalakrishnan , Bjorn Andersson , Arnd Bergmann , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v5 3/7] scsi: ufs: Fix up auto hibern8 enablement Date: Thu, 14 Nov 2019 22:09:26 -0800 Message-Id: <1573798172-20534-4-git-send-email-cang@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1573798172-20534-1-git-send-email-cang@codeaurora.org> References: <1573798172-20534-1-git-send-email-cang@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fix up possible unclocked register access to auto hibern8 register in resume path and through sysfs entry. Meanwhile, enable auto hibern8 only after device is fully initialized in probe path. Signed-off-by: Can Guo --- drivers/scsi/ufs/ufs-sysfs.c | 15 +++++++++------ drivers/scsi/ufs/ufshcd.c | 14 +++++++------- drivers/scsi/ufs/ufshcd.h | 2 ++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index 969a36b..ad2abc9 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -126,13 +126,16 @@ static void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit) return; spin_lock_irqsave(hba->host->host_lock, flags); - if (hba->ahit == ahit) - goto out_unlock; - hba->ahit = ahit; - if (!pm_runtime_suspended(hba->dev)) - ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER); -out_unlock: + if (hba->ahit != ahit) + hba->ahit = ahit; spin_unlock_irqrestore(hba->host->host_lock, flags); + if (!pm_runtime_suspended(hba->dev)) { + pm_runtime_get_sync(hba->dev); + ufshcd_hold(hba, false); + ufshcd_auto_hibern8_enable(hba); + ufshcd_release(hba); + pm_runtime_put(hba->dev); + } } /* Convert Auto-Hibernate Idle Timer register value to microseconds */ diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 525f8e6..9bc2cad 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3947,7 +3947,7 @@ static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) return ret; } -static void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) +void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) { unsigned long flags; @@ -6892,9 +6892,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) /* UniPro link is active now */ ufshcd_set_link_active(hba); - /* Enable Auto-Hibernate if configured */ - ufshcd_auto_hibern8_enable(hba); - ret = ufshcd_verify_dev_init(hba); if (ret) goto out; @@ -6945,6 +6942,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) /* set the state as operational after switching to desired gear */ hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + /* Enable Auto-Hibernate if configured */ + ufshcd_auto_hibern8_enable(hba); + /* * If we are in error handling context or in power management callbacks * context, no need to scan the host @@ -7962,12 +7962,12 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (hba->clk_scaling.is_allowed) ufshcd_resume_clkscaling(hba); - /* Schedule clock gating in case of no access to UFS device yet */ - ufshcd_release(hba); - /* Enable Auto-Hibernate if configured */ ufshcd_auto_hibern8_enable(hba); + /* Schedule clock gating in case of no access to UFS device yet */ + ufshcd_release(hba); + goto out; set_old_link_state: diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index e0fe247..2740f69 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -926,6 +926,8 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode, int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode, enum flag_idn idn, bool *flag_res); +void ufshcd_auto_hibern8_enable(struct ufs_hba *hba); + #define SD_ASCII_STD true #define SD_RAW false int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index, -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project