|
@@ -16,15 +16,13 @@
|
|
* This file is licensed under the GPL v2.
|
|
* This file is licensed under the GPL v2.
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#include <linux/acpi_pmtmr.h>
|
|
#include <linux/clocksource.h>
|
|
#include <linux/clocksource.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/init.h>
|
|
#include <linux/init.h>
|
|
#include <linux/pci.h>
|
|
#include <linux/pci.h>
|
|
#include <asm/io.h>
|
|
#include <asm/io.h>
|
|
|
|
|
|
-/* Number of PMTMR ticks expected during calibration run */
|
|
|
|
-#define PMTMR_TICKS_PER_SEC 3579545
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* The I/O port the PMTMR resides at.
|
|
* The I/O port the PMTMR resides at.
|
|
* The location is detected during setup_arch(),
|
|
* The location is detected during setup_arch(),
|
|
@@ -32,15 +30,13 @@
|
|
*/
|
|
*/
|
|
u32 pmtmr_ioport __read_mostly;
|
|
u32 pmtmr_ioport __read_mostly;
|
|
|
|
|
|
-#define ACPI_PM_MASK CLOCKSOURCE_MASK(24) /* limit it to 24 bits */
|
|
|
|
-
|
|
|
|
static inline u32 read_pmtmr(void)
|
|
static inline u32 read_pmtmr(void)
|
|
{
|
|
{
|
|
/* mask the output to 24 bits */
|
|
/* mask the output to 24 bits */
|
|
return inl(pmtmr_ioport) & ACPI_PM_MASK;
|
|
return inl(pmtmr_ioport) & ACPI_PM_MASK;
|
|
}
|
|
}
|
|
|
|
|
|
-static cycle_t acpi_pm_read_verified(void)
|
|
|
|
|
|
+u32 acpi_pm_read_verified(void)
|
|
{
|
|
{
|
|
u32 v1 = 0, v2 = 0, v3 = 0;
|
|
u32 v1 = 0, v2 = 0, v3 = 0;
|
|
|
|
|
|
@@ -57,7 +53,12 @@ static cycle_t acpi_pm_read_verified(void)
|
|
} while (unlikely((v1 > v2 && v1 < v3) || (v2 > v3 && v2 < v1)
|
|
} while (unlikely((v1 > v2 && v1 < v3) || (v2 > v3 && v2 < v1)
|
|
|| (v3 > v1 && v3 < v2)));
|
|
|| (v3 > v1 && v3 < v2)));
|
|
|
|
|
|
- return (cycle_t)v2;
|
|
|
|
|
|
+ return v2;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static cycle_t acpi_pm_read_slow(void)
|
|
|
|
+{
|
|
|
|
+ return (cycle_t)acpi_pm_read_verified();
|
|
}
|
|
}
|
|
|
|
|
|
static cycle_t acpi_pm_read(void)
|
|
static cycle_t acpi_pm_read(void)
|
|
@@ -88,7 +89,7 @@ __setup("acpi_pm_good", acpi_pm_good_setup);
|
|
|
|
|
|
static inline void acpi_pm_need_workaround(void)
|
|
static inline void acpi_pm_need_workaround(void)
|
|
{
|
|
{
|
|
- clocksource_acpi_pm.read = acpi_pm_read_verified;
|
|
|
|
|
|
+ clocksource_acpi_pm.read = acpi_pm_read_slow;
|
|
clocksource_acpi_pm.rating = 110;
|
|
clocksource_acpi_pm.rating = 110;
|
|
}
|
|
}
|
|
|
|
|