From: Bibo Mao Date: Fri, 25 Apr 2025 02:05:04 +0000 (+0800) Subject: hw/loongarch/virt: Get physical entry address with elf file X-Git-Tag: v10.1.0-rc0~103^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73047c825e25a18127dddb89eff0c0bf97a26aed;p=thirdparty%2Fqemu.git hw/loongarch/virt: Get physical entry address with elf file With load_elf() api, image load low address and high address is converted to physical address if parameter translate_fn is provided. However executing entry address is still virtual address. Here convert entry address into physical address, since MMU is disabled when system power on, the first PC instruction should be physical address. Signed-off-by: Bibo Mao Reviewed-by: Richard Henderson Tested-by: Song Gao --- diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c index 354cf458c81..0324d6adcba 100644 --- a/hw/loongarch/boot.c +++ b/hw/loongarch/boot.c @@ -245,6 +245,7 @@ static int64_t load_kernel_info(struct loongarch_boot_info *info) &kernel_entry, &kernel_low, &kernel_high, NULL, ELFDATA2LSB, EM_LOONGARCH, 1, 0); + kernel_entry = cpu_loongarch_virt_to_phys(NULL, kernel_entry); if (kernel_size < 0) { kernel_size = load_loongarch_linux_image(info->kernel_filename, &kernel_entry, &kernel_low, diff --git a/tests/tcg/loongarch64/system/kernel.ld b/tests/tcg/loongarch64/system/kernel.ld index f1a7c0168c5..56d8588f1a3 100644 --- a/tests/tcg/loongarch64/system/kernel.ld +++ b/tests/tcg/loongarch64/system/kernel.ld @@ -3,7 +3,7 @@ ENTRY(_start) SECTIONS { /* Linux kernel legacy start address. */ - . = 0x9000000000200000; + . = 0x200000; _text = .; .text : { *(.text)