root/drivers/staging/rts5208/rtsx_chip.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rtsx_calibration
  2. rtsx_enable_card_int
  3. rtsx_enable_bus_int
  4. rtsx_disable_bus_int
  5. rtsx_pre_handle_sdio_old
  6. rtsx_pre_handle_sdio_new
  7. rtsx_reset_aspm
  8. rtsx_enable_pcie_intr
  9. rtsx_reset_chip
  10. valid_sd_speed_prior
  11. valid_sd_current_prior
  12. rts5208_init
  13. rts5288_init
  14. rtsx_init_chip
  15. rtsx_release_chip
  16. rtsx_blink_led
  17. rtsx_monitor_aspm_config
  18. rtsx_manage_ocp
  19. rtsx_manage_sd_lock
  20. rtsx_is_ss_allowed
  21. rtsx_manage_ss
  22. rtsx_manage_aspm
  23. rtsx_manage_idle
  24. rtsx_manage_2lun_mode
  25. rtsx_manage_1lun_mode
  26. rtsx_delink_stage1
  27. rtsx_delink_stage
  28. rtsx_polling_func
  29. rtsx_stop_cmd
  30. rtsx_write_register
  31. rtsx_read_register
  32. rtsx_write_cfg_dw
  33. rtsx_read_cfg_dw
  34. rtsx_write_cfg_seq
  35. rtsx_read_cfg_seq
  36. rtsx_write_phy_register
  37. rtsx_read_phy_register
  38. rtsx_read_efuse
  39. rtsx_write_efuse
  40. rtsx_clr_phy_reg_bit
  41. rtsx_set_phy_reg_bit
  42. rtsx_handle_pm_dstate
  43. rtsx_enter_L1
  44. rtsx_exit_L1
  45. rtsx_enter_ss
  46. rtsx_exit_ss
  47. rtsx_pre_handle_interrupt
  48. rtsx_do_before_power_down
  49. rtsx_enable_aspm
  50. rtsx_disable_aspm
  51. rtsx_read_ppbuf
  52. rtsx_write_ppbuf
  53. rtsx_check_chip_exist
  54. rtsx_force_power_on
  55. rtsx_force_power_down

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  * Driver for Realtek PCI-Express card reader
   4  *
   5  * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
   6  *
   7  * Author:
   8  *   Wei WANG (wei_wang@realsil.com.cn)
   9  *   Micky Ching (micky_ching@realsil.com.cn)
  10  */
  11 
  12 #include <linux/blkdev.h>
  13 #include <linux/kthread.h>
  14 #include <linux/sched.h>
  15 #include <linux/workqueue.h>
  16 #include <linux/vmalloc.h>
  17 
  18 #include "rtsx.h"
  19 #include "sd.h"
  20 #include "xd.h"
  21 #include "ms.h"
  22 
  23 static void rtsx_calibration(struct rtsx_chip *chip)
  24 {
  25         rtsx_write_phy_register(chip, 0x1B, 0x135E);
  26         wait_timeout(10);
  27         rtsx_write_phy_register(chip, 0x00, 0x0280);
  28         rtsx_write_phy_register(chip, 0x01, 0x7112);
  29         rtsx_write_phy_register(chip, 0x01, 0x7110);
  30         rtsx_write_phy_register(chip, 0x01, 0x7112);
  31         rtsx_write_phy_register(chip, 0x01, 0x7113);
  32         rtsx_write_phy_register(chip, 0x00, 0x0288);
  33 }
  34 
  35 void rtsx_enable_card_int(struct rtsx_chip *chip)
  36 {
  37         u32 reg = rtsx_readl(chip, RTSX_BIER);
  38         int i;
  39 
  40         for (i = 0; i <= chip->max_lun; i++) {
  41                 if (chip->lun2card[i] & XD_CARD)
  42                         reg |= XD_INT_EN;
  43                 if (chip->lun2card[i] & SD_CARD)
  44                         reg |= SD_INT_EN;
  45                 if (chip->lun2card[i] & MS_CARD)
  46                         reg |= MS_INT_EN;
  47         }
  48         if (chip->hw_bypass_sd)
  49                 reg &= ~((u32)SD_INT_EN);
  50 
  51         rtsx_writel(chip, RTSX_BIER, reg);
  52 }
  53 
  54 void rtsx_enable_bus_int(struct rtsx_chip *chip)
  55 {
  56         u32 reg = 0;
  57 #ifndef DISABLE_CARD_INT
  58         int i;
  59 #endif
  60 
  61         reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
  62 
  63 #ifndef DISABLE_CARD_INT
  64         for (i = 0; i <= chip->max_lun; i++) {
  65                 dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
  66                         i, chip->lun2card[i]);
  67 
  68                 if (chip->lun2card[i] & XD_CARD)
  69                         reg |= XD_INT_EN;
  70                 if (chip->lun2card[i] & SD_CARD)
  71                         reg |= SD_INT_EN;
  72                 if (chip->lun2card[i] & MS_CARD)
  73                         reg |= MS_INT_EN;
  74         }
  75         if (chip->hw_bypass_sd)
  76                 reg &= ~((u32)SD_INT_EN);
  77 #endif
  78 
  79         if (chip->ic_version >= IC_VER_C)
  80                 reg |= DELINK_INT_EN;
  81 #ifdef SUPPORT_OCP
  82         reg |= OC_INT_EN;
  83 #endif
  84         if (!chip->adma_mode)
  85                 reg |= DATA_DONE_INT_EN;
  86 
  87         /* Enable Bus Interrupt */
  88         rtsx_writel(chip, RTSX_BIER, reg);
  89 
  90         dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
  91 }
  92 
  93 void rtsx_disable_bus_int(struct rtsx_chip *chip)
  94 {
  95         rtsx_writel(chip, RTSX_BIER, 0);
  96 }
  97 
  98 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
  99 {
 100         int retval;
 101 
 102         if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
 103                 if (chip->asic_code) {
 104                         retval = rtsx_write_register(chip, CARD_PULL_CTL5,
 105                                                      0xFF,
 106                                                      MS_INS_PU | SD_WP_PU |
 107                                                      SD_CD_PU | SD_CMD_PU);
 108                         if (retval)
 109                                 return retval;
 110                 } else {
 111                         retval = rtsx_write_register(chip, FPGA_PULL_CTL,
 112                                                      0xFF,
 113                                                      FPGA_SD_PULL_CTL_EN);
 114                         if (retval)
 115                                 return retval;
 116                 }
 117                 retval = rtsx_write_register(chip, CARD_SHARE_MODE, 0xFF,
 118                                              CARD_SHARE_48_SD);
 119                 if (retval)
 120                         return retval;
 121 
 122                 /* Enable SDIO internal clock */
 123                 retval = rtsx_write_register(chip, 0xFF2C, 0x01, 0x01);
 124                 if (retval)
 125                         return retval;
 126 
 127                 retval = rtsx_write_register(chip, SDIO_CTRL, 0xFF,
 128                                              SDIO_BUS_CTRL | SDIO_CD_CTRL);
 129                 if (retval)
 130                         return retval;
 131 
 132                 chip->sd_int = 1;
 133                 chip->sd_io = 1;
 134         } else {
 135                 chip->need_reset |= SD_CARD;
 136         }
 137 
 138         return STATUS_SUCCESS;
 139 }
 140 
 141 #ifdef HW_AUTO_SWITCH_SD_BUS
 142 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
 143 {
 144         u8 tmp;
 145         bool sw_bypass_sd = false;
 146         int retval;
 147 
 148         if (chip->driver_first_load) {
 149                 if (CHECK_PID(chip, 0x5288)) {
 150                         retval = rtsx_read_register(chip, 0xFE5A, &tmp);
 151                         if (retval)
 152                                 return retval;
 153                         if (tmp & 0x08)
 154                                 sw_bypass_sd = true;
 155                 } else if (CHECK_PID(chip, 0x5208)) {
 156                         retval = rtsx_read_register(chip, 0xFE70, &tmp);
 157                         if (retval)
 158                                 return retval;
 159                         if (tmp & 0x80)
 160                                 sw_bypass_sd = true;
 161                 }
 162         } else {
 163                 if (chip->sdio_in_charge)
 164                         sw_bypass_sd = true;
 165         }
 166         dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
 167                 chip->sdio_in_charge);
 168         dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
 169                 chip->driver_first_load);
 170         dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
 171                 sw_bypass_sd);
 172 
 173         if (sw_bypass_sd) {
 174                 u8 cd_toggle_mask = 0;
 175 
 176                 retval = rtsx_read_register(chip, TLPTISTAT, &tmp);
 177                 if (retval)
 178                         return retval;
 179                 cd_toggle_mask = 0x08;
 180 
 181                 if (tmp & cd_toggle_mask) {
 182                         /* Disable sdio_bus_auto_switch */
 183                         if (CHECK_PID(chip, 0x5288)) {
 184                                 retval = rtsx_write_register(chip, 0xFE5A,
 185                                                              0x08, 0x00);
 186                                 if (retval)
 187                                         return retval;
 188                         } else if (CHECK_PID(chip, 0x5208)) {
 189                                 retval = rtsx_write_register(chip, 0xFE70,
 190                                                              0x80, 0x00);
 191                                 if (retval)
 192                                         return retval;
 193                         }
 194 
 195                         retval = rtsx_write_register(chip, TLPTISTAT, 0xFF,
 196                                                      tmp);
 197                         if (retval)
 198                                 return retval;
 199 
 200                         chip->need_reset |= SD_CARD;
 201                 } else {
 202                         dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
 203 
 204                         if (chip->asic_code) {
 205                                 retval = sd_pull_ctl_enable(chip);
 206                                 if (retval != STATUS_SUCCESS)
 207                                         return STATUS_FAIL;
 208                         } else {
 209                                 retval = rtsx_write_register
 210                                                 (chip, FPGA_PULL_CTL,
 211                                                  FPGA_SD_PULL_CTL_BIT | 0x20,
 212                                                  0);
 213                                 if (retval)
 214                                         return retval;
 215                         }
 216                         retval = card_share_mode(chip, SD_CARD);
 217                         if (retval != STATUS_SUCCESS)
 218                                 return STATUS_FAIL;
 219 
 220                         /* Enable sdio_bus_auto_switch */
 221                         if (CHECK_PID(chip, 0x5288)) {
 222                                 retval = rtsx_write_register(chip, 0xFE5A,
 223                                                              0x08, 0x08);
 224                                 if (retval)
 225                                         return retval;
 226                         } else if (CHECK_PID(chip, 0x5208)) {
 227                                 retval = rtsx_write_register(chip, 0xFE70,
 228                                                              0x80, 0x80);
 229                                 if (retval)
 230                                         return retval;
 231                         }
 232 
 233                         chip->chip_insert_with_sdio = 1;
 234                         chip->sd_io = 1;
 235                 }
 236         } else {
 237                 retval = rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
 238                 if (retval)
 239                         return retval;
 240 
 241                 chip->need_reset |= SD_CARD;
 242         }
 243 
 244         return STATUS_SUCCESS;
 245 }
 246 #endif
 247 
 248 static int rtsx_reset_aspm(struct rtsx_chip *chip)
 249 {
 250         int ret;
 251 
 252         if (chip->dynamic_aspm) {
 253                 if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
 254                         return STATUS_SUCCESS;
 255 
 256                 ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
 257                                         chip->aspm_l0s_l1_en);
 258                 if (ret != STATUS_SUCCESS)
 259                         return STATUS_FAIL;
 260 
 261                 return STATUS_SUCCESS;
 262         }
 263 
 264         if (CHECK_PID(chip, 0x5208)) {
 265                 ret = rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
 266                 if (ret)
 267                         return ret;
 268         }
 269         ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
 270         if (ret != STATUS_SUCCESS)
 271                 return STATUS_FAIL;
 272 
 273         chip->aspm_level[0] = chip->aspm_l0s_l1_en;
 274         if (CHK_SDIO_EXIST(chip)) {
 275                 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
 276                 ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
 277                                         0xC0, 0xFF, chip->aspm_l0s_l1_en);
 278                 if (ret != STATUS_SUCCESS)
 279                         return STATUS_FAIL;
 280         }
 281 
 282         chip->aspm_enabled = 1;
 283 
 284         return STATUS_SUCCESS;
 285 }
 286 
 287 static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
 288 {
 289         int ret;
 290 
 291         if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
 292                 rtsx_enable_bus_int(chip);
 293                 return STATUS_SUCCESS;
 294         }
 295 
 296         if (chip->phy_debug_mode) {
 297                 ret = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
 298                 if (ret)
 299                         return ret;
 300                 rtsx_disable_bus_int(chip);
 301         } else {
 302                 rtsx_enable_bus_int(chip);
 303         }
 304 
 305         if (chip->ic_version >= IC_VER_D) {
 306                 u16 reg;
 307 
 308                 ret = rtsx_read_phy_register(chip, 0x00, &reg);
 309                 if (ret != STATUS_SUCCESS)
 310                         return STATUS_FAIL;
 311 
 312                 reg &= 0xFE7F;
 313                 reg |= 0x80;
 314                 ret = rtsx_write_phy_register(chip, 0x00, reg);
 315                 if (ret != STATUS_SUCCESS)
 316                         return STATUS_FAIL;
 317 
 318                 ret = rtsx_read_phy_register(chip, 0x1C, &reg);
 319                 if (ret != STATUS_SUCCESS)
 320                         return STATUS_FAIL;
 321 
 322                 reg &= 0xFFF7;
 323                 ret = rtsx_write_phy_register(chip, 0x1C, reg);
 324                 if (ret != STATUS_SUCCESS)
 325                         return STATUS_FAIL;
 326         }
 327 
 328         if (chip->driver_first_load && (chip->ic_version < IC_VER_C))
 329                 rtsx_calibration(chip);
 330 
 331         return STATUS_SUCCESS;
 332 }
 333 
 334 int rtsx_reset_chip(struct rtsx_chip *chip)
 335 {
 336         int retval;
 337 
 338         rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
 339 
 340         rtsx_disable_aspm(chip);
 341 
 342         retval = rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 0x00);
 343         if (retval)
 344                 return retval;
 345 
 346         /* Disable card clock */
 347         retval = rtsx_write_register(chip, CARD_CLK_EN, 0x1E, 0);
 348         if (retval)
 349                 return retval;
 350 
 351 #ifdef SUPPORT_OCP
 352         /* SSC power on, OCD power on */
 353         if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
 354                 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN, 0);
 355                 if (retval)
 356                         return retval;
 357         } else {
 358                 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
 359                                              MS_OC_POWER_DOWN);
 360                 if (retval)
 361                         return retval;
 362         }
 363 
 364         retval = rtsx_write_register(chip, OCPPARA1, OCP_TIME_MASK,
 365                                      OCP_TIME_800);
 366         if (retval)
 367                 return retval;
 368         retval = rtsx_write_register(chip, OCPPARA2, OCP_THD_MASK,
 369                                      OCP_THD_244_946);
 370         if (retval)
 371                 return retval;
 372         retval = rtsx_write_register(chip, OCPCTL, 0xFF,
 373                                      CARD_OC_INT_EN | CARD_DETECT_EN);
 374         if (retval)
 375                 return retval;
 376 #else
 377         /* OC power down */
 378         retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
 379                                      OC_POWER_DOWN);
 380         if (retval)
 381                 return retval;
 382 #endif
 383 
 384         if (!CHECK_PID(chip, 0x5288)) {
 385                 retval = rtsx_write_register(chip, CARD_GPIO_DIR, 0xFF, 0x03);
 386                 if (retval)
 387                         return retval;
 388         }
 389 
 390         /* Turn off LED */
 391         retval = rtsx_write_register(chip, CARD_GPIO, 0xFF, 0x03);
 392         if (retval)
 393                 return retval;
 394 
 395         /* Reset delink mode */
 396         retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0);
 397         if (retval)
 398                 return retval;
 399 
 400         /* Card driving select */
 401         retval = rtsx_write_register(chip, CARD_DRIVE_SEL, 0xFF,
 402                                      chip->card_drive_sel);
 403         if (retval)
 404                 return retval;
 405 
 406 #ifdef LED_AUTO_BLINK
 407         retval = rtsx_write_register(chip, CARD_AUTO_BLINK, 0xFF,
 408                                      LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
 409         if (retval)
 410                 return retval;
 411 #endif
 412 
 413         if (chip->asic_code) {
 414                 /* Enable SSC Clock */
 415                 retval = rtsx_write_register(chip, SSC_CTL1, 0xFF,
 416                                              SSC_8X_EN | SSC_SEL_4M);
 417                 if (retval)
 418                         return retval;
 419                 retval = rtsx_write_register(chip, SSC_CTL2, 0xFF, 0x12);
 420                 if (retval)
 421                         return retval;
 422         }
 423 
 424         /*
 425          * Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
 426          *    0xFE5B
 427          *    bit[1]    u_cd_rst_core_en        rst_value = 0
 428          *    bit[2]    u_force_rst_core_en     rst_value = 0
 429          *    bit[5]    u_mac_phy_rst_n_dbg     rst_value = 1
 430          *    bit[4]    u_non_sticky_rst_n_dbg  rst_value = 0
 431          */
 432         retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x16, 0x10);
 433         if (retval)
 434                 return retval;
 435 
 436         /* Enable ASPM */
 437         if (chip->aspm_l0s_l1_en) {
 438                 retval = rtsx_reset_aspm(chip);
 439                 if (retval != STATUS_SUCCESS)
 440                         return STATUS_FAIL;
 441         } else {
 442                 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
 443                         retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
 444                         if (retval != STATUS_SUCCESS)
 445                                 return STATUS_FAIL;
 446                 }
 447                 retval = rtsx_write_config_byte(chip, LCTLR,
 448                                                 chip->aspm_l0s_l1_en);
 449                 if (retval != STATUS_SUCCESS)
 450                         return STATUS_FAIL;
 451         }
 452 
 453         retval = rtsx_write_config_byte(chip, 0x81, 1);
 454         if (retval != STATUS_SUCCESS)
 455                 return STATUS_FAIL;
 456 
 457         if (CHK_SDIO_EXIST(chip)) {
 458                 retval = rtsx_write_cfg_dw(chip,
 459                                            CHECK_PID(chip, 0x5288) ? 2 : 1,
 460                                            0xC0, 0xFF00, 0x0100);
 461 
 462                 if (retval != STATUS_SUCCESS)
 463                         return STATUS_FAIL;
 464         }
 465 
 466         if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
 467                 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
 468                 if (retval != STATUS_SUCCESS)
 469                         return STATUS_FAIL;
 470 
 471                 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
 472                 if (retval != STATUS_SUCCESS)
 473                         return STATUS_FAIL;
 474         }
 475 
 476         retval = rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT,
 477                                      LINK_RDY_INT);
 478         if (retval)
 479                 return retval;
 480 
 481         retval = rtsx_write_register(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
 482         if (retval)
 483                 return retval;
 484 
 485         retval = rtsx_enable_pcie_intr(chip);
 486         if (retval != STATUS_SUCCESS)
 487                 return STATUS_FAIL;
 488 
 489         chip->need_reset = 0;
 490 
 491         chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
 492 
 493         if (chip->hw_bypass_sd)
 494                 goto nextcard;
 495         dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
 496                 chip->int_reg);
 497         if (chip->int_reg & SD_EXIST) {
 498 #ifdef HW_AUTO_SWITCH_SD_BUS
 499                 if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C))
 500                         retval = rtsx_pre_handle_sdio_old(chip);
 501                 else
 502                         retval = rtsx_pre_handle_sdio_new(chip);
 503 
 504                 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (%s)\n",
 505                         (unsigned int)(chip->need_reset), __func__);
 506 #else  /* HW_AUTO_SWITCH_SD_BUS */
 507                 retval = rtsx_pre_handle_sdio_old(chip);
 508 #endif  /* HW_AUTO_SWITCH_SD_BUS */
 509                 if (retval != STATUS_SUCCESS)
 510                         return STATUS_FAIL;
 511 
 512         } else {
 513                 chip->sd_io = 0;
 514                 retval = rtsx_write_register(chip, SDIO_CTRL,
 515                                              SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
 516                 if (retval)
 517                         return retval;
 518         }
 519 
 520 nextcard:
 521         if (chip->int_reg & XD_EXIST)
 522                 chip->need_reset |= XD_CARD;
 523         if (chip->int_reg & MS_EXIST)
 524                 chip->need_reset |= MS_CARD;
 525         if (chip->int_reg & CARD_EXIST) {
 526                 retval = rtsx_write_register(chip, SSC_CTL1, SSC_RSTB,
 527                                              SSC_RSTB);
 528                 if (retval)
 529                         return retval;
 530         }
 531 
 532         dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
 533                 (unsigned int)(chip->need_reset));
 534 
 535         retval = rtsx_write_register(chip, RCCTL, 0x01, 0x00);
 536         if (retval)
 537                 return retval;
 538 
 539         if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
 540                 /* Turn off main power when entering S3/S4 state */
 541                 retval = rtsx_write_register(chip, MAIN_PWR_OFF_CTL, 0x03,
 542                                              0x03);
 543                 if (retval)
 544                         return retval;
 545         }
 546 
 547         if (chip->remote_wakeup_en && !chip->auto_delink_en) {
 548                 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x07);
 549                 if (retval)
 550                         return retval;
 551                 if (chip->aux_pwr_exist) {
 552                         retval = rtsx_write_register(chip, PME_FORCE_CTL,
 553                                                      0xFF, 0x33);
 554                         if (retval)
 555                                 return retval;
 556                 }
 557         } else {
 558                 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x04);
 559                 if (retval)
 560                         return retval;
 561                 retval = rtsx_write_register(chip, PME_FORCE_CTL, 0xFF, 0x30);
 562                 if (retval)
 563                         return retval;
 564         }
 565 
 566         if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
 567                 retval = rtsx_write_register(chip, PETXCFG, 0x1C, 0x14);
 568                 if (retval)
 569                         return retval;
 570         }
 571 
 572         if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
 573                 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
 574                 if (retval != STATUS_SUCCESS)
 575                         return STATUS_FAIL;
 576         }
 577 
 578         if (chip->ft2_fast_mode) {
 579                 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
 580                                              MS_PARTIAL_POWER_ON |
 581                                              SD_PARTIAL_POWER_ON);
 582                 if (retval)
 583                         return retval;
 584                 udelay(chip->pmos_pwr_on_interval);
 585                 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
 586                                              MS_POWER_ON | SD_POWER_ON);
 587                 if (retval)
 588                         return retval;
 589 
 590                 wait_timeout(200);
 591         }
 592 
 593         /* Reset card */
 594         rtsx_reset_detected_cards(chip, 0);
 595 
 596         chip->driver_first_load = 0;
 597 
 598         return STATUS_SUCCESS;
 599 }
 600 
 601 static inline int valid_sd_speed_prior(u32 sd_speed_prior)
 602 {
 603         bool valid_para = true;
 604         int i;
 605 
 606         for (i = 0; i < 4; i++) {
 607                 u8 tmp = (u8)(sd_speed_prior >> (i * 8));
 608 
 609                 if ((tmp < 0x01) || (tmp > 0x04)) {
 610                         valid_para = false;
 611                         break;
 612                 }
 613         }
 614 
 615         return valid_para;
 616 }
 617 
 618 static inline int valid_sd_current_prior(u32 sd_current_prior)
 619 {
 620         bool valid_para = true;
 621         int i;
 622 
 623         for (i = 0; i < 4; i++) {
 624                 u8 tmp = (u8)(sd_current_prior >> (i * 8));
 625 
 626                 if (tmp > 0x03) {
 627                         valid_para = false;
 628                         break;
 629                 }
 630         }
 631 
 632         return valid_para;
 633 }
 634 
 635 static int rts5208_init(struct rtsx_chip *chip)
 636 {
 637         int retval;
 638         u16 reg = 0;
 639         u8 val = 0;
 640 
 641         retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
 642         if (retval)
 643                 return retval;
 644         retval = rtsx_read_register(chip, CLK_SEL, &val);
 645         if (retval)
 646                 return retval;
 647         chip->asic_code = val == 0 ? 1 : 0;
 648 
 649         if (chip->asic_code) {
 650                 retval = rtsx_read_phy_register(chip, 0x1C, &reg);
 651                 if (retval != STATUS_SUCCESS)
 652                         return STATUS_FAIL;
 653 
 654                 dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
 655                         reg);
 656                 chip->ic_version = (reg >> 4) & 0x07;
 657                 chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
 658 
 659         } else {
 660                 retval = rtsx_read_register(chip, 0xFE80, &val);
 661                 if (retval)
 662                         return retval;
 663                 chip->ic_version = val;
 664                 chip->phy_debug_mode = 0;
 665         }
 666 
 667         retval = rtsx_read_register(chip, PDINFO, &val);
 668         if (retval)
 669                 return retval;
 670         dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
 671         chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
 672 
 673         retval = rtsx_read_register(chip, 0xFE50, &val);
 674         if (retval)
 675                 return retval;
 676         chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
 677 
 678         rtsx_read_config_byte(chip, 0x0E, &val);
 679         if (val & 0x80)
 680                 SET_SDIO_EXIST(chip);
 681         else
 682                 CLR_SDIO_EXIST(chip);
 683 
 684         if (chip->use_hw_setting) {
 685                 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
 686                 if (retval)
 687                         return retval;
 688                 chip->auto_delink_en = val & 0x80 ? 1 : 0;
 689         }
 690 
 691         return STATUS_SUCCESS;
 692 }
 693 
 694 static int rts5288_init(struct rtsx_chip *chip)
 695 {
 696         int retval;
 697         u8 val = 0, max_func;
 698         u32 lval = 0;
 699 
 700         retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
 701         if (retval)
 702                 return retval;
 703         retval = rtsx_read_register(chip, CLK_SEL, &val);
 704         if (retval)
 705                 return retval;
 706         chip->asic_code = val == 0 ? 1 : 0;
 707 
 708         chip->ic_version = 0;
 709         chip->phy_debug_mode = 0;
 710 
 711         retval = rtsx_read_register(chip, PDINFO, &val);
 712         if (retval)
 713                 return retval;
 714         dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
 715         chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
 716 
 717         retval = rtsx_read_register(chip, CARD_SHARE_MODE, &val);
 718         if (retval)
 719                 return retval;
 720         dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
 721         chip->baro_pkg = val & 0x04 ? QFN : LQFP;
 722 
 723         retval = rtsx_read_register(chip, 0xFE5A, &val);
 724         if (retval)
 725                 return retval;
 726         chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
 727 
 728         retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
 729         if (retval != STATUS_SUCCESS)
 730                 return STATUS_FAIL;
 731 
 732         max_func = (u8)((lval >> 29) & 0x07);
 733         dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
 734         if (max_func == 0x02)
 735                 SET_SDIO_EXIST(chip);
 736         else
 737                 CLR_SDIO_EXIST(chip);
 738 
 739         if (chip->use_hw_setting) {
 740                 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
 741                 if (retval)
 742                         return retval;
 743                 chip->auto_delink_en = val & 0x80 ? 1 : 0;
 744 
 745                 if (CHECK_BARO_PKG(chip, LQFP))
 746                         chip->lun_mode = SD_MS_1LUN;
 747                 else
 748                         chip->lun_mode = DEFAULT_SINGLE;
 749         }
 750 
 751         return STATUS_SUCCESS;
 752 }
 753 
 754 int rtsx_init_chip(struct rtsx_chip *chip)
 755 {
 756         struct sd_info *sd_card = &chip->sd_card;
 757         struct xd_info *xd_card = &chip->xd_card;
 758         struct ms_info *ms_card = &chip->ms_card;
 759         int retval;
 760         unsigned int i;
 761 
 762         dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
 763                 chip->vendor_id, chip->product_id);
 764 
 765         chip->ic_version = 0;
 766 
 767         memset(xd_card, 0, sizeof(struct xd_info));
 768         memset(sd_card, 0, sizeof(struct sd_info));
 769         memset(ms_card, 0, sizeof(struct ms_info));
 770 
 771         chip->xd_reset_counter = 0;
 772         chip->sd_reset_counter = 0;
 773         chip->ms_reset_counter = 0;
 774 
 775         chip->xd_show_cnt = MAX_SHOW_CNT;
 776         chip->sd_show_cnt = MAX_SHOW_CNT;
 777         chip->ms_show_cnt = MAX_SHOW_CNT;
 778 
 779         chip->sd_io = 0;
 780         chip->auto_delink_cnt = 0;
 781         chip->auto_delink_allowed = 1;
 782         rtsx_set_stat(chip, RTSX_STAT_INIT);
 783 
 784         chip->aspm_enabled = 0;
 785         chip->chip_insert_with_sdio = 0;
 786         chip->sdio_aspm = 0;
 787         chip->sdio_idle = 0;
 788         chip->sdio_counter = 0;
 789         chip->cur_card = 0;
 790         chip->phy_debug_mode = 0;
 791         chip->sdio_func_exist = 0;
 792         memset(chip->sdio_raw_data, 0, 12);
 793 
 794         for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
 795                 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
 796                 chip->rw_fail_cnt[i] = 0;
 797         }
 798 
 799         if (!valid_sd_speed_prior(chip->sd_speed_prior))
 800                 chip->sd_speed_prior = 0x01040203;
 801 
 802         dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
 803                 chip->sd_speed_prior);
 804 
 805         if (!valid_sd_current_prior(chip->sd_current_prior))
 806                 chip->sd_current_prior = 0x00010203;
 807 
 808         dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
 809                 chip->sd_current_prior);
 810 
 811         if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0))
 812                 chip->sd_ddr_tx_phase = 0;
 813 
 814         if ((chip->mmc_ddr_tx_phase > 31) || (chip->mmc_ddr_tx_phase < 0))
 815                 chip->mmc_ddr_tx_phase = 0;
 816 
 817         retval = rtsx_write_register(chip, FPDCTL, SSC_POWER_DOWN, 0);
 818         if (retval)
 819                 return retval;
 820         wait_timeout(200);
 821         retval = rtsx_write_register(chip, CLK_DIV, 0x07, 0x07);
 822         if (retval)
 823                 return retval;
 824         dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
 825                 chip->use_hw_setting);
 826 
 827         if (CHECK_PID(chip, 0x5208)) {
 828                 retval = rts5208_init(chip);
 829                 if (retval != STATUS_SUCCESS)
 830                         return STATUS_FAIL;
 831 
 832         } else if (CHECK_PID(chip, 0x5288)) {
 833                 retval = rts5288_init(chip);
 834                 if (retval != STATUS_SUCCESS)
 835                         return STATUS_FAIL;
 836         }
 837 
 838         if (chip->ss_en == 2)
 839                 chip->ss_en = 0;
 840 
 841         dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
 842         dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
 843         dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
 844                 chip->phy_debug_mode);
 845         dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
 846                 chip->aux_pwr_exist);
 847         dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
 848                 chip->sdio_func_exist);
 849         dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
 850                 chip->hw_bypass_sd);
 851         dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
 852                 chip->aspm_l0s_l1_en);
 853         dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
 854         dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
 855                 chip->auto_delink_en);
 856         dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
 857         dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
 858 
 859         if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
 860                 chip->card2lun[SD_CARD] = 0;
 861                 chip->card2lun[MS_CARD] = 1;
 862                 chip->card2lun[XD_CARD] = 0xFF;
 863                 chip->lun2card[0] = SD_CARD;
 864                 chip->lun2card[1] = MS_CARD;
 865                 chip->max_lun = 1;
 866                 SET_SDIO_IGNORED(chip);
 867         } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
 868                 chip->card2lun[SD_CARD] = 0;
 869                 chip->card2lun[MS_CARD] = 0;
 870                 chip->card2lun[XD_CARD] = 0xFF;
 871                 chip->lun2card[0] = SD_CARD | MS_CARD;
 872                 chip->max_lun = 0;
 873         } else {
 874                 chip->card2lun[XD_CARD] = 0;
 875                 chip->card2lun[SD_CARD] = 0;
 876                 chip->card2lun[MS_CARD] = 0;
 877                 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
 878                 chip->max_lun = 0;
 879         }
 880 
 881         retval = rtsx_reset_chip(chip);
 882         if (retval != STATUS_SUCCESS)
 883                 return STATUS_FAIL;
 884 
 885         return STATUS_SUCCESS;
 886 }
 887 
 888 void rtsx_release_chip(struct rtsx_chip *chip)
 889 {
 890         xd_free_l2p_tbl(chip);
 891         ms_free_l2p_tbl(chip);
 892         chip->card_exist = 0;
 893         chip->card_ready = 0;
 894 }
 895 
 896 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
 897 static inline void rtsx_blink_led(struct rtsx_chip *chip)
 898 {
 899         if (chip->card_exist && chip->blink_led) {
 900                 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
 901                         chip->led_toggle_counter++;
 902                 } else {
 903                         chip->led_toggle_counter = 0;
 904                         toggle_gpio(chip, LED_GPIO);
 905                 }
 906         }
 907 }
 908 #endif
 909 
 910 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
 911 {
 912         bool reg_changed, maybe_support_aspm;
 913         u32 tmp = 0;
 914         u8 reg0 = 0, reg1 = 0;
 915 
 916         maybe_support_aspm = false;
 917         reg_changed = false;
 918         rtsx_read_config_byte(chip, LCTLR, &reg0);
 919         if (chip->aspm_level[0] != reg0) {
 920                 reg_changed = true;
 921                 chip->aspm_level[0] = reg0;
 922         }
 923         if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
 924                 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
 925                 reg1 = (u8)tmp;
 926                 if (chip->aspm_level[1] != reg1) {
 927                         reg_changed = true;
 928                         chip->aspm_level[1] = reg1;
 929                 }
 930 
 931                 if ((reg0 & 0x03) && (reg1 & 0x03))
 932                         maybe_support_aspm = true;
 933 
 934         } else {
 935                 if (reg0 & 0x03)
 936                         maybe_support_aspm = true;
 937         }
 938 
 939         if (reg_changed) {
 940                 if (maybe_support_aspm)
 941                         chip->aspm_l0s_l1_en = 0x03;
 942 
 943                 dev_dbg(rtsx_dev(chip), "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
 944                         chip->aspm_level[0], chip->aspm_level[1]);
 945 
 946                 if (chip->aspm_l0s_l1_en) {
 947                         chip->aspm_enabled = 1;
 948                 } else {
 949                         chip->aspm_enabled = 0;
 950                         chip->sdio_aspm = 0;
 951                 }
 952                 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
 953                                     0x30 | chip->aspm_level[0] |
 954                                     (chip->aspm_level[1] << 2));
 955         }
 956 }
 957 
 958 static void rtsx_manage_ocp(struct rtsx_chip *chip)
 959 {
 960 #ifdef SUPPORT_OCP
 961         if (!chip->ocp_int)
 962                 return;
 963 
 964         rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
 965 
 966         if (chip->card_exist & SD_CARD)
 967                 sd_power_off_card3v3(chip);
 968         else if (chip->card_exist & MS_CARD)
 969                 ms_power_off_card3v3(chip);
 970         else if (chip->card_exist & XD_CARD)
 971                 xd_power_off_card3v3(chip);
 972 
 973         chip->ocp_int = 0;
 974 #endif
 975 }
 976 
 977 static void rtsx_manage_sd_lock(struct rtsx_chip *chip)
 978 {
 979 #ifdef SUPPORT_SD_LOCK
 980         struct sd_info *sd_card = &chip->sd_card;
 981         u8 val;
 982 
 983         if (!sd_card->sd_erase_status)
 984                 return;
 985 
 986         if (chip->card_exist & SD_CARD) {
 987                 rtsx_read_register(chip, 0xFD30, &val);
 988                 if (val & 0x02) {
 989                         sd_card->sd_erase_status = SD_NOT_ERASE;
 990                         sd_card->sd_lock_notify = 1;
 991                         chip->need_reinit |= SD_CARD;
 992                 }
 993         } else {
 994                 sd_card->sd_erase_status = SD_NOT_ERASE;
 995         }
 996 #endif
 997 }
 998 
 999 static bool rtsx_is_ss_allowed(struct rtsx_chip *chip)
1000 {
1001         u32 val;
1002 
1003         if (!chip->ss_en || CHECK_PID(chip, 0x5288))
1004                 return false;
1005 
1006         if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1007                 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1008                 if (val & 0x07)
1009                         return false;
1010         }
1011 
1012         return true;
1013 }
1014 
1015 static void rtsx_manage_ss(struct rtsx_chip *chip)
1016 {
1017         if (!rtsx_is_ss_allowed(chip) || chip->sd_io)
1018                 return;
1019 
1020         if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1021                 chip->ss_counter = 0;
1022                 return;
1023         }
1024 
1025         if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL))
1026                 chip->ss_counter++;
1027         else
1028                 rtsx_exclusive_enter_ss(chip);
1029 }
1030 
1031 static void rtsx_manage_aspm(struct rtsx_chip *chip)
1032 {
1033         u8 data;
1034 
1035         if (!CHECK_PID(chip, 0x5208))
1036                 return;
1037 
1038         rtsx_monitor_aspm_config(chip);
1039 
1040 #ifdef SUPPORT_SDIO_ASPM
1041         if (!CHK_SDIO_EXIST(chip) || CHK_SDIO_IGNORED(chip) ||
1042             !chip->aspm_l0s_l1_en || !chip->dynamic_aspm)
1043                 return;
1044 
1045         if (chip->sd_io) {
1046                 dynamic_configure_sdio_aspm(chip);
1047                 return;
1048         }
1049 
1050         if (chip->sdio_aspm)
1051                 return;
1052 
1053         dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
1054         data = 0x30 | (chip->aspm_level[1] << 2);
1055         rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, data);
1056         chip->sdio_aspm = 1;
1057 #endif
1058 }
1059 
1060 static void rtsx_manage_idle(struct rtsx_chip *chip)
1061 {
1062         if (chip->idle_counter < IDLE_MAX_COUNT) {
1063                 chip->idle_counter++;
1064                 return;
1065         }
1066 
1067         if (rtsx_get_stat(chip) == RTSX_STAT_IDLE)
1068                 return;
1069 
1070         dev_dbg(rtsx_dev(chip), "Idle state!\n");
1071         rtsx_set_stat(chip, RTSX_STAT_IDLE);
1072 
1073 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1074         chip->led_toggle_counter = 0;
1075 #endif
1076         rtsx_force_power_on(chip, SSC_PDCTL);
1077 
1078         turn_off_led(chip, LED_GPIO);
1079 
1080         if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
1081                 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1082 }
1083 
1084 static void rtsx_manage_2lun_mode(struct rtsx_chip *chip)
1085 {
1086 #ifdef SUPPORT_OCP
1087         u8 sd_oc, ms_oc;
1088 
1089         sd_oc = chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER);
1090         ms_oc = chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER);
1091 
1092         if (sd_oc || ms_oc)
1093                 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1094                         chip->ocp_stat);
1095 
1096         if (sd_oc && (chip->card_exist & SD_CARD)) {
1097                 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1098                 card_power_off(chip, SD_CARD);
1099                 chip->card_fail |= SD_CARD;
1100         }
1101 
1102         if (ms_oc && (chip->card_exist & MS_CARD)) {
1103                 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1104                 card_power_off(chip, MS_CARD);
1105                 chip->card_fail |= MS_CARD;
1106         }
1107 #endif
1108 }
1109 
1110 static void rtsx_manage_1lun_mode(struct rtsx_chip *chip)
1111 {
1112 #ifdef SUPPORT_OCP
1113         if (!(chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)))
1114                 return;
1115 
1116         dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1117                 chip->ocp_stat);
1118 
1119         if (chip->card_exist & SD_CARD) {
1120                 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1121                 chip->card_fail |= SD_CARD;
1122         } else if (chip->card_exist & MS_CARD) {
1123                 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1124                 chip->card_fail |= MS_CARD;
1125         } else if (chip->card_exist & XD_CARD) {
1126                 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1127                 chip->card_fail |= XD_CARD;
1128         }
1129         card_power_off(chip, SD_CARD);
1130 #endif
1131 }
1132 
1133 static void rtsx_delink_stage1(struct rtsx_chip *chip, int enter_L1,
1134                                int stage3_cnt)
1135 {
1136         u8 val;
1137 
1138         rtsx_set_stat(chip, RTSX_STAT_DELINK);
1139 
1140         if (chip->asic_code && CHECK_PID(chip, 0x5208))
1141                 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1142 
1143         if (chip->card_exist)
1144                 dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1145         else
1146                 dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1147 
1148         if (enter_L1)
1149                 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1150 
1151         if (chip->card_exist)
1152                 val = 0x02;
1153         else
1154                 val = 0x0A;
1155 
1156         rtsx_write_register(chip, CHANGE_LINK_STATE, val, val);
1157 
1158         if (enter_L1)
1159                 rtsx_enter_L1(chip);
1160 
1161         if (chip->card_exist)
1162                 chip->auto_delink_cnt = stage3_cnt + 1;
1163 }
1164 
1165 static void rtsx_delink_stage(struct rtsx_chip *chip)
1166 {
1167         int delink_stage1_cnt, delink_stage2_cnt, delink_stage3_cnt;
1168         int enter_L1;
1169 
1170         if (!chip->auto_delink_en || !chip->auto_delink_allowed ||
1171             chip->card_ready || chip->card_ejected || chip->sd_io) {
1172                 chip->auto_delink_cnt = 0;
1173                 return;
1174         }
1175 
1176         enter_L1 = chip->auto_delink_in_L1 &&
1177                 (chip->aspm_l0s_l1_en || chip->ss_en);
1178 
1179         delink_stage1_cnt = chip->delink_stage1_step;
1180         delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1181         delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1182 
1183         if (chip->auto_delink_cnt > delink_stage3_cnt)
1184                 return;
1185 
1186         if (chip->auto_delink_cnt == delink_stage1_cnt)
1187                 rtsx_delink_stage1(chip, enter_L1, delink_stage3_cnt);
1188 
1189         if (chip->auto_delink_cnt == delink_stage2_cnt) {
1190                 dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1191 
1192                 if (enter_L1)
1193                         rtsx_exit_L1(chip);
1194 
1195                 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1196                         rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1197 
1198                 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1199         }
1200 
1201         chip->auto_delink_cnt++;
1202 }
1203 
1204 void rtsx_polling_func(struct rtsx_chip *chip)
1205 {
1206         if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1207                 return;
1208 
1209         if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1210                 goto delink_stage;
1211 
1212         if (chip->polling_config) {
1213                 u8 val;
1214 
1215                 rtsx_read_config_byte(chip, 0, &val);
1216         }
1217 
1218         if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1219                 return;
1220 
1221         rtsx_manage_ocp(chip);
1222 
1223         rtsx_manage_sd_lock(chip);
1224 
1225         rtsx_init_cards(chip);
1226 
1227         rtsx_manage_ss(chip);
1228 
1229         rtsx_manage_aspm(chip);
1230 
1231         rtsx_manage_idle(chip);
1232 
1233         switch (rtsx_get_stat(chip)) {
1234         case RTSX_STAT_RUN:
1235 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1236                 rtsx_blink_led(chip);
1237 #endif
1238                 do_remaining_work(chip);
1239                 break;
1240 
1241         case RTSX_STAT_IDLE:
1242                 if (chip->sd_io && !chip->sd_int)
1243                         try_to_switch_sdio_ctrl(chip);
1244 
1245                 rtsx_enable_aspm(chip);
1246                 break;
1247 
1248         default:
1249                 break;
1250         }
1251 
1252         if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1253                 rtsx_manage_2lun_mode(chip);
1254         else
1255                 rtsx_manage_1lun_mode(chip);
1256 
1257 delink_stage:
1258         rtsx_delink_stage(chip);
1259 }
1260 
1261 /**
1262  * rtsx_stop_cmd - stop command transfer and DMA transfer
1263  * @chip: Realtek's card reader chip
1264  * @card: flash card type
1265  *
1266  * Stop command transfer and DMA transfer.
1267  * This function is called in error handler.
1268  */
1269 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1270 {
1271         int i;
1272 
1273         for (i = 0; i <= 8; i++) {
1274                 int addr = RTSX_HCBAR + i * 4;
1275                 u32 reg;
1276 
1277                 reg = rtsx_readl(chip, addr);
1278                 dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1279         }
1280         rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1281         rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1282 
1283         for (i = 0; i < 16; i++) {
1284                 u16 addr = 0xFE20 + (u16)i;
1285                 u8 val;
1286 
1287                 rtsx_read_register(chip, addr, &val);
1288                 dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1289         }
1290 
1291         rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1292         rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1293 }
1294 
1295 #define MAX_RW_REG_CNT          1024
1296 
1297 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1298 {
1299         int i;
1300         u32 val = 3 << 30;
1301 
1302         val |= (u32)(addr & 0x3FFF) << 16;
1303         val |= (u32)mask << 8;
1304         val |= (u32)data;
1305 
1306         rtsx_writel(chip, RTSX_HAIMR, val);
1307 
1308         for (i = 0; i < MAX_RW_REG_CNT; i++) {
1309                 val = rtsx_readl(chip, RTSX_HAIMR);
1310                 if ((val & BIT(31)) == 0) {
1311                         if (data != (u8)val)
1312                                 return STATUS_FAIL;
1313 
1314                         return STATUS_SUCCESS;
1315                 }
1316         }
1317 
1318         return STATUS_TIMEDOUT;
1319 }
1320 
1321 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1322 {
1323         u32 val = 2 << 30;
1324         int i;
1325 
1326         if (data)
1327                 *data = 0;
1328 
1329         val |= (u32)(addr & 0x3FFF) << 16;
1330 
1331         rtsx_writel(chip, RTSX_HAIMR, val);
1332 
1333         for (i = 0; i < MAX_RW_REG_CNT; i++) {
1334                 val = rtsx_readl(chip, RTSX_HAIMR);
1335                 if ((val & BIT(31)) == 0)
1336                         break;
1337         }
1338 
1339         if (i >= MAX_RW_REG_CNT)
1340                 return STATUS_TIMEDOUT;
1341 
1342         if (data)
1343                 *data = (u8)(val & 0xFF);
1344 
1345         return STATUS_SUCCESS;
1346 }
1347 
1348 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1349                       u32 val)
1350 {
1351         int retval;
1352         u8 mode = 0, tmp;
1353         int i;
1354 
1355         for (i = 0; i < 4; i++) {
1356                 if (mask & 0xFF) {
1357                         retval = rtsx_write_register(chip, CFGDATA0 + i,
1358                                                      0xFF,
1359                                                      (u8)(val & mask & 0xFF));
1360                         if (retval)
1361                                 return retval;
1362                         mode |= (1 << i);
1363                 }
1364                 mask >>= 8;
1365                 val >>= 8;
1366         }
1367 
1368         if (mode) {
1369                 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1370                 if (retval)
1371                         return retval;
1372                 retval = rtsx_write_register(chip, CFGADDR1, 0xFF,
1373                                              (u8)(addr >> 8));
1374                 if (retval)
1375                         return retval;
1376 
1377                 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1378                                              0x80 | mode |
1379                                              ((func_no & 0x03) << 4));
1380                 if (retval)
1381                         return retval;
1382 
1383                 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1384                         retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1385                         if (retval)
1386                                 return retval;
1387                         if ((tmp & 0x80) == 0)
1388                                 break;
1389                 }
1390         }
1391 
1392         return STATUS_SUCCESS;
1393 }
1394 
1395 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1396 {
1397         int retval;
1398         int i;
1399         u8 tmp;
1400         u32 data = 0;
1401 
1402         retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1403         if (retval)
1404                 return retval;
1405         retval = rtsx_write_register(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1406         if (retval)
1407                 return retval;
1408         retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1409                                      0x80 | ((func_no & 0x03) << 4));
1410         if (retval)
1411                 return retval;
1412 
1413         for (i = 0; i < MAX_RW_REG_CNT; i++) {
1414                 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1415                 if (retval)
1416                         return retval;
1417                 if ((tmp & 0x80) == 0)
1418                         break;
1419         }
1420 
1421         for (i = 0; i < 4; i++) {
1422                 retval = rtsx_read_register(chip, CFGDATA0 + i, &tmp);
1423                 if (retval)
1424                         return retval;
1425                 data |= (u32)tmp << (i * 8);
1426         }
1427 
1428         if (val)
1429                 *val = data;
1430 
1431         return STATUS_SUCCESS;
1432 }
1433 
1434 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1435                        int len)
1436 {
1437         u32 *data, *mask;
1438         u16 offset = addr % 4;
1439         u16 aligned_addr = addr - offset;
1440         int dw_len, i, j;
1441         int retval;
1442 
1443         if (!buf)
1444                 return STATUS_NOMEM;
1445 
1446         if ((len + offset) % 4)
1447                 dw_len = (len + offset) / 4 + 1;
1448         else
1449                 dw_len = (len + offset) / 4;
1450 
1451         dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1452 
1453         data = vzalloc(array_size(dw_len, 4));
1454         if (!data)
1455                 return STATUS_NOMEM;
1456 
1457         mask = vzalloc(array_size(dw_len, 4));
1458         if (!mask) {
1459                 vfree(data);
1460                 return STATUS_NOMEM;
1461         }
1462 
1463         j = 0;
1464         for (i = 0; i < len; i++) {
1465                 mask[j] |= 0xFF << (offset * 8);
1466                 data[j] |= buf[i] << (offset * 8);
1467                 if (++offset == 4) {
1468                         j++;
1469                         offset = 0;
1470                 }
1471         }
1472 
1473         print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask,
1474                              dw_len * 4);
1475         print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data,
1476                              dw_len * 4);
1477 
1478         for (i = 0; i < dw_len; i++) {
1479                 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1480                                            mask[i], data[i]);
1481                 if (retval != STATUS_SUCCESS) {
1482                         vfree(data);
1483                         vfree(mask);
1484                         return STATUS_FAIL;
1485                 }
1486         }
1487 
1488         vfree(data);
1489         vfree(mask);
1490 
1491         return STATUS_SUCCESS;
1492 }
1493 
1494 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1495                       int len)
1496 {
1497         u32 *data;
1498         u16 offset = addr % 4;
1499         u16 aligned_addr = addr - offset;
1500         int dw_len, i, j;
1501         int retval;
1502 
1503         if ((len + offset) % 4)
1504                 dw_len = (len + offset) / 4 + 1;
1505         else
1506                 dw_len = (len + offset) / 4;
1507 
1508         dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1509 
1510         data = vmalloc(array_size(dw_len, 4));
1511         if (!data)
1512                 return STATUS_NOMEM;
1513 
1514         for (i = 0; i < dw_len; i++) {
1515                 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1516                                           data + i);
1517                 if (retval != STATUS_SUCCESS) {
1518                         vfree(data);
1519                         return STATUS_FAIL;
1520                 }
1521         }
1522 
1523         if (buf) {
1524                 j = 0;
1525 
1526                 for (i = 0; i < len; i++) {
1527                         buf[i] = (u8)(data[j] >> (offset * 8));
1528                         if (++offset == 4) {
1529                                 j++;
1530                                 offset = 0;
1531                         }
1532                 }
1533         }
1534 
1535         vfree(data);
1536 
1537         return STATUS_SUCCESS;
1538 }
1539 
1540 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1541 {
1542         int retval;
1543         bool finished = false;
1544         int i;
1545         u8 tmp;
1546 
1547         retval = rtsx_write_register(chip, PHYDATA0, 0xFF, (u8)val);
1548         if (retval)
1549                 return retval;
1550         retval = rtsx_write_register(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1551         if (retval)
1552                 return retval;
1553         retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1554         if (retval)
1555                 return retval;
1556         retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x81);
1557         if (retval)
1558                 return retval;
1559 
1560         for (i = 0; i < 100000; i++) {
1561                 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1562                 if (retval)
1563                         return retval;
1564                 if (!(tmp & 0x80)) {
1565                         finished = true;
1566                         break;
1567                 }
1568         }
1569 
1570         if (!finished)
1571                 return STATUS_FAIL;
1572 
1573         return STATUS_SUCCESS;
1574 }
1575 
1576 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1577 {
1578         int retval;
1579         bool finished = false;
1580         int i;
1581         u16 data = 0;
1582         u8 tmp;
1583 
1584         retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1585         if (retval)
1586                 return retval;
1587         retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x80);
1588         if (retval)
1589                 return retval;
1590 
1591         for (i = 0; i < 100000; i++) {
1592                 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1593                 if (retval)
1594                         return retval;
1595                 if (!(tmp & 0x80)) {
1596                         finished = true;
1597                         break;
1598                 }
1599         }
1600 
1601         if (!finished)
1602                 return STATUS_FAIL;
1603 
1604         retval = rtsx_read_register(chip, PHYDATA0, &tmp);
1605         if (retval)
1606                 return retval;
1607         data = tmp;
1608         retval = rtsx_read_register(chip, PHYDATA1, &tmp);
1609         if (retval)
1610                 return retval;
1611         data |= (u16)tmp << 8;
1612 
1613         if (val)
1614                 *val = data;
1615 
1616         return STATUS_SUCCESS;
1617 }
1618 
1619 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1620 {
1621         int retval;
1622         int i;
1623         u8 data = 0;
1624 
1625         retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF, 0x80 | addr);
1626         if (retval)
1627                 return retval;
1628 
1629         for (i = 0; i < 100; i++) {
1630                 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1631                 if (retval)
1632                         return retval;
1633                 if (!(data & 0x80))
1634                         break;
1635                 udelay(1);
1636         }
1637 
1638         if (data & 0x80)
1639                 return STATUS_TIMEDOUT;
1640 
1641         retval = rtsx_read_register(chip, EFUSE_DATA, &data);
1642         if (retval)
1643                 return retval;
1644         if (val)
1645                 *val = data;
1646 
1647         return STATUS_SUCCESS;
1648 }
1649 
1650 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1651 {
1652         int retval;
1653         int i, j;
1654         u8 data = 0, tmp = 0xFF;
1655 
1656         for (i = 0; i < 8; i++) {
1657                 if (val & (u8)(1 << i))
1658                         continue;
1659 
1660                 tmp &= (~(u8)(1 << i));
1661                 dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1662 
1663                 retval = rtsx_write_register(chip, EFUSE_DATA, 0xFF, tmp);
1664                 if (retval)
1665                         return retval;
1666                 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF,
1667                                              0xA0 | addr);
1668                 if (retval)
1669                         return retval;
1670 
1671                 for (j = 0; j < 100; j++) {
1672                         retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1673                         if (retval)
1674                                 return retval;
1675                         if (!(data & 0x80))
1676                                 break;
1677                         wait_timeout(3);
1678                 }
1679 
1680                 if (data & 0x80)
1681                         return STATUS_TIMEDOUT;
1682 
1683                 wait_timeout(5);
1684         }
1685 
1686         return STATUS_SUCCESS;
1687 }
1688 
1689 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1690 {
1691         int retval;
1692         u16 value;
1693 
1694         retval = rtsx_read_phy_register(chip, reg, &value);
1695         if (retval != STATUS_SUCCESS)
1696                 return STATUS_FAIL;
1697 
1698         if (value & (1 << bit)) {
1699                 value &= ~(1 << bit);
1700                 retval = rtsx_write_phy_register(chip, reg, value);
1701                 if (retval != STATUS_SUCCESS)
1702                         return STATUS_FAIL;
1703         }
1704 
1705         return STATUS_SUCCESS;
1706 }
1707 
1708 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1709 {
1710         int retval;
1711         u16 value;
1712 
1713         retval = rtsx_read_phy_register(chip, reg, &value);
1714         if (retval != STATUS_SUCCESS)
1715                 return STATUS_FAIL;
1716 
1717         if ((value & (1 << bit)) == 0) {
1718                 value |= (1 << bit);
1719                 retval = rtsx_write_phy_register(chip, reg, value);
1720                 if (retval != STATUS_SUCCESS)
1721                         return STATUS_FAIL;
1722         }
1723 
1724         return STATUS_SUCCESS;
1725 }
1726 
1727 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1728 {
1729         u32 ultmp;
1730 
1731         dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1732                 chip->product_id, dstate);
1733 
1734         if (CHK_SDIO_EXIST(chip)) {
1735                 u8 func_no;
1736 
1737                 if (CHECK_PID(chip, 0x5288))
1738                         func_no = 2;
1739                 else
1740                         func_no = 1;
1741 
1742                 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1743                 dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1744                         (int)func_no, ultmp);
1745                 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1746         }
1747 
1748         rtsx_write_config_byte(chip, 0x44, dstate);
1749         rtsx_write_config_byte(chip, 0x45, 0);
1750 }
1751 
1752 void rtsx_enter_L1(struct rtsx_chip *chip)
1753 {
1754         rtsx_handle_pm_dstate(chip, 2);
1755 }
1756 
1757 void rtsx_exit_L1(struct rtsx_chip *chip)
1758 {
1759         rtsx_write_config_byte(chip, 0x44, 0);
1760         rtsx_write_config_byte(chip, 0x45, 0);
1761 }
1762 
1763 void rtsx_enter_ss(struct rtsx_chip *chip)
1764 {
1765         dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1766 
1767         rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1768 
1769         if (chip->power_down_in_ss) {
1770                 rtsx_power_off_card(chip);
1771                 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1772         }
1773 
1774         if (CHK_SDIO_EXIST(chip))
1775                 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1776                                   0xC0, 0xFF00, 0x0100);
1777 
1778         if (chip->auto_delink_en) {
1779                 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1780         } else {
1781                 if (!chip->phy_debug_mode) {
1782                         u32 tmp;
1783 
1784                         tmp = rtsx_readl(chip, RTSX_BIER);
1785                         tmp |= CARD_INT;
1786                         rtsx_writel(chip, RTSX_BIER, tmp);
1787                 }
1788 
1789                 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1790         }
1791 
1792         rtsx_enter_L1(chip);
1793 
1794         RTSX_CLR_DELINK(chip);
1795         rtsx_set_stat(chip, RTSX_STAT_SS);
1796 }
1797 
1798 void rtsx_exit_ss(struct rtsx_chip *chip)
1799 {
1800         dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1801 
1802         rtsx_exit_L1(chip);
1803 
1804         if (chip->power_down_in_ss) {
1805                 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1806                 udelay(1000);
1807         }
1808 
1809         if (RTSX_TST_DELINK(chip)) {
1810                 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1811                 rtsx_reinit_cards(chip, 1);
1812                 RTSX_CLR_DELINK(chip);
1813         } else if (chip->power_down_in_ss) {
1814                 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1815                 rtsx_reinit_cards(chip, 0);
1816         }
1817 }
1818 
1819 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1820 {
1821         u32 status, int_enable;
1822         bool exit_ss = false;
1823 #ifdef SUPPORT_OCP
1824         u32 ocp_int = 0;
1825 
1826         ocp_int = OC_INT;
1827 #endif
1828 
1829         if (chip->ss_en) {
1830                 chip->ss_counter = 0;
1831                 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1832                         exit_ss = true;
1833                         rtsx_exit_L1(chip);
1834                         rtsx_set_stat(chip, RTSX_STAT_RUN);
1835                 }
1836         }
1837 
1838         int_enable = rtsx_readl(chip, RTSX_BIER);
1839         chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1840 
1841         if (((chip->int_reg & int_enable) == 0) ||
1842             (chip->int_reg == 0xFFFFFFFF))
1843                 return STATUS_FAIL;
1844 
1845         status = chip->int_reg &= (int_enable | 0x7FFFFF);
1846 
1847         if (status & CARD_INT) {
1848                 chip->auto_delink_cnt = 0;
1849 
1850                 if (status & SD_INT) {
1851                         if (status & SD_EXIST) {
1852                                 set_bit(SD_NR, &chip->need_reset);
1853                         } else {
1854                                 set_bit(SD_NR, &chip->need_release);
1855                                 chip->sd_reset_counter = 0;
1856                                 chip->sd_show_cnt = 0;
1857                                 clear_bit(SD_NR, &chip->need_reset);
1858                         }
1859                 } else {
1860                         /*
1861                          * If multi-luns, it's possible that
1862                          * when plugging/unplugging one card
1863                          * there is another card which still
1864                          * exists in the slot. In this case,
1865                          * all existed cards should be reset.
1866                          */
1867                         if (exit_ss && (status & SD_EXIST))
1868                                 set_bit(SD_NR, &chip->need_reinit);
1869                 }
1870                 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1871                         if (status & XD_INT) {
1872                                 if (status & XD_EXIST) {
1873                                         set_bit(XD_NR, &chip->need_reset);
1874                                 } else {
1875                                         set_bit(XD_NR, &chip->need_release);
1876                                         chip->xd_reset_counter = 0;
1877                                         chip->xd_show_cnt = 0;
1878                                         clear_bit(XD_NR, &chip->need_reset);
1879                                 }
1880                         } else {
1881                                 if (exit_ss && (status & XD_EXIST))
1882                                         set_bit(XD_NR, &chip->need_reinit);
1883                         }
1884                 }
1885                 if (status & MS_INT) {
1886                         if (status & MS_EXIST) {
1887                                 set_bit(MS_NR, &chip->need_reset);
1888                         } else {
1889                                 set_bit(MS_NR, &chip->need_release);
1890                                 chip->ms_reset_counter = 0;
1891                                 chip->ms_show_cnt = 0;
1892                                 clear_bit(MS_NR, &chip->need_reset);
1893                         }
1894                 } else {
1895                         if (exit_ss && (status & MS_EXIST))
1896                                 set_bit(MS_NR, &chip->need_reinit);
1897                 }
1898         }
1899 
1900 #ifdef SUPPORT_OCP
1901         chip->ocp_int = ocp_int & status;
1902 #endif
1903 
1904         if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
1905                 chip->int_reg &= ~(u32)DATA_DONE_INT;
1906 
1907         return STATUS_SUCCESS;
1908 }
1909 
1910 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1911 {
1912         int retval;
1913 
1914         dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
1915 
1916         rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1917 
1918         retval = rtsx_force_power_on(chip, SSC_PDCTL);
1919         if (retval != STATUS_SUCCESS)
1920                 return;
1921 
1922         rtsx_release_cards(chip);
1923         rtsx_disable_bus_int(chip);
1924         turn_off_led(chip, LED_GPIO);
1925 
1926 #ifdef HW_AUTO_SWITCH_SD_BUS
1927         if (chip->sd_io) {
1928                 chip->sdio_in_charge = 1;
1929                 if (CHECK_PID(chip, 0x5208)) {
1930                         rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1931                         /* Enable sdio_bus_auto_switch */
1932                         rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1933                 } else if (CHECK_PID(chip, 0x5288)) {
1934                         rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1935                         /* Enable sdio_bus_auto_switch */
1936                         rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1937                 }
1938         }
1939 #endif
1940 
1941         if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
1942                 /* u_force_clkreq_0 */
1943                 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1944         }
1945 
1946         if (pm_stat == PM_S1) {
1947                 dev_dbg(rtsx_dev(chip), "Host enter S1\n");
1948                 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1949                                     HOST_ENTER_S1);
1950         } else if (pm_stat == PM_S3) {
1951                 if (chip->s3_pwr_off_delay > 0)
1952                         wait_timeout(chip->s3_pwr_off_delay);
1953 
1954                 dev_dbg(rtsx_dev(chip), "Host enter S3\n");
1955                 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1956                                     HOST_ENTER_S3);
1957         }
1958 
1959         if (chip->do_delink_before_power_down && chip->auto_delink_en)
1960                 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1961 
1962         rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1963 
1964         chip->cur_clk = 0;
1965         chip->cur_card = 0;
1966         chip->card_exist = 0;
1967 }
1968 
1969 void rtsx_enable_aspm(struct rtsx_chip *chip)
1970 {
1971         if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
1972                 dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
1973                 chip->aspm_enabled = 1;
1974 
1975                 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1976                         rtsx_write_phy_register(chip, 0x07, 0);
1977                 if (CHECK_PID(chip, 0x5208)) {
1978                         rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1979                                             0x30 | chip->aspm_level[0]);
1980                 } else {
1981                         rtsx_write_config_byte(chip, LCTLR,
1982                                                chip->aspm_l0s_l1_en);
1983                 }
1984 
1985                 if (CHK_SDIO_EXIST(chip)) {
1986                         u16 val = chip->aspm_l0s_l1_en | 0x0100;
1987 
1988                         rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1989                                           0xC0, 0xFFF, val);
1990                 }
1991         }
1992 }
1993 
1994 void rtsx_disable_aspm(struct rtsx_chip *chip)
1995 {
1996         if (CHECK_PID(chip, 0x5208))
1997                 rtsx_monitor_aspm_config(chip);
1998 
1999         if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
2000                 dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
2001                 chip->aspm_enabled = 0;
2002 
2003                 if (chip->asic_code && CHECK_PID(chip, 0x5208))
2004                         rtsx_write_phy_register(chip, 0x07, 0x0129);
2005                 if (CHECK_PID(chip, 0x5208))
2006                         rtsx_write_register(chip, ASPM_FORCE_CTL,
2007                                             0xF3, 0x30);
2008                 else
2009                         rtsx_write_config_byte(chip, LCTLR, 0x00);
2010 
2011                 wait_timeout(1);
2012         }
2013 }
2014 
2015 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2016 {
2017         int retval;
2018         int i, j;
2019         u16 reg_addr;
2020         u8 *ptr;
2021 
2022         if (!buf)
2023                 return STATUS_ERROR;
2024 
2025         ptr = buf;
2026         reg_addr = PPBUF_BASE2;
2027         for (i = 0; i < buf_len / 256; i++) {
2028                 rtsx_init_cmd(chip);
2029 
2030                 for (j = 0; j < 256; j++)
2031                         rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2032 
2033                 retval = rtsx_send_cmd(chip, 0, 250);
2034                 if (retval < 0)
2035                         return STATUS_FAIL;
2036 
2037                 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2038                 ptr += 256;
2039         }
2040 
2041         if (buf_len % 256) {
2042                 rtsx_init_cmd(chip);
2043 
2044                 for (j = 0; j < buf_len % 256; j++)
2045                         rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2046 
2047                 retval = rtsx_send_cmd(chip, 0, 250);
2048                 if (retval < 0)
2049                         return STATUS_FAIL;
2050         }
2051 
2052         memcpy(ptr, rtsx_get_cmd_data(chip), buf_len % 256);
2053 
2054         return STATUS_SUCCESS;
2055 }
2056 
2057 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2058 {
2059         int retval;
2060         int i, j;
2061         u16 reg_addr;
2062         u8 *ptr;
2063 
2064         if (!buf)
2065                 return STATUS_ERROR;
2066 
2067         ptr = buf;
2068         reg_addr = PPBUF_BASE2;
2069         for (i = 0; i < buf_len / 256; i++) {
2070                 rtsx_init_cmd(chip);
2071 
2072                 for (j = 0; j < 256; j++) {
2073                         rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2074                                      *ptr);
2075                         ptr++;
2076                 }
2077 
2078                 retval = rtsx_send_cmd(chip, 0, 250);
2079                 if (retval < 0)
2080                         return STATUS_FAIL;
2081         }
2082 
2083         if (buf_len % 256) {
2084                 rtsx_init_cmd(chip);
2085 
2086                 for (j = 0; j < buf_len % 256; j++) {
2087                         rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2088                                      *ptr);
2089                         ptr++;
2090                 }
2091 
2092                 retval = rtsx_send_cmd(chip, 0, 250);
2093                 if (retval < 0)
2094                         return STATUS_FAIL;
2095         }
2096 
2097         return STATUS_SUCCESS;
2098 }
2099 
2100 int rtsx_check_chip_exist(struct rtsx_chip *chip)
2101 {
2102         if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
2103                 return STATUS_FAIL;
2104 
2105         return STATUS_SUCCESS;
2106 }
2107 
2108 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2109 {
2110         int retval;
2111         u8 mask = 0;
2112 
2113         if (ctl & SSC_PDCTL)
2114                 mask |= SSC_POWER_DOWN;
2115 
2116 #ifdef SUPPORT_OCP
2117         if (ctl & OC_PDCTL) {
2118                 mask |= SD_OC_POWER_DOWN;
2119                 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2120                         mask |= MS_OC_POWER_DOWN;
2121         }
2122 #endif
2123 
2124         if (mask) {
2125                 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2126                 if (retval != STATUS_SUCCESS)
2127                         return STATUS_FAIL;
2128 
2129                 if (CHECK_PID(chip, 0x5288))
2130                         wait_timeout(200);
2131         }
2132 
2133         return STATUS_SUCCESS;
2134 }
2135 
2136 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2137 {
2138         int retval;
2139         u8 mask = 0, val = 0;
2140 
2141         if (ctl & SSC_PDCTL)
2142                 mask |= SSC_POWER_DOWN;
2143 
2144 #ifdef SUPPORT_OCP
2145         if (ctl & OC_PDCTL) {
2146                 mask |= SD_OC_POWER_DOWN;
2147                 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2148                         mask |= MS_OC_POWER_DOWN;
2149         }
2150 #endif
2151 
2152         if (mask) {
2153                 val = mask;
2154                 retval = rtsx_write_register(chip, FPDCTL, mask, val);
2155                 if (retval != STATUS_SUCCESS)
2156                         return STATUS_FAIL;
2157         }
2158 
2159         return STATUS_SUCCESS;
2160 }

/* [<][>][^][v][top][bottom][index][help] */