With BSP core, it boots from aux boot code and loads data into register
A0-A2 and PC. Pre-boot setting is not unnecessary and can be removed.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
hw/loongarch/boot.c | 22 ----------------------
target/loongarch/cpu.h | 4 ----
2 files changed, 26 deletions(-)
diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c
index 4962668e5a..5799b4c75c 100644
--- a/hw/loongarch/boot.c
+++ b/hw/loongarch/boot.c
@@ -353,17 +353,8 @@ static int64_t load_kernel_info(struct loongarch_boot_info *info)
static void reset_load_elf(void *opaque)
{
LoongArchCPU *cpu = opaque;
- CPULoongArchState *env = &cpu->env;
cpu_reset(CPU(cpu));
- if (env->load_elf) {
- if (cpu == LOONGARCH_CPU(first_cpu)) {
- env->gpr[4] = env->boot_info->a0;
- env->gpr[5] = env->boot_info->a1;
- env->gpr[6] = env->boot_info->a2;
- }
- cpu_set_pc(CPU(cpu), env->elf_address);
- }
}
static void fw_cfg_add_kernel_info(struct loongarch_boot_info *info,
@@ -415,8 +406,6 @@ static void loongarch_direct_kernel_boot(MachineState *ms,
{
void *p, *bp;
int64_t kernel_addr = VIRT_FLASH0_BASE;
- LoongArchCPU *lacpu;
- CPUState *cs;
uint64_t *data;
if (info->kernel_filename) {
@@ -443,17 +432,6 @@ static void loongarch_direct_kernel_boot(MachineState *ms,
*(data - 1) = cpu_to_le64(kernel_addr);
rom_add_blob_fixed("boot_code", boot_code, VIRT_FLASH0_SIZE, VIRT_FLASH0_BASE);
- CPU_FOREACH(cs) {
- lacpu = LOONGARCH_CPU(cs);
- lacpu->env.load_elf = true;
- if (cs == first_cpu) {
- lacpu->env.elf_address = kernel_addr;
- } else {
- lacpu->env.elf_address = VIRT_FLASH0_BASE;
- }
- lacpu->env.boot_info = info;
- }
-
g_free(boot_code);
g_free(bp);
}
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
index 7731f6acdc..c8b96f74dc 100644
--- a/target/loongarch/cpu.h
+++ b/target/loongarch/cpu.h
@@ -387,11 +387,7 @@ typedef struct CPUArchState {
#endif
AddressSpace *address_space_iocsr;
- bool load_elf;
- uint64_t elf_address;
uint32_t mp_state;
-
- struct loongarch_boot_info *boot_info;
#endif
} CPULoongArchState;
--
2.39.3
在 2025/9/6 下午3:01, Bibo Mao 写道:
> With BSP core, it boots from aux boot code and loads data into register
> A0-A2 and PC. Pre-boot setting is not unnecessary and can be removed.
>
> Signed-off-by: Bibo Mao <maobibo@loongson.cn>
> ---
> hw/loongarch/boot.c | 22 ----------------------
> target/loongarch/cpu.h | 4 ----
> 2 files changed, 26 deletions(-)
Reviewed-by: Song Gao <gaosong@loongson.cn>
Thanks.
Song Gao
> diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c
> index 4962668e5a..5799b4c75c 100644
> --- a/hw/loongarch/boot.c
> +++ b/hw/loongarch/boot.c
> @@ -353,17 +353,8 @@ static int64_t load_kernel_info(struct loongarch_boot_info *info)
> static void reset_load_elf(void *opaque)
> {
> LoongArchCPU *cpu = opaque;
> - CPULoongArchState *env = &cpu->env;
>
> cpu_reset(CPU(cpu));
> - if (env->load_elf) {
> - if (cpu == LOONGARCH_CPU(first_cpu)) {
> - env->gpr[4] = env->boot_info->a0;
> - env->gpr[5] = env->boot_info->a1;
> - env->gpr[6] = env->boot_info->a2;
> - }
> - cpu_set_pc(CPU(cpu), env->elf_address);
> - }
> }
>
> static void fw_cfg_add_kernel_info(struct loongarch_boot_info *info,
> @@ -415,8 +406,6 @@ static void loongarch_direct_kernel_boot(MachineState *ms,
> {
> void *p, *bp;
> int64_t kernel_addr = VIRT_FLASH0_BASE;
> - LoongArchCPU *lacpu;
> - CPUState *cs;
> uint64_t *data;
>
> if (info->kernel_filename) {
> @@ -443,17 +432,6 @@ static void loongarch_direct_kernel_boot(MachineState *ms,
> *(data - 1) = cpu_to_le64(kernel_addr);
> rom_add_blob_fixed("boot_code", boot_code, VIRT_FLASH0_SIZE, VIRT_FLASH0_BASE);
>
> - CPU_FOREACH(cs) {
> - lacpu = LOONGARCH_CPU(cs);
> - lacpu->env.load_elf = true;
> - if (cs == first_cpu) {
> - lacpu->env.elf_address = kernel_addr;
> - } else {
> - lacpu->env.elf_address = VIRT_FLASH0_BASE;
> - }
> - lacpu->env.boot_info = info;
> - }
> -
> g_free(boot_code);
> g_free(bp);
> }
> diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
> index 7731f6acdc..c8b96f74dc 100644
> --- a/target/loongarch/cpu.h
> +++ b/target/loongarch/cpu.h
> @@ -387,11 +387,7 @@ typedef struct CPUArchState {
> #endif
>
> AddressSpace *address_space_iocsr;
> - bool load_elf;
> - uint64_t elf_address;
> uint32_t mp_state;
> -
> - struct loongarch_boot_info *boot_info;
> #endif
> } CPULoongArchState;
>
© 2016 - 2026 Red Hat, Inc.