]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit36a816fbbd0f459e73d2897384dddda85e5c4041
treea5fe675e574d50f1fae48ac7df725861d872e484
parent93fc4ef545fe45f3c6c0a1128eb7e5651a7e0e82
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