Skip to content

Commit 1906def

Browse files
jsun26intelwenlingz
authored andcommitted
HV: enable load zephyr kernel
Zephyr kernel is stripped ram image, its entry and load address are explicitly defined in vm configurations, hypervisor will load Zephyr directly based on these configurations. Currently we only support boot Zephyr from protected mode. Tracked-On: #3214 Signed-off-by: Victor Sun <victor.sun@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
1 parent 6940cab commit 1906def

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

hypervisor/boot/guest/vboot_info.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
9393
void *load_addr = NULL;
9494
struct vm_sw_info *sw_info = &vm->sw;
9595
struct zero_page *zeropage;
96+
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
9697

9798
switch (sw_info->kernel_type) {
9899
case KERNEL_BZIMAGE:
@@ -110,6 +111,9 @@ static void *get_kernel_load_addr(struct acrn_vm *vm)
110111
}
111112
load_addr = (void *)zeropage;
112113
break;
114+
case KERNEL_ZEPHYR:
115+
load_addr = (void *)vm_config->os_config.kernel_load_addr;
116+
break;
113117
default:
114118
pr_err("Unsupported Kernel type.");
115119
break;

hypervisor/common/vm_load.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,14 @@ static void prepare_loading_bzimage(struct acrn_vm *vm, struct acrn_vcpu *vcpu)
150150
__func__, vm->vm_id, vcpu_get_gpreg(vcpu, CPU_REG_RSI));
151151
}
152152

153+
static void prepare_loading_rawimage(struct acrn_vm *vm)
154+
{
155+
struct sw_kernel_info *sw_kernel = &(vm->sw.kernel_info);
156+
const struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
157+
158+
sw_kernel->kernel_entry_addr = (void *)vm_config->os_config.kernel_entry_addr;
159+
}
160+
153161
int32_t direct_boot_sw_loader(struct acrn_vm *vm)
154162
{
155163
int32_t ret = 0;
@@ -185,6 +193,9 @@ int32_t direct_boot_sw_loader(struct acrn_vm *vm)
185193
case KERNEL_BZIMAGE:
186194
prepare_loading_bzimage(vm, vcpu);
187195
break;
196+
case KERNEL_ZEPHYR:
197+
prepare_loading_rawimage(vm);
198+
break;
188199
default:
189200
pr_err("%s, Loading VM SW failed", __func__);
190201
ret = -EINVAL;

hypervisor/include/arch/x86/vm_config.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ struct vuart_config {
6464

6565
enum os_kernel_type {
6666
KERNEL_BZIMAGE = 1,
67+
KERNEL_ZEPHYR,
6768
};
6869

6970
struct acrn_vm_os_config {
@@ -72,6 +73,9 @@ struct acrn_vm_os_config {
7273
char kernel_mod_tag[MAX_MOD_TAG_LEN]; /* multiboot module tag for kernel */
7374
char ramdisk_mod_tag[MAX_MOD_TAG_LEN]; /* multiboot module tag for ramdisk */
7475
char bootargs[MAX_BOOTARGS_SIZE]; /* boot args/cmdline */
76+
uint64_t kernel_load_addr;
77+
uint64_t kernel_entry_addr;
78+
uint64_t kernel_ramdisk_addr;
7579
} __aligned(8);
7680

7781
struct acrn_vm_pci_ptdev_config {

0 commit comments

Comments
 (0)