You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
Pull ACPI & Power Management changes from Len Brown: - ACPI 5.0 after-ripples, ACPICA/Linux divergence cleanup - cpuidle evolving, more ARM use - thermal sub-system evolving, ditto - assorted other PM bits Fix up conflicts in various cpuidle implementations due to ARM cpuidle cleanups (ARM at91 self-refresh and cpu idle code rewritten into "standby" in asm conflicting with the consolidation of cpuidle time keeping), trivial SH include file context conflict and RCU tracing fixes in generic code. * 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux: (77 commits) ACPI throttling: fix endian bug in acpi_read_throttling_status() Disable MCP limit exceeded messages from Intel IPS driver ACPI video: Don't start video device until its associated input device has been allocated ACPI video: Harden video bus adding. ACPI: Add support for exposing BGRT data ACPI: export acpi_kobj ACPI: Fix logic for removing mappings in 'acpi_unmap' CPER failed to handle generic error records with multiple sections ACPI: Clean redundant codes in scan.c ACPI: Fix unprotected smp_processor_id() in acpi_processor_cst_has_changed() ACPI: consistently use should_use_kmap() PNPACPI: Fix device ref leaking in acpi_pnp_match ACPI: Fix use-after-free in acpi_map_lsapic ACPI: processor_driver: add missing kfree ACPI, APEI: Fix incorrect APEI register bit width check and usage Update documentation for parameter *notrigger* in einj.txt ACPI, APEI, EINJ, new parameter to control trigger action ACPI, APEI, EINJ, limit the range of einj_param ACPI, APEI, Fix ERST header length check cpuidle: power_usage should be declared signed integer ...
This commit is contained in:
@@ -1,3 +1,23 @@
|
|||||||
|
What: /sys/firmware/acpi/bgrt/
|
||||||
|
Date: January 2012
|
||||||
|
Contact: Matthew Garrett <mjg@redhat.com>
|
||||||
|
Description:
|
||||||
|
The BGRT is an ACPI 5.0 feature that allows the OS
|
||||||
|
to obtain a copy of the firmware boot splash and
|
||||||
|
some associated metadata. This is intended to be used
|
||||||
|
by boot splash applications in order to interact with
|
||||||
|
the firmware boot splash in order to avoid jarring
|
||||||
|
transitions.
|
||||||
|
|
||||||
|
image: The image bitmap. Currently a 32-bit BMP.
|
||||||
|
status: 1 if the image is valid, 0 if firmware invalidated it.
|
||||||
|
type: 0 indicates image is in BMP format.
|
||||||
|
version: The version of the BGRT. Currently 1.
|
||||||
|
xoffset: The number of pixels between the left of the screen
|
||||||
|
and the left edge of the image.
|
||||||
|
yoffset: The number of pixels between the top of the screen
|
||||||
|
and the top edge of the image.
|
||||||
|
|
||||||
What: /sys/firmware/acpi/interrupts/
|
What: /sys/firmware/acpi/interrupts/
|
||||||
Date: February 2008
|
Date: February 2008
|
||||||
Contact: Len Brown <lenb@kernel.org>
|
Contact: Len Brown <lenb@kernel.org>
|
||||||
|
|||||||
@@ -53,6 +53,14 @@ directory apei/einj. The following files are provided.
|
|||||||
This file is used to set the second error parameter value. Effect of
|
This file is used to set the second error parameter value. Effect of
|
||||||
parameter depends on error_type specified.
|
parameter depends on error_type specified.
|
||||||
|
|
||||||
|
- notrigger
|
||||||
|
The EINJ mechanism is a two step process. First inject the error, then
|
||||||
|
perform some actions to trigger it. Setting "notrigger" to 1 skips the
|
||||||
|
trigger phase, which *may* allow the user to cause the error in some other
|
||||||
|
context by a simple access to the cpu, memory location, or device that is
|
||||||
|
the target of the error injection. Whether this actually works depends
|
||||||
|
on what operations the BIOS actually includes in the trigger phase.
|
||||||
|
|
||||||
BIOS versions based in the ACPI 4.0 specification have limited options
|
BIOS versions based in the ACPI 4.0 specification have limited options
|
||||||
to control where the errors are injected. Your BIOS may support an
|
to control where the errors are injected. Your BIOS may support an
|
||||||
extension (enabled with the param_extension=1 module parameter, or
|
extension (enabled with the param_extension=1 module parameter, or
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ drwxr-xr-x 2 root root 0 Feb 8 10:42 state3
|
|||||||
/sys/devices/system/cpu/cpu0/cpuidle/state0:
|
/sys/devices/system/cpu/cpu0/cpuidle/state0:
|
||||||
total 0
|
total 0
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
||||||
|
-rw-r--r-- 1 root root 4096 Feb 8 10:42 disable
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
||||||
@@ -45,6 +46,7 @@ total 0
|
|||||||
/sys/devices/system/cpu/cpu0/cpuidle/state1:
|
/sys/devices/system/cpu/cpu0/cpuidle/state1:
|
||||||
total 0
|
total 0
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
||||||
|
-rw-r--r-- 1 root root 4096 Feb 8 10:42 disable
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
||||||
@@ -54,6 +56,7 @@ total 0
|
|||||||
/sys/devices/system/cpu/cpu0/cpuidle/state2:
|
/sys/devices/system/cpu/cpu0/cpuidle/state2:
|
||||||
total 0
|
total 0
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
||||||
|
-rw-r--r-- 1 root root 4096 Feb 8 10:42 disable
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
||||||
@@ -63,6 +66,7 @@ total 0
|
|||||||
/sys/devices/system/cpu/cpu0/cpuidle/state3:
|
/sys/devices/system/cpu/cpu0/cpuidle/state3:
|
||||||
total 0
|
total 0
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
|
||||||
|
-rw-r--r-- 1 root root 4096 Feb 8 10:42 disable
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 name
|
||||||
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
-r--r--r-- 1 root root 4096 Feb 8 10:42 power
|
||||||
@@ -72,6 +76,7 @@ total 0
|
|||||||
|
|
||||||
|
|
||||||
* desc : Small description about the idle state (string)
|
* desc : Small description about the idle state (string)
|
||||||
|
* disable : Option to disable this idle state (bool)
|
||||||
* latency : Latency to exit out of this idle state (in microseconds)
|
* latency : Latency to exit out of this idle state (in microseconds)
|
||||||
* name : Name of the idle state (string)
|
* name : Name of the idle state (string)
|
||||||
* power : Power consumed while in this idle state (in milliwatts)
|
* power : Power consumed while in this idle state (in milliwatts)
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef __ASM_ARM_CPUIDLE_H
|
||||||
|
#define __ASM_ARM_CPUIDLE_H
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_IDLE
|
||||||
|
extern int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv, int index);
|
||||||
|
#else
|
||||||
|
static inline int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv, int index) { return -ENODEV; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Common ARM WFI state */
|
||||||
|
#define ARM_CPUIDLE_WFI_STATE_PWR(p) {\
|
||||||
|
.enter = arm_cpuidle_simple_enter,\
|
||||||
|
.exit_latency = 1,\
|
||||||
|
.target_residency = 1,\
|
||||||
|
.power_usage = p,\
|
||||||
|
.flags = CPUIDLE_FLAG_TIME_VALID,\
|
||||||
|
.name = "WFI",\
|
||||||
|
.desc = "ARM WFI",\
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* in case power_specified == 1, give a default WFI power value needed
|
||||||
|
* by some governors
|
||||||
|
*/
|
||||||
|
#define ARM_CPUIDLE_WFI_STATE ARM_CPUIDLE_WFI_STATE_PWR(UINT_MAX)
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -23,7 +23,7 @@ obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o
|
|||||||
|
|
||||||
obj-$(CONFIG_LEDS) += leds.o
|
obj-$(CONFIG_LEDS) += leds.o
|
||||||
obj-$(CONFIG_OC_ETM) += etm.o
|
obj-$(CONFIG_OC_ETM) += etm.o
|
||||||
|
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||||
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
||||||
obj-$(CONFIG_FIQ) += fiq.o fiqasm.o
|
obj-$(CONFIG_FIQ) += fiq.o fiqasm.o
|
||||||
obj-$(CONFIG_MODULES) += armksyms.o module.o
|
obj-$(CONFIG_MODULES) += armksyms.o module.o
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012 Linaro Ltd.
|
||||||
|
*
|
||||||
|
* The code contained herein is licensed under the GNU General Public
|
||||||
|
* License. You may obtain a copy of the GNU General Public License
|
||||||
|
* Version 2 or later at the following locations:
|
||||||
|
*
|
||||||
|
* http://www.opensource.org/licenses/gpl-license.html
|
||||||
|
* http://www.gnu.org/copyleft/gpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/cpuidle.h>
|
||||||
|
#include <asm/proc-fns.h>
|
||||||
|
|
||||||
|
int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv, int index)
|
||||||
|
{
|
||||||
|
cpu_do_idle();
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
@@ -17,9 +17,10 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/cpuidle.h>
|
#include <linux/cpuidle.h>
|
||||||
#include <asm/proc-fns.h>
|
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
#include <asm/proc-fns.h>
|
||||||
|
#include <asm/cpuidle.h>
|
||||||
|
|
||||||
#include "pm.h"
|
#include "pm.h"
|
||||||
|
|
||||||
@@ -27,61 +28,39 @@
|
|||||||
|
|
||||||
static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device);
|
static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device);
|
||||||
|
|
||||||
static struct cpuidle_driver at91_idle_driver = {
|
|
||||||
.name = "at91_idle",
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Actual code that puts the SoC in different idle states */
|
/* Actual code that puts the SoC in different idle states */
|
||||||
static int at91_enter_idle(struct cpuidle_device *dev,
|
static int at91_enter_idle(struct cpuidle_device *dev,
|
||||||
struct cpuidle_driver *drv,
|
struct cpuidle_driver *drv,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
struct timeval before, after;
|
at91_standby();
|
||||||
int idle_time;
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
do_gettimeofday(&before);
|
|
||||||
if (index == 0)
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
cpu_do_idle();
|
|
||||||
else if (index == 1)
|
|
||||||
at91_standby();
|
|
||||||
|
|
||||||
do_gettimeofday(&after);
|
|
||||||
local_irq_enable();
|
|
||||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
|
||||||
(after.tv_usec - before.tv_usec);
|
|
||||||
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct cpuidle_driver at91_idle_driver = {
|
||||||
|
.name = "at91_idle",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.en_core_tk_irqen = 1,
|
||||||
|
.states[0] = ARM_CPUIDLE_WFI_STATE,
|
||||||
|
.states[1] = {
|
||||||
|
.enter = at91_enter_idle,
|
||||||
|
.exit_latency = 10,
|
||||||
|
.target_residency = 100000,
|
||||||
|
.flags = CPUIDLE_FLAG_TIME_VALID,
|
||||||
|
.name = "RAM_SR",
|
||||||
|
.desc = "WFI and DDR Self Refresh",
|
||||||
|
},
|
||||||
|
.state_count = AT91_MAX_STATES,
|
||||||
|
};
|
||||||
|
|
||||||
/* Initialize CPU idle by registering the idle states */
|
/* Initialize CPU idle by registering the idle states */
|
||||||
static int at91_init_cpuidle(void)
|
static int at91_init_cpuidle(void)
|
||||||
{
|
{
|
||||||
struct cpuidle_device *device;
|
struct cpuidle_device *device;
|
||||||
struct cpuidle_driver *driver = &at91_idle_driver;
|
|
||||||
|
|
||||||
device = &per_cpu(at91_cpuidle_device, smp_processor_id());
|
device = &per_cpu(at91_cpuidle_device, smp_processor_id());
|
||||||
device->state_count = AT91_MAX_STATES;
|
device->state_count = AT91_MAX_STATES;
|
||||||
driver->state_count = AT91_MAX_STATES;
|
|
||||||
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
driver->states[0].enter = at91_enter_idle;
|
|
||||||
driver->states[0].exit_latency = 1;
|
|
||||||
driver->states[0].target_residency = 10000;
|
|
||||||
driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[0].name, "WFI");
|
|
||||||
strcpy(driver->states[0].desc, "Wait for interrupt");
|
|
||||||
|
|
||||||
/* Wait for interrupt and RAM self refresh state */
|
|
||||||
driver->states[1].enter = at91_enter_idle;
|
|
||||||
driver->states[1].exit_latency = 10;
|
|
||||||
driver->states[1].target_residency = 10000;
|
|
||||||
driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[1].name, "RAM_SR");
|
|
||||||
strcpy(driver->states[1].desc, "WFI and RAM Self Refresh");
|
|
||||||
|
|
||||||
cpuidle_register_driver(&at91_idle_driver);
|
cpuidle_register_driver(&at91_idle_driver);
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
|
#include <asm/cpuidle.h>
|
||||||
|
|
||||||
#include <mach/cpuidle.h>
|
#include <mach/cpuidle.h>
|
||||||
#include <mach/ddr2.h>
|
#include <mach/ddr2.h>
|
||||||
@@ -30,12 +31,43 @@ struct davinci_ops {
|
|||||||
u32 flags;
|
u32 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Actual code that puts the SoC in different idle states */
|
||||||
|
static int davinci_enter_idle(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
|
{
|
||||||
|
struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
|
||||||
|
struct davinci_ops *ops = cpuidle_get_statedata(state_usage);
|
||||||
|
|
||||||
|
if (ops && ops->enter)
|
||||||
|
ops->enter(ops->flags);
|
||||||
|
|
||||||
|
index = cpuidle_wrap_enter(dev, drv, index,
|
||||||
|
arm_cpuidle_simple_enter);
|
||||||
|
|
||||||
|
if (ops && ops->exit)
|
||||||
|
ops->exit(ops->flags);
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
/* fields in davinci_ops.flags */
|
/* fields in davinci_ops.flags */
|
||||||
#define DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN BIT(0)
|
#define DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN BIT(0)
|
||||||
|
|
||||||
static struct cpuidle_driver davinci_idle_driver = {
|
static struct cpuidle_driver davinci_idle_driver = {
|
||||||
.name = "cpuidle-davinci",
|
.name = "cpuidle-davinci",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.en_core_tk_irqen = 1,
|
||||||
|
.states[0] = ARM_CPUIDLE_WFI_STATE,
|
||||||
|
.states[1] = {
|
||||||
|
.enter = davinci_enter_idle,
|
||||||
|
.exit_latency = 10,
|
||||||
|
.target_residency = 100000,
|
||||||
|
.flags = CPUIDLE_FLAG_TIME_VALID,
|
||||||
|
.name = "DDR SR",
|
||||||
|
.desc = "WFI and DDR Self Refresh",
|
||||||
|
},
|
||||||
|
.state_count = DAVINCI_CPUIDLE_MAX_STATES,
|
||||||
};
|
};
|
||||||
|
|
||||||
static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device);
|
static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device);
|
||||||
@@ -77,41 +109,10 @@ static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Actual code that puts the SoC in different idle states */
|
|
||||||
static int davinci_enter_idle(struct cpuidle_device *dev,
|
|
||||||
struct cpuidle_driver *drv,
|
|
||||||
int index)
|
|
||||||
{
|
|
||||||
struct cpuidle_state_usage *state_usage = &dev->states_usage[index];
|
|
||||||
struct davinci_ops *ops = cpuidle_get_statedata(state_usage);
|
|
||||||
struct timeval before, after;
|
|
||||||
int idle_time;
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
do_gettimeofday(&before);
|
|
||||||
|
|
||||||
if (ops && ops->enter)
|
|
||||||
ops->enter(ops->flags);
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
cpu_do_idle();
|
|
||||||
if (ops && ops->exit)
|
|
||||||
ops->exit(ops->flags);
|
|
||||||
|
|
||||||
do_gettimeofday(&after);
|
|
||||||
local_irq_enable();
|
|
||||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
|
||||||
(after.tv_usec - before.tv_usec);
|
|
||||||
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct cpuidle_device *device;
|
struct cpuidle_device *device;
|
||||||
struct cpuidle_driver *driver = &davinci_idle_driver;
|
|
||||||
struct davinci_cpuidle_config *pdata = pdev->dev.platform_data;
|
struct davinci_cpuidle_config *pdata = pdev->dev.platform_data;
|
||||||
|
|
||||||
device = &per_cpu(davinci_cpuidle_device, smp_processor_id());
|
device = &per_cpu(davinci_cpuidle_device, smp_processor_id());
|
||||||
@@ -123,27 +124,11 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
ddr2_reg_base = pdata->ddr2_ctlr_base;
|
ddr2_reg_base = pdata->ddr2_ctlr_base;
|
||||||
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
driver->states[0].enter = davinci_enter_idle;
|
|
||||||
driver->states[0].exit_latency = 1;
|
|
||||||
driver->states[0].target_residency = 10000;
|
|
||||||
driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[0].name, "WFI");
|
|
||||||
strcpy(driver->states[0].desc, "Wait for interrupt");
|
|
||||||
|
|
||||||
/* Wait for interrupt and DDR self refresh state */
|
|
||||||
driver->states[1].enter = davinci_enter_idle;
|
|
||||||
driver->states[1].exit_latency = 10;
|
|
||||||
driver->states[1].target_residency = 10000;
|
|
||||||
driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[1].name, "DDR SR");
|
|
||||||
strcpy(driver->states[1].desc, "WFI and DDR Self Refresh");
|
|
||||||
if (pdata->ddr2_pdown)
|
if (pdata->ddr2_pdown)
|
||||||
davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN;
|
davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN;
|
||||||
cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]);
|
cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]);
|
||||||
|
|
||||||
device->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
device->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
||||||
driver->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
|
||||||
|
|
||||||
ret = cpuidle_register_driver(&davinci_idle_driver);
|
ret = cpuidle_register_driver(&davinci_idle_driver);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|||||||
@@ -20,77 +20,47 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
|
#include <asm/cpuidle.h>
|
||||||
#include <mach/kirkwood.h>
|
#include <mach/kirkwood.h>
|
||||||
|
|
||||||
#define KIRKWOOD_MAX_STATES 2
|
#define KIRKWOOD_MAX_STATES 2
|
||||||
|
|
||||||
static struct cpuidle_driver kirkwood_idle_driver = {
|
|
||||||
.name = "kirkwood_idle",
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
};
|
|
||||||
|
|
||||||
static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device);
|
|
||||||
|
|
||||||
/* Actual code that puts the SoC in different idle states */
|
/* Actual code that puts the SoC in different idle states */
|
||||||
static int kirkwood_enter_idle(struct cpuidle_device *dev,
|
static int kirkwood_enter_idle(struct cpuidle_device *dev,
|
||||||
struct cpuidle_driver *drv,
|
struct cpuidle_driver *drv,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
struct timeval before, after;
|
writel(0x7, DDR_OPERATION_BASE);
|
||||||
int idle_time;
|
cpu_do_idle();
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
do_gettimeofday(&before);
|
|
||||||
if (index == 0)
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
cpu_do_idle();
|
|
||||||
else if (index == 1) {
|
|
||||||
/*
|
|
||||||
* Following write will put DDR in self refresh.
|
|
||||||
* Note that we have 256 cycles before DDR puts it
|
|
||||||
* self in self-refresh, so the wait-for-interrupt
|
|
||||||
* call afterwards won't get the DDR from self refresh
|
|
||||||
* mode.
|
|
||||||
*/
|
|
||||||
writel(0x7, DDR_OPERATION_BASE);
|
|
||||||
cpu_do_idle();
|
|
||||||
}
|
|
||||||
do_gettimeofday(&after);
|
|
||||||
local_irq_enable();
|
|
||||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
|
||||||
(after.tv_usec - before.tv_usec);
|
|
||||||
|
|
||||||
/* Update last residency */
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct cpuidle_driver kirkwood_idle_driver = {
|
||||||
|
.name = "kirkwood_idle",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.en_core_tk_irqen = 1,
|
||||||
|
.states[0] = ARM_CPUIDLE_WFI_STATE,
|
||||||
|
.states[1] = {
|
||||||
|
.enter = kirkwood_enter_idle,
|
||||||
|
.exit_latency = 10,
|
||||||
|
.target_residency = 100000,
|
||||||
|
.flags = CPUIDLE_FLAG_TIME_VALID,
|
||||||
|
.name = "DDR SR",
|
||||||
|
.desc = "WFI and DDR Self Refresh",
|
||||||
|
},
|
||||||
|
.state_count = KIRKWOOD_MAX_STATES,
|
||||||
|
};
|
||||||
|
|
||||||
|
static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device);
|
||||||
|
|
||||||
/* Initialize CPU idle by registering the idle states */
|
/* Initialize CPU idle by registering the idle states */
|
||||||
static int kirkwood_init_cpuidle(void)
|
static int kirkwood_init_cpuidle(void)
|
||||||
{
|
{
|
||||||
struct cpuidle_device *device;
|
struct cpuidle_device *device;
|
||||||
struct cpuidle_driver *driver = &kirkwood_idle_driver;
|
|
||||||
|
|
||||||
device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id());
|
device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id());
|
||||||
device->state_count = KIRKWOOD_MAX_STATES;
|
device->state_count = KIRKWOOD_MAX_STATES;
|
||||||
driver->state_count = KIRKWOOD_MAX_STATES;
|
|
||||||
|
|
||||||
/* Wait for interrupt state */
|
|
||||||
driver->states[0].enter = kirkwood_enter_idle;
|
|
||||||
driver->states[0].exit_latency = 1;
|
|
||||||
driver->states[0].target_residency = 10000;
|
|
||||||
driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[0].name, "WFI");
|
|
||||||
strcpy(driver->states[0].desc, "Wait for interrupt");
|
|
||||||
|
|
||||||
/* Wait for interrupt and DDR self refresh state */
|
|
||||||
driver->states[1].enter = kirkwood_enter_idle;
|
|
||||||
driver->states[1].exit_latency = 10;
|
|
||||||
driver->states[1].target_residency = 10000;
|
|
||||||
driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
strcpy(driver->states[1].name, "DDR SR");
|
|
||||||
strcpy(driver->states[1].desc, "WFI and DDR Self Refresh");
|
|
||||||
|
|
||||||
cpuidle_register_driver(&kirkwood_idle_driver);
|
cpuidle_register_driver(&kirkwood_idle_driver);
|
||||||
if (cpuidle_register_device(device)) {
|
if (cpuidle_register_device(device)) {
|
||||||
|
|||||||
@@ -87,29 +87,14 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static int __omap3_enter_idle(struct cpuidle_device *dev,
|
||||||
* omap3_enter_idle - Programs OMAP3 to enter the specified state
|
|
||||||
* @dev: cpuidle device
|
|
||||||
* @drv: cpuidle driver
|
|
||||||
* @index: the index of state to be entered
|
|
||||||
*
|
|
||||||
* Called from the CPUidle framework to program the device to the
|
|
||||||
* specified target state selected by the governor.
|
|
||||||
*/
|
|
||||||
static int omap3_enter_idle(struct cpuidle_device *dev,
|
|
||||||
struct cpuidle_driver *drv,
|
struct cpuidle_driver *drv,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
struct omap3_idle_statedata *cx =
|
struct omap3_idle_statedata *cx =
|
||||||
cpuidle_get_statedata(&dev->states_usage[index]);
|
cpuidle_get_statedata(&dev->states_usage[index]);
|
||||||
struct timespec ts_preidle, ts_postidle, ts_idle;
|
|
||||||
u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
|
u32 mpu_state = cx->mpu_state, core_state = cx->core_state;
|
||||||
int idle_time;
|
|
||||||
|
|
||||||
/* Used to keep track of the total time in idle */
|
|
||||||
getnstimeofday(&ts_preidle);
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
pwrdm_set_next_pwrst(mpu_pd, mpu_state);
|
pwrdm_set_next_pwrst(mpu_pd, mpu_state);
|
||||||
@@ -148,21 +133,28 @@ static int omap3_enter_idle(struct cpuidle_device *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return_sleep_time:
|
return_sleep_time:
|
||||||
getnstimeofday(&ts_postidle);
|
|
||||||
ts_idle = timespec_sub(ts_postidle, ts_preidle);
|
|
||||||
|
|
||||||
local_irq_enable();
|
|
||||||
local_fiq_enable();
|
local_fiq_enable();
|
||||||
|
|
||||||
idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \
|
|
||||||
USEC_PER_SEC;
|
|
||||||
|
|
||||||
/* Update cpuidle counters */
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* omap3_enter_idle - Programs OMAP3 to enter the specified state
|
||||||
|
* @dev: cpuidle device
|
||||||
|
* @drv: cpuidle driver
|
||||||
|
* @index: the index of state to be entered
|
||||||
|
*
|
||||||
|
* Called from the CPUidle framework to program the device to the
|
||||||
|
* specified target state selected by the governor.
|
||||||
|
*/
|
||||||
|
static inline int omap3_enter_idle(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
|
{
|
||||||
|
return cpuidle_wrap_enter(dev, drv, index, __omap3_enter_idle);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* next_valid_state - Find next valid C-state
|
* next_valid_state - Find next valid C-state
|
||||||
* @dev: cpuidle device
|
* @dev: cpuidle device
|
||||||
|
|||||||
@@ -62,15 +62,9 @@ static int omap4_enter_idle(struct cpuidle_device *dev,
|
|||||||
{
|
{
|
||||||
struct omap4_idle_statedata *cx =
|
struct omap4_idle_statedata *cx =
|
||||||
cpuidle_get_statedata(&dev->states_usage[index]);
|
cpuidle_get_statedata(&dev->states_usage[index]);
|
||||||
struct timespec ts_preidle, ts_postidle, ts_idle;
|
|
||||||
u32 cpu1_state;
|
u32 cpu1_state;
|
||||||
int idle_time;
|
|
||||||
int cpu_id = smp_processor_id();
|
int cpu_id = smp_processor_id();
|
||||||
|
|
||||||
/* Used to keep track of the total time in idle */
|
|
||||||
getnstimeofday(&ts_preidle);
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -128,26 +122,17 @@ static int omap4_enter_idle(struct cpuidle_device *dev,
|
|||||||
if (index > 0)
|
if (index > 0)
|
||||||
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id);
|
clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id);
|
||||||
|
|
||||||
getnstimeofday(&ts_postidle);
|
|
||||||
ts_idle = timespec_sub(ts_postidle, ts_preidle);
|
|
||||||
|
|
||||||
local_irq_enable();
|
|
||||||
local_fiq_enable();
|
local_fiq_enable();
|
||||||
|
|
||||||
idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \
|
|
||||||
USEC_PER_SEC;
|
|
||||||
|
|
||||||
/* Update cpuidle counters */
|
|
||||||
dev->last_residency = idle_time;
|
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev);
|
DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev);
|
||||||
|
|
||||||
struct cpuidle_driver omap4_idle_driver = {
|
struct cpuidle_driver omap4_idle_driver = {
|
||||||
.name = "omap4_idle",
|
.name = "omap4_idle",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.en_core_tk_irqen = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void _fill_cstate(struct cpuidle_driver *drv,
|
static inline void _fill_cstate(struct cpuidle_driver *drv,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
#include <asm/cpuidle.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
static void shmobile_enter_wfi(void)
|
static void shmobile_enter_wfi(void)
|
||||||
@@ -28,37 +29,19 @@ static int shmobile_cpuidle_enter(struct cpuidle_device *dev,
|
|||||||
struct cpuidle_driver *drv,
|
struct cpuidle_driver *drv,
|
||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
ktime_t before, after;
|
|
||||||
|
|
||||||
before = ktime_get();
|
|
||||||
|
|
||||||
local_irq_disable();
|
|
||||||
local_fiq_disable();
|
|
||||||
|
|
||||||
shmobile_cpuidle_modes[index]();
|
shmobile_cpuidle_modes[index]();
|
||||||
|
|
||||||
local_irq_enable();
|
|
||||||
local_fiq_enable();
|
|
||||||
|
|
||||||
after = ktime_get();
|
|
||||||
dev->last_residency = ktime_to_ns(ktime_sub(after, before)) >> 10;
|
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cpuidle_device shmobile_cpuidle_dev;
|
static struct cpuidle_device shmobile_cpuidle_dev;
|
||||||
static struct cpuidle_driver shmobile_cpuidle_driver = {
|
static struct cpuidle_driver shmobile_cpuidle_driver = {
|
||||||
.name = "shmobile_cpuidle",
|
.name = "shmobile_cpuidle",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.states[0] = {
|
.en_core_tk_irqen = 1,
|
||||||
.name = "C1",
|
.states[0] = ARM_CPUIDLE_WFI_STATE,
|
||||||
.desc = "WFI",
|
.safe_state_index = 0, /* C1 */
|
||||||
.exit_latency = 1,
|
.state_count = 1,
|
||||||
.target_residency = 1 * 2,
|
|
||||||
.flags = CPUIDLE_FLAG_TIME_VALID,
|
|
||||||
},
|
|
||||||
.safe_state_index = 0, /* C1 */
|
|
||||||
.state_count = 1,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv);
|
void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv);
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ static int cpuidle_sleep_enter(struct cpuidle_device *dev,
|
|||||||
int index)
|
int index)
|
||||||
{
|
{
|
||||||
unsigned long allowed_mode = SUSP_SH_SLEEP;
|
unsigned long allowed_mode = SUSP_SH_SLEEP;
|
||||||
ktime_t before, after;
|
|
||||||
int requested_state = index;
|
int requested_state = index;
|
||||||
int allowed_state;
|
int allowed_state;
|
||||||
int k;
|
int k;
|
||||||
@@ -47,19 +46,16 @@ static int cpuidle_sleep_enter(struct cpuidle_device *dev,
|
|||||||
*/
|
*/
|
||||||
k = min_t(int, allowed_state, requested_state);
|
k = min_t(int, allowed_state, requested_state);
|
||||||
|
|
||||||
before = ktime_get();
|
|
||||||
sh_mobile_call_standby(cpuidle_mode[k]);
|
sh_mobile_call_standby(cpuidle_mode[k]);
|
||||||
after = ktime_get();
|
|
||||||
|
|
||||||
dev->last_residency = (int)ktime_to_ns(ktime_sub(after, before)) >> 10;
|
|
||||||
|
|
||||||
return k;
|
return k;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cpuidle_device cpuidle_dev;
|
static struct cpuidle_device cpuidle_dev;
|
||||||
static struct cpuidle_driver cpuidle_driver = {
|
static struct cpuidle_driver cpuidle_driver = {
|
||||||
.name = "sh_idle",
|
.name = "sh_idle",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.en_core_tk_irqen = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
void sh_mobile_setup_cpuidle(void)
|
void sh_mobile_setup_cpuidle(void)
|
||||||
|
|||||||
@@ -642,6 +642,7 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
|||||||
kfree(buffer.pointer);
|
kfree(buffer.pointer);
|
||||||
buffer.length = ACPI_ALLOCATE_BUFFER;
|
buffer.length = ACPI_ALLOCATE_BUFFER;
|
||||||
buffer.pointer = NULL;
|
buffer.pointer = NULL;
|
||||||
|
lapic = NULL;
|
||||||
|
|
||||||
if (!alloc_cpumask_var(&tmp_map, GFP_KERNEL))
|
if (!alloc_cpumask_var(&tmp_map, GFP_KERNEL))
|
||||||
goto out;
|
goto out;
|
||||||
@@ -650,7 +651,7 @@ static int __cpuinit _acpi_map_lsapic(acpi_handle handle, int *pcpu)
|
|||||||
goto free_tmp_map;
|
goto free_tmp_map;
|
||||||
|
|
||||||
cpumask_copy(tmp_map, cpu_present_mask);
|
cpumask_copy(tmp_map, cpu_present_mask);
|
||||||
acpi_register_lapic(physid, lapic->lapic_flags & ACPI_MADT_ENABLED);
|
acpi_register_lapic(physid, ACPI_MADT_ENABLED);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If mp_register_lapic successfully generates a new logical cpu
|
* If mp_register_lapic successfully generates a new logical cpu
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
#include <linux/tboot.h>
|
#include <linux/tboot.h>
|
||||||
#include <linux/stackprotector.h>
|
#include <linux/stackprotector.h>
|
||||||
#include <linux/gfp.h>
|
#include <linux/gfp.h>
|
||||||
|
#include <linux/cpuidle.h>
|
||||||
|
|
||||||
#include <asm/acpi.h>
|
#include <asm/acpi.h>
|
||||||
#include <asm/desc.h>
|
#include <asm/desc.h>
|
||||||
@@ -1404,7 +1405,8 @@ void native_play_dead(void)
|
|||||||
tboot_shutdown(TB_SHUTDOWN_WFS);
|
tboot_shutdown(TB_SHUTDOWN_WFS);
|
||||||
|
|
||||||
mwait_play_dead(); /* Only returns on failure */
|
mwait_play_dead(); /* Only returns on failure */
|
||||||
hlt_play_dead();
|
if (cpuidle_play_dead())
|
||||||
|
hlt_play_dead();
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* ... !CONFIG_HOTPLUG_CPU */
|
#else /* ... !CONFIG_HOTPLUG_CPU */
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ static void tboot_copy_fadt(const struct acpi_table_fadt *fadt)
|
|||||||
offsetof(struct acpi_table_facs, firmware_waking_vector);
|
offsetof(struct acpi_table_facs, firmware_waking_vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
|
static int tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
|
||||||
{
|
{
|
||||||
static u32 acpi_shutdown_map[ACPI_S_STATE_COUNT] = {
|
static u32 acpi_shutdown_map[ACPI_S_STATE_COUNT] = {
|
||||||
/* S0,1,2: */ -1, -1, -1,
|
/* S0,1,2: */ -1, -1, -1,
|
||||||
@@ -281,7 +281,7 @@ void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
|
|||||||
/* S5: */ TB_SHUTDOWN_S5 };
|
/* S5: */ TB_SHUTDOWN_S5 };
|
||||||
|
|
||||||
if (!tboot_enabled())
|
if (!tboot_enabled())
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
tboot_copy_fadt(&acpi_gbl_FADT);
|
tboot_copy_fadt(&acpi_gbl_FADT);
|
||||||
tboot->acpi_sinfo.pm1a_cnt_val = pm1a_control;
|
tboot->acpi_sinfo.pm1a_cnt_val = pm1a_control;
|
||||||
@@ -292,10 +292,11 @@ void tboot_sleep(u8 sleep_state, u32 pm1a_control, u32 pm1b_control)
|
|||||||
if (sleep_state >= ACPI_S_STATE_COUNT ||
|
if (sleep_state >= ACPI_S_STATE_COUNT ||
|
||||||
acpi_shutdown_map[sleep_state] == -1) {
|
acpi_shutdown_map[sleep_state] == -1) {
|
||||||
pr_warning("unsupported sleep state 0x%x\n", sleep_state);
|
pr_warning("unsupported sleep state 0x%x\n", sleep_state);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
tboot_shutdown(acpi_shutdown_map[sleep_state]);
|
tboot_shutdown(acpi_shutdown_map[sleep_state]);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static atomic_t ap_wfs_count;
|
static atomic_t ap_wfs_count;
|
||||||
@@ -345,6 +346,8 @@ static __init int tboot_late_init(void)
|
|||||||
|
|
||||||
atomic_set(&ap_wfs_count, 0);
|
atomic_set(&ap_wfs_count, 0);
|
||||||
register_hotcpu_notifier(&tboot_cpu_notifier);
|
register_hotcpu_notifier(&tboot_cpu_notifier);
|
||||||
|
|
||||||
|
acpi_os_set_prepare_sleep(&tboot_sleep);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -384,6 +384,15 @@ config ACPI_CUSTOM_METHOD
|
|||||||
load additional kernel modules after boot, this feature may be used
|
load additional kernel modules after boot, this feature may be used
|
||||||
to override that restriction).
|
to override that restriction).
|
||||||
|
|
||||||
|
config ACPI_BGRT
|
||||||
|
tristate "Boottime Graphics Resource Table support"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
This driver adds support for exposing the ACPI Boottime Graphics
|
||||||
|
Resource Table, which allows the operating system to obtain
|
||||||
|
data from the firmware boot splash. It will appear under
|
||||||
|
/sys/firmware/acpi/bgrt/ .
|
||||||
|
|
||||||
source "drivers/acpi/apei/Kconfig"
|
source "drivers/acpi/apei/Kconfig"
|
||||||
|
|
||||||
endif # ACPI
|
endif # ACPI
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ obj-$(CONFIG_ACPI_SBS) += sbs.o
|
|||||||
obj-$(CONFIG_ACPI_HED) += hed.o
|
obj-$(CONFIG_ACPI_HED) += hed.o
|
||||||
obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o
|
obj-$(CONFIG_ACPI_EC_DEBUGFS) += ec_sys.o
|
||||||
obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o
|
obj-$(CONFIG_ACPI_CUSTOM_METHOD)+= custom_method.o
|
||||||
|
obj-$(CONFIG_ACPI_BGRT) += bgrt.o
|
||||||
|
|
||||||
# processor has its own "processor." module_param namespace
|
# processor has its own "processor." module_param namespace
|
||||||
processor-y := processor_driver.o processor_throttling.o
|
processor-y := processor_driver.o processor_throttling.o
|
||||||
|
|||||||
@@ -68,12 +68,14 @@ acpi-y += \
|
|||||||
|
|
||||||
acpi-y += \
|
acpi-y += \
|
||||||
hwacpi.o \
|
hwacpi.o \
|
||||||
|
hwesleep.o \
|
||||||
hwgpe.o \
|
hwgpe.o \
|
||||||
hwpci.o \
|
hwpci.o \
|
||||||
hwregs.o \
|
hwregs.o \
|
||||||
hwsleep.o \
|
hwsleep.o \
|
||||||
hwvalid.o \
|
hwvalid.o \
|
||||||
hwxface.o
|
hwxface.o \
|
||||||
|
hwxfsleep.o
|
||||||
|
|
||||||
acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
|
acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
*
|
*
|
||||||
* Note: The order of these include files is important.
|
* Note: The order of these include files is important.
|
||||||
*/
|
*/
|
||||||
#include "acconfig.h" /* Global configuration constants */
|
|
||||||
#include "acmacros.h" /* C macros */
|
#include "acmacros.h" /* C macros */
|
||||||
#include "aclocal.h" /* Internal data types */
|
#include "aclocal.h" /* Internal data types */
|
||||||
#include "acobject.h" /* ACPI internal object */
|
#include "acobject.h" /* ACPI internal object */
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user