0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/blkdev.h>
0013 #include <linux/kthread.h>
0014 #include <linux/sched.h>
0015 #include <linux/workqueue.h>
0016 #include <linux/vmalloc.h>
0017
0018 #include "rtsx.h"
0019 #include "sd.h"
0020 #include "xd.h"
0021 #include "ms.h"
0022
0023 static void rtsx_calibration(struct rtsx_chip *chip)
0024 {
0025 rtsx_write_phy_register(chip, 0x1B, 0x135E);
0026 wait_timeout(10);
0027 rtsx_write_phy_register(chip, 0x00, 0x0280);
0028 rtsx_write_phy_register(chip, 0x01, 0x7112);
0029 rtsx_write_phy_register(chip, 0x01, 0x7110);
0030 rtsx_write_phy_register(chip, 0x01, 0x7112);
0031 rtsx_write_phy_register(chip, 0x01, 0x7113);
0032 rtsx_write_phy_register(chip, 0x00, 0x0288);
0033 }
0034
0035 void rtsx_enable_card_int(struct rtsx_chip *chip)
0036 {
0037 u32 reg = rtsx_readl(chip, RTSX_BIER);
0038 int i;
0039
0040 for (i = 0; i <= chip->max_lun; i++) {
0041 if (chip->lun2card[i] & XD_CARD)
0042 reg |= XD_INT_EN;
0043 if (chip->lun2card[i] & SD_CARD)
0044 reg |= SD_INT_EN;
0045 if (chip->lun2card[i] & MS_CARD)
0046 reg |= MS_INT_EN;
0047 }
0048 if (chip->hw_bypass_sd)
0049 reg &= ~((u32)SD_INT_EN);
0050
0051 rtsx_writel(chip, RTSX_BIER, reg);
0052 }
0053
0054 void rtsx_enable_bus_int(struct rtsx_chip *chip)
0055 {
0056 u32 reg = 0;
0057 #ifndef DISABLE_CARD_INT
0058 int i;
0059 #endif
0060
0061 reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
0062
0063 #ifndef DISABLE_CARD_INT
0064 for (i = 0; i <= chip->max_lun; i++) {
0065 dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
0066 i, chip->lun2card[i]);
0067
0068 if (chip->lun2card[i] & XD_CARD)
0069 reg |= XD_INT_EN;
0070 if (chip->lun2card[i] & SD_CARD)
0071 reg |= SD_INT_EN;
0072 if (chip->lun2card[i] & MS_CARD)
0073 reg |= MS_INT_EN;
0074 }
0075 if (chip->hw_bypass_sd)
0076 reg &= ~((u32)SD_INT_EN);
0077 #endif
0078
0079 if (chip->ic_version >= IC_VER_C)
0080 reg |= DELINK_INT_EN;
0081 #ifdef SUPPORT_OCP
0082 reg |= OC_INT_EN;
0083 #endif
0084 if (!chip->adma_mode)
0085 reg |= DATA_DONE_INT_EN;
0086
0087
0088 rtsx_writel(chip, RTSX_BIER, reg);
0089
0090 dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
0091 }
0092
0093 void rtsx_disable_bus_int(struct rtsx_chip *chip)
0094 {
0095 rtsx_writel(chip, RTSX_BIER, 0);
0096 }
0097
0098 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
0099 {
0100 int retval;
0101
0102 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
0103 if (chip->asic_code) {
0104 retval = rtsx_write_register(chip, CARD_PULL_CTL5,
0105 0xFF,
0106 MS_INS_PU | SD_WP_PU |
0107 SD_CD_PU | SD_CMD_PU);
0108 if (retval)
0109 return retval;
0110 } else {
0111 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
0112 0xFF,
0113 FPGA_SD_PULL_CTL_EN);
0114 if (retval)
0115 return retval;
0116 }
0117 retval = rtsx_write_register(chip, CARD_SHARE_MODE, 0xFF,
0118 CARD_SHARE_48_SD);
0119 if (retval)
0120 return retval;
0121
0122
0123 retval = rtsx_write_register(chip, 0xFF2C, 0x01, 0x01);
0124 if (retval)
0125 return retval;
0126
0127 retval = rtsx_write_register(chip, SDIO_CTRL, 0xFF,
0128 SDIO_BUS_CTRL | SDIO_CD_CTRL);
0129 if (retval)
0130 return retval;
0131
0132 chip->sd_int = 1;
0133 chip->sd_io = 1;
0134 } else {
0135 chip->need_reset |= SD_CARD;
0136 }
0137
0138 return STATUS_SUCCESS;
0139 }
0140
0141 #ifdef HW_AUTO_SWITCH_SD_BUS
0142 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
0143 {
0144 u8 tmp;
0145 bool sw_bypass_sd = false;
0146 int retval;
0147
0148 if (chip->driver_first_load) {
0149 if (CHECK_PID(chip, 0x5288)) {
0150 retval = rtsx_read_register(chip, 0xFE5A, &tmp);
0151 if (retval)
0152 return retval;
0153 if (tmp & 0x08)
0154 sw_bypass_sd = true;
0155 } else if (CHECK_PID(chip, 0x5208)) {
0156 retval = rtsx_read_register(chip, 0xFE70, &tmp);
0157 if (retval)
0158 return retval;
0159 if (tmp & 0x80)
0160 sw_bypass_sd = true;
0161 }
0162 } else {
0163 if (chip->sdio_in_charge)
0164 sw_bypass_sd = true;
0165 }
0166 dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
0167 chip->sdio_in_charge);
0168 dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
0169 chip->driver_first_load);
0170 dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
0171 sw_bypass_sd);
0172
0173 if (sw_bypass_sd) {
0174 u8 cd_toggle_mask = 0;
0175
0176 retval = rtsx_read_register(chip, TLPTISTAT, &tmp);
0177 if (retval)
0178 return retval;
0179 cd_toggle_mask = 0x08;
0180
0181 if (tmp & cd_toggle_mask) {
0182
0183 if (CHECK_PID(chip, 0x5288)) {
0184 retval = rtsx_write_register(chip, 0xFE5A,
0185 0x08, 0x00);
0186 if (retval)
0187 return retval;
0188 } else if (CHECK_PID(chip, 0x5208)) {
0189 retval = rtsx_write_register(chip, 0xFE70,
0190 0x80, 0x00);
0191 if (retval)
0192 return retval;
0193 }
0194
0195 retval = rtsx_write_register(chip, TLPTISTAT, 0xFF,
0196 tmp);
0197 if (retval)
0198 return retval;
0199
0200 chip->need_reset |= SD_CARD;
0201 } else {
0202 dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
0203
0204 if (chip->asic_code) {
0205 retval = sd_pull_ctl_enable(chip);
0206 if (retval != STATUS_SUCCESS)
0207 return STATUS_FAIL;
0208 } else {
0209 retval = rtsx_write_register
0210 (chip, FPGA_PULL_CTL,
0211 FPGA_SD_PULL_CTL_BIT | 0x20,
0212 0);
0213 if (retval)
0214 return retval;
0215 }
0216 retval = card_share_mode(chip, SD_CARD);
0217 if (retval != STATUS_SUCCESS)
0218 return STATUS_FAIL;
0219
0220
0221 if (CHECK_PID(chip, 0x5288)) {
0222 retval = rtsx_write_register(chip, 0xFE5A,
0223 0x08, 0x08);
0224 if (retval)
0225 return retval;
0226 } else if (CHECK_PID(chip, 0x5208)) {
0227 retval = rtsx_write_register(chip, 0xFE70,
0228 0x80, 0x80);
0229 if (retval)
0230 return retval;
0231 }
0232
0233 chip->chip_insert_with_sdio = 1;
0234 chip->sd_io = 1;
0235 }
0236 } else {
0237 retval = rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
0238 if (retval)
0239 return retval;
0240
0241 chip->need_reset |= SD_CARD;
0242 }
0243
0244 return STATUS_SUCCESS;
0245 }
0246 #endif
0247
0248 static int rtsx_reset_aspm(struct rtsx_chip *chip)
0249 {
0250 int ret;
0251
0252 if (chip->dynamic_aspm) {
0253 if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
0254 return STATUS_SUCCESS;
0255
0256 ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
0257 chip->aspm_l0s_l1_en);
0258 if (ret != STATUS_SUCCESS)
0259 return STATUS_FAIL;
0260
0261 return STATUS_SUCCESS;
0262 }
0263
0264 if (CHECK_PID(chip, 0x5208)) {
0265 ret = rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
0266 if (ret)
0267 return ret;
0268 }
0269 ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
0270 if (ret != STATUS_SUCCESS)
0271 return STATUS_FAIL;
0272
0273 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
0274 if (CHK_SDIO_EXIST(chip)) {
0275 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
0276 ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
0277 0xC0, 0xFF, chip->aspm_l0s_l1_en);
0278 if (ret != STATUS_SUCCESS)
0279 return STATUS_FAIL;
0280 }
0281
0282 chip->aspm_enabled = 1;
0283
0284 return STATUS_SUCCESS;
0285 }
0286
0287 static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
0288 {
0289 int ret;
0290
0291 if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
0292 rtsx_enable_bus_int(chip);
0293 return STATUS_SUCCESS;
0294 }
0295
0296 if (chip->phy_debug_mode) {
0297 ret = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
0298 if (ret)
0299 return ret;
0300 rtsx_disable_bus_int(chip);
0301 } else {
0302 rtsx_enable_bus_int(chip);
0303 }
0304
0305 if (chip->ic_version >= IC_VER_D) {
0306 u16 reg;
0307
0308 ret = rtsx_read_phy_register(chip, 0x00, ®);
0309 if (ret != STATUS_SUCCESS)
0310 return STATUS_FAIL;
0311
0312 reg &= 0xFE7F;
0313 reg |= 0x80;
0314 ret = rtsx_write_phy_register(chip, 0x00, reg);
0315 if (ret != STATUS_SUCCESS)
0316 return STATUS_FAIL;
0317
0318 ret = rtsx_read_phy_register(chip, 0x1C, ®);
0319 if (ret != STATUS_SUCCESS)
0320 return STATUS_FAIL;
0321
0322 reg &= 0xFFF7;
0323 ret = rtsx_write_phy_register(chip, 0x1C, reg);
0324 if (ret != STATUS_SUCCESS)
0325 return STATUS_FAIL;
0326 }
0327
0328 if (chip->driver_first_load && chip->ic_version < IC_VER_C)
0329 rtsx_calibration(chip);
0330
0331 return STATUS_SUCCESS;
0332 }
0333
0334 int rtsx_reset_chip(struct rtsx_chip *chip)
0335 {
0336 int retval;
0337
0338 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
0339
0340 rtsx_disable_aspm(chip);
0341
0342 retval = rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 0x00);
0343 if (retval)
0344 return retval;
0345
0346
0347 retval = rtsx_write_register(chip, CARD_CLK_EN, 0x1E, 0);
0348 if (retval)
0349 return retval;
0350
0351 #ifdef SUPPORT_OCP
0352
0353 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
0354 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN, 0);
0355 if (retval)
0356 return retval;
0357 } else {
0358 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
0359 MS_OC_POWER_DOWN);
0360 if (retval)
0361 return retval;
0362 }
0363
0364 retval = rtsx_write_register(chip, OCPPARA1, OCP_TIME_MASK,
0365 OCP_TIME_800);
0366 if (retval)
0367 return retval;
0368 retval = rtsx_write_register(chip, OCPPARA2, OCP_THD_MASK,
0369 OCP_THD_244_946);
0370 if (retval)
0371 return retval;
0372 retval = rtsx_write_register(chip, OCPCTL, 0xFF,
0373 CARD_OC_INT_EN | CARD_DETECT_EN);
0374 if (retval)
0375 return retval;
0376 #else
0377
0378 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
0379 OC_POWER_DOWN);
0380 if (retval)
0381 return retval;
0382 #endif
0383
0384 if (!CHECK_PID(chip, 0x5288)) {
0385 retval = rtsx_write_register(chip, CARD_GPIO_DIR, 0xFF, 0x03);
0386 if (retval)
0387 return retval;
0388 }
0389
0390
0391 retval = rtsx_write_register(chip, CARD_GPIO, 0xFF, 0x03);
0392 if (retval)
0393 return retval;
0394
0395
0396 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0);
0397 if (retval)
0398 return retval;
0399
0400
0401 retval = rtsx_write_register(chip, CARD_DRIVE_SEL, 0xFF,
0402 chip->card_drive_sel);
0403 if (retval)
0404 return retval;
0405
0406 #ifdef LED_AUTO_BLINK
0407 retval = rtsx_write_register(chip, CARD_AUTO_BLINK, 0xFF,
0408 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
0409 if (retval)
0410 return retval;
0411 #endif
0412
0413 if (chip->asic_code) {
0414
0415 retval = rtsx_write_register(chip, SSC_CTL1, 0xFF,
0416 SSC_8X_EN | SSC_SEL_4M);
0417 if (retval)
0418 return retval;
0419 retval = rtsx_write_register(chip, SSC_CTL2, 0xFF, 0x12);
0420 if (retval)
0421 return retval;
0422 }
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x16, 0x10);
0433 if (retval)
0434 return retval;
0435
0436
0437 if (chip->aspm_l0s_l1_en) {
0438 retval = rtsx_reset_aspm(chip);
0439 if (retval != STATUS_SUCCESS)
0440 return STATUS_FAIL;
0441 } else {
0442 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
0443 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
0444 if (retval != STATUS_SUCCESS)
0445 return STATUS_FAIL;
0446 }
0447 retval = rtsx_write_config_byte(chip, LCTLR,
0448 chip->aspm_l0s_l1_en);
0449 if (retval != STATUS_SUCCESS)
0450 return STATUS_FAIL;
0451 }
0452
0453 retval = rtsx_write_config_byte(chip, 0x81, 1);
0454 if (retval != STATUS_SUCCESS)
0455 return STATUS_FAIL;
0456
0457 if (CHK_SDIO_EXIST(chip)) {
0458 retval = rtsx_write_cfg_dw(chip,
0459 CHECK_PID(chip, 0x5288) ? 2 : 1,
0460 0xC0, 0xFF00, 0x0100);
0461
0462 if (retval != STATUS_SUCCESS)
0463 return STATUS_FAIL;
0464 }
0465
0466 if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
0467 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
0468 if (retval != STATUS_SUCCESS)
0469 return STATUS_FAIL;
0470
0471 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
0472 if (retval != STATUS_SUCCESS)
0473 return STATUS_FAIL;
0474 }
0475
0476 retval = rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT,
0477 LINK_RDY_INT);
0478 if (retval)
0479 return retval;
0480
0481 retval = rtsx_write_register(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
0482 if (retval)
0483 return retval;
0484
0485 retval = rtsx_enable_pcie_intr(chip);
0486 if (retval != STATUS_SUCCESS)
0487 return STATUS_FAIL;
0488
0489 chip->need_reset = 0;
0490
0491 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
0492
0493 if (chip->hw_bypass_sd)
0494 goto nextcard;
0495 dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
0496 chip->int_reg);
0497 if (chip->int_reg & SD_EXIST) {
0498 #ifdef HW_AUTO_SWITCH_SD_BUS
0499 if (CHECK_PID(chip, 0x5208) && chip->ic_version < IC_VER_C)
0500 retval = rtsx_pre_handle_sdio_old(chip);
0501 else
0502 retval = rtsx_pre_handle_sdio_new(chip);
0503
0504 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (%s)\n",
0505 (unsigned int)(chip->need_reset), __func__);
0506 #else
0507 retval = rtsx_pre_handle_sdio_old(chip);
0508 #endif
0509 if (retval != STATUS_SUCCESS)
0510 return STATUS_FAIL;
0511
0512 } else {
0513 chip->sd_io = 0;
0514 retval = rtsx_write_register(chip, SDIO_CTRL,
0515 SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
0516 if (retval)
0517 return retval;
0518 }
0519
0520 nextcard:
0521 if (chip->int_reg & XD_EXIST)
0522 chip->need_reset |= XD_CARD;
0523 if (chip->int_reg & MS_EXIST)
0524 chip->need_reset |= MS_CARD;
0525 if (chip->int_reg & CARD_EXIST) {
0526 retval = rtsx_write_register(chip, SSC_CTL1, SSC_RSTB,
0527 SSC_RSTB);
0528 if (retval)
0529 return retval;
0530 }
0531
0532 dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
0533 (unsigned int)(chip->need_reset));
0534
0535 retval = rtsx_write_register(chip, RCCTL, 0x01, 0x00);
0536 if (retval)
0537 return retval;
0538
0539 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
0540
0541 retval = rtsx_write_register(chip, MAIN_PWR_OFF_CTL, 0x03,
0542 0x03);
0543 if (retval)
0544 return retval;
0545 }
0546
0547 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
0548 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x07);
0549 if (retval)
0550 return retval;
0551 if (chip->aux_pwr_exist) {
0552 retval = rtsx_write_register(chip, PME_FORCE_CTL,
0553 0xFF, 0x33);
0554 if (retval)
0555 return retval;
0556 }
0557 } else {
0558 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x04);
0559 if (retval)
0560 return retval;
0561 retval = rtsx_write_register(chip, PME_FORCE_CTL, 0xFF, 0x30);
0562 if (retval)
0563 return retval;
0564 }
0565
0566 if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
0567 retval = rtsx_write_register(chip, PETXCFG, 0x1C, 0x14);
0568 if (retval)
0569 return retval;
0570 }
0571
0572 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
0573 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
0574 if (retval != STATUS_SUCCESS)
0575 return STATUS_FAIL;
0576 }
0577
0578 if (chip->ft2_fast_mode) {
0579 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
0580 MS_PARTIAL_POWER_ON |
0581 SD_PARTIAL_POWER_ON);
0582 if (retval)
0583 return retval;
0584 udelay(chip->pmos_pwr_on_interval);
0585 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
0586 MS_POWER_ON | SD_POWER_ON);
0587 if (retval)
0588 return retval;
0589
0590 wait_timeout(200);
0591 }
0592
0593
0594 rtsx_reset_detected_cards(chip, 0);
0595
0596 chip->driver_first_load = 0;
0597
0598 return STATUS_SUCCESS;
0599 }
0600
0601 static inline int valid_sd_speed_prior(u32 sd_speed_prior)
0602 {
0603 bool valid_para = true;
0604 int i;
0605
0606 for (i = 0; i < 4; i++) {
0607 u8 tmp = (u8)(sd_speed_prior >> (i * 8));
0608
0609 if (tmp < 0x01 || tmp > 0x04) {
0610 valid_para = false;
0611 break;
0612 }
0613 }
0614
0615 return valid_para;
0616 }
0617
0618 static inline int valid_sd_current_prior(u32 sd_current_prior)
0619 {
0620 bool valid_para = true;
0621 int i;
0622
0623 for (i = 0; i < 4; i++) {
0624 u8 tmp = (u8)(sd_current_prior >> (i * 8));
0625
0626 if (tmp > 0x03) {
0627 valid_para = false;
0628 break;
0629 }
0630 }
0631
0632 return valid_para;
0633 }
0634
0635 static int rts5208_init(struct rtsx_chip *chip)
0636 {
0637 int retval;
0638 u16 reg = 0;
0639 u8 val = 0;
0640
0641 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
0642 if (retval)
0643 return retval;
0644 retval = rtsx_read_register(chip, CLK_SEL, &val);
0645 if (retval)
0646 return retval;
0647 chip->asic_code = val == 0 ? 1 : 0;
0648
0649 if (chip->asic_code) {
0650 retval = rtsx_read_phy_register(chip, 0x1C, ®);
0651 if (retval != STATUS_SUCCESS)
0652 return STATUS_FAIL;
0653
0654 dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
0655 reg);
0656 chip->ic_version = (reg >> 4) & 0x07;
0657 chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
0658
0659 } else {
0660 retval = rtsx_read_register(chip, 0xFE80, &val);
0661 if (retval)
0662 return retval;
0663 chip->ic_version = val;
0664 chip->phy_debug_mode = 0;
0665 }
0666
0667 retval = rtsx_read_register(chip, PDINFO, &val);
0668 if (retval)
0669 return retval;
0670 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
0671 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
0672
0673 retval = rtsx_read_register(chip, 0xFE50, &val);
0674 if (retval)
0675 return retval;
0676 chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
0677
0678 rtsx_read_config_byte(chip, 0x0E, &val);
0679 if (val & 0x80)
0680 SET_SDIO_EXIST(chip);
0681 else
0682 CLR_SDIO_EXIST(chip);
0683
0684 if (chip->use_hw_setting) {
0685 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
0686 if (retval)
0687 return retval;
0688 chip->auto_delink_en = val & 0x80 ? 1 : 0;
0689 }
0690
0691 return STATUS_SUCCESS;
0692 }
0693
0694 static int rts5288_init(struct rtsx_chip *chip)
0695 {
0696 int retval;
0697 u8 val = 0, max_func;
0698 u32 lval = 0;
0699
0700 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
0701 if (retval)
0702 return retval;
0703 retval = rtsx_read_register(chip, CLK_SEL, &val);
0704 if (retval)
0705 return retval;
0706 chip->asic_code = val == 0 ? 1 : 0;
0707
0708 chip->ic_version = 0;
0709 chip->phy_debug_mode = 0;
0710
0711 retval = rtsx_read_register(chip, PDINFO, &val);
0712 if (retval)
0713 return retval;
0714 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
0715 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
0716
0717 retval = rtsx_read_register(chip, CARD_SHARE_MODE, &val);
0718 if (retval)
0719 return retval;
0720 dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
0721 chip->baro_pkg = val & 0x04 ? QFN : LQFP;
0722
0723 retval = rtsx_read_register(chip, 0xFE5A, &val);
0724 if (retval)
0725 return retval;
0726 chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
0727
0728 retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
0729 if (retval != STATUS_SUCCESS)
0730 return STATUS_FAIL;
0731
0732 max_func = (u8)((lval >> 29) & 0x07);
0733 dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
0734 if (max_func == 0x02)
0735 SET_SDIO_EXIST(chip);
0736 else
0737 CLR_SDIO_EXIST(chip);
0738
0739 if (chip->use_hw_setting) {
0740 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
0741 if (retval)
0742 return retval;
0743 chip->auto_delink_en = val & 0x80 ? 1 : 0;
0744
0745 if (CHECK_BARO_PKG(chip, LQFP))
0746 chip->lun_mode = SD_MS_1LUN;
0747 else
0748 chip->lun_mode = DEFAULT_SINGLE;
0749 }
0750
0751 return STATUS_SUCCESS;
0752 }
0753
0754 int rtsx_init_chip(struct rtsx_chip *chip)
0755 {
0756 struct sd_info *sd_card = &chip->sd_card;
0757 struct xd_info *xd_card = &chip->xd_card;
0758 struct ms_info *ms_card = &chip->ms_card;
0759 int retval;
0760 unsigned int i;
0761
0762 dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
0763 chip->vendor_id, chip->product_id);
0764
0765 chip->ic_version = 0;
0766
0767 memset(xd_card, 0, sizeof(struct xd_info));
0768 memset(sd_card, 0, sizeof(struct sd_info));
0769 memset(ms_card, 0, sizeof(struct ms_info));
0770
0771 chip->xd_reset_counter = 0;
0772 chip->sd_reset_counter = 0;
0773 chip->ms_reset_counter = 0;
0774
0775 chip->xd_show_cnt = MAX_SHOW_CNT;
0776 chip->sd_show_cnt = MAX_SHOW_CNT;
0777 chip->ms_show_cnt = MAX_SHOW_CNT;
0778
0779 chip->sd_io = 0;
0780 chip->auto_delink_cnt = 0;
0781 chip->auto_delink_allowed = 1;
0782 rtsx_set_stat(chip, RTSX_STAT_INIT);
0783
0784 chip->aspm_enabled = 0;
0785 chip->chip_insert_with_sdio = 0;
0786 chip->sdio_aspm = 0;
0787 chip->sdio_idle = 0;
0788 chip->sdio_counter = 0;
0789 chip->cur_card = 0;
0790 chip->phy_debug_mode = 0;
0791 chip->sdio_func_exist = 0;
0792 memset(chip->sdio_raw_data, 0, 12);
0793
0794 for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
0795 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
0796 chip->rw_fail_cnt[i] = 0;
0797 }
0798
0799 if (!valid_sd_speed_prior(chip->sd_speed_prior))
0800 chip->sd_speed_prior = 0x01040203;
0801
0802 dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
0803 chip->sd_speed_prior);
0804
0805 if (!valid_sd_current_prior(chip->sd_current_prior))
0806 chip->sd_current_prior = 0x00010203;
0807
0808 dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
0809 chip->sd_current_prior);
0810
0811 if (chip->sd_ddr_tx_phase > 31 || chip->sd_ddr_tx_phase < 0)
0812 chip->sd_ddr_tx_phase = 0;
0813
0814 if (chip->mmc_ddr_tx_phase > 31 || chip->mmc_ddr_tx_phase < 0)
0815 chip->mmc_ddr_tx_phase = 0;
0816
0817 retval = rtsx_write_register(chip, FPDCTL, SSC_POWER_DOWN, 0);
0818 if (retval)
0819 return retval;
0820 wait_timeout(200);
0821 retval = rtsx_write_register(chip, CLK_DIV, 0x07, 0x07);
0822 if (retval)
0823 return retval;
0824 dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
0825 chip->use_hw_setting);
0826
0827 if (CHECK_PID(chip, 0x5208)) {
0828 retval = rts5208_init(chip);
0829 if (retval != STATUS_SUCCESS)
0830 return STATUS_FAIL;
0831
0832 } else if (CHECK_PID(chip, 0x5288)) {
0833 retval = rts5288_init(chip);
0834 if (retval != STATUS_SUCCESS)
0835 return STATUS_FAIL;
0836 }
0837
0838 if (chip->ss_en == 2)
0839 chip->ss_en = 0;
0840
0841 dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
0842 dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
0843 dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
0844 chip->phy_debug_mode);
0845 dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
0846 chip->aux_pwr_exist);
0847 dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
0848 chip->sdio_func_exist);
0849 dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
0850 chip->hw_bypass_sd);
0851 dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
0852 chip->aspm_l0s_l1_en);
0853 dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
0854 dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
0855 chip->auto_delink_en);
0856 dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
0857 dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
0858
0859 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
0860 chip->card2lun[SD_CARD] = 0;
0861 chip->card2lun[MS_CARD] = 1;
0862 chip->card2lun[XD_CARD] = 0xFF;
0863 chip->lun2card[0] = SD_CARD;
0864 chip->lun2card[1] = MS_CARD;
0865 chip->max_lun = 1;
0866 SET_SDIO_IGNORED(chip);
0867 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
0868 chip->card2lun[SD_CARD] = 0;
0869 chip->card2lun[MS_CARD] = 0;
0870 chip->card2lun[XD_CARD] = 0xFF;
0871 chip->lun2card[0] = SD_CARD | MS_CARD;
0872 chip->max_lun = 0;
0873 } else {
0874 chip->card2lun[XD_CARD] = 0;
0875 chip->card2lun[SD_CARD] = 0;
0876 chip->card2lun[MS_CARD] = 0;
0877 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
0878 chip->max_lun = 0;
0879 }
0880
0881 retval = rtsx_reset_chip(chip);
0882 if (retval != STATUS_SUCCESS)
0883 return STATUS_FAIL;
0884
0885 return STATUS_SUCCESS;
0886 }
0887
0888 void rtsx_release_chip(struct rtsx_chip *chip)
0889 {
0890 xd_free_l2p_tbl(chip);
0891 ms_free_l2p_tbl(chip);
0892 chip->card_exist = 0;
0893 chip->card_ready = 0;
0894 }
0895
0896 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
0897 static inline void rtsx_blink_led(struct rtsx_chip *chip)
0898 {
0899 if (chip->card_exist && chip->blink_led) {
0900 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
0901 chip->led_toggle_counter++;
0902 } else {
0903 chip->led_toggle_counter = 0;
0904 toggle_gpio(chip, LED_GPIO);
0905 }
0906 }
0907 }
0908 #endif
0909
0910 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
0911 {
0912 bool reg_changed, maybe_support_aspm;
0913 u32 tmp = 0;
0914 u8 reg0 = 0, reg1 = 0;
0915
0916 maybe_support_aspm = false;
0917 reg_changed = false;
0918 rtsx_read_config_byte(chip, LCTLR, ®0);
0919 if (chip->aspm_level[0] != reg0) {
0920 reg_changed = true;
0921 chip->aspm_level[0] = reg0;
0922 }
0923 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
0924 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
0925 reg1 = (u8)tmp;
0926 if (chip->aspm_level[1] != reg1) {
0927 reg_changed = true;
0928 chip->aspm_level[1] = reg1;
0929 }
0930
0931 if ((reg0 & 0x03) && (reg1 & 0x03))
0932 maybe_support_aspm = true;
0933
0934 } else {
0935 if (reg0 & 0x03)
0936 maybe_support_aspm = true;
0937 }
0938
0939 if (reg_changed) {
0940 if (maybe_support_aspm)
0941 chip->aspm_l0s_l1_en = 0x03;
0942
0943 dev_dbg(rtsx_dev(chip),
0944 "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
0945 chip->aspm_level[0], chip->aspm_level[1]);
0946
0947 if (chip->aspm_l0s_l1_en) {
0948 chip->aspm_enabled = 1;
0949 } else {
0950 chip->aspm_enabled = 0;
0951 chip->sdio_aspm = 0;
0952 }
0953 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
0954 0x30 | chip->aspm_level[0] |
0955 (chip->aspm_level[1] << 2));
0956 }
0957 }
0958
0959 static void rtsx_manage_ocp(struct rtsx_chip *chip)
0960 {
0961 #ifdef SUPPORT_OCP
0962 if (!chip->ocp_int)
0963 return;
0964
0965 rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
0966
0967 if (chip->card_exist & SD_CARD)
0968 sd_power_off_card3v3(chip);
0969 else if (chip->card_exist & MS_CARD)
0970 ms_power_off_card3v3(chip);
0971 else if (chip->card_exist & XD_CARD)
0972 xd_power_off_card3v3(chip);
0973
0974 chip->ocp_int = 0;
0975 #endif
0976 }
0977
0978 static void rtsx_manage_sd_lock(struct rtsx_chip *chip)
0979 {
0980 #ifdef SUPPORT_SD_LOCK
0981 struct sd_info *sd_card = &chip->sd_card;
0982 u8 val;
0983
0984 if (!sd_card->sd_erase_status)
0985 return;
0986
0987 if (chip->card_exist & SD_CARD) {
0988 rtsx_read_register(chip, 0xFD30, &val);
0989 if (val & 0x02) {
0990 sd_card->sd_erase_status = SD_NOT_ERASE;
0991 sd_card->sd_lock_notify = 1;
0992 chip->need_reinit |= SD_CARD;
0993 }
0994 } else {
0995 sd_card->sd_erase_status = SD_NOT_ERASE;
0996 }
0997 #endif
0998 }
0999
1000 static bool rtsx_is_ss_allowed(struct rtsx_chip *chip)
1001 {
1002 u32 val;
1003
1004 if (!chip->ss_en || CHECK_PID(chip, 0x5288))
1005 return false;
1006
1007 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1008 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1009 if (val & 0x07)
1010 return false;
1011 }
1012
1013 return true;
1014 }
1015
1016 static void rtsx_manage_ss(struct rtsx_chip *chip)
1017 {
1018 if (!rtsx_is_ss_allowed(chip) || chip->sd_io)
1019 return;
1020
1021 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1022 chip->ss_counter = 0;
1023 return;
1024 }
1025
1026 if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL))
1027 chip->ss_counter++;
1028 else
1029 rtsx_exclusive_enter_ss(chip);
1030 }
1031
1032 static void rtsx_manage_aspm(struct rtsx_chip *chip)
1033 {
1034 u8 data;
1035
1036 if (!CHECK_PID(chip, 0x5208))
1037 return;
1038
1039 rtsx_monitor_aspm_config(chip);
1040
1041 #ifdef SUPPORT_SDIO_ASPM
1042 if (!CHK_SDIO_EXIST(chip) || CHK_SDIO_IGNORED(chip) ||
1043 !chip->aspm_l0s_l1_en || !chip->dynamic_aspm)
1044 return;
1045
1046 if (chip->sd_io) {
1047 dynamic_configure_sdio_aspm(chip);
1048 return;
1049 }
1050
1051 if (chip->sdio_aspm)
1052 return;
1053
1054 dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
1055 data = 0x30 | (chip->aspm_level[1] << 2);
1056 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, data);
1057 chip->sdio_aspm = 1;
1058 #endif
1059 }
1060
1061 static void rtsx_manage_idle(struct rtsx_chip *chip)
1062 {
1063 if (chip->idle_counter < IDLE_MAX_COUNT) {
1064 chip->idle_counter++;
1065 return;
1066 }
1067
1068 if (rtsx_get_stat(chip) == RTSX_STAT_IDLE)
1069 return;
1070
1071 dev_dbg(rtsx_dev(chip), "Idle state!\n");
1072 rtsx_set_stat(chip, RTSX_STAT_IDLE);
1073
1074 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1075 chip->led_toggle_counter = 0;
1076 #endif
1077 rtsx_force_power_on(chip, SSC_PDCTL);
1078
1079 turn_off_led(chip, LED_GPIO);
1080
1081 if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
1082 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1083 }
1084
1085 static void rtsx_manage_2lun_mode(struct rtsx_chip *chip)
1086 {
1087 #ifdef SUPPORT_OCP
1088 u8 sd_oc, ms_oc;
1089
1090 sd_oc = chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER);
1091 ms_oc = chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER);
1092
1093 if (sd_oc || ms_oc)
1094 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1095 chip->ocp_stat);
1096
1097 if (sd_oc && (chip->card_exist & SD_CARD)) {
1098 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1099 card_power_off(chip, SD_CARD);
1100 chip->card_fail |= SD_CARD;
1101 }
1102
1103 if (ms_oc && (chip->card_exist & MS_CARD)) {
1104 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1105 card_power_off(chip, MS_CARD);
1106 chip->card_fail |= MS_CARD;
1107 }
1108 #endif
1109 }
1110
1111 static void rtsx_manage_1lun_mode(struct rtsx_chip *chip)
1112 {
1113 #ifdef SUPPORT_OCP
1114 if (!(chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)))
1115 return;
1116
1117 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1118 chip->ocp_stat);
1119
1120 if (chip->card_exist & SD_CARD) {
1121 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1122 chip->card_fail |= SD_CARD;
1123 } else if (chip->card_exist & MS_CARD) {
1124 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1125 chip->card_fail |= MS_CARD;
1126 } else if (chip->card_exist & XD_CARD) {
1127 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1128 chip->card_fail |= XD_CARD;
1129 }
1130 card_power_off(chip, SD_CARD);
1131 #endif
1132 }
1133
1134 static void rtsx_delink_stage1(struct rtsx_chip *chip, int enter_L1,
1135 int stage3_cnt)
1136 {
1137 u8 val;
1138
1139 rtsx_set_stat(chip, RTSX_STAT_DELINK);
1140
1141 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1142 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1143
1144 if (chip->card_exist)
1145 dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1146 else
1147 dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1148
1149 if (enter_L1)
1150 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1151
1152 if (chip->card_exist)
1153 val = 0x02;
1154 else
1155 val = 0x0A;
1156
1157 rtsx_write_register(chip, CHANGE_LINK_STATE, val, val);
1158
1159 if (enter_L1)
1160 rtsx_enter_L1(chip);
1161
1162 if (chip->card_exist)
1163 chip->auto_delink_cnt = stage3_cnt + 1;
1164 }
1165
1166 static void rtsx_delink_stage(struct rtsx_chip *chip)
1167 {
1168 int delink_stage1_cnt, delink_stage2_cnt, delink_stage3_cnt;
1169 int enter_L1;
1170
1171 if (!chip->auto_delink_en || !chip->auto_delink_allowed ||
1172 chip->card_ready || chip->card_ejected || chip->sd_io) {
1173 chip->auto_delink_cnt = 0;
1174 return;
1175 }
1176
1177 enter_L1 = chip->auto_delink_in_L1 &&
1178 (chip->aspm_l0s_l1_en || chip->ss_en);
1179
1180 delink_stage1_cnt = chip->delink_stage1_step;
1181 delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1182 delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1183
1184 if (chip->auto_delink_cnt > delink_stage3_cnt)
1185 return;
1186
1187 if (chip->auto_delink_cnt == delink_stage1_cnt)
1188 rtsx_delink_stage1(chip, enter_L1, delink_stage3_cnt);
1189
1190 if (chip->auto_delink_cnt == delink_stage2_cnt) {
1191 dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1192
1193 if (enter_L1)
1194 rtsx_exit_L1(chip);
1195
1196 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1197 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1198
1199 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1200 }
1201
1202 chip->auto_delink_cnt++;
1203 }
1204
1205 void rtsx_polling_func(struct rtsx_chip *chip)
1206 {
1207 if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1208 return;
1209
1210 if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1211 goto delink_stage;
1212
1213 if (chip->polling_config) {
1214 u8 val;
1215
1216 rtsx_read_config_byte(chip, 0, &val);
1217 }
1218
1219 if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1220 return;
1221
1222 rtsx_manage_ocp(chip);
1223
1224 rtsx_manage_sd_lock(chip);
1225
1226 rtsx_init_cards(chip);
1227
1228 rtsx_manage_ss(chip);
1229
1230 rtsx_manage_aspm(chip);
1231
1232 rtsx_manage_idle(chip);
1233
1234 switch (rtsx_get_stat(chip)) {
1235 case RTSX_STAT_RUN:
1236 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1237 rtsx_blink_led(chip);
1238 #endif
1239 do_remaining_work(chip);
1240 break;
1241
1242 case RTSX_STAT_IDLE:
1243 if (chip->sd_io && !chip->sd_int)
1244 try_to_switch_sdio_ctrl(chip);
1245
1246 rtsx_enable_aspm(chip);
1247 break;
1248
1249 default:
1250 break;
1251 }
1252
1253 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1254 rtsx_manage_2lun_mode(chip);
1255 else
1256 rtsx_manage_1lun_mode(chip);
1257
1258 delink_stage:
1259 rtsx_delink_stage(chip);
1260 }
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1271 {
1272 int i;
1273
1274 for (i = 0; i <= 8; i++) {
1275 int addr = RTSX_HCBAR + i * 4;
1276 u32 reg;
1277
1278 reg = rtsx_readl(chip, addr);
1279 dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1280 }
1281 rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1282 rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1283
1284 for (i = 0; i < 16; i++) {
1285 u16 addr = 0xFE20 + (u16)i;
1286 u8 val;
1287
1288 rtsx_read_register(chip, addr, &val);
1289 dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1290 }
1291
1292 rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1293 rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1294 }
1295
1296 #define MAX_RW_REG_CNT 1024
1297
1298 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1299 {
1300 int i;
1301 u32 val = 3 << 30;
1302
1303 val |= (u32)(addr & 0x3FFF) << 16;
1304 val |= (u32)mask << 8;
1305 val |= (u32)data;
1306
1307 rtsx_writel(chip, RTSX_HAIMR, val);
1308
1309 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1310 val = rtsx_readl(chip, RTSX_HAIMR);
1311 if ((val & BIT(31)) == 0) {
1312 if (data != (u8)val)
1313 return STATUS_FAIL;
1314
1315 return STATUS_SUCCESS;
1316 }
1317 }
1318
1319 return STATUS_TIMEDOUT;
1320 }
1321
1322 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1323 {
1324 u32 val = 2 << 30;
1325 int i;
1326
1327 if (data)
1328 *data = 0;
1329
1330 val |= (u32)(addr & 0x3FFF) << 16;
1331
1332 rtsx_writel(chip, RTSX_HAIMR, val);
1333
1334 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1335 val = rtsx_readl(chip, RTSX_HAIMR);
1336 if ((val & BIT(31)) == 0)
1337 break;
1338 }
1339
1340 if (i >= MAX_RW_REG_CNT)
1341 return STATUS_TIMEDOUT;
1342
1343 if (data)
1344 *data = (u8)(val & 0xFF);
1345
1346 return STATUS_SUCCESS;
1347 }
1348
1349 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1350 u32 val)
1351 {
1352 int retval;
1353 u8 mode = 0, tmp;
1354 int i;
1355
1356 for (i = 0; i < 4; i++) {
1357 if (mask & 0xFF) {
1358 retval = rtsx_write_register(chip, CFGDATA0 + i,
1359 0xFF,
1360 (u8)(val & mask & 0xFF));
1361 if (retval)
1362 return retval;
1363 mode |= (1 << i);
1364 }
1365 mask >>= 8;
1366 val >>= 8;
1367 }
1368
1369 if (mode) {
1370 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1371 if (retval)
1372 return retval;
1373 retval = rtsx_write_register(chip, CFGADDR1, 0xFF,
1374 (u8)(addr >> 8));
1375 if (retval)
1376 return retval;
1377
1378 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1379 0x80 | mode |
1380 ((func_no & 0x03) << 4));
1381 if (retval)
1382 return retval;
1383
1384 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1385 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1386 if (retval)
1387 return retval;
1388 if ((tmp & 0x80) == 0)
1389 break;
1390 }
1391 }
1392
1393 return STATUS_SUCCESS;
1394 }
1395
1396 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1397 {
1398 int retval;
1399 int i;
1400 u8 tmp;
1401 u32 data = 0;
1402
1403 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1404 if (retval)
1405 return retval;
1406 retval = rtsx_write_register(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1407 if (retval)
1408 return retval;
1409 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1410 0x80 | ((func_no & 0x03) << 4));
1411 if (retval)
1412 return retval;
1413
1414 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1415 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1416 if (retval)
1417 return retval;
1418 if ((tmp & 0x80) == 0)
1419 break;
1420 }
1421
1422 for (i = 0; i < 4; i++) {
1423 retval = rtsx_read_register(chip, CFGDATA0 + i, &tmp);
1424 if (retval)
1425 return retval;
1426 data |= (u32)tmp << (i * 8);
1427 }
1428
1429 if (val)
1430 *val = data;
1431
1432 return STATUS_SUCCESS;
1433 }
1434
1435 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1436 int len)
1437 {
1438 u32 *data, *mask;
1439 u16 offset = addr % 4;
1440 u16 aligned_addr = addr - offset;
1441 int dw_len, i, j;
1442 int retval;
1443 size_t size;
1444
1445 if (!buf)
1446 return STATUS_NOMEM;
1447
1448 if ((len + offset) % 4)
1449 dw_len = (len + offset) / 4 + 1;
1450 else
1451 dw_len = (len + offset) / 4;
1452
1453 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1454
1455 size = array_size(dw_len, 4);
1456 data = vzalloc(size);
1457 if (!data)
1458 return STATUS_NOMEM;
1459
1460 mask = vzalloc(size);
1461 if (!mask) {
1462 vfree(data);
1463 return STATUS_NOMEM;
1464 }
1465
1466 j = 0;
1467 for (i = 0; i < len; i++) {
1468 mask[j] |= 0xFF << (offset * 8);
1469 data[j] |= buf[i] << (offset * 8);
1470 if (++offset == 4) {
1471 j++;
1472 offset = 0;
1473 }
1474 }
1475
1476 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask, size);
1477 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data, size);
1478
1479 for (i = 0; i < dw_len; i++) {
1480 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1481 mask[i], data[i]);
1482 if (retval != STATUS_SUCCESS) {
1483 vfree(data);
1484 vfree(mask);
1485 return STATUS_FAIL;
1486 }
1487 }
1488
1489 vfree(data);
1490 vfree(mask);
1491
1492 return STATUS_SUCCESS;
1493 }
1494
1495 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1496 int len)
1497 {
1498 u32 *data;
1499 u16 offset = addr % 4;
1500 u16 aligned_addr = addr - offset;
1501 int dw_len, i, j;
1502 int retval;
1503
1504 if ((len + offset) % 4)
1505 dw_len = (len + offset) / 4 + 1;
1506 else
1507 dw_len = (len + offset) / 4;
1508
1509 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1510
1511 data = vmalloc(array_size(dw_len, 4));
1512 if (!data)
1513 return STATUS_NOMEM;
1514
1515 for (i = 0; i < dw_len; i++) {
1516 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1517 data + i);
1518 if (retval != STATUS_SUCCESS) {
1519 vfree(data);
1520 return STATUS_FAIL;
1521 }
1522 }
1523
1524 if (buf) {
1525 j = 0;
1526
1527 for (i = 0; i < len; i++) {
1528 buf[i] = (u8)(data[j] >> (offset * 8));
1529 if (++offset == 4) {
1530 j++;
1531 offset = 0;
1532 }
1533 }
1534 }
1535
1536 vfree(data);
1537
1538 return STATUS_SUCCESS;
1539 }
1540
1541 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1542 {
1543 int retval;
1544 bool finished = false;
1545 int i;
1546 u8 tmp;
1547
1548 retval = rtsx_write_register(chip, PHYDATA0, 0xFF, (u8)val);
1549 if (retval)
1550 return retval;
1551 retval = rtsx_write_register(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1552 if (retval)
1553 return retval;
1554 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1555 if (retval)
1556 return retval;
1557 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x81);
1558 if (retval)
1559 return retval;
1560
1561 for (i = 0; i < 100000; i++) {
1562 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1563 if (retval)
1564 return retval;
1565 if (!(tmp & 0x80)) {
1566 finished = true;
1567 break;
1568 }
1569 }
1570
1571 if (!finished)
1572 return STATUS_FAIL;
1573
1574 return STATUS_SUCCESS;
1575 }
1576
1577 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1578 {
1579 int retval;
1580 bool finished = false;
1581 int i;
1582 u16 data = 0;
1583 u8 tmp;
1584
1585 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1586 if (retval)
1587 return retval;
1588 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x80);
1589 if (retval)
1590 return retval;
1591
1592 for (i = 0; i < 100000; i++) {
1593 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1594 if (retval)
1595 return retval;
1596 if (!(tmp & 0x80)) {
1597 finished = true;
1598 break;
1599 }
1600 }
1601
1602 if (!finished)
1603 return STATUS_FAIL;
1604
1605 retval = rtsx_read_register(chip, PHYDATA0, &tmp);
1606 if (retval)
1607 return retval;
1608 data = tmp;
1609 retval = rtsx_read_register(chip, PHYDATA1, &tmp);
1610 if (retval)
1611 return retval;
1612 data |= (u16)tmp << 8;
1613
1614 if (val)
1615 *val = data;
1616
1617 return STATUS_SUCCESS;
1618 }
1619
1620 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1621 {
1622 int retval;
1623 int i;
1624 u8 data = 0;
1625
1626 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF, 0x80 | addr);
1627 if (retval)
1628 return retval;
1629
1630 for (i = 0; i < 100; i++) {
1631 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1632 if (retval)
1633 return retval;
1634 if (!(data & 0x80))
1635 break;
1636 udelay(1);
1637 }
1638
1639 if (data & 0x80)
1640 return STATUS_TIMEDOUT;
1641
1642 retval = rtsx_read_register(chip, EFUSE_DATA, &data);
1643 if (retval)
1644 return retval;
1645 if (val)
1646 *val = data;
1647
1648 return STATUS_SUCCESS;
1649 }
1650
1651 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1652 {
1653 int retval;
1654 int i, j;
1655 u8 data = 0, tmp = 0xFF;
1656
1657 for (i = 0; i < 8; i++) {
1658 if (val & (u8)(1 << i))
1659 continue;
1660
1661 tmp &= (~(u8)(1 << i));
1662 dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1663
1664 retval = rtsx_write_register(chip, EFUSE_DATA, 0xFF, tmp);
1665 if (retval)
1666 return retval;
1667 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF,
1668 0xA0 | addr);
1669 if (retval)
1670 return retval;
1671
1672 for (j = 0; j < 100; j++) {
1673 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1674 if (retval)
1675 return retval;
1676 if (!(data & 0x80))
1677 break;
1678 wait_timeout(3);
1679 }
1680
1681 if (data & 0x80)
1682 return STATUS_TIMEDOUT;
1683
1684 wait_timeout(5);
1685 }
1686
1687 return STATUS_SUCCESS;
1688 }
1689
1690 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1691 {
1692 int retval;
1693 u16 value;
1694
1695 retval = rtsx_read_phy_register(chip, reg, &value);
1696 if (retval != STATUS_SUCCESS)
1697 return STATUS_FAIL;
1698
1699 if (value & (1 << bit)) {
1700 value &= ~(1 << bit);
1701 retval = rtsx_write_phy_register(chip, reg, value);
1702 if (retval != STATUS_SUCCESS)
1703 return STATUS_FAIL;
1704 }
1705
1706 return STATUS_SUCCESS;
1707 }
1708
1709 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1710 {
1711 int retval;
1712 u16 value;
1713
1714 retval = rtsx_read_phy_register(chip, reg, &value);
1715 if (retval != STATUS_SUCCESS)
1716 return STATUS_FAIL;
1717
1718 if ((value & (1 << bit)) == 0) {
1719 value |= (1 << bit);
1720 retval = rtsx_write_phy_register(chip, reg, value);
1721 if (retval != STATUS_SUCCESS)
1722 return STATUS_FAIL;
1723 }
1724
1725 return STATUS_SUCCESS;
1726 }
1727
1728 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1729 {
1730 u32 ultmp;
1731
1732 dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1733 chip->product_id, dstate);
1734
1735 if (CHK_SDIO_EXIST(chip)) {
1736 u8 func_no;
1737
1738 if (CHECK_PID(chip, 0x5288))
1739 func_no = 2;
1740 else
1741 func_no = 1;
1742
1743 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1744 dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1745 (int)func_no, ultmp);
1746 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1747 }
1748
1749 rtsx_write_config_byte(chip, 0x44, dstate);
1750 rtsx_write_config_byte(chip, 0x45, 0);
1751 }
1752
1753 void rtsx_enter_L1(struct rtsx_chip *chip)
1754 {
1755 rtsx_handle_pm_dstate(chip, 2);
1756 }
1757
1758 void rtsx_exit_L1(struct rtsx_chip *chip)
1759 {
1760 rtsx_write_config_byte(chip, 0x44, 0);
1761 rtsx_write_config_byte(chip, 0x45, 0);
1762 }
1763
1764 void rtsx_enter_ss(struct rtsx_chip *chip)
1765 {
1766 dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1767
1768 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1769
1770 if (chip->power_down_in_ss) {
1771 rtsx_power_off_card(chip);
1772 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1773 }
1774
1775 if (CHK_SDIO_EXIST(chip))
1776 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1777 0xC0, 0xFF00, 0x0100);
1778
1779 if (chip->auto_delink_en) {
1780 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1781 } else {
1782 if (!chip->phy_debug_mode) {
1783 u32 tmp;
1784
1785 tmp = rtsx_readl(chip, RTSX_BIER);
1786 tmp |= CARD_INT;
1787 rtsx_writel(chip, RTSX_BIER, tmp);
1788 }
1789
1790 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1791 }
1792
1793 rtsx_enter_L1(chip);
1794
1795 RTSX_CLR_DELINK(chip);
1796 rtsx_set_stat(chip, RTSX_STAT_SS);
1797 }
1798
1799 void rtsx_exit_ss(struct rtsx_chip *chip)
1800 {
1801 dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1802
1803 rtsx_exit_L1(chip);
1804
1805 if (chip->power_down_in_ss) {
1806 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1807 udelay(1000);
1808 }
1809
1810 if (RTSX_TST_DELINK(chip)) {
1811 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1812 rtsx_reinit_cards(chip, 1);
1813 RTSX_CLR_DELINK(chip);
1814 } else if (chip->power_down_in_ss) {
1815 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1816 rtsx_reinit_cards(chip, 0);
1817 }
1818 }
1819
1820 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1821 {
1822 u32 status, int_enable;
1823 bool exit_ss = false;
1824 #ifdef SUPPORT_OCP
1825 u32 ocp_int = 0;
1826
1827 ocp_int = OC_INT;
1828 #endif
1829
1830 if (chip->ss_en) {
1831 chip->ss_counter = 0;
1832 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1833 exit_ss = true;
1834 rtsx_exit_L1(chip);
1835 rtsx_set_stat(chip, RTSX_STAT_RUN);
1836 }
1837 }
1838
1839 int_enable = rtsx_readl(chip, RTSX_BIER);
1840 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1841
1842 if (((chip->int_reg & int_enable) == 0) ||
1843 chip->int_reg == 0xFFFFFFFF)
1844 return STATUS_FAIL;
1845
1846 status = chip->int_reg &= (int_enable | 0x7FFFFF);
1847
1848 if (status & CARD_INT) {
1849 chip->auto_delink_cnt = 0;
1850
1851 if (status & SD_INT) {
1852 if (status & SD_EXIST) {
1853 set_bit(SD_NR, &chip->need_reset);
1854 } else {
1855 set_bit(SD_NR, &chip->need_release);
1856 chip->sd_reset_counter = 0;
1857 chip->sd_show_cnt = 0;
1858 clear_bit(SD_NR, &chip->need_reset);
1859 }
1860 } else {
1861
1862
1863
1864
1865
1866
1867
1868 if (exit_ss && (status & SD_EXIST))
1869 set_bit(SD_NR, &chip->need_reinit);
1870 }
1871 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1872 if (status & XD_INT) {
1873 if (status & XD_EXIST) {
1874 set_bit(XD_NR, &chip->need_reset);
1875 } else {
1876 set_bit(XD_NR, &chip->need_release);
1877 chip->xd_reset_counter = 0;
1878 chip->xd_show_cnt = 0;
1879 clear_bit(XD_NR, &chip->need_reset);
1880 }
1881 } else {
1882 if (exit_ss && (status & XD_EXIST))
1883 set_bit(XD_NR, &chip->need_reinit);
1884 }
1885 }
1886 if (status & MS_INT) {
1887 if (status & MS_EXIST) {
1888 set_bit(MS_NR, &chip->need_reset);
1889 } else {
1890 set_bit(MS_NR, &chip->need_release);
1891 chip->ms_reset_counter = 0;
1892 chip->ms_show_cnt = 0;
1893 clear_bit(MS_NR, &chip->need_reset);
1894 }
1895 } else {
1896 if (exit_ss && (status & MS_EXIST))
1897 set_bit(MS_NR, &chip->need_reinit);
1898 }
1899 }
1900
1901 #ifdef SUPPORT_OCP
1902 chip->ocp_int = ocp_int & status;
1903 #endif
1904
1905 if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
1906 chip->int_reg &= ~(u32)DATA_DONE_INT;
1907
1908 return STATUS_SUCCESS;
1909 }
1910
1911 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1912 {
1913 int retval;
1914
1915 dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
1916
1917 rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1918
1919 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1920 if (retval != STATUS_SUCCESS)
1921 return;
1922
1923 rtsx_release_cards(chip);
1924 rtsx_disable_bus_int(chip);
1925 turn_off_led(chip, LED_GPIO);
1926
1927 #ifdef HW_AUTO_SWITCH_SD_BUS
1928 if (chip->sd_io) {
1929 chip->sdio_in_charge = 1;
1930 if (CHECK_PID(chip, 0x5208)) {
1931 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1932
1933 rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1934 } else if (CHECK_PID(chip, 0x5288)) {
1935 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1936
1937 rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1938 }
1939 }
1940 #endif
1941
1942 if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
1943
1944 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1945 }
1946
1947 if (pm_stat == PM_S1) {
1948 dev_dbg(rtsx_dev(chip), "Host enter S1\n");
1949 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1950 HOST_ENTER_S1);
1951 } else if (pm_stat == PM_S3) {
1952 if (chip->s3_pwr_off_delay > 0)
1953 wait_timeout(chip->s3_pwr_off_delay);
1954
1955 dev_dbg(rtsx_dev(chip), "Host enter S3\n");
1956 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1957 HOST_ENTER_S3);
1958 }
1959
1960 if (chip->do_delink_before_power_down && chip->auto_delink_en)
1961 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1962
1963 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1964
1965 chip->cur_clk = 0;
1966 chip->cur_card = 0;
1967 chip->card_exist = 0;
1968 }
1969
1970 void rtsx_enable_aspm(struct rtsx_chip *chip)
1971 {
1972 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
1973 dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
1974 chip->aspm_enabled = 1;
1975
1976 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1977 rtsx_write_phy_register(chip, 0x07, 0);
1978 if (CHECK_PID(chip, 0x5208)) {
1979 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1980 0x30 | chip->aspm_level[0]);
1981 } else {
1982 rtsx_write_config_byte(chip, LCTLR,
1983 chip->aspm_l0s_l1_en);
1984 }
1985
1986 if (CHK_SDIO_EXIST(chip)) {
1987 u16 val = chip->aspm_l0s_l1_en | 0x0100;
1988
1989 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1990 0xC0, 0xFFF, val);
1991 }
1992 }
1993 }
1994
1995 void rtsx_disable_aspm(struct rtsx_chip *chip)
1996 {
1997 if (CHECK_PID(chip, 0x5208))
1998 rtsx_monitor_aspm_config(chip);
1999
2000 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
2001 dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
2002 chip->aspm_enabled = 0;
2003
2004 if (chip->asic_code && CHECK_PID(chip, 0x5208))
2005 rtsx_write_phy_register(chip, 0x07, 0x0129);
2006 if (CHECK_PID(chip, 0x5208))
2007 rtsx_write_register(chip, ASPM_FORCE_CTL,
2008 0xF3, 0x30);
2009 else
2010 rtsx_write_config_byte(chip, LCTLR, 0x00);
2011
2012 wait_timeout(1);
2013 }
2014 }
2015
2016 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2017 {
2018 int retval;
2019 int i, j;
2020 u16 reg_addr;
2021 u8 *ptr;
2022
2023 if (!buf)
2024 return STATUS_ERROR;
2025
2026 ptr = buf;
2027 reg_addr = PPBUF_BASE2;
2028 for (i = 0; i < buf_len / 256; i++) {
2029 rtsx_init_cmd(chip);
2030
2031 for (j = 0; j < 256; j++)
2032 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2033
2034 retval = rtsx_send_cmd(chip, 0, 250);
2035 if (retval < 0)
2036 return STATUS_FAIL;
2037
2038 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2039 ptr += 256;
2040 }
2041
2042 if (buf_len % 256) {
2043 rtsx_init_cmd(chip);
2044
2045 for (j = 0; j < buf_len % 256; j++)
2046 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2047
2048 retval = rtsx_send_cmd(chip, 0, 250);
2049 if (retval < 0)
2050 return STATUS_FAIL;
2051 }
2052
2053 memcpy(ptr, rtsx_get_cmd_data(chip), buf_len % 256);
2054
2055 return STATUS_SUCCESS;
2056 }
2057
2058 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2059 {
2060 int retval;
2061 int i, j;
2062 u16 reg_addr;
2063 u8 *ptr;
2064
2065 if (!buf)
2066 return STATUS_ERROR;
2067
2068 ptr = buf;
2069 reg_addr = PPBUF_BASE2;
2070 for (i = 0; i < buf_len / 256; i++) {
2071 rtsx_init_cmd(chip);
2072
2073 for (j = 0; j < 256; j++) {
2074 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2075 *ptr);
2076 ptr++;
2077 }
2078
2079 retval = rtsx_send_cmd(chip, 0, 250);
2080 if (retval < 0)
2081 return STATUS_FAIL;
2082 }
2083
2084 if (buf_len % 256) {
2085 rtsx_init_cmd(chip);
2086
2087 for (j = 0; j < buf_len % 256; j++) {
2088 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2089 *ptr);
2090 ptr++;
2091 }
2092
2093 retval = rtsx_send_cmd(chip, 0, 250);
2094 if (retval < 0)
2095 return STATUS_FAIL;
2096 }
2097
2098 return STATUS_SUCCESS;
2099 }
2100
2101 int rtsx_check_chip_exist(struct rtsx_chip *chip)
2102 {
2103 if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
2104 return STATUS_FAIL;
2105
2106 return STATUS_SUCCESS;
2107 }
2108
2109 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2110 {
2111 int retval;
2112 u8 mask = 0;
2113
2114 if (ctl & SSC_PDCTL)
2115 mask |= SSC_POWER_DOWN;
2116
2117 #ifdef SUPPORT_OCP
2118 if (ctl & OC_PDCTL) {
2119 mask |= SD_OC_POWER_DOWN;
2120 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2121 mask |= MS_OC_POWER_DOWN;
2122 }
2123 #endif
2124
2125 if (mask) {
2126 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2127 if (retval != STATUS_SUCCESS)
2128 return STATUS_FAIL;
2129
2130 if (CHECK_PID(chip, 0x5288))
2131 wait_timeout(200);
2132 }
2133
2134 return STATUS_SUCCESS;
2135 }
2136
2137 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2138 {
2139 int retval;
2140 u8 mask = 0, val = 0;
2141
2142 if (ctl & SSC_PDCTL)
2143 mask |= SSC_POWER_DOWN;
2144
2145 #ifdef SUPPORT_OCP
2146 if (ctl & OC_PDCTL) {
2147 mask |= SD_OC_POWER_DOWN;
2148 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2149 mask |= MS_OC_POWER_DOWN;
2150 }
2151 #endif
2152
2153 if (mask) {
2154 val = mask;
2155 retval = rtsx_write_register(chip, FPDCTL, mask, val);
2156 if (retval != STATUS_SUCCESS)
2157 return STATUS_FAIL;
2158 }
2159
2160 return STATUS_SUCCESS;
2161 }