From patchwork Mon Jan 18 20:10:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bean Huo X-Patchwork-Id: 365851 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEEABC433E6 for ; Mon, 18 Jan 2021 20:13:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7FDEC230FF for ; Mon, 18 Jan 2021 20:13:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437903AbhARUM7 (ORCPT ); Mon, 18 Jan 2021 15:12:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437858AbhARULc (ORCPT ); Mon, 18 Jan 2021 15:11:32 -0500 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43691C061757; Mon, 18 Jan 2021 12:10:52 -0800 (PST) Received: by mail-ed1-x530.google.com with SMTP id p22so18940427edu.11; Mon, 18 Jan 2021 12:10:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qswzafYry+G5B5UE7dVKcDDvMag33fJ8LeQJQxtybQk=; b=JtOSolS9NclYRLpUpHvMyLGiJH27+PhY/tBJLEzk78LGNq3niIBA7VpXPeEYbqj0UZ aRsozWxIgRQy2kINFEE+oywG8Pv3UrcsQUCPbNenOEg449wOhRWdLx4d5Ec0effzvWbs Qk3hmL+3HRJzLD6CSrlkrj6JcKCN9NqjKwKgwHqcBe7EphejSJMIgRE2yy/A6vMshUnA BW/P7pZoaj51Q3JXhhdfz9yDCD2rgxcAYHNTSPMwflp9i0yiV8AGJBJ3tOiM1qQvmlZ6 B48/XNeaSG0ojygeC5ZjTAE/PbDVPbCjz+MyHQEECB6/RlRfEjrKn3b1EkJsvjOwAZjm B2NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qswzafYry+G5B5UE7dVKcDDvMag33fJ8LeQJQxtybQk=; b=Nt+lQsClPOaurinKZ8Vu74HYgc7Wr4DzK0yTcyC1E0NFAA3UkLyPS413feZpogJdzU vcXke8ioAXQAiMvoNqbBhmvv/DFgpdAtBl3fflxCZ/JFzLNfUJncN+Ha1EFJE+6KYzSq QdHA/G+gOPmsiuYFXekSF2pEMPmX4uicTrHgk3whD8+3aKwNEPTt81AYSKURfB1v+Qr2 V1hSMi/Hdzf/4rlOmMHxSfXZO0JGcQ9ERvmIu9l+RIQ/WYEuOGMKFIuj/06IWYdBKhF+ mT0uEIaJA4Gu1Cad4P6cTkv3e46h9lJZpfycjuZO/MSD5lfS95VjxD44BStOyfLiMHfV sJqg== X-Gm-Message-State: AOAM5312w4SJXwuc72B1Jj8L4tdUSDUDW6jVP2V97C5REk/iTpy/dk23 B7MjRYk2iu3gQqdunM17OOU= X-Google-Smtp-Source: ABdhPJynLmX+bZFHMlkl+uBTtadEamev70AL6CWzy7J6gz2LvJsDd5xp1UExyaatiPDRjj0GPHO3VA== X-Received: by 2002:a05:6402:34c3:: with SMTP id w3mr868998edc.3.1611000650870; Mon, 18 Jan 2021 12:10:50 -0800 (PST) Received: from localhost.localdomain (ip5f5bee1b.dynamic.kabel-deutschland.de. [95.91.238.27]) by smtp.gmail.com with ESMTPSA id qh13sm3972543ejb.33.2021.01.18.12.10.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jan 2021 12:10:50 -0800 (PST) From: Bean Huo To: alim.akhtar@samsung.com, avri.altman@wdc.com, asutoshd@codeaurora.org, jejb@linux.ibm.com, martin.petersen@oracle.com, stanley.chu@mediatek.com, beanhuo@micron.com, bvanassche@acm.org, tomas.winkler@intel.com, cang@codeaurora.org Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 1/6] scsi: ufs: Add "wb_on" sysfs node to control WB on/off Date: Mon, 18 Jan 2021 21:10:34 +0100 Message-Id: <20210118201039.2398-2-huobean@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210118201039.2398-1-huobean@gmail.com> References: <20210118201039.2398-1-huobean@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org From: Bean Huo Currently UFS WriteBooster driver uses clock scaling up/down to set WB on/off, for the platform which doesn't support UFSHCD_CAP_CLK_SCALING, WB will be always on. Provide a sysfs attribute to enable/disable WB during runtime. Write 1/0 to "wb_on" sysfs node to enable/disable UFS WB. Reviewed-by: Avri Altman Reviewed-by: Stanley Chu Signed-off-by: Bean Huo --- drivers/scsi/ufs/ufs-sysfs.c | 46 ++++++++++++++++++++++++++++++++++++ drivers/scsi/ufs/ufshcd.c | 3 +-- drivers/scsi/ufs/ufshcd.h | 2 ++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index c092f249d6f9..76db8593ca09 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -209,6 +209,50 @@ static ssize_t auto_hibern8_store(struct device *dev, return ret ? ret : count; } +static ssize_t wb_on_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct ufs_hba *hba = dev_get_drvdata(dev); + + return sysfs_emit(buf, "%d\n", hba->wb_enabled); +} + +static ssize_t wb_on_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + struct ufs_hba *hba = dev_get_drvdata(dev); + unsigned int wb_enable; + ssize_t res; + + if (!ufshcd_is_wb_allowed(hba) || ufshcd_is_clkscaling_supported(hba)) { + /* + * If the platform supports UFSHCD_CAP_CLK_SCALING, turn WB + * on/off will be done while clock scaling up/down. + */ + dev_warn(dev, "To control WB through wb_on is not allowed!\n"); + return -EOPNOTSUPP; + } + + if (kstrtouint(buf, 0, &wb_enable)) + return -EINVAL; + + if (wb_enable != 0 && wb_enable != 1) + return -EINVAL; + + down(&hba->host_sem); + if (!ufshcd_is_user_access_allowed(hba)) { + res = -EBUSY; + goto out; + } + + pm_runtime_get_sync(hba->dev); + res = ufshcd_wb_ctrl(hba, wb_enable); + pm_runtime_put_sync(hba->dev); +out: + up(&hba->host_sem); + return res < 0 ? res : count; +} + static DEVICE_ATTR_RW(rpm_lvl); static DEVICE_ATTR_RO(rpm_target_dev_state); static DEVICE_ATTR_RO(rpm_target_link_state); @@ -216,6 +260,7 @@ static DEVICE_ATTR_RW(spm_lvl); static DEVICE_ATTR_RO(spm_target_dev_state); static DEVICE_ATTR_RO(spm_target_link_state); static DEVICE_ATTR_RW(auto_hibern8); +static DEVICE_ATTR_RW(wb_on); static struct attribute *ufs_sysfs_ufshcd_attrs[] = { &dev_attr_rpm_lvl.attr, @@ -225,6 +270,7 @@ static struct attribute *ufs_sysfs_ufshcd_attrs[] = { &dev_attr_spm_target_dev_state.attr, &dev_attr_spm_target_link_state.attr, &dev_attr_auto_hibern8.attr, + &dev_attr_wb_on.attr, NULL }; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5c6ee9394af3..3f2b495b36ee 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -249,7 +249,6 @@ static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba, static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag); static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba); static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba); -static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set); static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable); static void ufshcd_hba_vreg_set_lpm(struct ufs_hba *hba); @@ -5413,7 +5412,7 @@ static void ufshcd_bkops_exception_event_handler(struct ufs_hba *hba) __func__, err); } -static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) +int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) { int ret; u8 index; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 5bbe4715d4e9..ac0f03f69e42 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -1089,6 +1089,8 @@ int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, u8 *desc_buff, int *buff_len, enum query_opcode desc_op); +int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable); + /* Wrapper functions for safely calling variant operations */ static inline const char *ufshcd_get_var_name(struct ufs_hba *hba) { From patchwork Mon Jan 18 20:10:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bean Huo X-Patchwork-Id: 365853 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D2B0C433E0 for ; Mon, 18 Jan 2021 20:12:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4A27E22DA9 for ; Mon, 18 Jan 2021 20:12:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388075AbhARULu (ORCPT ); Mon, 18 Jan 2021 15:11:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437862AbhARULh (ORCPT ); Mon, 18 Jan 2021 15:11:37 -0500 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA342C0613CF; Mon, 18 Jan 2021 12:10:56 -0800 (PST) Received: by mail-ej1-x634.google.com with SMTP id w1so25355352ejf.11; Mon, 18 Jan 2021 12:10:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ltiNIANAr10krz1rWQiJ2pZ0/X2sLNeMpvDcCYoHUaY=; b=MVA9dTIDRvYh6XXUpamir6tr2JSXd4+CrkBOdiGdSvl6lYqjAOrQqfvfqLPiGz2yHI L3iEzw1Ag+ZWRoIKjbjd2/RVx6fzrGMmgiSRvM6dOyLrq7VWN7msSrOU+M8i00Wfezdt i4z3qX6Trs0cP8+wVeAmZ5hYW3MI4xMkzmBC/yHkF4TOYoPdITZaVPj+gMxk98OLQKaM l+v/t/kAbEMcAhEPjDpJQyd7ps/nqOpJES0QBpC31DcK3RtetyEBSakCYOnBaB3kDg13 UI8AfdPv7EoOjERGMuyrZd+4wMAogad1Pcws10m22wce1e/OGflqAmNchj6Uu9HFqV14 MrOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ltiNIANAr10krz1rWQiJ2pZ0/X2sLNeMpvDcCYoHUaY=; b=iNh2SNWN96nD/VJZ5eOWTN039jf4hwlX3033J6sk4XjQZsNuvFqQ7srz3jBJzTv0xN Tw96LvK8OnvSYYeDnofGQeVVGdYYrP0tjtP/6Psk9p9se65e1osdfsWt0BMovcTBt2C1 vBTwAiJ0Y+zl7dcGXWPI6gi5eEFk6PTXQ6Q88CGi8DpSi/xo+4tgy+1Z+HRO6Pm3ZDQE vsdYj+uzgHG+lRBJ1CDrseTUhfpWvUExKJVdBaA2P14OSbsnF/45JNj+D+vGonQQSs0+ zY34icb1JF5tn7Ky8S5iTn8rTZTqaBW0eOywD3IKqA7xa8xuhHg3aH3UiqVsSBVeIl04 wr7A== X-Gm-Message-State: AOAM531RM6JXw92MtS6GfqLuZ+Yh866VYEn0E3wqbXJL4OHneUX025Ru XZNbnUpcUfAN5S43Ko64BqQ= X-Google-Smtp-Source: ABdhPJw0xKA+oHIWulQZfG90elveZMHUGbjfIACbR8mR7TqqBkatGmRKoRN3KQ7kDb0Dd7H1fzaaMw== X-Received: by 2002:a17:906:bfcc:: with SMTP id us12mr836618ejb.163.1611000655621; Mon, 18 Jan 2021 12:10:55 -0800 (PST) Received: from localhost.localdomain (ip5f5bee1b.dynamic.kabel-deutschland.de. [95.91.238.27]) by smtp.gmail.com with ESMTPSA id qh13sm3972543ejb.33.2021.01.18.12.10.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jan 2021 12:10:55 -0800 (PST) From: Bean Huo To: alim.akhtar@samsung.com, avri.altman@wdc.com, asutoshd@codeaurora.org, jejb@linux.ibm.com, martin.petersen@oracle.com, stanley.chu@mediatek.com, beanhuo@micron.com, bvanassche@acm.org, tomas.winkler@intel.com, cang@codeaurora.org Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 4/6] scsi: ufs: Remove two WB related fields from struct ufs_dev_info Date: Mon, 18 Jan 2021 21:10:37 +0100 Message-Id: <20210118201039.2398-5-huobean@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210118201039.2398-1-huobean@gmail.com> References: <20210118201039.2398-1-huobean@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org From: Bean Huo d_wb_alloc_units and d_ext_ufs_feature_sup only be used while WB probe. They are just used to confirm the condition that "if bWriteBoosterBufferType is set to 01h but dNumSharedWriteBoosterBufferAllocUnits is set to zero, the WriteBooster feature is disabled", and if UFS device supports WB. After that, no user uses them any more. So, don't need to keep time in runtime. Reviewed-by: Stanley Chu Signed-off-by: Bean Huo --- drivers/scsi/ufs/ufs.h | 2 -- drivers/scsi/ufs/ufshcd.c | 14 ++++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 09c7cc8a678d..a8000ed0017e 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -538,9 +538,7 @@ struct ufs_dev_info { u8 *model; u16 wspecversion; u32 clk_gating_wait_us; - u32 d_ext_ufs_feature_sup; u8 b_wb_buffer_type; - u32 d_wb_alloc_units; bool b_rpm_dev_flush_capable; u8 b_presrv_uspc_en; }; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index a3758fd83ebd..827d9f360287 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7269,6 +7269,7 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) struct ufs_dev_info *dev_info = &hba->dev_info; u8 lun; u32 d_lu_wb_buf_alloc; + u32 ext_ufs_feature; if (!ufshcd_is_wb_allowed(hba)) return; @@ -7286,11 +7287,10 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4) goto wb_disabled; - dev_info->d_ext_ufs_feature_sup = - get_unaligned_be32(desc_buf + - DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP); + ext_ufs_feature = get_unaligned_be32(desc_buf + + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP); - if (!(dev_info->d_ext_ufs_feature_sup & UFS_DEV_WRITE_BOOSTER_SUP)) + if (!(ext_ufs_feature & UFS_DEV_WRITE_BOOSTER_SUP)) goto wb_disabled; /* @@ -7305,10 +7305,8 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; if (dev_info->b_wb_buffer_type == WB_BUF_MODE_SHARED) { - dev_info->d_wb_alloc_units = - get_unaligned_be32(desc_buf + - DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS); - if (!dev_info->d_wb_alloc_units) + if (!get_unaligned_be32(desc_buf + + DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS)) goto wb_disabled; } else { for (lun = 0; lun < UFS_UPIU_MAX_WB_LUN_ID; lun++) { From patchwork Mon Jan 18 20:10:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bean Huo X-Patchwork-Id: 365852 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6D0D8C433DB for ; Mon, 18 Jan 2021 20:13:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 42FAE230FF for ; Mon, 18 Jan 2021 20:13:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437751AbhARUMw (ORCPT ); Mon, 18 Jan 2021 15:12:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437838AbhARULk (ORCPT ); Mon, 18 Jan 2021 15:11:40 -0500 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AFE79C0613D6; Mon, 18 Jan 2021 12:10:59 -0800 (PST) Received: by mail-ej1-x62f.google.com with SMTP id rv9so6598917ejb.13; Mon, 18 Jan 2021 12:10:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fRVeJFHSbx0u4PcEewve+lvBzm+Q5dzCsl6CUEyzawk=; b=n7+6hKeJB/Fz3XHtf81zow6s4OMrwMLi9QFbuO1utYopq5HGH0Rlhi1y6SIBTKMQiP +enK3OXDKTbs6oXmI9VaV0G8KIWfIQxoTNKWkyKSyourTyYWQIulJrhuznl/vym/cjN3 57GxUJv9HBBbQ7gkQI+IDd+DNdAOlsHg3I4i0pxhOYJwYv/cvQ3oGaclj5JD7sT61uf4 ARHK/nFpLFo3Kt3v0vOjlXI8om+HN6mzGC/9WhXMJ16QxHUPV0cMS73mAhZmVQ5PACFG Mt5AF+/SytLG2fT18/Q4P3IZr6mGoPcAxI6s5d2ooNxbglb9beyiqrphKJsf15+o9e81 QiTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fRVeJFHSbx0u4PcEewve+lvBzm+Q5dzCsl6CUEyzawk=; b=RR8z6BlpIjPJQbidpE7mw49dueSmk8uL86poLR90Futkz6qw0w+/UkeZqvkKSrjaCN NXbL6SeU8FQ4svxFejBWyubeKXTymQ2sL3bWSJ47jW82XJomjKkhRuQNlybkOjUq9ej/ iSFTek+8NQ2yH7d/ByjJHK6/TqktwiLyBFFRSYkjO7jXEQaOSFGcEVF384vZl6y05ZMp Tuy1CFK8dEP45u3XeGkGObG05s9c7UXP8upILWv71lmAmTs/V7ywmvtJL+O1qjOPLsF5 U38FMsaVpFuKz7bsX0NU/AqxazTnRkTWZKxj5cWSWBZ7mJa72ruo9lv2FVCst4pNEOj/ dFkw== X-Gm-Message-State: AOAM531dKhySgsYg3LvUkqhKoX45PuPkr1JEmqMJEAUiyX0u3hey0FVT gU6fr07YM4089BEQLPlwvcw= X-Google-Smtp-Source: ABdhPJwk8R8GnHh0gWYN7oDsd3SWhLTBfFUCuF2rToevpkMPR2/5z6Ctv6aOJuFgrVmTC7drsfJJSQ== X-Received: by 2002:a17:907:7356:: with SMTP id dq22mr882714ejc.318.1611000658457; Mon, 18 Jan 2021 12:10:58 -0800 (PST) Received: from localhost.localdomain (ip5f5bee1b.dynamic.kabel-deutschland.de. [95.91.238.27]) by smtp.gmail.com with ESMTPSA id qh13sm3972543ejb.33.2021.01.18.12.10.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jan 2021 12:10:58 -0800 (PST) From: Bean Huo To: alim.akhtar@samsung.com, avri.altman@wdc.com, asutoshd@codeaurora.org, jejb@linux.ibm.com, martin.petersen@oracle.com, stanley.chu@mediatek.com, beanhuo@micron.com, bvanassche@acm.org, tomas.winkler@intel.com, cang@codeaurora.org Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 6/6] scsi: ufs: Cleanup WB buffer flush toggle implementation Date: Mon, 18 Jan 2021 21:10:39 +0100 Message-Id: <20210118201039.2398-7-huobean@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210118201039.2398-1-huobean@gmail.com> References: <20210118201039.2398-1-huobean@gmail.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org From: Bean Huo Delete ufshcd_wb_buf_flush_enable() and ufshcd_wb_buf_flush_disable(), move the implementation into ufshcd_wb_toggle_flush(). Signed-off-by: Bean Huo Reviewed-by: Stanley Chu Reviewed-by: Can Guo Signed-off-by: Bean Huo --- drivers/scsi/ufs/ufshcd.c | 66 +++++++++++++-------------------------- 1 file changed, 21 insertions(+), 45 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 9f857af3766a..10bee49ccbc8 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -247,10 +247,8 @@ static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on); static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba, struct ufs_vreg *vreg); static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag); -static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba); -static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba); static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set); -static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable); +static inline int ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable); static void ufshcd_hba_vreg_set_lpm(struct ufs_hba *hba); static void ufshcd_hba_vreg_set_hpm(struct ufs_hba *hba); @@ -5460,60 +5458,38 @@ static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set) index, NULL); } -static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) -{ - if (hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL) - return; - - if (enable) - ufshcd_wb_buf_flush_enable(hba); - else - ufshcd_wb_buf_flush_disable(hba); - -} - -static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) +static inline int ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) { int ret; u8 index; + enum query_opcode opcode; - if (!ufshcd_is_wb_allowed(hba) || hba->dev_info.wb_buf_flush_enabled) + if (hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL) return 0; - index = ufshcd_wb_get_query_index(hba); - ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, - index, NULL); - if (ret) - dev_err(hba->dev, "%s WB - buf flush enable failed %d\n", - __func__, ret); - else - hba->dev_info.wb_buf_flush_enabled = true; - - dev_dbg(hba->dev, "WB - Flush enabled: %d\n", ret); - return ret; -} - -static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba) -{ - int ret; - u8 index; - - if (!ufshcd_is_wb_allowed(hba) || !hba->dev_info.wb_buf_flush_enabled) + if (!ufshcd_is_wb_allowed(hba) || + hba->dev_info.wb_buf_flush_enabled == enable) return 0; + if (enable) + opcode = UPIU_QUERY_OPCODE_SET_FLAG; + else + opcode = UPIU_QUERY_OPCODE_CLEAR_FLAG; + index = ufshcd_wb_get_query_index(hba); - ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, - index, NULL); + ret = ufshcd_query_flag_retry(hba, opcode, + QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, index, + NULL); if (ret) { - dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n", - __func__, ret); - } else { - hba->dev_info.wb_buf_flush_enabled = false; - dev_dbg(hba->dev, "WB - Flush disabled: %d\n", ret); + dev_err(hba->dev, "%s WB-Buf Flush %s failed %d\n", __func__, + enable ? "enable" : "disable", ret); + goto out; } + hba->dev_info.wb_buf_flush_enabled = enable; + + dev_dbg(hba->dev, "WB-Buf Flush %s\n", enable ? "enabled" : "disabled"); +out: return ret; }