> it's for "Inactivating all HPB regions" after reboot > > scsi_add_lun()...>ufshpb_issue_umap_all_req(hpb); > > if it is a cold reboot on both host side and UFS device side, it is not > necessary to issue this write buffer. According to you, is ufshpb_issue_umap_all_req used only for host reset? During boottime, the problem is that the hpb is set to the last LUN, write buffer command is sent before sd_probe completes. so, instead of performing unmap, UAC is returned. If ufshpb_issue_umap_all_req is not needed in cold boot, it seems necessary to move it to an appropriate location or remove > > > On Fri, 2021-11-19 at 02:31 +0000, 정요한(JOUNG YOHAN) Mobile SE wrote: > > Hi daejun > > > > Please check ufshpb init flow. > > sending write buffer(0x03) seems spec violation (JESD220 Commands for > > exceptional behavior on UAC, SAM 5r05) before UAC clear (sd_probe). > > Anyway hpb reset query(ufshpb_check_hpb_reset_query) seems sufficient. > > Why do we need to send write buffer? > > > > void ufshpb_init_hpb_lu(struct ufs_hba *hba, struct scsi_device > > *sdev) > > { > > out: > > /* All LUs are initialized */ > > if (atomic_dec_and_test(&hba->ufshpb_dev.slave_conf_cnt)) > > There seems to be a problem with this logic. > > If hpb is set on the last LUN, write buffer command is sent before > > sd_probe completes. > > ufshpb_hpb_lu_prepared(hba); > > } > > > > static void ufshpb_hpb_lu_prepared(struct ufs_hba *hba) { > > > > init_success = !ufshpb_check_hpb_reset_query(hba); > > > > shost_for_each_device(sdev, hba->host) { > > hpb = ufshpb_get_hpb_data(sdev); > > if (!hpb) > > continue; > > > > if (init_success) { > > ufshpb_set_state(hpb, HPB_PRESENT); > > if ((hpb->lu_pinned_end - hpb->lu_pinned_start) > 0) > > queue_work(ufshpb_wq, &hpb->map_work); > > if (!hpb->is_hcm) > > ufshpb_issue_umap_all_req(hpb); > > This seems unnecessary. > > > > } else { > > > > Thanks > > yohan