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