On Thu, May 21, 2020 at 01:50:02PM +0200, Klaus Doth wrote: > On 5/21/20 10:52 AM, Greg Kroah-Hartman wrote: > > On Tue, May 19, 2020 at 07:04:06PM +0200, Klaus Doth wrote: > >> Hi, > >> > >> As per the info from kernelnewbies IRC, I'm sending this also to the PCI > >> list. > > <snip> > > > > Can you submit a proposed patch in a format that it can be tested and > > possibly submitted in so that we can review this easier? > > > > Also try cc:ing the author of changes in that code, Rui Feng > > <rui_feng@xxxxxxxxxxxxxx>, as well, as they are the best one to review > > and comment on your issue. > > > > thanks, > > > > greg k-h > > DMA transfers to and from the SD card stall for 10 seconds and run into > timeout on RTS5260 card readers after ASPM was enabled. > > Adding a short msleep after disabling ASPM fixes the issue on several > Dell Precision 7530/7540 systems I tested. > > This function is only called when waking up after the chip went into > powersave after not transferring data for a few seconds. The added > msleep does therefore not change anything in data transfer speed or > induce any excessive waiting while data transfers are running, or the > chip is sleeping. Only the transistion from sleep to active is affected. s/transistion/transition/ I don't see anything in the PCIe spec that would require a delay here. In general, drivers should not be configuration ASPM directly because doing it correctly requires knowledge of the upstream component, i.e., a root port or a switch downstream port. But these chips seem to be pretty buggy in terms of ASPM, so it doesn't really surprise me if they're broken here. That's all to say that I don't know *why* this would be needed, but I don't object to it. > Signed-off-by: Klaus Doth <kdlnx@xxxxxxx> > > --- > drivers/misc/cardreader/rtsx_pcr.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/misc/cardreader/rtsx_pcr.c > b/drivers/misc/cardreader/rtsx_pcr.c > index 06038b325b02..8b0799cd88c2 100644 > --- a/drivers/misc/cardreader/rtsx_pcr.c > +++ b/drivers/misc/cardreader/rtsx_pcr.c > @@ -141,6 +141,7 @@ static void rtsx_comm_pm_full_on(struct rtsx_pcr *pcr) > struct rtsx_cr_option *option = &pcr->option; > > rtsx_disable_aspm(pcr); > + msleep(1); > > if (option->ltr_enabled) > rtsx_set_ltr_latency(pcr, option->ltr_active_latency); > -- > 2.26.2 > >