On Sat, Feb 22, 2020 at 12:54 PM Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > > It's the last user, and more importantly, it's the last non-legacy > user of anything in drm_pci.c. > > The only tricky bit is the agp initialization. But a close look shows > that radeon does not use the drm_agp midlayer (the main use of that is > drm_bufs for legacy drivers), and instead could use the agp subsystem > directly (like nouveau does already). Hence we can just pull this in > too. > > A further step would be to entirely drop the use of drm_device->agp, > but feels like too much churn just for this patch. > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: "Christian König" <christian.koenig@xxxxxxx> > Cc: "David (ChunMing) Zhou" <David1.Zhou@xxxxxxx> > Cc: amd-gfx@xxxxxxxxxxxxxxxxxxxxx Applied. Thanks! Alex > --- > drivers/gpu/drm/radeon/radeon_drv.c | 43 +++++++++++++++++++++++++++-- > drivers/gpu/drm/radeon/radeon_kms.c | 6 ++++ > 2 files changed, 47 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c > index 49ce2e7d5f9e..59f8186a2415 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -37,6 +37,7 @@ > #include <linux/vga_switcheroo.h> > #include <linux/mmu_notifier.h> > > +#include <drm/drm_agpsupport.h> > #include <drm/drm_crtc_helper.h> > #include <drm/drm_drv.h> > #include <drm/drm_fb_helper.h> > @@ -322,6 +323,7 @@ static int radeon_pci_probe(struct pci_dev *pdev, > const struct pci_device_id *ent) > { > unsigned long flags = 0; > + struct drm_device *dev; > int ret; > > if (!ent) > @@ -362,7 +364,44 @@ static int radeon_pci_probe(struct pci_dev *pdev, > if (ret) > return ret; > > - return drm_get_pci_dev(pdev, ent, &kms_driver); > + dev = drm_dev_alloc(&kms_driver, &pdev->dev); > + if (IS_ERR(dev)) > + return PTR_ERR(dev); > + > + ret = pci_enable_device(pdev); > + if (ret) > + goto err_free; > + > + dev->pdev = pdev; > +#ifdef __alpha__ > + dev->hose = pdev->sysdata; > +#endif > + > + pci_set_drvdata(pdev, dev); > + > + if (pci_find_capability(dev->pdev, PCI_CAP_ID_AGP)) > + dev->agp = drm_agp_init(dev); > + if (dev->agp) { > + dev->agp->agp_mtrr = arch_phys_wc_add( > + dev->agp->agp_info.aper_base, > + dev->agp->agp_info.aper_size * > + 1024 * 1024); > + } > + > + ret = drm_dev_register(dev, ent->driver_data); > + if (ret) > + goto err_agp; > + > + return 0; > + > +err_agp: > + if (dev->agp) > + arch_phys_wc_del(dev->agp->agp_mtrr); > + kfree(dev->agp); > + pci_disable_device(pdev); > +err_free: > + drm_dev_put(dev); > + return ret; > } > > static void > @@ -562,7 +601,7 @@ static const struct file_operations radeon_driver_kms_fops = { > > static struct drm_driver kms_driver = { > .driver_features = > - DRIVER_USE_AGP | DRIVER_GEM | DRIVER_RENDER, > + DRIVER_GEM | DRIVER_RENDER, > .load = radeon_driver_load_kms, > .open = radeon_driver_open_kms, > .postclose = radeon_driver_postclose_kms, > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c > index cab891f86dc0..58176db85952 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_kms.c > @@ -32,6 +32,7 @@ > #include <linux/uaccess.h> > #include <linux/vga_switcheroo.h> > > +#include <drm/drm_agpsupport.h> > #include <drm/drm_fb_helper.h> > #include <drm/drm_file.h> > #include <drm/drm_ioctl.h> > @@ -77,6 +78,11 @@ void radeon_driver_unload_kms(struct drm_device *dev) > radeon_modeset_fini(rdev); > radeon_device_fini(rdev); > > + if (dev->agp) > + arch_phys_wc_del(dev->agp->agp_mtrr); > + kfree(dev->agp); > + dev->agp = NULL; > + > done_free: > kfree(rdev); > dev->dev_private = NULL; > -- > 2.24.1 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx