[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID:
<DM6PR04MB6575F7A24AB09B91A4DC5A37FCE02@DM6PR04MB6575.namprd04.prod.outlook.com>
Date: Thu, 23 Jan 2025 20:05:28 +0000
From: Avri Altman <Avri.Altman@....com>
To: Avri Altman <Avri.Altman@....com>, "Martin K . Petersen"
<martin.petersen@...cle.com>
CC: "linux-scsi@...r.kernel.org" <linux-scsi@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, Manivannan
Sadhasivam <manisadhasivam.linux@...il.com>, Bart Van Assche
<bvanassche@....org>, Can Guo <cang@....qualcomm.com>
Subject: RE: [PATCH v2] scsi: ufs: Move clock gating sysfs entries to
ufs-sysfs.c
Martin,
Please ignore this.
I want to bundle it with another clock_gating fix.
Thanks,
Avri
> This commit moves the clock gating sysfs entries from `ufshcd.c` to
> `ufs-sysfs.c` where it belongs. This change improves the organization of
> the code by consolidating all sysfs-related code into a single file.
>
> The `clkgate_enable` and `clkgate_delay_ms` attributes are now defined
> and managed in `ufs-sysfs.c`, and the corresponding initialization and
> removal functions in `ufshcd.c` are removed.
>
> No functional change.
>
> Signed-off-by: Avri Altman <avri.altman@....com>
>
> ---
> Changes compared to v1:
> - Use clang-format instead of checkpatch to fix coding style (Bart)
> - Use kstrbool instead of kstrtou32 (Bart)
> ---
> drivers/ufs/core/ufs-sysfs.c | 58 ++++++++++++++++++++++++
> drivers/ufs/core/ufshcd.c | 85 ------------------------------------
> 2 files changed, 58 insertions(+), 85 deletions(-)
>
> diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c
> index 796e37a1d859..7183709603ae 100644
> --- a/drivers/ufs/core/ufs-sysfs.c
> +++ b/drivers/ufs/core/ufs-sysfs.c
> @@ -458,6 +458,60 @@ static ssize_t pm_qos_enable_store(struct device
> *dev,
> return count;
> }
>
> +static ssize_t clkgate_enable_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->clk_gating.is_enabled);
> +}
> +
> +static ssize_t clkgate_enable_store(struct device *dev,
> + struct device_attribute *attr,
> + const char *buf, size_t count)
> +{
> + struct ufs_hba *hba = dev_get_drvdata(dev);
> + bool value;
> +
> + if (kstrtobool(buf, &value))
> + return -EINVAL;
> +
> + guard(spinlock_irqsave)(&hba->clk_gating.lock);
> +
> + if (value == hba->clk_gating.is_enabled)
> + return count;
> +
> + if (value)
> + ufshcd_release(hba);
> + else
> + hba->clk_gating.active_reqs++;
> +
> + hba->clk_gating.is_enabled = value;
> +
> + return count;
> +}
> +
> +static ssize_t clkgate_delay_ms_show(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + struct ufs_hba *hba = dev_get_drvdata(dev);
> +
> + return sysfs_emit(buf, "%lu\n", hba->clk_gating.delay_ms);
> +}
> +
> +static ssize_t clkgate_delay_ms_store(struct device *dev,
> + struct device_attribute *attr,
> + const char *buf, size_t count)
> +{
> + unsigned long value;
> +
> + if (kstrtoul(buf, 0, &value))
> + return -EINVAL;
> +
> + ufshcd_clkgate_delay_set(dev, value);
> + return count;
> +}
> +
> static DEVICE_ATTR_RW(rpm_lvl);
> static DEVICE_ATTR_RO(rpm_target_dev_state);
> static DEVICE_ATTR_RO(rpm_target_link_state);
> @@ -470,6 +524,8 @@ static DEVICE_ATTR_RW(enable_wb_buf_flush);
> static DEVICE_ATTR_RW(wb_flush_threshold);
> static DEVICE_ATTR_RW(rtc_update_ms);
> static DEVICE_ATTR_RW(pm_qos_enable);
> +static DEVICE_ATTR_RW(clkgate_delay_ms);
> +static DEVICE_ATTR_RW(clkgate_enable);
>
> static struct attribute *ufs_sysfs_ufshcd_attrs[] = {
> &dev_attr_rpm_lvl.attr,
> @@ -484,6 +540,8 @@ static struct attribute *ufs_sysfs_ufshcd_attrs[] = {
> &dev_attr_wb_flush_threshold.attr,
> &dev_attr_rtc_update_ms.attr,
> &dev_attr_pm_qos_enable.attr,
> + &dev_attr_clkgate_delay_ms.attr,
> + &dev_attr_clkgate_enable.attr,
> NULL
> };
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index f6c38cf10382..901aef52a452 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -2019,14 +2019,6 @@ void ufshcd_release(struct ufs_hba *hba)
> }
> EXPORT_SYMBOL_GPL(ufshcd_release);
>
> -static ssize_t ufshcd_clkgate_delay_show(struct device *dev,
> - struct device_attribute *attr, char *buf)
> -{
> - struct ufs_hba *hba = dev_get_drvdata(dev);
> -
> - return sysfs_emit(buf, "%lu\n", hba->clk_gating.delay_ms);
> -}
> -
> void ufshcd_clkgate_delay_set(struct device *dev, unsigned long value)
> {
> struct ufs_hba *hba = dev_get_drvdata(dev);
> @@ -2036,79 +2028,6 @@ void ufshcd_clkgate_delay_set(struct device *dev,
> unsigned long value)
> }
> EXPORT_SYMBOL_GPL(ufshcd_clkgate_delay_set);
>
> -static ssize_t ufshcd_clkgate_delay_store(struct device *dev,
> - struct device_attribute *attr, const char *buf, size_t count)
> -{
> - unsigned long value;
> -
> - if (kstrtoul(buf, 0, &value))
> - return -EINVAL;
> -
> - ufshcd_clkgate_delay_set(dev, value);
> - return count;
> -}
> -
> -static ssize_t ufshcd_clkgate_enable_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->clk_gating.is_enabled);
> -}
> -
> -static ssize_t ufshcd_clkgate_enable_store(struct device *dev,
> - struct device_attribute *attr, const char *buf, size_t count)
> -{
> - struct ufs_hba *hba = dev_get_drvdata(dev);
> - u32 value;
> -
> - if (kstrtou32(buf, 0, &value))
> - return -EINVAL;
> -
> - value = !!value;
> -
> - guard(spinlock_irqsave)(&hba->clk_gating.lock);
> -
> - if (value == hba->clk_gating.is_enabled)
> - return count;
> -
> - if (value)
> - __ufshcd_release(hba);
> - else
> - hba->clk_gating.active_reqs++;
> -
> - hba->clk_gating.is_enabled = value;
> -
> - return count;
> -}
> -
> -static void ufshcd_init_clk_gating_sysfs(struct ufs_hba *hba)
> -{
> - hba->clk_gating.delay_attr.show = ufshcd_clkgate_delay_show;
> - hba->clk_gating.delay_attr.store = ufshcd_clkgate_delay_store;
> - sysfs_attr_init(&hba->clk_gating.delay_attr.attr);
> - hba->clk_gating.delay_attr.attr.name = "clkgate_delay_ms";
> - hba->clk_gating.delay_attr.attr.mode = 0644;
> - if (device_create_file(hba->dev, &hba->clk_gating.delay_attr))
> - dev_err(hba->dev, "Failed to create sysfs for clkgate_delay\n");
> -
> - hba->clk_gating.enable_attr.show = ufshcd_clkgate_enable_show;
> - hba->clk_gating.enable_attr.store = ufshcd_clkgate_enable_store;
> - sysfs_attr_init(&hba->clk_gating.enable_attr.attr);
> - hba->clk_gating.enable_attr.attr.name = "clkgate_enable";
> - hba->clk_gating.enable_attr.attr.mode = 0644;
> - if (device_create_file(hba->dev, &hba->clk_gating.enable_attr))
> - dev_err(hba->dev, "Failed to create sysfs for
> clkgate_enable\n");
> -}
> -
> -static void ufshcd_remove_clk_gating_sysfs(struct ufs_hba *hba)
> -{
> - if (hba->clk_gating.delay_attr.attr.name)
> - device_remove_file(hba->dev, &hba->clk_gating.delay_attr);
> - if (hba->clk_gating.enable_attr.attr.name)
> - device_remove_file(hba->dev, &hba->clk_gating.enable_attr);
> -}
> -
> static void ufshcd_init_clk_gating(struct ufs_hba *hba)
> {
> if (!ufshcd_is_clkgating_allowed(hba))
> @@ -2126,8 +2045,6 @@ static void ufshcd_init_clk_gating(struct ufs_hba
> *hba)
> "ufs_clk_gating_%d", WQ_MEM_RECLAIM | WQ_HIGHPRI,
> hba->host->host_no);
>
> - ufshcd_init_clk_gating_sysfs(hba);
> -
> hba->clk_gating.is_enabled = true;
> hba->clk_gating.is_initialized = true;
> }
> @@ -2137,8 +2054,6 @@ static void ufshcd_exit_clk_gating(struct ufs_hba
> *hba)
> if (!hba->clk_gating.is_initialized)
> return;
>
> - ufshcd_remove_clk_gating_sysfs(hba);
> -
> /* Ungate the clock if necessary. */
> ufshcd_hold(hba);
> hba->clk_gating.is_initialized = false;
> --
> 2.25.1
Powered by blists - more mailing lists