mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-27 15:56:54 +00:00
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:
parent
88e1c4975c
commit
9a56024b49
@ -103,3 +103,21 @@ void vm_setup_cpu_state(struct vm *vm)
|
|||||||
vm_setup_cpu_cx(vm);
|
vm_setup_cpu_cx(vm);
|
||||||
init_cx_port(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -141,10 +141,13 @@ int create_vm(struct vm_description *vm_desc, struct vm **rtn_vm)
|
|||||||
|
|
||||||
vm_setup_cpu_state(vm);
|
vm_setup_cpu_state(vm);
|
||||||
|
|
||||||
/* Create virtual uart */
|
if (is_vm0(vm)) {
|
||||||
if (is_vm0(vm))
|
/* Load pm S state data */
|
||||||
vm->vuart = vuart_init(vm);
|
vm_load_pm_s_state(vm);
|
||||||
|
|
||||||
|
/* Create virtual uart */
|
||||||
|
vm->vuart = vuart_init(vm);
|
||||||
|
}
|
||||||
vm->vpic = vpic_init(vm);
|
vm->vpic = vpic_init(vm);
|
||||||
|
|
||||||
/* vpic wire_mode default is INTR */
|
/* vpic wire_mode default is INTR */
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
/* EXTERNAL VARIABLES */
|
/* EXTERNAL VARIABLES */
|
||||||
/**********************************/
|
/**********************************/
|
||||||
extern struct vm_description vm0_desc;
|
extern struct vm_description vm0_desc;
|
||||||
|
extern const struct acpi_info host_acpi_info;
|
||||||
|
|
||||||
/* BSP Interfaces */
|
/* BSP Interfaces */
|
||||||
void init_bsp(void);
|
void init_bsp(void);
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define PM_H
|
#define PM_H
|
||||||
|
|
||||||
void vm_setup_cpu_state(struct vm *vm);
|
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);
|
int validate_pstate(struct vm *vm, uint64_t perf_ctl);
|
||||||
struct cpu_cx_data* get_target_cx(struct vm *vm, uint8_t cn);
|
struct cpu_cx_data* get_target_cx(struct vm *vm, uint8_t cn);
|
||||||
|
|
||||||
|
@ -63,6 +63,7 @@ struct vm_pm_info {
|
|||||||
struct cpu_px_data px_data[MAX_PSTATE];
|
struct cpu_px_data px_data[MAX_PSTATE];
|
||||||
uint8_t cx_cnt; /* count of all Cx entries */
|
uint8_t cx_cnt; /* count of all Cx entries */
|
||||||
struct cpu_cx_data cx_data[MAX_CSTATE];
|
struct cpu_cx_data cx_data[MAX_CSTATE];
|
||||||
|
struct pm_s_state_data *sx_state_data; /* data for S3/S5 implementation */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* VM guest types */
|
/* VM guest types */
|
||||||
|
Loading…
Reference in New Issue
Block a user