HV: load host pm S state data while create vm0

The pm S state data is from host ACPI info and needed for S3/S5
implementation.

Signed-off-by: Victor Sun <victor.sun@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Victor Sun 2018-06-08 09:28:48 +08:00 committed by lijinxia
parent 88e1c4975c
commit 9a56024b49
5 changed files with 27 additions and 3 deletions

View File

@ -103,3 +103,21 @@ void vm_setup_cpu_state(struct vm *vm)
vm_setup_cpu_cx(vm);
init_cx_port(vm);
}
/* This function is for power management Sx state implementation,
* VM need to load the Sx state data to implement S3/S5.
*/
int vm_load_pm_s_state(struct vm *vm)
{
if ((boot_cpu_data.x86 == host_acpi_info.x86_family)
&& (boot_cpu_data.x86_model == host_acpi_info.x86_model)) {
vm->pm.sx_state_data = (struct pm_s_state_data *)
&host_acpi_info.pm_s_state;
pr_info("System S3/S5 is supported.");
return 0;
} else {
vm->pm.sx_state_data = NULL;
pr_err("System S3/S5 is NOT supported.");
return -1;
}
}

View File

@ -141,10 +141,13 @@ int create_vm(struct vm_description *vm_desc, struct vm **rtn_vm)
vm_setup_cpu_state(vm);
/* Create virtual uart */
if (is_vm0(vm))
vm->vuart = vuart_init(vm);
if (is_vm0(vm)) {
/* Load pm S state data */
vm_load_pm_s_state(vm);
/* Create virtual uart */
vm->vuart = vuart_init(vm);
}
vm->vpic = vpic_init(vm);
/* vpic wire_mode default is INTR */

View File

@ -23,6 +23,7 @@
/* EXTERNAL VARIABLES */
/**********************************/
extern struct vm_description vm0_desc;
extern const struct acpi_info host_acpi_info;
/* BSP Interfaces */
void init_bsp(void);

View File

@ -8,6 +8,7 @@
#define PM_H
void vm_setup_cpu_state(struct vm *vm);
int vm_load_pm_s_state(struct vm *vm);
int validate_pstate(struct vm *vm, uint64_t perf_ctl);
struct cpu_cx_data* get_target_cx(struct vm *vm, uint8_t cn);

View File

@ -63,6 +63,7 @@ struct vm_pm_info {
struct cpu_px_data px_data[MAX_PSTATE];
uint8_t cx_cnt; /* count of all Cx entries */
struct cpu_cx_data cx_data[MAX_CSTATE];
struct pm_s_state_data *sx_state_data; /* data for S3/S5 implementation */
};
/* VM guest types */