On 08/01/2020 17:18, Alexey Kardashevskiy wrote:
> The Petitboot bootloader is way more advanced than SLOF is ever going to
> be as Petitboot comes with the full-featured Linux kernel with all
> the drivers, and initramdisk with quite user friendly interface.
> The problem with ditching SLOF is that an unmodified pseries kernel can
> either start via:
> 1. kexec, this requires presence of RTAS and skips
> ibm,client-architecture-support entirely;
> 2. normal boot, this heavily relies on the OF1275 client interface to
> fetch the device tree and do early setup (claim memory).
>
> This adds a new bios-less mode to the pseries machine: "bios=on|off".
> When enabled, QEMU does not load SLOF and jumps to the kernel from
> "-kernel".
btw it occured to me that "of" (or "of-cli", or "of1275") is probably a
better name for the new option as there is still "bios" (those new 20
bytes with H_CLIENT) but this time QEMU implements the OF client interface.
> fdt = spapr_build_fdt(spapr, true, FDT_MAX_SIZE);
>
> - rc = fdt_pack(fdt);
> -
> - /* Should only fail if we've built a corrupted tree */
> - assert(rc == 0);
> -
> - /* Load the fdt */
> - qemu_fdt_dumpdtb(fdt, fdt_totalsize(fdt));
> - cpu_physical_memory_write(fdt_addr, fdt, fdt_totalsize(fdt));
> g_free(spapr->fdt_blob);
> spapr->fdt_size = fdt_totalsize(fdt);
> spapr->fdt_initial_size = spapr->fdt_size;
> spapr->fdt_blob = fdt;
>
> - /* Set up the entry state */
> - spapr_cpu_set_entry_state(first_ppc_cpu, SPAPR_ENTRY_POINT, fdt_addr);
> - first_ppc_cpu->env.gpr[5] = 0;
> + if (spapr->bios_enabled) {
> + /* Load the fdt */
> + rc = fdt_pack(fdt);
> + /* Should only fail if we've built a corrupted tree */
> + assert(rc == 0);
> +
> + spapr->fdt_size = fdt_totalsize(fdt);
> + spapr->fdt_initial_size = spapr->fdt_size;
> + qemu_fdt_dumpdtb(fdt, fdt_totalsize(fdt));
> + cpu_physical_memory_write(fdt_addr, fdt, fdt_totalsize(fdt));
Inconsistency here, should have used here spapr->fdt_blob.
--
Alexey