lkml.org 
[lkml]   [2016]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.5 175/238] drm/radeon: rework fbdev handling on chips with no connectors
    Date
    4.5-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Alex Deucher <alexander.deucher@amd.com>

    commit e5f243bd2edd95c6cc1d90c1878f821068e83fba upstream.

    Move all the logic to radeon_fb.c and add checks to functions
    called frome elsewhere.

    bug:
    https://bugzilla.kernel.org/show_bug.cgi?id=112781

    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpu/drm/radeon/radeon_display.c | 6 ++----
    drivers/gpu/drm/radeon/radeon_fb.c | 19 +++++++++++++++----
    2 files changed, 17 insertions(+), 8 deletions(-)

    --- a/drivers/gpu/drm/radeon/radeon_display.c
    +++ b/drivers/gpu/drm/radeon/radeon_display.c
    @@ -1683,10 +1683,8 @@ int radeon_modeset_init(struct radeon_de
    /* setup afmt */
    radeon_afmt_init(rdev);

    - if (!list_empty(&rdev->ddev->mode_config.connector_list)) {
    - radeon_fbdev_init(rdev);
    - drm_kms_helper_poll_init(rdev->ddev);
    - }
    + radeon_fbdev_init(rdev);
    + drm_kms_helper_poll_init(rdev->ddev);

    /* do pm late init */
    ret = radeon_pm_late_init(rdev);
    --- a/drivers/gpu/drm/radeon/radeon_fb.c
    +++ b/drivers/gpu/drm/radeon/radeon_fb.c
    @@ -292,7 +292,8 @@ out_unref:

    void radeon_fb_output_poll_changed(struct radeon_device *rdev)
    {
    - drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
    + if (rdev->mode_info.rfbdev)
    + drm_fb_helper_hotplug_event(&rdev->mode_info.rfbdev->helper);
    }

    static int radeon_fbdev_destroy(struct drm_device *dev, struct radeon_fbdev *rfbdev)
    @@ -325,6 +326,10 @@ int radeon_fbdev_init(struct radeon_devi
    int bpp_sel = 32;
    int ret;

    + /* don't enable fbdev if no connectors */
    + if (list_empty(&rdev->ddev->mode_config.connector_list))
    + return 0;
    +
    /* select 8 bpp console on RN50 or 16MB cards */
    if (ASIC_IS_RN50(rdev) || rdev->mc.real_vram_size <= (32*1024*1024))
    bpp_sel = 8;
    @@ -377,11 +382,15 @@ void radeon_fbdev_fini(struct radeon_dev

    void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state)
    {
    - fb_set_suspend(rdev->mode_info.rfbdev->helper.fbdev, state);
    + if (rdev->mode_info.rfbdev)
    + fb_set_suspend(rdev->mode_info.rfbdev->helper.fbdev, state);
    }

    bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)
    {
    + if (!rdev->mode_info.rfbdev)
    + return false;
    +
    if (robj == gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj))
    return true;
    return false;
    @@ -389,12 +398,14 @@ bool radeon_fbdev_robj_is_fb(struct rade

    void radeon_fb_add_connector(struct radeon_device *rdev, struct drm_connector *connector)
    {
    - drm_fb_helper_add_one_connector(&rdev->mode_info.rfbdev->helper, connector);
    + if (rdev->mode_info.rfbdev)
    + drm_fb_helper_add_one_connector(&rdev->mode_info.rfbdev->helper, connector);
    }

    void radeon_fb_remove_connector(struct radeon_device *rdev, struct drm_connector *connector)
    {
    - drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector);
    + if (rdev->mode_info.rfbdev)
    + drm_fb_helper_remove_one_connector(&rdev->mode_info.rfbdev->helper, connector);
    }

    void radeon_fbdev_restore_mode(struct radeon_device *rdev)

    \
     
     \ /
      Last update: 2016-04-10 22:41    [W:4.057 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site