struct dc_surface_dcc_cap *output)
{
struct dc *dc = hubbub->ctx->dc;
+ const unsigned int max_dcc_plane_width = dc->caps.dcc_plane_width_limit;
/* DCN4_Programming_Guide_DCHUB.docx, Section 5.11.2.2 */
enum dcc_control dcc_control;
unsigned int plane0_bpe, plane1_bpe;
if (dc->debug.disable_dcc == DCC_DISABLE)
return false;
+ /* Conservatively disable DCC for cases where ODM4:1 may be required. */
+ if (max_dcc_plane_width != 0 &&
+ (input->surface_size.width > max_dcc_plane_width || input->plane1_size.width > max_dcc_plane_width))
+ return false;
+
switch (input->format) {
default:
is_dual_plane = false;
dc->caps.extended_aux_timeout_support = true;
dc->caps.dmcub_support = true;
+ if (ASICREV_IS_GC_12_0_1_A0(dc->ctx->asic_id.hw_internal_rev))
+ dc->caps.dcc_plane_width_limit = 7680;
+
/* Color pipeline capabilities */
dc->caps.color.dpp.dcn_arch = 1;
dc->caps.color.dpp.input_lut_shared = 0;