|
@@ -54,7 +54,6 @@
|
|
|
#include <linux/completion.h>
|
|
|
#include <linux/suspend.h>
|
|
|
#include <linux/workqueue.h>
|
|
|
-#include <linux/jiffies.h>
|
|
|
#include <linux/scatterlist.h>
|
|
|
#include <linux/io.h>
|
|
|
#include <scsi/scsi.h>
|
|
@@ -145,7 +144,7 @@ static int libata_dma_mask = ATA_DMA_MASK_ATA|ATA_DMA_MASK_ATAPI|ATA_DMA_MASK_CF
|
|
|
module_param_named(dma, libata_dma_mask, int, 0444);
|
|
|
MODULE_PARM_DESC(dma, "DMA enable/disable (0x1==ATA, 0x2==ATAPI, 0x4==CF)");
|
|
|
|
|
|
-static int ata_probe_timeout = ATA_TMOUT_INTERNAL / HZ;
|
|
|
+static int ata_probe_timeout = ATA_TMOUT_INTERNAL / 1000;
|
|
|
module_param(ata_probe_timeout, int, 0444);
|
|
|
MODULE_PARM_DESC(ata_probe_timeout, "Set ATA probing timeout (seconds)");
|
|
|
|
|
@@ -1533,7 +1532,7 @@ unsigned long ata_id_xfermask(const u16 *id)
|
|
|
* @ap: The ata_port to queue port_task for
|
|
|
* @fn: workqueue function to be scheduled
|
|
|
* @data: data for @fn to use
|
|
|
- * @delay: delay time for workqueue function
|
|
|
+ * @delay: delay time in msecs for workqueue function
|
|
|
*
|
|
|
* Schedule @fn(@data) for execution after @delay jiffies using
|
|
|
* port_task. There is one port_task per port and it's the
|
|
@@ -1552,7 +1551,7 @@ void ata_pio_queue_task(struct ata_port *ap, void *data, unsigned long delay)
|
|
|
ap->port_task_data = data;
|
|
|
|
|
|
/* may fail if ata_port_flush_task() in progress */
|
|
|
- queue_delayed_work(ata_wq, &ap->port_task, delay);
|
|
|
+ queue_delayed_work(ata_wq, &ap->port_task, msecs_to_jiffies(delay));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1685,7 +1684,7 @@ unsigned ata_exec_internal_sg(struct ata_device *dev,
|
|
|
spin_unlock_irqrestore(ap->lock, flags);
|
|
|
|
|
|
if (!timeout)
|
|
|
- timeout = ata_probe_timeout * 1000 / HZ;
|
|
|
+ timeout = ata_probe_timeout * 1000;
|
|
|
|
|
|
rc = wait_for_completion_timeout(&wait, msecs_to_jiffies(timeout));
|
|
|
|
|
@@ -3319,7 +3318,7 @@ int ata_wait_ready(struct ata_link *link, unsigned long deadline,
|
|
|
int (*check_ready)(struct ata_link *link))
|
|
|
{
|
|
|
unsigned long start = jiffies;
|
|
|
- unsigned long nodev_deadline = start + ATA_TMOUT_FF_WAIT;
|
|
|
+ unsigned long nodev_deadline = ata_deadline(start, ATA_TMOUT_FF_WAIT);
|
|
|
int warned = 0;
|
|
|
|
|
|
if (time_after(nodev_deadline, deadline))
|
|
@@ -3387,7 +3386,7 @@ int ata_wait_ready(struct ata_link *link, unsigned long deadline,
|
|
|
int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
|
|
|
int (*check_ready)(struct ata_link *link))
|
|
|
{
|
|
|
- msleep(ATA_WAIT_AFTER_RESET_MSECS);
|
|
|
+ msleep(ATA_WAIT_AFTER_RESET);
|
|
|
|
|
|
return ata_wait_ready(link, deadline, check_ready);
|
|
|
}
|
|
@@ -3417,13 +3416,13 @@ int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
|
|
|
int sata_link_debounce(struct ata_link *link, const unsigned long *params,
|
|
|
unsigned long deadline)
|
|
|
{
|
|
|
- unsigned long interval_msec = params[0];
|
|
|
- unsigned long duration = msecs_to_jiffies(params[1]);
|
|
|
+ unsigned long interval = params[0];
|
|
|
+ unsigned long duration = params[1];
|
|
|
unsigned long last_jiffies, t;
|
|
|
u32 last, cur;
|
|
|
int rc;
|
|
|
|
|
|
- t = jiffies + msecs_to_jiffies(params[2]);
|
|
|
+ t = ata_deadline(jiffies, params[2]);
|
|
|
if (time_before(t, deadline))
|
|
|
deadline = t;
|
|
|
|
|
@@ -3435,7 +3434,7 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params,
|
|
|
last_jiffies = jiffies;
|
|
|
|
|
|
while (1) {
|
|
|
- msleep(interval_msec);
|
|
|
+ msleep(interval);
|
|
|
if ((rc = sata_scr_read(link, SCR_STATUS, &cur)))
|
|
|
return rc;
|
|
|
cur &= 0xf;
|
|
@@ -3444,7 +3443,8 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params,
|
|
|
if (cur == last) {
|
|
|
if (cur == 1 && time_before(jiffies, deadline))
|
|
|
continue;
|
|
|
- if (time_after(jiffies, last_jiffies + duration))
|
|
|
+ if (time_after(jiffies,
|
|
|
+ ata_deadline(last_jiffies, duration)))
|
|
|
return 0;
|
|
|
continue;
|
|
|
}
|
|
@@ -3636,7 +3636,8 @@ int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
|
|
|
if (check_ready) {
|
|
|
unsigned long pmp_deadline;
|
|
|
|
|
|
- pmp_deadline = jiffies + ATA_TMOUT_PMP_SRST_WAIT;
|
|
|
+ pmp_deadline = ata_deadline(jiffies,
|
|
|
+ ATA_TMOUT_PMP_SRST_WAIT);
|
|
|
if (time_after(pmp_deadline, deadline))
|
|
|
pmp_deadline = deadline;
|
|
|
ata_wait_ready(link, pmp_deadline, check_ready);
|
|
@@ -6073,8 +6074,6 @@ static void __init ata_parse_force_param(void)
|
|
|
|
|
|
static int __init ata_init(void)
|
|
|
{
|
|
|
- ata_probe_timeout *= HZ;
|
|
|
-
|
|
|
ata_parse_force_param();
|
|
|
|
|
|
ata_wq = create_workqueue("ata");
|
|
@@ -6127,8 +6126,8 @@ int ata_ratelimit(void)
|
|
|
* @reg: IO-mapped register
|
|
|
* @mask: Mask to apply to read register value
|
|
|
* @val: Wait condition
|
|
|
- * @interval_msec: polling interval in milliseconds
|
|
|
- * @timeout_msec: timeout in milliseconds
|
|
|
+ * @interval: polling interval in milliseconds
|
|
|
+ * @timeout: timeout in milliseconds
|
|
|
*
|
|
|
* Waiting for some bits of register to change is a common
|
|
|
* operation for ATA controllers. This function reads 32bit LE
|
|
@@ -6146,10 +6145,9 @@ int ata_ratelimit(void)
|
|
|
* The final register value.
|
|
|
*/
|
|
|
u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
|
|
|
- unsigned long interval_msec,
|
|
|
- unsigned long timeout_msec)
|
|
|
+ unsigned long interval, unsigned long timeout)
|
|
|
{
|
|
|
- unsigned long timeout;
|
|
|
+ unsigned long deadline;
|
|
|
u32 tmp;
|
|
|
|
|
|
tmp = ioread32(reg);
|
|
@@ -6158,10 +6156,10 @@ u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
|
|
|
* preceding writes reach the controller before starting to
|
|
|
* eat away the timeout.
|
|
|
*/
|
|
|
- timeout = jiffies + (timeout_msec * HZ) / 1000;
|
|
|
+ deadline = ata_deadline(jiffies, timeout);
|
|
|
|
|
|
- while ((tmp & mask) == val && time_before(jiffies, timeout)) {
|
|
|
- msleep(interval_msec);
|
|
|
+ while ((tmp & mask) == val && time_before(jiffies, deadline)) {
|
|
|
+ msleep(interval);
|
|
|
tmp = ioread32(reg);
|
|
|
}
|
|
|
|