if (!dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc,
                                   dsc_caps, NULL,
-                                  &dc_sink->sink_dsc_caps.dsc_dec_caps))
+                                  &dc_sink->dsc_caps.dsc_dec_caps))
                return false;
 
        return true;
 
 #if defined(CONFIG_DRM_AMD_DC_DCN)
                        if (!validate_dsc_caps_on_connector(aconnector))
-                               memset(&aconnector->dc_sink->sink_dsc_caps,
-                                      0, sizeof(aconnector->dc_sink->sink_dsc_caps));
+                               memset(&aconnector->dc_sink->dsc_caps,
+                                      0, sizeof(aconnector->dc_sink->dsc_caps));
 #endif
                }
        }
                memset(¶ms[i].timing->dsc_cfg, 0, sizeof(params[i].timing->dsc_cfg));
                if (vars[i].dsc_enabled && dc_dsc_compute_config(
                                        params[i].sink->ctx->dc->res_pool->dscs[0],
-                                       ¶ms[i].sink->sink_dsc_caps.dsc_dec_caps,
+                                       ¶ms[i].sink->dsc_caps.dsc_dec_caps,
                                        params[i].sink->ctx->dc->debug.dsc_min_slice_height_override,
                                        0,
                                        params[i].timing,
        kbps = div_u64((u64)pbn * 994 * 8 * 54, 64);
        dc_dsc_compute_config(
                        param.sink->ctx->dc->res_pool->dscs[0],
-                       ¶m.sink->sink_dsc_caps.dsc_dec_caps,
+                       ¶m.sink->dsc_caps.dsc_dec_caps,
                        param.sink->ctx->dc->debug.dsc_min_slice_height_override,
                        (int) kbps, param.timing, &dsc_config);
 
                params[count].sink = stream->sink;
                aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context;
                params[count].port = aconnector->port;
-               params[count].compression_possible = stream->sink->sink_dsc_caps.dsc_dec_caps.is_dsc_supported;
+               params[count].compression_possible = stream->sink->dsc_caps.dsc_dec_caps.is_dsc_supported;
                dc_dsc_get_policy_for_timing(params[count].timing, &dsc_policy);
                if (!dc_dsc_compute_bandwidth_range(
                                stream->sink->ctx->dc->res_pool->dscs[0],
                                stream->sink->ctx->dc->debug.dsc_min_slice_height_override,
                                dsc_policy.min_target_bpp,
                                dsc_policy.max_target_bpp,
-                               &stream->sink->sink_dsc_caps.dsc_dec_caps,
+                               &stream->sink->dsc_caps.dsc_dec_caps,
                                &stream->timing, ¶ms[count].bw_range))
                        params[count].bw_range.stream_kbps = dc_bandwidth_in_kbps_from_timing(&stream->timing);
 
                if (!aconnector || !aconnector->dc_sink)
                        continue;
 
-               if (!aconnector->dc_sink->sink_dsc_caps.dsc_dec_caps.is_dsc_supported)
+               if (!aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported)
                        continue;
 
                if (computed_streams[i])
 
        link_bw_kbps *= 8;   /* 8 bits per byte*/
        link_bw_kbps *= link_setting->lane_count;
 
-       if (dc_link_is_fec_supported(link)) {
+       if (dc_link_is_fec_supported(link) && !link->dc->debug.disable_fec) {
                /* Account for FEC overhead.
                 * We have to do it based on caps,
                 * and not based on FEC being set ready,
        return (dc_is_dp_signal(link->connector_signal) &&
                        link->link_enc->features.fec_supported &&
                        link->dpcd_caps.fec_cap.bits.FEC_CAPABLE &&
-                       !link->dc->debug.disable_fec &&
                        !IS_FPGA_MAXIMUS_DC(link->ctx->dce_environment));
 }
 
 
        struct dsc_dec_dpcd_caps dsc_dec_caps;
 };
 
+struct dc_sink_fec_caps {
+       bool is_rx_fec_supported;
+       bool is_topology_fec_supported;
+};
+
 /*
  * The sink structure contains EDID and other display device properties
  */
        struct stereo_3d_features features_3d[TIMING_3D_FORMAT_MAX];
        bool converter_disable_audio;
 
-       struct dc_sink_dsc_caps sink_dsc_caps;
+       struct dc_sink_dsc_caps dsc_caps;
+       struct dc_sink_fec_caps fec_caps;
 
        /* private to DC core */
        struct dc_link *link;