@samitouri / QOSamiQemu / commits / be525becaa

hw/arm: exynos4_boards: Store boot info in the board state

arm_load_kernel() keeps a pointer to the boot info struct for the lifetime of the VM, so the struct logically belongs to the machine rather than to a file scoped static object. The Exynos4BoardState struct is already allocated per machine instance, so move the boot info there. As in the xlnx-zcu102 and raspi machines, the boot info belongs to the machine rather than to a static object: 4d1ac883a7 ("hw/arm: xlnx-zcu102: Move arm_boot_info into XlnxZCU102") 0f15c6e338 ("hw/arm/raspi: Move arm_boot_info structure to RaspiMachineState") Signed-off-by: Bin Meng <bin.meng@processmission.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com> Message-id: 20260816131300.51799-7-bin.meng@processmission.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Bin Meng committed Aug 16, 2026 at 21:12 UTC be525becaa224a2386499d045a6b21c59b92c3e2
1 file changed +11 -15
hw/arm/exynos4_boards.c
+11 -15
@@ -49,6 +49,7 @@ typedef struct Exynos4BoardState {
49 Exynos4210State soc;
50 MemoryRegion dram0_mem;
51 MemoryRegion dram1_mem;
52 + struct arm_boot_info bootinfo;
53 } Exynos4BoardState;
54
55 static int exynos4_board_id[EXYNOS4_NUM_OF_BOARDS] = {
@@ -66,12 +67,6 @@ static unsigned long exynos4_board_ram_size[EXYNOS4_NUM_OF_BOARDS] = {
67 [EXYNOS4_BOARD_SMDKC210] = 1 * GiB,
68 };
69
69 -static struct arm_boot_info exynos4_board_binfo = {
70 - .loader_start = EXYNOS4210_BASE_BOOT_ADDR,
71 - .smp_loader_start = EXYNOS4210_SMP_BOOT_ADDR,
72 - .write_secondary_boot = exynos4210_write_secondary,
73 -};
74 -
70 static void lan9215_init(uint32_t base, qemu_irq irq)
71 {
72 DeviceState *dev;
@@ -113,14 +108,15 @@ static Exynos4BoardState *
108 exynos4_boards_init_common(MachineState *machine,
109 Exynos4BoardType board_type)
110 {
116 - Exynos4BoardState *s = g_new(Exynos4BoardState, 1);
111 + Exynos4BoardState *s = g_new0(Exynos4BoardState, 1);
112
118 - exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type];
119 - exynos4_board_binfo.board_id = exynos4_board_id[board_type];
120 - exynos4_board_binfo.smp_bootreg_addr =
121 - exynos4_board_smp_bootreg_addr[board_type];
122 - exynos4_board_binfo.gic_cpu_if_addr =
123 - EXYNOS4210_SMP_PRIVATE_BASE_ADDR + 0x100;
113 + s->bootinfo.loader_start = EXYNOS4210_BASE_BOOT_ADDR;
114 + s->bootinfo.smp_loader_start = EXYNOS4210_SMP_BOOT_ADDR;
115 + s->bootinfo.write_secondary_boot = exynos4210_write_secondary;
116 + s->bootinfo.ram_size = exynos4_board_ram_size[board_type];
117 + s->bootinfo.board_id = exynos4_board_id[board_type];
118 + s->bootinfo.smp_bootreg_addr = exynos4_board_smp_bootreg_addr[board_type];
119 + s->bootinfo.gic_cpu_if_addr = EXYNOS4210_SMP_PRIVATE_BASE_ADDR + 0x100;
120
121 exynos4_boards_init_ram(s, get_system_memory(),
122 exynos4_board_ram_size[board_type]);
@@ -137,7 +133,7 @@ static void nuri_init(MachineState *machine)
133 Exynos4BoardState *s = exynos4_boards_init_common(machine,
134 EXYNOS4_BOARD_NURI);
135
140 - arm_load_kernel(s->soc.cpu[0], machine, &exynos4_board_binfo);
136 + arm_load_kernel(s->soc.cpu[0], machine, &s->bootinfo);
137 }
138
139 static void smdkc210_init(MachineState *machine)
@@ -147,7 +143,7 @@ static void smdkc210_init(MachineState *machine)
143
144 lan9215_init(SMDK_LAN9118_BASE_ADDR,
145 qemu_irq_invert(s->soc.irq_table[exynos4210_get_irq(37, 1)]));
150 - arm_load_kernel(s->soc.cpu[0], machine, &exynos4_board_binfo);
146 + arm_load_kernel(s->soc.cpu[0], machine, &s->bootinfo);
147 }
148
149 static const char * const valid_cpu_types[] = {