mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-07-04 02:56:52 +00:00
HV: platform acpi info refactor
Replace platform_acpi_info.c with platform_acpi_info.h and define needed host ACPI info in MACROs. Then the struct host_acpi_info is not needed any more. This header file should be generated by offline tool automatically; Tracked-On: #1500 Signed-off-by: Victor Sun <victor.sun@intel.com> Reviewed-by: Junjie Mao <junjie.mao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
4ed87f90e9
commit
bf834072d4
@ -103,7 +103,7 @@ ifeq ($(CONFIG_PARTITION_MODE),y)
|
|||||||
INCLUDE_PATH += include/dm/vpci
|
INCLUDE_PATH += include/dm/vpci
|
||||||
endif
|
endif
|
||||||
INCLUDE_PATH += bsp/include
|
INCLUDE_PATH += bsp/include
|
||||||
INCLUDE_PATH += bsp/$(CONFIG_PLATFORM)/include/bsp
|
INCLUDE_PATH += bsp/include/$(CONFIG_PLATFORM)
|
||||||
INCLUDE_PATH += boot/include
|
INCLUDE_PATH += boot/include
|
||||||
INCLUDE_PATH += $(HV_OBJDIR)/include
|
INCLUDE_PATH += $(HV_OBJDIR)/include
|
||||||
|
|
||||||
@ -186,7 +186,6 @@ C_SRCS += dm/vrtc.c
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
C_SRCS += bsp/$(CONFIG_PLATFORM)/$(CONFIG_PLATFORM).c
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/$(CONFIG_PLATFORM).c
|
||||||
C_SRCS += bsp/$(CONFIG_PLATFORM)/platform_acpi_info.c
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_PLATFORM),uefi)
|
ifeq ($(CONFIG_PLATFORM),uefi)
|
||||||
C_SRCS += bsp/$(CONFIG_PLATFORM)/cmdline.c
|
C_SRCS += bsp/$(CONFIG_PLATFORM)/cmdline.c
|
||||||
|
@ -111,17 +111,15 @@ void vm_setup_cpu_state(struct vm *vm)
|
|||||||
*/
|
*/
|
||||||
int vm_load_pm_s_state(struct vm *vm)
|
int vm_load_pm_s_state(struct vm *vm)
|
||||||
{
|
{
|
||||||
if ((boot_cpu_data.family == host_acpi_info.x86_family)
|
#ifdef ACPI_INFO_VALIDATED
|
||||||
&& (boot_cpu_data.model == host_acpi_info.x86_model)) {
|
vm->pm.sx_state_data = (struct pm_s_state_data *)&host_pm_s_state;
|
||||||
vm->pm.sx_state_data = (struct pm_s_state_data *)
|
pr_info("System S3/S5 is supported.");
|
||||||
&host_acpi_info.pm_s_state;
|
return 0;
|
||||||
pr_info("System S3/S5 is supported.");
|
#else
|
||||||
return 0;
|
vm->pm.sx_state_data = NULL;
|
||||||
} else {
|
pr_err("System S3/S5 is NOT supported.");
|
||||||
vm->pm.sx_state_data = NULL;
|
return -1;
|
||||||
pr_err("System S3/S5 is NOT supported.");
|
#endif
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint32_t s3_enabled(uint32_t pm1_cnt)
|
static inline uint32_t s3_enabled(uint32_t pm1_cnt)
|
||||||
|
@ -7,6 +7,50 @@
|
|||||||
|
|
||||||
struct cpu_context cpu_ctx;
|
struct cpu_context cpu_ctx;
|
||||||
|
|
||||||
|
/* The values in this structure should come from host ACPI table */
|
||||||
|
struct pm_s_state_data host_pm_s_state = {
|
||||||
|
.pm1a_evt = {
|
||||||
|
.space_id = PM1A_EVT_SPACE_ID,
|
||||||
|
.bit_width = PM1A_EVT_BIT_WIDTH,
|
||||||
|
.bit_offset = PM1A_EVT_BIT_OFFSET,
|
||||||
|
.access_size = PM1A_EVT_ACCESS_SIZE,
|
||||||
|
.address = PM1A_EVT_ADDRESS
|
||||||
|
},
|
||||||
|
.pm1b_evt = {
|
||||||
|
.space_id = PM1B_EVT_SPACE_ID,
|
||||||
|
.bit_width = PM1B_EVT_BIT_WIDTH,
|
||||||
|
.bit_offset = PM1B_EVT_BIT_OFFSET,
|
||||||
|
.access_size = PM1B_EVT_ACCESS_SIZE,
|
||||||
|
.address = PM1B_EVT_ADDRESS
|
||||||
|
},
|
||||||
|
.pm1a_cnt = {
|
||||||
|
.space_id = PM1A_CNT_SPACE_ID,
|
||||||
|
.bit_width = PM1A_CNT_BIT_WIDTH,
|
||||||
|
.bit_offset = PM1A_CNT_BIT_OFFSET,
|
||||||
|
.access_size = PM1A_CNT_ACCESS_SIZE,
|
||||||
|
.address = PM1A_CNT_ADDRESS
|
||||||
|
},
|
||||||
|
.pm1b_cnt = {
|
||||||
|
.space_id = PM1B_CNT_SPACE_ID,
|
||||||
|
.bit_width = PM1B_CNT_BIT_WIDTH,
|
||||||
|
.bit_offset = PM1B_CNT_BIT_OFFSET,
|
||||||
|
.access_size = PM1B_CNT_ACCESS_SIZE,
|
||||||
|
.address = PM1B_CNT_ADDRESS
|
||||||
|
},
|
||||||
|
.s3_pkg = {
|
||||||
|
.val_pm1a = S3_PKG_VAL_PM1A,
|
||||||
|
.val_pm1b = S3_PKG_VAL_PM1B,
|
||||||
|
.reserved = S3_PKG_RESERVED
|
||||||
|
},
|
||||||
|
.s5_pkg = {
|
||||||
|
.val_pm1a = S5_PKG_VAL_PM1A,
|
||||||
|
.val_pm1b = S5_PKG_VAL_PM1B,
|
||||||
|
.reserved = S5_PKG_RESERVED
|
||||||
|
},
|
||||||
|
.wake_vector_32 = (uint32_t *)WAKE_VECTOR_32,
|
||||||
|
.wake_vector_64 = (uint64_t *)WAKE_VECTOR_64
|
||||||
|
};
|
||||||
|
|
||||||
/* whether the host enter s3 success */
|
/* whether the host enter s3 success */
|
||||||
uint8_t host_enter_s3_success = 1U;
|
uint8_t host_enter_s3_success = 1U;
|
||||||
|
|
||||||
|
@ -377,9 +377,9 @@ void acpi_fixup(void)
|
|||||||
facs_addr = get_facs_table();
|
facs_addr = get_facs_table();
|
||||||
|
|
||||||
if (facs_addr != NULL) {
|
if (facs_addr != NULL) {
|
||||||
host_acpi_info.pm_s_state.wake_vector_32 =
|
host_pm_s_state.wake_vector_32 =
|
||||||
(uint32_t *)(facs_addr + OFFSET_WAKE_VECTOR_32);
|
(uint32_t *)(facs_addr + OFFSET_WAKE_VECTOR_32);
|
||||||
host_acpi_info.pm_s_state.wake_vector_64 =
|
host_pm_s_state.wake_vector_64 =
|
||||||
(uint64_t *)(facs_addr + OFFSET_WAKE_VECTOR_64);
|
(uint64_t *)(facs_addr + OFFSET_WAKE_VECTOR_64);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#ifndef BSP_EXTERN_H
|
#ifndef BSP_EXTERN_H
|
||||||
#define BSP_EXTERN_H
|
#define BSP_EXTERN_H
|
||||||
|
|
||||||
|
#include "platform_acpi_info.h"
|
||||||
|
|
||||||
#define UOS_DEFAULT_START_ADDR (0x100000000UL)
|
#define UOS_DEFAULT_START_ADDR (0x100000000UL)
|
||||||
|
|
||||||
struct acpi_info {
|
struct acpi_info {
|
||||||
@ -30,8 +32,6 @@ struct acpi_info {
|
|||||||
/**********************************/
|
/**********************************/
|
||||||
/* EXTERNAL VARIABLES */
|
/* EXTERNAL VARIABLES */
|
||||||
/**********************************/
|
/**********************************/
|
||||||
extern struct acpi_info host_acpi_info;
|
|
||||||
|
|
||||||
/* BSP Interfaces */
|
/* BSP Interfaces */
|
||||||
void init_bsp(void);
|
void init_bsp(void);
|
||||||
|
|
||||||
|
51
hypervisor/bsp/include/sbl/platform_acpi_info.h
Normal file
51
hypervisor/bsp/include/sbl/platform_acpi_info.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is a template header file for platform ACPI info definition,
|
||||||
|
* we should use a user space tool running on target to generate this file.
|
||||||
|
*/
|
||||||
|
#ifndef PLATFORM_ACPI_INFO_H
|
||||||
|
#define PLATFORM_ACPI_INFO_H
|
||||||
|
|
||||||
|
#define ACPI_INFO_VALIDATED
|
||||||
|
|
||||||
|
/* pm sstate data */
|
||||||
|
#define PM1A_EVT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1A_EVT_BIT_WIDTH 0x20U
|
||||||
|
#define PM1A_EVT_BIT_OFFSET 0U
|
||||||
|
#define PM1A_EVT_ACCESS_SIZE 3U
|
||||||
|
#define PM1A_EVT_ADDRESS 0x400UL
|
||||||
|
|
||||||
|
#define PM1B_EVT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1B_EVT_BIT_WIDTH 0U
|
||||||
|
#define PM1B_EVT_BIT_OFFSET 0U
|
||||||
|
#define PM1B_EVT_ACCESS_SIZE 0U
|
||||||
|
#define PM1B_EVT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define PM1A_CNT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1A_CNT_BIT_WIDTH 0x10U
|
||||||
|
#define PM1A_CNT_BIT_OFFSET 0U
|
||||||
|
#define PM1A_CNT_ACCESS_SIZE 2U
|
||||||
|
#define PM1A_CNT_ADDRESS 0x404UL
|
||||||
|
|
||||||
|
#define PM1B_CNT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1B_CNT_BIT_WIDTH 0U
|
||||||
|
#define PM1B_CNT_BIT_OFFSET 0U
|
||||||
|
#define PM1B_CNT_ACCESS_SIZE 0U
|
||||||
|
#define PM1B_CNT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define S3_PKG_VAL_PM1A 0x05U
|
||||||
|
#define S3_PKG_VAL_PM1B 0U
|
||||||
|
#define S3_PKG_RESERVED 0U
|
||||||
|
|
||||||
|
#define S5_PKG_VAL_PM1A 0x07U
|
||||||
|
#define S5_PKG_VAL_PM1B 0U
|
||||||
|
#define S5_PKG_RESERVED 0U
|
||||||
|
|
||||||
|
#define WAKE_VECTOR_32 0x7A86BBDCUL
|
||||||
|
#define WAKE_VECTOR_64 0x7A86BBE8UL
|
||||||
|
|
||||||
|
#endif /* PLATFORM_ACPI_INFO_H */
|
49
hypervisor/bsp/include/uefi/platform_acpi_info.h
Normal file
49
hypervisor/bsp/include/uefi/platform_acpi_info.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is a template header file for platform ACPI info definition,
|
||||||
|
* we should use a user space tool running on target to generate this file.
|
||||||
|
*/
|
||||||
|
#ifndef PLATFORM_ACPI_INFO_H
|
||||||
|
#define PLATFORM_ACPI_INFO_H
|
||||||
|
|
||||||
|
/* pm sstate data */
|
||||||
|
#define PM1A_EVT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1A_EVT_BIT_WIDTH 0U
|
||||||
|
#define PM1A_EVT_BIT_OFFSET 0U
|
||||||
|
#define PM1A_EVT_ACCESS_SIZE 0U
|
||||||
|
#define PM1A_EVT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define PM1B_EVT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1B_EVT_BIT_WIDTH 0U
|
||||||
|
#define PM1B_EVT_BIT_OFFSET 0U
|
||||||
|
#define PM1B_EVT_ACCESS_SIZE 0U
|
||||||
|
#define PM1B_EVT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define PM1A_CNT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1A_CNT_BIT_WIDTH 0U
|
||||||
|
#define PM1A_CNT_BIT_OFFSET 0U
|
||||||
|
#define PM1A_CNT_ACCESS_SIZE 0U
|
||||||
|
#define PM1A_CNT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define PM1B_CNT_SPACE_ID SPACE_SYSTEM_IO
|
||||||
|
#define PM1B_CNT_BIT_WIDTH 0U
|
||||||
|
#define PM1B_CNT_BIT_OFFSET 0U
|
||||||
|
#define PM1B_CNT_ACCESS_SIZE 0U
|
||||||
|
#define PM1B_CNT_ADDRESS 0UL
|
||||||
|
|
||||||
|
#define S3_PKG_VAL_PM1A 0U
|
||||||
|
#define S3_PKG_VAL_PM1B 0U
|
||||||
|
#define S3_PKG_RESERVED 0U
|
||||||
|
|
||||||
|
#define S5_PKG_VAL_PM1A 0U
|
||||||
|
#define S5_PKG_VAL_PM1B 0U
|
||||||
|
#define S5_PKG_RESERVED 0U
|
||||||
|
|
||||||
|
#define WAKE_VECTOR_32 0UL
|
||||||
|
#define WAKE_VECTOR_64 0UL
|
||||||
|
|
||||||
|
#endif /* PLATFORM_ACPI_INFO_H */
|
@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <hypervisor.h>
|
|
||||||
|
|
||||||
struct acpi_info host_acpi_info = {
|
|
||||||
.x86_family = 6U,
|
|
||||||
.x86_model = 0x5CU, /* ApolloLake */
|
|
||||||
.pm_s_state = {
|
|
||||||
.pm1a_evt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0x20U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 3U,
|
|
||||||
.address = 0x400UL
|
|
||||||
},
|
|
||||||
.pm1b_evt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.pm1a_cnt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0x10U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 2U,
|
|
||||||
.address = 0x404UL
|
|
||||||
},
|
|
||||||
.pm1b_cnt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.s3_pkg = {
|
|
||||||
.val_pm1a = 0x05U,
|
|
||||||
.val_pm1b = 0U,
|
|
||||||
.reserved = 0U
|
|
||||||
},
|
|
||||||
.s5_pkg = {
|
|
||||||
.val_pm1a = 0x07U,
|
|
||||||
.val_pm1b = 0U,
|
|
||||||
.reserved = 0U
|
|
||||||
},
|
|
||||||
#if 0 /* set to 0 if run with ABL, set to 1 if switch back to SBL; */
|
|
||||||
.wake_vector_32 = (uint32_t *)0x7A86BBDCUL,
|
|
||||||
.wake_vector_64 = (uint64_t *)0x7A86BBE8UL
|
|
||||||
#else
|
|
||||||
.wake_vector_32 = (uint32_t *)0x7AFDCEFCUL,
|
|
||||||
.wake_vector_64 = (uint64_t *)0x7AFDCF08UL
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is a template for uninitialized host_acpi_info,
|
|
||||||
* we should use a user space tool running on target to generate this file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <hypervisor.h>
|
|
||||||
|
|
||||||
struct acpi_info host_acpi_info = {
|
|
||||||
.x86_family = 0U,
|
|
||||||
.x86_model = 0U,
|
|
||||||
.pm_s_state = {
|
|
||||||
.pm1a_evt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.pm1b_evt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.pm1a_cnt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.pm1b_cnt = {
|
|
||||||
.space_id = SPACE_SYSTEM_IO,
|
|
||||||
.bit_width = 0U,
|
|
||||||
.bit_offset = 0U,
|
|
||||||
.access_size = 0U,
|
|
||||||
.address = 0UL
|
|
||||||
},
|
|
||||||
.s3_pkg = {
|
|
||||||
.val_pm1a = 0U,
|
|
||||||
.val_pm1b = 0U,
|
|
||||||
.reserved = 0U
|
|
||||||
},
|
|
||||||
.s5_pkg = {
|
|
||||||
.val_pm1a = 0U,
|
|
||||||
.val_pm1b = 0U,
|
|
||||||
.reserved = 0U
|
|
||||||
},
|
|
||||||
.wake_vector_32 = (uint32_t *)0UL,
|
|
||||||
.wake_vector_64 = (uint64_t *)0UL
|
|
||||||
}
|
|
||||||
};
|
|
@ -9,6 +9,8 @@
|
|||||||
#define BIT_SLP_EN 13U
|
#define BIT_SLP_EN 13U
|
||||||
#define BIT_WAK_STS 15U
|
#define BIT_WAK_STS 15U
|
||||||
|
|
||||||
|
extern struct pm_s_state_data host_pm_s_state;
|
||||||
|
|
||||||
extern uint8_t host_enter_s3_success;
|
extern uint8_t host_enter_s3_success;
|
||||||
|
|
||||||
int enter_s3(struct vm *vm, uint32_t pm1a_cnt_val, uint32_t pm1b_cnt_val);
|
int enter_s3(struct vm *vm, uint32_t pm1a_cnt_val, uint32_t pm1b_cnt_val);
|
||||||
|
Loading…
Reference in New Issue
Block a user