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