blob: a4d8eb2abd53727c56d14e186a2fa59d6c0af3de [file] [log] [blame]
wwang77d89b02011-01-21 17:39:18 +08001/* 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
28#include "rtsx.h"
29#include "rtsx_transport.h"
30#include "rtsx_scsi.h"
31#include "rtsx_card.h"
32#include "rtsx_chip.h"
33#include "rtsx_sys.h"
34#include "general.h"
35
36#include "sd.h"
37#include "xd.h"
38#include "ms.h"
39
40static void rtsx_calibration(struct rtsx_chip *chip)
41{
42 rtsx_write_phy_register(chip, 0x1B, 0x135E);
43 wait_timeout(10);
44 rtsx_write_phy_register(chip, 0x00, 0x0280);
45 rtsx_write_phy_register(chip, 0x01, 0x7112);
46 rtsx_write_phy_register(chip, 0x01, 0x7110);
47 rtsx_write_phy_register(chip, 0x01, 0x7112);
48 rtsx_write_phy_register(chip, 0x01, 0x7113);
49 rtsx_write_phy_register(chip, 0x00, 0x0288);
50}
51
52void rtsx_disable_card_int(struct rtsx_chip *chip)
53{
54 u32 reg = rtsx_readl(chip, RTSX_BIER);
55
56 reg &= ~(XD_INT_EN | SD_INT_EN | MS_INT_EN);
57 rtsx_writel(chip, RTSX_BIER, reg);
58}
59
60void rtsx_enable_card_int(struct rtsx_chip *chip)
61{
62 u32 reg = rtsx_readl(chip, RTSX_BIER);
63 int i;
64
65 for (i = 0; i <= chip->max_lun; i++) {
66 if (chip->lun2card[i] & XD_CARD)
67 reg |= XD_INT_EN;
68 if (chip->lun2card[i] & SD_CARD)
69 reg |= SD_INT_EN;
70 if (chip->lun2card[i] & MS_CARD)
71 reg |= MS_INT_EN;
72 }
73 if (chip->hw_bypass_sd)
74 reg &= ~((u32)SD_INT_EN);
75
76 rtsx_writel(chip, RTSX_BIER, reg);
77}
78
79void rtsx_enable_bus_int(struct rtsx_chip *chip)
80{
81 u32 reg = 0;
82#ifndef DISABLE_CARD_INT
83 int i;
84#endif
85
86 reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
87
88#ifndef DISABLE_CARD_INT
89 for (i = 0; i <= chip->max_lun; i++) {
90 RTSX_DEBUGP("lun2card[%d] = 0x%02x\n", i, chip->lun2card[i]);
91
92 if (chip->lun2card[i] & XD_CARD)
93 reg |= XD_INT_EN;
94 if (chip->lun2card[i] & SD_CARD)
95 reg |= SD_INT_EN;
96 if (chip->lun2card[i] & MS_CARD)
97 reg |= MS_INT_EN;
98 }
99 if (chip->hw_bypass_sd)
100 reg &= ~((u32)SD_INT_EN);
101#endif
102
103 if (chip->ic_version >= IC_VER_C)
104 reg |= DELINK_INT_EN;
105#ifdef SUPPORT_OCP
106 if (CHECK_PID(chip, 0x5209)) {
107 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
108 reg |= MS_OC_INT_EN | SD_OC_INT_EN;
109 } else {
110 reg |= SD_OC_INT_EN;
111 }
112 } else {
113 reg |= OC_INT_EN;
114 }
115#endif
116 if (!chip->adma_mode)
117 reg |= DATA_DONE_INT_EN;
118
119 /* Enable Bus Interrupt */
120 rtsx_writel(chip, RTSX_BIER, reg);
121
122 RTSX_DEBUGP("RTSX_BIER: 0x%08x\n", reg);
123}
124
125void rtsx_disable_bus_int(struct rtsx_chip *chip)
126{
127 rtsx_writel(chip, RTSX_BIER, 0);
128}
129
130static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
131{
132 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
133 if (chip->asic_code) {
134 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
135 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
136 } else {
137 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, 0xFF, FPGA_SD_PULL_CTL_EN);
138 }
139 RTSX_WRITE_REG(chip, CARD_SHARE_MODE, 0xFF, CARD_SHARE_48_SD);
140
141 /* Enable SDIO internal clock */
142 RTSX_WRITE_REG(chip, 0xFF2C, 0x01, 0x01);
143
144 RTSX_WRITE_REG(chip, SDIO_CTRL, 0xFF, SDIO_BUS_CTRL | SDIO_CD_CTRL);
145
146 chip->sd_int = 1;
147 chip->sd_io = 1;
148 } else {
149 chip->need_reset |= SD_CARD;
150 }
151
152 return STATUS_SUCCESS;
153}
154
155#ifdef HW_AUTO_SWITCH_SD_BUS
156static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
157{
158 u8 tmp;
159 int sw_bypass_sd = 0;
160 int retval;
161
162 if (chip->driver_first_load) {
163 if (CHECK_PID(chip, 0x5288)) {
164 RTSX_READ_REG(chip, 0xFE5A, &tmp);
165 if (tmp & 0x08)
166 sw_bypass_sd = 1;
167 } else if (CHECK_PID(chip, 0x5208)) {
168 RTSX_READ_REG(chip, 0xFE70, &tmp);
169 if (tmp & 0x80)
170 sw_bypass_sd = 1;
171 } else if (CHECK_PID(chip, 0x5209)) {
172 RTSX_READ_REG(chip, SDIO_CFG, &tmp);
173 if (tmp & SDIO_BUS_AUTO_SWITCH)
174 sw_bypass_sd = 1;
175 }
176 } else {
177 if (chip->sdio_in_charge)
178 sw_bypass_sd = 1;
179 }
180 RTSX_DEBUGP("chip->sdio_in_charge = %d\n", chip->sdio_in_charge);
181 RTSX_DEBUGP("chip->driver_first_load = %d\n", chip->driver_first_load);
182 RTSX_DEBUGP("sw_bypass_sd = %d\n", sw_bypass_sd);
183
184 if (sw_bypass_sd) {
185 u8 cd_toggle_mask = 0;
186
187 RTSX_READ_REG(chip, TLPTISTAT, &tmp);
188 if (CHECK_PID(chip, 0x5209)) {
189 cd_toggle_mask = 0x10;
190 } else {
191 cd_toggle_mask = 0x08;
192 }
193 if (tmp & cd_toggle_mask) {
194 /* Disable sdio_bus_auto_switch */
195 if (CHECK_PID(chip, 0x5288)) {
196 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x00);
197 } else if (CHECK_PID(chip, 0x5208)) {
198 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x00);
199 } else {
200 RTSX_WRITE_REG(chip, SDIO_CFG, SDIO_BUS_AUTO_SWITCH, 0);
201 }
202 RTSX_WRITE_REG(chip, TLPTISTAT, 0xFF, tmp);
203
204 chip->need_reset |= SD_CARD;
205 } else {
206 RTSX_DEBUGP("Chip inserted with SDIO!\n");
207
208 if (chip->asic_code) {
209 retval = sd_pull_ctl_enable(chip);
210 if (retval != STATUS_SUCCESS) {
211 TRACE_RET(chip, STATUS_FAIL);
212 }
213 } else {
214 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20, 0);
215 }
216 retval = card_share_mode(chip, SD_CARD);
217 if (retval != STATUS_SUCCESS) {
218 TRACE_RET(chip, STATUS_FAIL);
219 }
220
221 /* Enable sdio_bus_auto_switch */
222 if (CHECK_PID(chip, 0x5288)) {
223 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x08);
224 } else if (CHECK_PID(chip, 0x5208)) {
225 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x80);
226 } else {
227 RTSX_WRITE_REG(chip, SDIO_CFG,
228 SDIO_BUS_AUTO_SWITCH, SDIO_BUS_AUTO_SWITCH);
229 }
230 chip->chip_insert_with_sdio = 1;
231 chip->sd_io = 1;
232 }
233 } else {
234 if (CHECK_PID(chip, 0x5209)) {
235 RTSX_WRITE_REG(chip, TLPTISTAT, 0x10, 0x10);
236 } else {
237 RTSX_WRITE_REG(chip, TLPTISTAT, 0x08, 0x08);
238 }
239 chip->need_reset |= SD_CARD;
240 }
241
242 return STATUS_SUCCESS;
243}
244#endif
245
246int rtsx_reset_chip(struct rtsx_chip *chip)
247{
248 int retval;
249
250 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
251
252 rtsx_disable_aspm(chip);
253
254 if (CHECK_PID(chip, 0x5209) && chip->asic_code) {
255 u16 val;
256
257 /* optimize PHY */
258 retval = rtsx_write_phy_register(chip, 0x00, 0xB966);
259 if (retval != STATUS_SUCCESS) {
260 TRACE_RET(chip, STATUS_FAIL);
261 }
262 retval = rtsx_write_phy_register(chip, 0x01, 0x713F);
263 if (retval != STATUS_SUCCESS) {
264 TRACE_RET(chip, STATUS_FAIL);
265 }
266 retval = rtsx_write_phy_register(chip, 0x03, 0xA549);
267 if (retval != STATUS_SUCCESS) {
268 TRACE_RET(chip, STATUS_FAIL);
269 }
270 retval = rtsx_write_phy_register(chip, 0x06, 0xB235);
271 if (retval != STATUS_SUCCESS) {
272 TRACE_RET(chip, STATUS_FAIL);
273 }
274 retval = rtsx_write_phy_register(chip, 0x07, 0xEF40);
275 if (retval != STATUS_SUCCESS) {
276 TRACE_RET(chip, STATUS_FAIL);
277 }
278 retval = rtsx_write_phy_register(chip, 0x1E, 0xF8EB);
279 if (retval != STATUS_SUCCESS) {
280 TRACE_RET(chip, STATUS_FAIL);
281 }
282 retval = rtsx_write_phy_register(chip, 0x19, 0xFE6C);
283 if (retval != STATUS_SUCCESS) {
284 TRACE_RET(chip, STATUS_FAIL);
285 }
286 wait_timeout(1);
287 retval = rtsx_write_phy_register(chip, 0x0A, 0x05C0);
288 if (retval != STATUS_SUCCESS) {
289 TRACE_RET(chip, STATUS_FAIL);
290 }
291
292 retval = rtsx_write_cfg_dw(chip, 1, 0x110, 0xFFFF, 0xFFFF);
293 if (retval != STATUS_SUCCESS) {
294 TRACE_RET(chip, STATUS_FAIL);
295 }
296
297 retval = rtsx_read_phy_register(chip, 0x08, &val);
298 if (retval != STATUS_SUCCESS) {
299 TRACE_RET(chip, STATUS_FAIL);
300 }
301 RTSX_DEBUGP("Read from phy 0x08: 0x%04x\n", val);
302
303 if (chip->phy_voltage) {
304 chip->phy_voltage &= 0x3F;
305 RTSX_DEBUGP("chip->phy_voltage = 0x%x\n", chip->phy_voltage);
306 val &= ~0x3F;
307 val |= chip->phy_voltage;
308 RTSX_DEBUGP("Write to phy 0x08: 0x%04x\n", val);
309 retval = rtsx_write_phy_register(chip, 0x08, val);
310 if (retval != STATUS_SUCCESS) {
311 TRACE_RET(chip, STATUS_FAIL);
312 }
313 } else {
314 chip->phy_voltage = (u8)(val & 0x3F);
315 RTSX_DEBUGP("Default, chip->phy_voltage = 0x%x\n", chip->phy_voltage);
316 }
317 }
318
319 RTSX_WRITE_REG(chip, HOST_SLEEP_STATE, 0x03, 0x00);
320
321 /* Disable card clock */
322 RTSX_WRITE_REG(chip, CARD_CLK_EN, 0x1E, 0);
323
324#ifdef SUPPORT_OCP
325 /* SSC power on, OCD power on */
326 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
327 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, 0);
328 } else {
329 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, MS_OC_POWER_DOWN);
330 }
331 if (CHECK_PID(chip, 0x5209)) {
332 RTSX_WRITE_REG(chip, OCPPARA1, SD_OCP_TIME_MASK | MS_OCP_TIME_MASK,
333 SD_OCP_TIME_800 | MS_OCP_TIME_800);
334 RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK | MS_OCP_THD_MASK,
335 chip->sd_400mA_ocp_thd | (chip->ms_ocp_thd << 4));
336 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
337 RTSX_WRITE_REG(chip, OCPGLITCH, SD_OCP_GLITCH_MASK | MS_OCP_GLITCH_MASK,
338 SD_OCP_GLITCH_10000 | MS_OCP_GLITCH_10000);
339 } else {
340 RTSX_WRITE_REG(chip, OCPGLITCH, SD_OCP_GLITCH_MASK, SD_OCP_GLITCH_10000);
341 }
342 RTSX_WRITE_REG(chip, OCPCTL, 0xFF,
343 SD_OCP_INT_EN | SD_DETECT_EN | MS_OCP_INT_EN | MS_DETECT_EN);
344 } else {
345 RTSX_WRITE_REG(chip, OCPPARA1, OCP_TIME_MASK, OCP_TIME_800);
346 RTSX_WRITE_REG(chip, OCPPARA2, OCP_THD_MASK, OCP_THD_244_946);
347 RTSX_WRITE_REG(chip, OCPCTL, 0xFF, CARD_OC_INT_EN | CARD_DETECT_EN);
348 }
349#else
350 /* OC power down */
351 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, OC_POWER_DOWN);
352#endif
353
354 if (!CHECK_PID(chip, 0x5288)) {
355 RTSX_WRITE_REG(chip, CARD_GPIO_DIR, 0xFF, 0x03);
356 }
357
358 /* Turn off LED */
359 RTSX_WRITE_REG(chip, CARD_GPIO, 0xFF, 0x03);
360
361 /* Reset delink mode */
362 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x0A, 0);
363
364 /* Card driving select */
365 RTSX_WRITE_REG(chip, CARD_DRIVE_SEL, 0xFF, chip->card_drive_sel);
366 if (CHECK_PID(chip, 0x5209)) {
367 RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07, chip->sd30_drive_sel_3v3);
368 }
369
370#ifdef LED_AUTO_BLINK
371 RTSX_WRITE_REG(chip, CARD_AUTO_BLINK, 0xFF,
372 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
373#endif
374
375 if (chip->asic_code) {
376 /* Enable SSC Clock */
377 RTSX_WRITE_REG(chip, SSC_CTL1, 0xFF, SSC_8X_EN | SSC_SEL_4M);
378 RTSX_WRITE_REG(chip, SSC_CTL2, 0xFF, 0x12);
379 }
380
381 /* Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
382 0xFE5B
383 bit[1] u_cd_rst_core_en rst_value = 0
384 bit[2] u_force_rst_core_en rst_value = 0
385 bit[5] u_mac_phy_rst_n_dbg rst_value = 1
386 bit[4] u_non_sticky_rst_n_dbg rst_value = 0
387 */
388 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x16, 0x10);
389
390 /* Enable ASPM */
391 if (chip->aspm_l0s_l1_en) {
392 if (chip->dynamic_aspm) {
393 if (CHK_SDIO_EXIST(chip)) {
394 if (CHECK_PID(chip, 0x5209)) {
395 retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
396 if (retval != STATUS_SUCCESS) {
397 TRACE_RET(chip, STATUS_FAIL);
398 }
399 } else if (CHECK_PID(chip, 0x5288)) {
400 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
401 if (retval != STATUS_SUCCESS) {
402 TRACE_RET(chip, STATUS_FAIL);
403 }
404 }
405 }
406 } else {
407 if (CHECK_PID(chip, 0x5208)) {
408 RTSX_WRITE_REG(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
409 }
410
411 retval = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
412 if (retval != STATUS_SUCCESS) {
413 TRACE_RET(chip, STATUS_FAIL);
414 }
415 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
416 if (CHK_SDIO_EXIST(chip)) {
417 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
418 if (CHECK_PID(chip, 0x5288)) {
419 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
420 } else {
421 retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
422 }
423 if (retval != STATUS_SUCCESS) {
424 TRACE_RET(chip, STATUS_FAIL);
425 }
426 }
427
428 chip->aspm_enabled = 1;
429 }
430 } else {
431 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
432 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
433 if (retval != STATUS_SUCCESS) {
434 TRACE_RET(chip, STATUS_FAIL);
435 }
436 }
437 retval = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
438 if (retval != STATUS_SUCCESS) {
439 TRACE_RET(chip, STATUS_FAIL);
440 }
441 }
442
443 retval = rtsx_write_config_byte(chip, 0x81, 1);
444 if (retval != STATUS_SUCCESS) {
445 TRACE_RET(chip, STATUS_FAIL);
446 }
447
448 if (CHK_SDIO_EXIST(chip)) {
449 if (CHECK_PID(chip, 0x5288)) {
450 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF00, 0x0100);
451 } else {
452 retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF00, 0x0100);
453 }
454 if (retval != STATUS_SUCCESS) {
455 TRACE_RET(chip, STATUS_FAIL);
456 }
457 }
458
459 if (CHECK_PID(chip, 0x5209)) {
460 retval = rtsx_write_cfg_dw(chip, 0, 0x70C, 0xFF000000, 0x5B);
461 if (retval != STATUS_SUCCESS) {
462 TRACE_RET(chip, STATUS_FAIL);
463 }
464 }
465
466 if (CHECK_PID(chip, 0x5288)) {
467 if (!CHK_SDIO_EXIST(chip)) {
468 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
469 if (retval != STATUS_SUCCESS) {
470 TRACE_RET(chip, STATUS_FAIL);
471 }
472 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
473 if (retval != STATUS_SUCCESS) {
474 TRACE_RET(chip, STATUS_FAIL);
475 }
476 }
477 }
478
479 RTSX_WRITE_REG(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
480
481 RTSX_WRITE_REG(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
482
483 if (CHECK_PID(chip, 0x5209)) {
484 RTSX_WRITE_REG(chip, PWD_SUSPEND_EN, 0xFF, 0xFF);
485 RTSX_WRITE_REG(chip, PWR_GATE_CTRL, PWR_GATE_EN, PWR_GATE_EN);
486 }
487
488 /* Enable PCIE interrupt */
489 if (chip->asic_code) {
490 if (CHECK_PID(chip, 0x5208)) {
491 if (chip->phy_debug_mode) {
492 RTSX_WRITE_REG(chip, CDRESUMECTL, 0x77, 0);
493 rtsx_disable_bus_int(chip);
494 } else {
495 rtsx_enable_bus_int(chip);
496 }
497
498 if (chip->ic_version >= IC_VER_D) {
499 u16 reg;
500 retval = rtsx_read_phy_register(chip, 0x00, &reg);
501 if (retval != STATUS_SUCCESS) {
502 TRACE_RET(chip, STATUS_FAIL);
503 }
504 reg &= 0xFE7F;
505 reg |= 0x80;
506 retval = rtsx_write_phy_register(chip, 0x00, reg);
507 if (retval != STATUS_SUCCESS) {
508 TRACE_RET(chip, STATUS_FAIL);
509 }
510 retval = rtsx_read_phy_register(chip, 0x1C, &reg);
511 if (retval != STATUS_SUCCESS) {
512 TRACE_RET(chip, STATUS_FAIL);
513 }
514 reg &= 0xFFF7;
515 retval = rtsx_write_phy_register(chip, 0x1C, reg);
516 if (retval != STATUS_SUCCESS) {
517 TRACE_RET(chip, STATUS_FAIL);
518 }
519 }
520
521 if (chip->driver_first_load && (chip->ic_version < IC_VER_C)) {
522 rtsx_calibration(chip);
523 }
524 } else {
525 rtsx_enable_bus_int(chip);
526 }
527 } else {
528 rtsx_enable_bus_int(chip);
529 }
530
531#ifdef HW_INT_WRITE_CLR
532 if (CHECK_PID(chip, 0x5209)) {
533 /* Set interrupt write clear */
534 RTSX_WRITE_REG(chip, NFTS_TX_CTRL, 0x02, 0);
535 }
536#endif
537
538 chip->need_reset = 0;
539
540 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
541#ifdef HW_INT_WRITE_CLR
542 if (CHECK_PID(chip, 0x5209)) {
543 /* Clear interrupt flag */
544 rtsx_writel(chip, RTSX_BIPR, chip->int_reg);
545 }
546#endif
547 if (chip->hw_bypass_sd)
548 goto NextCard;
549 RTSX_DEBUGP("In rtsx_reset_chip, chip->int_reg = 0x%x\n", chip->int_reg);
550 if (chip->int_reg & SD_EXIST) {
551#ifdef HW_AUTO_SWITCH_SD_BUS
552 if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C)) {
553 retval = rtsx_pre_handle_sdio_old(chip);
554 } else {
555 retval = rtsx_pre_handle_sdio_new(chip);
556 }
557 RTSX_DEBUGP("chip->need_reset = 0x%x (rtsx_reset_chip)\n", (unsigned int)(chip->need_reset));
558#else /* HW_AUTO_SWITCH_SD_BUS */
559 retval = rtsx_pre_handle_sdio_old(chip);
560#endif /* HW_AUTO_SWITCH_SD_BUS */
561 if (retval != STATUS_SUCCESS) {
562 TRACE_RET(chip, STATUS_FAIL);
563 }
564 } else {
565 chip->sd_io = 0;
566 RTSX_WRITE_REG(chip, SDIO_CTRL, SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
567 }
568
569NextCard:
570 if (chip->int_reg & XD_EXIST)
571 chip->need_reset |= XD_CARD;
572 if (chip->int_reg & MS_EXIST)
573 chip->need_reset |= MS_CARD;
574 if (chip->int_reg & CARD_EXIST) {
575 RTSX_WRITE_REG(chip, SSC_CTL1, SSC_RSTB, SSC_RSTB);
576 }
577
578 RTSX_DEBUGP("In rtsx_init_chip, chip->need_reset = 0x%x\n", (unsigned int)(chip->need_reset));
579
580 RTSX_WRITE_REG(chip, RCCTL, 0x01, 0x00);
581
582 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
583 /* Turn off main power when entering S3/S4 state */
584 RTSX_WRITE_REG(chip, MAIN_PWR_OFF_CTL, 0x03, 0x03);
585 }
586
587 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
588 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x07);
589 if (chip->aux_pwr_exist) {
590 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x33);
591 }
592 } else {
593 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x04);
594 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x30);
595 }
596
597 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
598 RTSX_WRITE_REG(chip, PETXCFG, 0x1C, 0x14);
599 } else if (CHECK_PID(chip, 0x5209)) {
600 if (chip->force_clkreq_0) {
601 RTSX_WRITE_REG(chip, PETXCFG, 0x08, 0x08);
602 } else {
603 RTSX_WRITE_REG(chip, PETXCFG, 0x08, 0x00);
604 }
605 }
606
607 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
608 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
609 if (retval != STATUS_SUCCESS) {
610 TRACE_RET(chip, STATUS_FAIL);
611 }
612 }
613
614 if (chip->ft2_fast_mode) {
615 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF, MS_PARTIAL_POWER_ON | SD_PARTIAL_POWER_ON);
616 udelay(chip->pmos_pwr_on_interval);
617 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF, MS_POWER_ON | SD_POWER_ON);
618
619 wait_timeout(200);
620 }
621
622 /* Reset card */
623 rtsx_reset_detected_cards(chip, 0);
624
625 chip->driver_first_load = 0;
626
627 return STATUS_SUCCESS;
628}
629
630static inline int check_sd_speed_prior(u32 sd_speed_prior)
631{
632 int i, fake_para = 0;
633
634 for (i = 0; i < 4; i++) {
635 u8 tmp = (u8)(sd_speed_prior >> (i*8));
636 if ((tmp < 0x01) || (tmp > 0x04)) {
637 fake_para = 1;
638 break;
639 }
640 }
641
642 return !fake_para;
643}
644
645static inline int check_sd_current_prior(u32 sd_current_prior)
646{
647 int i, fake_para = 0;
648
649 for (i = 0; i < 4; i++) {
650 u8 tmp = (u8)(sd_current_prior >> (i*8));
651 if (tmp > 0x03) {
652 fake_para = 1;
653 break;
654 }
655 }
656
657 return !fake_para;
658}
659
660int rts5209_init(struct rtsx_chip *chip)
661{
662 int retval;
663 u32 lval = 0;
664 u8 val = 0;
665
666 val = rtsx_readb(chip, 0x1C);
667 if ((val & 0x10) == 0) {
668 chip->asic_code = 1;
669 } else {
670 chip->asic_code = 0;
671 }
672
673 chip->ic_version = val & 0x0F;
674 chip->phy_debug_mode = 0;
675
676 chip->aux_pwr_exist = 0;
677
678 chip->ms_power_class_en = 0x03;
679
680 retval = rtsx_read_cfg_dw(chip, 0, 0x724, &lval);
681 if (retval != STATUS_SUCCESS) {
682 TRACE_RET(chip, STATUS_FAIL);
683 }
684 RTSX_DEBUGP("dw in 0x724: 0x%x\n", lval);
685 val = (u8)lval;
686 if (!(val & 0x80)) {
687 if (val & 0x04) {
688 SET_SDIO_EXIST(chip);
689 } else {
690 CLR_SDIO_EXIST(chip);
691 }
692
693 if (val & 0x02) {
694 chip->hw_bypass_sd = 0;
695 } else {
696 chip->hw_bypass_sd = 1;
697 }
698 } else {
699 SET_SDIO_EXIST(chip);
700 chip->hw_bypass_sd = 0;
701 }
702
703 if (chip->use_hw_setting) {
704 u8 clk;
705
706 chip->aspm_l0s_l1_en = (val >> 5) & 0x03;
707
708 if (val & 0x08) {
709 chip->lun_mode = DEFAULT_SINGLE;
710 } else {
711 chip->lun_mode = SD_MS_2LUN;
712 }
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
808int 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
874int 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
944int 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
1078void 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)
1087static 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
1100void 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
1148void 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 #if 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
1353Delink_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
1421void 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 */
1435void 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
1461int 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
1485int 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
1516int 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
1549int 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
1578int 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
1640int 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
1687int 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
1712int 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
1744int 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
1769int 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
1801int 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
1821int 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
1841int 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
1857static 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
1880void rtsx_enter_L1(struct rtsx_chip *chip)
1881{
1882 rtsx_handle_pm_dstate(chip, 2);
1883}
1884
1885void 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
1891void 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
1929void 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
1950int 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
2065void 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
2130void 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
2160void 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
2184int 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
2229int 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
2273int 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
2282int 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
2312int 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}