• I
    arm/boot: split load_dtb() from arm_load_kernel() · 3b77f6c3
    Igor Mammedov 提交于
    load_dtb() depends on arm_load_kernel() to figure out place
    in RAM where it should be loaded, but it's not required for
    arm_load_kernel() to work. Sometimes it's neccesary for
    devices added with -device/device_add to be enumerated in
    DTB as well, which's lead to [1] and surrounding commits to
    add 2 more machine_done notifiers with non obvious ordering
    to make dynamic sysbus devices initialization happen in
    the right order.
    
    However instead of moving whole arm_load_kernel() in to
    machine_done, it's sufficient to move only load_dtb() into
    virt_machine_done() notifier and remove ArmLoadKernelNotifier/
    /PlatformBusFDTNotifierParams notifiers, which saves us ~90LOC
    and simplifies code flow quite a bit.
    Later would allow to consolidate DTB generation within one
    function for 'mach-virt' board and make it reentrant so it
    could generate updated DTB in device hotplug secenarios.
    
    While at it rename load_dtb() to arm_load_dtb() since it's
    public now.
    
    Add additional field skip_dtb_autoload to struct arm_boot_info
    to allow manual DTB load later in mach-virt and to avoid touching
    all other boards to explicitly call arm_load_dtb().
    
     1) (ac9d32e3 hw/arm/boot: arm_load_kernel implemented as a machine init done notifier)
    Signed-off-by: NIgor Mammedov <imammedo@redhat.com>
    Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
    Reviewed-by: NAndrew Jones <drjones@redhat.com>
    Message-id: 1525691524-32265-4-git-send-email-imammedo@redhat.com
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    3b77f6c3
virt.c 68.8 KB