Message ID | 20231227080821.3216113-5-gaosong@loongson.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add boot LoongArch elf kernel with FDT | expand |
Hi, On 27/12/23 09:08, Song Gao wrote: > Add init_cmline and set boot_info->a0, a1 > > Signed-off-by: Song Gao <gaosong@loongson.cn> > --- > hw/loongarch/boot.c | 20 ++++++++++++++++++++ > target/loongarch/cpu.h | 2 ++ > 2 files changed, 22 insertions(+) > > diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c > index faff880153..27eae6f0cb 100644 > --- a/hw/loongarch/boot.c > +++ b/hw/loongarch/boot.c > @@ -13,6 +13,7 @@ > #include "elf.h" > #include "qemu/error-report.h" > #include "sysemu/reset.h" > +#include <asm-generic/setup.h> Build failure on Darwin host: [1135/1207] Compiling C object libqemu-loongarch64-softmmu.fa.p/hw_loongarch_boot.c.o FAILED: libqemu-loongarch64-softmmu.fa.p/hw_loongarch_boot.c.o ../../hw/loongarch/boot.c:16:10: fatal error: 'asm-generic/setup.h' file not found #include <asm-generic/setup.h> ^~~~~~~~~~~~~~~~~~~~~ 1 error generated. ninja: build stopped: subcommand failed.
在 2023/12/27 下午4:49, Philippe Mathieu-Daudé 写道: > Hi, > > On 27/12/23 09:08, Song Gao wrote: >> Add init_cmline and set boot_info->a0, a1 >> >> Signed-off-by: Song Gao <gaosong@loongson.cn> >> --- >> hw/loongarch/boot.c | 20 ++++++++++++++++++++ >> target/loongarch/cpu.h | 2 ++ >> 2 files changed, 22 insertions(+) >> >> diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c >> index faff880153..27eae6f0cb 100644 >> --- a/hw/loongarch/boot.c >> +++ b/hw/loongarch/boot.c >> @@ -13,6 +13,7 @@ >> #include "elf.h" >> #include "qemu/error-report.h" >> #include "sysemu/reset.h" >> +#include <asm-generic/setup.h> > > Build failure on Darwin host: > > [1135/1207] Compiling C object > libqemu-loongarch64-softmmu.fa.p/hw_loongarch_boot.c.o > FAILED: libqemu-loongarch64-softmmu.fa.p/hw_loongarch_boot.c.o > ../../hw/loongarch/boot.c:16:10: fatal error: 'asm-generic/setup.h' > file not found > #include <asm-generic/setup.h> > ^~~~~~~~~~~~~~~~~~~~~ > 1 error generated. > ninja: build stopped: subcommand failed. I will drop it , use #define COMAND_LINE_SIZE 512. Thanks. Song Gao
diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c index faff880153..27eae6f0cb 100644 --- a/hw/loongarch/boot.c +++ b/hw/loongarch/boot.c @@ -13,6 +13,7 @@ #include "elf.h" #include "qemu/error-report.h" #include "sysemu/reset.h" +#include <asm-generic/setup.h> static unsigned int slave_boot_code[] = { /* Configure reset ebase. */ @@ -62,6 +63,16 @@ static unsigned int slave_boot_code[] = { 0x4c000020, /* jirl $r0,$r1,0 */ }; +static void init_cmdline(struct loongarch_boot_info *info, void *p, void *start) +{ + hwaddr cmdline_addr = (hwaddr)p - (hwaddr)start; + + info->a0 = 1; + info->a1 = cmdline_addr; + + memcpy(p, info->kernel_cmdline, COMMAND_LINE_SIZE); +} + static uint64_t cpu_loongarch_virt_to_phys(void *opaque, uint64_t addr) { return addr & MAKE_64BIT_MASK(0, TARGET_PHYS_ADDR_SPACE_BITS); @@ -121,6 +132,10 @@ static void reset_load_elf(void *opaque) 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; + } cpu_set_pc(CPU(cpu), env->elf_address); } } @@ -160,8 +175,13 @@ static void loongarch_firmware_boot(LoongArchMachineState *lams, static void init_boot_rom(struct loongarch_boot_info *info, void *p) { + void *start = p; + memcpy(p, &slave_boot_code, sizeof(slave_boot_code)); p += sizeof(slave_boot_code); + + init_cmdline(info, p, start); + p += COMMAND_LINE_SIZE; } static void loongarch_direct_kernel_boot(struct loongarch_boot_info *info) diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h index 00d1fba597..c7c695138e 100644 --- a/target/loongarch/cpu.h +++ b/target/loongarch/cpu.h @@ -362,6 +362,8 @@ typedef struct CPUArchState { uint64_t elf_address; /* Store ipistate to access from this struct */ DeviceState *ipistate; + + struct loongarch_boot_info *boot_info; #endif } CPULoongArchState;
Add init_cmline and set boot_info->a0, a1 Signed-off-by: Song Gao <gaosong@loongson.cn> --- hw/loongarch/boot.c | 20 ++++++++++++++++++++ target/loongarch/cpu.h | 2 ++ 2 files changed, 22 insertions(+)