lkml.org 
[lkml]   [2020]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 094/176] drm/radeon: Inline drm_get_pci_dev
    Date
    From: Daniel Vetter <daniel.vetter@ffwll.ch>

    commit eb12c957735b582607e5842a06d1f4c62e185c1d upstream.

    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@intel.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: "Christian König" <christian.koenig@amd.com>
    Cc: "David (ChunMing) Zhou" <David1.Zhou@amd.com>
    Cc: amd-gfx@lists.freedesktop.org
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/radeon/radeon_drv.c | 43 ++++++++++++++++++++++++++++++++++--
    drivers/gpu/drm/radeon/radeon_kms.c | 6 +++++
    2 files changed, 47 insertions(+), 2 deletions(-)

    --- 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>
    @@ -325,6 +326,7 @@ static int radeon_pci_probe(struct pci_d
    const struct pci_device_id *ent)
    {
    unsigned long flags = 0;
    + struct drm_device *dev;
    int ret;

    if (!ent)
    @@ -365,7 +367,44 @@ static int radeon_pci_probe(struct pci_d
    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
    @@ -575,7 +614,7 @@ radeon_get_crtc_scanout_position(struct

    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,
    --- a/drivers/gpu/drm/radeon/radeon_kms.c
    +++ b/drivers/gpu/drm/radeon/radeon_kms.c
    @@ -31,6 +31,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
    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;

    \
     
     \ /
      Last update: 2020-03-03 19:13    [W:4.202 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site