sata: ahci: export ahci_do_hardreset() locally
We need a way to retrieve the information about the online state of the link in the ahci-da850 driver. Create a new function: ahci_do_hardreset() which is called from ahci_hardreset() for backwards compatibility, but has an additional argument: 'online' - which can be used to check if the link is online after this function returns. The new routine will be used in the ahci-da850 driver to avoid code duplication when implementing a workaround for tha da850 SATA controller quirk/instability. Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Sekhar Nori <nsekhar@ti.com>
This commit is contained in:
parent
f4d435f326
commit
d436501e06
|
@ -398,6 +398,9 @@ int ahci_do_softreset(struct ata_link *link, unsigned int *class,
|
||||||
int pmp, unsigned long deadline,
|
int pmp, unsigned long deadline,
|
||||||
int (*check_ready)(struct ata_link *link));
|
int (*check_ready)(struct ata_link *link));
|
||||||
|
|
||||||
|
int ahci_do_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
|
unsigned long deadline, bool *online);
|
||||||
|
|
||||||
unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
|
unsigned int ahci_qc_issue(struct ata_queued_cmd *qc);
|
||||||
int ahci_stop_engine(struct ata_port *ap);
|
int ahci_stop_engine(struct ata_port *ap);
|
||||||
void ahci_start_fis_rx(struct ata_port *ap);
|
void ahci_start_fis_rx(struct ata_port *ap);
|
||||||
|
|
|
@ -1519,8 +1519,8 @@ static int ahci_pmp_retry_softreset(struct ata_link *link, unsigned int *class,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ahci_hardreset(struct ata_link *link, unsigned int *class,
|
int ahci_do_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
unsigned long deadline)
|
unsigned long deadline, bool *online)
|
||||||
{
|
{
|
||||||
const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
|
const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
|
||||||
struct ata_port *ap = link->ap;
|
struct ata_port *ap = link->ap;
|
||||||
|
@ -1528,7 +1528,6 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
struct ahci_host_priv *hpriv = ap->host->private_data;
|
struct ahci_host_priv *hpriv = ap->host->private_data;
|
||||||
u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
|
u8 *d2h_fis = pp->rx_fis + RX_FIS_D2H_REG;
|
||||||
struct ata_taskfile tf;
|
struct ata_taskfile tf;
|
||||||
bool online;
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
DPRINTK("ENTER\n");
|
DPRINTK("ENTER\n");
|
||||||
|
@ -1540,17 +1539,26 @@ static int ahci_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
tf.command = ATA_BUSY;
|
tf.command = ATA_BUSY;
|
||||||
ata_tf_to_fis(&tf, 0, 0, d2h_fis);
|
ata_tf_to_fis(&tf, 0, 0, d2h_fis);
|
||||||
|
|
||||||
rc = sata_link_hardreset(link, timing, deadline, &online,
|
rc = sata_link_hardreset(link, timing, deadline, online,
|
||||||
ahci_check_ready);
|
ahci_check_ready);
|
||||||
|
|
||||||
hpriv->start_engine(ap);
|
hpriv->start_engine(ap);
|
||||||
|
|
||||||
if (online)
|
if (*online)
|
||||||
*class = ahci_dev_classify(ap);
|
*class = ahci_dev_classify(ap);
|
||||||
|
|
||||||
DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
|
DPRINTK("EXIT, rc=%d, class=%u\n", rc, *class);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ahci_do_hardreset);
|
||||||
|
|
||||||
|
static int ahci_hardreset(struct ata_link *link, unsigned int *class,
|
||||||
|
unsigned long deadline)
|
||||||
|
{
|
||||||
|
bool online;
|
||||||
|
|
||||||
|
return ahci_do_hardreset(link, class, deadline, &online);
|
||||||
|
}
|
||||||
|
|
||||||
static void ahci_postreset(struct ata_link *link, unsigned int *class)
|
static void ahci_postreset(struct ata_link *link, unsigned int *class)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue