Received: by 2002:a05:6520:4211:b029:f4:110d:56bc with SMTP id o17csp1621423lkv; Wed, 19 May 2021 14:15:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwwMGT/v3dQaW0bs1nUz1QpSiI5G5L/RRngludVwvh7Odbi5sbPGrDa6+2+xm+HB1vN1nZx X-Received: by 2002:a02:662b:: with SMTP id k43mr1311734jac.139.1621458944026; Wed, 19 May 2021 14:15:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621458944; cv=none; d=google.com; s=arc-20160816; b=FrjzQZkIEV28iEB9Gu/OPsYfHnsrTb/Bqmmu+YYBIM2uOPWhbmNZ55y4qlXssOhqyY 6d64/xLLz9SRx5+QwAtJmXZ626GunzS3qP5V8qnMjChAiGI4NdKL4RaqhZpMnAFWJRne NG87qcOgdoEZhwIooPfJQPjMCsiDlAxcZmsjXB//TIoie8dihx/jA4NlA4IiwwYgeOZ6 RV/5eG+r0QoEQFipLyePXko3EQuXphKdY85DAJqFQ46iO9liFNyOl2P205CMa+eYHGZi /gpJGn895kkqCCl1tVlDNSQYdrJZSBb192jdfr/vvyRFMYtZNt80PljRkto8KZXOmK+5 MjOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=nVuVjzWRdex3Hr3sLE3KG5EI1nhvT/kynTI782ILmdc=; b=zj7hjPpqJaRIQfspqGB7bG3O4q1rI/G63r5a05Ft56+A1DW4PlXjuNn587KJMDyUNr 5ojw2MzG1VItAPUJ2Ziy77VKLy6XQPZRZF9/4Ht2ljEFeBX2l3/J8K9Z9RGqqtU7HBNO /UYO0E1hunAeTPvwUskN270EbfW93Kq6caOSec0O+CoOi7vvdsDyjjrMIdp/qzO/2QEm sCX6YLbiJDq9Ex8WqE8D78JLYbouhAO7QyoatkeDI1Yo6mhU+tXxbMqrMPzKMfUbbHnl tcJuWf7x9Qgim71DcuHsYjav5Bgafqqo4+B05cqnFFbk8ZqSutbSVCsG91jgUFxLf+hV jQ8A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m25si387906ioo.79.2021.05.19.14.15.30; Wed, 19 May 2021 14:15:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241752AbhESN65 (ORCPT + 99 others); Wed, 19 May 2021 09:58:57 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:59734 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231627AbhESN65 (ORCPT ); Wed, 19 May 2021 09:58:57 -0400 Received: from 1-171-221-38.dynamic-ip.hinet.net ([1.171.221.38] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1ljMhX-0005vU-6q; Wed, 19 May 2021 13:57:31 +0000 From: Kai-Heng Feng To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de Cc: alexander.deucher@amd.com, Kai-Heng Feng , dri-devel@lists.freedesktop.org (open list:DRM DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCH] vgaarb: Use ACPI HID name to find integrated GPU Date: Wed, 19 May 2021 21:57:23 +0800 Message-Id: <20210519135723.525997-1-kai.heng.feng@canonical.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 3d42f1ddc47a ("vgaarb: Keep adding VGA device in queue") assumes the first device is an integrated GPU. However, on AMD platforms an integrated GPU can have higher PCI device number than a discrete GPU. Integrated GPU on ACPI platform generally has _DOD and _DOS method, so use that as predicate to find integrated GPU. If the new strategy doesn't work, fallback to use the first device as boot VGA. Signed-off-by: Kai-Heng Feng --- drivers/gpu/vga/vgaarb.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index 5180c5687ee5..949fde433ea2 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c @@ -50,6 +50,7 @@ #include #include #include +#include #include @@ -1450,9 +1451,23 @@ static struct miscdevice vga_arb_device = { MISC_DYNAMIC_MINOR, "vga_arbiter", &vga_arb_device_fops }; +#if defined(CONFIG_ACPI) +static bool vga_arb_integrated_gpu(struct device *dev) +{ + struct acpi_device *adev = ACPI_COMPANION(dev); + + return adev && !strcmp(acpi_device_hid(adev), ACPI_VIDEO_HID); +} +#else +static bool vga_arb_integrated_gpu(struct device *dev) +{ + return false; +} +#endif + static void __init vga_arb_select_default_device(void) { - struct pci_dev *pdev; + struct pci_dev *pdev, *found = NULL; struct vga_device *vgadev; #if defined(CONFIG_X86) || defined(CONFIG_IA64) @@ -1505,20 +1520,26 @@ static void __init vga_arb_select_default_device(void) #endif if (!vga_default_device()) { - list_for_each_entry(vgadev, &vga_list, list) { + list_for_each_entry_reverse(vgadev, &vga_list, list) { struct device *dev = &vgadev->pdev->dev; u16 cmd; pdev = vgadev->pdev; pci_read_config_word(pdev, PCI_COMMAND, &cmd); if (cmd & (PCI_COMMAND_IO | PCI_COMMAND_MEMORY)) { - vgaarb_info(dev, "setting as boot device (VGA legacy resources not available)\n"); - vga_set_default_device(pdev); - break; + found = pdev; + if (vga_arb_integrated_gpu(dev)) + break; } } } + if (found) { + vgaarb_info(&found->dev, "setting as boot device (VGA legacy resources not available)\n"); + vga_set_default_device(found); + return; + } + if (!vga_default_device()) { vgadev = list_first_entry_or_null(&vga_list, struct vga_device, list); -- 2.31.1