From: Bart Van Assche bvanassche@acm.org
[ Upstream commit fb1f4568346153d2f80fdb4ffcfa0cf4fb257d3c ]
Some Kioxia UFS 4 devices do not support the qTimestamp attribute. Set the UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT for these devices such that no error messages appear in the kernel log about failures to set the qTimestamp attribute.
Signed-off-by: Bart Van Assche bvanassche@acm.org Reviewed-by: Avri Altman avri.altman@sandisk.com Tested-by: Nitin Rawat quic_nitirawa@quicinc.com # on SM8650-QRD Reviewed-by: Nitin Rawat quic_nitirawa@quicinc.com Reviewed-by: Peter Wang peter.wang@mediatek.com Reviewed-by: Manivannan Sadhasivam mani@kernel.org Message-ID: 20250909190614.3531435-1-bvanassche@acm.org Signed-off-by: Martin K. Petersen martin.petersen@oracle.com Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
YES. The change adds a targeted quirk for the Kioxia `THGJFJT1E45BATP` device (`drivers/ufs/core/ufshcd.c:316`) that prevents the core driver from issuing the qTimestamp write when the device advertises that the attribute is unsupported (`drivers/ufs/core/ufshcd.c:8799`). Without it, every link bring-up or reset hits `ufshcd_set_timestamp_attr()` and emits a `dev_err` because the write reliably fails, so users see recurring kernel log noise on affected hardware. Introducing `UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT` (`include/ufs/ufs_quirks.h:117`) is mechanically simple, does not alter behaviour for other devices, and cleanly gates the existing code path via the existing quirk plumbing, making the risk of regression very low. Because it fixes a user-visible malfunction (persistent error messages) on shipping UFS 4 hardware and is tightly scoped with no architectural fallout, it fits stable backport criteria well. A natural follow-up is to validate on the affected hardware that the spurious log entries disappear after backporting.
drivers/ufs/core/ufshcd.c | 6 +++++- include/ufs/ufs_quirks.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 78d3f0ee16d84..1907c0f6eda0e 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -316,6 +316,9 @@ static const struct ufs_dev_quirk ufs_fixups[] = { { .wmanufacturerid = UFS_VENDOR_TOSHIBA, .model = "THGLF2G9D8KBADG", .quirk = UFS_DEVICE_QUIRK_PA_TACTIVATE }, + { .wmanufacturerid = UFS_VENDOR_TOSHIBA, + .model = "THGJFJT1E45BATP", + .quirk = UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT }, {} };
@@ -8794,7 +8797,8 @@ static void ufshcd_set_timestamp_attr(struct ufs_hba *hba) struct ufs_dev_info *dev_info = &hba->dev_info; struct utp_upiu_query_v4_0 *upiu_data;
- if (dev_info->wspecversion < 0x400) + if (dev_info->wspecversion < 0x400 || + hba->dev_quirks & UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT) return;
ufshcd_dev_man_lock(hba); diff --git a/include/ufs/ufs_quirks.h b/include/ufs/ufs_quirks.h index f52de5ed1b3b6..83563247c36cb 100644 --- a/include/ufs/ufs_quirks.h +++ b/include/ufs/ufs_quirks.h @@ -113,4 +113,7 @@ struct ufs_dev_quirk { */ #define UFS_DEVICE_QUIRK_PA_HIBER8TIME (1 << 12)
+/* Some UFS 4 devices do not support the qTimestamp attribute */ +#define UFS_DEVICE_QUIRK_NO_TIMESTAMP_SUPPORT (1 << 13) + #endif /* UFS_QUIRKS_H_ */