Lines Matching refs:hba
23 static int ufs_hisi_check_hibern8(struct ufs_hba *hba)
31 err = ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(MPHY_TX_FSM_STATE, 0),
33 err |= ufshcd_dme_get(hba,
48 err = ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(MPHY_TX_FSM_STATE, 0),
50 err |= ufshcd_dme_get(hba,
55 dev_err(hba->dev, "%s: unable to get TX_FSM_STATE, err %d\n",
60 dev_err(hba->dev, "%s: invalid TX_FSM_STATE, lane0 = %d, lane1 = %d\n",
67 static void ufs_hisi_clk_init(struct ufs_hba *hba)
69 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
81 static void ufs_hisi_soc_init(struct ufs_hba *hba)
83 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
138 static int ufs_hisi_link_startup_pre_change(struct ufs_hba *hba)
140 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
146 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), 0x1);
148 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x156A, 0x0), 0x2);
150 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8114, 0x0), 0x1);
152 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8121, 0x0), 0x2D);
154 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8122, 0x0), 0x1);
158 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8127, 0x0), 0x98);
160 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8128, 0x0), 0x1);
164 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
166 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800D, 0x4), 0x58);
168 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800D, 0x5), 0x58);
170 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800E, 0x4), 0xB);
172 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x800E, 0x5), 0xB);
174 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8009, 0x4), 0x1);
176 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8009, 0x5), 0x1);
178 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
180 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x8113, 0x0), 0x1);
181 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
185 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0092, 0x4), 0xA);
187 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0092, 0x5), 0xA);
189 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008f, 0x4), 0xA);
191 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008f, 0x5), 0xA);
194 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008F, 0x4), 0x7);
196 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008F, 0x5), 0x7);
200 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0095, 0x4), 0x4F);
202 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0095, 0x5), 0x4F);
204 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0094, 0x4), 0x4F);
206 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x0094, 0x5), 0x4F);
208 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008B, 0x4), 0x4F);
210 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x008B, 0x5), 0x4F);
212 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x000F, 0x0), 0x5);
214 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x000F, 0x1), 0x5);
216 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD085, 0x0), 0x1);
218 ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), &value);
220 dev_info(hba->dev,
224 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0C1, 0x0), 0x0);
225 err = ufs_hisi_check_hibern8(hba);
227 dev_err(hba->dev, "ufs_hisi_check_hibern8 error\n");
230 ufshcd_writel(hba, UFS_HCLKDIV_NORMAL_VALUE, UFS_REG_HCLKDIV);
233 reg = ufshcd_readl(hba, REG_AUTO_HIBERNATE_IDLE_TIMER);
235 ufshcd_writel(hba, reg, REG_AUTO_HIBERNATE_IDLE_TIMER);
238 ufshcd_disable_host_tx_lcc(hba);
240 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), 0x0);
241 ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), &value);
244 dev_info(hba->dev, "WARN: close VS_Mk2ExtnSupport failed\n");
250 static int ufs_hisi_link_startup_post_change(struct ufs_hba *hba)
252 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
255 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2044), 0x0);
257 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2045), 0x0);
259 ufshcd_dme_set(hba, UIC_ARG_MIB(0x2040), 0x9);
268 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd09a), 0x80000000);
270 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd09c), 0x00000005);
275 static int ufs_hisi_link_startup_notify(struct ufs_hba *hba,
282 err = ufs_hisi_link_startup_pre_change(hba);
285 err = ufs_hisi_link_startup_post_change(hba);
310 static void ufs_hisi_pwr_change_pre_change(struct ufs_hba *hba)
312 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
320 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0xD0A0), 0x13);
322 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1552), 0x4f);
324 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1554), 0x4f);
326 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x1556), 0x4f);
328 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x15a7), 0xA);
330 ufshcd_dme_set(hba, UIC_ARG_MIB((u32)0x15a8), 0xA);
331 ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xd085, 0x0), 0x01);
334 if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME) {
337 ufshcd_dme_set(hba, UIC_ARG_MIB(0xD0A0), 0x10);
339 ufshcd_dme_set(hba, UIC_ARG_MIB(0x1556), 0x48);
343 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15A8), 0x1);
345 ufshcd_dme_set(hba, UIC_ARG_MIB(0x155c), 0x0);
347 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b0), 8191);
349 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b1), 65535);
351 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b2), 32767);
353 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd041), 8191);
355 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd042), 65535);
357 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd043), 32767);
359 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b3), 8191);
361 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b4), 65535);
363 ufshcd_dme_set(hba, UIC_ARG_MIB(0x15b5), 32767);
365 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd044), 8191);
367 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd045), 65535);
369 ufshcd_dme_set(hba, UIC_ARG_MIB(0xd046), 32767);
372 static int ufs_hisi_pwr_change_notify(struct ufs_hba *hba,
381 dev_err(hba->dev,
393 dev_err(hba->dev,
398 ufs_hisi_pwr_change_pre_change(hba);
410 static int ufs_hisi_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
412 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
432 static int ufs_hisi_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
434 struct ufs_hisi_host *host = ufshcd_get_variant(hba);
450 struct device *dev = host->hba->dev;
458 static void ufs_hisi_set_pm_lvl(struct ufs_hba *hba)
460 hba->rpm_lvl = UFS_PM_LVL_1;
461 hba->spm_lvl = UFS_PM_LVL_3;
466 * @hba: host controller instance
468 static int ufs_hisi_init_common(struct ufs_hba *hba)
471 struct device *dev = hba->dev;
478 host->hba = hba;
479 ufshcd_set_variant(hba, host);
488 ufs_hisi_set_pm_lvl(hba);
497 ufshcd_set_variant(hba, NULL);
501 static int ufs_hi3660_init(struct ufs_hba *hba)
504 struct device *dev = hba->dev;
506 ret = ufs_hisi_init_common(hba);
512 ufs_hisi_clk_init(hba);
514 ufs_hisi_soc_init(hba);
519 static int ufs_hi3670_init(struct ufs_hba *hba)
522 struct device *dev = hba->dev;
525 ret = ufs_hisi_init_common(hba);
531 ufs_hisi_clk_init(hba);
533 ufs_hisi_soc_init(hba);
536 host = ufshcd_get_variant(hba);
579 struct ufs_hba *hba = platform_get_drvdata(pdev);
581 ufshcd_remove(hba);