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