mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-08 07:38:10 +00:00
[PATCH] Add support for type argument in PAL_GET_PSTATE
PAL_GET_PSTATE accepts a type argument to return different kinds of frequency information. Refer: Intel ItaniumArchitecture Software Developer's Manual - Volume 2: System Architecture, Revision 2.2 (http://developer.intel.com/design/itanium/manuals/245318.htm) Add the support for type argument and use Instantaneous frequency in the acpi driver. Also fix a bug, where in return value of PAL_GET_PSTATE was getting compared with 'control' bits instead of 'status' bits. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
6dbfc19b7e
commit
17e77b1cc3
2 changed files with 11 additions and 9 deletions
|
@ -68,7 +68,8 @@ processor_get_pstate (
|
||||||
|
|
||||||
dprintk("processor_get_pstate\n");
|
dprintk("processor_get_pstate\n");
|
||||||
|
|
||||||
retval = ia64_pal_get_pstate(&pstate_index);
|
retval = ia64_pal_get_pstate(&pstate_index,
|
||||||
|
PAL_GET_PSTATE_TYPE_INSTANT);
|
||||||
*value = (u32) pstate_index;
|
*value = (u32) pstate_index;
|
||||||
|
|
||||||
if (retval)
|
if (retval)
|
||||||
|
@ -91,7 +92,7 @@ extract_clock (
|
||||||
dprintk("extract_clock\n");
|
dprintk("extract_clock\n");
|
||||||
|
|
||||||
for (i = 0; i < data->acpi_data.state_count; i++) {
|
for (i = 0; i < data->acpi_data.state_count; i++) {
|
||||||
if (value >= data->acpi_data.states[i].control)
|
if (value == data->acpi_data.states[i].status)
|
||||||
return data->acpi_data.states[i].core_frequency;
|
return data->acpi_data.states[i].core_frequency;
|
||||||
}
|
}
|
||||||
return data->acpi_data.states[i-1].core_frequency;
|
return data->acpi_data.states[i-1].core_frequency;
|
||||||
|
@ -117,11 +118,7 @@ processor_get_freq (
|
||||||
goto migrate_end;
|
goto migrate_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* processor_get_pstate gets the instantaneous frequency */
|
||||||
* processor_get_pstate gets the average frequency since the
|
|
||||||
* last get. So, do two PAL_get_freq()...
|
|
||||||
*/
|
|
||||||
ret = processor_get_pstate(&value);
|
|
||||||
ret = processor_get_pstate(&value);
|
ret = processor_get_pstate(&value);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
|
@ -84,6 +84,11 @@
|
||||||
#define PAL_SET_PSTATE 263 /* set the P-state */
|
#define PAL_SET_PSTATE 263 /* set the P-state */
|
||||||
#define PAL_BRAND_INFO 274 /* Processor branding information */
|
#define PAL_BRAND_INFO 274 /* Processor branding information */
|
||||||
|
|
||||||
|
#define PAL_GET_PSTATE_TYPE_LASTSET 0
|
||||||
|
#define PAL_GET_PSTATE_TYPE_AVGANDRESET 1
|
||||||
|
#define PAL_GET_PSTATE_TYPE_AVGNORESET 2
|
||||||
|
#define PAL_GET_PSTATE_TYPE_INSTANT 3
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
@ -1141,10 +1146,10 @@ ia64_pal_halt_info (pal_power_mgmt_info_u_t *power_buf)
|
||||||
|
|
||||||
/* Get the current P-state information */
|
/* Get the current P-state information */
|
||||||
static inline s64
|
static inline s64
|
||||||
ia64_pal_get_pstate (u64 *pstate_index)
|
ia64_pal_get_pstate (u64 *pstate_index, unsigned long type)
|
||||||
{
|
{
|
||||||
struct ia64_pal_retval iprv;
|
struct ia64_pal_retval iprv;
|
||||||
PAL_CALL_STK(iprv, PAL_GET_PSTATE, 0, 0, 0);
|
PAL_CALL_STK(iprv, PAL_GET_PSTATE, type, 0, 0);
|
||||||
*pstate_index = iprv.v0;
|
*pstate_index = iprv.v0;
|
||||||
return iprv.status;
|
return iprv.status;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue