[PATCH 2/3] drm/radeon: Inline drm_get_pci_dev
Alex Deucher
alexdeucher at gmail.com
Tue Feb 25 15:26:35 UTC 2020
On Sat, Feb 22, 2020 at 12:54 PM Daniel Vetter <daniel.vetter at ffwll.ch> 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 at intel.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: "Christian König" <christian.koenig at amd.com>
> Cc: "David (ChunMing) Zhou" <David1.Zhou at amd.com>
> Cc: amd-gfx at lists.freedesktop.org
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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list