2
0
Эх сурвалжийг харах

hw/boards: Ensure machine setting auto_create_sdcard expose a SD Bus

Using the auto_create_sdcard feature without SD Bus is irrelevant.

Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20250204200934.65279-8-philmd@linaro.org>
Philippe Mathieu-Daudé 6 сар өмнө
parent
commit
2be22bc72d
1 өөрчлөгдсөн 16 нэмэгдсэн , 0 устгасан
  1. 16 0
      system/vl.c

+ 16 - 0
system/vl.c

@@ -53,6 +53,7 @@
 #include "hw/usb.h"
 #include "hw/usb.h"
 #include "hw/isa/isa.h"
 #include "hw/isa/isa.h"
 #include "hw/scsi/scsi.h"
 #include "hw/scsi/scsi.h"
+#include "hw/sd/sd.h"
 #include "hw/display/vga.h"
 #include "hw/display/vga.h"
 #include "hw/firmware/smbios.h"
 #include "hw/firmware/smbios.h"
 #include "hw/acpi/acpi.h"
 #include "hw/acpi/acpi.h"
@@ -2661,12 +2662,27 @@ static void qemu_init_displays(void)
 
 
 static void qemu_init_board(void)
 static void qemu_init_board(void)
 {
 {
+    MachineClass *machine_class = MACHINE_GET_CLASS(current_machine);
+
     /* process plugin before CPUs are created, but once -smp has been parsed */
     /* process plugin before CPUs are created, but once -smp has been parsed */
     qemu_plugin_load_list(&plugin_list, &error_fatal);
     qemu_plugin_load_list(&plugin_list, &error_fatal);
 
 
     /* From here on we enter MACHINE_PHASE_INITIALIZED.  */
     /* From here on we enter MACHINE_PHASE_INITIALIZED.  */
     machine_run_board_init(current_machine, mem_path, &error_fatal);
     machine_run_board_init(current_machine, mem_path, &error_fatal);
 
 
+    if (machine_class->auto_create_sdcard) {
+        bool ambigous;
+
+        /* Ensure there is a SD bus available to create SD card on */
+        Object *obj = object_resolve_path_type("", TYPE_SD_BUS, &ambigous);
+        if (!obj && !ambigous) {
+            fprintf(stderr, "Can not create sd-card on '%s' machine"
+                            " because it lacks a sd-bus\n",
+                            machine_class->name);
+            abort();
+        }
+    }
+
     drive_check_orphaned();
     drive_check_orphaned();
 
 
     realtime_init();
     realtime_init();