Re: AHCI support Port Multiplier problem.
From: Tejun Heo <tj@kernel.org>
Date: 2011-01-11 14:37:42
Hi, On Mon, Jan 10, 2011 at 09:46:45AM +0800, Luo Dislo wrote:
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. 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.
Please take a look at ahci_sb600_softreset() in ahci.c. The controller had the same problem. Preferably, please fix your controller but as there are more than one controller with this problem, we probably should implement it as a quirk in libahci.c. Thanks. -- tejun