Lines Matching full:pcr
19 static u8 rts5260_get_ic_version(struct rtsx_pcr *pcr) in rts5260_get_ic_version() argument
23 rtsx_pci_read_register(pcr, DUMMY_REG_RESET_0, &val); in rts5260_get_ic_version()
27 static void rts5260_fill_driving(struct rtsx_pcr *pcr, u8 voltage) in rts5260_fill_driving() argument
45 drive_sel = pcr->sd30_drive_sel_3v3; in rts5260_fill_driving()
48 drive_sel = pcr->sd30_drive_sel_1v8; in rts5260_fill_driving()
51 rtsx_pci_write_register(pcr, SD30_CLK_DRIVE_SEL, in rts5260_fill_driving()
54 rtsx_pci_write_register(pcr, SD30_CMD_DRIVE_SEL, in rts5260_fill_driving()
57 rtsx_pci_write_register(pcr, SD30_DAT_DRIVE_SEL, in rts5260_fill_driving()
61 static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr) in rtsx_base_fetch_vendor_settings() argument
63 struct pci_dev *pdev = pcr->pci; in rtsx_base_fetch_vendor_settings()
67 pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1, reg); in rtsx_base_fetch_vendor_settings()
70 pcr_dbg(pcr, "skip fetch vendor setting\n"); in rtsx_base_fetch_vendor_settings()
74 pcr->aspm_en = rtsx_reg_to_aspm(reg); in rtsx_base_fetch_vendor_settings()
75 pcr->sd30_drive_sel_1v8 = rtsx_reg_to_sd30_drive_sel_1v8(reg); in rtsx_base_fetch_vendor_settings()
76 pcr->card_drive_sel &= 0x3F; in rtsx_base_fetch_vendor_settings()
77 pcr->card_drive_sel |= rtsx_reg_to_card_drive_sel(reg); in rtsx_base_fetch_vendor_settings()
80 pcr_dbg(pcr, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2, reg); in rtsx_base_fetch_vendor_settings()
82 pcr->extra_caps |= EXTRA_CAPS_NO_MMC; in rtsx_base_fetch_vendor_settings()
83 pcr->sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg); in rtsx_base_fetch_vendor_settings()
85 pcr->flags |= PCR_REVERSE_SOCKET; in rtsx_base_fetch_vendor_settings()
88 static int rtsx_base_enable_auto_blink(struct rtsx_pcr *pcr) in rtsx_base_enable_auto_blink() argument
90 return rtsx_pci_write_register(pcr, OLT_LED_CTL, in rtsx_base_enable_auto_blink()
94 static int rtsx_base_disable_auto_blink(struct rtsx_pcr *pcr) in rtsx_base_disable_auto_blink() argument
96 return rtsx_pci_write_register(pcr, OLT_LED_CTL, in rtsx_base_disable_auto_blink()
100 static int rts5260_turn_on_led(struct rtsx_pcr *pcr) in rts5260_turn_on_led() argument
102 return rtsx_pci_write_register(pcr, RTS5260_REG_GPIO_CTL0, in rts5260_turn_on_led()
106 static int rts5260_turn_off_led(struct rtsx_pcr *pcr) in rts5260_turn_off_led() argument
108 return rtsx_pci_write_register(pcr, RTS5260_REG_GPIO_CTL0, in rts5260_turn_off_led()
164 static int sd_set_sample_push_timing_sd30(struct rtsx_pcr *pcr) in sd_set_sample_push_timing_sd30() argument
166 rtsx_pci_write_register(pcr, SD_CFG1, SD_MODE_SELECT_MASK in sd_set_sample_push_timing_sd30()
168 rtsx_pci_write_register(pcr, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ); in sd_set_sample_push_timing_sd30()
169 rtsx_pci_write_register(pcr, CARD_CLK_SOURCE, 0xFF, in sd_set_sample_push_timing_sd30()
171 rtsx_pci_write_register(pcr, CLK_CTL, CLK_LOW_FREQ, 0); in sd_set_sample_push_timing_sd30()
176 static int rts5260_card_power_on(struct rtsx_pcr *pcr, int card) in rts5260_card_power_on() argument
178 struct rtsx_cr_option *option = &pcr->option; in rts5260_card_power_on()
181 rtsx_pci_enable_ocp(pcr); in rts5260_card_power_on()
184 rtsx_pci_write_register(pcr, LDO_CONFIG2, DV331812_VDD1, DV331812_VDD1); in rts5260_card_power_on()
185 rtsx_pci_write_register(pcr, LDO_VCC_CFG0, in rts5260_card_power_on()
188 rtsx_pci_write_register(pcr, LDO_VCC_CFG1, LDO_POW_SDVDD1_MASK, in rts5260_card_power_on()
191 rtsx_pci_write_register(pcr, LDO_CONFIG2, in rts5260_card_power_on()
195 if (pcr->extra_caps & EXTRA_CAPS_SD_SDR50 || in rts5260_card_power_on()
196 pcr->extra_caps & EXTRA_CAPS_SD_SDR104) in rts5260_card_power_on()
197 sd_set_sample_push_timing_sd30(pcr); in rts5260_card_power_on()
200 rtsx_pci_write_register(pcr, SD_CFG1, 0xFF, in rts5260_card_power_on()
203 rtsx_pci_write_register(pcr, SD_SAMPLE_POINT_CTL, in rts5260_card_power_on()
205 rtsx_pci_write_register(pcr, SD_PUSH_POINT_CTL, 0xFF, 0); in rts5260_card_power_on()
206 rtsx_pci_write_register(pcr, CARD_STOP, SD_STOP | SD_CLR_ERR, in rts5260_card_power_on()
210 rtsx_pci_write_register(pcr, SD_CFG3, SD30_CLK_END_EN, 0); in rts5260_card_power_on()
211 rtsx_pci_write_register(pcr, REG_SD_STOP_SDCLK_CFG, in rts5260_card_power_on()
215 rtsx_pci_write_register(pcr, REG_PRE_RW_MODE, EN_INFINITE_MODE, 0); in rts5260_card_power_on()
220 static int rts5260_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) in rts5260_switch_output_voltage() argument
224 rtsx_pci_write_register(pcr, LDO_CONFIG2, in rts5260_switch_output_voltage()
226 rtsx_pci_write_register(pcr, LDO_DV18_CFG, in rts5260_switch_output_voltage()
228 rtsx_pci_write_register(pcr, SD_PAD_CTL, SD_IO_USING_1V8, 0); in rts5260_switch_output_voltage()
231 rtsx_pci_write_register(pcr, LDO_CONFIG2, in rts5260_switch_output_voltage()
233 rtsx_pci_write_register(pcr, LDO_DV18_CFG, in rts5260_switch_output_voltage()
235 rtsx_pci_write_register(pcr, SD_PAD_CTL, SD_IO_USING_1V8, in rts5260_switch_output_voltage()
243 rts5260_fill_driving(pcr, voltage); in rts5260_switch_output_voltage()
248 static void rts5260_stop_cmd(struct rtsx_pcr *pcr) in rts5260_stop_cmd() argument
250 rtsx_pci_writel(pcr, RTSX_HCBCTLR, STOP_CMD); in rts5260_stop_cmd()
251 rtsx_pci_writel(pcr, RTSX_HDBCTLR, STOP_DMA); in rts5260_stop_cmd()
252 rtsx_pci_write_register(pcr, RTS5260_DMA_RST_CTL_0, in rts5260_stop_cmd()
255 rtsx_pci_write_register(pcr, RBCTL, RB_FLUSH, RB_FLUSH); in rts5260_stop_cmd()
258 static void rts5260_card_before_power_off(struct rtsx_pcr *pcr) in rts5260_card_before_power_off() argument
260 rts5260_stop_cmd(pcr); in rts5260_card_before_power_off()
261 rts5260_switch_output_voltage(pcr, OUTPUT_3V3); in rts5260_card_before_power_off()
265 static int rts5260_card_power_off(struct rtsx_pcr *pcr, int card) in rts5260_card_power_off() argument
269 rts5260_card_before_power_off(pcr); in rts5260_card_power_off()
270 err = rtsx_pci_write_register(pcr, LDO_VCC_CFG1, in rts5260_card_power_off()
272 err = rtsx_pci_write_register(pcr, LDO_CONFIG2, in rts5260_card_power_off()
274 if (pcr->option.ocp_en) in rts5260_card_power_off()
275 rtsx_pci_disable_ocp(pcr); in rts5260_card_power_off()
280 static void rts5260_init_ocp(struct rtsx_pcr *pcr) in rts5260_init_ocp() argument
282 struct rtsx_cr_option *option = &pcr->option; in rts5260_init_ocp()
288 rtsx_pci_write_register(pcr, RTS5260_DVCC_CTRL, in rts5260_init_ocp()
292 rtsx_pci_write_register(pcr, RTS5260_DV331812_CFG, in rts5260_init_ocp()
297 val = pcr->hw_param.ocp_glitch; in rts5260_init_ocp()
298 rtsx_pci_write_register(pcr, REG_OCPGLITCH, mask, val); in rts5260_init_ocp()
299 rtsx_pci_write_register(pcr, RTS5260_DVCC_CTRL, in rts5260_init_ocp()
305 rtsx_pci_enable_ocp(pcr); in rts5260_init_ocp()
307 rtsx_pci_write_register(pcr, RTS5260_DVCC_CTRL, in rts5260_init_ocp()
313 static void rts5260_enable_ocp(struct rtsx_pcr *pcr) in rts5260_enable_ocp() argument
318 rtsx_pci_write_register(pcr, REG_OCPCTL, 0xFF, val); in rts5260_enable_ocp()
322 static void rts5260_disable_ocp(struct rtsx_pcr *pcr) in rts5260_disable_ocp() argument
327 rtsx_pci_write_register(pcr, REG_OCPCTL, mask, 0); in rts5260_disable_ocp()
332 static int rts5260_get_ocpstat(struct rtsx_pcr *pcr, u8 *val) in rts5260_get_ocpstat() argument
334 return rtsx_pci_read_register(pcr, REG_OCPSTAT, val); in rts5260_get_ocpstat()
337 static int rts5260_get_ocpstat2(struct rtsx_pcr *pcr, u8 *val) in rts5260_get_ocpstat2() argument
339 return rtsx_pci_read_register(pcr, REG_DV3318_OCPSTAT, val); in rts5260_get_ocpstat2()
342 static void rts5260_clear_ocpstat(struct rtsx_pcr *pcr) in rts5260_clear_ocpstat() argument
350 rtsx_pci_write_register(pcr, REG_OCPCTL, mask, val); in rts5260_clear_ocpstat()
351 rtsx_pci_write_register(pcr, REG_DV3318_OCPCTL, in rts5260_clear_ocpstat()
355 rtsx_pci_write_register(pcr, REG_OCPCTL, mask, 0); in rts5260_clear_ocpstat()
356 rtsx_pci_write_register(pcr, REG_DV3318_OCPCTL, in rts5260_clear_ocpstat()
360 static void rts5260_process_ocp(struct rtsx_pcr *pcr) in rts5260_process_ocp() argument
362 if (!pcr->option.ocp_en) in rts5260_process_ocp()
365 rtsx_pci_get_ocpstat(pcr, &pcr->ocp_stat); in rts5260_process_ocp()
366 rts5260_get_ocpstat2(pcr, &pcr->ocp_stat2); in rts5260_process_ocp()
368 if ((pcr->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) || in rts5260_process_ocp()
369 (pcr->ocp_stat2 & (DV3318_OCP_NOW | DV3318_OCP_EVER))) { in rts5260_process_ocp()
370 rtsx_pci_card_power_off(pcr, RTSX_SD_CARD); in rts5260_process_ocp()
371 rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, 0); in rts5260_process_ocp()
372 rtsx_pci_clear_ocpstat(pcr); in rts5260_process_ocp()
373 pcr->ocp_stat = 0; in rts5260_process_ocp()
374 pcr->ocp_stat2 = 0; in rts5260_process_ocp()
379 static int rts5260_init_hw(struct rtsx_pcr *pcr) in rts5260_init_hw() argument
383 rtsx_pci_init_cmd(pcr); in rts5260_init_hw()
385 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, L1SUB_CONFIG1, in rts5260_init_hw()
388 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, L1SUB_CONFIG3, 0xFF, 0x00); in rts5260_init_hw()
389 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CLK_FORCE_CTL, in rts5260_init_hw()
391 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWD_SUSPEND_EN, 0xFF, 0xFF); in rts5260_init_hw()
392 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PWR_GATE_CTRL, in rts5260_init_hw()
394 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, REG_VREF, in rts5260_init_hw()
396 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, RBCTL, in rts5260_init_hw()
399 if (pcr->flags & PCR_REVERSE_SOCKET) in rts5260_init_hw()
400 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0xB0); in rts5260_init_hw()
402 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0x80); in rts5260_init_hw()
404 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, OBFF_CFG, in rts5260_init_hw()
407 err = rtsx_pci_send_cmd(pcr, CMD_TIMEOUT_DEF); in rts5260_init_hw()
411 rtsx_pci_init_ocp(pcr); in rts5260_init_hw()
416 static void rts5260_pwr_saving_setting(struct rtsx_pcr *pcr) in rts5260_pwr_saving_setting() argument
420 lss_l1_1 = rtsx_check_dev_flag(pcr, ASPM_L1_1_EN) in rts5260_pwr_saving_setting()
421 | rtsx_check_dev_flag(pcr, PM_L1_1_EN); in rts5260_pwr_saving_setting()
422 lss_l1_2 = rtsx_check_dev_flag(pcr, ASPM_L1_2_EN) in rts5260_pwr_saving_setting()
423 | rtsx_check_dev_flag(pcr, PM_L1_2_EN); in rts5260_pwr_saving_setting()
425 rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, 0xFF, 0); in rts5260_pwr_saving_setting()
427 pcr_dbg(pcr, "Set parameters for L1.2."); in rts5260_pwr_saving_setting()
428 rtsx_pci_write_register(pcr, PWR_GLOBAL_CTRL, in rts5260_pwr_saving_setting()
430 rtsx_pci_write_register(pcr, RTS5260_DVCC_CTRL, in rts5260_pwr_saving_setting()
436 rtsx_pci_write_register(pcr, PWR_FE_CTL, in rts5260_pwr_saving_setting()
439 pcr_dbg(pcr, "Set parameters for L1.1."); in rts5260_pwr_saving_setting()
440 rtsx_pci_write_register(pcr, PWR_GLOBAL_CTRL, in rts5260_pwr_saving_setting()
442 rtsx_pci_write_register(pcr, PWR_FE_CTL, in rts5260_pwr_saving_setting()
445 pcr_dbg(pcr, "Set parameters for L1."); in rts5260_pwr_saving_setting()
446 rtsx_pci_write_register(pcr, PWR_GLOBAL_CTRL, in rts5260_pwr_saving_setting()
448 rtsx_pci_write_register(pcr, PWR_FE_CTL, in rts5260_pwr_saving_setting()
452 rtsx_pci_write_register(pcr, CFG_L1_0_PCIE_DPHY_RET_VALUE, in rts5260_pwr_saving_setting()
454 rtsx_pci_write_register(pcr, CFG_L1_0_PCIE_MAC_RET_VALUE, in rts5260_pwr_saving_setting()
456 rtsx_pci_write_register(pcr, CFG_L1_0_CRC_SD30_RET_VALUE, in rts5260_pwr_saving_setting()
458 rtsx_pci_write_register(pcr, CFG_L1_0_CRC_SD40_RET_VALUE, in rts5260_pwr_saving_setting()
460 rtsx_pci_write_register(pcr, CFG_L1_0_SYS_RET_VALUE, in rts5260_pwr_saving_setting()
463 rtsx_pci_write_register(pcr, CFG_PCIE_APHY_OFF_0, in rts5260_pwr_saving_setting()
465 rtsx_pci_write_register(pcr, CFG_PCIE_APHY_OFF_1, in rts5260_pwr_saving_setting()
467 rtsx_pci_write_register(pcr, CFG_PCIE_APHY_OFF_2, in rts5260_pwr_saving_setting()
469 rtsx_pci_write_register(pcr, CFG_PCIE_APHY_OFF_3, in rts5260_pwr_saving_setting()
472 rtsx_pci_write_register(pcr, PWC_CDR, 0xFF, PWC_CDR_DEFAULT); in rts5260_pwr_saving_setting()
474 rtsx_pci_write_register(pcr, CFG_LP_FPWM_VALUE, in rts5260_pwr_saving_setting()
477 rtsx_pci_write_register(pcr, CFG_L1_0_CRC_MISC_RET_VALUE, in rts5260_pwr_saving_setting()
481 static void rts5260_init_from_cfg(struct rtsx_pcr *pcr) in rts5260_init_from_cfg() argument
483 struct rtsx_cr_option *option = &pcr->option; in rts5260_init_from_cfg()
485 rts5260_pwr_saving_setting(pcr); in rts5260_init_from_cfg()
489 rtsx_set_ltr_latency(pcr, option->ltr_active_latency); in rts5260_init_from_cfg()
493 static int rts5260_extra_init_hw(struct rtsx_pcr *pcr) in rts5260_extra_init_hw() argument
495 struct rtsx_cr_option *option = &pcr->option; in rts5260_extra_init_hw()
498 rtsx_pci_write_register(pcr, 0xFC03, 0x7F, 0x07); in rts5260_extra_init_hw()
499 rtsx_pci_write_register(pcr, SSC_DIV_N_0, 0xFF, 0x5D); in rts5260_extra_init_hw()
501 rts5260_init_from_cfg(pcr); in rts5260_extra_init_hw()
504 rtsx_pci_write_register(pcr, RTS5260_AUTOLOAD_CFG4, in rts5260_extra_init_hw()
507 rtsx_pci_write_register(pcr, LDO_VCC_CFG0, in rts5260_extra_init_hw()
510 rtsx_pci_write_register(pcr, PCLK_CTL, PCLK_MODE_SEL, PCLK_MODE_SEL); in rts5260_extra_init_hw()
512 rts5260_init_hw(pcr); in rts5260_extra_init_hw()
519 rtsx_pci_write_register(pcr, PETXCFG, in rts5260_extra_init_hw()
522 rtsx_pci_write_register(pcr, PETXCFG, in rts5260_extra_init_hw()
525 rtsx_pci_write_register(pcr, pcr->reg_pm_ctrl3, 0x10, 0x00); in rts5260_extra_init_hw()
530 static void rts5260_set_l1off_cfg_sub_d0(struct rtsx_pcr *pcr, int active) in rts5260_set_l1off_cfg_sub_d0() argument
532 struct rtsx_cr_option *option = &pcr->option; in rts5260_set_l1off_cfg_sub_d0()
533 u32 interrupt = rtsx_pci_readl(pcr, RTSX_BIPR); in rts5260_set_l1off_cfg_sub_d0()
538 aspm_L1_1 = rtsx_check_dev_flag(pcr, ASPM_L1_1_EN); in rts5260_set_l1off_cfg_sub_d0()
539 aspm_L1_2 = rtsx_check_dev_flag(pcr, ASPM_L1_2_EN); in rts5260_set_l1off_cfg_sub_d0()
552 if (rtsx_check_dev_flag(pcr, in rts5260_set_l1off_cfg_sub_d0()
560 rtsx_set_l1off_sub(pcr, val); in rts5260_set_l1off_cfg_sub_d0()
583 void rts5260_init_params(struct rtsx_pcr *pcr) in rts5260_init_params() argument
585 struct rtsx_cr_option *option = &pcr->option; in rts5260_init_params()
586 struct rtsx_hw_param *hw_param = &pcr->hw_param; in rts5260_init_params()
588 pcr->extra_caps = EXTRA_CAPS_SD_SDR50 | EXTRA_CAPS_SD_SDR104; in rts5260_init_params()
589 pcr->num_slots = 2; in rts5260_init_params()
591 pcr->flags = 0; in rts5260_init_params()
592 pcr->card_drive_sel = RTSX_CARD_DRIVE_DEFAULT; in rts5260_init_params()
593 pcr->sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B; in rts5260_init_params()
594 pcr->sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B; in rts5260_init_params()
595 pcr->aspm_en = ASPM_L1_EN; in rts5260_init_params()
596 pcr->aspm_mode = ASPM_MODE_REG; in rts5260_init_params()
597 pcr->tx_initial_phase = SET_CLOCK_PHASE(27, 29, 11); in rts5260_init_params()
598 pcr->rx_initial_phase = SET_CLOCK_PHASE(24, 6, 5); in rts5260_init_params()
600 pcr->ic_version = rts5260_get_ic_version(pcr); in rts5260_init_params()
601 pcr->sd_pull_ctl_enable_tbl = rts5260_sd_pull_ctl_enable_tbl; in rts5260_init_params()
602 pcr->sd_pull_ctl_disable_tbl = rts5260_sd_pull_ctl_disable_tbl; in rts5260_init_params()
603 pcr->ms_pull_ctl_enable_tbl = rts5260_ms_pull_ctl_enable_tbl; in rts5260_init_params()
604 pcr->ms_pull_ctl_disable_tbl = rts5260_ms_pull_ctl_disable_tbl; in rts5260_init_params()
606 pcr->reg_pm_ctrl3 = RTS524A_PM_CTRL3; in rts5260_init_params()
608 pcr->ops = &rts5260_pcr_ops; in rts5260_init_params()