lkml.org 
[lkml]   [2018]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 028/118] drm/amd/display: Support amdgpu "max bpc" connector property (v2)
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

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

    [ Upstream commit 07e3a1cfb0568b6d8d7862077029af96af6690ea ]

    [Why]
    Many panels support more than 8bpc but some modes are unavailable while
    running at greater than 8bpc due to DP/HDMI bandwidth constraints.

    Support for more than 8bpc was added recently in the driver but it
    defaults to the maximum supported bpc - locking out these modes.

    This should be a user configurable option such that the user can select
    what bpc configuration they would like.

    [How]
    This patch adds support for getting and setting the amdgpu driver
    specific "max bpc" property on the connector.

    It also adds support for limiting the output bpc based on the property
    value. The default limitation is the lowest value in the range, 8bpc.
    This was the old value before the range was uncapped.

    This patch should be updated/replaced later once common drm support
    for max bpc lands.

    Bugzilla: https://bugs.freedesktop.org/108542
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201585
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=200645
    Fixes: e03fd3f300f6 ("drm/amd/display: Do not limit color depth to 8bpc")

    v2: rebase on upstream (Alex)

    Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 ++++++++++++++++
    .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 1 +
    2 files changed, 17 insertions(+)

    diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    index ef5c6af4d964..299def84e69c 100644
    --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    @@ -2213,8 +2213,15 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode,
    static enum dc_color_depth
    convert_color_depth_from_display_info(const struct drm_connector *connector)
    {
    + struct dm_connector_state *dm_conn_state =
    + to_dm_connector_state(connector->state);
    uint32_t bpc = connector->display_info.bpc;

    + /* TODO: Remove this when there's support for max_bpc in drm */
    + if (dm_conn_state && bpc > dm_conn_state->max_bpc)
    + /* Round down to nearest even number. */
    + bpc = dm_conn_state->max_bpc - (dm_conn_state->max_bpc & 1);
    +
    switch (bpc) {
    case 0:
    /* Temporary Work around, DRM don't parse color depth for
    @@ -2796,6 +2803,9 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector,
    } else if (property == adev->mode_info.underscan_property) {
    dm_new_state->underscan_enable = val;
    ret = 0;
    + } else if (property == adev->mode_info.max_bpc_property) {
    + dm_new_state->max_bpc = val;
    + ret = 0;
    }

    return ret;
    @@ -2838,6 +2848,9 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
    } else if (property == adev->mode_info.underscan_property) {
    *val = dm_state->underscan_enable;
    ret = 0;
    + } else if (property == adev->mode_info.max_bpc_property) {
    + *val = dm_state->max_bpc;
    + ret = 0;
    }
    return ret;
    }
    @@ -3658,6 +3671,9 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
    drm_object_attach_property(&aconnector->base.base,
    adev->mode_info.underscan_vborder_property,
    0);
    + drm_object_attach_property(&aconnector->base.base,
    + adev->mode_info.max_bpc_property,
    + 0);

    }

    diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
    index aba2c5c1d2f8..74aedcffc4bb 100644
    --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
    +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
    @@ -213,6 +213,7 @@ struct dm_connector_state {
    enum amdgpu_rmx_type scaling;
    uint8_t underscan_vborder;
    uint8_t underscan_hborder;
    + uint8_t max_bpc;
    bool underscan_enable;
    struct mod_freesync_user_enable user_enable;
    bool freesync_capable;
    --
    2.19.1


    \
     
     \ /
      Last update: 2018-12-11 17:06    [W:3.246 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site