default:
                if (dc_crtc_timing->pixel_encoding == PIXEL_ENCODING_RGB) {
                        color_space = COLOR_SPACE_SRGB;
+                       if (connector_state->hdmi.broadcast_rgb == DRM_HDMI_BROADCAST_RGB_LIMITED)
+                               color_space = COLOR_SPACE_SRGB_LIMITED;
                /*
                 * 27030khz is the separation point between HDTV and SDTV
                 * according to HDMI spec, we use YCbCr709 and YCbCr601
                                dm->ddev->mode_config.scaling_mode_property,
                                DRM_MODE_SCALE_NONE);
 
+       if (connector_type == DRM_MODE_CONNECTOR_HDMIA
+               || (connector_type == DRM_MODE_CONNECTOR_DisplayPort && !aconnector->mst_root))
+               drm_connector_attach_broadcast_rgb_property(&aconnector->base);
+
        drm_object_attach_property(&aconnector->base.base,
                                adev->mode_info.underscan_property,
                                UNDERSCAN_OFF);
                struct dc_stream_update stream_update;
                struct dc_info_packet hdr_packet;
                struct dc_stream_status *status = NULL;
-               bool abm_changed, hdr_changed, scaling_changed;
+               bool abm_changed, hdr_changed, scaling_changed, output_color_space_changed = false;
 
                memset(&stream_update, 0, sizeof(stream_update));
 
                scaling_changed = is_scaling_state_different(dm_new_con_state,
                                                             dm_old_con_state);
 
+               if ((new_con_state->hdmi.broadcast_rgb != old_con_state->hdmi.broadcast_rgb) &&
+                       (dm_old_crtc_state->stream->output_color_space !=
+                               get_output_color_space(&dm_new_crtc_state->stream->timing, new_con_state)))
+                       output_color_space_changed = true;
+
                abm_changed = dm_new_crtc_state->abm_level !=
                              dm_old_crtc_state->abm_level;
 
                hdr_changed =
                        !drm_connector_atomic_hdr_metadata_equal(old_con_state, new_con_state);
 
-               if (!scaling_changed && !abm_changed && !hdr_changed)
+               if (!scaling_changed && !abm_changed && !hdr_changed && !output_color_space_changed)
                        continue;
 
                stream_update.stream = dm_new_crtc_state->stream;
                        stream_update.dst = dm_new_crtc_state->stream->dst;
                }
 
+               if (output_color_space_changed) {
+                       dm_new_crtc_state->stream->output_color_space
+                               = get_output_color_space(&dm_new_crtc_state->stream->timing, new_con_state);
+
+                       stream_update.output_color_space = &dm_new_crtc_state->stream->output_color_space;
+               }
+
                if (abm_changed) {
                        dm_new_crtc_state->stream->abm_level = dm_new_crtc_state->abm_level;
 
 
                if (stream_update->sharpening_required)
                        su_flags->bits.sharpening_required = 1;
 
+               if (stream_update->output_color_space)
+                       su_flags->bits.out_csc = 1;
+
                if (su_flags->raw != 0)
                        overall_type = UPDATE_TYPE_FULL;
 
-               if (stream_update->output_csc_transform || stream_update->output_color_space)
+               if (stream_update->output_csc_transform)
                        su_flags->bits.out_csc = 1;
 
                /* Output transfer function changes do not require bandwidth recalculation,