pata_pdc2027x: Use 64-bit timekeeping
Function pdc_detect_pll_input_clock uses 'struct timeval' to measure start and end times, used to compute the pll_clock value. 'struct timeval' on 32-bit systems will have its tv_sec field overflow in year 2038 and beyond. This patch uses 'ktime_t' (which uses 64 bits for seconds) for start and end times instead. Suggested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Tina Ruchandani <ruchandani.tina@gmail.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
552941503b
commit
cedda4c3b1
|
@ -28,6 +28,7 @@
|
||||||
#include <linux/blkdev.h>
|
#include <linux/blkdev.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/ktime.h>
|
||||||
#include <scsi/scsi.h>
|
#include <scsi/scsi.h>
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
|
@ -605,7 +606,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||||
void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR];
|
void __iomem *mmio_base = host->iomap[PDC_MMIO_BAR];
|
||||||
u32 scr;
|
u32 scr;
|
||||||
long start_count, end_count;
|
long start_count, end_count;
|
||||||
struct timeval start_time, end_time;
|
ktime_t start_time, end_time;
|
||||||
long pll_clock, usec_elapsed;
|
long pll_clock, usec_elapsed;
|
||||||
|
|
||||||
/* Start the test mode */
|
/* Start the test mode */
|
||||||
|
@ -616,14 +617,14 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||||
|
|
||||||
/* Read current counter value */
|
/* Read current counter value */
|
||||||
start_count = pdc_read_counter(host);
|
start_count = pdc_read_counter(host);
|
||||||
do_gettimeofday(&start_time);
|
start_time = ktime_get();
|
||||||
|
|
||||||
/* Let the counter run for 100 ms. */
|
/* Let the counter run for 100 ms. */
|
||||||
mdelay(100);
|
mdelay(100);
|
||||||
|
|
||||||
/* Read the counter values again */
|
/* Read the counter values again */
|
||||||
end_count = pdc_read_counter(host);
|
end_count = pdc_read_counter(host);
|
||||||
do_gettimeofday(&end_time);
|
end_time = ktime_get();
|
||||||
|
|
||||||
/* Stop the test mode */
|
/* Stop the test mode */
|
||||||
scr = ioread32(mmio_base + PDC_SYS_CTL);
|
scr = ioread32(mmio_base + PDC_SYS_CTL);
|
||||||
|
@ -632,8 +633,7 @@ static long pdc_detect_pll_input_clock(struct ata_host *host)
|
||||||
ioread32(mmio_base + PDC_SYS_CTL); /* flush */
|
ioread32(mmio_base + PDC_SYS_CTL); /* flush */
|
||||||
|
|
||||||
/* calculate the input clock in Hz */
|
/* calculate the input clock in Hz */
|
||||||
usec_elapsed = (end_time.tv_sec - start_time.tv_sec) * 1000000 +
|
usec_elapsed = (long) ktime_us_delta(end_time, start_time);
|
||||||
(end_time.tv_usec - start_time.tv_usec);
|
|
||||||
|
|
||||||
pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 *
|
pll_clock = ((start_count - end_count) & 0x3fffffff) / 100 *
|
||||||
(100000000 / usec_elapsed);
|
(100000000 / usec_elapsed);
|
||||||
|
|
Loading…
Reference in a new issue