Re: Bug report for ahci-mvebu driver

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

 



On 12/4/22 10:41, marius@xxxxxxxxxxxxxx wrote:
> November 24, 2022 4:40 AM, "Damien Le Moal" <damien.lemoal@xxxxxxxxxxxxxxxxxx> wrote:
> 
>> So the hardware is failing to detect the device presence. No clue why.
>> Only an ATA bus trace could tell us more here (do you have an ATA bus
>> analyzer around ?).
> 
> No. :-)
> 
>> So options are:
>> 1) Involve the router vendor and/or SoC vendor to see if they can help.
>> 2) Use UDB connection between your router & drive box ? (if you can)
>>
>> Another thing is: Did you try earlier kernel versions ? Any earlier kernel
>> working ? (I forgot if that is the case). If yes, then we should be able
>> to figure out the change that broke the driver (which may be something
>> changed in the SoC support rather than the mvebu driver itself).
>> gi-bisect will likely not be of any help given that you are not getting a
>> crash. So you will need to try out different kernel versions, starting
>> with LTS kernels, and refine (use Linus tags, including RCs, to find the
>> last working kernel). That may take some time, but will likely narrow down
>> the search for fixing this (if that is possible given the hardware setup
>> you have).
> 
> Sorry for the late reply, but I really really hate bisecting, especially manually, and especially if the test must be run on another machine.
> You are correct. It initially worked, but it was broken by this commit:
> 
> 
> commit 2dc0b46b5ea30f169b0b272253ea846a5a281731
> Author: David Milburn <dmilburn@xxxxxxxxxx>
> Date:   Tue Nov 14 16:17:25 2017 -0600
> 
>     libata: sata_down_spd_limit should return if driver has not recorded sstatus speed
>     
>     During hotplug, it is possible for 6Gbps link speed to be limited all
>     the way down to 1.5 Gbps which may lead to a slower link speed when
>     drive is re-connected.
>     
>     This behavior has been seen on a Intel Lewisburg SATA controller
>     (8086:a1d2) with HGST HUH728080ALE600 drive where SATA link speed was
>     limited to 1.5 Gbps and when re-connected the link came up 3.0 Gbps.
>     
>     This patch was retested on above configuration and showed the
>     hotplugged link to come back online at max speed (6Gbps). I did not
>     see the downgrade when testing on Intel C600/X79, but retested patched
>     linux-4.14-rc5 kernel and didn't see any side effects from this
>     change. Also, successfully retested hotplug on port multiplier 3Gbps
>     link.
>     
>     tj: Minor comment updates.
>     
>     Signed-off-by: David Milburn <dmilburn@xxxxxxxxxx>
>     Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
> 
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index 2a882929de4a..8193b38a1cae 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -3082,13 +3082,19 @@ int sata_down_spd_limit(struct ata_link *link, u32 spd_limit)
>  	bit = fls(mask) - 1;
>  	mask &= ~(1 << bit);
>  
> -	/* Mask off all speeds higher than or equal to the current
> -	 * one.  Force 1.5Gbps if current SPD is not available.
> +	/*
> +	 * Mask off all speeds higher than or equal to the current one.  At
> +	 * this point, if current SPD is not available and we previously
> +	 * recorded the link speed from SStatus, the driver has already
> +	 * masked off the highest bit so mask should already be 1 or 0.
> +	 * Otherwise, we should not force 1.5Gbps on a link where we have
> +	 * not previously recorded speed from SStatus.  Just return in this
> +	 * case.
>  	 */
>  	if (spd > 1)
>  		mask &= (1 << (spd - 1)) - 1;
>  	else
> -		mask &= 1;
> +		return -EINVAL;
>  
>  	/* were we already at the bottom? */
>  	if (!mask)

Without reverting the above patch, could you please try the following patch ?


diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c
index 22ecc4f3ae79..396aacc3fbd1 100644
--- a/drivers/ata/ahci_mvebu.c
+++ b/drivers/ata/ahci_mvebu.c
@@ -203,8 +203,6 @@ static int ahci_mvebu_probe(struct platform_device *pdev)
        if (rc)
                return rc;

-       hpriv->stop_engine = ahci_mvebu_stop_engine;
-
        rc = pdata->plat_config(hpriv);
        if (rc)
                goto disable_resources;


This essentially disables the use of ahci_mvebu_stop_engine() function for
your adapter, that is, it assumes that your newer adapter is not subject
to errata Ref#226. If this helps, then we can have a cleaner fix using the
compatible string for the adapter/SoC.

Otherwise, we will need to add a quirk for this adapter to have a behavior
for it that is the same as if patch 2dc0b46b5ea3 is reverted.

By the way, what is the maximum speed of you pmp box ? Is it really 1.5
Gbps (sata gen 1) ?


-- 
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