Re: Bug report for ahci-mvebu driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023/01/29 19:24, marius@xxxxxxxxxxxxxx wrote:
> January 29, 2023 4:25 AM, "Damien Le Moal" <damien.lemoal@xxxxxxxxxxxxxxxxxx> wrote:
>>
>> OK. That is because the limit is not being changed with the added "return 0".
>> What about this version:
>>
>> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
>> index 884ae73b11ea..f404e2c2869e 100644
>> --- a/drivers/ata/libata-core.c
>> +++ b/drivers/ata/libata-core.c
>> @@ -3085,10 +3085,31 @@ int sata_down_spd_limit(struct ata_link *link, u32
>> spd_limit)
>> * If not, use cached value in link->sata_spd.
>> */
>> rc = sata_scr_read(link, SCR_STATUS, &sstatus);
>> - if (rc == 0 && ata_sstatus_online(sstatus))
>> + if (rc == 0 && ata_sstatus_online(sstatus)) {
>> spd = (sstatus >> 4) & 0xf;
>> - else
>> + } else {
>> + /*
>> + * If we reach here, the device is still offline or not
>> + * reporting a current speed yet. If we do not have a recorded
>> + * speed either, it means that probing the drive is failing,
>> + * most likely because problem with link speed autonegotiation
>> + * (e.g. reported case with mvebu adapter with a port multiplier
>> + * device). In this case, assume that probing was done at Gen3
>> + * speed and set the speed limit to the lower Gen2 speed.
>> + * With this, the next probe retry will be done after
>> + * sata_set_spd() explicitly lowers the link speed. If the
>> + * device then responds, the actual maximum speed will be set
>> + * once libata-eh finishes the device revalidation.
>> + */
>> + if (!link->sata_spd && link->sata_spd_limit == UINT_MAX) {
>> + link->sata_spd_limit = 2;
>> + ata_link_warn(link,
>> + "No reported SATA link speed. Limiting to
>> %s\n",
>> + sata_spd_string(link->sata_spd_limit));
>> + return 0;
>> + }
>> spd = link->sata_spd;
>> + }
>>
>> mask = link->sata_spd_limit;
>> if (mask <= 1)
>>
>> Does this work ?
>>
>> --
>> Damien Le Moal
>> Western Digital Research
> 
> 
> No, it doesn't work.

OK. So it seems that your adapter really wants the initial scan at 1.5 Gbps...
Since the initial tweak worked, I will post the official patch for it. I will CC
you. Please retest to be sure and send a "Tested-by:" tag ! Thanks !

> 
> [   29.743388][  T113] hardreset, Online=>Offline
> [   29.743397][  T113] sata_set_spd_needed, scontrol=0x300
> [   29.747893][  T113] __sata_set_spd_needed, initial limit=0xFFFFFFFF
> [   29.753149][  T113] __sata_set_spd_needed, corrected limit=0xFFFFFFFF
> [   29.759464][  T113] __sata_set_spd_needed, target=0x0
> [   29.765953][  T113] __sata_set_spd_needed, spd=0x0
> [   29.771033][  T113] __sata_set_spd_needed, final *scontrol=0x300
> [   29.776937][  T113] resume, do loop
> [   30.003803][  T113] resume, after do loop
> [   30.063823][  T113] debounce, SCR=0x100
> ...
> [   31.443802][  T113] debounce, SCR=0x100
> [   31.447663][  T113] resume, return at end of function
> [   31.451522][  T113] hardreset, ata_phys_link_offline check failed
> [   31.456625][  T113] ata2: SATA link down (SStatus 100 SControl 300)
> [   31.469093][  T113] sata_down_spd_limit: limit 0x1, cur spd 0x0, saved limit 0xffffffff, hw limit 0xffffffff
> [   31.478986][  T113] ata2: No reported SATA link speed. Limiting to 3.0 Gbps
> [   31.486004][  T113] hardreset, Online=>Offline
> [   31.486010][  T113] sata_set_spd_needed, scontrol=0x300
> [   31.490479][  T113] __sata_set_spd_needed, initial limit=0x2
> [   31.495747][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   31.501437][  T113] __sata_set_spd_needed, target=0x2
> [   31.507321][  T113] __sata_set_spd_needed, spd=0x0
> [   31.512401][  T113] __sata_set_spd_needed, final *scontrol=0x320
> [   31.517233][  T113] __sata_set_spd_needed, initial limit=0x2
> [   31.523272][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   31.528975][  T113] __sata_set_spd_needed, target=0x2
> [   31.534852][  T113] __sata_set_spd_needed, spd=0x0
> [   31.539933][  T113] __sata_set_spd_needed, final *scontrol=0x324
> [   31.545834][  T113] resume, do loop
> [   31.773802][  T113] resume, after do loop
> [   31.833802][  T113] debounce, SCR=0x101
> ...
> [   32.433802][  T113] debounce, SCR=0x100
> [   32.437663][  T113] resume, return at end of function
> [   32.441522][  T113] hardreset, ata_phys_link_offline check failed
> [   32.446624][  T113] ata2: SATA link down (SStatus 100 SControl 320)
> [   32.459090][  T113] sata_down_spd_limit: limit 0x1, cur spd 0x0, saved limit 0xffffffff, hw limit 0xffffffff
> [   32.468982][  T113] ata2: No reported SATA link speed. Limiting to 3.0 Gbps
> [   32.475999][  T113] hardreset, Online=>Offline
> [   32.476005][  T113] sata_set_spd_needed, scontrol=0x320
> [   32.480474][  T113] __sata_set_spd_needed, initial limit=0x2
> [   32.485741][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   32.491432][  T113] __sata_set_spd_needed, target=0x2
> [   32.497315][  T113] __sata_set_spd_needed, spd=0x2
> [   32.502395][  T113] __sata_set_spd_needed, final *scontrol=0x320
> [   32.508296][  T113] resume, do loop
> [   32.743801][  T113] resume, after do loop
> [   32.803802][  T113] debounce, SCR=0x100
> ...
> [   34.423802][  T113] debounce, SCR=0x100
> [   34.427662][  T113] resume, return at end of function
> [   34.431520][  T113] hardreset, ata_phys_link_offline check failed
> [   34.436624][  T113] ata2: SATA link down (SStatus 100 SControl 320)
> [   34.449088][  T113] sata_down_spd_limit: limit 0x1, cur spd 0x0, saved limit 0xffffffff, hw limit 0xffffffff
> [   34.458981][  T113] ata2: No reported SATA link speed. Limiting to 3.0 Gbps
> [   34.465998][  T113] hardreset, Online=>Offline
> [   34.466004][  T113] sata_set_spd_needed, scontrol=0x320
> [   34.470473][  T113] __sata_set_spd_needed, initial limit=0x2
> [   34.475740][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   34.481430][  T113] __sata_set_spd_needed, target=0x2
> [   34.487314][  T113] __sata_set_spd_needed, spd=0x2
> [   34.492393][  T113] __sata_set_spd_needed, final *scontrol=0x320
> [   34.498294][  T113] resume, do loop
> [   34.723823][  T113] resume, after do loop
> [   34.783802][  T113] debounce, SCR=0x101
> ...
> [   36.763802][  T113] debounce, SCR=0x100
> [   36.767662][  T113] debounce, loop end with timeout
> [   36.771521][  T113] hardreset, sata_link_resume check failed
> [   36.776445][  T113] ata2: COMRESET failed (errno=-32)
> [   36.787224][  T113] ata2: reset failed (errno=-32), retrying in 8 secs
> [   44.643801][  T113] sata_down_spd_limit: limit 0x0, cur spd 0x0, saved limit 0x2, hw limit 0xffffffff
> [   44.653073][  T113] hardreset, Online=>Offline
> [   44.653079][  T113] sata_set_spd_needed, scontrol=0x320
> [   44.657569][  T113] __sata_set_spd_needed, initial limit=0x2
> [   44.662823][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   44.668527][  T113] __sata_set_spd_needed, target=0x2
> [   44.674403][  T113] __sata_set_spd_needed, spd=0x2
> [   44.679484][  T113] __sata_set_spd_needed, final *scontrol=0x320
> [   44.685385][  T113] resume, do loop
> [   44.913802][  T113] resume, after do loop
> [   44.973802][  T113] debounce, SCR=0x100
> ...
> [   46.233802][  T113] debounce, SCR=0x100
> [   46.237663][  T113] resume, return at end of function
> [   46.241520][  T113] hardreset, ata_phys_link_offline check failed
> [   46.246622][  T113] ata2: SATA link down (SStatus 100 SControl 320)
> [   46.259088][  T113] sata_down_spd_limit: limit 0x1, cur spd 0x0, saved limit 0xffffffff, hw limit 0xffffffff
> [   46.268981][  T113] ata2: No reported SATA link speed. Limiting to 3.0 Gbps
> [   46.275997][  T113] hardreset, Online=>Offline
> [   46.276003][  T113] sata_set_spd_needed, scontrol=0x320
> [   46.280473][  T113] __sata_set_spd_needed, initial limit=0x2
> [   46.285740][  T113] __sata_set_spd_needed, corrected limit=0x2
> [   46.291430][  T113] __sata_set_spd_needed, target=0x2
> [   46.297314][  T113] __sata_set_spd_needed, spd=0x2
> [   46.302394][  T113] __sata_set_spd_needed, final *scontrol=0x320
> [   46.308296][  T113] resume, do loop
> [   46.543802][  T113] resume, after do loop
> [   46.603802][  T113] debounce, SCR=0x100
> ...
> [   47.683802][  T113] debounce, SCR=0x100
> [   47.687662][  T113] resume, return at end of function
> [   47.691520][  T113] hardreset, ata_phys_link_offline check failed
> [   47.696636][  T113] ata2: SATA link down (SStatus 101 SControl 320)
> [   47.709086][  T113] ata2: EH pending after 5 tries, giving up
> 
> Marius Dinu
> 

-- 
Damien Le Moal
Western Digital Research




[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux