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