* [PATCH 1/1] AHCI: Fix softreset failed issue of Port Multiplier
@ 2015-11-26 12:27 Xiangliang Yu
2015-11-30 15:01 ` Tejun Heo
0 siblings, 1 reply; 2+ messages in thread
From: Xiangliang Yu @ 2015-11-26 12:27 UTC (permalink / raw)
To: tj, linux-ide, linux-kernel; +Cc: SPG_Linux_Kernel, Xiangliang Yu
Current code doesn't update port value of Port Multiplier(PM) when
sending FIS of softreset to device, command will fail if FBS is
enabled.
There are two ways to fix the issue: the first is to disable FBS
before sending softreset command to PM device and the second is
to update port value of PM when sending command.
For the first way, i can't find any related rule in AHCI Spec. The
second way can avoid disabling FBS and has better performance.
Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
---
drivers/ata/libahci.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 096064c..4665512 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -1273,6 +1273,15 @@ static int ahci_exec_polled_cmd(struct ata_port *ap, int pmp,
ata_tf_to_fis(tf, pmp, is_cmd, fis);
ahci_fill_cmd_slot(pp, 0, cmd_fis_len | flags | (pmp << 12));
+ /* set port value for softreset of Port Multiplier */
+ if (pp->fbs_enabled && pp->fbs_last_dev != pmp) {
+ tmp = readl(port_mmio + PORT_FBS);
+ tmp &= ~(PORT_FBS_DEV_MASK | PORT_FBS_DEC);
+ tmp |= pmp << PORT_FBS_DEV_OFFSET;
+ writel(tmp, port_mmio + PORT_FBS);
+ pp->fbs_last_dev = pmp;
+ }
+
/* issue & wait */
writel(1, port_mmio + PORT_CMD_ISSUE);
--
1.9.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 1/1] AHCI: Fix softreset failed issue of Port Multiplier
2015-11-26 12:27 [PATCH 1/1] AHCI: Fix softreset failed issue of Port Multiplier Xiangliang Yu
@ 2015-11-30 15:01 ` Tejun Heo
0 siblings, 0 replies; 2+ messages in thread
From: Tejun Heo @ 2015-11-30 15:01 UTC (permalink / raw)
To: Xiangliang Yu; +Cc: linux-ide, linux-kernel, SPG_Linux_Kernel
On Thu, Nov 26, 2015 at 08:27:02PM +0800, Xiangliang Yu wrote:
> Current code doesn't update port value of Port Multiplier(PM) when
> sending FIS of softreset to device, command will fail if FBS is
> enabled.
>
> There are two ways to fix the issue: the first is to disable FBS
> before sending softreset command to PM device and the second is
> to update port value of PM when sending command.
>
> For the first way, i can't find any related rule in AHCI Spec. The
> second way can avoid disabling FBS and has better performance.
>
> Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
Applied to libata/for-4.4-fixes w/ stable cc'd.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-11-30 15:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-26 12:27 [PATCH 1/1] AHCI: Fix softreset failed issue of Port Multiplier Xiangliang Yu
2015-11-30 15:01 ` Tejun Heo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome