rtsx_chip.c (48356B)
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 23static 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 35void 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 54void 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 93void rtsx_disable_bus_int(struct rtsx_chip *chip) 94{ 95 rtsx_writel(chip, RTSX_BIER, 0); 96} 97 98static 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 142static 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 248static 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 287static 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, ®); 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, ®); 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 334int 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 520nextcard: 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 601static 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 618static 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 635static 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, ®); 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 694static 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 754int 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 888void 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) 897static 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 910static 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, ®0); 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), 944 "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n", 945 chip->aspm_level[0], chip->aspm_level[1]); 946 947 if (chip->aspm_l0s_l1_en) { 948 chip->aspm_enabled = 1; 949 } else { 950 chip->aspm_enabled = 0; 951 chip->sdio_aspm = 0; 952 } 953 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 954 0x30 | chip->aspm_level[0] | 955 (chip->aspm_level[1] << 2)); 956 } 957} 958 959static void rtsx_manage_ocp(struct rtsx_chip *chip) 960{ 961#ifdef SUPPORT_OCP 962 if (!chip->ocp_int) 963 return; 964 965 rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat); 966 967 if (chip->card_exist & SD_CARD) 968 sd_power_off_card3v3(chip); 969 else if (chip->card_exist & MS_CARD) 970 ms_power_off_card3v3(chip); 971 else if (chip->card_exist & XD_CARD) 972 xd_power_off_card3v3(chip); 973 974 chip->ocp_int = 0; 975#endif 976} 977 978static void rtsx_manage_sd_lock(struct rtsx_chip *chip) 979{ 980#ifdef SUPPORT_SD_LOCK 981 struct sd_info *sd_card = &chip->sd_card; 982 u8 val; 983 984 if (!sd_card->sd_erase_status) 985 return; 986 987 if (chip->card_exist & SD_CARD) { 988 rtsx_read_register(chip, 0xFD30, &val); 989 if (val & 0x02) { 990 sd_card->sd_erase_status = SD_NOT_ERASE; 991 sd_card->sd_lock_notify = 1; 992 chip->need_reinit |= SD_CARD; 993 } 994 } else { 995 sd_card->sd_erase_status = SD_NOT_ERASE; 996 } 997#endif 998} 999 1000static 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 1016static 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 1032static 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 1061static 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 1085static 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 1111static 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 1134static 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 1166static 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 1205void 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 1258delink_stage: 1259 rtsx_delink_stage(chip); 1260} 1261 1262/** 1263 * rtsx_stop_cmd - stop command transfer and DMA transfer 1264 * @chip: Realtek's card reader chip 1265 * @card: flash card type 1266 * 1267 * Stop command transfer and DMA transfer. 1268 * This function is called in error handler. 1269 */ 1270void 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 1298int 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 1322int 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 1349int 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 1396int 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 1435int 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 1495int 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 1541int 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 1577int 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 1620int 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 1651int 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 1690int 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 1709int 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 1728static 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 1753void rtsx_enter_L1(struct rtsx_chip *chip) 1754{ 1755 rtsx_handle_pm_dstate(chip, 2); 1756} 1757 1758void 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 1764void 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 1799void 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 1820int 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 * If multi-luns, it's possible that 1863 * when plugging/unplugging one card 1864 * there is another card which still 1865 * exists in the slot. In this case, 1866 * all existed cards should be reset. 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 1911void 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 /* Enable sdio_bus_auto_switch */ 1933 rtsx_write_register(chip, 0xFE70, 0x80, 0x80); 1934 } else if (CHECK_PID(chip, 0x5288)) { 1935 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08); 1936 /* Enable sdio_bus_auto_switch */ 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 /* u_force_clkreq_0 */ 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 1970void 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 1995void 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 2016int 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 2058int 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 2101int 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 2109int 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 2137int 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}