Re: [PATCH v2 10/10] x86, efi: EFI boot stub support

From: Matthew Garrett
Date: Tue Sep 13 2011 - 09:30:04 EST


On Mon, Sep 12, 2011 at 03:34:54PM +0100, Matt Fleming wrote:

> + status = efi_call_phys5(sys_table->boottime->locate_handle,
> + EFI_LOCATE_BY_PROTOCOL, proto,
> + NULL, &size, gop_handle);
> + if (status != EFI_SUCCESS)
> + goto free_handle;
> +
> + nr_gops = size / sizeof(void *);
> + for (i = 0; i < nr_gops; i++) {
> + void *h = gop_handle[i];
> +
> + status = efi_call_phys3(sys_table->boottime->handle_protocol,
> + h, proto, &gop);
> + if (status != EFI_SUCCESS)
> + continue;
> +
> + status = efi_call_phys4(gop->query_mode, gop, gop->mode->mode,
> + &size, &info);
> + if (status == EFI_SUCCESS)
> + break;
> + }

Apple do something funky here, which is to provide a GOP that's not
backed by real hardware but which muxes writes out to multiple outputs
in order to handle the multiple display case without screwing up aspect
ratio. That's fine, except that the stride reported for the fake one is
just the horizontal width of the logical display. That results in things
failing badly. The real one also implements PCIIO. My workaround so far
has been to look for a GOP that handles PCIIO and use it if found, and
otherwise just fall back to the first GOP.

--
Matthew Garrett | mjg59@xxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/