@@ -3575,7 +3575,6 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)
{
struct ata_port *ap = link->ap;
struct ata_eh_context *ehc = &link->eh_context;
- const unsigned long *timing = sata_ehc_deb_timing(ehc);
int rc;
/* if we're about to do hardreset, nothing more to do */
@@ -3584,7 +3583,7 @@ int ata_std_prereset(struct ata_link *link, unsigned long deadline)
/* if SATA, resume link */
if (ap->flags & ATA_FLAG_SATA) {
- rc = sata_link_resume(link, timing, deadline);
+ rc = sata_link_resume(link, deadline);
/* whine about phy resume failure but proceed */
if (rc && rc != -EOPNOTSUPP)
ata_link_warn(link,
@@ -279,22 +279,9 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params,
}
EXPORT_SYMBOL_GPL(sata_link_debounce);
-/**
- * sata_link_resume - resume SATA link
- * @link: ATA link to resume SATA
- * @params: timing parameters { interval, duration, timeout } in msec
- * @deadline: deadline jiffies for the operation
- *
- * Resume SATA phy @link and debounce it.
- *
- * LOCKING:
- * Kernel thread context (may sleep)
- *
- * RETURNS:
- * 0 on success, -errno on failure.
- */
-int sata_link_resume(struct ata_link *link, const unsigned long *params,
- unsigned long deadline)
+static int __sata_link_resume(struct ata_link *link,
+ const unsigned long *timing,
+ unsigned long deadline)
{
int tries = ATA_LINK_RESUME_TRIES;
u32 scontrol, serror;
@@ -335,7 +322,7 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params,
ata_link_warn(link, "link resume succeeded after %d retries\n",
ATA_LINK_RESUME_TRIES - tries);
- if ((rc = sata_link_debounce(link, params, deadline)))
+ if ((rc = sata_link_debounce(link, timing, deadline)))
return rc;
/* clear SError, some PHYs require this even for SRST to work */
@@ -344,6 +331,25 @@ int sata_link_resume(struct ata_link *link, const unsigned long *params,
return rc != -EINVAL ? rc : 0;
}
+
+/**
+ * sata_link_resume - resume SATA link
+ * @link: ATA link to resume SATA
+ * @deadline: deadline jiffies for the operation
+ *
+ * Resume SATA phy @link and debounce it.
+ *
+ * LOCKING:
+ * Kernel thread context (may sleep)
+ *
+ * RETURNS:
+ * 0 on success, -errno on failure.
+ */
+int sata_link_resume(struct ata_link *link, unsigned long deadline)
+{
+ return __sata_link_resume(link,
+ sata_ehc_deb_timing(&link->eh_context), deadline);
+}
EXPORT_SYMBOL_GPL(sata_link_resume);
/**
@@ -568,7 +574,7 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
ata_msleep(link->ap, 1);
/* bring link back */
- rc = sata_link_resume(link, timing, deadline);
+ rc = __sata_link_resume(link, timing, deadline);
if (rc)
goto out;
/* if link is offline nothing more to do */
@@ -621,7 +621,6 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class,
struct ata_port *ap = link->ap;
void __iomem *port_base = inic_port_base(ap);
void __iomem *idma_ctl = port_base + PORT_IDMA_CTL;
- const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
int rc;
/* hammer it into sane state */
@@ -632,7 +631,7 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class,
ata_msleep(ap, 1);
writew(0, idma_ctl);
- rc = sata_link_resume(link, timing, deadline);
+ rc = sata_link_resume(link, deadline);
if (rc) {
ata_link_warn(link,
"failed to resume link after reset (errno=%d)\n",
@@ -1529,7 +1529,6 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class,
sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
NULL, NULL);
else {
- const unsigned long *timing = sata_ehc_deb_timing(ehc);
int rc;
if (!(ehc->i.flags & ATA_EHI_QUIET))
@@ -1537,7 +1536,7 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class,
"nv: skipping hardreset on occupied port\n");
/* make sure the link is online */
- rc = sata_link_resume(link, timing, deadline);
+ rc = sata_link_resume(link, deadline);
/* whine about phy resume failure but proceed */
if (rc && rc != -EOPNOTSUPP)
ata_link_warn(link, "failed to resume link (errno=%d)\n",
@@ -1171,8 +1171,7 @@ extern int sata_set_spd(struct ata_link *link);
extern int sata_link_hardreset(struct ata_link *link,
const unsigned long *timing, unsigned long deadline,
bool *online, int (*check_ready)(struct ata_link *));
-extern int sata_link_resume(struct ata_link *link, const unsigned long *params,
- unsigned long deadline);
+extern int sata_link_resume(struct ata_link *link, unsigned long deadline);
extern void ata_eh_analyze_ncq_error(struct ata_link *link);
#else
static inline const unsigned long *
@@ -1205,7 +1204,6 @@ static inline int sata_link_hardreset(struct ata_link *link,
return -EOPNOTSUPP;
}
static inline int sata_link_resume(struct ata_link *link,
- const unsigned long *params,
unsigned long deadline)
{
return -EOPNOTSUPP;
When called directly outside of sata_link_hardreset(), the debounce timing array passed to sata_link_resume() is always the array returned by sata_ehc_deb_timing() for the target link. Based on this, the interface of sata_link_resume() can be simplified by removing the params argument. The timing array is infered locally using sata_ehc_deb_timing(). To allow sata_link_hardreset() to specify a timing array, the helper function __sata_link_resume() is introduced and sata_link_resume() implemented using this helper. Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> --- drivers/ata/libata-core.c | 3 +-- drivers/ata/libata-sata.c | 42 +++++++++++++++++++++---------------- drivers/ata/sata_inic162x.c | 3 +-- drivers/ata/sata_nv.c | 3 +-- include/linux/libata.h | 4 +--- 5 files changed, 28 insertions(+), 27 deletions(-)