mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-20 18:54:09 +08:00
drm/i915: Recognise non-VGA display devices
Starting with SandyBridge (though possible with earlier hacked BIOSes), the BIOS may initialise the IGFX as secondary to a discrete GPU. Prior, it would simply disable the integrated GPU. So we adjust our PCI class mask to match any DISPLAY_CLASS device. In such a configuration, the IGFX is not a primary VGA controller and so should not take part in VGA arbitration, and the error return from vga_client_register() is expected. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: stable@kernel.org
This commit is contained in:
parent
076e2c0eb8
commit
934f992c76
@ -1215,9 +1215,15 @@ static int i915_load_modeset_init(struct drm_device *dev)
|
|||||||
if (ret)
|
if (ret)
|
||||||
DRM_INFO("failed to find VBIOS tables\n");
|
DRM_INFO("failed to find VBIOS tables\n");
|
||||||
|
|
||||||
/* if we have > 1 VGA cards, then disable the radeon VGA resources */
|
/* If we have > 1 VGA cards, then we need to arbitrate access
|
||||||
|
* to the common VGA resources.
|
||||||
|
*
|
||||||
|
* If we are a secondary display controller (!PCI_DISPLAY_CLASS_VGA),
|
||||||
|
* then we do not take part in VGA arbitration and the
|
||||||
|
* vga_client_register() fails with -ENODEV.
|
||||||
|
*/
|
||||||
ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
|
ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
|
||||||
if (ret)
|
if (ret && ret != -ENODEV)
|
||||||
goto cleanup_ringbuffer;
|
goto cleanup_ringbuffer;
|
||||||
|
|
||||||
intel_register_dsm_handler();
|
intel_register_dsm_handler();
|
||||||
|
@ -60,7 +60,7 @@ extern int intel_agp_enabled;
|
|||||||
|
|
||||||
#define INTEL_VGA_DEVICE(id, info) { \
|
#define INTEL_VGA_DEVICE(id, info) { \
|
||||||
.class = PCI_CLASS_DISPLAY_VGA << 8, \
|
.class = PCI_CLASS_DISPLAY_VGA << 8, \
|
||||||
.class_mask = 0xffff00, \
|
.class_mask = 0xff0000, \
|
||||||
.vendor = 0x8086, \
|
.vendor = 0x8086, \
|
||||||
.device = id, \
|
.device = id, \
|
||||||
.subvendor = PCI_ANY_ID, \
|
.subvendor = PCI_ANY_ID, \
|
||||||
|
@ -636,7 +636,7 @@ int vga_client_register(struct pci_dev *pdev, void *cookie,
|
|||||||
void (*irq_set_state)(void *cookie, bool state),
|
void (*irq_set_state)(void *cookie, bool state),
|
||||||
unsigned int (*set_vga_decode)(void *cookie, bool decode))
|
unsigned int (*set_vga_decode)(void *cookie, bool decode))
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -ENODEV;
|
||||||
struct vga_device *vgadev;
|
struct vga_device *vgadev;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user