}
 
 static int amdgpu_dm_atomic_shaper_lut(const struct drm_color_lut *shaper_lut,
+                                      bool has_rom,
+                                      enum dc_transfer_func_predefined tf,
                                       uint32_t shaper_size,
                                       struct dc_transfer_func *func_shaper)
 {
        int ret = 0;
 
-       if (shaper_size) {
+       if (shaper_size || tf != TRANSFER_FUNCTION_LINEAR) {
                /*
                 * If user shaper LUT is set, we assume a linear color space
                 * (linearized by degamma 1D LUT or not).
                 */
                func_shaper->type = TF_TYPE_DISTRIBUTED_POINTS;
-               func_shaper->tf = TRANSFER_FUNCTION_LINEAR;
+               func_shaper->tf = tf;
+               func_shaper->sdr_ref_white_level = SDR_WHITE_LEVEL_INIT_VALUE;
 
-               ret = __set_output_tf(func_shaper, shaper_lut, shaper_size, false);
+               ret = __set_output_tf(func_shaper, shaper_lut, shaper_size, has_rom);
        } else {
                func_shaper->type = TF_TYPE_BYPASS;
                func_shaper->tf = TRANSFER_FUNCTION_LINEAR;
                                     struct dc_plane_state *dc_plane_state)
 {
        struct dm_plane_state *dm_plane_state = to_dm_plane_state(plane_state);
+       enum amdgpu_transfer_function shaper_tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
        const struct drm_color_lut *shaper_lut;
        uint32_t shaper_size;
        int ret;
 
        shaper_lut = __extract_blob_lut(dm_plane_state->shaper_lut, &shaper_size);
        shaper_size = shaper_lut != NULL ? shaper_size : 0;
+       shaper_tf = dm_plane_state->shaper_tf;
 
-       ret = amdgpu_dm_atomic_shaper_lut(shaper_lut, shaper_size,
+       ret = amdgpu_dm_atomic_shaper_lut(shaper_lut, false,
+                                         amdgpu_tf_to_dc_tf(shaper_tf),
+                                         shaper_size,
                                          dc_plane_state->in_shaper_func);
        if (ret)
                drm_dbg_kms(plane_state->plane->dev,