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