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