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