On Tue, Apr 08, 2025 at 01:14:50PM +0530, MANISH PANDEY wrote:Just for conclusion, why i moved this quirk from ufs-qcom to ufshcd.c is as per Bart's suggestion in patchset https://lore.kernel.org/lkml/c0691392-1523-4863-a722-d4f4640e4e28@xxxxxxx/
On 4/8/2025 12:53 PM, Manivannan Sadhasivam wrote:
On Tue, Apr 08, 2025 at 11:07:58AM +0530, MANISH PANDEY wrote:<< Otherwise, it gives an assumption that this value is universal. >>
On 4/7/2025 12:05 AM, Manivannan Sadhasivam wrote:
On Fri, Apr 04, 2025 at 11:15:39PM +0530, Manish Pandey wrote:Since it's a quirk and may be applicable to other vendors also in future, so
Some UFS devices need additional time in hibern8 mode before exiting,
beyond the negotiated handshaking phase between the host and device.
Introduce a quirk to increase the PA_HIBERN8TIME parameter by 100 µs
to ensure proper hibernation process.
This commit message didn't mention the UFS device for which this quirk is being
applied.
i thought to keep it general.
You cannot make commit message generic. It should precisely describe the change.
Will update in next patch set if required.
>> Signed-off-by: Manish Pandey <quic_mapa@xxxxxxxxxxx>
Agree.. Not needed, will update.>> + int ret;---
drivers/ufs/core/ufshcd.c | 31 +++++++++++++++++++++++++++++++
include/ufs/ufs_quirks.h | 6 ++++++
2 files changed, 37 insertions(+)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 464f13da259a..2b8203fe7b8c 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -278,6 +278,7 @@ static const struct ufs_dev_quirk ufs_fixups[] = {
.model = UFS_ANY_MODEL,
.quirk = UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM |
UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE |
+ UFS_DEVICE_QUIRK_PA_HIBER8TIME |
UFS_DEVICE_QUIRK_RECOVERY_FROM_DL_NAC_ERRORS },
{ .wmanufacturerid = UFS_VENDOR_SKHYNIX,
.model = UFS_ANY_MODEL,
@@ -8384,6 +8385,33 @@ static int ufshcd_quirk_tune_host_pa_tactivate(struct ufs_hba *hba)
return ret;
}
+/**
+ * ufshcd_quirk_override_pa_h8time - Ensures proper adjustment of PA_HIBERN8TIME.
+ * @hba: per-adapter instance
+ *
+ * Some UFS devices require specific adjustments to the PA_HIBERN8TIME parameter
+ * to ensure proper hibernation timing. This function retrieves the current
+ * PA_HIBERN8TIME value and increments it by 100us.
+ */
+static void ufshcd_quirk_override_pa_h8time(struct ufs_hba *hba)
+{
+ u32 pa_h8time = 0;
Why do you need to initialize it?
These values are derived from experiments on Qualcomm SoCs.+
+ ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_HIBERN8TIME),
+ &pa_h8time);
+ if (ret) {
+ dev_err(hba->dev, "Failed to get PA_HIBERN8TIME: %d\n", ret);
+ return;
+ }
+
+ /* Increment by 1 to increase hibernation time by 100 µs */
From where the value of 100us adjustment is coming from?
- Mani
However this is also matching with ufs-exynos.c
Okay. In that case, you should mention that the 100us value is derived from
experiments on Qcom and Samsung SoCs. Otherwise, it gives an assumption that
this value is universal.
- Mani
So with this, should i add this quirk for Qcom only, or should add in
ufshcd.c and make it common for all SoC vendors?
You can add the quirk for both Qcom and Samsung. My comment was about clarifying
it in the kernel doc comments.
- Mani