Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2c5d24c authored by Bao D. Nguyen's avatar Bao D. Nguyen
Browse files

scsi: ufshcd: Allow zero value setting to Auto-Hibernate Timer



The zero value Auto-Hibernate Timer is a valid setting, and it
indicates the Auto-Hibernate feature being disabled. Correctly
support this setting. In addition, when this value is queried
from sysfs, read from the host controller's register and return
that value instead of using the RAM value.

Change-Id: I6ad0e00ae485549cb18f704907149d8a69961e5f
Signed-off-by: default avatarBao D. Nguyen <nguyenb@codeaurora.org>
parent 0ea391ba
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -145,12 +145,19 @@ static u32 ufshcd_us_to_ahit(unsigned int timer)
static ssize_t auto_hibern8_show(struct device *dev,
				 struct device_attribute *attr, char *buf)
{
	u32 ahit;
	struct ufs_hba *hba = dev_get_drvdata(dev);

	if (!ufshcd_is_auto_hibern8_supported(hba))
		return -EOPNOTSUPP;

	return snprintf(buf, PAGE_SIZE, "%d\n", ufshcd_ahit_to_us(hba->ahit));
	pm_runtime_get_sync(hba->dev);
	ufshcd_hold(hba, false);
	ahit = ufshcd_readl(hba, REG_AUTO_HIBERNATE_IDLE_TIMER);
	ufshcd_release(hba);
	pm_runtime_put_sync(hba->dev);

	return scnprintf(buf, PAGE_SIZE, "%d\n", ufshcd_ahit_to_us(ahit));
}

static ssize_t auto_hibern8_store(struct device *dev,
+2 −2
Original line number Diff line number Diff line
@@ -4851,8 +4851,8 @@ void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
{
	unsigned long flags;

	if (!ufshcd_is_auto_hibern8_supported(hba) || !hba->ahit
	    || (hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8))
	if (!ufshcd_is_auto_hibern8_supported(hba) ||
	    (hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8))
		return;

	spin_lock_irqsave(hba->host->host_lock, flags);
+2 −2
Original line number Diff line number Diff line
@@ -4147,8 +4147,8 @@ void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
{
	unsigned long flags;

	if (!ufshcd_is_auto_hibern8_supported(hba) || !hba->ahit
	    || (hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8))
	if (!ufshcd_is_auto_hibern8_supported(hba) ||
	    (hba->quirks & UFSHCD_QUIRK_BROKEN_AUTO_HIBERN8))
		return;

	spin_lock_irqsave(hba->host->host_lock, flags);