>From: Bean Huo <beanhuo@xxxxxxxxxx> > >"When the device is powered off by the host, the device may restore L2P map data >upon power up or build from the host’s HPB READ command. In case device powered >up and lost HPB information, device can signal to the host through HPB Sense data, >by setting HPB Operation as ‘2’ which will inform the host that device reset HPB >information." > >This patch is to clean up the handler and make the intent of this handler more >readable, no functional change. > >Signed-off-by: Bean Huo <beanhuo@xxxxxxxxxx> Reviewed-by: Keoseong Park <keosung.park@xxxxxxxxxxx> Best Regards, Keoseong Park >--- > drivers/scsi/ufs/ufshpb.c | 35 +++++++++++++++++++++++------------ > 1 file changed, 23 insertions(+), 12 deletions(-) > >diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c >index 167643969165..f1f30d4c3d65 100644 >--- a/drivers/scsi/ufs/ufshpb.c >+++ b/drivers/scsi/ufs/ufshpb.c >@@ -1225,7 +1225,10 @@ static void ufshpb_rsp_req_region_update(struct ufshpb_lu *hpb, > queue_work(ufshpb_wq, &hpb->map_work); > } > >-static void ufshpb_dev_reset_handler(struct ufshpb_lu *hpb) >+/* >+ * Set the flags of all active regions to RGN_FLAG_UPDATE to let host side reload L2P entries later >+ */ >+static void ufshpb_set_regions_update(struct ufshpb_lu *hpb) > { > struct victim_select_info *lru_info = &hpb->lru_info; > struct ufshpb_region *rgn; >@@ -1239,6 +1242,24 @@ static void ufshpb_dev_reset_handler(struct ufshpb_lu *hpb) > spin_unlock_irqrestore(&hpb->rgn_state_lock, flags); > } > >+static void ufshpb_dev_reset_handler(struct ufs_hba *hba) >+{ >+ struct scsi_device *sdev; >+ struct ufshpb_lu *hpb; >+ >+ __shost_for_each_device(sdev, hba->host) { >+ hpb = ufshpb_get_hpb_data(sdev); >+ if (hpb && hpb->is_hcm) >+ /* >+ * For the HPB host mode, in case device powered up and lost HPB >+ * information, we will set the region flag to be RGN_FLAG_UPDATE, >+ * it will let host reload its L2P entries(re-activate the region >+ * in the UFS device). >+ */ >+ ufshpb_set_regions_update(hpb); >+ } >+} >+ > /* > * This function will parse recommended active subregion information in sense > * data field of response UPIU with SAM_STAT_GOOD state. >@@ -1313,17 +1334,7 @@ void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) > case HPB_RSP_DEV_RESET: > dev_warn(&hpb->sdev_ufs_lu->sdev_dev, > "UFS device lost HPB information during PM.\n"); >- >- if (hpb->is_hcm) { >- struct scsi_device *sdev; >- >- __shost_for_each_device(sdev, hba->host) { >- struct ufshpb_lu *h = sdev->hostdata; >- >- if (h) >- ufshpb_dev_reset_handler(h); >- } >- } >+ ufshpb_dev_reset_handler(hba); > > break; > default: >-- >2.34.1 > >