• E
    ata: ahci: mvebu: override ahci_stop_engine for mvebu AHCI · daa2e3bd
    Evan Wang 提交于
    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: NEvan 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: NTejun Heo <tj@kernel.org>
    daa2e3bd
ahci_mvebu.c 5.8 KB