From nobody Tue Apr 28 11:19:59 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C9E3C433EF for ; Fri, 1 Jul 2022 07:47:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235416AbiGAHrE (ORCPT ); Fri, 1 Jul 2022 03:47:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229689AbiGAHrB (ORCPT ); Fri, 1 Jul 2022 03:47:01 -0400 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C8F053EC0 for ; Fri, 1 Jul 2022 00:47:00 -0700 (PDT) Received: from epcas2p1.samsung.com (unknown [182.195.41.53]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20220701074655epoutp022ba45f282b73086d60326fec2b91fa8c~9pPZCsdyZ1343213432epoutp02M for ; Fri, 1 Jul 2022 07:46:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20220701074655epoutp022ba45f282b73086d60326fec2b91fa8c~9pPZCsdyZ1343213432epoutp02M DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1656661615; bh=li0Fm7jz9++tP4h0OZi8Lif529Oa18Wa4gYGeXZesVw=; h=Subject:Reply-To:From:To:In-Reply-To:Date:References:From; b=YhJIRcLGxoNt4m9M/O0vVYPv0b0z8ZgWWQa8sOgzN96xSJ7er9Jto6KA8kpIxoLe8 f69iSWch4f+iawo4J5vvulFgyeXk1vx5cZpe68Hv22nQnK74pNYcuW9JSdVr1WlNf3 Sv+K1KNdJkQy3kVPRIfVWUy9U4kPeLmUqKQ7Rww8= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas2p3.samsung.com (KnoxPortal) with ESMTP id 20220701074655epcas2p3e7054afe48c45b02a4e82c93b4569431~9pPYoLr-j2225622256epcas2p3A; Fri, 1 Jul 2022 07:46:55 +0000 (GMT) Received: from epsmges2p2.samsung.com (unknown [182.195.36.98]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4LZ6jB3cWPz4x9Q0; Fri, 1 Jul 2022 07:46:54 +0000 (GMT) X-AuditID: b6c32a46-0a3ff700000025b2-30-62bea66ec42d Received: from epcas2p2.samsung.com ( [182.195.41.54]) by epsmges2p2.samsung.com (Symantec Messaging Gateway) with SMTP id 96.92.09650.E66AEB26; Fri, 1 Jul 2022 16:46:54 +0900 (KST) Mime-Version: 1.0 Subject: [PATCH v3 1/2] scsi: ufs: wb: renaming & cleanups functions Reply-To: j-young.choi@samsung.com Sender: Jinyoung CHOI From: Jinyoung CHOI To: ALIM AKHTAR , "avri.altman@wdc.com" , "bvanassche@acm.org" , "jejb@linux.ibm.com" , "martin.petersen@oracle.com" , "beanhuo@micron.com" , "adrian.hunter@intel.com" , "linux-scsi@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-Priority: 3 X-Content-Kind-Code: NORMAL In-Reply-To: <20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95@epcms2p4> X-CPGS-Detection: blocking_info_exchange X-Drm-Type: N,general X-Msg-Generator: Mail X-Msg-Type: PERSONAL X-Reply-Demand: N Message-ID: <20220701074654epcms2p5fcc0a8abe766fa00851b00dff98ad3c7@epcms2p5> Date: Fri, 01 Jul 2022 16:46:54 +0900 X-CMS-MailID: 20220701074654epcms2p5fcc0a8abe766fa00851b00dff98ad3c7 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: AUTO_CONFIDENTIAL X-CPGSPASS: Y X-CPGSPASS: Y CMS-TYPE: 102P X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPJsWRmVeSWpSXmKPExsWy7bCmmW7esn1JBr92SFmcfLKGzeLBvG1s Fi9/XmWzOPiwk8Vi2oefzBYvD2laLLqxjcni8q45bBbd13ewWSw//o/Jgcvj8hVvj8V7XjJ5 TFh0gNHj+/oONo+PT2+xePRtWcXo8XmTnEf7gW6mAI6obJuM1MSU1CKF1Lzk/JTMvHRbJe/g eOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wcoBOVFMoSc0qBQgGJxcVK+nY2RfmlJakKGfnF JbZKqQUpOQXmBXrFibnFpXnpenmpJVaGBgZGpkCFCdkZE29tYi+YaF2xbsJ9lgbGTsMuRk4O CQETiV071zB2MXJxCAnsYJQ48HgekMPBwSsgKPF3hzBIjbCAi8S/zl3sILaQgJLEuTWzwEqE BQwkbvWag4TZBPQkfi6ZwQYyRkTgLLPEwodTmCDm80rMaH/KAmFLS2xfvpURxOYU8JM4P2kN I0RcQ+LHsl5mCFtU4ubqt+ww9vtj86FqRCRa752FqhGUePBzN1RcUuLQoa9sIPdICORLbDgQ CBGukXi7/ABUib7EtY6NYCfwCvhKvGjaAhZnEVCV+Dv5BStEjYvE6o/XwE5mFpCX2P52DjPI SGYBTYn1u/QhpitLHLnFAvNUw8bf7OhsZgE+iY7Df+HiO+Y9YYJoVZNY1GQEEZaR+Hp4PvsE RqVZiFCehWTtLIS1CxiZVzGKpRYU56anFhsVGMEjNjk/dxMjOKVque1gnPL2g94hRiYOxkOM EhzMSiK8bPP2JgnxpiRWVqUW5ccXleakFh9iNAV6eCKzlGhyPjCp55XEG5pYGpiYmRmaG5ka mCuJ83qlbEgUEkhPLEnNTk0tSC2C6WPi4JRqYEp597DoqGTvsvnbneSuJrnPqTi+XK1P7I31 q2tTF/1mZbLNfHQl+1LzxeXddmF65jN3dH/gPDjvj+fTaT4FxbaVpjKGuZN+OLw+/MIwNDRt 0qkHm94fucLO8LmqeYZi7+VpT3dc4vv9Vcngl9geiYNclhmyvren/wxedyNWWp/9xI8PrM7W LTw71bIYm/r5owxW6uQXaNpk7fee197HIePHdzS5r/QtX6n0GceVMVYKiUdZTaTfJuSFPr7K 4xee9u7Ri2k3T6gUmJeXTZo9ge3DXJG7z/U7hHcGaW5zzuD99ss1IU34kEXyms0Vj9T6BNz2 uFnIOK/mX//Vb1L8it/bN669UJpQkHNiwdKLhkosxRmJhlrMRcWJAJNAkJ8yBAAA DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95 References: <20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95@epcms2p4> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The Function names were changed clearly, and the location of the comments was modified and added properly. In addition, the conditional test of the toggle functions was different, so it was modified. Unnecessary logs were removed and modified appropriately. Signed-off-by: Jinyoung Choi Reviewed-by: Avri Altman --- drivers/ufs/core/ufs-sysfs.c | 2 +- drivers/ufs/core/ufshcd.c | 69 +++++++++++++++++------------------- include/ufs/ufshcd.h | 7 ++++ 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c index 0a088b47d557..6253606b93b4 100644 --- a/drivers/ufs/core/ufs-sysfs.c +++ b/drivers/ufs/core/ufs-sysfs.c @@ -230,7 +230,7 @@ static ssize_t wb_on_store(struct device *dev, struct d= evice_attribute *attr, * 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"); + dev_warn(dev, "It is not allowed to control WB!\n"); return -EOPNOTSUPP; } =20 diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 1d3214e6b364..f98d023e44ae 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -268,8 +268,7 @@ 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 void 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_wb_toggle_buf_flush_during_h8(struct ufs_hba *hba, bool= set); static void ufshcd_hba_vreg_set_lpm(struct ufs_hba *hba); static void ufshcd_hba_vreg_set_hpm(struct ufs_hba *hba); =20 @@ -289,16 +288,16 @@ static inline void ufshcd_disable_irq(struct ufs_hba = *hba) } } =20 -static inline void ufshcd_wb_config(struct ufs_hba *hba) +static void ufshcd_wb_set_default_flags(struct ufs_hba *hba) { if (!ufshcd_is_wb_allowed(hba)) return; =20 ufshcd_wb_toggle(hba, true); + ufshcd_wb_toggle_buf_flush_during_h8(hba, true); =20 - ufshcd_wb_toggle_flush_during_h8(hba, true); - if (!(hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL)) - ufshcd_wb_toggle_flush(hba, true); + if (ufshcd_is_wb_buf_flush_allowed(hba)) + ufshcd_wb_toggle_buf_flush(hba, true); } =20 static void ufshcd_scsi_unblock_requests(struct ufs_hba *hba) @@ -1289,9 +1288,10 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba,= bool scale_up) } } =20 - /* Enable Write Booster if we have scaled up else disable it */ downgrade_write(&hba->clk_scaling_lock); is_writelock =3D false; + + /* Enable Write Booster if we have scaled up else disable it */ ufshcd_wb_toggle(hba, scale_up); =20 out_unprepare: @@ -5715,6 +5715,9 @@ static int __ufshcd_wb_toggle(struct ufs_hba *hba, bo= ol set, enum flag_idn idn) enum query_opcode opcode =3D set ? UPIU_QUERY_OPCODE_SET_FLAG : UPIU_QUERY_OPCODE_CLEAR_FLAG; =20 + if (!ufshcd_is_wb_allowed(hba)) + return -EPERM; + index =3D ufshcd_wb_get_query_index(hba); return ufshcd_query_flag_retry(hba, opcode, idn, index, NULL); } @@ -5723,60 +5726,50 @@ int ufshcd_wb_toggle(struct ufs_hba *hba, bool enab= le) { int ret; =20 - if (!ufshcd_is_wb_allowed(hba)) - return 0; - - if (!(enable ^ hba->dev_info.wb_enabled)) + if (hba->dev_info.wb_enabled =3D=3D enable) return 0; =20 ret =3D __ufshcd_wb_toggle(hba, enable, QUERY_FLAG_IDN_WB_EN); if (ret) { - dev_err(hba->dev, "%s Write Booster %s failed %d\n", + dev_err(hba->dev, "%s: failed to %s WB %d\n", __func__, enable ? "enable" : "disable", ret); return ret; } =20 hba->dev_info.wb_enabled =3D enable; - dev_info(hba->dev, "%s Write Booster %s\n", - __func__, enable ? "enabled" : "disabled"); =20 return ret; } =20 -static void ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set) +static void ufshcd_wb_toggle_buf_flush_during_h8(struct ufs_hba *hba, + bool enable) { int ret; =20 - ret =3D __ufshcd_wb_toggle(hba, set, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8); - if (ret) { - dev_err(hba->dev, "%s: WB-Buf Flush during H8 %s failed: %d\n", - __func__, set ? "enable" : "disable", ret); - return; - } - dev_dbg(hba->dev, "%s WB-Buf Flush during H8 %s\n", - __func__, set ? "enabled" : "disabled"); + ret =3D __ufshcd_wb_toggle(hba, enable, + QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8); + if (ret) + dev_err(hba->dev, "%s: failed to %s WB buf flush during H8 %d\n", + __func__, enable ? "enable" : "disable", ret); } =20 -static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) +int ufshcd_wb_toggle_buf_flush(struct ufs_hba *hba, bool enable) { int ret; =20 - if (!ufshcd_is_wb_allowed(hba) || - hba->dev_info.wb_buf_flush_enabled =3D=3D enable) - return; + if (hba->dev_info.wb_buf_flush_enabled =3D=3D enable) + return 0; =20 ret =3D __ufshcd_wb_toggle(hba, enable, QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN); if (ret) { - dev_err(hba->dev, "%s WB-Buf Flush %s failed %d\n", __func__, - enable ? "enable" : "disable", ret); - return; + dev_err(hba->dev, "%s: failed to %s WB buf flush %d\n", + __func__, enable ? "enable" : "disable", ret); + return ret; } =20 hba->dev_info.wb_buf_flush_enabled =3D enable; =20 - dev_dbg(hba->dev, "%s WB-Buf Flush %s\n", - __func__, enable ? "enabled" : "disabled"); + return ret; } =20 static bool ufshcd_wb_presrv_usrspc_keep_vcc_on(struct ufs_hba *hba, @@ -5807,10 +5800,10 @@ static bool ufshcd_wb_presrv_usrspc_keep_vcc_on(str= uct ufs_hba *hba, =20 static void ufshcd_wb_force_disable(struct ufs_hba *hba) { - if (!(hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL)) - ufshcd_wb_toggle_flush(hba, false); + if (ufshcd_is_wb_buf_flush_allowed(hba)) + ufshcd_wb_toggle_buf_flush(hba, false); =20 - ufshcd_wb_toggle_flush_during_h8(hba, false); + ufshcd_wb_toggle_buf_flush_during_h8(hba, false); ufshcd_wb_toggle(hba, false); hba->caps &=3D ~UFSHCD_CAP_WB_EN; =20 @@ -8197,7 +8190,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool= init_dev_params) */ ufshcd_set_active_icc_lvl(hba); =20 - ufshcd_wb_config(hba); + /* Enable UFS Write Booster if supported */ + ufshcd_wb_set_default_flags(hba); + if (hba->ee_usr_mask) ufshcd_write_ee_control(hba); /* Enable Auto-Hibernate if configured */ diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index 7fe1a926cd99..78adc556444a 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -1017,6 +1017,12 @@ static inline bool ufshcd_is_wb_allowed(struct ufs_h= ba *hba) return hba->caps & UFSHCD_CAP_WB_EN; } =20 +static inline bool ufshcd_is_wb_buf_flush_allowed(struct ufs_hba *hba) +{ + return ufshcd_is_wb_allowed(hba) && + !(hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL); +} + #define ufshcd_writel(hba, val, reg) \ writel((val), (hba)->mmio_base + (reg)) #define ufshcd_readl(hba, reg) \ @@ -1211,6 +1217,7 @@ int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, enum query_opcode desc_op); =20 int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable); +int ufshcd_wb_toggle_buf_flush(struct ufs_hba *hba, bool enable); int ufshcd_suspend_prepare(struct device *dev); int __ufshcd_suspend_prepare(struct device *dev, bool rpm_ok_for_spm); void ufshcd_resume_complete(struct device *dev); --=20 2.25.1 From nobody Tue Apr 28 11:19:59 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0207DC43334 for ; Fri, 1 Jul 2022 07:48:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235514AbiGAHsZ (ORCPT ); Fri, 1 Jul 2022 03:48:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235615AbiGAHsS (ORCPT ); Fri, 1 Jul 2022 03:48:18 -0400 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D484BC16 for ; Fri, 1 Jul 2022 00:48:16 -0700 (PDT) Received: from epcas2p3.samsung.com (unknown [182.195.41.55]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20220701074815epoutp040e055cce4b594d347359893671515d5d~9pQjKQQ4r0056500565epoutp04K for ; Fri, 1 Jul 2022 07:48:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20220701074815epoutp040e055cce4b594d347359893671515d5d~9pQjKQQ4r0056500565epoutp04K DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1656661695; bh=oGukSB9O0xN7U7M7TwsNAjEPd9DF7wPXjNhAN7q1AFw=; h=Subject:Reply-To:From:To:In-Reply-To:Date:References:From; b=rYfvEORACJTVzRgQOmH+hill4AHgZXaExFEKCP1TFk+Uhb9B8+DKDTaKyazpiSkB1 bvFOqBObH8vtfsWFu5gxcPf/SW7zax6/MTEL5dQQfMDDm8WQqcQGB2GFU68JArGLeJ jlBqGgK439no6A8bWS+a1dbYxRBz3wtQGDkioVxM= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas2p1.samsung.com (KnoxPortal) with ESMTP id 20220701074814epcas2p19da3e47416f37090e4183eed9a8231f4~9pQivnzrB2588925889epcas2p1S; Fri, 1 Jul 2022 07:48:14 +0000 (GMT) Received: from epsmges2p2.samsung.com (unknown [182.195.36.69]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4LZ6kk2RNcz4x9QL; Fri, 1 Jul 2022 07:48:14 +0000 (GMT) X-AuditID: b6c32a46-0a3ff700000025b2-a6-62bea6be2374 Received: from epcas2p4.samsung.com ( [182.195.41.56]) by epsmges2p2.samsung.com (Symantec Messaging Gateway) with SMTP id F2.D3.09650.EB6AEB26; Fri, 1 Jul 2022 16:48:14 +0900 (KST) Mime-Version: 1.0 Subject: [PATCH v3 2/2] scsi: ufs: wb: Add Manual Flush sysfs Reply-To: j-young.choi@samsung.com Sender: Jinyoung CHOI From: Jinyoung CHOI To: ALIM AKHTAR , "avri.altman@wdc.com" , "bvanassche@acm.org" , "jejb@linux.ibm.com" , "martin.petersen@oracle.com" , "beanhuo@micron.com" , "adrian.hunter@intel.com" , "linux-scsi@vger.kernel.org" , "linux-kernel@vger.kernel.org" X-Priority: 3 X-Content-Kind-Code: NORMAL In-Reply-To: <20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95@epcms2p4> X-CPGS-Detection: blocking_info_exchange X-Drm-Type: N,general X-Msg-Generator: Mail X-Msg-Type: PERSONAL X-Reply-Demand: N Message-ID: <20220701074814epcms2p8bfb6c00d7364aa704e2d6e60088e6a22@epcms2p8> Date: Fri, 01 Jul 2022 16:48:14 +0900 X-CMS-MailID: 20220701074814epcms2p8bfb6c00d7364aa704e2d6e60088e6a22 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: AUTO_CONFIDENTIAL X-CPGSPASS: Y X-CPGSPASS: Y CMS-TYPE: 102P X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPJsWRmVeSWpSXmKPExsWy7bCmhe6+ZfuSDNbtF7Q4+WQNm8WDedvY LF7+vMpmcfBhJ4vFtA8/mS1eHtK0WHRjG5PF5V1z2Cy6r+9gs1h+/B+TA5fH5SveHov3vGTy mLDoAKPH9/UdbB4fn95i8ejbsorR4/MmOY/2A91MARxR2TYZqYkpqUUKqXnJ+SmZeem2St7B 8c7xpmYGhrqGlhbmSgp5ibmptkouPgG6bpk5QCcqKZQl5pQChQISi4uV9O1sivJLS1IVMvKL S2yVUgtScgrMC/SKE3OLS/PS9fJSS6wMDQyMTIEKE7IzXh//xV7wQKzixpnPrA2Mj4S6GDk5 JARMJD6cmMLUxcjFISSwg1HiettXIIeDg1dAUOLvDmGQGmEBW4kWoB4QW0hASeLcmlmMICXC AgYSt3rNQcJsAnoSP5fMYAMZIyJwllli4UOQmSDzeSVmtD9lgbClJbYv38oIYnMK+Emcn7SG ESKuIfFjWS8zhC0qcXP1W3YY+/2x+VA1IhKt985C1QhKPPi5GyouKXHo0Fc2kHskBPIlNhwI hAjXSLxdfgCqRF/iWsdGsBN4BXwl5m+ZAzaGRUBV4mfPfKiRLhINjc/B1jILyEtsfwtSwwFk a0qs36UPMV1Z4sgtFpinGjb+ZkdnMwvwSXQc/gsX3zHvCRNEq5rEoiYjiLCMxNfD89knMCrN QoTyLCRrZyGsXcDIvIpRLLWgODc9tdiowAgescn5uZsYwSlVy20H45S3H/QOMTJxMB5ilOBg VhLhZZu3N0mINyWxsiq1KD++qDQntfgQoynQwxOZpUST84FJPa8k3tDE0sDEzMzQ3MjUwFxJ nNcrZUOikEB6YklqdmpqQWoRTB8TB6dUA9OJbzotBZeb9h2vFJ1meP3ypWLxOyc+Kv4v25m4 4n2oxAeBy3djT1YlhkbU62wQtllksPPrt5m1Cx2zJ7xwlbRYIh5y8FBOYVzidV/TzTvCjtRW NL9WN9u+6C9H6t2Ix9XapQa6r1O/qmapmz/8FuH/ZlrRn+nqE07bR+vfy9p1JP9i3oLjP459 sokx65vBOmP+zfCrHEdzqz0OvvOfeODowi/r13CyP3800cPspo1OwR+FqJlsda2L/z7tPym/ YEZFl3BVdlm/27K6Ry5y3gV7TtsJG/TvWSsW2CoYaVCquo/juMDqGM6PvT3mubv3/VXZkG9R 5rGGrfh4tCL37Zz1Tu6TC2c8NL2xxLotVl2JpTgj0VCLuag4EQDY0PYMMgQAAA== DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95 References: <20220701074420epcms2p4c4a6a016c7070d5dfa279fc4607caa95@epcms2p4> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is the following quirk to bypass "WB Manual Flush" in Write Booster. - UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL If this quirk is not set, there is no knob that can control "WB Manual Flus= h". There are three flags that control Write Booster Feature. 1. WB ON/OFF 2. WB Hibern Flush ON/OFF 3. WB Flush ON/OFF The sysfs that controls the WB was implemented. (1) In the case of "Hibern Flush", it is always good to turn on. Control may not be required. (2) Finally, "Manual flush" may be necessary because the Auto-Hibern8 is not supported in a specific environment. So the sysfs that controls this is necessary. (3) Signed-off-by: Jinyoung Choi Reviewed-by: Avri Altman --- drivers/ufs/core/ufs-sysfs.c | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c index 6253606b93b4..b1c51d8df9f4 100644 --- a/drivers/ufs/core/ufs-sysfs.c +++ b/drivers/ufs/core/ufs-sysfs.c @@ -254,6 +254,48 @@ static ssize_t wb_on_store(struct device *dev, struct = device_attribute *attr, return res < 0 ? res : count; } =20 +static ssize_t wb_buf_flush_en_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct ufs_hba *hba =3D dev_get_drvdata(dev); + + return sysfs_emit(buf, "%d\n", hba->dev_info.wb_buf_flush_enabled); +} + +static ssize_t wb_buf_flush_en_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct ufs_hba *hba =3D dev_get_drvdata(dev); + unsigned int wb_buf_flush_en; + ssize_t res; + + if (!ufshcd_is_wb_buf_flush_allowed(hba)) { + dev_warn(dev, "It is not allowed to control WB buf flush!\n"); + return -EOPNOTSUPP; + } + + if (kstrtouint(buf, 0, &wb_buf_flush_en)) + return -EINVAL; + + if (wb_buf_flush_en !=3D 0 && wb_buf_flush_en !=3D 1) + return -EINVAL; + + down(&hba->host_sem); + if (!ufshcd_is_user_access_allowed(hba)) { + res =3D -EBUSY; + goto out; + } + + ufshcd_rpm_get_sync(hba); + res =3D ufshcd_wb_toggle_buf_flush(hba, wb_buf_flush_en); + ufshcd_rpm_put_sync(hba); +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); @@ -262,6 +304,7 @@ 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 DEVICE_ATTR_RW(wb_buf_flush_en); =20 static struct attribute *ufs_sysfs_ufshcd_attrs[] =3D { &dev_attr_rpm_lvl.attr, @@ -272,6 +315,7 @@ static struct attribute *ufs_sysfs_ufshcd_attrs[] =3D { &dev_attr_spm_target_link_state.attr, &dev_attr_auto_hibern8.attr, &dev_attr_wb_on.attr, + &dev_attr_wb_buf_flush_en.attr, NULL }; =20 --=20 2.25.1