1/* Driver for Realtek PCI-Express card reader 2 * 3 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License as published by the 7 * Free Software Foundation; either version 2, or (at your option) any 8 * later version. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, see <http://www.gnu.org/licenses/>. 17 * 18 * Author: 19 * Wei WANG (wei_wang@realsil.com.cn) 20 * Micky Ching (micky_ching@realsil.com.cn) 21 */ 22 23#include <linux/blkdev.h> 24#include <linux/kthread.h> 25#include <linux/sched.h> 26 27#include "rtsx.h" 28#include "sd.h" 29 30#define SD_MAX_RETRY_COUNT 3 31 32static u16 REG_SD_CFG1; 33static u16 REG_SD_CFG2; 34static u16 REG_SD_CFG3; 35static u16 REG_SD_STAT1; 36static u16 REG_SD_STAT2; 37static u16 REG_SD_BUS_STAT; 38static u16 REG_SD_PAD_CTL; 39static u16 REG_SD_SAMPLE_POINT_CTL; 40static u16 REG_SD_PUSH_POINT_CTL; 41static u16 REG_SD_CMD0; 42static u16 REG_SD_CMD1; 43static u16 REG_SD_CMD2; 44static u16 REG_SD_CMD3; 45static u16 REG_SD_CMD4; 46static u16 REG_SD_CMD5; 47static u16 REG_SD_BYTE_CNT_L; 48static u16 REG_SD_BYTE_CNT_H; 49static u16 REG_SD_BLOCK_CNT_L; 50static u16 REG_SD_BLOCK_CNT_H; 51static u16 REG_SD_TRANSFER; 52static u16 REG_SD_VPCLK0_CTL; 53static u16 REG_SD_VPCLK1_CTL; 54static u16 REG_SD_DCMPS0_CTL; 55static u16 REG_SD_DCMPS1_CTL; 56 57static inline void sd_set_err_code(struct rtsx_chip *chip, u8 err_code) 58{ 59 struct sd_info *sd_card = &(chip->sd_card); 60 61 sd_card->err_code |= err_code; 62} 63 64static inline void sd_clr_err_code(struct rtsx_chip *chip) 65{ 66 struct sd_info *sd_card = &(chip->sd_card); 67 68 sd_card->err_code = 0; 69} 70 71static inline int sd_check_err_code(struct rtsx_chip *chip, u8 err_code) 72{ 73 struct sd_info *sd_card = &(chip->sd_card); 74 75 return sd_card->err_code & err_code; 76} 77 78static void sd_init_reg_addr(struct rtsx_chip *chip) 79{ 80 REG_SD_CFG1 = 0xFD31; 81 REG_SD_CFG2 = 0xFD33; 82 REG_SD_CFG3 = 0xFD3E; 83 REG_SD_STAT1 = 0xFD30; 84 REG_SD_STAT2 = 0; 85 REG_SD_BUS_STAT = 0; 86 REG_SD_PAD_CTL = 0; 87 REG_SD_SAMPLE_POINT_CTL = 0; 88 REG_SD_PUSH_POINT_CTL = 0; 89 REG_SD_CMD0 = 0xFD34; 90 REG_SD_CMD1 = 0xFD35; 91 REG_SD_CMD2 = 0xFD36; 92 REG_SD_CMD3 = 0xFD37; 93 REG_SD_CMD4 = 0xFD38; 94 REG_SD_CMD5 = 0xFD5A; 95 REG_SD_BYTE_CNT_L = 0xFD39; 96 REG_SD_BYTE_CNT_H = 0xFD3A; 97 REG_SD_BLOCK_CNT_L = 0xFD3B; 98 REG_SD_BLOCK_CNT_H = 0xFD3C; 99 REG_SD_TRANSFER = 0xFD32; 100 REG_SD_VPCLK0_CTL = 0; 101 REG_SD_VPCLK1_CTL = 0; 102 REG_SD_DCMPS0_CTL = 0; 103 REG_SD_DCMPS1_CTL = 0; 104} 105 106static int sd_check_data0_status(struct rtsx_chip *chip) 107{ 108 int retval; 109 u8 stat; 110 111 retval = rtsx_read_register(chip, REG_SD_STAT1, &stat); 112 if (retval) { 113 rtsx_trace(chip); 114 return retval; 115 } 116 117 if (!(stat & SD_DAT0_STATUS)) { 118 sd_set_err_code(chip, SD_BUSY); 119 rtsx_trace(chip); 120 return STATUS_FAIL; 121 } 122 123 return STATUS_SUCCESS; 124} 125 126static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx, 127 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len) 128{ 129 struct sd_info *sd_card = &(chip->sd_card); 130 int retval; 131 int timeout = 100; 132 u16 reg_addr; 133 u8 *ptr; 134 int stat_idx = 0; 135 int rty_cnt = 0; 136 137 sd_clr_err_code(chip); 138 139 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg); 140 141 if (rsp_type == SD_RSP_TYPE_R1b) 142 timeout = 3000; 143 144RTY_SEND_CMD: 145 146 rtsx_init_cmd(chip); 147 148 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx); 149 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24)); 150 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16)); 151 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8)); 152 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg); 153 154 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type); 155 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 156 0x01, PINGPONG_BUFFER); 157 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 158 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START); 159 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 160 SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE); 161 162 if (rsp_type == SD_RSP_TYPE_R2) { 163 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; 164 reg_addr++) 165 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0); 166 167 stat_idx = 16; 168 } else if (rsp_type != SD_RSP_TYPE_R0) { 169 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; 170 reg_addr++) 171 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0); 172 173 stat_idx = 5; 174 } 175 176 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0); 177 178 retval = rtsx_send_cmd(chip, SD_CARD, timeout); 179 if (retval < 0) { 180 u8 val; 181 182 rtsx_read_register(chip, REG_SD_STAT1, &val); 183 dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val); 184 185 rtsx_read_register(chip, REG_SD_CFG3, &val); 186 dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val); 187 188 if (retval == -ETIMEDOUT) { 189 if (rsp_type & SD_WAIT_BUSY_END) { 190 retval = sd_check_data0_status(chip); 191 if (retval != STATUS_SUCCESS) { 192 rtsx_clear_sd_error(chip); 193 rtsx_trace(chip); 194 return retval; 195 } 196 } else { 197 sd_set_err_code(chip, SD_TO_ERR); 198 } 199 retval = STATUS_TIMEDOUT; 200 } else { 201 retval = STATUS_FAIL; 202 } 203 rtsx_clear_sd_error(chip); 204 205 rtsx_trace(chip); 206 return retval; 207 } 208 209 if (rsp_type == SD_RSP_TYPE_R0) 210 return STATUS_SUCCESS; 211 212 ptr = rtsx_get_cmd_data(chip) + 1; 213 214 if ((ptr[0] & 0xC0) != 0) { 215 sd_set_err_code(chip, SD_STS_ERR); 216 rtsx_trace(chip); 217 return STATUS_FAIL; 218 } 219 220 if (!(rsp_type & SD_NO_CHECK_CRC7)) { 221 if (ptr[stat_idx] & SD_CRC7_ERR) { 222 if (cmd_idx == WRITE_MULTIPLE_BLOCK) { 223 sd_set_err_code(chip, SD_CRC_ERR); 224 rtsx_trace(chip); 225 return STATUS_FAIL; 226 } 227 if (rty_cnt < SD_MAX_RETRY_COUNT) { 228 wait_timeout(20); 229 rty_cnt++; 230 goto RTY_SEND_CMD; 231 } else { 232 sd_set_err_code(chip, SD_CRC_ERR); 233 rtsx_trace(chip); 234 return STATUS_FAIL; 235 } 236 } 237 } 238 239 if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) { 240 if ((cmd_idx != SEND_RELATIVE_ADDR) && 241 (cmd_idx != SEND_IF_COND)) { 242 if (cmd_idx != STOP_TRANSMISSION) { 243 if (ptr[1] & 0x80) { 244 rtsx_trace(chip); 245 return STATUS_FAIL; 246 } 247 } 248#ifdef SUPPORT_SD_LOCK 249 if (ptr[1] & 0x7D) { 250#else 251 if (ptr[1] & 0x7F) { 252#endif 253 dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n", 254 ptr[1]); 255 rtsx_trace(chip); 256 return STATUS_FAIL; 257 } 258 if (ptr[2] & 0xFF) { 259 dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n", 260 ptr[2]); 261 rtsx_trace(chip); 262 return STATUS_FAIL; 263 } 264 if (ptr[3] & 0x80) { 265 dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n", 266 ptr[3]); 267 rtsx_trace(chip); 268 return STATUS_FAIL; 269 } 270 if (ptr[3] & 0x01) 271 sd_card->sd_data_buf_ready = 1; 272 else 273 sd_card->sd_data_buf_ready = 0; 274 } 275 } 276 277 if (rsp && rsp_len) 278 memcpy(rsp, ptr, rsp_len); 279 280 return STATUS_SUCCESS; 281} 282 283static int sd_read_data(struct rtsx_chip *chip, 284 u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt, 285 u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len, 286 int timeout) 287{ 288 struct sd_info *sd_card = &(chip->sd_card); 289 int retval; 290 int i; 291 292 sd_clr_err_code(chip); 293 294 if (!buf) 295 buf_len = 0; 296 297 if (buf_len > 512) { 298 rtsx_trace(chip); 299 return STATUS_FAIL; 300 } 301 302 rtsx_init_cmd(chip); 303 304 if (cmd_len) { 305 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40); 306 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) 307 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i, 308 0xFF, cmd[i]); 309 } 310 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 311 (u8)byte_cnt); 312 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 313 (u8)(byte_cnt >> 8)); 314 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 315 (u8)blk_cnt); 316 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 317 (u8)(blk_cnt >> 8)); 318 319 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width); 320 321 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 322 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END| 323 SD_CHECK_CRC7 | SD_RSP_LEN_6); 324 if (trans_mode != SD_TM_AUTO_TUNING) 325 rtsx_add_cmd(chip, WRITE_REG_CMD, 326 CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER); 327 328 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 329 trans_mode | SD_TRANSFER_START); 330 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, 331 SD_TRANSFER_END); 332 333 retval = rtsx_send_cmd(chip, SD_CARD, timeout); 334 if (retval < 0) { 335 if (retval == -ETIMEDOUT) { 336 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 337 SD_RSP_TYPE_R1, NULL, 0); 338 } 339 340 rtsx_trace(chip); 341 return STATUS_FAIL; 342 } 343 344 if (buf && buf_len) { 345 retval = rtsx_read_ppbuf(chip, buf, buf_len); 346 if (retval != STATUS_SUCCESS) { 347 rtsx_trace(chip); 348 return STATUS_FAIL; 349 } 350 } 351 352 return STATUS_SUCCESS; 353} 354 355static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode, 356 u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width, 357 u8 *buf, int buf_len, int timeout) 358{ 359 struct sd_info *sd_card = &(chip->sd_card); 360 int retval; 361 int i; 362 363 sd_clr_err_code(chip); 364 365 if (!buf) 366 buf_len = 0; 367 368 if (buf_len > 512) { 369 /* This function can't write data more than one page */ 370 rtsx_trace(chip); 371 return STATUS_FAIL; 372 } 373 374 if (buf && buf_len) { 375 retval = rtsx_write_ppbuf(chip, buf, buf_len); 376 if (retval != STATUS_SUCCESS) { 377 rtsx_trace(chip); 378 return STATUS_FAIL; 379 } 380 } 381 382 rtsx_init_cmd(chip); 383 384 if (cmd_len) { 385 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40); 386 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) { 387 rtsx_add_cmd(chip, WRITE_REG_CMD, 388 REG_SD_CMD0 + i, 0xFF, cmd[i]); 389 } 390 } 391 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 392 (u8)byte_cnt); 393 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 394 (u8)(byte_cnt >> 8)); 395 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 396 (u8)blk_cnt); 397 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 398 (u8)(blk_cnt >> 8)); 399 400 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width); 401 402 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 403 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END | 404 SD_CHECK_CRC7 | SD_RSP_LEN_6); 405 406 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 407 trans_mode | SD_TRANSFER_START); 408 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, 409 SD_TRANSFER_END); 410 411 retval = rtsx_send_cmd(chip, SD_CARD, timeout); 412 if (retval < 0) { 413 if (retval == -ETIMEDOUT) { 414 sd_send_cmd_get_rsp(chip, SEND_STATUS, 415 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0); 416 } 417 418 rtsx_trace(chip); 419 return STATUS_FAIL; 420 } 421 422 return STATUS_SUCCESS; 423} 424 425static int sd_check_csd(struct rtsx_chip *chip, char check_wp) 426{ 427 struct sd_info *sd_card = &(chip->sd_card); 428 int retval; 429 int i; 430 u8 csd_ver, trans_speed; 431 u8 rsp[16]; 432 433 for (i = 0; i < 6; i++) { 434 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 435 sd_set_err_code(chip, SD_NO_CARD); 436 rtsx_trace(chip); 437 return STATUS_FAIL; 438 } 439 440 retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr, 441 SD_RSP_TYPE_R2, rsp, 16); 442 if (retval == STATUS_SUCCESS) 443 break; 444 } 445 446 if (i == 6) { 447 rtsx_trace(chip); 448 return STATUS_FAIL; 449 } 450 451 memcpy(sd_card->raw_csd, rsp + 1, 15); 452 453 dev_dbg(rtsx_dev(chip), "CSD Response:\n"); 454 dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd); 455 456 csd_ver = (rsp[1] & 0xc0) >> 6; 457 dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver); 458 459 trans_speed = rsp[4]; 460 if ((trans_speed & 0x07) == 0x02) { 461 if ((trans_speed & 0xf8) >= 0x30) { 462 if (chip->asic_code) 463 sd_card->sd_clock = 47; 464 else 465 sd_card->sd_clock = CLK_50; 466 467 } else if ((trans_speed & 0xf8) == 0x28) { 468 if (chip->asic_code) 469 sd_card->sd_clock = 39; 470 else 471 sd_card->sd_clock = CLK_40; 472 473 } else if ((trans_speed & 0xf8) == 0x20) { 474 if (chip->asic_code) 475 sd_card->sd_clock = 29; 476 else 477 sd_card->sd_clock = CLK_30; 478 479 } else if ((trans_speed & 0xf8) >= 0x10) { 480 if (chip->asic_code) 481 sd_card->sd_clock = 23; 482 else 483 sd_card->sd_clock = CLK_20; 484 485 } else if ((trans_speed & 0x08) >= 0x08) { 486 if (chip->asic_code) 487 sd_card->sd_clock = 19; 488 else 489 sd_card->sd_clock = CLK_20; 490 } else { 491 rtsx_trace(chip); 492 return STATUS_FAIL; 493 } 494 } else { 495 rtsx_trace(chip); 496 return STATUS_FAIL; 497 } 498 499 if (CHK_MMC_SECTOR_MODE(sd_card)) { 500 sd_card->capacity = 0; 501 } else { 502 if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) { 503 u8 blk_size, c_size_mult; 504 u16 c_size; 505 506 blk_size = rsp[6] & 0x0F; 507 c_size = ((u16)(rsp[7] & 0x03) << 10) 508 + ((u16)rsp[8] << 2) 509 + ((u16)(rsp[9] & 0xC0) >> 6); 510 c_size_mult = (u8)((rsp[10] & 0x03) << 1); 511 c_size_mult += (rsp[11] & 0x80) >> 7; 512 sd_card->capacity = (((u32)(c_size + 1)) * 513 (1 << (c_size_mult + 2))) 514 << (blk_size - 9); 515 } else { 516 u32 total_sector = 0; 517 518 total_sector = (((u32)rsp[8] & 0x3f) << 16) | 519 ((u32)rsp[9] << 8) | (u32)rsp[10]; 520 sd_card->capacity = (total_sector + 1) << 10; 521 } 522 } 523 524 if (check_wp) { 525 if (rsp[15] & 0x30) 526 chip->card_wp |= SD_CARD; 527 528 dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]); 529 } 530 531 return STATUS_SUCCESS; 532} 533 534static int sd_set_sample_push_timing(struct rtsx_chip *chip) 535{ 536 int retval; 537 struct sd_info *sd_card = &(chip->sd_card); 538 u8 val = 0; 539 540 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY) 541 val |= 0x10; 542 543 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) { 544 if (chip->asic_code) { 545 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) { 546 if (val & 0x10) 547 val |= 0x04; 548 else 549 val |= 0x08; 550 } 551 } else { 552 if (val & 0x10) 553 val |= 0x04; 554 else 555 val |= 0x08; 556 } 557 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == 558 SD_SAMPLE_POINT_DELAY) { 559 if (val & 0x10) 560 val |= 0x04; 561 else 562 val |= 0x08; 563 } 564 565 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x1C, val); 566 if (retval) { 567 rtsx_trace(chip); 568 return retval; 569 } 570 571 return STATUS_SUCCESS; 572} 573 574static void sd_choose_proper_clock(struct rtsx_chip *chip) 575{ 576 struct sd_info *sd_card = &(chip->sd_card); 577 578 if (CHK_SD_SDR104(sd_card)) { 579 if (chip->asic_code) 580 sd_card->sd_clock = chip->asic_sd_sdr104_clk; 581 else 582 sd_card->sd_clock = chip->fpga_sd_sdr104_clk; 583 584 } else if (CHK_SD_DDR50(sd_card)) { 585 if (chip->asic_code) 586 sd_card->sd_clock = chip->asic_sd_ddr50_clk; 587 else 588 sd_card->sd_clock = chip->fpga_sd_ddr50_clk; 589 590 } else if (CHK_SD_SDR50(sd_card)) { 591 if (chip->asic_code) 592 sd_card->sd_clock = chip->asic_sd_sdr50_clk; 593 else 594 sd_card->sd_clock = chip->fpga_sd_sdr50_clk; 595 596 } else if (CHK_SD_HS(sd_card)) { 597 if (chip->asic_code) 598 sd_card->sd_clock = chip->asic_sd_hs_clk; 599 else 600 sd_card->sd_clock = chip->fpga_sd_hs_clk; 601 602 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) { 603 if (chip->asic_code) 604 sd_card->sd_clock = chip->asic_mmc_52m_clk; 605 else 606 sd_card->sd_clock = chip->fpga_mmc_52m_clk; 607 608 } else if (CHK_MMC_26M(sd_card)) { 609 if (chip->asic_code) 610 sd_card->sd_clock = 48; 611 else 612 sd_card->sd_clock = CLK_50; 613 } 614} 615 616static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div) 617{ 618 int retval; 619 u8 mask = 0, val = 0; 620 621 mask = 0x60; 622 if (clk_div == SD_CLK_DIVIDE_0) 623 val = 0x00; 624 else if (clk_div == SD_CLK_DIVIDE_128) 625 val = 0x40; 626 else if (clk_div == SD_CLK_DIVIDE_256) 627 val = 0x20; 628 629 retval = rtsx_write_register(chip, REG_SD_CFG1, mask, val); 630 if (retval) { 631 rtsx_trace(chip); 632 return retval; 633 } 634 635 return STATUS_SUCCESS; 636} 637 638static int sd_set_init_para(struct rtsx_chip *chip) 639{ 640 struct sd_info *sd_card = &(chip->sd_card); 641 int retval; 642 643 retval = sd_set_sample_push_timing(chip); 644 if (retval != STATUS_SUCCESS) { 645 rtsx_trace(chip); 646 return STATUS_FAIL; 647 } 648 649 sd_choose_proper_clock(chip); 650 651 retval = switch_clock(chip, sd_card->sd_clock); 652 if (retval != STATUS_SUCCESS) { 653 rtsx_trace(chip); 654 return STATUS_FAIL; 655 } 656 657 return STATUS_SUCCESS; 658} 659 660int sd_select_card(struct rtsx_chip *chip, int select) 661{ 662 struct sd_info *sd_card = &(chip->sd_card); 663 int retval; 664 u8 cmd_idx, cmd_type; 665 u32 addr; 666 667 if (select) { 668 cmd_idx = SELECT_CARD; 669 cmd_type = SD_RSP_TYPE_R1; 670 addr = sd_card->sd_addr; 671 } else { 672 cmd_idx = DESELECT_CARD; 673 cmd_type = SD_RSP_TYPE_R0; 674 addr = 0; 675 } 676 677 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0); 678 if (retval != STATUS_SUCCESS) { 679 rtsx_trace(chip); 680 return STATUS_FAIL; 681 } 682 683 return STATUS_SUCCESS; 684} 685 686#ifdef SUPPORT_SD_LOCK 687static int sd_update_lock_status(struct rtsx_chip *chip) 688{ 689 struct sd_info *sd_card = &(chip->sd_card); 690 int retval; 691 u8 rsp[5]; 692 693 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 694 SD_RSP_TYPE_R1, rsp, 5); 695 if (retval != STATUS_SUCCESS) { 696 rtsx_trace(chip); 697 return STATUS_FAIL; 698 } 699 700 if (rsp[1] & 0x02) 701 sd_card->sd_lock_status |= SD_LOCKED; 702 else 703 sd_card->sd_lock_status &= ~SD_LOCKED; 704 705 dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n", 706 sd_card->sd_lock_status); 707 708 if (rsp[1] & 0x01) { 709 rtsx_trace(chip); 710 return STATUS_FAIL; 711 } 712 713 return STATUS_SUCCESS; 714} 715#endif 716 717static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state, 718 u8 data_ready, int polling_cnt) 719{ 720 struct sd_info *sd_card = &(chip->sd_card); 721 int retval, i; 722 u8 rsp[5]; 723 724 for (i = 0; i < polling_cnt; i++) { 725 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, 726 sd_card->sd_addr, SD_RSP_TYPE_R1, rsp, 727 5); 728 if (retval != STATUS_SUCCESS) { 729 rtsx_trace(chip); 730 return STATUS_FAIL; 731 } 732 733 if (((rsp[3] & 0x1E) == state) && 734 ((rsp[3] & 0x01) == data_ready)) 735 return STATUS_SUCCESS; 736 } 737 738 rtsx_trace(chip); 739 return STATUS_FAIL; 740} 741 742static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage) 743{ 744 int retval; 745 746 if (voltage == SD_IO_3V3) { 747 if (chip->asic_code) { 748 retval = rtsx_write_phy_register(chip, 0x08, 749 0x4FC0 | 750 chip->phy_voltage); 751 if (retval != STATUS_SUCCESS) { 752 rtsx_trace(chip); 753 return STATUS_FAIL; 754 } 755 } else { 756 retval = rtsx_write_register(chip, SD_PAD_CTL, 757 SD_IO_USING_1V8, 0); 758 if (retval) { 759 rtsx_trace(chip); 760 return retval; 761 } 762 } 763 } else if (voltage == SD_IO_1V8) { 764 if (chip->asic_code) { 765 retval = rtsx_write_phy_register(chip, 0x08, 766 0x4C40 | 767 chip->phy_voltage); 768 if (retval != STATUS_SUCCESS) { 769 rtsx_trace(chip); 770 return STATUS_FAIL; 771 } 772 } else { 773 retval = rtsx_write_register(chip, SD_PAD_CTL, 774 SD_IO_USING_1V8, 775 SD_IO_USING_1V8); 776 if (retval) { 777 rtsx_trace(chip); 778 return retval; 779 } 780 } 781 } else { 782 rtsx_trace(chip); 783 return STATUS_FAIL; 784 } 785 786 return STATUS_SUCCESS; 787} 788 789static int sd_voltage_switch(struct rtsx_chip *chip) 790{ 791 int retval; 792 u8 stat; 793 794 retval = rtsx_write_register(chip, SD_BUS_STAT, 795 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 796 SD_CLK_TOGGLE_EN); 797 if (retval) { 798 rtsx_trace(chip); 799 return retval; 800 } 801 802 retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1, 803 NULL, 0); 804 if (retval != STATUS_SUCCESS) { 805 rtsx_trace(chip); 806 return STATUS_FAIL; 807 } 808 809 udelay(chip->sd_voltage_switch_delay); 810 811 retval = rtsx_read_register(chip, SD_BUS_STAT, &stat); 812 if (retval) { 813 rtsx_trace(chip); 814 return retval; 815 } 816 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS | 817 SD_DAT1_STATUS | SD_DAT0_STATUS)) { 818 rtsx_trace(chip); 819 return STATUS_FAIL; 820 } 821 822 retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF, 823 SD_CLK_FORCE_STOP); 824 if (retval) { 825 rtsx_trace(chip); 826 return retval; 827 } 828 retval = sd_change_bank_voltage(chip, SD_IO_1V8); 829 if (retval != STATUS_SUCCESS) { 830 rtsx_trace(chip); 831 return STATUS_FAIL; 832 } 833 834 wait_timeout(50); 835 836 retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF, 837 SD_CLK_TOGGLE_EN); 838 if (retval) { 839 rtsx_trace(chip); 840 return retval; 841 } 842 wait_timeout(10); 843 844 retval = rtsx_read_register(chip, SD_BUS_STAT, &stat); 845 if (retval) { 846 rtsx_trace(chip); 847 return retval; 848 } 849 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS | 850 SD_DAT1_STATUS | SD_DAT0_STATUS)) != 851 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS | 852 SD_DAT1_STATUS | SD_DAT0_STATUS)) { 853 dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat); 854 rtsx_write_register(chip, SD_BUS_STAT, 855 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0); 856 rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0); 857 rtsx_trace(chip); 858 return STATUS_FAIL; 859 } 860 861 retval = rtsx_write_register(chip, SD_BUS_STAT, 862 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0); 863 if (retval) { 864 rtsx_trace(chip); 865 return retval; 866 } 867 868 return STATUS_SUCCESS; 869} 870 871static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir) 872{ 873 int retval; 874 875 if (tune_dir == TUNE_RX) { 876 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, 877 DCM_RESET | DCM_RX); 878 if (retval) { 879 rtsx_trace(chip); 880 return retval; 881 } 882 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_RX); 883 if (retval) { 884 rtsx_trace(chip); 885 return retval; 886 } 887 } else { 888 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, 889 DCM_RESET | DCM_TX); 890 if (retval) { 891 rtsx_trace(chip); 892 return retval; 893 } 894 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_TX); 895 if (retval) { 896 rtsx_trace(chip); 897 return retval; 898 } 899 } 900 901 return STATUS_SUCCESS; 902} 903 904static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir) 905{ 906 struct sd_info *sd_card = &(chip->sd_card); 907 u16 SD_VP_CTL, SD_DCMPS_CTL; 908 u8 val; 909 int retval; 910 bool ddr_rx = false; 911 912 dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n", 913 sample_point, tune_dir); 914 915 if (tune_dir == TUNE_RX) { 916 SD_VP_CTL = SD_VPRX_CTL; 917 SD_DCMPS_CTL = SD_DCMPS_RX_CTL; 918 if (CHK_SD_DDR50(sd_card)) 919 ddr_rx = true; 920 } else { 921 SD_VP_CTL = SD_VPTX_CTL; 922 SD_DCMPS_CTL = SD_DCMPS_TX_CTL; 923 } 924 925 if (chip->asic_code) { 926 retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 927 CHANGE_CLK); 928 if (retval) { 929 rtsx_trace(chip); 930 return retval; 931 } 932 retval = rtsx_write_register(chip, SD_VP_CTL, 0x1F, 933 sample_point); 934 if (retval) { 935 rtsx_trace(chip); 936 return retval; 937 } 938 retval = rtsx_write_register(chip, SD_VPCLK0_CTL, 939 PHASE_NOT_RESET, 0); 940 if (retval) { 941 rtsx_trace(chip); 942 return retval; 943 } 944 retval = rtsx_write_register(chip, SD_VPCLK0_CTL, 945 PHASE_NOT_RESET, PHASE_NOT_RESET); 946 if (retval) { 947 rtsx_trace(chip); 948 return retval; 949 } 950 retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 0); 951 if (retval) { 952 rtsx_trace(chip); 953 return retval; 954 } 955 } else { 956 rtsx_read_register(chip, SD_VP_CTL, &val); 957 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); 958 rtsx_read_register(chip, SD_DCMPS_CTL, &val); 959 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); 960 961 if (ddr_rx) { 962 retval = rtsx_write_register(chip, SD_VP_CTL, 963 PHASE_CHANGE, 964 PHASE_CHANGE); 965 if (retval) { 966 rtsx_trace(chip); 967 return retval; 968 } 969 udelay(50); 970 retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF, 971 PHASE_CHANGE | PHASE_NOT_RESET | sample_point); 972 if (retval) { 973 rtsx_trace(chip); 974 return retval; 975 } 976 } else { 977 retval = rtsx_write_register(chip, CLK_CTL, 978 CHANGE_CLK, CHANGE_CLK); 979 if (retval) { 980 rtsx_trace(chip); 981 return retval; 982 } 983 udelay(50); 984 retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF, 985 PHASE_NOT_RESET | sample_point); 986 if (retval) { 987 rtsx_trace(chip); 988 return retval; 989 } 990 } 991 udelay(100); 992 993 rtsx_init_cmd(chip); 994 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE, 995 DCMPS_CHANGE); 996 rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL, 997 DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE); 998 retval = rtsx_send_cmd(chip, SD_CARD, 100); 999 if (retval != STATUS_SUCCESS) { 1000 rtsx_trace(chip); 1001 goto Fail; 1002 } 1003 1004 val = *rtsx_get_cmd_data(chip); 1005 if (val & DCMPS_ERROR) { 1006 rtsx_trace(chip); 1007 goto Fail; 1008 } 1009 1010 if ((val & DCMPS_CURRENT_PHASE) != sample_point) { 1011 rtsx_trace(chip); 1012 goto Fail; 1013 } 1014 1015 retval = rtsx_write_register(chip, SD_DCMPS_CTL, 1016 DCMPS_CHANGE, 0); 1017 if (retval) { 1018 rtsx_trace(chip); 1019 return retval; 1020 } 1021 if (ddr_rx) { 1022 retval = rtsx_write_register(chip, SD_VP_CTL, 1023 PHASE_CHANGE, 0); 1024 if (retval) { 1025 rtsx_trace(chip); 1026 return retval; 1027 } 1028 } else { 1029 retval = rtsx_write_register(chip, CLK_CTL, 1030 CHANGE_CLK, 0); 1031 if (retval) { 1032 rtsx_trace(chip); 1033 return retval; 1034 } 1035 } 1036 1037 udelay(50); 1038 } 1039 1040 retval = rtsx_write_register(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0); 1041 if (retval) { 1042 rtsx_trace(chip); 1043 return retval; 1044 } 1045 1046 return STATUS_SUCCESS; 1047 1048Fail: 1049 rtsx_read_register(chip, SD_VP_CTL, &val); 1050 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val); 1051 rtsx_read_register(chip, SD_DCMPS_CTL, &val); 1052 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val); 1053 1054 rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0); 1055 rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0); 1056 wait_timeout(10); 1057 sd_reset_dcm(chip, tune_dir); 1058 return STATUS_FAIL; 1059} 1060 1061static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width) 1062{ 1063 struct sd_info *sd_card = &(chip->sd_card); 1064 int retval; 1065 u8 cmd[5], buf[8]; 1066 1067 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, 1068 SD_RSP_TYPE_R1, NULL, 0); 1069 if (retval != STATUS_SUCCESS) { 1070 rtsx_trace(chip); 1071 return STATUS_FAIL; 1072 } 1073 1074 cmd[0] = 0x40 | SEND_SCR; 1075 cmd[1] = 0; 1076 cmd[2] = 0; 1077 cmd[3] = 0; 1078 cmd[4] = 0; 1079 1080 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width, 1081 buf, 8, 250); 1082 if (retval != STATUS_SUCCESS) { 1083 rtsx_clear_sd_error(chip); 1084 rtsx_trace(chip); 1085 return STATUS_FAIL; 1086 } 1087 1088 memcpy(sd_card->raw_scr, buf, 8); 1089 1090 if ((buf[0] & 0x0F) == 0) { 1091 rtsx_trace(chip); 1092 return STATUS_FAIL; 1093 } 1094 1095 return STATUS_SUCCESS; 1096} 1097 1098static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group, 1099 u8 func_to_switch, u8 *buf, int buf_len) 1100{ 1101 u8 support_mask = 0, query_switch = 0, switch_busy = 0; 1102 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0; 1103 1104 if (func_group == SD_FUNC_GROUP_1) { 1105 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET; 1106 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET; 1107 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET; 1108 1109 switch (func_to_switch) { 1110 case HS_SUPPORT: 1111 support_mask = HS_SUPPORT_MASK; 1112 query_switch = HS_QUERY_SWITCH_OK; 1113 switch_busy = HS_SWITCH_BUSY; 1114 break; 1115 1116 case SDR50_SUPPORT: 1117 support_mask = SDR50_SUPPORT_MASK; 1118 query_switch = SDR50_QUERY_SWITCH_OK; 1119 switch_busy = SDR50_SWITCH_BUSY; 1120 break; 1121 1122 case SDR104_SUPPORT: 1123 support_mask = SDR104_SUPPORT_MASK; 1124 query_switch = SDR104_QUERY_SWITCH_OK; 1125 switch_busy = SDR104_SWITCH_BUSY; 1126 break; 1127 1128 case DDR50_SUPPORT: 1129 support_mask = DDR50_SUPPORT_MASK; 1130 query_switch = DDR50_QUERY_SWITCH_OK; 1131 switch_busy = DDR50_SWITCH_BUSY; 1132 break; 1133 1134 default: 1135 rtsx_trace(chip); 1136 return STATUS_FAIL; 1137 } 1138 } else if (func_group == SD_FUNC_GROUP_3) { 1139 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET; 1140 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET; 1141 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET; 1142 1143 switch (func_to_switch) { 1144 case DRIVING_TYPE_A: 1145 support_mask = DRIVING_TYPE_A_MASK; 1146 query_switch = TYPE_A_QUERY_SWITCH_OK; 1147 switch_busy = TYPE_A_SWITCH_BUSY; 1148 break; 1149 1150 case DRIVING_TYPE_C: 1151 support_mask = DRIVING_TYPE_C_MASK; 1152 query_switch = TYPE_C_QUERY_SWITCH_OK; 1153 switch_busy = TYPE_C_SWITCH_BUSY; 1154 break; 1155 1156 case DRIVING_TYPE_D: 1157 support_mask = DRIVING_TYPE_D_MASK; 1158 query_switch = TYPE_D_QUERY_SWITCH_OK; 1159 switch_busy = TYPE_D_SWITCH_BUSY; 1160 break; 1161 1162 default: 1163 rtsx_trace(chip); 1164 return STATUS_FAIL; 1165 } 1166 } else if (func_group == SD_FUNC_GROUP_4) { 1167 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET; 1168 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET; 1169 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET; 1170 1171 switch (func_to_switch) { 1172 case CURRENT_LIMIT_400: 1173 support_mask = CURRENT_LIMIT_400_MASK; 1174 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK; 1175 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY; 1176 break; 1177 1178 case CURRENT_LIMIT_600: 1179 support_mask = CURRENT_LIMIT_600_MASK; 1180 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK; 1181 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY; 1182 break; 1183 1184 case CURRENT_LIMIT_800: 1185 support_mask = CURRENT_LIMIT_800_MASK; 1186 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK; 1187 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY; 1188 break; 1189 1190 default: 1191 rtsx_trace(chip); 1192 return STATUS_FAIL; 1193 } 1194 } else { 1195 rtsx_trace(chip); 1196 return STATUS_FAIL; 1197 } 1198 1199 if (func_group == SD_FUNC_GROUP_1) { 1200 if (!(buf[support_offset] & support_mask) || 1201 ((buf[query_switch_offset] & 0x0F) != query_switch)) { 1202 rtsx_trace(chip); 1203 return STATUS_FAIL; 1204 } 1205 } 1206 1207 /* Check 'Busy Status' */ 1208 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) && 1209 ((buf[check_busy_offset] & switch_busy) == switch_busy)) { 1210 rtsx_trace(chip); 1211 return STATUS_FAIL; 1212 } 1213 1214 return STATUS_SUCCESS; 1215} 1216 1217static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, 1218 u8 func_group, u8 func_to_switch, u8 bus_width) 1219{ 1220 struct sd_info *sd_card = &(chip->sd_card); 1221 int retval; 1222 u8 cmd[5], buf[64]; 1223 1224 dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n", 1225 mode, func_group, func_to_switch); 1226 1227 cmd[0] = 0x40 | SWITCH; 1228 cmd[1] = mode; 1229 1230 if (func_group == SD_FUNC_GROUP_1) { 1231 cmd[2] = 0xFF; 1232 cmd[3] = 0xFF; 1233 cmd[4] = 0xF0 + func_to_switch; 1234 } else if (func_group == SD_FUNC_GROUP_3) { 1235 cmd[2] = 0xFF; 1236 cmd[3] = 0xF0 + func_to_switch; 1237 cmd[4] = 0xFF; 1238 } else if (func_group == SD_FUNC_GROUP_4) { 1239 cmd[2] = 0xFF; 1240 cmd[3] = 0x0F + (func_to_switch << 4); 1241 cmd[4] = 0xFF; 1242 } else { 1243 cmd[1] = SD_CHECK_MODE; 1244 cmd[2] = 0xFF; 1245 cmd[3] = 0xFF; 1246 cmd[4] = 0xFF; 1247 } 1248 1249 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width, 1250 buf, 64, 250); 1251 if (retval != STATUS_SUCCESS) { 1252 rtsx_clear_sd_error(chip); 1253 rtsx_trace(chip); 1254 return STATUS_FAIL; 1255 } 1256 1257 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf); 1258 1259 if (func_group == NO_ARGUMENT) { 1260 sd_card->func_group1_mask = buf[0x0D]; 1261 sd_card->func_group2_mask = buf[0x0B]; 1262 sd_card->func_group3_mask = buf[0x09]; 1263 sd_card->func_group4_mask = buf[0x07]; 1264 1265 dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n", 1266 buf[0x0D]); 1267 dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n", 1268 buf[0x0B]); 1269 dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n", 1270 buf[0x09]); 1271 dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n", 1272 buf[0x07]); 1273 } else { 1274 /* Maximum current consumption, check whether current is 1275 * acceptable; bit[511:496] = 0x0000 means some error happened. 1276 */ 1277 u16 cc = ((u16)buf[0] << 8) | buf[1]; 1278 1279 dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n", 1280 cc); 1281 if ((cc == 0) || (cc > 800)) { 1282 rtsx_trace(chip); 1283 return STATUS_FAIL; 1284 } 1285 1286 retval = sd_query_switch_result(chip, func_group, 1287 func_to_switch, buf, 64); 1288 if (retval != STATUS_SUCCESS) { 1289 rtsx_trace(chip); 1290 return STATUS_FAIL; 1291 } 1292 1293 if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) { 1294 retval = rtsx_write_register(chip, OCPPARA2, 1295 SD_OCP_THD_MASK, 1296 chip->sd_800mA_ocp_thd); 1297 if (retval) { 1298 rtsx_trace(chip); 1299 return retval; 1300 } 1301 retval = rtsx_write_register(chip, CARD_PWR_CTL, 1302 PMOS_STRG_MASK, 1303 PMOS_STRG_800mA); 1304 if (retval) { 1305 rtsx_trace(chip); 1306 return retval; 1307 } 1308 } 1309 } 1310 1311 return STATUS_SUCCESS; 1312} 1313 1314static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch) 1315{ 1316 if (func_group == SD_FUNC_GROUP_1) { 1317 if (func_to_switch > HS_SUPPORT) 1318 func_to_switch--; 1319 1320 } else if (func_group == SD_FUNC_GROUP_4) { 1321 if (func_to_switch > CURRENT_LIMIT_200) 1322 func_to_switch--; 1323 } 1324 1325 return func_to_switch; 1326} 1327 1328static int sd_check_switch(struct rtsx_chip *chip, 1329 u8 func_group, u8 func_to_switch, u8 bus_width) 1330{ 1331 int retval; 1332 int i; 1333 bool switch_good = false; 1334 1335 for (i = 0; i < 3; i++) { 1336 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 1337 sd_set_err_code(chip, SD_NO_CARD); 1338 rtsx_trace(chip); 1339 return STATUS_FAIL; 1340 } 1341 1342 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group, 1343 func_to_switch, bus_width); 1344 if (retval == STATUS_SUCCESS) { 1345 u8 stat; 1346 1347 retval = sd_check_switch_mode(chip, SD_SWITCH_MODE, 1348 func_group, func_to_switch, bus_width); 1349 if (retval == STATUS_SUCCESS) { 1350 switch_good = true; 1351 break; 1352 } 1353 1354 retval = rtsx_read_register(chip, SD_STAT1, &stat); 1355 if (retval) { 1356 rtsx_trace(chip); 1357 return retval; 1358 } 1359 if (stat & SD_CRC16_ERR) { 1360 dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n"); 1361 rtsx_trace(chip); 1362 return STATUS_FAIL; 1363 } 1364 } 1365 1366 func_to_switch = downgrade_switch_mode(func_group, 1367 func_to_switch); 1368 1369 wait_timeout(20); 1370 } 1371 1372 if (!switch_good) { 1373 rtsx_trace(chip); 1374 return STATUS_FAIL; 1375 } 1376 1377 return STATUS_SUCCESS; 1378} 1379 1380static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width) 1381{ 1382 struct sd_info *sd_card = &(chip->sd_card); 1383 int retval; 1384 int i; 1385 u8 func_to_switch = 0; 1386 1387 /* Get supported functions */ 1388 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, 1389 NO_ARGUMENT, NO_ARGUMENT, bus_width); 1390 if (retval != STATUS_SUCCESS) { 1391 rtsx_trace(chip); 1392 return STATUS_FAIL; 1393 } 1394 1395 sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail); 1396 1397 /* Function Group 1: Access Mode */ 1398 for (i = 0; i < 4; i++) { 1399 switch ((u8)(chip->sd_speed_prior >> (i*8))) { 1400 case SDR104_SUPPORT: 1401 if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK) 1402 && chip->sdr104_en) { 1403 func_to_switch = SDR104_SUPPORT; 1404 } 1405 break; 1406 1407 case DDR50_SUPPORT: 1408 if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK) 1409 && chip->ddr50_en) { 1410 func_to_switch = DDR50_SUPPORT; 1411 } 1412 break; 1413 1414 case SDR50_SUPPORT: 1415 if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK) 1416 && chip->sdr50_en) { 1417 func_to_switch = SDR50_SUPPORT; 1418 } 1419 break; 1420 1421 case HS_SUPPORT: 1422 if (sd_card->func_group1_mask & HS_SUPPORT_MASK) 1423 func_to_switch = HS_SUPPORT; 1424 1425 break; 1426 1427 default: 1428 continue; 1429 } 1430 1431 1432 if (func_to_switch) 1433 break; 1434 1435 } 1436 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x", 1437 func_to_switch); 1438 1439#ifdef SUPPORT_SD_LOCK 1440 if ((sd_card->sd_lock_status & SD_SDR_RST) 1441 && (DDR50_SUPPORT == func_to_switch) 1442 && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) { 1443 func_to_switch = SDR50_SUPPORT; 1444 dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n"); 1445 } 1446#endif 1447 1448 if (func_to_switch) { 1449 retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch, 1450 bus_width); 1451 if (retval != STATUS_SUCCESS) { 1452 if (func_to_switch == SDR104_SUPPORT) { 1453 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK; 1454 } else if (func_to_switch == DDR50_SUPPORT) { 1455 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK | 1456 DDR50_SUPPORT_MASK; 1457 } else if (func_to_switch == SDR50_SUPPORT) { 1458 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK | 1459 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK; 1460 } 1461 rtsx_trace(chip); 1462 return STATUS_FAIL; 1463 } 1464 1465 if (func_to_switch == SDR104_SUPPORT) 1466 SET_SD_SDR104(sd_card); 1467 else if (func_to_switch == DDR50_SUPPORT) 1468 SET_SD_DDR50(sd_card); 1469 else if (func_to_switch == SDR50_SUPPORT) 1470 SET_SD_SDR50(sd_card); 1471 else 1472 SET_SD_HS(sd_card); 1473 } 1474 1475 if (CHK_SD_DDR50(sd_card)) { 1476 retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 1477 0x04); 1478 if (retval) { 1479 rtsx_trace(chip); 1480 return retval; 1481 } 1482 retval = sd_set_sample_push_timing(chip); 1483 if (retval != STATUS_SUCCESS) { 1484 rtsx_trace(chip); 1485 return STATUS_FAIL; 1486 } 1487 } 1488 1489 if (!func_to_switch || (func_to_switch == HS_SUPPORT)) { 1490 /* Do not try to switch current limit if the card doesn't 1491 * support UHS mode or we don't want it to support UHS mode 1492 */ 1493 return STATUS_SUCCESS; 1494 } 1495 1496 /* Function Group 4: Current Limit */ 1497 func_to_switch = 0xFF; 1498 1499 for (i = 0; i < 4; i++) { 1500 switch ((u8)(chip->sd_current_prior >> (i*8))) { 1501 case CURRENT_LIMIT_800: 1502 if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK) 1503 func_to_switch = CURRENT_LIMIT_800; 1504 1505 break; 1506 1507 case CURRENT_LIMIT_600: 1508 if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK) 1509 func_to_switch = CURRENT_LIMIT_600; 1510 1511 break; 1512 1513 case CURRENT_LIMIT_400: 1514 if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK) 1515 func_to_switch = CURRENT_LIMIT_400; 1516 1517 break; 1518 1519 case CURRENT_LIMIT_200: 1520 if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK) 1521 func_to_switch = CURRENT_LIMIT_200; 1522 1523 break; 1524 1525 default: 1526 continue; 1527 } 1528 1529 if (func_to_switch != 0xFF) 1530 break; 1531 } 1532 1533 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x", 1534 func_to_switch); 1535 1536 if (func_to_switch <= CURRENT_LIMIT_800) { 1537 retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch, 1538 bus_width); 1539 if (retval != STATUS_SUCCESS) { 1540 if (sd_check_err_code(chip, SD_NO_CARD)) { 1541 rtsx_trace(chip); 1542 return STATUS_FAIL; 1543 } 1544 } 1545 dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n", 1546 retval); 1547 } 1548 1549 if (CHK_SD_DDR50(sd_card)) { 1550 retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 0); 1551 if (retval) { 1552 rtsx_trace(chip); 1553 return retval; 1554 } 1555 } 1556 1557 return STATUS_SUCCESS; 1558} 1559 1560static int sd_wait_data_idle(struct rtsx_chip *chip) 1561{ 1562 int retval = STATUS_TIMEDOUT; 1563 int i; 1564 u8 val = 0; 1565 1566 for (i = 0; i < 100; i++) { 1567 retval = rtsx_read_register(chip, SD_DATA_STATE, &val); 1568 if (retval) { 1569 rtsx_trace(chip); 1570 return retval; 1571 } 1572 if (val & SD_DATA_IDLE) { 1573 retval = STATUS_SUCCESS; 1574 break; 1575 } 1576 udelay(100); 1577 } 1578 dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val); 1579 1580 return retval; 1581} 1582 1583static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point) 1584{ 1585 int retval; 1586 u8 cmd[5]; 1587 1588 retval = sd_change_phase(chip, sample_point, TUNE_RX); 1589 if (retval != STATUS_SUCCESS) { 1590 rtsx_trace(chip); 1591 return STATUS_FAIL; 1592 } 1593 1594 cmd[0] = 0x40 | SEND_TUNING_PATTERN; 1595 cmd[1] = 0; 1596 cmd[2] = 0; 1597 cmd[3] = 0; 1598 cmd[4] = 0; 1599 1600 retval = sd_read_data(chip, SD_TM_AUTO_TUNING, 1601 cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100); 1602 if (retval != STATUS_SUCCESS) { 1603 (void)sd_wait_data_idle(chip); 1604 1605 rtsx_clear_sd_error(chip); 1606 rtsx_trace(chip); 1607 return STATUS_FAIL; 1608 } 1609 1610 return STATUS_SUCCESS; 1611} 1612 1613static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point) 1614{ 1615 struct sd_info *sd_card = &(chip->sd_card); 1616 int retval; 1617 u8 cmd[5]; 1618 1619 retval = sd_change_phase(chip, sample_point, TUNE_RX); 1620 if (retval != STATUS_SUCCESS) { 1621 rtsx_trace(chip); 1622 return STATUS_FAIL; 1623 } 1624 1625 dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n"); 1626 1627 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, 1628 SD_RSP_TYPE_R1, NULL, 0); 1629 if (retval != STATUS_SUCCESS) { 1630 rtsx_trace(chip); 1631 return STATUS_FAIL; 1632 } 1633 1634 cmd[0] = 0x40 | SD_STATUS; 1635 cmd[1] = 0; 1636 cmd[2] = 0; 1637 cmd[3] = 0; 1638 cmd[4] = 0; 1639 1640 retval = sd_read_data(chip, SD_TM_NORMAL_READ, 1641 cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100); 1642 if (retval != STATUS_SUCCESS) { 1643 (void)sd_wait_data_idle(chip); 1644 1645 rtsx_clear_sd_error(chip); 1646 rtsx_trace(chip); 1647 return STATUS_FAIL; 1648 } 1649 1650 return STATUS_SUCCESS; 1651} 1652 1653static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point) 1654{ 1655 struct sd_info *sd_card = &(chip->sd_card); 1656 int retval; 1657 u8 cmd[5], bus_width; 1658 1659 if (CHK_MMC_8BIT(sd_card)) 1660 bus_width = SD_BUS_WIDTH_8; 1661 else if (CHK_MMC_4BIT(sd_card)) 1662 bus_width = SD_BUS_WIDTH_4; 1663 else 1664 bus_width = SD_BUS_WIDTH_1; 1665 1666 retval = sd_change_phase(chip, sample_point, TUNE_RX); 1667 if (retval != STATUS_SUCCESS) { 1668 rtsx_trace(chip); 1669 return STATUS_FAIL; 1670 } 1671 1672 dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n"); 1673 1674 cmd[0] = 0x40 | SEND_EXT_CSD; 1675 cmd[1] = 0; 1676 cmd[2] = 0; 1677 cmd[3] = 0; 1678 cmd[4] = 0; 1679 1680 retval = sd_read_data(chip, SD_TM_NORMAL_READ, 1681 cmd, 5, 0x200, 1, bus_width, NULL, 0, 100); 1682 if (retval != STATUS_SUCCESS) { 1683 (void)sd_wait_data_idle(chip); 1684 1685 rtsx_clear_sd_error(chip); 1686 rtsx_trace(chip); 1687 return STATUS_FAIL; 1688 } 1689 1690 return STATUS_SUCCESS; 1691} 1692 1693static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point) 1694{ 1695 struct sd_info *sd_card = &(chip->sd_card); 1696 int retval; 1697 1698 retval = sd_change_phase(chip, sample_point, TUNE_TX); 1699 if (retval != STATUS_SUCCESS) { 1700 rtsx_trace(chip); 1701 return STATUS_FAIL; 1702 } 1703 1704 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 1705 SD_RSP_80CLK_TIMEOUT_EN); 1706 if (retval) { 1707 rtsx_trace(chip); 1708 return retval; 1709 } 1710 1711 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 1712 SD_RSP_TYPE_R1, NULL, 0); 1713 if (retval != STATUS_SUCCESS) { 1714 if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) { 1715 rtsx_write_register(chip, SD_CFG3, 1716 SD_RSP_80CLK_TIMEOUT_EN, 0); 1717 rtsx_trace(chip); 1718 return STATUS_FAIL; 1719 } 1720 } 1721 1722 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 1723 0); 1724 if (retval) { 1725 rtsx_trace(chip); 1726 return retval; 1727 } 1728 1729 return STATUS_SUCCESS; 1730} 1731 1732static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point) 1733{ 1734 struct sd_info *sd_card = &(chip->sd_card); 1735 int retval; 1736 u8 cmd[5], bus_width; 1737 1738 retval = sd_change_phase(chip, sample_point, TUNE_TX); 1739 if (retval != STATUS_SUCCESS) { 1740 rtsx_trace(chip); 1741 return STATUS_FAIL; 1742 } 1743 1744 if (CHK_SD(sd_card)) { 1745 bus_width = SD_BUS_WIDTH_4; 1746 } else { 1747 if (CHK_MMC_8BIT(sd_card)) 1748 bus_width = SD_BUS_WIDTH_8; 1749 else if (CHK_MMC_4BIT(sd_card)) 1750 bus_width = SD_BUS_WIDTH_4; 1751 else 1752 bus_width = SD_BUS_WIDTH_1; 1753 } 1754 1755 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000); 1756 if (retval != STATUS_SUCCESS) { 1757 rtsx_trace(chip); 1758 return STATUS_FAIL; 1759 } 1760 1761 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 1762 SD_RSP_80CLK_TIMEOUT_EN); 1763 if (retval) { 1764 rtsx_trace(chip); 1765 return retval; 1766 } 1767 1768 cmd[0] = 0x40 | PROGRAM_CSD; 1769 cmd[1] = 0; 1770 cmd[2] = 0; 1771 cmd[3] = 0; 1772 cmd[4] = 0; 1773 1774 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2, 1775 cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100); 1776 if (retval != STATUS_SUCCESS) { 1777 rtsx_clear_sd_error(chip); 1778 rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0); 1779 rtsx_trace(chip); 1780 return STATUS_FAIL; 1781 } 1782 1783 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 1784 0); 1785 if (retval) { 1786 rtsx_trace(chip); 1787 return retval; 1788 } 1789 1790 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, 1791 NULL, 0); 1792 1793 return STATUS_SUCCESS; 1794} 1795 1796static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, 1797 u8 tune_dir) 1798{ 1799 struct sd_info *sd_card = &(chip->sd_card); 1800 struct timing_phase_path path[MAX_PHASE + 1]; 1801 int i, j, cont_path_cnt; 1802 bool new_block; 1803 int max_len, final_path_idx; 1804 u8 final_phase = 0xFF; 1805 1806 if (phase_map == 0xFFFFFFFF) { 1807 if (tune_dir == TUNE_RX) 1808 final_phase = (u8)chip->sd_default_rx_phase; 1809 else 1810 final_phase = (u8)chip->sd_default_tx_phase; 1811 1812 goto Search_Finish; 1813 } 1814 1815 cont_path_cnt = 0; 1816 new_block = true; 1817 j = 0; 1818 for (i = 0; i < MAX_PHASE + 1; i++) { 1819 if (phase_map & (1 << i)) { 1820 if (new_block) { 1821 new_block = false; 1822 j = cont_path_cnt++; 1823 path[j].start = i; 1824 path[j].end = i; 1825 } else { 1826 path[j].end = i; 1827 } 1828 } else { 1829 new_block = true; 1830 if (cont_path_cnt) { 1831 int idx = cont_path_cnt - 1; 1832 1833 path[idx].len = path[idx].end - 1834 path[idx].start + 1; 1835 path[idx].mid = path[idx].start + 1836 path[idx].len / 2; 1837 } 1838 } 1839 } 1840 1841 if (cont_path_cnt == 0) { 1842 dev_dbg(rtsx_dev(chip), "No continuous phase path\n"); 1843 goto Search_Finish; 1844 } else { 1845 int idx = cont_path_cnt - 1; 1846 1847 path[idx].len = path[idx].end - path[idx].start + 1; 1848 path[idx].mid = path[idx].start + path[idx].len / 2; 1849 } 1850 1851 if ((path[0].start == 0) && 1852 (path[cont_path_cnt - 1].end == MAX_PHASE)) { 1853 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1; 1854 path[0].len += path[cont_path_cnt - 1].len; 1855 path[0].mid = path[0].start + path[0].len / 2; 1856 if (path[0].mid < 0) 1857 path[0].mid += MAX_PHASE + 1; 1858 1859 cont_path_cnt--; 1860 } 1861 1862 max_len = 0; 1863 final_phase = 0; 1864 final_path_idx = 0; 1865 for (i = 0; i < cont_path_cnt; i++) { 1866 if (path[i].len > max_len) { 1867 max_len = path[i].len; 1868 final_phase = (u8)path[i].mid; 1869 final_path_idx = i; 1870 } 1871 1872 dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n", 1873 i, path[i].start); 1874 dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end); 1875 dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len); 1876 dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid); 1877 dev_dbg(rtsx_dev(chip), "\n"); 1878 } 1879 1880 if (tune_dir == TUNE_TX) { 1881 if (CHK_SD_SDR104(sd_card)) { 1882 if (max_len > 15) { 1883 int temp_mid = (max_len - 16) / 2; 1884 int temp_final_phase = 1885 path[final_path_idx].end - 1886 (max_len - (6 + temp_mid)); 1887 1888 if (temp_final_phase < 0) 1889 final_phase = (u8)(temp_final_phase + 1890 MAX_PHASE + 1); 1891 else 1892 final_phase = (u8)temp_final_phase; 1893 } 1894 } else if (CHK_SD_SDR50(sd_card)) { 1895 if (max_len > 12) { 1896 int temp_mid = (max_len - 13) / 2; 1897 int temp_final_phase = 1898 path[final_path_idx].end - 1899 (max_len - (3 + temp_mid)); 1900 1901 if (temp_final_phase < 0) 1902 final_phase = (u8)(temp_final_phase + 1903 MAX_PHASE + 1); 1904 else 1905 final_phase = (u8)temp_final_phase; 1906 } 1907 } 1908 } 1909 1910Search_Finish: 1911 dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase); 1912 return final_phase; 1913} 1914 1915static int sd_tuning_rx(struct rtsx_chip *chip) 1916{ 1917 struct sd_info *sd_card = &(chip->sd_card); 1918 int retval; 1919 int i, j; 1920 u32 raw_phase_map[3], phase_map; 1921 u8 final_phase; 1922 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point); 1923 1924 if (CHK_SD(sd_card)) { 1925 if (CHK_SD_DDR50(sd_card)) 1926 tuning_cmd = sd_ddr_tuning_rx_cmd; 1927 else 1928 tuning_cmd = sd_sdr_tuning_rx_cmd; 1929 1930 } else { 1931 if (CHK_MMC_DDR52(sd_card)) 1932 tuning_cmd = mmc_ddr_tunning_rx_cmd; 1933 else { 1934 rtsx_trace(chip); 1935 return STATUS_FAIL; 1936 } 1937 } 1938 1939 for (i = 0; i < 3; i++) { 1940 raw_phase_map[i] = 0; 1941 for (j = MAX_PHASE; j >= 0; j--) { 1942 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 1943 sd_set_err_code(chip, SD_NO_CARD); 1944 rtsx_trace(chip); 1945 return STATUS_FAIL; 1946 } 1947 1948 retval = tuning_cmd(chip, (u8)j); 1949 if (retval == STATUS_SUCCESS) 1950 raw_phase_map[i] |= 1 << j; 1951 } 1952 } 1953 1954 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2]; 1955 for (i = 0; i < 3; i++) 1956 dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n", 1957 i, raw_phase_map[i]); 1958 1959 dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map); 1960 1961 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX); 1962 if (final_phase == 0xFF) { 1963 rtsx_trace(chip); 1964 return STATUS_FAIL; 1965 } 1966 1967 retval = sd_change_phase(chip, final_phase, TUNE_RX); 1968 if (retval != STATUS_SUCCESS) { 1969 rtsx_trace(chip); 1970 return STATUS_FAIL; 1971 } 1972 1973 return STATUS_SUCCESS; 1974} 1975 1976static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip) 1977{ 1978 struct sd_info *sd_card = &(chip->sd_card); 1979 int retval; 1980 int i; 1981 u32 phase_map; 1982 u8 final_phase; 1983 1984 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 1985 SD_RSP_80CLK_TIMEOUT_EN); 1986 if (retval) { 1987 rtsx_trace(chip); 1988 return retval; 1989 } 1990 1991 phase_map = 0; 1992 for (i = MAX_PHASE; i >= 0; i--) { 1993 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 1994 sd_set_err_code(chip, SD_NO_CARD); 1995 rtsx_write_register(chip, SD_CFG3, 1996 SD_RSP_80CLK_TIMEOUT_EN, 0); 1997 rtsx_trace(chip); 1998 return STATUS_FAIL; 1999 } 2000 2001 retval = sd_change_phase(chip, (u8)i, TUNE_TX); 2002 if (retval != STATUS_SUCCESS) 2003 continue; 2004 2005 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, 2006 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 2007 0); 2008 if ((retval == STATUS_SUCCESS) || 2009 !sd_check_err_code(chip, SD_RSP_TIMEOUT)) 2010 phase_map |= 1 << i; 2011 } 2012 2013 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 2014 0); 2015 if (retval) { 2016 rtsx_trace(chip); 2017 return retval; 2018 } 2019 2020 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n", 2021 phase_map); 2022 2023 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX); 2024 if (final_phase == 0xFF) { 2025 rtsx_trace(chip); 2026 return STATUS_FAIL; 2027 } 2028 2029 retval = sd_change_phase(chip, final_phase, TUNE_TX); 2030 if (retval != STATUS_SUCCESS) { 2031 rtsx_trace(chip); 2032 return STATUS_FAIL; 2033 } 2034 2035 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n", 2036 (int)final_phase); 2037 2038 return STATUS_SUCCESS; 2039} 2040 2041static int sd_tuning_tx(struct rtsx_chip *chip) 2042{ 2043 struct sd_info *sd_card = &(chip->sd_card); 2044 int retval; 2045 int i, j; 2046 u32 raw_phase_map[3], phase_map; 2047 u8 final_phase; 2048 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point); 2049 2050 if (CHK_SD(sd_card)) { 2051 if (CHK_SD_DDR50(sd_card)) 2052 tuning_cmd = sd_ddr_tuning_tx_cmd; 2053 else 2054 tuning_cmd = sd_sdr_tuning_tx_cmd; 2055 2056 } else { 2057 if (CHK_MMC_DDR52(sd_card)) 2058 tuning_cmd = sd_ddr_tuning_tx_cmd; 2059 else { 2060 rtsx_trace(chip); 2061 return STATUS_FAIL; 2062 } 2063 } 2064 2065 for (i = 0; i < 3; i++) { 2066 raw_phase_map[i] = 0; 2067 for (j = MAX_PHASE; j >= 0; j--) { 2068 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 2069 sd_set_err_code(chip, SD_NO_CARD); 2070 rtsx_write_register(chip, SD_CFG3, 2071 SD_RSP_80CLK_TIMEOUT_EN, 0); 2072 rtsx_trace(chip); 2073 return STATUS_FAIL; 2074 } 2075 2076 retval = tuning_cmd(chip, (u8)j); 2077 if (retval == STATUS_SUCCESS) 2078 raw_phase_map[i] |= 1 << j; 2079 } 2080 } 2081 2082 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2]; 2083 for (i = 0; i < 3; i++) 2084 dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n", 2085 i, raw_phase_map[i]); 2086 2087 dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map); 2088 2089 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX); 2090 if (final_phase == 0xFF) { 2091 rtsx_trace(chip); 2092 return STATUS_FAIL; 2093 } 2094 2095 retval = sd_change_phase(chip, final_phase, TUNE_TX); 2096 if (retval != STATUS_SUCCESS) { 2097 rtsx_trace(chip); 2098 return STATUS_FAIL; 2099 } 2100 2101 return STATUS_SUCCESS; 2102} 2103 2104static int sd_sdr_tuning(struct rtsx_chip *chip) 2105{ 2106 int retval; 2107 2108 retval = sd_tuning_tx(chip); 2109 if (retval != STATUS_SUCCESS) { 2110 rtsx_trace(chip); 2111 return STATUS_FAIL; 2112 } 2113 2114 retval = sd_tuning_rx(chip); 2115 if (retval != STATUS_SUCCESS) { 2116 rtsx_trace(chip); 2117 return STATUS_FAIL; 2118 } 2119 2120 return STATUS_SUCCESS; 2121} 2122 2123static int sd_ddr_tuning(struct rtsx_chip *chip) 2124{ 2125 int retval; 2126 2127 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) { 2128 retval = sd_ddr_pre_tuning_tx(chip); 2129 if (retval != STATUS_SUCCESS) { 2130 rtsx_trace(chip); 2131 return STATUS_FAIL; 2132 } 2133 } else { 2134 retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase, 2135 TUNE_TX); 2136 if (retval != STATUS_SUCCESS) { 2137 rtsx_trace(chip); 2138 return STATUS_FAIL; 2139 } 2140 } 2141 2142 retval = sd_tuning_rx(chip); 2143 if (retval != STATUS_SUCCESS) { 2144 rtsx_trace(chip); 2145 return STATUS_FAIL; 2146 } 2147 2148 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) { 2149 retval = sd_tuning_tx(chip); 2150 if (retval != STATUS_SUCCESS) { 2151 rtsx_trace(chip); 2152 return STATUS_FAIL; 2153 } 2154 } 2155 2156 return STATUS_SUCCESS; 2157} 2158 2159static int mmc_ddr_tuning(struct rtsx_chip *chip) 2160{ 2161 int retval; 2162 2163 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) { 2164 retval = sd_ddr_pre_tuning_tx(chip); 2165 if (retval != STATUS_SUCCESS) { 2166 rtsx_trace(chip); 2167 return STATUS_FAIL; 2168 } 2169 } else { 2170 retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase, 2171 TUNE_TX); 2172 if (retval != STATUS_SUCCESS) { 2173 rtsx_trace(chip); 2174 return STATUS_FAIL; 2175 } 2176 } 2177 2178 retval = sd_tuning_rx(chip); 2179 if (retval != STATUS_SUCCESS) { 2180 rtsx_trace(chip); 2181 return STATUS_FAIL; 2182 } 2183 2184 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) { 2185 retval = sd_tuning_tx(chip); 2186 if (retval != STATUS_SUCCESS) { 2187 rtsx_trace(chip); 2188 return STATUS_FAIL; 2189 } 2190 } 2191 2192 return STATUS_SUCCESS; 2193} 2194 2195int sd_switch_clock(struct rtsx_chip *chip) 2196{ 2197 struct sd_info *sd_card = &(chip->sd_card); 2198 int retval; 2199 int re_tuning = 0; 2200 2201 retval = select_card(chip, SD_CARD); 2202 if (retval != STATUS_SUCCESS) { 2203 rtsx_trace(chip); 2204 return STATUS_FAIL; 2205 } 2206 2207 retval = switch_clock(chip, sd_card->sd_clock); 2208 if (retval != STATUS_SUCCESS) { 2209 rtsx_trace(chip); 2210 return STATUS_FAIL; 2211 } 2212 2213 if (re_tuning) { 2214 if (CHK_SD(sd_card)) { 2215 if (CHK_SD_DDR50(sd_card)) 2216 retval = sd_ddr_tuning(chip); 2217 else 2218 retval = sd_sdr_tuning(chip); 2219 } else { 2220 if (CHK_MMC_DDR52(sd_card)) 2221 retval = mmc_ddr_tuning(chip); 2222 } 2223 2224 if (retval != STATUS_SUCCESS) { 2225 rtsx_trace(chip); 2226 return STATUS_FAIL; 2227 } 2228 } 2229 2230 return STATUS_SUCCESS; 2231} 2232 2233static int sd_prepare_reset(struct rtsx_chip *chip) 2234{ 2235 struct sd_info *sd_card = &(chip->sd_card); 2236 int retval; 2237 2238 if (chip->asic_code) 2239 sd_card->sd_clock = 29; 2240 else 2241 sd_card->sd_clock = CLK_30; 2242 2243 sd_card->sd_type = 0; 2244 sd_card->seq_mode = 0; 2245 sd_card->sd_data_buf_ready = 0; 2246 sd_card->capacity = 0; 2247 2248#ifdef SUPPORT_SD_LOCK 2249 sd_card->sd_lock_status = 0; 2250 sd_card->sd_erase_status = 0; 2251#endif 2252 2253 chip->capacity[chip->card2lun[SD_CARD]] = 0; 2254 chip->sd_io = 0; 2255 2256 retval = sd_set_init_para(chip); 2257 if (retval != STATUS_SUCCESS) { 2258 rtsx_trace(chip); 2259 return retval; 2260 } 2261 2262 retval = rtsx_write_register(chip, REG_SD_CFG1, 0xFF, 0x40); 2263 if (retval) { 2264 rtsx_trace(chip); 2265 return retval; 2266 } 2267 2268 retval = rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR, 2269 SD_STOP | SD_CLR_ERR); 2270 if (retval) { 2271 rtsx_trace(chip); 2272 return retval; 2273 } 2274 2275 retval = select_card(chip, SD_CARD); 2276 if (retval != STATUS_SUCCESS) { 2277 rtsx_trace(chip); 2278 return STATUS_FAIL; 2279 } 2280 2281 return STATUS_SUCCESS; 2282} 2283 2284static int sd_pull_ctl_disable(struct rtsx_chip *chip) 2285{ 2286 int retval; 2287 2288 if (CHECK_PID(chip, 0x5208)) { 2289 retval = rtsx_write_register(chip, CARD_PULL_CTL1, 0xFF, 2290 XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD); 2291 if (retval) { 2292 rtsx_trace(chip); 2293 return retval; 2294 } 2295 retval = rtsx_write_register(chip, CARD_PULL_CTL2, 0xFF, 2296 SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD); 2297 if (retval) { 2298 rtsx_trace(chip); 2299 return retval; 2300 } 2301 retval = rtsx_write_register(chip, CARD_PULL_CTL3, 0xFF, 2302 SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU); 2303 if (retval) { 2304 rtsx_trace(chip); 2305 return retval; 2306 } 2307 retval = rtsx_write_register(chip, CARD_PULL_CTL4, 0xFF, 2308 XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD); 2309 if (retval) { 2310 rtsx_trace(chip); 2311 return retval; 2312 } 2313 retval = rtsx_write_register(chip, CARD_PULL_CTL5, 0xFF, 2314 MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD); 2315 if (retval) { 2316 rtsx_trace(chip); 2317 return retval; 2318 } 2319 retval = rtsx_write_register(chip, CARD_PULL_CTL6, 0xFF, 2320 MS_D5_PD | MS_D4_PD); 2321 if (retval) { 2322 rtsx_trace(chip); 2323 return retval; 2324 } 2325 } else if (CHECK_PID(chip, 0x5288)) { 2326 if (CHECK_BARO_PKG(chip, QFN)) { 2327 retval = rtsx_write_register(chip, CARD_PULL_CTL1, 2328 0xFF, 0x55); 2329 if (retval) { 2330 rtsx_trace(chip); 2331 return retval; 2332 } 2333 retval = rtsx_write_register(chip, CARD_PULL_CTL2, 2334 0xFF, 0x55); 2335 if (retval) { 2336 rtsx_trace(chip); 2337 return retval; 2338 } 2339 retval = rtsx_write_register(chip, CARD_PULL_CTL3, 2340 0xFF, 0x4B); 2341 if (retval) { 2342 rtsx_trace(chip); 2343 return retval; 2344 } 2345 retval = rtsx_write_register(chip, CARD_PULL_CTL4, 2346 0xFF, 0x69); 2347 if (retval) { 2348 rtsx_trace(chip); 2349 return retval; 2350 } 2351 } 2352 } 2353 2354 return STATUS_SUCCESS; 2355} 2356 2357int sd_pull_ctl_enable(struct rtsx_chip *chip) 2358{ 2359 int retval; 2360 2361 rtsx_init_cmd(chip); 2362 2363 if (CHECK_PID(chip, 0x5208)) { 2364 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 2365 XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU); 2366 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 2367 SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD); 2368 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 2369 SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU); 2370 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 2371 XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD); 2372 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 2373 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU); 2374 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 2375 MS_D5_PD | MS_D4_PD); 2376 } else if (CHECK_PID(chip, 0x5288)) { 2377 if (CHECK_BARO_PKG(chip, QFN)) { 2378 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 2379 0xA8); 2380 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 2381 0x5A); 2382 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 2383 0x95); 2384 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 2385 0xAA); 2386 } 2387 } 2388 2389 retval = rtsx_send_cmd(chip, SD_CARD, 100); 2390 if (retval < 0) { 2391 rtsx_trace(chip); 2392 return STATUS_FAIL; 2393 } 2394 2395 return STATUS_SUCCESS; 2396} 2397 2398static int sd_init_power(struct rtsx_chip *chip) 2399{ 2400 int retval; 2401 2402 retval = sd_power_off_card3v3(chip); 2403 if (retval != STATUS_SUCCESS) { 2404 rtsx_trace(chip); 2405 return STATUS_FAIL; 2406 } 2407 2408 if (!chip->ft2_fast_mode) 2409 wait_timeout(250); 2410 2411 retval = enable_card_clock(chip, SD_CARD); 2412 if (retval != STATUS_SUCCESS) { 2413 rtsx_trace(chip); 2414 return STATUS_FAIL; 2415 } 2416 2417 if (chip->asic_code) { 2418 retval = sd_pull_ctl_enable(chip); 2419 if (retval != STATUS_SUCCESS) { 2420 rtsx_trace(chip); 2421 return STATUS_FAIL; 2422 } 2423 } else { 2424 retval = rtsx_write_register(chip, FPGA_PULL_CTL, 2425 FPGA_SD_PULL_CTL_BIT | 0x20, 0); 2426 if (retval) { 2427 rtsx_trace(chip); 2428 return retval; 2429 } 2430 } 2431 2432 if (!chip->ft2_fast_mode) { 2433 retval = card_power_on(chip, SD_CARD); 2434 if (retval != STATUS_SUCCESS) { 2435 rtsx_trace(chip); 2436 return STATUS_FAIL; 2437 } 2438 2439 wait_timeout(260); 2440 2441#ifdef SUPPORT_OCP 2442 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) { 2443 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n", 2444 chip->ocp_stat); 2445 rtsx_trace(chip); 2446 return STATUS_FAIL; 2447 } 2448#endif 2449 } 2450 2451 retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 2452 SD_OUTPUT_EN); 2453 if (retval) { 2454 rtsx_trace(chip); 2455 return retval; 2456 } 2457 2458 return STATUS_SUCCESS; 2459} 2460 2461static int sd_dummy_clock(struct rtsx_chip *chip) 2462{ 2463 int retval; 2464 2465 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0x01); 2466 if (retval) { 2467 rtsx_trace(chip); 2468 return retval; 2469 } 2470 wait_timeout(5); 2471 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0); 2472 if (retval) { 2473 rtsx_trace(chip); 2474 return retval; 2475 } 2476 2477 return STATUS_SUCCESS; 2478} 2479 2480static int sd_read_lba0(struct rtsx_chip *chip) 2481{ 2482 struct sd_info *sd_card = &(chip->sd_card); 2483 int retval; 2484 u8 cmd[5], bus_width; 2485 2486 cmd[0] = 0x40 | READ_SINGLE_BLOCK; 2487 cmd[1] = 0; 2488 cmd[2] = 0; 2489 cmd[3] = 0; 2490 cmd[4] = 0; 2491 2492 if (CHK_SD(sd_card)) { 2493 bus_width = SD_BUS_WIDTH_4; 2494 } else { 2495 if (CHK_MMC_8BIT(sd_card)) 2496 bus_width = SD_BUS_WIDTH_8; 2497 else if (CHK_MMC_4BIT(sd_card)) 2498 bus_width = SD_BUS_WIDTH_4; 2499 else 2500 bus_width = SD_BUS_WIDTH_1; 2501 } 2502 2503 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 2504 5, 512, 1, bus_width, NULL, 0, 100); 2505 if (retval != STATUS_SUCCESS) { 2506 rtsx_clear_sd_error(chip); 2507 rtsx_trace(chip); 2508 return STATUS_FAIL; 2509 } 2510 2511 return STATUS_SUCCESS; 2512} 2513 2514static int sd_check_wp_state(struct rtsx_chip *chip) 2515{ 2516 struct sd_info *sd_card = &(chip->sd_card); 2517 int retval; 2518 u32 val; 2519 u16 sd_card_type; 2520 u8 cmd[5], buf[64]; 2521 2522 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 2523 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0); 2524 if (retval != STATUS_SUCCESS) { 2525 rtsx_trace(chip); 2526 return STATUS_FAIL; 2527 } 2528 2529 cmd[0] = 0x40 | SD_STATUS; 2530 cmd[1] = 0; 2531 cmd[2] = 0; 2532 cmd[3] = 0; 2533 cmd[4] = 0; 2534 2535 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, 2536 SD_BUS_WIDTH_4, buf, 64, 250); 2537 if (retval != STATUS_SUCCESS) { 2538 rtsx_clear_sd_error(chip); 2539 2540 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 2541 SD_RSP_TYPE_R1, NULL, 0); 2542 rtsx_trace(chip); 2543 return STATUS_FAIL; 2544 } 2545 2546 dev_dbg(rtsx_dev(chip), "ACMD13:\n"); 2547 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf); 2548 2549 sd_card_type = ((u16)buf[2] << 8) | buf[3]; 2550 dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type); 2551 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) { 2552 /* ROM card or OTP */ 2553 chip->card_wp |= SD_CARD; 2554 } 2555 2556 /* Check SD Machanical Write-Protect Switch */ 2557 val = rtsx_readl(chip, RTSX_BIPR); 2558 if (val & SD_WRITE_PROTECT) 2559 chip->card_wp |= SD_CARD; 2560 2561 return STATUS_SUCCESS; 2562} 2563 2564static int reset_sd(struct rtsx_chip *chip) 2565{ 2566 struct sd_info *sd_card = &(chip->sd_card); 2567 bool hi_cap_flow = false; 2568 int retval, i = 0, j = 0, k = 0; 2569 bool sd_dont_switch = false; 2570 bool support_1v8 = false; 2571 bool try_sdio = true; 2572 u8 rsp[16]; 2573 u8 switch_bus_width; 2574 u32 voltage = 0; 2575 bool sd20_mode = false; 2576 2577 SET_SD(sd_card); 2578 2579Switch_Fail: 2580 2581 i = 0; 2582 j = 0; 2583 k = 0; 2584 hi_cap_flow = false; 2585 2586#ifdef SUPPORT_SD_LOCK 2587 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) 2588 goto SD_UNLOCK_ENTRY; 2589#endif 2590 2591 retval = sd_prepare_reset(chip); 2592 if (retval != STATUS_SUCCESS) { 2593 rtsx_trace(chip); 2594 return STATUS_FAIL; 2595 } 2596 2597 retval = sd_dummy_clock(chip); 2598 if (retval != STATUS_SUCCESS) { 2599 rtsx_trace(chip); 2600 return STATUS_FAIL; 2601 } 2602 2603 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) { 2604 int rty_cnt = 0; 2605 2606 for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) { 2607 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 2608 sd_set_err_code(chip, SD_NO_CARD); 2609 rtsx_trace(chip); 2610 return STATUS_FAIL; 2611 } 2612 2613 retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0, 2614 SD_RSP_TYPE_R4, rsp, 5); 2615 if (retval == STATUS_SUCCESS) { 2616 int func_num = (rsp[1] >> 4) & 0x07; 2617 2618 if (func_num) { 2619 dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n", 2620 func_num); 2621 chip->sd_io = 1; 2622 rtsx_trace(chip); 2623 return STATUS_FAIL; 2624 } 2625 2626 break; 2627 } 2628 2629 sd_init_power(chip); 2630 2631 sd_dummy_clock(chip); 2632 } 2633 2634 dev_dbg(rtsx_dev(chip), "Normal card!\n"); 2635 } 2636 2637 /* Start Initialization Process of SD Card */ 2638RTY_SD_RST: 2639 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, 2640 NULL, 0); 2641 if (retval != STATUS_SUCCESS) { 2642 rtsx_trace(chip); 2643 return STATUS_FAIL; 2644 } 2645 2646 wait_timeout(20); 2647 2648 retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA, 2649 SD_RSP_TYPE_R7, rsp, 5); 2650 if (retval == STATUS_SUCCESS) { 2651 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) { 2652 hi_cap_flow = true; 2653 voltage = SUPPORT_VOLTAGE | 0x40000000; 2654 } 2655 } 2656 2657 if (!hi_cap_flow) { 2658 voltage = SUPPORT_VOLTAGE; 2659 2660 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, 2661 SD_RSP_TYPE_R0, NULL, 0); 2662 if (retval != STATUS_SUCCESS) { 2663 rtsx_trace(chip); 2664 return STATUS_FAIL; 2665 } 2666 2667 wait_timeout(20); 2668 } 2669 2670 do { 2671 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1, 2672 NULL, 0); 2673 if (retval != STATUS_SUCCESS) { 2674 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 2675 sd_set_err_code(chip, SD_NO_CARD); 2676 rtsx_trace(chip); 2677 return STATUS_FAIL; 2678 } 2679 2680 j++; 2681 if (j < 3) 2682 goto RTY_SD_RST; 2683 else { 2684 rtsx_trace(chip); 2685 return STATUS_FAIL; 2686 } 2687 } 2688 2689 retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage, 2690 SD_RSP_TYPE_R3, rsp, 5); 2691 if (retval != STATUS_SUCCESS) { 2692 k++; 2693 if (k < 3) 2694 goto RTY_SD_RST; 2695 else { 2696 rtsx_trace(chip); 2697 return STATUS_FAIL; 2698 } 2699 } 2700 2701 i++; 2702 wait_timeout(20); 2703 } while (!(rsp[1] & 0x80) && (i < 255)); 2704 2705 if (i == 255) { 2706 rtsx_trace(chip); 2707 return STATUS_FAIL; 2708 } 2709 2710 if (hi_cap_flow) { 2711 if (rsp[1] & 0x40) 2712 SET_SD_HCXC(sd_card); 2713 else 2714 CLR_SD_HCXC(sd_card); 2715 2716 support_1v8 = false; 2717 } else { 2718 CLR_SD_HCXC(sd_card); 2719 support_1v8 = false; 2720 } 2721 dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8); 2722 2723 if (support_1v8) { 2724 retval = sd_voltage_switch(chip); 2725 if (retval != STATUS_SUCCESS) { 2726 rtsx_trace(chip); 2727 return STATUS_FAIL; 2728 } 2729 } 2730 2731 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, 2732 NULL, 0); 2733 if (retval != STATUS_SUCCESS) { 2734 rtsx_trace(chip); 2735 return STATUS_FAIL; 2736 } 2737 2738 for (i = 0; i < 3; i++) { 2739 retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0, 2740 SD_RSP_TYPE_R6, rsp, 5); 2741 if (retval != STATUS_SUCCESS) { 2742 rtsx_trace(chip); 2743 return STATUS_FAIL; 2744 } 2745 2746 sd_card->sd_addr = (u32)rsp[1] << 24; 2747 sd_card->sd_addr += (u32)rsp[2] << 16; 2748 2749 if (sd_card->sd_addr) 2750 break; 2751 } 2752 2753 retval = sd_check_csd(chip, 1); 2754 if (retval != STATUS_SUCCESS) { 2755 rtsx_trace(chip); 2756 return STATUS_FAIL; 2757 } 2758 2759 retval = sd_select_card(chip, 1); 2760 if (retval != STATUS_SUCCESS) { 2761 rtsx_trace(chip); 2762 return STATUS_FAIL; 2763 } 2764 2765#ifdef SUPPORT_SD_LOCK 2766SD_UNLOCK_ENTRY: 2767 retval = sd_update_lock_status(chip); 2768 if (retval != STATUS_SUCCESS) { 2769 rtsx_trace(chip); 2770 return STATUS_FAIL; 2771 } 2772 2773 if (sd_card->sd_lock_status & SD_LOCKED) { 2774 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST); 2775 return STATUS_SUCCESS; 2776 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) { 2777 sd_card->sd_lock_status &= ~SD_PWD_EXIST; 2778 } 2779#endif 2780 2781 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, 2782 SD_RSP_TYPE_R1, NULL, 0); 2783 if (retval != STATUS_SUCCESS) { 2784 rtsx_trace(chip); 2785 return STATUS_FAIL; 2786 } 2787 2788 retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0, 2789 SD_RSP_TYPE_R1, NULL, 0); 2790 if (retval != STATUS_SUCCESS) { 2791 rtsx_trace(chip); 2792 return STATUS_FAIL; 2793 } 2794 2795 if (support_1v8) { 2796 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, 2797 SD_RSP_TYPE_R1, NULL, 0); 2798 if (retval != STATUS_SUCCESS) { 2799 rtsx_trace(chip); 2800 return STATUS_FAIL; 2801 } 2802 2803 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, 2804 SD_RSP_TYPE_R1, NULL, 0); 2805 if (retval != STATUS_SUCCESS) { 2806 rtsx_trace(chip); 2807 return STATUS_FAIL; 2808 } 2809 2810 switch_bus_width = SD_BUS_WIDTH_4; 2811 } else { 2812 switch_bus_width = SD_BUS_WIDTH_1; 2813 } 2814 2815 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1, 2816 NULL, 0); 2817 if (retval != STATUS_SUCCESS) { 2818 rtsx_trace(chip); 2819 return STATUS_FAIL; 2820 } 2821 2822 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0); 2823 if (retval != STATUS_SUCCESS) { 2824 rtsx_trace(chip); 2825 return STATUS_FAIL; 2826 } 2827 2828 if (!(sd_card->raw_csd[4] & 0x40)) 2829 sd_dont_switch = true; 2830 2831 if (!sd_dont_switch) { 2832 if (sd20_mode) { 2833 /* Set sd_switch_fail here, because we needn't 2834 * switch to UHS mode 2835 */ 2836 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK | 2837 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK; 2838 } 2839 2840 /* Check the card whether follow SD1.1 spec or higher */ 2841 retval = sd_check_spec(chip, switch_bus_width); 2842 if (retval == STATUS_SUCCESS) { 2843 retval = sd_switch_function(chip, switch_bus_width); 2844 if (retval != STATUS_SUCCESS) { 2845 sd_init_power(chip); 2846 sd_dont_switch = true; 2847 try_sdio = false; 2848 2849 goto Switch_Fail; 2850 } 2851 } else { 2852 if (support_1v8) { 2853 sd_init_power(chip); 2854 sd_dont_switch = true; 2855 try_sdio = false; 2856 2857 goto Switch_Fail; 2858 } 2859 } 2860 } 2861 2862 if (!support_1v8) { 2863 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, 2864 SD_RSP_TYPE_R1, NULL, 0); 2865 if (retval != STATUS_SUCCESS) { 2866 rtsx_trace(chip); 2867 return STATUS_FAIL; 2868 } 2869 2870 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, 2871 SD_RSP_TYPE_R1, NULL, 0); 2872 if (retval != STATUS_SUCCESS) { 2873 rtsx_trace(chip); 2874 return STATUS_FAIL; 2875 } 2876 } 2877 2878#ifdef SUPPORT_SD_LOCK 2879 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE; 2880#endif 2881 2882 if (!sd20_mode && CHK_SD30_SPEED(sd_card)) { 2883 int read_lba0 = 1; 2884 2885 retval = rtsx_write_register(chip, SD30_DRIVE_SEL, 0x07, 2886 chip->sd30_drive_sel_1v8); 2887 if (retval) { 2888 rtsx_trace(chip); 2889 return retval; 2890 } 2891 2892 retval = sd_set_init_para(chip); 2893 if (retval != STATUS_SUCCESS) { 2894 rtsx_trace(chip); 2895 return STATUS_FAIL; 2896 } 2897 2898 if (CHK_SD_DDR50(sd_card)) 2899 retval = sd_ddr_tuning(chip); 2900 else 2901 retval = sd_sdr_tuning(chip); 2902 2903 if (retval != STATUS_SUCCESS) { 2904 if (sd20_mode) { 2905 rtsx_trace(chip); 2906 return STATUS_FAIL; 2907 } else { 2908 retval = sd_init_power(chip); 2909 if (retval != STATUS_SUCCESS) { 2910 rtsx_trace(chip); 2911 return STATUS_FAIL; 2912 } 2913 2914 try_sdio = false; 2915 sd20_mode = true; 2916 goto Switch_Fail; 2917 } 2918 } 2919 2920 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 2921 SD_RSP_TYPE_R1, NULL, 0); 2922 2923 if (CHK_SD_DDR50(sd_card)) { 2924 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000); 2925 if (retval != STATUS_SUCCESS) 2926 read_lba0 = 0; 2927 } 2928 2929 if (read_lba0) { 2930 retval = sd_read_lba0(chip); 2931 if (retval != STATUS_SUCCESS) { 2932 if (sd20_mode) { 2933 rtsx_trace(chip); 2934 return STATUS_FAIL; 2935 } else { 2936 retval = sd_init_power(chip); 2937 if (retval != STATUS_SUCCESS) { 2938 rtsx_trace(chip); 2939 return STATUS_FAIL; 2940 } 2941 2942 try_sdio = false; 2943 sd20_mode = true; 2944 goto Switch_Fail; 2945 } 2946 } 2947 } 2948 } 2949 2950 retval = sd_check_wp_state(chip); 2951 if (retval != STATUS_SUCCESS) { 2952 rtsx_trace(chip); 2953 return STATUS_FAIL; 2954 } 2955 2956 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4; 2957 2958#ifdef SUPPORT_SD_LOCK 2959 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) { 2960 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF, 2961 0x02); 2962 if (retval) { 2963 rtsx_trace(chip); 2964 return retval; 2965 } 2966 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF, 2967 0x00); 2968 if (retval) { 2969 rtsx_trace(chip); 2970 return retval; 2971 } 2972 } 2973#endif 2974 2975 return STATUS_SUCCESS; 2976} 2977 2978 2979static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width) 2980{ 2981 struct sd_info *sd_card = &(chip->sd_card); 2982 int retval; 2983 u8 buf[8] = {0}, bus_width, *ptr; 2984 u16 byte_cnt; 2985 int len; 2986 2987 retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL, 2988 0); 2989 if (retval != STATUS_SUCCESS) { 2990 rtsx_trace(chip); 2991 return SWITCH_FAIL; 2992 } 2993 2994 if (width == MMC_8BIT_BUS) { 2995 buf[0] = 0x55; 2996 buf[1] = 0xAA; 2997 len = 8; 2998 byte_cnt = 8; 2999 bus_width = SD_BUS_WIDTH_8; 3000 } else { 3001 buf[0] = 0x5A; 3002 len = 4; 3003 byte_cnt = 4; 3004 bus_width = SD_BUS_WIDTH_4; 3005 } 3006 3007 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02); 3008 if (retval != STATUS_SUCCESS) { 3009 rtsx_trace(chip); 3010 return SWITCH_ERR; 3011 } 3012 3013 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3, 3014 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100); 3015 if (retval != STATUS_SUCCESS) { 3016 rtsx_clear_sd_error(chip); 3017 rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0); 3018 rtsx_trace(chip); 3019 return SWITCH_ERR; 3020 } 3021 3022 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0); 3023 if (retval != STATUS_SUCCESS) { 3024 rtsx_trace(chip); 3025 return SWITCH_ERR; 3026 } 3027 3028 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R); 3029 3030 rtsx_init_cmd(chip); 3031 3032 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R); 3033 3034 if (width == MMC_8BIT_BUS) 3035 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 3036 0xFF, 0x08); 3037 else 3038 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 3039 0xFF, 0x04); 3040 3041 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1); 3042 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0); 3043 3044 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 3045 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END| 3046 SD_CHECK_CRC7 | SD_RSP_LEN_6); 3047 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, 3048 PINGPONG_BUFFER); 3049 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3050 SD_TM_NORMAL_READ | SD_TRANSFER_START); 3051 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, 3052 SD_TRANSFER_END); 3053 3054 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0); 3055 if (width == MMC_8BIT_BUS) 3056 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0); 3057 3058 retval = rtsx_send_cmd(chip, SD_CARD, 100); 3059 if (retval < 0) { 3060 rtsx_clear_sd_error(chip); 3061 rtsx_trace(chip); 3062 return SWITCH_ERR; 3063 } 3064 3065 ptr = rtsx_get_cmd_data(chip) + 1; 3066 3067 if (width == MMC_8BIT_BUS) { 3068 dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n", 3069 ptr[0], ptr[1]); 3070 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) { 3071 u8 rsp[5]; 3072 u32 arg; 3073 3074 if (CHK_MMC_DDR52(sd_card)) 3075 arg = 0x03B70600; 3076 else 3077 arg = 0x03B70200; 3078 3079 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg, 3080 SD_RSP_TYPE_R1b, rsp, 5); 3081 if ((retval == STATUS_SUCCESS) && 3082 !(rsp[4] & MMC_SWITCH_ERR)) 3083 return SWITCH_SUCCESS; 3084 } 3085 } else { 3086 dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]); 3087 if (ptr[0] == 0xA5) { 3088 u8 rsp[5]; 3089 u32 arg; 3090 3091 if (CHK_MMC_DDR52(sd_card)) 3092 arg = 0x03B70500; 3093 else 3094 arg = 0x03B70100; 3095 3096 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg, 3097 SD_RSP_TYPE_R1b, rsp, 5); 3098 if ((retval == STATUS_SUCCESS) && 3099 !(rsp[4] & MMC_SWITCH_ERR)) 3100 return SWITCH_SUCCESS; 3101 } 3102 } 3103 3104 rtsx_trace(chip); 3105 return SWITCH_FAIL; 3106} 3107 3108 3109static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr) 3110{ 3111 struct sd_info *sd_card = &(chip->sd_card); 3112 int retval; 3113 u8 *ptr, card_type, card_type_mask = 0; 3114 3115 CLR_MMC_HS(sd_card); 3116 3117 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD); 3118 3119 rtsx_init_cmd(chip); 3120 3121 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 3122 0x40 | SEND_EXT_CSD); 3123 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0); 3124 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0); 3125 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0); 3126 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0); 3127 3128 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0); 3129 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2); 3130 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1); 3131 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0); 3132 3133 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 3134 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END| 3135 SD_CHECK_CRC7 | SD_RSP_LEN_6); 3136 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, 3137 PINGPONG_BUFFER); 3138 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3139 SD_TM_NORMAL_READ | SD_TRANSFER_START); 3140 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, 3141 SD_TRANSFER_END); 3142 3143 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0); 3144 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0); 3145 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0); 3146 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0); 3147 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0); 3148 3149 retval = rtsx_send_cmd(chip, SD_CARD, 1000); 3150 if (retval < 0) { 3151 if (retval == -ETIMEDOUT) { 3152 rtsx_clear_sd_error(chip); 3153 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 3154 SD_RSP_TYPE_R1, NULL, 0); 3155 } 3156 rtsx_trace(chip); 3157 return STATUS_FAIL; 3158 } 3159 3160 ptr = rtsx_get_cmd_data(chip); 3161 if (ptr[0] & SD_TRANSFER_ERR) { 3162 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 3163 SD_RSP_TYPE_R1, NULL, 0); 3164 rtsx_trace(chip); 3165 return STATUS_FAIL; 3166 } 3167 3168 if (CHK_MMC_SECTOR_MODE(sd_card)) { 3169 sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) | 3170 ((u32)ptr[3] << 8) | ((u32)ptr[2]); 3171 } 3172 3173 card_type_mask = 0x03; 3174 card_type = ptr[1] & card_type_mask; 3175 if (card_type) { 3176 u8 rsp[5]; 3177 3178 if (card_type & 0x04) { 3179 if (switch_ddr) 3180 SET_MMC_DDR52(sd_card); 3181 else 3182 SET_MMC_52M(sd_card); 3183 } else if (card_type & 0x02) { 3184 SET_MMC_52M(sd_card); 3185 } else { 3186 SET_MMC_26M(sd_card); 3187 } 3188 3189 retval = sd_send_cmd_get_rsp(chip, SWITCH, 3190 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5); 3191 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR)) 3192 CLR_MMC_HS(sd_card); 3193 } 3194 3195 sd_choose_proper_clock(chip); 3196 retval = switch_clock(chip, sd_card->sd_clock); 3197 if (retval != STATUS_SUCCESS) { 3198 rtsx_trace(chip); 3199 return STATUS_FAIL; 3200 } 3201 3202 /* Test Bus Procedure */ 3203 retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS); 3204 if (retval == SWITCH_SUCCESS) { 3205 SET_MMC_8BIT(sd_card); 3206 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8; 3207#ifdef SUPPORT_SD_LOCK 3208 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE; 3209#endif 3210 } else if (retval == SWITCH_FAIL) { 3211 retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS); 3212 if (retval == SWITCH_SUCCESS) { 3213 SET_MMC_4BIT(sd_card); 3214 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4; 3215#ifdef SUPPORT_SD_LOCK 3216 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE; 3217#endif 3218 } else if (retval == SWITCH_FAIL) { 3219 CLR_MMC_8BIT(sd_card); 3220 CLR_MMC_4BIT(sd_card); 3221 } else { 3222 rtsx_trace(chip); 3223 return STATUS_FAIL; 3224 } 3225 } else { 3226 rtsx_trace(chip); 3227 return STATUS_FAIL; 3228 } 3229 3230 return STATUS_SUCCESS; 3231} 3232 3233 3234static int reset_mmc(struct rtsx_chip *chip) 3235{ 3236 struct sd_info *sd_card = &(chip->sd_card); 3237 int retval, i = 0, j = 0, k = 0; 3238 bool switch_ddr = true; 3239 u8 rsp[16]; 3240 u8 spec_ver = 0; 3241 u32 temp; 3242 3243#ifdef SUPPORT_SD_LOCK 3244 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) 3245 goto MMC_UNLOCK_ENTRY; 3246#endif 3247 3248Switch_Fail: 3249 retval = sd_prepare_reset(chip); 3250 if (retval != STATUS_SUCCESS) { 3251 rtsx_trace(chip); 3252 return retval; 3253 } 3254 3255 SET_MMC(sd_card); 3256 3257RTY_MMC_RST: 3258 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, 3259 NULL, 0); 3260 if (retval != STATUS_SUCCESS) { 3261 rtsx_trace(chip); 3262 return STATUS_FAIL; 3263 } 3264 3265 do { 3266 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 3267 sd_set_err_code(chip, SD_NO_CARD); 3268 rtsx_trace(chip); 3269 return STATUS_FAIL; 3270 } 3271 3272 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND, 3273 (SUPPORT_VOLTAGE | 0x40000000), 3274 SD_RSP_TYPE_R3, rsp, 5); 3275 if (retval != STATUS_SUCCESS) { 3276 if (sd_check_err_code(chip, SD_BUSY) || 3277 sd_check_err_code(chip, SD_TO_ERR)) { 3278 k++; 3279 if (k < 20) { 3280 sd_clr_err_code(chip); 3281 goto RTY_MMC_RST; 3282 } else { 3283 rtsx_trace(chip); 3284 return STATUS_FAIL; 3285 } 3286 } else { 3287 j++; 3288 if (j < 100) { 3289 sd_clr_err_code(chip); 3290 goto RTY_MMC_RST; 3291 } else { 3292 rtsx_trace(chip); 3293 return STATUS_FAIL; 3294 } 3295 } 3296 } 3297 3298 wait_timeout(20); 3299 i++; 3300 } while (!(rsp[1] & 0x80) && (i < 255)); 3301 3302 if (i == 255) { 3303 rtsx_trace(chip); 3304 return STATUS_FAIL; 3305 } 3306 3307 if ((rsp[1] & 0x60) == 0x40) 3308 SET_MMC_SECTOR_MODE(sd_card); 3309 else 3310 CLR_MMC_SECTOR_MODE(sd_card); 3311 3312 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, 3313 NULL, 0); 3314 if (retval != STATUS_SUCCESS) { 3315 rtsx_trace(chip); 3316 return STATUS_FAIL; 3317 } 3318 3319 sd_card->sd_addr = 0x00100000; 3320 retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr, 3321 SD_RSP_TYPE_R6, rsp, 5); 3322 if (retval != STATUS_SUCCESS) { 3323 rtsx_trace(chip); 3324 return STATUS_FAIL; 3325 } 3326 3327 retval = sd_check_csd(chip, 1); 3328 if (retval != STATUS_SUCCESS) { 3329 rtsx_trace(chip); 3330 return STATUS_FAIL; 3331 } 3332 3333 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2; 3334 3335 retval = sd_select_card(chip, 1); 3336 if (retval != STATUS_SUCCESS) { 3337 rtsx_trace(chip); 3338 return STATUS_FAIL; 3339 } 3340 3341 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1, 3342 NULL, 0); 3343 if (retval != STATUS_SUCCESS) { 3344 rtsx_trace(chip); 3345 return STATUS_FAIL; 3346 } 3347 3348#ifdef SUPPORT_SD_LOCK 3349MMC_UNLOCK_ENTRY: 3350 retval = sd_update_lock_status(chip); 3351 if (retval != STATUS_SUCCESS) { 3352 rtsx_trace(chip); 3353 return STATUS_FAIL; 3354 } 3355#endif 3356 3357 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0); 3358 if (retval != STATUS_SUCCESS) { 3359 rtsx_trace(chip); 3360 return STATUS_FAIL; 3361 } 3362 3363 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1; 3364 3365 if (!sd_card->mmc_dont_switch_bus) { 3366 if (spec_ver == 4) { 3367 /* MMC 4.x Cards */ 3368 retval = mmc_switch_timing_bus(chip, switch_ddr); 3369 if (retval != STATUS_SUCCESS) { 3370 retval = sd_init_power(chip); 3371 if (retval != STATUS_SUCCESS) { 3372 rtsx_trace(chip); 3373 return STATUS_FAIL; 3374 } 3375 sd_card->mmc_dont_switch_bus = 1; 3376 rtsx_trace(chip); 3377 goto Switch_Fail; 3378 } 3379 } 3380 3381 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0)) { 3382 rtsx_trace(chip); 3383 return STATUS_FAIL; 3384 } 3385 3386 if (switch_ddr && CHK_MMC_DDR52(sd_card)) { 3387 retval = sd_set_init_para(chip); 3388 if (retval != STATUS_SUCCESS) { 3389 rtsx_trace(chip); 3390 return STATUS_FAIL; 3391 } 3392 3393 retval = mmc_ddr_tuning(chip); 3394 if (retval != STATUS_SUCCESS) { 3395 retval = sd_init_power(chip); 3396 if (retval != STATUS_SUCCESS) { 3397 rtsx_trace(chip); 3398 return STATUS_FAIL; 3399 } 3400 3401 switch_ddr = false; 3402 rtsx_trace(chip); 3403 goto Switch_Fail; 3404 } 3405 3406 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000); 3407 if (retval == STATUS_SUCCESS) { 3408 retval = sd_read_lba0(chip); 3409 if (retval != STATUS_SUCCESS) { 3410 retval = sd_init_power(chip); 3411 if (retval != STATUS_SUCCESS) { 3412 rtsx_trace(chip); 3413 return STATUS_FAIL; 3414 } 3415 3416 switch_ddr = false; 3417 rtsx_trace(chip); 3418 goto Switch_Fail; 3419 } 3420 } 3421 } 3422 } 3423 3424#ifdef SUPPORT_SD_LOCK 3425 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) { 3426 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF, 3427 0x02); 3428 if (retval) { 3429 rtsx_trace(chip); 3430 return retval; 3431 } 3432 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF, 3433 0x00); 3434 if (retval) { 3435 rtsx_trace(chip); 3436 return retval; 3437 } 3438 } 3439#endif 3440 3441 temp = rtsx_readl(chip, RTSX_BIPR); 3442 if (temp & SD_WRITE_PROTECT) 3443 chip->card_wp |= SD_CARD; 3444 3445 return STATUS_SUCCESS; 3446} 3447 3448int reset_sd_card(struct rtsx_chip *chip) 3449{ 3450 struct sd_info *sd_card = &(chip->sd_card); 3451 int retval; 3452 3453 sd_init_reg_addr(chip); 3454 3455 memset(sd_card, 0, sizeof(struct sd_info)); 3456 chip->capacity[chip->card2lun[SD_CARD]] = 0; 3457 3458 retval = enable_card_clock(chip, SD_CARD); 3459 if (retval != STATUS_SUCCESS) { 3460 rtsx_trace(chip); 3461 return STATUS_FAIL; 3462 } 3463 3464 if (chip->ignore_sd && CHK_SDIO_EXIST(chip) && 3465 !CHK_SDIO_IGNORED(chip)) { 3466 if (chip->asic_code) { 3467 retval = sd_pull_ctl_enable(chip); 3468 if (retval != STATUS_SUCCESS) { 3469 rtsx_trace(chip); 3470 return STATUS_FAIL; 3471 } 3472 } else { 3473 retval = rtsx_write_register(chip, FPGA_PULL_CTL, 3474 FPGA_SD_PULL_CTL_BIT | 0x20, 0); 3475 if (retval != STATUS_SUCCESS) { 3476 rtsx_trace(chip); 3477 return STATUS_FAIL; 3478 } 3479 } 3480 retval = card_share_mode(chip, SD_CARD); 3481 if (retval != STATUS_SUCCESS) { 3482 rtsx_trace(chip); 3483 return STATUS_FAIL; 3484 } 3485 3486 chip->sd_io = 1; 3487 rtsx_trace(chip); 3488 return STATUS_FAIL; 3489 } 3490 3491 retval = sd_init_power(chip); 3492 if (retval != STATUS_SUCCESS) { 3493 rtsx_trace(chip); 3494 return STATUS_FAIL; 3495 } 3496 3497 if (chip->sd_ctl & RESET_MMC_FIRST) { 3498 retval = reset_mmc(chip); 3499 if (retval != STATUS_SUCCESS) { 3500 if (sd_check_err_code(chip, SD_NO_CARD)) { 3501 rtsx_trace(chip); 3502 return STATUS_FAIL; 3503 } 3504 3505 retval = reset_sd(chip); 3506 if (retval != STATUS_SUCCESS) { 3507 rtsx_trace(chip); 3508 return STATUS_FAIL; 3509 } 3510 } 3511 } else { 3512 retval = reset_sd(chip); 3513 if (retval != STATUS_SUCCESS) { 3514 if (sd_check_err_code(chip, SD_NO_CARD)) { 3515 rtsx_trace(chip); 3516 return STATUS_FAIL; 3517 } 3518 3519 if (chip->sd_io) { 3520 rtsx_trace(chip); 3521 return STATUS_FAIL; 3522 } 3523 retval = reset_mmc(chip); 3524 if (retval != STATUS_SUCCESS) { 3525 rtsx_trace(chip); 3526 return STATUS_FAIL; 3527 } 3528 } 3529 } 3530 3531 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0); 3532 if (retval != STATUS_SUCCESS) { 3533 rtsx_trace(chip); 3534 return STATUS_FAIL; 3535 } 3536 3537 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0); 3538 if (retval) { 3539 rtsx_trace(chip); 3540 return retval; 3541 } 3542 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2); 3543 if (retval) { 3544 rtsx_trace(chip); 3545 return retval; 3546 } 3547 3548 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity; 3549 3550 retval = sd_set_init_para(chip); 3551 if (retval != STATUS_SUCCESS) { 3552 rtsx_trace(chip); 3553 return STATUS_FAIL; 3554 } 3555 3556 dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type); 3557 3558 return STATUS_SUCCESS; 3559} 3560 3561static int reset_mmc_only(struct rtsx_chip *chip) 3562{ 3563 struct sd_info *sd_card = &(chip->sd_card); 3564 int retval; 3565 3566 sd_card->sd_type = 0; 3567 sd_card->seq_mode = 0; 3568 sd_card->sd_data_buf_ready = 0; 3569 sd_card->capacity = 0; 3570 sd_card->sd_switch_fail = 0; 3571 3572#ifdef SUPPORT_SD_LOCK 3573 sd_card->sd_lock_status = 0; 3574 sd_card->sd_erase_status = 0; 3575#endif 3576 3577 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0; 3578 3579 retval = enable_card_clock(chip, SD_CARD); 3580 if (retval != STATUS_SUCCESS) { 3581 rtsx_trace(chip); 3582 return STATUS_FAIL; 3583 } 3584 3585 retval = sd_init_power(chip); 3586 if (retval != STATUS_SUCCESS) { 3587 rtsx_trace(chip); 3588 return STATUS_FAIL; 3589 } 3590 3591 retval = reset_mmc(chip); 3592 if (retval != STATUS_SUCCESS) { 3593 rtsx_trace(chip); 3594 return STATUS_FAIL; 3595 } 3596 3597 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0); 3598 if (retval != STATUS_SUCCESS) { 3599 rtsx_trace(chip); 3600 return STATUS_FAIL; 3601 } 3602 3603 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0); 3604 if (retval) { 3605 rtsx_trace(chip); 3606 return retval; 3607 } 3608 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2); 3609 if (retval) { 3610 rtsx_trace(chip); 3611 return retval; 3612 } 3613 3614 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity; 3615 3616 retval = sd_set_init_para(chip); 3617 if (retval != STATUS_SUCCESS) { 3618 rtsx_trace(chip); 3619 return STATUS_FAIL; 3620 } 3621 3622 dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n", 3623 sd_card->sd_type); 3624 3625 return STATUS_SUCCESS; 3626} 3627 3628#define WAIT_DATA_READY_RTY_CNT 255 3629 3630static int wait_data_buf_ready(struct rtsx_chip *chip) 3631{ 3632 struct sd_info *sd_card = &(chip->sd_card); 3633 int i, retval; 3634 3635 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) { 3636 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 3637 sd_set_err_code(chip, SD_NO_CARD); 3638 rtsx_trace(chip); 3639 return STATUS_FAIL; 3640 } 3641 3642 sd_card->sd_data_buf_ready = 0; 3643 3644 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, 3645 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0); 3646 if (retval != STATUS_SUCCESS) { 3647 rtsx_trace(chip); 3648 return STATUS_FAIL; 3649 } 3650 3651 if (sd_card->sd_data_buf_ready) { 3652 return sd_send_cmd_get_rsp(chip, SEND_STATUS, 3653 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0); 3654 } 3655 } 3656 3657 sd_set_err_code(chip, SD_TO_ERR); 3658 3659 rtsx_trace(chip); 3660 return STATUS_FAIL; 3661} 3662 3663void sd_stop_seq_mode(struct rtsx_chip *chip) 3664{ 3665 struct sd_info *sd_card = &(chip->sd_card); 3666 int retval; 3667 3668 if (sd_card->seq_mode) { 3669 retval = sd_switch_clock(chip); 3670 if (retval != STATUS_SUCCESS) 3671 return; 3672 3673 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0, 3674 SD_RSP_TYPE_R1b, NULL, 0); 3675 if (retval != STATUS_SUCCESS) 3676 sd_set_err_code(chip, SD_STS_ERR); 3677 3678 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000); 3679 if (retval != STATUS_SUCCESS) 3680 sd_set_err_code(chip, SD_STS_ERR); 3681 3682 sd_card->seq_mode = 0; 3683 3684 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH); 3685 } 3686} 3687 3688static inline int sd_auto_tune_clock(struct rtsx_chip *chip) 3689{ 3690 struct sd_info *sd_card = &(chip->sd_card); 3691 int retval; 3692 3693 if (chip->asic_code) { 3694 if (sd_card->sd_clock > 30) 3695 sd_card->sd_clock -= 20; 3696 } else { 3697 switch (sd_card->sd_clock) { 3698 case CLK_200: 3699 sd_card->sd_clock = CLK_150; 3700 break; 3701 3702 case CLK_150: 3703 sd_card->sd_clock = CLK_120; 3704 break; 3705 3706 case CLK_120: 3707 sd_card->sd_clock = CLK_100; 3708 break; 3709 3710 case CLK_100: 3711 sd_card->sd_clock = CLK_80; 3712 break; 3713 3714 case CLK_80: 3715 sd_card->sd_clock = CLK_60; 3716 break; 3717 3718 case CLK_60: 3719 sd_card->sd_clock = CLK_50; 3720 break; 3721 3722 default: 3723 break; 3724 } 3725 } 3726 3727 retval = sd_switch_clock(chip); 3728 if (retval != STATUS_SUCCESS) { 3729 rtsx_trace(chip); 3730 return STATUS_FAIL; 3731 } 3732 3733 return STATUS_SUCCESS; 3734} 3735 3736int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, 3737 u16 sector_cnt) 3738{ 3739 struct sd_info *sd_card = &(chip->sd_card); 3740 u32 data_addr; 3741 u8 cfg2; 3742 int retval; 3743 3744 if (srb->sc_data_direction == DMA_FROM_DEVICE) { 3745 dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n", 3746 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector", 3747 start_sector); 3748 } else { 3749 dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n", 3750 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector", 3751 start_sector); 3752 } 3753 3754 sd_card->cleanup_counter = 0; 3755 3756 if (!(chip->card_ready & SD_CARD)) { 3757 sd_card->seq_mode = 0; 3758 3759 retval = reset_sd_card(chip); 3760 if (retval == STATUS_SUCCESS) { 3761 chip->card_ready |= SD_CARD; 3762 chip->card_fail &= ~SD_CARD; 3763 } else { 3764 chip->card_ready &= ~SD_CARD; 3765 chip->card_fail |= SD_CARD; 3766 chip->capacity[chip->card2lun[SD_CARD]] = 0; 3767 chip->rw_need_retry = 1; 3768 rtsx_trace(chip); 3769 return STATUS_FAIL; 3770 } 3771 } 3772 3773 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card)) 3774 data_addr = start_sector << 9; 3775 else 3776 data_addr = start_sector; 3777 3778 sd_clr_err_code(chip); 3779 3780 retval = sd_switch_clock(chip); 3781 if (retval != STATUS_SUCCESS) { 3782 sd_set_err_code(chip, SD_IO_ERR); 3783 rtsx_trace(chip); 3784 goto RW_FAIL; 3785 } 3786 3787 if (sd_card->seq_mode && 3788 ((sd_card->pre_dir != srb->sc_data_direction) || 3789 ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) != 3790 start_sector))) { 3791 if ((sd_card->pre_sec_cnt < 0x80) 3792 && (sd_card->pre_dir == DMA_FROM_DEVICE) 3793 && !CHK_SD30_SPEED(sd_card) 3794 && !CHK_SD_HS(sd_card) 3795 && !CHK_MMC_HS(sd_card)) { 3796 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 3797 SD_RSP_TYPE_R1, NULL, 0); 3798 } 3799 3800 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 3801 0, SD_RSP_TYPE_R1b, NULL, 0); 3802 if (retval != STATUS_SUCCESS) { 3803 chip->rw_need_retry = 1; 3804 sd_set_err_code(chip, SD_STS_ERR); 3805 rtsx_trace(chip); 3806 goto RW_FAIL; 3807 } 3808 3809 sd_card->seq_mode = 0; 3810 3811 retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH); 3812 if (retval != STATUS_SUCCESS) { 3813 sd_set_err_code(chip, SD_IO_ERR); 3814 rtsx_trace(chip); 3815 goto RW_FAIL; 3816 } 3817 3818 if ((sd_card->pre_sec_cnt < 0x80) 3819 && !CHK_SD30_SPEED(sd_card) 3820 && !CHK_SD_HS(sd_card) 3821 && !CHK_MMC_HS(sd_card)) { 3822 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, 3823 SD_RSP_TYPE_R1, NULL, 0); 3824 } 3825 } 3826 3827 rtsx_init_cmd(chip); 3828 3829 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00); 3830 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02); 3831 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 3832 (u8)sector_cnt); 3833 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 3834 (u8)(sector_cnt >> 8)); 3835 3836 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER); 3837 3838 if (CHK_MMC_8BIT(sd_card)) 3839 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 3840 0x03, SD_BUS_WIDTH_8); 3841 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card)) 3842 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 3843 0x03, SD_BUS_WIDTH_4); 3844 else 3845 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 3846 0x03, SD_BUS_WIDTH_1); 3847 3848 if (sd_card->seq_mode) { 3849 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16| 3850 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 | 3851 SD_RSP_LEN_0; 3852 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2); 3853 3854 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512, 3855 DMA_512); 3856 3857 if (srb->sc_data_direction == DMA_FROM_DEVICE) { 3858 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3859 SD_TM_AUTO_READ_3 | SD_TRANSFER_START); 3860 } else { 3861 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3862 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START); 3863 } 3864 3865 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 3866 SD_TRANSFER_END, SD_TRANSFER_END); 3867 3868 rtsx_send_cmd_no_wait(chip); 3869 } else { 3870 if (srb->sc_data_direction == DMA_FROM_DEVICE) { 3871 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", 3872 READ_MULTIPLE_BLOCK); 3873 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 3874 0x40 | READ_MULTIPLE_BLOCK); 3875 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 3876 (u8)(data_addr >> 24)); 3877 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 3878 (u8)(data_addr >> 16)); 3879 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 3880 (u8)(data_addr >> 8)); 3881 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 3882 (u8)data_addr); 3883 3884 cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | 3885 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | 3886 SD_RSP_LEN_6; 3887 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 3888 cfg2); 3889 3890 trans_dma_enable(srb->sc_data_direction, chip, 3891 sector_cnt * 512, DMA_512); 3892 3893 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3894 SD_TM_AUTO_READ_2 | SD_TRANSFER_START); 3895 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 3896 SD_TRANSFER_END, SD_TRANSFER_END); 3897 3898 rtsx_send_cmd_no_wait(chip); 3899 } else { 3900 retval = rtsx_send_cmd(chip, SD_CARD, 50); 3901 if (retval < 0) { 3902 rtsx_clear_sd_error(chip); 3903 3904 chip->rw_need_retry = 1; 3905 sd_set_err_code(chip, SD_TO_ERR); 3906 rtsx_trace(chip); 3907 goto RW_FAIL; 3908 } 3909 3910 retval = wait_data_buf_ready(chip); 3911 if (retval != STATUS_SUCCESS) { 3912 chip->rw_need_retry = 1; 3913 sd_set_err_code(chip, SD_TO_ERR); 3914 rtsx_trace(chip); 3915 goto RW_FAIL; 3916 } 3917 3918 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK, 3919 data_addr, SD_RSP_TYPE_R1, NULL, 0); 3920 if (retval != STATUS_SUCCESS) { 3921 chip->rw_need_retry = 1; 3922 rtsx_trace(chip); 3923 goto RW_FAIL; 3924 } 3925 3926 rtsx_init_cmd(chip); 3927 3928 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 | 3929 SD_NO_WAIT_BUSY_END | 3930 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0; 3931 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, 3932 cfg2); 3933 3934 trans_dma_enable(srb->sc_data_direction, chip, 3935 sector_cnt * 512, DMA_512); 3936 3937 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 3938 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START); 3939 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 3940 SD_TRANSFER_END, SD_TRANSFER_END); 3941 3942 rtsx_send_cmd_no_wait(chip); 3943 } 3944 3945 sd_card->seq_mode = 1; 3946 } 3947 3948 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), 3949 scsi_bufflen(srb), scsi_sg_count(srb), 3950 srb->sc_data_direction, chip->sd_timeout); 3951 if (retval < 0) { 3952 u8 stat = 0; 3953 int err; 3954 3955 sd_card->seq_mode = 0; 3956 3957 if (retval == -ETIMEDOUT) 3958 err = STATUS_TIMEDOUT; 3959 else 3960 err = STATUS_FAIL; 3961 3962 rtsx_read_register(chip, REG_SD_STAT1, &stat); 3963 rtsx_clear_sd_error(chip); 3964 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 3965 chip->rw_need_retry = 0; 3966 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n"); 3967 rtsx_trace(chip); 3968 return STATUS_FAIL; 3969 } 3970 3971 chip->rw_need_retry = 1; 3972 3973 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0, 3974 SD_RSP_TYPE_R1b, NULL, 0); 3975 if (retval != STATUS_SUCCESS) { 3976 sd_set_err_code(chip, SD_STS_ERR); 3977 rtsx_trace(chip); 3978 goto RW_FAIL; 3979 } 3980 3981 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) { 3982 dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n"); 3983 sd_set_err_code(chip, SD_CRC_ERR); 3984 rtsx_trace(chip); 3985 goto RW_FAIL; 3986 } 3987 3988 if (err == STATUS_TIMEDOUT) { 3989 sd_set_err_code(chip, SD_TO_ERR); 3990 rtsx_trace(chip); 3991 goto RW_FAIL; 3992 } 3993 3994 rtsx_trace(chip); 3995 return err; 3996 } 3997 3998 sd_card->pre_sec_addr = start_sector; 3999 sd_card->pre_sec_cnt = sector_cnt; 4000 sd_card->pre_dir = srb->sc_data_direction; 4001 4002 return STATUS_SUCCESS; 4003 4004RW_FAIL: 4005 sd_card->seq_mode = 0; 4006 4007 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) { 4008 chip->rw_need_retry = 0; 4009 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n"); 4010 rtsx_trace(chip); 4011 return STATUS_FAIL; 4012 } 4013 4014 if (sd_check_err_code(chip, SD_CRC_ERR)) { 4015 if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) { 4016 sd_card->mmc_dont_switch_bus = 1; 4017 reset_mmc_only(chip); 4018 sd_card->mmc_dont_switch_bus = 0; 4019 } else { 4020 sd_card->need_retune = 1; 4021 sd_auto_tune_clock(chip); 4022 } 4023 } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) { 4024 retval = reset_sd_card(chip); 4025 if (retval != STATUS_SUCCESS) { 4026 chip->card_ready &= ~SD_CARD; 4027 chip->card_fail |= SD_CARD; 4028 chip->capacity[chip->card2lun[SD_CARD]] = 0; 4029 } 4030 } 4031 4032 rtsx_trace(chip); 4033 return STATUS_FAIL; 4034} 4035 4036#ifdef SUPPORT_CPRM 4037int soft_reset_sd_card(struct rtsx_chip *chip) 4038{ 4039 return reset_sd(chip); 4040} 4041 4042int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx, 4043 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, bool special_check) 4044{ 4045 int retval; 4046 int timeout = 100; 4047 u16 reg_addr; 4048 u8 *ptr; 4049 int stat_idx = 0; 4050 int rty_cnt = 0; 4051 4052 dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx); 4053 4054 if (rsp_type == SD_RSP_TYPE_R1b) 4055 timeout = 3000; 4056 4057RTY_SEND_CMD: 4058 4059 rtsx_init_cmd(chip); 4060 4061 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx); 4062 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24)); 4063 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16)); 4064 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8)); 4065 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg); 4066 4067 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type); 4068 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 4069 0x01, PINGPONG_BUFFER); 4070 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 4071 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START); 4072 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, 4073 SD_TRANSFER_END); 4074 4075 if (rsp_type == SD_RSP_TYPE_R2) { 4076 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; 4077 reg_addr++) 4078 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0); 4079 4080 stat_idx = 17; 4081 } else if (rsp_type != SD_RSP_TYPE_R0) { 4082 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; 4083 reg_addr++) 4084 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0); 4085 4086 stat_idx = 6; 4087 } 4088 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0); 4089 4090 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0); 4091 4092 retval = rtsx_send_cmd(chip, SD_CARD, timeout); 4093 if (retval < 0) { 4094 if (retval == -ETIMEDOUT) { 4095 rtsx_clear_sd_error(chip); 4096 4097 if (rsp_type & SD_WAIT_BUSY_END) { 4098 retval = sd_check_data0_status(chip); 4099 if (retval != STATUS_SUCCESS) { 4100 rtsx_trace(chip); 4101 return retval; 4102 } 4103 } else { 4104 sd_set_err_code(chip, SD_TO_ERR); 4105 } 4106 } 4107 rtsx_trace(chip); 4108 return STATUS_FAIL; 4109 } 4110 4111 if (rsp_type == SD_RSP_TYPE_R0) 4112 return STATUS_SUCCESS; 4113 4114 ptr = rtsx_get_cmd_data(chip) + 1; 4115 4116 if ((ptr[0] & 0xC0) != 0) { 4117 sd_set_err_code(chip, SD_STS_ERR); 4118 rtsx_trace(chip); 4119 return STATUS_FAIL; 4120 } 4121 4122 if (!(rsp_type & SD_NO_CHECK_CRC7)) { 4123 if (ptr[stat_idx] & SD_CRC7_ERR) { 4124 if (cmd_idx == WRITE_MULTIPLE_BLOCK) { 4125 sd_set_err_code(chip, SD_CRC_ERR); 4126 rtsx_trace(chip); 4127 return STATUS_FAIL; 4128 } 4129 if (rty_cnt < SD_MAX_RETRY_COUNT) { 4130 wait_timeout(20); 4131 rty_cnt++; 4132 goto RTY_SEND_CMD; 4133 } else { 4134 sd_set_err_code(chip, SD_CRC_ERR); 4135 rtsx_trace(chip); 4136 return STATUS_FAIL; 4137 } 4138 } 4139 } 4140 4141 if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) || 4142 (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) { 4143 if ((cmd_idx != STOP_TRANSMISSION) && !special_check) { 4144 if (ptr[1] & 0x80) { 4145 rtsx_trace(chip); 4146 return STATUS_FAIL; 4147 } 4148 } 4149#ifdef SUPPORT_SD_LOCK 4150 if (ptr[1] & 0x7D) { 4151#else 4152 if (ptr[1] & 0x7F) { 4153#endif 4154 rtsx_trace(chip); 4155 return STATUS_FAIL; 4156 } 4157 if (ptr[2] & 0xF8) { 4158 rtsx_trace(chip); 4159 return STATUS_FAIL; 4160 } 4161 4162 if (cmd_idx == SELECT_CARD) { 4163 if (rsp_type == SD_RSP_TYPE_R2) { 4164 if ((ptr[3] & 0x1E) != 0x04) { 4165 rtsx_trace(chip); 4166 return STATUS_FAIL; 4167 } 4168 4169 } else if (rsp_type == SD_RSP_TYPE_R0) { 4170 if ((ptr[3] & 0x1E) != 0x03) { 4171 rtsx_trace(chip); 4172 return STATUS_FAIL; 4173 } 4174 } 4175 } 4176 } 4177 4178 if (rsp && rsp_len) 4179 memcpy(rsp, ptr, rsp_len); 4180 4181 return STATUS_SUCCESS; 4182} 4183 4184int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type) 4185{ 4186 int retval, rsp_len; 4187 u16 reg_addr; 4188 4189 if (rsp_type == SD_RSP_TYPE_R0) 4190 return STATUS_SUCCESS; 4191 4192 rtsx_init_cmd(chip); 4193 4194 if (rsp_type == SD_RSP_TYPE_R2) { 4195 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; 4196 reg_addr++) 4197 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0); 4198 4199 rsp_len = 17; 4200 } else if (rsp_type != SD_RSP_TYPE_R0) { 4201 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; 4202 reg_addr++) 4203 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0); 4204 4205 rsp_len = 6; 4206 } 4207 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0); 4208 4209 retval = rtsx_send_cmd(chip, SD_CARD, 100); 4210 if (retval != STATUS_SUCCESS) { 4211 rtsx_trace(chip); 4212 return STATUS_FAIL; 4213 } 4214 4215 if (rsp) { 4216 int min_len = (rsp_len < len) ? rsp_len : len; 4217 4218 memcpy(rsp, rtsx_get_cmd_data(chip), min_len); 4219 4220 dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len); 4221 dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n", 4222 rsp[0], rsp[1], rsp[2], rsp[3]); 4223 } 4224 4225 return STATUS_SUCCESS; 4226} 4227 4228int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip) 4229{ 4230 struct sd_info *sd_card = &(chip->sd_card); 4231 unsigned int lun = SCSI_LUN(srb); 4232 int len; 4233 u8 buf[18] = { 4234 0x00, 4235 0x00, 4236 0x00, 4237 0x0E, 4238 0x00, 4239 0x00, 4240 0x00, 4241 0x00, 4242 0x53, 4243 0x44, 4244 0x20, 4245 0x43, 4246 0x61, 4247 0x72, 4248 0x64, 4249 0x00, 4250 0x00, 4251 0x00, 4252 }; 4253 4254 sd_card->pre_cmd_err = 0; 4255 4256 if (!(CHK_BIT(chip->lun_mc, lun))) { 4257 SET_BIT(chip->lun_mc, lun); 4258 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 4259 rtsx_trace(chip); 4260 return TRANSPORT_FAILED; 4261 } 4262 4263 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) || 4264 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) || 4265 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) || 4266 (0x64 != srb->cmnd[8])) { 4267 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4268 rtsx_trace(chip); 4269 return TRANSPORT_FAILED; 4270 } 4271 4272 switch (srb->cmnd[1] & 0x0F) { 4273 case 0: 4274 sd_card->sd_pass_thru_en = 0; 4275 break; 4276 4277 case 1: 4278 sd_card->sd_pass_thru_en = 1; 4279 break; 4280 4281 default: 4282 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4283 rtsx_trace(chip); 4284 return TRANSPORT_FAILED; 4285 } 4286 4287 buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02; 4288 if (chip->card_wp & SD_CARD) 4289 buf[5] |= 0x80; 4290 4291 buf[6] = (u8)(sd_card->sd_addr >> 16); 4292 buf[7] = (u8)(sd_card->sd_addr >> 24); 4293 4294 buf[15] = chip->max_lun; 4295 4296 len = min_t(int, 18, scsi_bufflen(srb)); 4297 rtsx_stor_set_xfer_buf(buf, len, srb); 4298 4299 return TRANSPORT_GOOD; 4300} 4301 4302static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type, 4303 int *rsp_len) 4304{ 4305 if (!rsp_type || !rsp_len) 4306 return STATUS_FAIL; 4307 4308 switch (srb->cmnd[10]) { 4309 case 0x03: 4310 *rsp_type = SD_RSP_TYPE_R0; 4311 *rsp_len = 0; 4312 break; 4313 4314 case 0x04: 4315 *rsp_type = SD_RSP_TYPE_R1; 4316 *rsp_len = 6; 4317 break; 4318 4319 case 0x05: 4320 *rsp_type = SD_RSP_TYPE_R1b; 4321 *rsp_len = 6; 4322 break; 4323 4324 case 0x06: 4325 *rsp_type = SD_RSP_TYPE_R2; 4326 *rsp_len = 17; 4327 break; 4328 4329 case 0x07: 4330 *rsp_type = SD_RSP_TYPE_R3; 4331 *rsp_len = 6; 4332 break; 4333 4334 default: 4335 return STATUS_FAIL; 4336 } 4337 4338 return STATUS_SUCCESS; 4339} 4340 4341int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) 4342{ 4343 struct sd_info *sd_card = &(chip->sd_card); 4344 unsigned int lun = SCSI_LUN(srb); 4345 int retval, rsp_len; 4346 u8 cmd_idx, rsp_type; 4347 bool standby = false, acmd = false; 4348 u32 arg; 4349 4350 if (!sd_card->sd_pass_thru_en) { 4351 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4352 rtsx_trace(chip); 4353 return TRANSPORT_FAILED; 4354 } 4355 4356 retval = sd_switch_clock(chip); 4357 if (retval != STATUS_SUCCESS) { 4358 rtsx_trace(chip); 4359 return TRANSPORT_FAILED; 4360 } 4361 4362 if (sd_card->pre_cmd_err) { 4363 sd_card->pre_cmd_err = 0; 4364 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 4365 rtsx_trace(chip); 4366 return TRANSPORT_FAILED; 4367 } 4368 4369 cmd_idx = srb->cmnd[2] & 0x3F; 4370 if (srb->cmnd[1] & 0x02) 4371 standby = true; 4372 4373 if (srb->cmnd[1] & 0x01) 4374 acmd = true; 4375 4376 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) | 4377 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6]; 4378 4379 retval = get_rsp_type(srb, &rsp_type, &rsp_len); 4380 if (retval != STATUS_SUCCESS) { 4381 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4382 rtsx_trace(chip); 4383 return TRANSPORT_FAILED; 4384 } 4385 sd_card->last_rsp_type = rsp_type; 4386 4387 retval = sd_switch_clock(chip); 4388 if (retval != STATUS_SUCCESS) { 4389 rtsx_trace(chip); 4390 return TRANSPORT_FAILED; 4391 } 4392 4393#ifdef SUPPORT_SD_LOCK 4394 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) { 4395 if (CHK_MMC_8BIT(sd_card)) { 4396 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, 4397 SD_BUS_WIDTH_8); 4398 if (retval != STATUS_SUCCESS) { 4399 rtsx_trace(chip); 4400 return TRANSPORT_FAILED; 4401 } 4402 4403 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) { 4404 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, 4405 SD_BUS_WIDTH_4); 4406 if (retval != STATUS_SUCCESS) { 4407 rtsx_trace(chip); 4408 return TRANSPORT_FAILED; 4409 } 4410 } 4411 } 4412#else 4413 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4); 4414 if (retval != STATUS_SUCCESS) { 4415 rtsx_trace(chip); 4416 return TRANSPORT_FAILED; 4417 } 4418#endif 4419 4420 if (standby) { 4421 retval = sd_select_card(chip, 0); 4422 if (retval != STATUS_SUCCESS) { 4423 rtsx_trace(chip); 4424 goto SD_Execute_Cmd_Failed; 4425 } 4426 } 4427 4428 if (acmd) { 4429 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, 4430 sd_card->sd_addr, 4431 SD_RSP_TYPE_R1, NULL, 0, false); 4432 if (retval != STATUS_SUCCESS) { 4433 rtsx_trace(chip); 4434 goto SD_Execute_Cmd_Failed; 4435 } 4436 } 4437 4438 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type, 4439 sd_card->rsp, rsp_len, false); 4440 if (retval != STATUS_SUCCESS) { 4441 rtsx_trace(chip); 4442 goto SD_Execute_Cmd_Failed; 4443 } 4444 4445 if (standby) { 4446 retval = sd_select_card(chip, 1); 4447 if (retval != STATUS_SUCCESS) { 4448 rtsx_trace(chip); 4449 goto SD_Execute_Cmd_Failed; 4450 } 4451 } 4452 4453#ifdef SUPPORT_SD_LOCK 4454 retval = sd_update_lock_status(chip); 4455 if (retval != STATUS_SUCCESS) { 4456 rtsx_trace(chip); 4457 goto SD_Execute_Cmd_Failed; 4458 } 4459#endif 4460 4461 scsi_set_resid(srb, 0); 4462 return TRANSPORT_GOOD; 4463 4464SD_Execute_Cmd_Failed: 4465 sd_card->pre_cmd_err = 1; 4466 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 4467 release_sd_card(chip); 4468 do_reset_sd_card(chip); 4469 if (!(chip->card_ready & SD_CARD)) 4470 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 4471 4472 rtsx_trace(chip); 4473 return TRANSPORT_FAILED; 4474} 4475 4476int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) 4477{ 4478 struct sd_info *sd_card = &(chip->sd_card); 4479 unsigned int lun = SCSI_LUN(srb); 4480 int retval, rsp_len, i; 4481 bool read_err = false, cmd13_checkbit = false; 4482 u8 cmd_idx, rsp_type, bus_width; 4483 bool standby = false, send_cmd12 = false, acmd = false; 4484 u32 data_len; 4485 4486 if (!sd_card->sd_pass_thru_en) { 4487 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4488 rtsx_trace(chip); 4489 return TRANSPORT_FAILED; 4490 } 4491 4492 if (sd_card->pre_cmd_err) { 4493 sd_card->pre_cmd_err = 0; 4494 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 4495 rtsx_trace(chip); 4496 return TRANSPORT_FAILED; 4497 } 4498 4499 retval = sd_switch_clock(chip); 4500 if (retval != STATUS_SUCCESS) { 4501 rtsx_trace(chip); 4502 return TRANSPORT_FAILED; 4503 } 4504 4505 cmd_idx = srb->cmnd[2] & 0x3F; 4506 if (srb->cmnd[1] & 0x04) 4507 send_cmd12 = true; 4508 4509 if (srb->cmnd[1] & 0x02) 4510 standby = true; 4511 4512 if (srb->cmnd[1] & 0x01) 4513 acmd = true; 4514 4515 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8] 4516 << 8) | srb->cmnd[9]; 4517 4518 retval = get_rsp_type(srb, &rsp_type, &rsp_len); 4519 if (retval != STATUS_SUCCESS) { 4520 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4521 rtsx_trace(chip); 4522 return TRANSPORT_FAILED; 4523 } 4524 sd_card->last_rsp_type = rsp_type; 4525 4526 retval = sd_switch_clock(chip); 4527 if (retval != STATUS_SUCCESS) { 4528 rtsx_trace(chip); 4529 return TRANSPORT_FAILED; 4530 } 4531 4532#ifdef SUPPORT_SD_LOCK 4533 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) { 4534 if (CHK_MMC_8BIT(sd_card)) 4535 bus_width = SD_BUS_WIDTH_8; 4536 else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) 4537 bus_width = SD_BUS_WIDTH_4; 4538 else 4539 bus_width = SD_BUS_WIDTH_1; 4540 } else { 4541 bus_width = SD_BUS_WIDTH_4; 4542 } 4543 dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width); 4544#else 4545 bus_width = SD_BUS_WIDTH_4; 4546#endif 4547 4548 if (data_len < 512) { 4549 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len, 4550 SD_RSP_TYPE_R1, NULL, 0, false); 4551 if (retval != STATUS_SUCCESS) { 4552 rtsx_trace(chip); 4553 goto SD_Execute_Read_Cmd_Failed; 4554 } 4555 } 4556 4557 if (standby) { 4558 retval = sd_select_card(chip, 0); 4559 if (retval != STATUS_SUCCESS) { 4560 rtsx_trace(chip); 4561 goto SD_Execute_Read_Cmd_Failed; 4562 } 4563 } 4564 4565 if (acmd) { 4566 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, 4567 sd_card->sd_addr, 4568 SD_RSP_TYPE_R1, NULL, 0, false); 4569 if (retval != STATUS_SUCCESS) { 4570 rtsx_trace(chip); 4571 goto SD_Execute_Read_Cmd_Failed; 4572 } 4573 } 4574 4575 if (data_len <= 512) { 4576 int min_len; 4577 u8 *buf; 4578 u16 byte_cnt, blk_cnt; 4579 u8 cmd[5]; 4580 4581 byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9]; 4582 blk_cnt = 1; 4583 4584 cmd[0] = 0x40 | cmd_idx; 4585 cmd[1] = srb->cmnd[3]; 4586 cmd[2] = srb->cmnd[4]; 4587 cmd[3] = srb->cmnd[5]; 4588 cmd[4] = srb->cmnd[6]; 4589 4590 buf = kmalloc(data_len, GFP_KERNEL); 4591 if (buf == NULL) { 4592 rtsx_trace(chip); 4593 return TRANSPORT_ERROR; 4594 } 4595 4596 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt, 4597 blk_cnt, bus_width, buf, data_len, 2000); 4598 if (retval != STATUS_SUCCESS) { 4599 read_err = true; 4600 kfree(buf); 4601 rtsx_clear_sd_error(chip); 4602 rtsx_trace(chip); 4603 goto SD_Execute_Read_Cmd_Failed; 4604 } 4605 4606 min_len = min(data_len, scsi_bufflen(srb)); 4607 rtsx_stor_set_xfer_buf(buf, min_len, srb); 4608 4609 kfree(buf); 4610 } else if (!(data_len & 0x1FF)) { 4611 rtsx_init_cmd(chip); 4612 4613 trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512); 4614 4615 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 4616 0x02); 4617 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 4618 0x00); 4619 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 4620 0xFF, (srb->cmnd[7] & 0xFE) >> 1); 4621 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 4622 0xFF, (u8)((data_len & 0x0001FE00) >> 9)); 4623 4624 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 4625 0x40 | cmd_idx); 4626 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 4627 srb->cmnd[3]); 4628 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 4629 srb->cmnd[4]); 4630 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 4631 srb->cmnd[5]); 4632 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 4633 srb->cmnd[6]); 4634 4635 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width); 4636 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type); 4637 4638 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 4639 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START); 4640 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 4641 SD_TRANSFER_END, SD_TRANSFER_END); 4642 4643 rtsx_send_cmd_no_wait(chip); 4644 4645 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), 4646 scsi_bufflen(srb), scsi_sg_count(srb), 4647 DMA_FROM_DEVICE, 10000); 4648 if (retval < 0) { 4649 read_err = true; 4650 rtsx_clear_sd_error(chip); 4651 rtsx_trace(chip); 4652 goto SD_Execute_Read_Cmd_Failed; 4653 } 4654 4655 } else { 4656 rtsx_trace(chip); 4657 goto SD_Execute_Read_Cmd_Failed; 4658 } 4659 4660 retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type); 4661 if (retval != STATUS_SUCCESS) { 4662 rtsx_trace(chip); 4663 goto SD_Execute_Read_Cmd_Failed; 4664 } 4665 4666 if (standby) { 4667 retval = sd_select_card(chip, 1); 4668 if (retval != STATUS_SUCCESS) { 4669 rtsx_trace(chip); 4670 goto SD_Execute_Read_Cmd_Failed; 4671 } 4672 } 4673 4674 if (send_cmd12) { 4675 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 4676 0, SD_RSP_TYPE_R1b, NULL, 0, false); 4677 if (retval != STATUS_SUCCESS) { 4678 rtsx_trace(chip); 4679 goto SD_Execute_Read_Cmd_Failed; 4680 } 4681 } 4682 4683 if (data_len < 512) { 4684 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, 4685 SD_RSP_TYPE_R1, NULL, 0, false); 4686 if (retval != STATUS_SUCCESS) { 4687 rtsx_trace(chip); 4688 goto SD_Execute_Read_Cmd_Failed; 4689 } 4690 4691 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02); 4692 if (retval != STATUS_SUCCESS) { 4693 rtsx_trace(chip); 4694 goto SD_Execute_Read_Cmd_Failed; 4695 } 4696 4697 retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00); 4698 if (retval != STATUS_SUCCESS) { 4699 rtsx_trace(chip); 4700 goto SD_Execute_Read_Cmd_Failed; 4701 } 4702 } 4703 4704 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04)) 4705 cmd13_checkbit = true; 4706 4707 for (i = 0; i < 3; i++) { 4708 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS, 4709 sd_card->sd_addr, 4710 SD_RSP_TYPE_R1, NULL, 0, 4711 cmd13_checkbit); 4712 if (retval == STATUS_SUCCESS) 4713 break; 4714 } 4715 if (retval != STATUS_SUCCESS) { 4716 rtsx_trace(chip); 4717 goto SD_Execute_Read_Cmd_Failed; 4718 } 4719 4720 scsi_set_resid(srb, 0); 4721 return TRANSPORT_GOOD; 4722 4723SD_Execute_Read_Cmd_Failed: 4724 sd_card->pre_cmd_err = 1; 4725 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 4726 if (read_err) 4727 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 4728 4729 release_sd_card(chip); 4730 do_reset_sd_card(chip); 4731 if (!(chip->card_ready & SD_CARD)) 4732 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 4733 4734 rtsx_trace(chip); 4735 return TRANSPORT_FAILED; 4736} 4737 4738int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip) 4739{ 4740 struct sd_info *sd_card = &(chip->sd_card); 4741 unsigned int lun = SCSI_LUN(srb); 4742 int retval, rsp_len, i; 4743 bool write_err = false, cmd13_checkbit = false; 4744 u8 cmd_idx, rsp_type; 4745 bool standby = false, send_cmd12 = false, acmd = false; 4746 u32 data_len, arg; 4747#ifdef SUPPORT_SD_LOCK 4748 int lock_cmd_fail = 0; 4749 u8 sd_lock_state = 0; 4750 u8 lock_cmd_type = 0; 4751#endif 4752 4753 if (!sd_card->sd_pass_thru_en) { 4754 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4755 rtsx_trace(chip); 4756 return TRANSPORT_FAILED; 4757 } 4758 4759 if (sd_card->pre_cmd_err) { 4760 sd_card->pre_cmd_err = 0; 4761 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 4762 rtsx_trace(chip); 4763 return TRANSPORT_FAILED; 4764 } 4765 4766 retval = sd_switch_clock(chip); 4767 if (retval != STATUS_SUCCESS) { 4768 rtsx_trace(chip); 4769 return TRANSPORT_FAILED; 4770 } 4771 4772 cmd_idx = srb->cmnd[2] & 0x3F; 4773 if (srb->cmnd[1] & 0x04) 4774 send_cmd12 = true; 4775 4776 if (srb->cmnd[1] & 0x02) 4777 standby = true; 4778 4779 if (srb->cmnd[1] & 0x01) 4780 acmd = true; 4781 4782 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8] 4783 << 8) | srb->cmnd[9]; 4784 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) | 4785 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6]; 4786 4787#ifdef SUPPORT_SD_LOCK 4788 if (cmd_idx == LOCK_UNLOCK) { 4789 sd_lock_state = sd_card->sd_lock_status; 4790 sd_lock_state &= SD_LOCKED; 4791 } 4792#endif 4793 4794 retval = get_rsp_type(srb, &rsp_type, &rsp_len); 4795 if (retval != STATUS_SUCCESS) { 4796 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 4797 rtsx_trace(chip); 4798 return TRANSPORT_FAILED; 4799 } 4800 sd_card->last_rsp_type = rsp_type; 4801 4802 retval = sd_switch_clock(chip); 4803 if (retval != STATUS_SUCCESS) { 4804 rtsx_trace(chip); 4805 return TRANSPORT_FAILED; 4806 } 4807 4808#ifdef SUPPORT_SD_LOCK 4809 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) { 4810 if (CHK_MMC_8BIT(sd_card)) { 4811 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, 4812 SD_BUS_WIDTH_8); 4813 if (retval != STATUS_SUCCESS) { 4814 rtsx_trace(chip); 4815 return TRANSPORT_FAILED; 4816 } 4817 4818 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) { 4819 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, 4820 SD_BUS_WIDTH_4); 4821 if (retval != STATUS_SUCCESS) { 4822 rtsx_trace(chip); 4823 return TRANSPORT_FAILED; 4824 } 4825 } 4826 } 4827#else 4828 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4); 4829 if (retval != STATUS_SUCCESS) { 4830 rtsx_trace(chip); 4831 return TRANSPORT_FAILED; 4832 } 4833#endif 4834 4835 if (data_len < 512) { 4836 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len, 4837 SD_RSP_TYPE_R1, NULL, 0, false); 4838 if (retval != STATUS_SUCCESS) { 4839 rtsx_trace(chip); 4840 goto SD_Execute_Write_Cmd_Failed; 4841 } 4842 } 4843 4844 if (standby) { 4845 retval = sd_select_card(chip, 0); 4846 if (retval != STATUS_SUCCESS) { 4847 rtsx_trace(chip); 4848 goto SD_Execute_Write_Cmd_Failed; 4849 } 4850 } 4851 4852 if (acmd) { 4853 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, 4854 sd_card->sd_addr, 4855 SD_RSP_TYPE_R1, NULL, 0, false); 4856 if (retval != STATUS_SUCCESS) { 4857 rtsx_trace(chip); 4858 goto SD_Execute_Write_Cmd_Failed; 4859 } 4860 } 4861 4862 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type, 4863 sd_card->rsp, rsp_len, false); 4864 if (retval != STATUS_SUCCESS) { 4865 rtsx_trace(chip); 4866 goto SD_Execute_Write_Cmd_Failed; 4867 } 4868 4869 if (data_len <= 512) { 4870 u16 i; 4871 u8 *buf; 4872 4873 buf = kmalloc(data_len, GFP_KERNEL); 4874 if (buf == NULL) { 4875 rtsx_trace(chip); 4876 return TRANSPORT_ERROR; 4877 } 4878 4879 rtsx_stor_get_xfer_buf(buf, data_len, srb); 4880 4881#ifdef SUPPORT_SD_LOCK 4882 if (cmd_idx == LOCK_UNLOCK) 4883 lock_cmd_type = buf[0] & 0x0F; 4884#endif 4885 4886 if (data_len > 256) { 4887 rtsx_init_cmd(chip); 4888 for (i = 0; i < 256; i++) { 4889 rtsx_add_cmd(chip, WRITE_REG_CMD, 4890 PPBUF_BASE2 + i, 0xFF, buf[i]); 4891 } 4892 retval = rtsx_send_cmd(chip, 0, 250); 4893 if (retval != STATUS_SUCCESS) { 4894 kfree(buf); 4895 rtsx_trace(chip); 4896 goto SD_Execute_Write_Cmd_Failed; 4897 } 4898 4899 rtsx_init_cmd(chip); 4900 for (i = 256; i < data_len; i++) { 4901 rtsx_add_cmd(chip, WRITE_REG_CMD, 4902 PPBUF_BASE2 + i, 0xFF, buf[i]); 4903 } 4904 retval = rtsx_send_cmd(chip, 0, 250); 4905 if (retval != STATUS_SUCCESS) { 4906 kfree(buf); 4907 rtsx_trace(chip); 4908 goto SD_Execute_Write_Cmd_Failed; 4909 } 4910 } else { 4911 rtsx_init_cmd(chip); 4912 for (i = 0; i < data_len; i++) { 4913 rtsx_add_cmd(chip, WRITE_REG_CMD, 4914 PPBUF_BASE2 + i, 0xFF, buf[i]); 4915 } 4916 retval = rtsx_send_cmd(chip, 0, 250); 4917 if (retval != STATUS_SUCCESS) { 4918 kfree(buf); 4919 rtsx_trace(chip); 4920 goto SD_Execute_Write_Cmd_Failed; 4921 } 4922 } 4923 4924 kfree(buf); 4925 4926 rtsx_init_cmd(chip); 4927 4928 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 4929 srb->cmnd[8] & 0x03); 4930 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 4931 srb->cmnd[9]); 4932 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 4933 0x00); 4934 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 4935 0x01); 4936 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, 4937 PINGPONG_BUFFER); 4938 4939 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 4940 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START); 4941 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 4942 SD_TRANSFER_END, SD_TRANSFER_END); 4943 4944 retval = rtsx_send_cmd(chip, SD_CARD, 250); 4945 } else if (!(data_len & 0x1FF)) { 4946 rtsx_init_cmd(chip); 4947 4948 trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512); 4949 4950 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 4951 0x02); 4952 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 4953 0x00); 4954 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 4955 0xFF, (srb->cmnd[7] & 0xFE) >> 1); 4956 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 4957 0xFF, (u8)((data_len & 0x0001FE00) >> 9)); 4958 4959 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, 4960 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START); 4961 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, 4962 SD_TRANSFER_END, SD_TRANSFER_END); 4963 4964 rtsx_send_cmd_no_wait(chip); 4965 4966 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), 4967 scsi_bufflen(srb), scsi_sg_count(srb), 4968 DMA_TO_DEVICE, 10000); 4969 4970 } else { 4971 rtsx_trace(chip); 4972 goto SD_Execute_Write_Cmd_Failed; 4973 } 4974 4975 if (retval < 0) { 4976 write_err = true; 4977 rtsx_clear_sd_error(chip); 4978 rtsx_trace(chip); 4979 goto SD_Execute_Write_Cmd_Failed; 4980 } 4981 4982#ifdef SUPPORT_SD_LOCK 4983 if (cmd_idx == LOCK_UNLOCK) { 4984 if (lock_cmd_type == SD_ERASE) { 4985 sd_card->sd_erase_status = SD_UNDER_ERASING; 4986 scsi_set_resid(srb, 0); 4987 return TRANSPORT_GOOD; 4988 } 4989 4990 rtsx_init_cmd(chip); 4991 rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02); 4992 4993 rtsx_send_cmd(chip, SD_CARD, 250); 4994 4995 retval = sd_update_lock_status(chip); 4996 if (retval != STATUS_SUCCESS) { 4997 dev_dbg(rtsx_dev(chip), "Lock command fail!\n"); 4998 lock_cmd_fail = 1; 4999 } 5000 } 5001#endif /* SUPPORT_SD_LOCK */ 5002 5003 if (standby) { 5004 retval = sd_select_card(chip, 1); 5005 if (retval != STATUS_SUCCESS) { 5006 rtsx_trace(chip); 5007 goto SD_Execute_Write_Cmd_Failed; 5008 } 5009 } 5010 5011 if (send_cmd12) { 5012 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 5013 0, SD_RSP_TYPE_R1b, NULL, 0, false); 5014 if (retval != STATUS_SUCCESS) { 5015 rtsx_trace(chip); 5016 goto SD_Execute_Write_Cmd_Failed; 5017 } 5018 } 5019 5020 if (data_len < 512) { 5021 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, 5022 SD_RSP_TYPE_R1, NULL, 0, false); 5023 if (retval != STATUS_SUCCESS) { 5024 rtsx_trace(chip); 5025 goto SD_Execute_Write_Cmd_Failed; 5026 } 5027 5028 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02); 5029 if (retval != STATUS_SUCCESS) { 5030 rtsx_trace(chip); 5031 goto SD_Execute_Write_Cmd_Failed; 5032 } 5033 5034 rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00); 5035 if (retval != STATUS_SUCCESS) { 5036 rtsx_trace(chip); 5037 goto SD_Execute_Write_Cmd_Failed; 5038 } 5039 } 5040 5041 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04)) 5042 cmd13_checkbit = true; 5043 5044 for (i = 0; i < 3; i++) { 5045 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS, 5046 sd_card->sd_addr, 5047 SD_RSP_TYPE_R1, NULL, 0, 5048 cmd13_checkbit); 5049 if (retval == STATUS_SUCCESS) 5050 break; 5051 } 5052 if (retval != STATUS_SUCCESS) { 5053 rtsx_trace(chip); 5054 goto SD_Execute_Write_Cmd_Failed; 5055 } 5056 5057#ifdef SUPPORT_SD_LOCK 5058 if (cmd_idx == LOCK_UNLOCK) { 5059 if (!lock_cmd_fail) { 5060 dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n", 5061 lock_cmd_type); 5062 if (lock_cmd_type & SD_CLR_PWD) 5063 sd_card->sd_lock_status &= ~SD_PWD_EXIST; 5064 5065 if (lock_cmd_type & SD_SET_PWD) 5066 sd_card->sd_lock_status |= SD_PWD_EXIST; 5067 } 5068 5069 dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n", 5070 sd_lock_state, sd_card->sd_lock_status); 5071 if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) { 5072 sd_card->sd_lock_notify = 1; 5073 if (sd_lock_state) { 5074 if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) { 5075 sd_card->sd_lock_status |= ( 5076 SD_UNLOCK_POW_ON | SD_SDR_RST); 5077 if (CHK_SD(sd_card)) { 5078 retval = reset_sd(chip); 5079 if (retval != STATUS_SUCCESS) { 5080 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST); 5081 rtsx_trace(chip); 5082 goto SD_Execute_Write_Cmd_Failed; 5083 } 5084 } 5085 5086 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST); 5087 } 5088 } 5089 } 5090 } 5091 5092 if (lock_cmd_fail) { 5093 scsi_set_resid(srb, 0); 5094 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 5095 rtsx_trace(chip); 5096 return TRANSPORT_FAILED; 5097 } 5098#endif /* SUPPORT_SD_LOCK */ 5099 5100 scsi_set_resid(srb, 0); 5101 return TRANSPORT_GOOD; 5102 5103SD_Execute_Write_Cmd_Failed: 5104 sd_card->pre_cmd_err = 1; 5105 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 5106 if (write_err) 5107 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR); 5108 5109 release_sd_card(chip); 5110 do_reset_sd_card(chip); 5111 if (!(chip->card_ready & SD_CARD)) 5112 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 5113 5114 rtsx_trace(chip); 5115 return TRANSPORT_FAILED; 5116} 5117 5118int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip) 5119{ 5120 struct sd_info *sd_card = &(chip->sd_card); 5121 unsigned int lun = SCSI_LUN(srb); 5122 int count; 5123 u16 data_len; 5124 5125 if (!sd_card->sd_pass_thru_en) { 5126 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 5127 rtsx_trace(chip); 5128 return TRANSPORT_FAILED; 5129 } 5130 5131 if (sd_card->pre_cmd_err) { 5132 sd_card->pre_cmd_err = 0; 5133 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 5134 rtsx_trace(chip); 5135 return TRANSPORT_FAILED; 5136 } 5137 5138 data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8]; 5139 5140 if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) { 5141 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 5142 rtsx_trace(chip); 5143 return TRANSPORT_FAILED; 5144 } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) { 5145 count = (data_len < 17) ? data_len : 17; 5146 } else { 5147 count = (data_len < 6) ? data_len : 6; 5148 } 5149 rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb); 5150 5151 dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len); 5152 dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n", 5153 sd_card->rsp[0], sd_card->rsp[1], 5154 sd_card->rsp[2], sd_card->rsp[3]); 5155 5156 scsi_set_resid(srb, 0); 5157 return TRANSPORT_GOOD; 5158} 5159 5160int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip) 5161{ 5162 struct sd_info *sd_card = &(chip->sd_card); 5163 unsigned int lun = SCSI_LUN(srb); 5164 int retval; 5165 5166 if (!sd_card->sd_pass_thru_en) { 5167 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 5168 rtsx_trace(chip); 5169 return TRANSPORT_FAILED; 5170 } 5171 5172 if (sd_card->pre_cmd_err) { 5173 sd_card->pre_cmd_err = 0; 5174 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 5175 rtsx_trace(chip); 5176 return TRANSPORT_FAILED; 5177 } 5178 5179 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) || 5180 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) || 5181 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) || 5182 (0x64 != srb->cmnd[8])) { 5183 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 5184 rtsx_trace(chip); 5185 return TRANSPORT_FAILED; 5186 } 5187 5188 switch (srb->cmnd[1] & 0x0F) { 5189 case 0: 5190#ifdef SUPPORT_SD_LOCK 5191 if (0x64 == srb->cmnd[9]) 5192 sd_card->sd_lock_status |= SD_SDR_RST; 5193#endif 5194 retval = reset_sd_card(chip); 5195 if (retval != STATUS_SUCCESS) { 5196#ifdef SUPPORT_SD_LOCK 5197 sd_card->sd_lock_status &= ~SD_SDR_RST; 5198#endif 5199 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 5200 sd_card->pre_cmd_err = 1; 5201 rtsx_trace(chip); 5202 return TRANSPORT_FAILED; 5203 } 5204#ifdef SUPPORT_SD_LOCK 5205 sd_card->sd_lock_status &= ~SD_SDR_RST; 5206#endif 5207 break; 5208 5209 case 1: 5210 retval = soft_reset_sd_card(chip); 5211 if (retval != STATUS_SUCCESS) { 5212 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 5213 sd_card->pre_cmd_err = 1; 5214 rtsx_trace(chip); 5215 return TRANSPORT_FAILED; 5216 } 5217 break; 5218 5219 default: 5220 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 5221 rtsx_trace(chip); 5222 return TRANSPORT_FAILED; 5223 } 5224 5225 scsi_set_resid(srb, 0); 5226 return TRANSPORT_GOOD; 5227} 5228#endif 5229 5230void sd_cleanup_work(struct rtsx_chip *chip) 5231{ 5232 struct sd_info *sd_card = &(chip->sd_card); 5233 5234 if (sd_card->seq_mode) { 5235 dev_dbg(rtsx_dev(chip), "SD: stop transmission\n"); 5236 sd_stop_seq_mode(chip); 5237 sd_card->cleanup_counter = 0; 5238 } 5239} 5240 5241int sd_power_off_card3v3(struct rtsx_chip *chip) 5242{ 5243 int retval; 5244 5245 retval = disable_card_clock(chip, SD_CARD); 5246 if (retval != STATUS_SUCCESS) { 5247 rtsx_trace(chip); 5248 return STATUS_FAIL; 5249 } 5250 5251 retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0); 5252 if (retval) { 5253 rtsx_trace(chip); 5254 return retval; 5255 } 5256 5257 if (!chip->ft2_fast_mode) { 5258 retval = card_power_off(chip, SD_CARD); 5259 if (retval != STATUS_SUCCESS) { 5260 rtsx_trace(chip); 5261 return STATUS_FAIL; 5262 } 5263 5264 wait_timeout(50); 5265 } 5266 5267 if (chip->asic_code) { 5268 retval = sd_pull_ctl_disable(chip); 5269 if (retval != STATUS_SUCCESS) { 5270 rtsx_trace(chip); 5271 return STATUS_FAIL; 5272 } 5273 } else { 5274 retval = rtsx_write_register(chip, FPGA_PULL_CTL, 5275 FPGA_SD_PULL_CTL_BIT | 0x20, 5276 FPGA_SD_PULL_CTL_BIT); 5277 if (retval) { 5278 rtsx_trace(chip); 5279 return retval; 5280 } 5281 } 5282 5283 return STATUS_SUCCESS; 5284} 5285 5286int release_sd_card(struct rtsx_chip *chip) 5287{ 5288 struct sd_info *sd_card = &(chip->sd_card); 5289 int retval; 5290 5291 chip->card_ready &= ~SD_CARD; 5292 chip->card_fail &= ~SD_CARD; 5293 chip->card_wp &= ~SD_CARD; 5294 5295 chip->sd_io = 0; 5296 chip->sd_int = 0; 5297 5298#ifdef SUPPORT_SD_LOCK 5299 sd_card->sd_lock_status = 0; 5300 sd_card->sd_erase_status = 0; 5301#endif 5302 5303 memset(sd_card->raw_csd, 0, 16); 5304 memset(sd_card->raw_scr, 0, 8); 5305 5306 retval = sd_power_off_card3v3(chip); 5307 if (retval != STATUS_SUCCESS) { 5308 rtsx_trace(chip); 5309 return STATUS_FAIL; 5310 } 5311 5312 return STATUS_SUCCESS; 5313} 5314