Lines Matching refs:hba

25 static int ufs_hisi_check_hibern8(struct ufs_hba *hba)
33 err = ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(MPHY_TX_FSM_STATE, 0),
35 err |= ufshcd_dme_get(hba,
50 err = ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(MPHY_TX_FSM_STATE, 0),
52 err |= ufshcd_dme_get(hba,
57 dev_err(hba->dev, "%s: unable to get TX_FSM_STATE, err %d\n",
62 dev_err(hba->dev, "%s: invalid TX_FSM_STATE, lane0 = %d, lane1 = %d\n",
69 static void ufs_hisi_clk_init(struct ufs_hba *hba)
71 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
83 static void ufs_hisi_soc_init(struct ufs_hba *hba)
85 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
140 static int ufs_hisi_link_startup_pre_change(struct ufs_hba *hba)
142 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
148 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), 0x1);
150 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x156A, 0x0), 0x2);
152 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8114, 0x0), 0x1);
154 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8121, 0x0), 0x2D);
156 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8122, 0x0), 0x1);
160 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8127, 0x0), 0x98);
162 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8128, 0x0), 0x1);
166 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
168 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800D, 0x4), 0x58);
170 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800D, 0x5), 0x58);
172 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800E, 0x4), 0xB);
174 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800E, 0x5), 0xB);
176 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8009, 0x4), 0x1);
178 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8009, 0x5), 0x1);
180 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
182 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8113, 0x0), 0x1);
183 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
187 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0092, 0x4), 0xA);
189 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0092, 0x5), 0xA);
191 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008f, 0x4), 0xA);
193 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008f, 0x5), 0xA);
196 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008F, 0x4), 0x7);
198 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008F, 0x5), 0x7);
202 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0095, 0x4), 0x4F);
204 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0095, 0x5), 0x4F);
206 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0094, 0x4), 0x4F);
208 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0094, 0x5), 0x4F);
210 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008B, 0x4), 0x4F);
212 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008B, 0x5), 0x4F);
214 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x000F, 0x0), 0x5);
216 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x000F, 0x1), 0x5);
218 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
220 ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), &value);
222 dev_info(hba->dev,
226 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), 0x0);
227 err = ufs_hisi_check_hibern8(hba);
229 dev_err(hba->dev, "ufs_hisi_check_hibern8 error\n");
232 ufshcd_writel(hba, UFS_HCLKDIV_NORMAL_VALUE, UFS_REG_HCLKDIV);
235 reg = ufshcd_readl(hba, REG_AUTO_HIBERNATE_IDLE_TIMER);
237 ufshcd_writel(hba, reg, REG_AUTO_HIBERNATE_IDLE_TIMER);
240 ufshcd_disable_host_tx_lcc(hba);
242 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), 0x0);
243 ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), &value);
246 dev_info(hba->dev, "WARN: close VS_Mk2ExtnSupport failed\n");
252 static int ufs_hisi_link_startup_post_change(struct ufs_hba *hba)
254 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
257 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2044), 0x0);
259 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2045), 0x0);
261 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2040), 0x9);
270 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd09a), 0x80000000);
272 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd09c), 0x00000005);
277 static int ufs_hisi_link_startup_notify(struct ufs_hba *hba,
284 err = ufs_hisi_link_startup_pre_change(hba);
287 err = ufs_hisi_link_startup_post_change(hba);
301 static void ufs_hisi_pwr_change_pre_change(struct ufs_hba *hba)
303 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
311 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0xD0A0), 0x13);
313 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1552), 0x4f);
315 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1554), 0x4f);
317 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1556), 0x4f);
319 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x15a7), 0xA);
321 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x15a8), 0xA);
322 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xd085, 0x0), 0x01);
325 if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME) {
328 ufshcd_dme_set(hba, UIC_ARG_MIB(0xD0A0), 0x10);
330 ufshcd_dme_set(hba, UIC_ARG_MIB(0x1556), 0x48);
334 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15A8), 0x1);
336 ufshcd_dme_set(hba, UIC_ARG_MIB(0x155c), 0x0);
338 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b0), SZ_8K - 1);
340 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b1), SZ_64K - 1);
342 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b2), SZ_32K - 1);
344 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd041), SZ_8K - 1);
346 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd042), SZ_64K - 1);
348 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd043), SZ_32K - 1);
350 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b3), SZ_8K - 1);
352 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b4), SZ_64K - 1);
354 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b5), SZ_32K - 1);
356 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd044), SZ_8K - 1);
358 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd045), SZ_64K - 1);
360 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd046), SZ_32K - 1);
363 static int ufs_hisi_pwr_change_notify(struct ufs_hba *hba,
372 dev_err(hba->dev,
384 dev_err(hba->dev,
389 ufs_hisi_pwr_change_pre_change(hba);
407 static int ufs_hisi_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
410 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
433 static int ufs_hisi_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
435 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
451 struct device *dev = host->hba->dev;
459 static void ufs_hisi_set_pm_lvl(struct ufs_hba *hba)
461 hba->rpm_lvl = UFS_PM_LVL_1;
462 hba->spm_lvl = UFS_PM_LVL_3;
467 * @hba: host controller instance
469 static int ufs_hisi_init_common(struct ufs_hba *hba)
472 struct device *dev = hba->dev;
479 host->hba = hba;
480 ufshcd_set_variant(hba, host);
489 ufs_hisi_set_pm_lvl(hba);
498 ufshcd_set_variant(hba, NULL);
502 static int ufs_hi3660_init(struct ufs_hba *hba)
505 struct device *dev = hba->dev;
507 ret = ufs_hisi_init_common(hba);
513 ufs_hisi_clk_init(hba);
515 ufs_hisi_soc_init(hba);
520 static int ufs_hi3670_init(struct ufs_hba *hba)
523 struct device *dev = hba->dev;
526 ret = ufs_hisi_init_common(hba);
532 ufs_hisi_clk_init(hba);
534 ufs_hisi_soc_init(hba);
537 host = ufshcd_get_variant(hba);
580 struct ufs_hba *hba = platform_get_drvdata(pdev);
582 ufshcd_remove(hba);