From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 73BD8C433B4 for ; Wed, 19 May 2021 16:45:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 51E67610E9 for ; Wed, 19 May 2021 16:45:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355388AbhESQqx (ORCPT ); Wed, 19 May 2021 12:46:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355366AbhESQqu (ORCPT ); Wed, 19 May 2021 12:46:50 -0400 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AF2DC06175F for ; Wed, 19 May 2021 09:45:30 -0700 (PDT) Received: by mail-oi1-x230.google.com with SMTP id j75so13653310oih.10 for ; Wed, 19 May 2021 09:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=n3nslXd1oDD6z2dYKaP2twlQcbfdSGmidNT7OePlUG4=; b=WGm4Ynazm/+VSRaGLZFfQ+wqW8Rr5++iJ695Ek/3bbhik4AClKj5GYpCdUh8UkiHHi eyjurn9ygPiTVsBIPtYAEWjkXkRLc73SeBT2Espv26XwdPbA6X11rm0OPKWcfuDh57zN geAdKtd+ALWfRAw+c6AXdfjJ5AK31jWb2ojc2d418c/jR42A6GmzS9dMbUUM8+Pqn2+C JXOnZeWGZVxzDa10iML0VnB3WvJZBQEi+4qbh+vG4LAent7mib0PQy3b/DPhrbQsXUy1 MlIrNYFTTxIuWUjJU6ztDcAXa0KI2hHvyY1U29jz+POWjz8FyWOIqhUyCgbITYX1YI3T VfHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=n3nslXd1oDD6z2dYKaP2twlQcbfdSGmidNT7OePlUG4=; b=heDH2TIArvl4FdGAKLLb7xXvSkaShcvm9YAhdQjgXQxW8EiXm4P64FwnwJdCLPJ0aD bdOz3Dtn3zIFajNF78//mJRoPr3kEWYuSLhfUtqCv0MWwlLz+hGvbCypZCJWNckd0H07 AZDsvWzDawF0CccCRGXOeXn20Wnbu4qRtoUtT9yNlyWelXsZQmyUdMdTTmwmrzUXMT4k Zo6+wXxMOuTTxfxAvNvQJLEWh+M9rHzn1PJDW5ZovbBIK0+pmC6GkkjH6wVD6GDM2s78 rE8hhLFlNPhw/bqR1YvAKR7ckFyv2MHFdWElOFkQm3ANszxsLJuEFokjJMxzDHc39cFC UPzw== X-Gm-Message-State: AOAM531Sr6H2cEgFf4/qhSUrvE5PVyqr7RAhUzAArGZk5aXyTazO7hZ2 YTKyprXUwNeT408whWoHDCTcYDYb0dpR5DLX0LM= X-Google-Smtp-Source: ABdhPJweK6a7acvH1Sgwx5MjDUmmvzL2xv5d173VsMYsXQZDGk/wutf7xjkIJ21vtujBrS/uTGfOCmEdHfxM2IV3/Gs= X-Received: by 2002:aca:fc50:: with SMTP id a77mr27090oii.123.1621442729658; Wed, 19 May 2021 09:45:29 -0700 (PDT) MIME-Version: 1.0 References: <20210519135723.525997-1-kai.heng.feng@canonical.com> In-Reply-To: <20210519135723.525997-1-kai.heng.feng@canonical.com> From: Alex Deucher Date: Wed, 19 May 2021 12:45:18 -0400 Message-ID: Subject: Re: [PATCH] vgaarb: Use ACPI HID name to find integrated GPU To: Kai-Heng Feng Cc: Dave Airlie , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , "Deucher, Alexander" , open list , "open list:DRM DRIVERS" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 19, 2021 at 9:57 AM Kai-Heng Feng wrote: > > 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 Reviewed-by: Alex Deucher Unless there are any other comments, I'll apply it tomorrow. Alex > --- > 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 > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 549F2C433ED for ; Wed, 19 May 2021 16:45:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0D5AC610E9 for ; Wed, 19 May 2021 16:45:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D5AC610E9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 20E036E213; Wed, 19 May 2021 16:45:31 +0000 (UTC) Received: from mail-oi1-x231.google.com (mail-oi1-x231.google.com [IPv6:2607:f8b0:4864:20::231]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6CF726E213 for ; Wed, 19 May 2021 16:45:30 +0000 (UTC) Received: by mail-oi1-x231.google.com with SMTP id v22so13708098oic.2 for ; Wed, 19 May 2021 09:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=n3nslXd1oDD6z2dYKaP2twlQcbfdSGmidNT7OePlUG4=; b=WGm4Ynazm/+VSRaGLZFfQ+wqW8Rr5++iJ695Ek/3bbhik4AClKj5GYpCdUh8UkiHHi eyjurn9ygPiTVsBIPtYAEWjkXkRLc73SeBT2Espv26XwdPbA6X11rm0OPKWcfuDh57zN geAdKtd+ALWfRAw+c6AXdfjJ5AK31jWb2ojc2d418c/jR42A6GmzS9dMbUUM8+Pqn2+C JXOnZeWGZVxzDa10iML0VnB3WvJZBQEi+4qbh+vG4LAent7mib0PQy3b/DPhrbQsXUy1 MlIrNYFTTxIuWUjJU6ztDcAXa0KI2hHvyY1U29jz+POWjz8FyWOIqhUyCgbITYX1YI3T VfHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=n3nslXd1oDD6z2dYKaP2twlQcbfdSGmidNT7OePlUG4=; b=D/cynRRTGYij5008hF+t8NbVqjeJ6wibnHLjYIvELtD7aFavTZaDysZuOZhRwtbJsL iV+GYuXYNZw5imUL/TiUwdvTm4nOzYVccpkO/y7YdM4HAcIvmp5B3jgUGhubnSp6mWle 89kjw/9QOsTw0MTfzBvTDCEbRPE9V0rfV68VXoe/7ONkXSnnQ1vUzDRvX/ZyLWlp1E6z 8EsDxHql5GpxIp4mK7N4xW3Qp2ziwGWgqdvPrETuZuBAcLu/uAYDN8JnF3Xio4IOG7fU O2Lc+lNp5cSahbpvKtl+PMz7cqH06S7VLWmRkG86eUDiKwkLJA+2ayzcqVGx6iNTWiME ZeOg== X-Gm-Message-State: AOAM531Q4O/W+F0uplZZSQDJhY+/cH1tUC9/i1wMetNqYXhOSllAdZpH o8nEnlcQqJJdRYFGxv3fxmY401mUVCN4j6xcabw= X-Google-Smtp-Source: ABdhPJweK6a7acvH1Sgwx5MjDUmmvzL2xv5d173VsMYsXQZDGk/wutf7xjkIJ21vtujBrS/uTGfOCmEdHfxM2IV3/Gs= X-Received: by 2002:aca:fc50:: with SMTP id a77mr27090oii.123.1621442729658; Wed, 19 May 2021 09:45:29 -0700 (PDT) MIME-Version: 1.0 References: <20210519135723.525997-1-kai.heng.feng@canonical.com> In-Reply-To: <20210519135723.525997-1-kai.heng.feng@canonical.com> From: Alex Deucher Date: Wed, 19 May 2021 12:45:18 -0400 Message-ID: Subject: Re: [PATCH] vgaarb: Use ACPI HID name to find integrated GPU To: Kai-Heng Feng Content-Type: text/plain; charset="UTF-8" X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dave Airlie , open list , "open list:DRM DRIVERS" , Thomas Zimmermann , "Deucher, Alexander" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Wed, May 19, 2021 at 9:57 AM Kai-Heng Feng wrote: > > 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 Reviewed-by: Alex Deucher Unless there are any other comments, I'll apply it tomorrow. Alex > --- > 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 >