mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 05:17:10 +09:00
FROMGIT: ufs: add a quirk not to use default unipro timeout values
Unipro specification says attribute IDs of the following
thing are vendor-specific values, so some SoCs could have
no regions at the defined addresses
- DME_LocalFC0ProtectionTimeOutVal
- DME_LocalTC0ReplayTimeOutVal
- DME_LocalAFC0ReqTimeOutVal
The following things should be set considering the compatibility
between host and device, so those values must not be fixed and
you could use reset values or vendor specific values
- PA_PWRMODEUSERDATA0
- PA_PWRMODEUSERDATA1
- PA_PWRMODEUSERDATA2
- PA_PWRMODEUSERDATA3
- PA_PWRMODEUSERDATA4
- PA_PWRMODEUSERDATA5
Bug: 163478167
Change-Id: Ic56ea3d8182bc27899d17fb45370bd60ce900120
(cherry picked from commit b1d0d2eb89
https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.12/scsi-queue)
Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
40754f3a19
commit
771d2d2612
@@ -4196,25 +4196,27 @@ static int ufshcd_change_power_mode(struct ufs_hba *hba,
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_HSSERIES),
|
||||
pwr_mode->hs_rate);
|
||||
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA0),
|
||||
DL_FC0ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA1),
|
||||
DL_TC0ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA2),
|
||||
DL_AFC0ReqTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA3),
|
||||
DL_FC1ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA4),
|
||||
DL_TC1ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA5),
|
||||
DL_AFC1ReqTimeOutVal_Default);
|
||||
if (!(hba->quirks & UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING)) {
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA0),
|
||||
DL_FC0ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA1),
|
||||
DL_TC0ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA2),
|
||||
DL_AFC0ReqTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA3),
|
||||
DL_FC1ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA4),
|
||||
DL_TC1ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA5),
|
||||
DL_AFC1ReqTimeOutVal_Default);
|
||||
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalFC0ProtectionTimeOutVal),
|
||||
DL_FC0ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalTC0ReplayTimeOutVal),
|
||||
DL_TC0ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalAFC0ReqTimeOutVal),
|
||||
DL_AFC0ReqTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalFC0ProtectionTimeOutVal),
|
||||
DL_FC0ProtectionTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalTC0ReplayTimeOutVal),
|
||||
DL_TC0ReplayTimeOutVal_Default);
|
||||
ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalAFC0ReqTimeOutVal),
|
||||
DL_AFC0ReqTimeOutVal_Default);
|
||||
}
|
||||
|
||||
ret = ufshcd_uic_change_pwr_mode(hba, pwr_mode->pwr_rx << 4
|
||||
| pwr_mode->pwr_tx);
|
||||
|
||||
@@ -559,6 +559,12 @@ enum ufshcd_quirks {
|
||||
*/
|
||||
UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL = 1 << 12,
|
||||
|
||||
/*
|
||||
* This quirk needs to disable unipro timeout values
|
||||
* before power mode change
|
||||
*/
|
||||
UFSHCD_QUIRK_SKIP_DEF_UNIPRO_TIMEOUT_SETTING = 1 << 13,
|
||||
|
||||
/*
|
||||
* This quirk needs to be enabled if the host controller supports inline
|
||||
* encryption, but it needs to initialize the crypto capabilities in a
|
||||
|
||||
Reference in New Issue
Block a user