Lines Matching refs:info
45 const struct arm_boot_info *info) in arm_boot_address_space() argument
54 if (arm_feature(&cpu->env, ARM_FEATURE_EL3) && info->secure_boot) { in arm_boot_address_space()
185 const struct arm_boot_info *info) in default_write_secondary() argument
188 AddressSpace *as = arm_boot_address_space(cpu, info); in default_write_secondary()
190 fixupcontext[FIXUP_GIC_CPU_IF] = info->gic_cpu_if_addr; in default_write_secondary()
191 fixupcontext[FIXUP_BOOTREG] = info->smp_bootreg_addr; in default_write_secondary()
198 arm_write_bootloader("smpboot", as, info->smp_loader_start, in default_write_secondary()
203 const struct arm_boot_info *info, in arm_write_secure_board_setup_dummy_smc() argument
206 AddressSpace *as = arm_boot_address_space(cpu, info); in arm_write_secure_board_setup_dummy_smc()
241 assert((mvbar_addr + sizeof(mvbar_blob) <= info->board_setup_addr) in arm_write_secure_board_setup_dummy_smc()
242 || (info->board_setup_addr + sizeof(board_setup_blob) <= mvbar_addr)); in arm_write_secure_board_setup_dummy_smc()
254 sizeof(board_setup_blob), info->board_setup_addr, as); in arm_write_secure_board_setup_dummy_smc()
258 const struct arm_boot_info *info) in default_reset_secondary() argument
260 AddressSpace *as = arm_boot_address_space(cpu, info); in default_reset_secondary()
263 address_space_stl_notdirty(as, info->smp_bootreg_addr, in default_reset_secondary()
265 cpu_set_pc(cs, info->smp_loader_start); in default_reset_secondary()
268 static inline bool have_dtb(const struct arm_boot_info *info) in have_dtb() argument
270 return info->dtb_filename || info->get_dtb; in have_dtb()
279 static void set_kernel_args(const struct arm_boot_info *info, AddressSpace *as) in set_kernel_args() argument
281 int initrd_size = info->initrd_size; in set_kernel_args()
282 hwaddr base = info->loader_start; in set_kernel_args()
296 WRITE_WORD(p, info->ram_size); in set_kernel_args()
297 WRITE_WORD(p, info->loader_start); in set_kernel_args()
302 WRITE_WORD(p, info->initrd_start); in set_kernel_args()
305 if (info->kernel_cmdline && *info->kernel_cmdline) { in set_kernel_args()
309 cmdline_size = strlen(info->kernel_cmdline); in set_kernel_args()
311 info->kernel_cmdline, cmdline_size + 1); in set_kernel_args()
317 if (info->atag_board) { in set_kernel_args()
322 atag_board_len = (info->atag_board(info, atag_board_buf) + 3) & ~3; in set_kernel_args()
334 static void set_kernel_args_old(const struct arm_boot_info *info, in set_kernel_args_old() argument
339 int initrd_size = info->initrd_size; in set_kernel_args_old()
340 hwaddr base = info->loader_start; in set_kernel_args_old()
347 WRITE_WORD(p, info->ram_size / 4096); in set_kernel_args_old()
381 WRITE_WORD(p, info->initrd_start); in set_kernel_args_old()
401 s = info->kernel_cmdline; in set_kernel_args_old()
690 const struct arm_boot_info *info = env->boot_info; in do_cpu_reset() local
693 if (info) { in do_cpu_reset()
694 if (!info->is_linux) { in do_cpu_reset()
697 uint64_t entry = info->entry; in do_cpu_reset()
699 switch (info->endianness) { in do_cpu_reset()
741 assert(!info->secure_boot); in do_cpu_reset()
742 assert(!info->secure_board_setup); in do_cpu_reset()
745 (info->secure_boot || in do_cpu_reset()
746 (info->secure_board_setup && cs == first_cpu))) { in do_cpu_reset()
755 AddressSpace *as = arm_boot_address_space(cpu, info); in do_cpu_reset()
757 cpu_set_pc(cs, info->loader_start); in do_cpu_reset()
759 if (!have_dtb(info)) { in do_cpu_reset()
761 set_kernel_args_old(info, as); in do_cpu_reset()
763 set_kernel_args(info, as); in do_cpu_reset()
766 } else if (info->secondary_cpu_reset_hook) { in do_cpu_reset()
767 info->secondary_cpu_reset_hook(cpu, info); in do_cpu_reset()
782 struct arm_boot_info *info = opaque; in do_arm_linux_init() local
785 albifc->arm_linux_init(albif, info->secure_boot); in do_arm_linux_init()
791 static ssize_t arm_load_elf(struct arm_boot_info *info, uint64_t *pentry, in arm_load_elf() argument
806 load_elf_hdr(info->kernel_filename, &elf_header, &elf_is64, &err); in arm_load_elf()
818 info->endianness = big_endian ? ARM_ENDIANNESS_BE8 in arm_load_elf()
824 info->endianness = ARM_ENDIANNESS_BE8; in arm_load_elf()
826 info->endianness = ARM_ENDIANNESS_BE32; in arm_load_elf()
837 info->endianness = ARM_ENDIANNESS_LE; in arm_load_elf()
841 ret = load_elf_as(info->kernel_filename, NULL, NULL, NULL, in arm_load_elf()
847 info->kernel_filename, load_elf_strerror(ret)); in arm_load_elf()
931 struct arm_boot_info *info) in arm_setup_direct_kernel_boot() argument
935 AddressSpace *as = arm_boot_address_space(cpu, info); in arm_setup_direct_kernel_boot()
945 uint64_t ram_end = info->loader_start + info->ram_size; in arm_setup_direct_kernel_boot()
952 if (!info->write_board_setup) { in arm_setup_direct_kernel_boot()
959 kernel_size = arm_load_elf(info, &elf_entry, &image_low_addr, in arm_setup_direct_kernel_boot()
961 if (kernel_size > 0 && have_dtb(info)) { in arm_setup_direct_kernel_boot()
966 if (image_low_addr > info->loader_start in arm_setup_direct_kernel_boot()
967 || image_high_addr < info->loader_start) { in arm_setup_direct_kernel_boot()
972 if (image_low_addr < info->loader_start) { in arm_setup_direct_kernel_boot()
975 info->dtb_start = info->loader_start; in arm_setup_direct_kernel_boot()
976 info->dtb_limit = image_low_addr; in arm_setup_direct_kernel_boot()
981 uint64_t loadaddr = info->loader_start + KERNEL_NOLOAD_ADDR; in arm_setup_direct_kernel_boot()
982 kernel_size = load_uimage_as(info->kernel_filename, &entry, &loadaddr, in arm_setup_direct_kernel_boot()
990 kernel_size = load_aarch64_image(info->kernel_filename, in arm_setup_direct_kernel_boot()
991 info->loader_start, &entry, as); in arm_setup_direct_kernel_boot()
999 entry = info->loader_start + KERNEL_LOAD_ADDR; in arm_setup_direct_kernel_boot()
1000 kernel_size = load_image_targphys_as(info->kernel_filename, entry, in arm_setup_direct_kernel_boot()
1009 error_report("could not load kernel '%s'", info->kernel_filename); in arm_setup_direct_kernel_boot()
1013 if (kernel_size > info->ram_size) { in arm_setup_direct_kernel_boot()
1016 info->kernel_filename, kernel_size, info->ram_size); in arm_setup_direct_kernel_boot()
1020 info->entry = entry; in arm_setup_direct_kernel_boot()
1037 info->initrd_start = info->loader_start + in arm_setup_direct_kernel_boot()
1038 MIN(info->ram_size / 2, 128 * MiB); in arm_setup_direct_kernel_boot()
1040 info->initrd_start = MAX(info->initrd_start, image_high_addr); in arm_setup_direct_kernel_boot()
1042 info->initrd_start = TARGET_PAGE_ALIGN(info->initrd_start); in arm_setup_direct_kernel_boot()
1047 if (info->initrd_filename) { in arm_setup_direct_kernel_boot()
1049 if (info->initrd_start >= ram_end) { in arm_setup_direct_kernel_boot()
1054 initrd_size = load_ramdisk_as(info->initrd_filename, in arm_setup_direct_kernel_boot()
1055 info->initrd_start, in arm_setup_direct_kernel_boot()
1056 ram_end - info->initrd_start, as); in arm_setup_direct_kernel_boot()
1058 initrd_size = load_image_targphys_as(info->initrd_filename, in arm_setup_direct_kernel_boot()
1059 info->initrd_start, in arm_setup_direct_kernel_boot()
1061 info->initrd_start, in arm_setup_direct_kernel_boot()
1066 info->initrd_filename); in arm_setup_direct_kernel_boot()
1069 if (info->initrd_start + initrd_size > ram_end) { in arm_setup_direct_kernel_boot()
1072 info->initrd_filename); in arm_setup_direct_kernel_boot()
1078 info->initrd_size = initrd_size; in arm_setup_direct_kernel_boot()
1080 fixupcontext[FIXUP_BOARDID] = info->board_id; in arm_setup_direct_kernel_boot()
1081 fixupcontext[FIXUP_BOARD_SETUP] = info->board_setup_addr; in arm_setup_direct_kernel_boot()
1087 if (have_dtb(info)) { in arm_setup_direct_kernel_boot()
1108 info->dtb_start = QEMU_ALIGN_UP(info->initrd_start + initrd_size, in arm_setup_direct_kernel_boot()
1110 if (info->dtb_start >= ram_end) { in arm_setup_direct_kernel_boot()
1114 fixupcontext[FIXUP_ARGPTR_LO] = info->dtb_start; in arm_setup_direct_kernel_boot()
1115 fixupcontext[FIXUP_ARGPTR_HI] = info->dtb_start >> 32; in arm_setup_direct_kernel_boot()
1118 info->loader_start + KERNEL_ARGS_ADDR; in arm_setup_direct_kernel_boot()
1120 (info->loader_start + KERNEL_ARGS_ADDR) >> 32; in arm_setup_direct_kernel_boot()
1121 if (info->ram_size >= 4 * GiB) { in arm_setup_direct_kernel_boot()
1131 arm_write_bootloader("bootloader", as, info->loader_start, in arm_setup_direct_kernel_boot()
1134 if (info->write_board_setup) { in arm_setup_direct_kernel_boot()
1135 info->write_board_setup(cpu, info); in arm_setup_direct_kernel_boot()
1143 do_arm_linux_init, info); in arm_setup_direct_kernel_boot()
1145 info->is_linux = is_linux; in arm_setup_direct_kernel_boot()
1148 ARM_CPU(cs)->env.boot_info = info; in arm_setup_direct_kernel_boot()
1152 static void arm_setup_firmware_boot(ARMCPU *cpu, struct arm_boot_info *info) in arm_setup_firmware_boot() argument
1156 if (have_dtb(info)) { in arm_setup_firmware_boot()
1162 info->dtb_start = info->loader_start; in arm_setup_firmware_boot()
1165 if (info->kernel_filename) { in arm_setup_firmware_boot()
1189 info->kernel_filename, in arm_setup_firmware_boot()
1193 info->initrd_filename, false); in arm_setup_firmware_boot()
1195 if (info->kernel_cmdline) { in arm_setup_firmware_boot()
1197 strlen(info->kernel_cmdline) + 1); in arm_setup_firmware_boot()
1199 info->kernel_cmdline); in arm_setup_firmware_boot()
1210 void arm_load_kernel(ARMCPU *cpu, MachineState *ms, struct arm_boot_info *info) in arm_load_kernel() argument
1213 AddressSpace *as = arm_boot_address_space(cpu, info); in arm_load_kernel()
1234 assert(!(info->secure_board_setup && kvm_enabled())); in arm_load_kernel()
1235 info->kernel_filename = ms->kernel_filename; in arm_load_kernel()
1236 info->kernel_cmdline = ms->kernel_cmdline; in arm_load_kernel()
1237 info->initrd_filename = ms->initrd_filename; in arm_load_kernel()
1238 info->dtb_filename = ms->dtb; in arm_load_kernel()
1239 info->dtb_limit = 0; in arm_load_kernel()
1242 if (!info->kernel_filename || info->firmware_loaded) { in arm_load_kernel()
1243 arm_setup_firmware_boot(cpu, info); in arm_load_kernel()
1245 arm_setup_direct_kernel_boot(cpu, info); in arm_load_kernel()
1263 assert(info->psci_conduit == QEMU_PSCI_CONDUIT_DISABLED || in arm_load_kernel()
1264 !info->secure_board_setup); in arm_load_kernel()
1275 if (info->is_linux && !info->secure_boot) { in arm_load_kernel()
1279 if ((info->psci_conduit == QEMU_PSCI_CONDUIT_HVC && boot_el >= 2) || in arm_load_kernel()
1280 (info->psci_conduit == QEMU_PSCI_CONDUIT_SMC && boot_el == 3)) { in arm_load_kernel()
1281 info->psci_conduit = QEMU_PSCI_CONDUIT_DISABLED; in arm_load_kernel()
1284 if (info->psci_conduit != QEMU_PSCI_CONDUIT_DISABLED) { in arm_load_kernel()
1288 object_property_set_int(cpuobj, "psci-conduit", info->psci_conduit, in arm_load_kernel()
1302 if (info->psci_conduit == QEMU_PSCI_CONDUIT_DISABLED && in arm_load_kernel()
1303 info->is_linux && nb_cpus > 1) { in arm_load_kernel()
1309 if (!info->secondary_cpu_reset_hook) { in arm_load_kernel()
1310 info->secondary_cpu_reset_hook = default_reset_secondary; in arm_load_kernel()
1312 if (!info->write_secondary_boot) { in arm_load_kernel()
1313 info->write_secondary_boot = default_write_secondary; in arm_load_kernel()
1315 info->write_secondary_boot(cpu, info); in arm_load_kernel()
1321 info->write_secondary_boot = NULL; in arm_load_kernel()
1322 info->secondary_cpu_reset_hook = NULL; in arm_load_kernel()
1329 if (!info->skip_dtb_autoload && have_dtb(info)) { in arm_load_kernel()
1330 if (arm_load_dtb(info->dtb_start, info, info->dtb_limit, as, ms) < 0) { in arm_load_kernel()