ata: ahci: mvebu: override ahci_stop_engine for mvebu AHCI
authorEvan Wang <xswang@marvell.com>
Fri, 13 Apr 2018 04:32:31 +0000 (12:32 +0800)
committerTejun Heo <tj@kernel.org>
Thu, 26 Apr 2018 18:25:15 +0000 (11:25 -0700)
commitdaa2e3bdbb0b3e691cf20a042350817310cb8cb5
treea5fe675e574d50f1fae48ac7df725861d872e484
parentfa89f53bd7288d6aa7a982841119e7123faf5a53
ata: ahci: mvebu: override ahci_stop_engine for mvebu AHCI

There is an issue(Errata Ref#226) that the SATA can not be
detected via SATA Port-MultiPlayer(PMP) with following
error log:
  ata1.15: PMP product ID mismatch
  ata1.15: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
  ata1.15: Port Multiplier vendor mismatch '0x1b4b'!='0x0'
  ata1.15: PMP revalidation failed (errno=-19)

After debugging, the reason is found that the value Port-x
FIS-based Switching Control(PxFBS@0x40) become wrong.
According to design, the bits[11:8, 0] of register PxFBS
are cleared when Port Command and Status (0x18) bit[0]
changes its value from 1 to 0, i.e. falling edge of Port
Command and Status bit[0] sends PULSE that resets PxFBS
bits[11:8; 0].
So it needs a mvebu SATA WA to save the port PxFBS register
before PxCMD ST write and restore it afterwards.

This patch implements the WA in a separate function of
ahci_mvebu_stop_engine to override ahci_stop_gngine.

Signed-off-by: Evan Wang <xswang@marvell.com>
Cc: Ofer Heifetz <oferh@marvell.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/ahci_mvebu.c