Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
309ddc53
Commit
309ddc53
authored
Dec 24, 2009
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'bugzilla-14446', 'bugzilla-14753' and 'bugzilla-14824' into release
parents
6f5464ce
55b313f2
81074e90
78f16996
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
137 additions
and
71 deletions
+137
-71
drivers/acpi/Makefile
drivers/acpi/Makefile
+1
-0
drivers/acpi/blacklist.c
drivers/acpi/blacklist.c
+14
-0
drivers/acpi/bus.c
drivers/acpi/bus.c
+2
-0
drivers/acpi/ec.c
drivers/acpi/ec.c
+8
-2
drivers/acpi/internal.h
drivers/acpi/internal.h
+1
-0
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+0
-69
drivers/acpi/processor_pdc.c
drivers/acpi/processor_pdc.c
+108
-0
include/acpi/processor.h
include/acpi/processor.h
+3
-0
No files found.
drivers/acpi/Makefile
View file @
309ddc53
...
...
@@ -32,6 +32,7 @@ acpi-$(CONFIG_ACPI_SLEEP) += proc.o
#
acpi-y
+=
bus.o glue.o
acpi-y
+=
scan.o
acpi-y
+=
processor_pdc.o
acpi-y
+=
ec.o
acpi-$(CONFIG_ACPI_DOCK)
+=
dock.o
acpi-y
+=
pci_root.o pci_link.o pci_irq.o pci_bind.o
...
...
drivers/acpi/blacklist.c
View file @
309ddc53
...
...
@@ -185,6 +185,12 @@ static int __init dmi_disable_osi_vista(const struct dmi_system_id *d)
acpi_osi_setup
(
"!Windows 2006"
);
return
0
;
}
static
int
__init
dmi_disable_osi_win7
(
const
struct
dmi_system_id
*
d
)
{
printk
(
KERN_NOTICE
PREFIX
"DMI detected: %s
\n
"
,
d
->
ident
);
acpi_osi_setup
(
"!Windows 2009"
);
return
0
;
}
static
struct
dmi_system_id
acpi_osi_dmi_table
[]
__initdata
=
{
{
...
...
@@ -211,6 +217,14 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Sony VGN-SR290J"
),
},
},
{
.
callback
=
dmi_disable_osi_win7
,
.
ident
=
"ASUS K50IJ"
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ASUSTeK Computer Inc."
),
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"K50IJ"
),
},
},
/*
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
...
...
drivers/acpi/bus.c
View file @
309ddc53
...
...
@@ -898,6 +898,8 @@ static int __init acpi_bus_init(void)
goto
error1
;
}
acpi_early_processor_set_pdc
();
/*
* Maybe EC region is required at bus_scan/acpi_get_devices. So it
* is necessary to enable it as early as possible.
...
...
drivers/acpi/ec.c
View file @
309ddc53
...
...
@@ -916,6 +916,7 @@ static int ec_validate_ecdt(const struct dmi_system_id *id)
/* MSI EC needs special treatment, enable it */
static
int
ec_flag_msi
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_DEBUG
PREFIX
"Detected MSI hardware, enabling workarounds.
\n
"
);
EC_FLAGS_MSI
=
1
;
EC_FLAGS_VALIDATE_ECDT
=
1
;
return
0
;
...
...
@@ -928,8 +929,13 @@ static struct dmi_system_id __initdata ec_dmi_table[] = {
DMI_MATCH
(
DMI_BOARD_NAME
,
"JFL92"
)
},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Micro-Star"
),
DMI_MATCH
(
DMI_CHASSIS_VENDOR
,
"MICRO-Star"
)
},
NULL
},
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Micro-Star"
)},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Micro-Star"
)},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_CHASSIS_VENDOR
,
"MICRO-Star"
)},
NULL
},
{
ec_validate_ecdt
,
"ASUS hardware"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"ASUS"
)
},
NULL
},
...
...
drivers/acpi/internal.h
View file @
309ddc53
...
...
@@ -43,6 +43,7 @@ int acpi_power_transition(struct acpi_device *device, int state);
extern
int
acpi_power_nocheck
;
int
acpi_wakeup_device_init
(
void
);
void
acpi_early_processor_set_pdc
(
void
);
/* --------------------------------------------------------------------------
Embedded Controller
...
...
drivers/acpi/processor_core.c
View file @
309ddc53
...
...
@@ -124,29 +124,6 @@ static const struct file_operations acpi_processor_info_fops = {
DEFINE_PER_CPU
(
struct
acpi_processor
*
,
processors
);
struct
acpi_processor_errata
errata
__read_mostly
;
static
int
set_no_mwait
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_NOTICE
PREFIX
"%s detected - "
"disabling mwait for CPU C-states
\n
"
,
id
->
ident
);
idle_nomwait
=
1
;
return
0
;
}
static
struct
dmi_system_id
__cpuinitdata
processor_idle_dmi_table
[]
=
{
{
set_no_mwait
,
"IFL91 board"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"COMPAL"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ZEPTO"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"3215W"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"IFL91"
)
},
NULL
},
{
set_no_mwait
,
"Extensa 5220"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Acer"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"0100"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"Columbia"
)
},
NULL
},
{},
};
/* --------------------------------------------------------------------------
Errata Handling
...
...
@@ -276,45 +253,6 @@ static int acpi_processor_errata(struct acpi_processor *pr)
return
result
;
}
/* --------------------------------------------------------------------------
Common ACPI processor functions
-------------------------------------------------------------------------- */
/*
* _PDC is required for a BIOS-OS handshake for most of the newer
* ACPI processor features.
*/
static
int
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
)
{
struct
acpi_object_list
*
pdc_in
=
pr
->
pdc
;
acpi_status
status
=
AE_OK
;
if
(
!
pdc_in
)
return
status
;
if
(
idle_nomwait
)
{
/*
* If mwait is disabled for CPU C-states, the C2C3_FFH access
* mode will be disabled in the parameter of _PDC object.
* Of course C1_FFH access mode will also be disabled.
*/
union
acpi_object
*
obj
;
u32
*
buffer
=
NULL
;
obj
=
pdc_in
->
pointer
;
buffer
=
(
u32
*
)(
obj
->
buffer
.
pointer
);
buffer
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
|
ACPI_PDC_C_C1_FFH
);
}
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_PDC"
,
pdc_in
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Could not evaluate _PDC, using legacy perf. control...
\n
"
));
return
status
;
}
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
...
...
@@ -825,9 +763,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device)
}
/* _PDC call should be done before doing anything else (if reqd.). */
arch_acpi_processor_init_pdc
(
pr
);
acpi_processor_set_pdc
(
pr
);
arch_acpi_processor_cleanup_pdc
(
pr
);
#ifdef CONFIG_CPU_FREQ
acpi_processor_ppc_has_changed
(
pr
,
0
);
...
...
@@ -1145,11 +1081,6 @@ static int __init acpi_processor_init(void)
if
(
!
acpi_processor_dir
)
return
-
ENOMEM
;
#endif
/*
* Check whether the system is DMI table. If yes, OSPM
* should not use mwait for CPU-states.
*/
dmi_check_system
(
processor_idle_dmi_table
);
result
=
cpuidle_register_driver
(
&
acpi_idle_driver
);
if
(
result
<
0
)
goto
out_proc
;
...
...
drivers/acpi/processor_pdc.c
0 → 100644
View file @
309ddc53
#include <linux/dmi.h>
#include <acpi/acpi_drivers.h>
#include <acpi/processor.h>
#include "internal.h"
#define PREFIX "ACPI: "
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME
(
"processor_pdc"
);
static
int
set_no_mwait
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_NOTICE
PREFIX
"%s detected - "
"disabling mwait for CPU C-states
\n
"
,
id
->
ident
);
idle_nomwait
=
1
;
return
0
;
}
static
struct
dmi_system_id
__cpuinitdata
processor_idle_dmi_table
[]
=
{
{
set_no_mwait
,
"IFL91 board"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"COMPAL"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ZEPTO"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"3215W"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"IFL91"
)
},
NULL
},
{
set_no_mwait
,
"Extensa 5220"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Acer"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"0100"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"Columbia"
)
},
NULL
},
{},
};
/*
* _PDC is required for a BIOS-OS handshake for most of the newer
* ACPI processor features.
*/
static
int
acpi_processor_eval_pdc
(
struct
acpi_processor
*
pr
)
{
struct
acpi_object_list
*
pdc_in
=
pr
->
pdc
;
acpi_status
status
=
AE_OK
;
if
(
!
pdc_in
)
return
status
;
if
(
idle_nomwait
)
{
/*
* If mwait is disabled for CPU C-states, the C2C3_FFH access
* mode will be disabled in the parameter of _PDC object.
* Of course C1_FFH access mode will also be disabled.
*/
union
acpi_object
*
obj
;
u32
*
buffer
=
NULL
;
obj
=
pdc_in
->
pointer
;
buffer
=
(
u32
*
)(
obj
->
buffer
.
pointer
);
buffer
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
|
ACPI_PDC_C_C1_FFH
);
}
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_PDC"
,
pdc_in
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Could not evaluate _PDC, using legacy perf. control.
\n
"
));
return
status
;
}
void
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
)
{
arch_acpi_processor_init_pdc
(
pr
);
acpi_processor_eval_pdc
(
pr
);
arch_acpi_processor_cleanup_pdc
(
pr
);
}
EXPORT_SYMBOL_GPL
(
acpi_processor_set_pdc
);
static
acpi_status
early_init_pdc
(
acpi_handle
handle
,
u32
lvl
,
void
*
context
,
void
**
rv
)
{
struct
acpi_processor
pr
;
pr
.
handle
=
handle
;
/* x86 implementation looks at pr.id to determine some
* CPU capabilites. We can just hard code to 0 since we're
* assuming the CPUs in the system are homogenous and all
* have the same capabilities.
*/
pr
.
id
=
0
;
acpi_processor_set_pdc
(
&
pr
);
return
AE_OK
;
}
void
acpi_early_processor_set_pdc
(
void
)
{
/*
* Check whether the system is DMI table. If yes, OSPM
* should not use mwait for CPU-states.
*/
dmi_check_system
(
processor_idle_dmi_table
);
acpi_walk_namespace
(
ACPI_TYPE_PROCESSOR
,
ACPI_ROOT_OBJECT
,
ACPI_UINT32_MAX
,
early_init_pdc
,
NULL
,
NULL
,
NULL
);
}
include/acpi/processor.h
View file @
309ddc53
...
...
@@ -325,6 +325,9 @@ static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
#endif
/* CONFIG_CPU_FREQ */
/* in processor_pdc.c */
void
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
);
/* in processor_throttling.c */
int
acpi_processor_tstate_has_changed
(
struct
acpi_processor
*
pr
);
int
acpi_processor_get_throttling_info
(
struct
acpi_processor
*
pr
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment