scsi: ufs: handle errors from PHY_ADAPTER_ERROR register
PATCH 8/11 scsi: ufs: handle errors from PHY_ADAPTER_ERROR register
From: Dolev Raviv <[email protected]>
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 <[email protected]>
Signed-off-by Subhash Jadavani <[email protected]>
--- drivers/scsi/ufs/ufshcd.c | 11 +++++++++++ drivers/scsi/ufs/ufshci.h | 1 + 2 files changed, 12 insertions(+)
drivers/scsi/ufs/ufshcd.c +11 -0
@@ -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 )
drivers/scsi/ufs/ufshci.h +1 -0
@@ -166,6 +166,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)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project