[PATCH v3 2/3] drm: add fallback default device detection
Andrew Donnellan
andrew.donnellan at au1.ibm.com
Mon Sep 11 14:35:51 AEST 2017
On 01/09/17 17:27, Daniel Axtens wrote:
> The VGA arbiter selects a default VGA device that is enabled and
> reachable via the legacy VGA resources (mem 0xa0000-0xbffff, io
> 0x3b0-0x3bb, io 0x3c0-0x3df, etc).
>
> (As a special case for x86 and IA64, this can be overridden by
> EFI.)
>
> If there is no such device, e.g., because there's no enabled VGA
> device, the host bridge doesn't support access to those legacy
> resources, or a PCI-PCI bridge doesn't have VGA Enable set, a
> platform may select an arbitrary device by calling
> pci_set_default_display(). powerpc does this, for example.
>
> If there is also no platform hook, there will be no default
> device nominated. This is not necessarily what we want.
>
> Add handling for devices that aren't handled by the vga arbiter or
> platform by adding a late initcall and a class enable hook. If there
> is no default from vgaarb or the platform then the first VGA card
> that is enabled, has a driver bound, and can decode memory or I/O
> will be marked as default.
>
> This means single-card setups on systems without access to legacy
> areas and without arch hooks will work. Multi-card setups on these
> systems will nominate an arbitrary device, rather than no devices.
>
> Signed-off-by: Daniel Axtens <dja at axtens.net>
>
> ---
>
> v3:
>
> Split out from re-organisation for simplicity.
> Add better description and better documentaion.
>
> Thanks to (in no particular order), Daniel Vetter, Lorenzo Pieralisi,
> Ard Biesheuvel and Dave Airlie. Special thanks to Ben Herrenschmidt
> and Bjorn Helgass, whose prose I have borrowed.
>
> v1:
>
> Tested on:
> - x86_64 laptop
> - arm64 D05 board with hibmc card
> - qemu powerpc with tcg and bochs std-vga
>
> I know this adds another config option and that's a bit sad, but
> we can't include it unconditionally as it depends on PCI.
> Suggestions welcome.
Tested on our iMac G5, the fallback handler doesn't fire (which should
be correct).
Tested-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> +static void vga_default_enable_hook(struct pci_dev *pdev)
> +{
> + if (!vga_default_active)
> + return;
> +
> + if (pci_default_display())
> + return;
> +
> + vga_default_try_device(pdev);
> +}
> +DECLARE_PCI_FIXUP_CLASS_ENABLE(PCI_ANY_ID, PCI_ANY_ID,
> + PCI_CLASS_DISPLAY_VGA, 8,
> + vga_default_enable_hook)
>
Looks like you have some spaces/tabs inconsistencies here.
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com IBM Australia Limited
More information about the Linuxppc-dev
mailing list