Sam Ravnborg
2020-Nov-24 21:42 UTC
[Nouveau] [PATCH 09/15] drm/nouveau: Remove references to struct drm_device.pdev
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 <tzimmermann at suse.de> > Cc: Ben Skeggs <bskeggs at 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); > +#endifOr 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))> 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 :-(> 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-devel at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Thomas Zimmermann
2020-Dec-01 09:50 UTC
[Nouveau] [PATCH 09/15] drm/nouveau: Remove references to struct drm_device.pdev
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 <tzimmermann at suse.de> >> Cc: Ben Skeggs <bskeggs at 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-devel at 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 -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_signature Type: application/pgp-signature Size: 840 bytes Desc: OpenPGP digital signature URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20201201/5aa3a5c8/attachment.sig>