powerpc: use time64_t in read_persistent_clock
Looking through the remaining users of the deprecated mktime() function, I found the powerpc rtc handlers, which use it in place of rtc_tm_to_time64(). To clean this up, I'm changing over the read_persistent_clock() function to the read_persistent_clock64() variant, and change all the platform specific handlers along with it. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
2dc20f454d
commit
5bfd643583
|
@ -83,7 +83,7 @@ struct machdep_calls {
|
||||||
|
|
||||||
int (*set_rtc_time)(struct rtc_time *);
|
int (*set_rtc_time)(struct rtc_time *);
|
||||||
void (*get_rtc_time)(struct rtc_time *);
|
void (*get_rtc_time)(struct rtc_time *);
|
||||||
unsigned long (*get_boot_time)(void);
|
time64_t (*get_boot_time)(void);
|
||||||
unsigned char (*rtc_read_val)(int addr);
|
unsigned char (*rtc_read_val)(int addr);
|
||||||
void (*rtc_write_val)(int addr, unsigned char val);
|
void (*rtc_write_val)(int addr, unsigned char val);
|
||||||
|
|
||||||
|
|
|
@ -328,7 +328,7 @@ extern int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data);
|
||||||
extern int opal_get_sensor_data_u64(u32 sensor_hndl, u64 *sensor_data);
|
extern int opal_get_sensor_data_u64(u32 sensor_hndl, u64 *sensor_data);
|
||||||
|
|
||||||
struct rtc_time;
|
struct rtc_time;
|
||||||
extern unsigned long opal_get_boot_time(void);
|
extern time64_t opal_get_boot_time(void);
|
||||||
extern void opal_nvram_init(void);
|
extern void opal_nvram_init(void);
|
||||||
extern void opal_flash_update_init(void);
|
extern void opal_flash_update_init(void);
|
||||||
extern void opal_flash_update_print_message(void);
|
extern void opal_flash_update_print_message(void);
|
||||||
|
|
|
@ -361,7 +361,7 @@ extern int rtas_offline_cpus_mask(cpumask_var_t cpus);
|
||||||
extern int rtas_ibm_suspend_me(u64 handle);
|
extern int rtas_ibm_suspend_me(u64 handle);
|
||||||
|
|
||||||
struct rtc_time;
|
struct rtc_time;
|
||||||
extern unsigned long rtas_get_boot_time(void);
|
extern time64_t rtas_get_boot_time(void);
|
||||||
extern void rtas_get_rtc_time(struct rtc_time *rtc_time);
|
extern void rtas_get_rtc_time(struct rtc_time *rtc_time);
|
||||||
extern int rtas_set_rtc_time(struct rtc_time *rtc_time);
|
extern int rtas_set_rtc_time(struct rtc_time *rtc_time);
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
#define MAX_RTC_WAIT 5000 /* 5 sec */
|
#define MAX_RTC_WAIT 5000 /* 5 sec */
|
||||||
#define RTAS_CLOCK_BUSY (-2)
|
#define RTAS_CLOCK_BUSY (-2)
|
||||||
unsigned long __init rtas_get_boot_time(void)
|
time64_t __init rtas_get_boot_time(void)
|
||||||
{
|
{
|
||||||
int ret[8];
|
int ret[8];
|
||||||
int error;
|
int error;
|
||||||
|
@ -38,7 +38,7 @@ unsigned long __init rtas_get_boot_time(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mktime(ret[0], ret[1], ret[2], ret[3], ret[4], ret[5]);
|
return mktime64(ret[0], ret[1], ret[2], ret[3], ret[4], ret[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: get_rtc_time will get an error if executed in interrupt context
|
/* NOTE: get_rtc_time will get an error if executed in interrupt context
|
||||||
|
|
|
@ -825,7 +825,7 @@ int update_persistent_clock(struct timespec now)
|
||||||
return ppc_md.set_rtc_time(&tm);
|
return ppc_md.set_rtc_time(&tm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __read_persistent_clock(struct timespec *ts)
|
static void __read_persistent_clock(struct timespec64 *ts)
|
||||||
{
|
{
|
||||||
struct rtc_time tm;
|
struct rtc_time tm;
|
||||||
static int first = 1;
|
static int first = 1;
|
||||||
|
@ -849,11 +849,10 @@ static void __read_persistent_clock(struct timespec *ts)
|
||||||
}
|
}
|
||||||
ppc_md.get_rtc_time(&tm);
|
ppc_md.get_rtc_time(&tm);
|
||||||
|
|
||||||
ts->tv_sec = mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
|
ts->tv_sec = rtc_tm_to_time64(&tm);
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_persistent_clock(struct timespec *ts)
|
void read_persistent_clock64(struct timespec64 *ts)
|
||||||
{
|
{
|
||||||
__read_persistent_clock(ts);
|
__read_persistent_clock(ts);
|
||||||
|
|
||||||
|
|
|
@ -192,9 +192,7 @@ void mpc8xx_get_rtc_time(struct rtc_time *tm)
|
||||||
|
|
||||||
/* Get time from the RTC. */
|
/* Get time from the RTC. */
|
||||||
data = in_be32(&sys_tmr->sit_rtc);
|
data = in_be32(&sys_tmr->sit_rtc);
|
||||||
to_tm(data, tm);
|
rtc_time64_to_tm(data, tm);
|
||||||
tm->tm_year -= 1900;
|
|
||||||
tm->tm_mon -= 1;
|
|
||||||
immr_unmap(sys_tmr);
|
immr_unmap(sys_tmr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
extern int maple_set_rtc_time(struct rtc_time *tm);
|
extern int maple_set_rtc_time(struct rtc_time *tm);
|
||||||
extern void maple_get_rtc_time(struct rtc_time *tm);
|
extern void maple_get_rtc_time(struct rtc_time *tm);
|
||||||
extern unsigned long maple_get_boot_time(void);
|
extern time64_t maple_get_boot_time(void);
|
||||||
extern void maple_calibrate_decr(void);
|
extern void maple_calibrate_decr(void);
|
||||||
extern void maple_pci_init(void);
|
extern void maple_pci_init(void);
|
||||||
extern void maple_pci_irq_fixup(struct pci_dev *dev);
|
extern void maple_pci_irq_fixup(struct pci_dev *dev);
|
||||||
|
|
|
@ -137,7 +137,7 @@ static struct resource rtc_iores = {
|
||||||
.flags = IORESOURCE_IO | IORESOURCE_BUSY,
|
.flags = IORESOURCE_IO | IORESOURCE_BUSY,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned long __init maple_get_boot_time(void)
|
time64_t __init maple_get_boot_time(void)
|
||||||
{
|
{
|
||||||
struct rtc_time tm;
|
struct rtc_time tm;
|
||||||
struct device_node *rtcs;
|
struct device_node *rtcs;
|
||||||
|
@ -170,7 +170,6 @@ unsigned long __init maple_get_boot_time(void)
|
||||||
request_resource(&ioport_resource, &rtc_iores);
|
request_resource(&ioport_resource, &rtc_iores);
|
||||||
|
|
||||||
maple_get_rtc_time(&tm);
|
maple_get_rtc_time(&tm);
|
||||||
return mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
|
return rtc_tm_to_time64(&tm);
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef _PASEMI_PASEMI_H
|
#ifndef _PASEMI_PASEMI_H
|
||||||
#define _PASEMI_PASEMI_H
|
#define _PASEMI_PASEMI_H
|
||||||
|
|
||||||
extern unsigned long pas_get_boot_time(void);
|
extern time64_t pas_get_boot_time(void);
|
||||||
extern void pas_pci_init(void);
|
extern void pas_pci_init(void);
|
||||||
extern void pas_pci_irq_fixup(struct pci_dev *dev);
|
extern void pas_pci_irq_fixup(struct pci_dev *dev);
|
||||||
extern void pas_pci_dma_dev_setup(struct pci_dev *dev);
|
extern void pas_pci_dma_dev_setup(struct pci_dev *dev);
|
||||||
|
|
|
@ -21,8 +21,8 @@
|
||||||
|
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
|
|
||||||
unsigned long __init pas_get_boot_time(void)
|
time64_t __init pas_get_boot_time(void)
|
||||||
{
|
{
|
||||||
/* Let's just return a fake date right now */
|
/* Let's just return a fake date right now */
|
||||||
return mktime(2006, 1, 1, 12, 0, 0);
|
return mktime64(2006, 1, 1, 12, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ struct rtc_time;
|
||||||
extern int pmac_newworld;
|
extern int pmac_newworld;
|
||||||
|
|
||||||
extern long pmac_time_init(void);
|
extern long pmac_time_init(void);
|
||||||
extern unsigned long pmac_get_boot_time(void);
|
extern time64_t pmac_get_boot_time(void);
|
||||||
extern void pmac_get_rtc_time(struct rtc_time *);
|
extern void pmac_get_rtc_time(struct rtc_time *);
|
||||||
extern int pmac_set_rtc_time(struct rtc_time *);
|
extern int pmac_set_rtc_time(struct rtc_time *);
|
||||||
extern void pmac_read_rtc_time(void);
|
extern void pmac_read_rtc_time(void);
|
||||||
|
|
|
@ -84,15 +84,6 @@ long __init pmac_time_init(void)
|
||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU)
|
|
||||||
static void to_rtc_time(unsigned long now, struct rtc_time *tm)
|
|
||||||
{
|
|
||||||
to_tm(now, tm);
|
|
||||||
tm->tm_year -= 1900;
|
|
||||||
tm->tm_mon -= 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) || \
|
#if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) || \
|
||||||
defined(CONFIG_PMAC_SMU)
|
defined(CONFIG_PMAC_SMU)
|
||||||
static unsigned long from_rtc_time(struct rtc_time *tm)
|
static unsigned long from_rtc_time(struct rtc_time *tm)
|
||||||
|
@ -103,10 +94,10 @@ static unsigned long from_rtc_time(struct rtc_time *tm)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ADB_CUDA
|
#ifdef CONFIG_ADB_CUDA
|
||||||
static unsigned long cuda_get_time(void)
|
static time64_t cuda_get_time(void)
|
||||||
{
|
{
|
||||||
struct adb_request req;
|
struct adb_request req;
|
||||||
unsigned int now;
|
time64_t now;
|
||||||
|
|
||||||
if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0)
|
if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -117,10 +108,10 @@ static unsigned long cuda_get_time(void)
|
||||||
req.reply_len);
|
req.reply_len);
|
||||||
now = (req.reply[3] << 24) + (req.reply[4] << 16)
|
now = (req.reply[3] << 24) + (req.reply[4] << 16)
|
||||||
+ (req.reply[5] << 8) + req.reply[6];
|
+ (req.reply[5] << 8) + req.reply[6];
|
||||||
return ((unsigned long)now) - RTC_OFFSET;
|
return now - RTC_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define cuda_get_rtc_time(tm) to_rtc_time(cuda_get_time(), (tm))
|
#define cuda_get_rtc_time(tm) rtc_time64_to_tm(cuda_get_time(), (tm))
|
||||||
|
|
||||||
static int cuda_set_rtc_time(struct rtc_time *tm)
|
static int cuda_set_rtc_time(struct rtc_time *tm)
|
||||||
{
|
{
|
||||||
|
@ -147,10 +138,10 @@ static int cuda_set_rtc_time(struct rtc_time *tm)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ADB_PMU
|
#ifdef CONFIG_ADB_PMU
|
||||||
static unsigned long pmu_get_time(void)
|
static time64_t pmu_get_time(void)
|
||||||
{
|
{
|
||||||
struct adb_request req;
|
struct adb_request req;
|
||||||
unsigned int now;
|
time64_t now;
|
||||||
|
|
||||||
if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0)
|
if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -160,10 +151,10 @@ static unsigned long pmu_get_time(void)
|
||||||
req.reply_len);
|
req.reply_len);
|
||||||
now = (req.reply[0] << 24) + (req.reply[1] << 16)
|
now = (req.reply[0] << 24) + (req.reply[1] << 16)
|
||||||
+ (req.reply[2] << 8) + req.reply[3];
|
+ (req.reply[2] << 8) + req.reply[3];
|
||||||
return ((unsigned long)now) - RTC_OFFSET;
|
return now - RTC_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define pmu_get_rtc_time(tm) to_rtc_time(pmu_get_time(), (tm))
|
#define pmu_get_rtc_time(tm) rtc_time64_to_tm(pmu_get_time(), (tm))
|
||||||
|
|
||||||
static int pmu_set_rtc_time(struct rtc_time *tm)
|
static int pmu_set_rtc_time(struct rtc_time *tm)
|
||||||
{
|
{
|
||||||
|
@ -188,13 +179,13 @@ static int pmu_set_rtc_time(struct rtc_time *tm)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PMAC_SMU
|
#ifdef CONFIG_PMAC_SMU
|
||||||
static unsigned long smu_get_time(void)
|
static time64_t smu_get_time(void)
|
||||||
{
|
{
|
||||||
struct rtc_time tm;
|
struct rtc_time tm;
|
||||||
|
|
||||||
if (smu_get_rtc_time(&tm, 1))
|
if (smu_get_rtc_time(&tm, 1))
|
||||||
return 0;
|
return 0;
|
||||||
return from_rtc_time(&tm);
|
return rtc_tm_to_time64(&tm);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -204,7 +195,7 @@ static unsigned long smu_get_time(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Can't be __init, it's called when suspending and resuming */
|
/* Can't be __init, it's called when suspending and resuming */
|
||||||
unsigned long pmac_get_boot_time(void)
|
time64_t pmac_get_boot_time(void)
|
||||||
{
|
{
|
||||||
/* Get the time from the RTC, used only at boot time */
|
/* Get the time from the RTC, used only at boot time */
|
||||||
switch (sys_ctrler) {
|
switch (sys_ctrler) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ static void opal_to_tm(u32 y_m_d, u64 h_m_s_ms, struct rtc_time *tm)
|
||||||
tm->tm_wday = -1;
|
tm->tm_wday = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long __init opal_get_boot_time(void)
|
time64_t __init opal_get_boot_time(void)
|
||||||
{
|
{
|
||||||
struct rtc_time tm;
|
struct rtc_time tm;
|
||||||
u32 y_m_d;
|
u32 y_m_d;
|
||||||
|
@ -61,8 +61,7 @@ unsigned long __init opal_get_boot_time(void)
|
||||||
y_m_d = be32_to_cpu(__y_m_d);
|
y_m_d = be32_to_cpu(__y_m_d);
|
||||||
h_m_s_ms = be64_to_cpu(__h_m_s_ms);
|
h_m_s_ms = be64_to_cpu(__h_m_s_ms);
|
||||||
opal_to_tm(y_m_d, h_m_s_ms, &tm);
|
opal_to_tm(y_m_d, h_m_s_ms, &tm);
|
||||||
return mktime(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
return rtc_tm_to_time64(&tm);
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init int opal_time_init(void)
|
static __init int opal_time_init(void)
|
||||||
|
|
|
@ -57,7 +57,7 @@ static inline void ps3_smp_cleanup_cpu(int cpu) { }
|
||||||
/* time */
|
/* time */
|
||||||
|
|
||||||
void __init ps3_calibrate_decr(void);
|
void __init ps3_calibrate_decr(void);
|
||||||
unsigned long __init ps3_get_boot_time(void);
|
time64_t __init ps3_get_boot_time(void);
|
||||||
void ps3_get_rtc_time(struct rtc_time *time);
|
void ps3_get_rtc_time(struct rtc_time *time);
|
||||||
int ps3_set_rtc_time(struct rtc_time *time);
|
int ps3_set_rtc_time(struct rtc_time *time);
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ static u64 read_rtc(void)
|
||||||
return rtc_val;
|
return rtc_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long __init ps3_get_boot_time(void)
|
time64_t __init ps3_get_boot_time(void)
|
||||||
{
|
{
|
||||||
return read_rtc() + ps3_os_area_get_rtc_diff();
|
return read_rtc() + ps3_os_area_get_rtc_diff();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue