Hi Sam

Am 24.11.20 um 22:42 schrieb Sam Ravnborg:
Hi Thomas.

On Tue, Nov 24, 2020 at 12:38:18PM +0100, Thomas Zimmermann wrote:
Using struct drm_device.pdev is deprecated. Convert nouveau to struct
drm_device.dev. No functional changes.

Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de>
Cc: Ben Skeggs <bske...@redhat.com>

Suggestion to an alternative implmentation below.

---
  drivers/gpu/drm/nouveau/dispnv04/arb.c      | 12 +++++++-----
  drivers/gpu/drm/nouveau/dispnv04/disp.h     | 14 ++++++++------
  drivers/gpu/drm/nouveau/dispnv04/hw.c       | 10 ++++++----
  drivers/gpu/drm/nouveau/nouveau_abi16.c     |  7 ++++---
  drivers/gpu/drm/nouveau/nouveau_acpi.c      |  2 +-
  drivers/gpu/drm/nouveau/nouveau_bios.c      | 11 ++++++++---
  drivers/gpu/drm/nouveau/nouveau_connector.c | 10 ++++++----
  drivers/gpu/drm/nouveau/nouveau_drm.c       |  5 ++---
  drivers/gpu/drm/nouveau/nouveau_fbcon.c     |  6 ++++--
  drivers/gpu/drm/nouveau/nouveau_vga.c       | 20 ++++++++++++--------
  10 files changed, 58 insertions(+), 39 deletions(-)


diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c 
b/drivers/gpu/drm/nouveau/nouveau_bios.c
index d204ea8a5618..7cc683b8dc7a 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -110,6 +110,9 @@ static int call_lvds_manufacturer_script(struct drm_device 
*dev, struct dcb_outp
        struct nvbios *bios = &drm->vbios;
        uint8_t sub = bios->data[bios->fp.xlated_entry + script] + (bios->fp.link_c_increment 
&& dcbent->or & DCB_OUTPUT_C ? 1 : 0);
        uint16_t scriptofs = ROM16(bios->data[bios->init_script_tbls_ptr + sub 
* 2]);
+#ifdef __powerpc__
+       struct pci_dev *pdev = to_pci_dev(dev->dev);
+#endif
Or
        int device = 0;
if (!bios->fp.xlated_entry || !sub || !scriptofs)
                return -EINVAL;
@@ -123,8 +126,8 @@ static int call_lvds_manufacturer_script(struct drm_device 
*dev, struct dcb_outp
  #ifdef __powerpc__
        /* Powerbook specific quirks */
        device = to_pci_dev(dev->dev)->device;
        if (script == LVDS_RESET && (device == 0x0179 || device == 0x0189 || 
device == 0x0329))

I see the point, but I'm trying to not change the existing implementation too much.


        if (script == LVDS_RESET &&
-           (dev->pdev->device == 0x0179 || dev->pdev->device == 0x0189 ||
-            dev->pdev->device == 0x0329))
+           (pdev->device == 0x0179 || pdev->device == 0x0189 ||
+            pdev->device == 0x0329))
                nv_write_tmds(dev, dcbent->or, 0, 0x02, 0x72);
  #endif


diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c 
b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index 24ec5339efb4..4fc0fa696461 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -396,7 +396,9 @@ nouveau_fbcon_create(struct drm_fb_helper *helper,
        NV_INFO(drm, "allocated %dx%d fb: 0x%llx, bo %p\n",
                fb->width, fb->height, nvbo->offset, nvbo);
- vga_switcheroo_client_fb_set(dev->pdev, info);
+       if (dev_is_pci(dev->dev))
+               vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), info);
+
I cannot see why dev_is_pci() is needed here.
So I am obviously missing something :-(

vga_switcheroo_client_fb_set() expects a PCI device. It's a bit of a stretch, but at least it is possible to pass NULL for non-PCI devices. Passing the upcasted dev->dev is just garbage.

As the VGA switcheroo is only relevant for PCI devices, I added the branching to make this work reliably.

Best regards
Thomas


        return 0;
out_unlock:
@@ -548,7 +550,7 @@ nouveau_fbcon_init(struct drm_device *dev)
        int ret;
if (!dev->mode_config.num_crtc ||
-           (dev->pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
+           (to_pci_dev(dev->dev)->class >> 8) != PCI_CLASS_DISPLAY_VGA)
                return 0;
fbcon = kzalloc(sizeof(struct nouveau_fbdev), GFP_KERNEL);
diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c 
b/drivers/gpu/drm/nouveau/nouveau_vga.c
index c85dd8afa3c3..7c4b374b3eca 100644
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c
@@ -87,18 +87,20 @@ nouveau_vga_init(struct nouveau_drm *drm)
  {
        struct drm_device *dev = drm->dev;
        bool runtime = nouveau_pmops_runtime();
+       struct pci_dev *pdev;
/* only relevant for PCI devices */
-       if (!dev->pdev)
+       if (!dev_is_pci(dev->dev))
                return;
+       pdev = to_pci_dev(dev->dev);
- vga_client_register(dev->pdev, dev, NULL, nouveau_vga_set_decode);
+       vga_client_register(pdev, dev, NULL, nouveau_vga_set_decode);
/* don't register Thunderbolt eGPU with vga_switcheroo */
-       if (pci_is_thunderbolt_attached(dev->pdev))
+       if (pci_is_thunderbolt_attached(pdev))
                return;
- vga_switcheroo_register_client(dev->pdev, &nouveau_switcheroo_ops, runtime);
+       vga_switcheroo_register_client(pdev, &nouveau_switcheroo_ops, runtime);
if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus())
                vga_switcheroo_init_domain_pm_ops(drm->dev->dev, 
&drm->vga_pm_domain);
@@ -109,17 +111,19 @@ nouveau_vga_fini(struct nouveau_drm *drm)
  {
        struct drm_device *dev = drm->dev;
        bool runtime = nouveau_pmops_runtime();
+       struct pci_dev *pdev;
/* only relevant for PCI devices */
-       if (!dev->pdev)
+       if (!dev_is_pci(dev->dev))
                return;
+       pdev = to_pci_dev(dev->dev);
- vga_client_register(dev->pdev, NULL, NULL, NULL);
+       vga_client_register(pdev, NULL, NULL, NULL);
- if (pci_is_thunderbolt_attached(dev->pdev))
+       if (pci_is_thunderbolt_attached(pdev))
                return;
- vga_switcheroo_unregister_client(dev->pdev);
+       vga_switcheroo_unregister_client(pdev);
        if (runtime && nouveau_is_v1_dsm() && !nouveau_is_optimus())
                vga_switcheroo_fini_domain_pm_ops(drm->dev->dev);
  }
--
2.29.2

_______________________________________________
dri-devel mailing list
dri-de...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to