aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2013-08-08 03:29:51 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-08-13 07:13:21 -0400
commit1d82980c99ef2a91459ea39627d8114befb2c895 (patch)
tree8f1b9050a83c729102f2df545e5542d57e21e974
parent2641f540800b47a1b9e9d8ce9d682fc15df088e2 (diff)
ACPICA: Make ACPI Power Management Timer (PM Timer) optional.
PM Timer is now optional. This support is already in Windows8 and "SHOULD" come out in ACPI 5.0A (if all goes well). The change doesn't affect Linux directly, because it does not rely on the presence of the PM timer. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/acpi/acpica/hwtimer.c13
-rw-r--r--drivers/acpi/acpica/tbfadt.c4
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/acpi/acpica/hwtimer.c b/drivers/acpi/acpica/hwtimer.c
index 0c1a8bbd05d6..2d7d22ebc782 100644
--- a/drivers/acpi/acpica/hwtimer.c
+++ b/drivers/acpi/acpica/hwtimer.c
@@ -100,8 +100,13 @@ acpi_status acpi_get_timer(u32 * ticks)
100 return_ACPI_STATUS(AE_BAD_PARAMETER); 100 return_ACPI_STATUS(AE_BAD_PARAMETER);
101 } 101 }
102 102
103 status = acpi_hw_read(ticks, &acpi_gbl_FADT.xpm_timer_block); 103 /* ACPI 5.0A: PM Timer is optional */
104
105 if (!acpi_gbl_FADT.xpm_timer_block.address) {
106 return_ACPI_STATUS(AE_SUPPORT);
107 }
104 108
109 status = acpi_hw_read(ticks, &acpi_gbl_FADT.xpm_timer_block);
105 return_ACPI_STATUS(status); 110 return_ACPI_STATUS(status);
106} 111}
107 112
@@ -148,6 +153,12 @@ acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
148 return_ACPI_STATUS(AE_BAD_PARAMETER); 153 return_ACPI_STATUS(AE_BAD_PARAMETER);
149 } 154 }
150 155
156 /* ACPI 5.0A: PM Timer is optional */
157
158 if (!acpi_gbl_FADT.xpm_timer_block.address) {
159 return_ACPI_STATUS(AE_SUPPORT);
160 }
161
151 /* 162 /*
152 * Compute Tick Delta: 163 * Compute Tick Delta:
153 * Handle (max one) timer rollovers on 24-bit versus 32-bit timers. 164 * Handle (max one) timer rollovers on 24-bit versus 32-bit timers.
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c
index 33b00d22300a..9d99f2189693 100644
--- a/drivers/acpi/acpica/tbfadt.c
+++ b/drivers/acpi/acpica/tbfadt.c
@@ -117,7 +117,7 @@ static struct acpi_fadt_info fadt_info_table[] = {
117 ACPI_FADT_OFFSET(pm_timer_block), 117 ACPI_FADT_OFFSET(pm_timer_block),
118 ACPI_FADT_OFFSET(pm_timer_length), 118 ACPI_FADT_OFFSET(pm_timer_length),
119 ACPI_PM_TIMER_WIDTH, 119 ACPI_PM_TIMER_WIDTH,
120 ACPI_FADT_REQUIRED}, 120 ACPI_FADT_SEPARATE_LENGTH}, /* ACPI 5.0A: Timer is optional */
121 121
122 {"Gpe0Block", 122 {"Gpe0Block",
123 ACPI_FADT_OFFSET(xgpe0_block), 123 ACPI_FADT_OFFSET(xgpe0_block),
@@ -574,7 +574,7 @@ static void acpi_tb_validate_fadt(void)
574 574
575 if (fadt_info_table[i].type & ACPI_FADT_REQUIRED) { 575 if (fadt_info_table[i].type & ACPI_FADT_REQUIRED) {
576 /* 576 /*
577 * Field is required (Pm1a_event, Pm1a_control, pm_timer). 577 * Field is required (Pm1a_event, Pm1a_control).
578 * Both the address and length must be non-zero. 578 * Both the address and length must be non-zero.
579 */ 579 */
580 if (!address64->address || !length) { 580 if (!address64->address || !length) {