diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0792-drm-amd-display-Support-amdgpu-max-bpc-connector-pro.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0792-drm-amd-display-Support-amdgpu-max-bpc-connector-pro.patch | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0792-drm-amd-display-Support-amdgpu-max-bpc-connector-pro.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0792-drm-amd-display-Support-amdgpu-max-bpc-connector-pro.patch new file mode 100644 index 00000000..242c2608 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0792-drm-amd-display-Support-amdgpu-max-bpc-connector-pro.patch @@ -0,0 +1,108 @@ +From 4f7916064437c387f2aba637bdbc6b0737997f1b Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Thu, 15 Nov 2018 17:21:34 -0500 +Subject: [PATCH 0792/2940] drm/amd/display: Support amdgpu "max bpc" connector + property (v2) + +[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> +--- + .../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 8cfb90110dd6..b47c9f179846 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -2437,8 +2437,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: + /* +@@ -3028,6 +3035,9 @@ int amdgpu_dm_connector_atomic_set_property(struct drm_connector *connector, + } else if (property == adev->mode_info.freesync_capable_property) { + dm_new_state->freesync_capable = val; + ret = 0; ++ } else if (property == adev->mode_info.max_bpc_property) { ++ dm_new_state->max_bpc = val; ++ ret = 0; + } + + return ret; +@@ -3076,6 +3086,9 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector, + } else if (property == adev->mode_info.freesync_capable_property) { + *val = dm_state->freesync_capable; + ret = 0; ++ } else if (property == adev->mode_info.max_bpc_property) { ++ *val = dm_state->max_bpc; ++ ret = 0; + } + return ret; + } +@@ -3886,6 +3899,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); + + if (connector_type == DRM_MODE_CONNECTOR_HDMIA || + connector_type == DRM_MODE_CONNECTOR_DisplayPort) { +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 0c80d6fd1f17..febccc48ee5f 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +@@ -249,6 +249,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; + bool freesync_enable; + bool freesync_capable; +-- +2.17.1 + |