nr_gops = size / sizeof(void *);
        for (i = 0; i < nr_gops; i++) {
                struct efi_graphics_output_mode_info *info;
-               efi_guid_t pciio_proto = EFI_PCI_IO_PROTOCOL_GUID;
-               void *pciio;
+               efi_guid_t conout_proto = EFI_CONSOLE_OUT_DEVICE_GUID;
+               bool conout_found = false;
+               void *dummy;
                void *h = gop_handle[i];
 
                status = efi_call_phys3(sys_table->boottime->handle_protocol,
                if (status != EFI_SUCCESS)
                        continue;
 
-               efi_call_phys3(sys_table->boottime->handle_protocol,
-                              h, &pciio_proto, &pciio);
+               status = efi_call_phys3(sys_table->boottime->handle_protocol,
+                                       h, &conout_proto, &dummy);
+
+               if (status == EFI_SUCCESS)
+                       conout_found = true;
 
                status = efi_call_phys4(gop->query_mode, gop,
                                        gop->mode->mode, &size, &info);
-               if (status == EFI_SUCCESS && (!first_gop || pciio)) {
+               if (status == EFI_SUCCESS && (!first_gop || conout_found)) {
                        /*
-                        * Apple provide GOPs that are not backed by
-                        * real hardware (they're used to handle
-                        * multiple displays). The workaround is to
-                        * search for a GOP implementing the PCIIO
-                        * protocol, and if one isn't found, to just
-                        * fallback to the first GOP.
+                        * Systems that use the UEFI Console Splitter may
+                        * provide multiple GOP devices, not all of which are
+                        * backed by real hardware. The workaround is to search
+                        * for a GOP implementing the ConOut protocol, and if
+                        * one isn't found, to just fall back to the first GOP.
                         */
                        width = info->horizontal_resolution;
                        height = info->vertical_resolution;
                        pixels_per_scan_line = info->pixels_per_scan_line;
 
                        /*
-                        * Once we've found a GOP supporting PCIIO,
+                        * Once we've found a GOP supporting ConOut,
                         * don't bother looking any further.
                         */
-                       if (pciio)
+                       if (conout_found)
                                break;
 
                        first_gop = gop;
 
 #define EFI_PAGE_SIZE          (1UL << EFI_PAGE_SHIFT)
 #define EFI_READ_CHUNK_SIZE    (1024 * 1024)
 
+#define EFI_CONSOLE_OUT_DEVICE_GUID    \
+       EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x0, 0x90, 0x27, \
+                 0x3f, 0xc1, 0x4d)
+
 #define PIXEL_RGB_RESERVED_8BIT_PER_COLOR              0
 #define PIXEL_BGR_RESERVED_8BIT_PER_COLOR              1
 #define PIXEL_BIT_MASK                                 2