Skip to content

Commit 595d88a

Browse files
hramrachheftig
authored andcommitted
Revert 101bd90 ("misc: rtsx: judge ASPM Mode to set PETXCFG Reg")
References: boo#1214428 boo#1214397 Patch-mainline: Not yet, fix under discussion Causes inability to access Samsung NVMe drives. Source: https://bugzilla.kernel.org/show_bug.cgi?id=217802#c18 Cherry-picked-for: https://bugs.archlinux.org/task/79439
1 parent 77903a6 commit 595d88a

File tree

6 files changed

+58
-6
lines changed

6 files changed

+58
-6
lines changed

drivers/misc/cardreader/rts5227.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ static int rts5227_extra_init_hw(struct rtsx_pcr *pcr)
195195
}
196196
}
197197

198-
if (option->force_clkreq_0 && pcr->aspm_mode == ASPM_MODE_CFG)
198+
if (option->force_clkreq_0)
199199
rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG,
200200
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
201201
else

drivers/misc/cardreader/rts5228.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,17 @@ static void rts5228_init_from_cfg(struct rtsx_pcr *pcr)
435435
option->ltr_enabled = false;
436436
}
437437
}
438+
439+
if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
440+
| PM_L1_1_EN | PM_L1_2_EN))
441+
option->force_clkreq_0 = false;
442+
else
443+
option->force_clkreq_0 = true;
438444
}
439445

440446
static int rts5228_extra_init_hw(struct rtsx_pcr *pcr)
441447
{
448+
struct rtsx_cr_option *option = &pcr->option;
442449

443450
rtsx_pci_write_register(pcr, RTS5228_AUTOLOAD_CFG1,
444451
CD_RESUME_EN_MASK, CD_RESUME_EN_MASK);
@@ -469,6 +476,17 @@ static int rts5228_extra_init_hw(struct rtsx_pcr *pcr)
469476
else
470477
rtsx_pci_write_register(pcr, PETXCFG, 0x30, 0x00);
471478

479+
/*
480+
* If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
481+
* to drive low, and we forcibly request clock.
482+
*/
483+
if (option->force_clkreq_0)
484+
rtsx_pci_write_register(pcr, PETXCFG,
485+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
486+
else
487+
rtsx_pci_write_register(pcr, PETXCFG,
488+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
489+
472490
rtsx_pci_write_register(pcr, PWD_SUSPEND_EN, 0xFF, 0xFB);
473491

474492
if (pcr->rtd3_en) {

drivers/misc/cardreader/rts5249.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,11 +327,12 @@ static int rts5249_extra_init_hw(struct rtsx_pcr *pcr)
327327
}
328328
}
329329

330+
330331
/*
331332
* If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
332333
* to drive low, and we forcibly request clock.
333334
*/
334-
if (option->force_clkreq_0 && pcr->aspm_mode == ASPM_MODE_CFG)
335+
if (option->force_clkreq_0)
335336
rtsx_pci_write_register(pcr, PETXCFG,
336337
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
337338
else

drivers/misc/cardreader/rts5260.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,10 +517,17 @@ static void rts5260_init_from_cfg(struct rtsx_pcr *pcr)
517517
option->ltr_enabled = false;
518518
}
519519
}
520+
521+
if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
522+
| PM_L1_1_EN | PM_L1_2_EN))
523+
option->force_clkreq_0 = false;
524+
else
525+
option->force_clkreq_0 = true;
520526
}
521527

522528
static int rts5260_extra_init_hw(struct rtsx_pcr *pcr)
523529
{
530+
struct rtsx_cr_option *option = &pcr->option;
524531

525532
/* Set mcu_cnt to 7 to ensure data can be sampled properly */
526533
rtsx_pci_write_register(pcr, 0xFC03, 0x7F, 0x07);
@@ -539,6 +546,17 @@ static int rts5260_extra_init_hw(struct rtsx_pcr *pcr)
539546

540547
rts5260_init_hw(pcr);
541548

549+
/*
550+
* If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
551+
* to drive low, and we forcibly request clock.
552+
*/
553+
if (option->force_clkreq_0)
554+
rtsx_pci_write_register(pcr, PETXCFG,
555+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
556+
else
557+
rtsx_pci_write_register(pcr, PETXCFG,
558+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
559+
542560
rtsx_pci_write_register(pcr, pcr->reg_pm_ctrl3, 0x10, 0x00);
543561

544562
return 0;

drivers/misc/cardreader/rts5261.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,17 @@ static void rts5261_init_from_cfg(struct rtsx_pcr *pcr)
498498
option->ltr_enabled = false;
499499
}
500500
}
501+
502+
if (rtsx_check_dev_flag(pcr, ASPM_L1_1_EN | ASPM_L1_2_EN
503+
| PM_L1_1_EN | PM_L1_2_EN))
504+
option->force_clkreq_0 = false;
505+
else
506+
option->force_clkreq_0 = true;
501507
}
502508

503509
static int rts5261_extra_init_hw(struct rtsx_pcr *pcr)
504510
{
511+
struct rtsx_cr_option *option = &pcr->option;
505512
u32 val;
506513

507514
rtsx_pci_write_register(pcr, RTS5261_AUTOLOAD_CFG1,
@@ -547,6 +554,17 @@ static int rts5261_extra_init_hw(struct rtsx_pcr *pcr)
547554
else
548555
rtsx_pci_write_register(pcr, PETXCFG, 0x30, 0x00);
549556

557+
/*
558+
* If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
559+
* to drive low, and we forcibly request clock.
560+
*/
561+
if (option->force_clkreq_0)
562+
rtsx_pci_write_register(pcr, PETXCFG,
563+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_LOW);
564+
else
565+
rtsx_pci_write_register(pcr, PETXCFG,
566+
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
567+
550568
rtsx_pci_write_register(pcr, PWD_SUSPEND_EN, 0xFF, 0xFB);
551569

552570
if (pcr->rtd3_en) {

drivers/misc/cardreader/rtsx_pcr.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1326,11 +1326,8 @@ static int rtsx_pci_init_hw(struct rtsx_pcr *pcr)
13261326
return err;
13271327
}
13281328

1329-
if (pcr->aspm_mode == ASPM_MODE_REG) {
1329+
if (pcr->aspm_mode == ASPM_MODE_REG)
13301330
rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, 0x30, 0x30);
1331-
rtsx_pci_write_register(pcr, PETXCFG,
1332-
FORCE_CLKREQ_DELINK_MASK, FORCE_CLKREQ_HIGH);
1333-
}
13341331

13351332
/* No CD interrupt if probing driver with card inserted.
13361333
* So we need to initialize pcr->card_exist here.

0 commit comments

Comments
 (0)