Re: AHCI support Port Multiplier problem.

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

 



On 01/09/2011 07:46 PM, Luo Dislo wrote:
Hello,

This is my company(Faraday) implemented AHCI SATA controller. Our
controller is not located at PCI bus, but AHB bus(ARM based platform).

However, I modify Linux kernel builtin AHCI driver(ahci.c) to replace
the PCI related code by using platform bus. Just pretty similar way
with drivers/ata/ahci_platform.c (Kernel 2.6.35).

I think the problem happens because libata does not give up, keep on
expecting the Port Multiplier Signature when we set CONFIG_SATA_PMP
to 1.

It shouldn't be expecting only a PMP signature in this case if there is no PMP connected. The PMP spec states:

"To determine if a Port Multiplier is present, the host performs the following procedure. The host will determine if communication is established on the hostâs Serial ATA port by checking the hostâs SStatus register. If a device is present, the host will issue a software reset with the PM Port field set to the control port. The host will check the signature value returned and if it corresponds to the Port Multiplier Signature, the host knows that a Port Multiplier is present. If the signature value does not correspond to a Port Multiplier, the host may proceed with the normal initialization sequence for that device type."

The code is doing this. However, I suspect the problem is that on some controllers, it won't fill in the signature as expected if the PMP field on the received D2H Register FIS doesn't match the one listed in the command 15, for the PMP control port), which it won't if there's no PMP connected. I'm not sure if this is the intent of the AHCI spec or not, but in any case it appears that a number of controllers have this issue. I suspect that retrying with PMP=0 if the softreset with PMP=15 failed to acquire a signature is likely the thing to do.



I know how to fix this problem, just add AHCI_HFLAG_NO_PMP to AHCI_HFLAGS when I connect hard drive to the controller. Meanwhile, when I want to connect the Port Muliplier to my controller, I need to remove AHCI_HFLAG_NO_PMP from AHCI_HFLAGS.

I don't think this is a good solution because I have to compile two version of my code. It does not make sense. We set CONFIG_SATA_PMP to 1 and inside the driver code DOES NOT have AHCI_HFLAG_NO_PMP just means that controller support Port Multiplier but the device connecting to the port might be others type.



Regards,

Dislo




--- 11/1/8 (å)ïTejun Heo<tj@xxxxxxxxxx>  åéï

åäè: Tejun Heo<tj@xxxxxxxxxx>
äæ: Re: AHCI support Port Multiplier problem.
æäè: "Luo Dislo"<dislo_b_j@xxxxxxxxxxxx>
åæ: jgarzik@xxxxxxxxx, linux-ide@xxxxxxxxxxxxxxx
ææ: 2011å1æ8æ,å,äå5:25
Hello,

On Fri, Jan 07, 2011 at 10:55:14AM +0800, Luo Dislo wrote:
I am using AHCI driver, when CONFIG_SATA_PMP is set
and the ahci
driver DOES NOT have AHCI_HFLAG_NO_PMP. Libata sends
Software Reset
with PMP=0xF, trying to detect if Port Multiplier
connected to the
port. Unfortunately, if I plugged in general Hard
drive, my
controller failed to identify the hard drive.

What I observed was that libata always sent Software
Reset with
PMP=0xF and I guessed expecting signature is
0x96690101. I think
libata should give up if the device does not return
the Port
Multiplier signature at the first time and take the
signature value
from device as the real device connnecting to the port
now.

What we said "support" PMP does not mean the port can
only connnect
to Port Multiplier. It might connect with hard drive
or ATAPI
device.

Which controller is this?  Can you please post the
output of "lspci
-nn"?  SB600 had this problem and needed workaround
but later SBs
fixed it.  Looks like someone else screwed up
similarly.

Thanks.

--
tejun




--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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