Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
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-2.6.23
Commits
220ec706
Commit
220ec706
authored
Dec 01, 2005
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull 3410 into release branch
parents
16071a07
1cbf4c56
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
108 additions
and
93 deletions
+108
-93
drivers/acpi/processor_thermal.c
drivers/acpi/processor_thermal.c
+23
-15
drivers/acpi/thermal.c
drivers/acpi/thermal.c
+85
-78
No files found.
drivers/acpi/processor_thermal.c
View file @
220ec706
...
@@ -101,9 +101,7 @@ static unsigned int acpi_thermal_cpufreq_is_init = 0;
...
@@ -101,9 +101,7 @@ static unsigned int acpi_thermal_cpufreq_is_init = 0;
static
int
cpu_has_cpufreq
(
unsigned
int
cpu
)
static
int
cpu_has_cpufreq
(
unsigned
int
cpu
)
{
{
struct
cpufreq_policy
policy
;
struct
cpufreq_policy
policy
;
if
(
!
acpi_thermal_cpufreq_is_init
)
if
(
!
acpi_thermal_cpufreq_is_init
||
cpufreq_get_policy
(
&
policy
,
cpu
))
return
-
ENODEV
;
if
(
!
cpufreq_get_policy
(
&
policy
,
cpu
))
return
-
ENODEV
;
return
-
ENODEV
;
return
0
;
return
0
;
}
}
...
@@ -127,13 +125,13 @@ static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
...
@@ -127,13 +125,13 @@ static int acpi_thermal_cpufreq_decrease(unsigned int cpu)
if
(
!
cpu_has_cpufreq
(
cpu
))
if
(
!
cpu_has_cpufreq
(
cpu
))
return
-
ENODEV
;
return
-
ENODEV
;
if
(
cpufreq_thermal_reduction_pctg
[
cpu
]
>
=
20
)
{
if
(
cpufreq_thermal_reduction_pctg
[
cpu
]
>
20
)
cpufreq_thermal_reduction_pctg
[
cpu
]
-=
20
;
cpufreq_thermal_reduction_pctg
[
cpu
]
-=
20
;
else
cpufreq_thermal_reduction_pctg
[
cpu
]
=
0
;
cpufreq_update_policy
(
cpu
);
cpufreq_update_policy
(
cpu
);
return
0
;
/* We reached max freq again and can leave passive mode */
}
return
!
cpufreq_thermal_reduction_pctg
[
cpu
];
return
-
ERANGE
;
}
}
static
int
acpi_thermal_cpufreq_notifier
(
struct
notifier_block
*
nb
,
static
int
acpi_thermal_cpufreq_notifier
(
struct
notifier_block
*
nb
,
...
@@ -200,7 +198,7 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
...
@@ -200,7 +198,7 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
int
result
=
0
;
int
result
=
0
;
struct
acpi_processor
*
pr
=
NULL
;
struct
acpi_processor
*
pr
=
NULL
;
struct
acpi_device
*
device
=
NULL
;
struct
acpi_device
*
device
=
NULL
;
int
tx
=
0
;
int
tx
=
0
,
max_tx_px
=
0
;
ACPI_FUNCTION_TRACE
(
"acpi_processor_set_thermal_limit"
);
ACPI_FUNCTION_TRACE
(
"acpi_processor_set_thermal_limit"
);
...
@@ -259,19 +257,27 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
...
@@ -259,19 +257,27 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
/* if going down: T-states first, P-states later */
/* if going down: T-states first, P-states later */
if
(
pr
->
flags
.
throttling
)
{
if
(
pr
->
flags
.
throttling
)
{
if
(
tx
==
0
)
if
(
tx
==
0
)
{
max_tx_px
=
1
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"At minimum throttling state
\n
"
));
"At minimum throttling state
\n
"
));
else
{
}
else
{
tx
--
;
tx
--
;
goto
end
;
goto
end
;
}
}
}
}
result
=
acpi_thermal_cpufreq_decrease
(
pr
->
id
);
result
=
acpi_thermal_cpufreq_decrease
(
pr
->
id
);
if
(
result
==
-
ERANGE
)
if
(
result
)
{
/*
* We only could get -ERANGE, 1 or 0.
* In the first two cases we reached max freq again.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"At minimum performance state
\n
"
));
"At minimum performance state
\n
"
));
max_tx_px
=
1
;
}
else
max_tx_px
=
0
;
break
;
break
;
}
}
...
@@ -290,7 +296,9 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
...
@@ -290,7 +296,9 @@ int acpi_processor_set_thermal_limit(acpi_handle handle, int type)
pr
->
limit
.
thermal
.
px
,
pr
->
limit
.
thermal
.
tx
));
pr
->
limit
.
thermal
.
px
,
pr
->
limit
.
thermal
.
tx
));
}
else
}
else
result
=
0
;
result
=
0
;
if
(
max_tx_px
)
return_VALUE
(
1
);
else
return_VALUE
(
result
);
return_VALUE
(
result
);
}
}
...
...
drivers/acpi/thermal.c
View file @
220ec706
...
@@ -72,7 +72,7 @@
...
@@ -72,7 +72,7 @@
#define _COMPONENT ACPI_THERMAL_COMPONENT
#define _COMPONENT ACPI_THERMAL_COMPONENT
ACPI_MODULE_NAME
(
"acpi_thermal"
)
ACPI_MODULE_NAME
(
"acpi_thermal"
)
MODULE_AUTHOR
(
"Paul Diefenbaugh"
);
MODULE_AUTHOR
(
"Paul Diefenbaugh"
);
MODULE_DESCRIPTION
(
ACPI_THERMAL_DRIVER_NAME
);
MODULE_DESCRIPTION
(
ACPI_THERMAL_DRIVER_NAME
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
...
@@ -517,9 +517,9 @@ static int acpi_thermal_hot(struct acpi_thermal *tz)
...
@@ -517,9 +517,9 @@ static int acpi_thermal_hot(struct acpi_thermal *tz)
return_VALUE
(
0
);
return_VALUE
(
0
);
}
}
static
int
acpi_thermal_passive
(
struct
acpi_thermal
*
tz
)
static
void
acpi_thermal_passive
(
struct
acpi_thermal
*
tz
)
{
{
int
result
=
0
;
int
result
=
1
;
struct
acpi_thermal_passive
*
passive
=
NULL
;
struct
acpi_thermal_passive
*
passive
=
NULL
;
int
trend
=
0
;
int
trend
=
0
;
int
i
=
0
;
int
i
=
0
;
...
@@ -527,7 +527,7 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
...
@@ -527,7 +527,7 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
ACPI_FUNCTION_TRACE
(
"acpi_thermal_passive"
);
ACPI_FUNCTION_TRACE
(
"acpi_thermal_passive"
);
if
(
!
tz
||
!
tz
->
trips
.
passive
.
flags
.
valid
)
if
(
!
tz
||
!
tz
->
trips
.
passive
.
flags
.
valid
)
return
_VALUE
(
-
EINVAL
)
;
return
;
passive
=
&
(
tz
->
trips
.
passive
);
passive
=
&
(
tz
->
trips
.
passive
);
...
@@ -547,7 +547,7 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
...
@@ -547,7 +547,7 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
trend
,
passive
->
tc1
,
tz
->
temperature
,
trend
,
passive
->
tc1
,
tz
->
temperature
,
tz
->
last_temperature
,
passive
->
tc2
,
tz
->
last_temperature
,
passive
->
tc2
,
tz
->
temperature
,
passive
->
temperature
));
tz
->
temperature
,
passive
->
temperature
));
tz
->
trips
.
passive
.
flags
.
enabled
=
1
;
passive
->
flags
.
enabled
=
1
;
/* Heating up? */
/* Heating up? */
if
(
trend
>
0
)
if
(
trend
>
0
)
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
...
@@ -556,12 +556,32 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
...
@@ -556,12 +556,32 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
handles
[
i
],
handles
[
i
],
ACPI_PROCESSOR_LIMIT_INCREMENT
);
ACPI_PROCESSOR_LIMIT_INCREMENT
);
/* Cooling off? */
/* Cooling off? */
else
if
(
trend
<
0
)
else
if
(
trend
<
0
)
{
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
acpi_processor_set_thermal_limit
(
passive
->
/*
devices
.
* assume that we are on highest
handles
[
i
],
* freq/lowest thrott and can leave
ACPI_PROCESSOR_LIMIT_DECREMENT
);
* passive mode, even in error case
*/
if
(
!
acpi_processor_set_thermal_limit
(
passive
->
devices
.
handles
[
i
],
ACPI_PROCESSOR_LIMIT_DECREMENT
))
result
=
0
;
/*
* Leave cooling mode, even if the temp might
* higher than trip point This is because some
* machines might have long thermal polling
* frequencies (tsp) defined. We will fall back
* into passive mode in next cycle (probably quicker)
*/
if
(
result
)
{
passive
->
flags
.
enabled
=
0
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Disabling passive cooling, still above threshold,"
" but we are cooling down
\n
"
));
}
}
return
;
}
}
/*
/*
...
@@ -571,23 +591,21 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
...
@@ -571,23 +591,21 @@ static int acpi_thermal_passive(struct acpi_thermal *tz)
* and avoid thrashing around the passive trip point. Note that we
* and avoid thrashing around the passive trip point. Note that we
* assume symmetry.
* assume symmetry.
*/
*/
else
if
(
tz
->
trips
.
passive
.
flags
.
enabled
)
{
if
(
!
passive
->
flags
.
enabled
)
return
;
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
for
(
i
=
0
;
i
<
passive
->
devices
.
count
;
i
++
)
result
=
if
(
!
acpi_processor_set_thermal_limit
acpi_processor_set_thermal_limit
(
passive
->
devices
.
(
passive
->
devices
.
handles
[
i
],
handles
[
i
],
ACPI_PROCESSOR_LIMIT_DECREMENT
))
ACPI_PROCESSOR_LIMIT_DECREMENT
)
;
result
=
0
;
if
(
result
==
1
)
{
if
(
result
)
{
tz
->
trips
.
passive
.
flags
.
enabled
=
0
;
passive
->
flags
.
enabled
=
0
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Disabling passive cooling (zone is cool)
\n
"
));
"Disabling passive cooling (zone is cool)
\n
"
));
}
}
}
return_VALUE
(
0
);
}
}
static
int
acpi_thermal_active
(
struct
acpi_thermal
*
tz
)
static
void
acpi_thermal_active
(
struct
acpi_thermal
*
tz
)
{
{
int
result
=
0
;
int
result
=
0
;
struct
acpi_thermal_active
*
active
=
NULL
;
struct
acpi_thermal_active
*
active
=
NULL
;
...
@@ -598,25 +616,24 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
...
@@ -598,25 +616,24 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
ACPI_FUNCTION_TRACE
(
"acpi_thermal_active"
);
ACPI_FUNCTION_TRACE
(
"acpi_thermal_active"
);
if
(
!
tz
)
if
(
!
tz
)
return
_VALUE
(
-
EINVAL
)
;
return
;
for
(
i
=
0
;
i
<
ACPI_THERMAL_MAX_ACTIVE
;
i
++
)
{
for
(
i
=
0
;
i
<
ACPI_THERMAL_MAX_ACTIVE
;
i
++
)
{
active
=
&
(
tz
->
trips
.
active
[
i
]);
active
=
&
(
tz
->
trips
.
active
[
i
]);
if
(
!
active
||
!
active
->
flags
.
valid
)
if
(
!
active
||
!
active
->
flags
.
valid
)
break
;
break
;
if
(
tz
->
temperature
>=
active
->
temperature
)
{
/*
/*
* Above Threshold?
* Above Threshold?
* ----------------
* ----------------
* If not already enabled, turn ON all cooling devices
* If not already enabled, turn ON all cooling devices
* associated with this active threshold.
* associated with this active threshold.
*/
*/
if
(
tz
->
temperature
>=
active
->
temperature
)
{
if
(
active
->
temperature
>
maxtemp
)
if
(
active
->
temperature
>
maxtemp
)
tz
->
state
.
active_index
=
i
,
maxtemp
=
tz
->
state
.
active_index
=
i
;
active
->
temperature
;
maxtemp
=
active
->
temperature
;
if
(
!
active
->
flags
.
enabled
)
{
if
(
active
->
flags
.
enabled
)
continue
;
for
(
j
=
0
;
j
<
active
->
devices
.
count
;
j
++
)
{
for
(
j
=
0
;
j
<
active
->
devices
.
count
;
j
++
)
{
result
=
result
=
acpi_bus_set_power
(
active
->
devices
.
acpi_bus_set_power
(
active
->
devices
.
...
@@ -625,36 +642,32 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
...
@@ -625,36 +642,32 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
if
(
result
)
{
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Unable to turn cooling device [%p] 'on'
\n
"
,
"Unable to turn cooling device [%p] 'on'
\n
"
,
active
->
active
->
devices
.
devices
.
handles
[
j
]));
handles
[
j
]));
continue
;
continue
;
}
}
active
->
flags
.
enabled
=
1
;
active
->
flags
.
enabled
=
1
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Cooling device [%p] now 'on'
\n
"
,
"Cooling device [%p] now 'on'
\n
"
,
active
->
devices
.
active
->
devices
.
handles
[
j
]));
handles
[
j
]));
}
}
}
continue
;
}
}
if
(
!
active
->
flags
.
enabled
)
continue
;
/*
/*
* Below Threshold?
* Below Threshold?
* ----------------
* ----------------
* Turn OFF all cooling devices associated with this
* Turn OFF all cooling devices associated with this
* threshold.
* threshold.
*/
*/
else
if
(
active
->
flags
.
enabled
)
{
for
(
j
=
0
;
j
<
active
->
devices
.
count
;
j
++
)
{
for
(
j
=
0
;
j
<
active
->
devices
.
count
;
j
++
)
{
result
=
result
=
acpi_bus_set_power
(
active
->
devices
.
handles
[
j
],
acpi_bus_set_power
(
active
->
devices
.
handles
[
j
],
ACPI_STATE_D3
);
ACPI_STATE_D3
);
if
(
result
)
{
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Unable to turn cooling device [%p] 'off'
\n
"
,
"Unable to turn cooling device [%p] 'off'
\n
"
,
active
->
devices
.
active
->
devices
.
handles
[
j
]));
handles
[
j
]));
continue
;
continue
;
}
}
active
->
flags
.
enabled
=
0
;
active
->
flags
.
enabled
=
0
;
...
@@ -663,9 +676,6 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
...
@@ -663,9 +676,6 @@ static int acpi_thermal_active(struct acpi_thermal *tz)
active
->
devices
.
handles
[
j
]));
active
->
devices
.
handles
[
j
]));
}
}
}
}
}
return_VALUE
(
0
);
}
}
static
void
acpi_thermal_check
(
void
*
context
);
static
void
acpi_thermal_check
(
void
*
context
);
...
@@ -744,15 +754,12 @@ static void acpi_thermal_check(void *data)
...
@@ -744,15 +754,12 @@ static void acpi_thermal_check(void *data)
* Again, separated from the above two to allow independent policy
* Again, separated from the above two to allow independent policy
* decisions.
* decisions.
*/
*/
if
(
tz
->
trips
.
critical
.
flags
.
enabled
)
tz
->
state
.
critical
=
tz
->
trips
.
critical
.
flags
.
enabled
;
tz
->
state
.
critical
=
1
;
tz
->
state
.
hot
=
tz
->
trips
.
hot
.
flags
.
enabled
;
if
(
tz
->
trips
.
hot
.
flags
.
enabled
)
tz
->
state
.
passive
=
tz
->
trips
.
passive
.
flags
.
enabled
;
tz
->
state
.
hot
=
1
;
tz
->
state
.
active
=
0
;
if
(
tz
->
trips
.
passive
.
flags
.
enabled
)
tz
->
state
.
passive
=
1
;
for
(
i
=
0
;
i
<
ACPI_THERMAL_MAX_ACTIVE
;
i
++
)
for
(
i
=
0
;
i
<
ACPI_THERMAL_MAX_ACTIVE
;
i
++
)
if
(
tz
->
trips
.
active
[
i
].
flags
.
enabled
)
tz
->
state
.
active
|=
tz
->
trips
.
active
[
i
].
flags
.
enabled
;
tz
->
state
.
active
=
1
;
/*
/*
* Calculate Sleep Time
* Calculate Sleep Time
...
...
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