From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: marius@psihoexpert.ro
Cc: linux-ide@vger.kernel.org
Subject: Re: Bug report for ahci-mvebu driver
Date: Fri, 9 Dec 2022 18:28:31 +0900 [thread overview]
Message-ID: <7521d86e-a83e-7972-a4cc-55dd7155fa43@opensource.wdc.com> (raw)
In-Reply-To: <da1d366a494469a46eb066b167613e21@psihoexpert.ro>
On 12/9/22 16:31, marius@psihoexpert.ro wrote:
> December 9, 2022 4:58 AM, "Damien Le Moal" <damien.lemoal@opensource.wdc.com> wrote:
>
>> On 12/9/22 03:06, marius@psihoexpert.ro wrote:
>>
>> Checking the specs for the SoC again, it does say:
>>
>> Gen3 Serial ATA PHY (6 Gbps) with speed negotiation to Gen1, Gen2
>>
>> So with your gen2 (3gbps) pmp box, clearly, the speed negotiation is not
>> working but limiting it to 1.5gbps seems ok. Could you add the following
>> print to see what the HW is saying it supports ?
>>
>> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
>> index 884ae73b11ea..b3925239b8b0 100644
>> --- a/drivers/ata/libata-core.c
>> +++ b/drivers/ata/libata-core.c
>> @@ -5271,6 +5271,9 @@ int sata_link_init_spd(struct ata_link *link)
>> if (rc)
>> return rc;
>>
>> + ata_link_info(link, "SCR_CONTROL = 0x%x\n",
>> + link->saved_scontrol);
>> +
>> spd = (link->saved_scontrol >> 4) & 0xf;
>> if (spd)
>> link->hw_sata_spd_limit &= (1 << spd) - 1;
>>
>> --
>> Damien Le Moal
>> Western Digital Research
>
>
> Without libata.force=2:1.5Gbps, the extra debug message appears only during boot.
> Cable connected or not - doesn't matter - the messages are the same.
>
> [ 4.480888][ T1] scsi host1: ahci-mvebu
> [ 4.485149][ T1] device: 'host1': device_add
> [ 4.489728][ T1] bus: 'scsi': add device host1
> [ 4.494544][ T1] device: 'host1': device_add
> [ 4.499589][ T1] ata1: SCR_CONTROL = 0x0
OK. So the HW is saying that it has no restrictions on the link speed.
From AHCI specs, bits 07:04 of SCR CONTROL (SControl) mean:
0h No speed negotiation restrictions
1h Limit speed negotiation to Generation 1 communication rate
2h Limit speed negotiation to a rate not greater than Generation 2
communication rate
3h Limit speed negotiation to a rate not greater than Generation 3
communication rate
> [ 4.503822][ T1] ata1: SATA max UDMA/133 mmio [mem 0xf10a8000-0xf10a9fff] port 0x100 irq 42
> [ 4.512480][ T1] ata2: SCR_CONTROL = 0x0
> [ 4.516704][ T1] ata2: SATA max UDMA/133 mmio [mem 0xf10a8000-0xf10a9fff] port 0x180 irq 42
> [ 4.525443][ T1] driver: 'ahci-mvebu': driver_bound: bound to device 'f10a8000.sata'
> [ 4.533599][ T1] bus: 'platform': really_probe: bound device f10a8000.sata to driver ahci-mvebu
>
>
> With libata.force=2:1.5Gbps, the same message appears during boot, but then, when the device is detected:
First of all, understand how PMP works: the adapter must first detect that
it is dealing with a port multiplier box, not an actual device. But on
startup, it does not know that yet and so link speed negotiation is done
with the box. Once that is done and a "PMP" device type detected, the link
speed may be changed to the lowest speed of all the devices in the box so
that the adapter can communicate with all of them over the same link.
> [ 17.624417][ T113] hardreset, Online=>Offline
> [ 17.625498][ T113] resume, do loop
> [ 17.853273][ T113] resume, after do loop
> [ 17.913272][ T113] debounce, SCR=0x113
> [ 17.973271][ T113] debounce, SCR=0x113
> [ 18.033271][ T113] debounce, SCR=0x113
> [ 18.093271][ T113] debounce, SCR=0x113
> [ 18.153271][ T113] debounce, SCR=0x113
> [ 18.213270][ T113] debounce, SCR=0x113
> [ 18.273270][ T113] debounce, SCR=0x113
> [ 18.333270][ T113] debounce, SCR=0x113
> [ 18.393271][ T113] debounce, SCR=0x113
> [ 18.397130][ T113] resume, return at end of function
> [ 18.400987][ T113] hardreset, Offline=>Online
> [ 18.410547][ T113] hardreset, sata_pmp_supported, before check_ready
> [ 18.583275][ T113] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
> [ 18.597005][ T113] ata2.15: Port Multiplier 1.2, 0x197b:0x0325 r193, 8 ports, feat 0xf/0x1f
OK. So by limiting to 1.5gbps, detection works and the adapter detects the
PMP device. The driver then goes on to probe all ports present on the PMP.
[...]
> [ 18.920044][ T113] ata2.00: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.926149][ T113] ata2.01: SCR_CONTROL = 0x300
> [ 18.930795][ T113] ata2.01: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.936889][ T113] ata2.02: SCR_CONTROL = 0x300
> [ 18.941533][ T113] ata2.02: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.947634][ T113] ata2.03: SCR_CONTROL = 0x300
> [ 18.952277][ T113] ata2.03: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.958371][ T113] ata2.04: SCR_CONTROL = 0x300
> [ 18.963015][ T113] ata2.04: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.969111][ T113] ata2.05: SCR_CONTROL = 0x300
> [ 18.973775][ T113] ata2.05: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.979846][ T113] ata2.06: SCR_CONTROL = 0x300
> [ 18.984515][ T113] ata2.06: FORCE: PHY spd limit set to 1.5Gbps
> [ 18.990586][ T113] ata2.07: SCR_CONTROL = 0x300
> [ 18.995251][ T113] ata2.07: FORCE: PHY spd limit set to 1.5Gbps
Here, the speed is limited to 1.5gbps for all ports because the kernel
option limited the link to that speed. SCR control == 0x300 means
"Transitions to both Partial and Slumber states disabled"... Hmm. May be
this is what we need: no LPM.
> [ 19.001401][ T113] ata2.00: hard resetting link
> [ 19.006066][ T113] hardreset, Online=>Offline
Not sure why it resets again here... Might be the COMRESET needed for PMP
before probing the ports.
> [ 19.006105][ T113] Reconfig spd
Which function did you add this message to ?
> [ 19.011857][ T113] resume, do loop
> [ 19.243309][ T113] resume, after do loop
> [ 19.251950][ T113] debounce, SCR=0x123
> [ 19.261104][ T113] debounce, SCR=0x123
> [ 19.270082][ T113] debounce, SCR=0x123
> [ 19.279059][ T113] debounce, SCR=0x123
> [ 19.288018][ T113] debounce, SCR=0x123
> [ 19.296978][ T113] debounce, SCR=0x123
> [ 19.305937][ T113] debounce, SCR=0x123
> [ 19.314896][ T113] debounce, SCR=0x123
> [ 19.323855][ T113] debounce, SCR=0x123
> [ 19.332813][ T113] debounce, SCR=0x123
> [ 19.341790][ T113] debounce, SCR=0x123
> [ 19.350768][ T113] debounce, SCR=0x123
> [ 19.354706][ T113] resume, return at end of function
> [ 19.358595][ T113] hardreset, Offline=>Online
> [ 19.368155][ T113] hardreset, after check_ready
> [ 19.368372][ T113] ata2.00: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
So now the PMP box speed is negotiated at 3gbps at it should have in the
first place. Weird. The option should still force limit it to 1.5gbps...
> [ 19.380239][ T113] ata2.01: hard resetting link
> [ 19.384903][ T113] hardreset, Online=>Offline
> [ 19.384940][ T113] Reconfig spd
> [ 19.390688][ T113] resume, do loop
> [ 19.623306][ T113] resume, after do loop
> [ 19.631947][ T113] debounce, SCR=0x123
> [ 19.641098][ T113] debounce, SCR=0x123
> [ 19.650075][ T113] debounce, SCR=0x123
> [ 19.659053][ T113] debounce, SCR=0x123
> [ 19.668011][ T113] debounce, SCR=0x123
> [ 19.676970][ T113] debounce, SCR=0x123
> [ 19.685929][ T113] debounce, SCR=0x123
> [ 19.694889][ T113] debounce, SCR=0x123
> [ 19.703847][ T113] debounce, SCR=0x123
> [ 19.712805][ T113] debounce, SCR=0x123
> [ 19.721782][ T113] debounce, SCR=0x123
> [ 19.730760][ T113] debounce, SCR=0x123
> [ 19.734699][ T113] resume, return at end of function
> [ 19.738587][ T113] hardreset, Offline=>Online
> [ 19.748146][ T113] hardreset, after check_ready
> [ 19.748363][ T113] ata2.01: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
And the first port gets 3gbps too.
> ...
>
>
> I had the impression that speed always starts low and is negociated up (1.5 -> 3 -> 6), not starting high and decreased. How would negociation work if the speed is too high and one of the devices can't communicate?
The speed will start at the highest auto-negotiated speed, at the HW
level. The ahci driver will however lower it if it sees errors during
probe and try probe again with the lower speed.
What I do not understand here is why after the second reset we get 3gbps.
The libata.force parameter seems to be ignored and auto-negociation
working, detecting the pmp at 3gbps. Need to dig into that...
In the mean time, can you try this kernel boot option:
libata.force=2:nolpm
without the "2:1.5Gbps" option.
>
> I tried the pmp box on other computers. ATI/AMD AHCI, Jmicron PATA/SATA combo card, Intel ICH7. None of these have any errors in the log.
>
> Marius Dinu
>
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2022-12-09 9:28 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-01 19:21 Bug report for ahci-mvebu driver Dinu Marius
2022-11-06 7:05 ` Damien Le Moal
2022-11-07 9:22 ` marius
2022-11-08 6:27 ` Damien Le Moal
2022-11-09 19:52 ` marius
2022-11-09 19:55 ` marius
2022-11-10 2:05 ` Damien Le Moal
2022-11-11 22:32 ` marius
2022-11-12 1:57 ` Damien Le Moal
2022-11-14 20:52 ` marius
2022-11-15 3:02 ` Damien Le Moal
2022-11-15 7:28 ` marius
2022-11-15 8:10 ` Damien Le Moal
2022-11-18 18:24 ` Dinu Marius
2022-11-24 2:40 ` Damien Le Moal
2022-12-04 1:41 ` marius
2022-12-04 10:22 ` Pali Rohár
2022-12-04 21:14 ` marius
2022-12-04 21:46 ` Pali Rohár
2022-12-05 2:02 ` Damien Le Moal
2022-12-06 6:08 ` Damien Le Moal
2022-12-07 18:27 ` marius
2022-12-07 21:54 ` Damien Le Moal
2022-12-07 22:51 ` Damien Le Moal
2022-12-08 18:06 ` marius
2022-12-09 0:34 ` Damien Le Moal
2022-12-09 2:58 ` Damien Le Moal
2022-12-09 7:31 ` marius
2022-12-09 9:28 ` Damien Le Moal [this message]
2022-12-09 18:30 ` marius
2023-01-14 18:01 ` marius
2023-01-15 23:37 ` Damien Le Moal
2023-01-17 8:26 ` Damien Le Moal
2023-01-18 19:43 ` marius
2023-01-19 0:29 ` Damien Le Moal
2023-01-19 18:46 ` marius
2023-01-23 7:02 ` Damien Le Moal
2023-01-23 20:00 ` marius
2023-01-23 23:00 ` Damien Le Moal
2023-01-24 8:04 ` marius
2023-01-24 9:53 ` Damien Le Moal
2023-01-24 17:02 ` marius
2023-01-27 5:13 ` Damien Le Moal
2023-01-27 6:28 ` Damien Le Moal
2023-01-28 17:08 ` marius
2023-01-29 2:23 ` Damien Le Moal
2023-01-29 10:24 ` marius
2023-01-30 1:16 ` Damien Le Moal
2023-01-30 2:38 ` Damien Le Moal
2023-01-30 7:23 ` marius
2023-01-30 7:37 ` Damien Le Moal
2023-01-30 23:22 ` Damien Le Moal
2023-01-31 7:20 ` marius
2023-01-31 7:28 ` Damien Le Moal
2023-02-07 18:40 ` marius
2023-02-07 23:39 ` Damien Le Moal
2023-02-08 12:17 ` marius
2023-02-08 23:00 ` Damien Le Moal
2023-02-12 13:14 ` marius
2023-02-12 23:11 ` Damien Le Moal
2023-01-24 17:06 ` Bug report for sata_via driver marius
2023-01-25 1:26 ` Damien Le Moal
2022-12-08 21:26 ` Bug report for ahci-mvebu driver Pali Rohár
2022-12-09 1:54 ` Damien Le Moal
2022-11-26 14:26 ` Pali Rohár
2023-01-23 9:10 ` Hajo Noerenberg
2023-01-23 12:13 ` Damien Le Moal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7521d86e-a83e-7972-a4cc-55dd7155fa43@opensource.wdc.com \
--to=damien.lemoal@opensource.wdc.com \
--cc=linux-ide@vger.kernel.org \
--cc=marius@psihoexpert.ro \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox