scsi: ufs: handle errors from PHY_ADAPTER_ERROR register
The PHY_ADAPTER_ERROR status register indicates PHY lane errors reported by the M-PHY layer. In some occasions the controller can recover from such errors. When the error is not recoverable, a stuck DB error will occur. Since the stuck DB error is spotted separately, no action other than clearing the register is necessary. Signed-off-by: Dolev Raviv <draviv@codeaurora.org> Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
7caf489b99
commit
fb7b45f046
|
@ -4215,6 +4215,17 @@ static void ufshcd_update_uic_error(struct ufs_hba *hba)
|
|||
{
|
||||
u32 reg;
|
||||
|
||||
/* PHY layer lane error */
|
||||
reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER);
|
||||
/* Ignore LINERESET indication, as this is not an error */
|
||||
if ((reg & UIC_PHY_ADAPTER_LAYER_ERROR) &&
|
||||
(reg & UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK))
|
||||
/*
|
||||
* To know whether this error is fatal or not, DB timeout
|
||||
* must be checked but this error is handled separately.
|
||||
*/
|
||||
dev_dbg(hba->dev, "%s: UIC Lane error reported\n", __func__);
|
||||
|
||||
/* PA_INIT_ERROR is fatal and needs UIC reset */
|
||||
reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_DATA_LINK_LAYER);
|
||||
if (reg & UIC_DATA_LINK_LAYER_ERROR_PA_INIT)
|
||||
|
|
|
@ -168,6 +168,7 @@ enum {
|
|||
/* UECPA - Host UIC Error Code PHY Adapter Layer 38h */
|
||||
#define UIC_PHY_ADAPTER_LAYER_ERROR UFS_BIT(31)
|
||||
#define UIC_PHY_ADAPTER_LAYER_ERROR_CODE_MASK 0x1F
|
||||
#define UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK 0xF
|
||||
|
||||
/* UECDL - Host UIC Error Code Data Link Layer 3Ch */
|
||||
#define UIC_DATA_LINK_LAYER_ERROR UFS_BIT(31)
|
||||
|
|
Loading…
Reference in New Issue