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