Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
da3df858
Commit
da3df858
authored
Dec 24, 2009
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'pdc' into release
parents
309ddc53
e59897fe
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
114 additions
and
220 deletions
+114
-220
arch/ia64/include/asm/acpi.h
arch/ia64/include/asm/acpi.h
+6
-0
arch/ia64/kernel/Makefile
arch/ia64/kernel/Makefile
+0
-4
arch/ia64/kernel/acpi-processor.c
arch/ia64/kernel/acpi-processor.c
+0
-85
arch/x86/include/asm/acpi.h
arch/x86/include/asm/acpi.h
+26
-0
arch/x86/kernel/acpi/Makefile
arch/x86/kernel/acpi/Makefile
+1
-1
arch/x86/kernel/acpi/processor.c
arch/x86/kernel/acpi/processor.c
+0
-101
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+1
-1
drivers/acpi/processor_pdc.c
drivers/acpi/processor_pdc.c
+79
-22
include/acpi/processor.h
include/acpi/processor.h
+1
-6
No files found.
arch/ia64/include/asm/acpi.h
View file @
da3df858
...
...
@@ -132,6 +132,12 @@ extern int __devinitdata pxm_to_nid_map[MAX_PXM_DOMAINS];
extern
int
__initdata
nid_to_pxm_map
[
MAX_NUMNODES
];
#endif
static
inline
bool
arch_has_acpi_pdc
(
void
)
{
return
true
;
}
static
inline
void
arch_acpi_set_pdc_bits
(
u32
*
buf
)
{
buf
[
2
]
|=
ACPI_PDC_EST_CAPABILITY_SMP
;
}
#define acpi_unlazy_tlb(x)
#ifdef CONFIG_ACPI_NUMA
...
...
arch/ia64/kernel/Makefile
View file @
da3df858
...
...
@@ -18,10 +18,6 @@ obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o
obj-$(CONFIG_IA64_HP_ZX1)
+=
acpi-ext.o
obj-$(CONFIG_IA64_HP_ZX1_SWIOTLB)
+=
acpi-ext.o
ifneq
($(CONFIG_ACPI_PROCESSOR),)
obj-y
+=
acpi-processor.o
endif
obj-$(CONFIG_IA64_PALINFO)
+=
palinfo.o
obj-$(CONFIG_IOSAPIC)
+=
iosapic.o
obj-$(CONFIG_MODULES)
+=
module.o
...
...
arch/ia64/kernel/acpi-processor.c
deleted
100644 → 0
View file @
309ddc53
/*
* arch/ia64/kernel/acpi-processor.c
*
* Copyright (C) 2005 Intel Corporation
* Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
* - Added _PDC for platforms with Intel CPUs
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/acpi.h>
#include <acpi/processor.h>
#include <asm/acpi.h>
static
void
init_intel_pdc
(
struct
acpi_processor
*
pr
)
{
struct
acpi_object_list
*
obj_list
;
union
acpi_object
*
obj
;
u32
*
buf
;
/* allocate and initialize pdc. It will be used later. */
obj_list
=
kmalloc
(
sizeof
(
struct
acpi_object_list
),
GFP_KERNEL
);
if
(
!
obj_list
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
return
;
}
obj
=
kmalloc
(
sizeof
(
union
acpi_object
),
GFP_KERNEL
);
if
(
!
obj
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj_list
);
return
;
}
buf
=
kmalloc
(
12
,
GFP_KERNEL
);
if
(
!
buf
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj
);
kfree
(
obj_list
);
return
;
}
buf
[
0
]
=
ACPI_PDC_REVISION_ID
;
buf
[
1
]
=
1
;
buf
[
2
]
=
ACPI_PDC_EST_CAPABILITY_SMP
;
/*
* The default of PDC_SMP_T_SWCOORD bit is set for IA64 cpu so
* that OSPM is capable of native ACPI throttling software
* coordination using BIOS supplied _TSD info.
*/
buf
[
2
]
|=
ACPI_PDC_SMP_T_SWCOORD
;
obj
->
type
=
ACPI_TYPE_BUFFER
;
obj
->
buffer
.
length
=
12
;
obj
->
buffer
.
pointer
=
(
u8
*
)
buf
;
obj_list
->
count
=
1
;
obj_list
->
pointer
=
obj
;
pr
->
pdc
=
obj_list
;
return
;
}
/* Initialize _PDC data based on the CPU vendor */
void
arch_acpi_processor_init_pdc
(
struct
acpi_processor
*
pr
)
{
pr
->
pdc
=
NULL
;
init_intel_pdc
(
pr
);
return
;
}
EXPORT_SYMBOL
(
arch_acpi_processor_init_pdc
);
void
arch_acpi_processor_cleanup_pdc
(
struct
acpi_processor
*
pr
)
{
if
(
pr
->
pdc
)
{
kfree
(
pr
->
pdc
->
pointer
->
buffer
.
pointer
);
kfree
(
pr
->
pdc
->
pointer
);
kfree
(
pr
->
pdc
);
pr
->
pdc
=
NULL
;
}
}
EXPORT_SYMBOL
(
arch_acpi_processor_cleanup_pdc
);
arch/x86/include/asm/acpi.h
View file @
da3df858
...
...
@@ -142,6 +142,32 @@ static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
return
max_cstate
;
}
static
inline
bool
arch_has_acpi_pdc
(
void
)
{
struct
cpuinfo_x86
*
c
=
&
cpu_data
(
0
);
return
(
c
->
x86_vendor
==
X86_VENDOR_INTEL
||
c
->
x86_vendor
==
X86_VENDOR_CENTAUR
);
}
static
inline
void
arch_acpi_set_pdc_bits
(
u32
*
buf
)
{
struct
cpuinfo_x86
*
c
=
&
cpu_data
(
0
);
buf
[
2
]
|=
ACPI_PDC_C_CAPABILITY_SMP
;
if
(
cpu_has
(
c
,
X86_FEATURE_EST
))
buf
[
2
]
|=
ACPI_PDC_EST_CAPABILITY_SWSMP
;
if
(
cpu_has
(
c
,
X86_FEATURE_ACPI
))
buf
[
2
]
|=
ACPI_PDC_T_FFH
;
/*
* If mwait/monitor is unsupported, C2/C3_FFH will be disabled
*/
if
(
!
cpu_has
(
c
,
X86_FEATURE_MWAIT
))
buf
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
);
}
#else
/* !CONFIG_ACPI */
#define acpi_lapic 0
...
...
arch/x86/kernel/acpi/Makefile
View file @
da3df858
...
...
@@ -4,7 +4,7 @@ obj-$(CONFIG_ACPI) += boot.o
obj-$(CONFIG_ACPI_SLEEP)
+=
sleep.o wakeup_rm.o wakeup_
$(BITS)
.o
ifneq
($(CONFIG_ACPI_PROCESSOR),)
obj-y
+=
cstate.o
processor.o
obj-y
+=
cstate.o
endif
$(obj)/wakeup_rm.o
:
$(obj)/realmode/wakeup.bin
...
...
arch/x86/kernel/acpi/processor.c
deleted
100644 → 0
View file @
309ddc53
/*
* Copyright (C) 2005 Intel Corporation
* Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
* - Added _PDC for platforms with Intel CPUs
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/acpi.h>
#include <acpi/processor.h>
#include <asm/acpi.h>
static
void
init_intel_pdc
(
struct
acpi_processor
*
pr
,
struct
cpuinfo_x86
*
c
)
{
struct
acpi_object_list
*
obj_list
;
union
acpi_object
*
obj
;
u32
*
buf
;
/* allocate and initialize pdc. It will be used later. */
obj_list
=
kmalloc
(
sizeof
(
struct
acpi_object_list
),
GFP_KERNEL
);
if
(
!
obj_list
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
return
;
}
obj
=
kmalloc
(
sizeof
(
union
acpi_object
),
GFP_KERNEL
);
if
(
!
obj
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj_list
);
return
;
}
buf
=
kmalloc
(
12
,
GFP_KERNEL
);
if
(
!
buf
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj
);
kfree
(
obj_list
);
return
;
}
buf
[
0
]
=
ACPI_PDC_REVISION_ID
;
buf
[
1
]
=
1
;
buf
[
2
]
=
ACPI_PDC_C_CAPABILITY_SMP
;
/*
* The default of PDC_SMP_T_SWCOORD bit is set for intel x86 cpu so
* that OSPM is capable of native ACPI throttling software
* coordination using BIOS supplied _TSD info.
*/
buf
[
2
]
|=
ACPI_PDC_SMP_T_SWCOORD
;
if
(
cpu_has
(
c
,
X86_FEATURE_EST
))
buf
[
2
]
|=
ACPI_PDC_EST_CAPABILITY_SWSMP
;
if
(
cpu_has
(
c
,
X86_FEATURE_ACPI
))
buf
[
2
]
|=
ACPI_PDC_T_FFH
;
/*
* If mwait/monitor is unsupported, C2/C3_FFH will be disabled
*/
if
(
!
cpu_has
(
c
,
X86_FEATURE_MWAIT
))
buf
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
);
obj
->
type
=
ACPI_TYPE_BUFFER
;
obj
->
buffer
.
length
=
12
;
obj
->
buffer
.
pointer
=
(
u8
*
)
buf
;
obj_list
->
count
=
1
;
obj_list
->
pointer
=
obj
;
pr
->
pdc
=
obj_list
;
return
;
}
/* Initialize _PDC data based on the CPU vendor */
void
arch_acpi_processor_init_pdc
(
struct
acpi_processor
*
pr
)
{
struct
cpuinfo_x86
*
c
=
&
cpu_data
(
pr
->
id
);
pr
->
pdc
=
NULL
;
if
(
c
->
x86_vendor
==
X86_VENDOR_INTEL
||
c
->
x86_vendor
==
X86_VENDOR_CENTAUR
)
init_intel_pdc
(
pr
,
c
);
return
;
}
EXPORT_SYMBOL
(
arch_acpi_processor_init_pdc
);
void
arch_acpi_processor_cleanup_pdc
(
struct
acpi_processor
*
pr
)
{
if
(
pr
->
pdc
)
{
kfree
(
pr
->
pdc
->
pointer
->
buffer
.
pointer
);
kfree
(
pr
->
pdc
->
pointer
);
kfree
(
pr
->
pdc
);
pr
->
pdc
=
NULL
;
}
}
EXPORT_SYMBOL
(
arch_acpi_processor_cleanup_pdc
);
drivers/acpi/processor_core.c
View file @
da3df858
...
...
@@ -763,7 +763,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device)
}
/* _PDC call should be done before doing anything else (if reqd.). */
acpi_processor_set_pdc
(
pr
);
acpi_processor_set_pdc
(
pr
->
handle
);
#ifdef CONFIG_CPU_FREQ
acpi_processor_ppc_has_changed
(
pr
,
0
);
...
...
drivers/acpi/processor_pdc.c
View file @
da3df858
/*
* Copyright (C) 2005 Intel Corporation
* Copyright (C) 2009 Hewlett-Packard Development Company, L.P.
*
* Alex Chiang <achiang@hp.com>
* - Unified x86/ia64 implementations
* Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
* - Added _PDC for platforms with Intel CPUs
*/
#include <linux/dmi.h>
#include <acpi/acpi_drivers.h>
...
...
@@ -33,17 +42,66 @@ static struct dmi_system_id __cpuinitdata processor_idle_dmi_table[] = {
{},
};
static
void
acpi_set_pdc_bits
(
u32
*
buf
)
{
buf
[
0
]
=
ACPI_PDC_REVISION_ID
;
buf
[
1
]
=
1
;
/* Enable coordination with firmware's _TSD info */
buf
[
2
]
=
ACPI_PDC_SMP_T_SWCOORD
;
/* Twiddle arch-specific bits needed for _PDC */
arch_acpi_set_pdc_bits
(
buf
);
}
static
struct
acpi_object_list
*
acpi_processor_alloc_pdc
(
void
)
{
struct
acpi_object_list
*
obj_list
;
union
acpi_object
*
obj
;
u32
*
buf
;
/* allocate and initialize pdc. It will be used later. */
obj_list
=
kmalloc
(
sizeof
(
struct
acpi_object_list
),
GFP_KERNEL
);
if
(
!
obj_list
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
return
NULL
;
}
obj
=
kmalloc
(
sizeof
(
union
acpi_object
),
GFP_KERNEL
);
if
(
!
obj
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj_list
);
return
NULL
;
}
buf
=
kmalloc
(
12
,
GFP_KERNEL
);
if
(
!
buf
)
{
printk
(
KERN_ERR
"Memory allocation error
\n
"
);
kfree
(
obj
);
kfree
(
obj_list
);
return
NULL
;
}
acpi_set_pdc_bits
(
buf
);
obj
->
type
=
ACPI_TYPE_BUFFER
;
obj
->
buffer
.
length
=
12
;
obj
->
buffer
.
pointer
=
(
u8
*
)
buf
;
obj_list
->
count
=
1
;
obj_list
->
pointer
=
obj
;
return
obj_list
;
}
/*
* _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
)
static
int
acpi_processor_eval_pdc
(
acpi_handle
handle
,
struct
acpi_object_list
*
pdc_in
)
{
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
...
...
@@ -58,7 +116,7 @@ static int acpi_processor_eval_pdc(struct acpi_processor *pr)
buffer
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
|
ACPI_PDC_C_C1_FFH
);
}
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_PDC"
,
pdc_in
,
NULL
);
status
=
acpi_evaluate_object
(
handle
,
"_PDC"
,
pdc_in
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
...
...
@@ -67,30 +125,29 @@ static int acpi_processor_eval_pdc(struct acpi_processor *pr)
return
status
;
}
void
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
)
void
acpi_processor_set_pdc
(
acpi_handle
handle
)
{
arch_acpi_processor_init_pdc
(
pr
);
acpi_processor_eval_pdc
(
pr
);
arch_acpi_processor_cleanup_pdc
(
pr
);
struct
acpi_object_list
*
obj_list
;
if
(
arch_has_acpi_pdc
()
==
false
)
return
;
obj_list
=
acpi_processor_alloc_pdc
();
if
(
!
obj_list
)
return
;
acpi_processor_eval_pdc
(
handle
,
obj_list
);
kfree
(
obj_list
->
pointer
->
buffer
.
pointer
);
kfree
(
obj_list
->
pointer
);
kfree
(
obj_list
);
}
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
);
acpi_processor_set_pdc
(
handle
);
return
AE_OK
;
}
...
...
include/acpi/processor.h
View file @
da3df858
...
...
@@ -224,8 +224,6 @@ struct acpi_processor {
struct
acpi_processor_throttling
throttling
;
struct
acpi_processor_limit
limit
;
struct
thermal_cooling_device
*
cdev
;
/* the _PDC objects for this processor, if any */
struct
acpi_object_list
*
pdc
;
};
struct
acpi_processor_errata
{
...
...
@@ -257,9 +255,6 @@ int acpi_processor_notify_smm(struct module *calling_module);
DECLARE_PER_CPU
(
struct
acpi_processor
*
,
processors
);
extern
struct
acpi_processor_errata
errata
;
void
arch_acpi_processor_init_pdc
(
struct
acpi_processor
*
pr
);
void
arch_acpi_processor_cleanup_pdc
(
struct
acpi_processor
*
pr
);
#ifdef ARCH_HAS_POWER_INIT
void
acpi_processor_power_init_bm_check
(
struct
acpi_processor_flags
*
flags
,
unsigned
int
cpu
);
...
...
@@ -326,7 +321,7 @@ 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
);
void
acpi_processor_set_pdc
(
acpi_handle
handle
);
/* in processor_throttling.c */
int
acpi_processor_tstate_has_changed
(
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