Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp393557pxj; Fri, 7 May 2021 10:53:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy9bS+t4yhmMF2NtKhfhfNe2lSppbsBL/P4Wxl5KvU9t2wT4OQZ05fI3/RO0v+UMABvhfmP X-Received: by 2002:a17:90a:b105:: with SMTP id z5mr24136352pjq.187.1620410003107; Fri, 07 May 2021 10:53:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620410003; cv=none; d=google.com; s=arc-20160816; b=br1znWTerHRUMTYLhLtt3oCc/NtjshMr4VAPvGYuMPDzyI4eWeF8BJ5vS5X01++7GY t1t1YhHSXggoRiZQBA2xpH9TRRY4wWVZb4z39eos3MM6J73uyBajGTJ/TR8lEgQMp8Qj gvKmNC6+Peg5baErdeHafflNdkfgdJm15Z603a0gPUIvZnSdXvH+a40aRTTSI3Ef/iTo wHDqsyDAlArVEpOFohHg7DBaFpTjvbs3LcJGT1hM2gxGBAlSzsf/sqIpF8pVyBTq7Zam YDiDexeXtcvvpXqNbjxWt31/YDS849+UUBUg0fumMJyqP/hUPh3NQoyiXaiToQFdU9H4 rCRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:ironport-sdr:ironport-sdr; bh=nCtaqysafi38UOCcBm1typ8/gfsPT9AaKR3hZU3iCro=; b=LtnB7Obr34vgtCxcyxfbW19RzUL7dlSG7CPDZmVxpQ+xGAo8d8E0ugLaCUgAlzS7p3 wFPGvoBgQPiYhC4BYM120SD0OcWsK1EGFXi4fZVggkvjHCfVRCAALViuC7OiofXAo8Z1 c3pgKV/OVc2aQJPkY4lUztduUTiNi1WqqG63BXrnBBFCjrjfzr3Vk2/97jat/K2JsUsn Fhddfb57yh4kdYerBl4FPlnH0XldV8zFvQXyEg/DAgvLPA1/wHXsb4v1uDuuK3/TrQAb PROYWl9KUC/k7wPe+r3MJ7EhgoMRDcWC517otvvJ70wHncdFR7l6UZgbyJ48lo9KWLZ0 RU0A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r30si5263317pfl.322.2021.05.07.10.53.10; Fri, 07 May 2021 10:53:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229560AbhEGRxg (ORCPT + 99 others); Fri, 7 May 2021 13:53:36 -0400 Received: from mga07.intel.com ([134.134.136.100]:43008 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229517AbhEGRxe (ORCPT ); Fri, 7 May 2021 13:53:34 -0400 IronPort-SDR: ZNLDI6kjEI3w+gnTVick4Da0WJGZx9rQLFLliGrghzmLIdKXcavP7lM4eBSTOOg+OmgFiPA2Yi 7o3PqD7S1Sxw== X-IronPort-AV: E=McAfee;i="6200,9189,9977"; a="262716897" X-IronPort-AV: E=Sophos;i="5.82,280,1613462400"; d="scan'208";a="262716897" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 May 2021 10:52:33 -0700 IronPort-SDR: 696S2rtDPZTG9qK9gJLdWPuzop+g8TsZDxU9InemWTv1PlRXZAtc2GStXnwmrkrrp1oSM8H38h HAjy1fMJRJpQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,281,1613462400"; d="scan'208";a="431465321" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.171]) by fmsmga008.fm.intel.com with SMTP; 07 May 2021 10:52:30 -0700 Received: by stinkbox (sSMTP sendmail emulation); Fri, 07 May 2021 20:52:30 +0300 Date: Fri, 7 May 2021 20:52:30 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Werner Sembach Cc: airlied@linux.ie, daniel@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v6 2/3] drm/i915/display: Restructure output format computation for better expandability Message-ID: References: <20210506172325.1995964-1-wse@tuxedocomputers.com> <20210507084903.28877-1-wse@tuxedocomputers.com> <20210507084903.28877-3-wse@tuxedocomputers.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210507084903.28877-3-wse@tuxedocomputers.com> X-Patchwork-Hint: comment Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, May 07, 2021 at 10:49:02AM +0200, Werner Sembach wrote: > Couples the decission between RGB and YCbCr420 mode and the check if the > port clock can archive the required frequency. Other checks and > configuration steps that where previously done in between can also be done > before or after. > > This allows for are cleaner implementation of retrying different color > encodings. > > A slight change in behaviour occurs with this patch: If YCbCr420 is not > allowed but display is YCbCr420 only it no longer fails, but just prints > an error and tries to fallback on RGB. > > Signed-off-by: Werner Sembach > --- > drivers/gpu/drm/i915/display/intel_hdmi.c | 65 ++++++++++++----------- > 1 file changed, 34 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c > index 576d3d910d06..9f3da72dabee 100644 > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c > @@ -1999,29 +1999,6 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state, > INTEL_OUTPUT_FORMAT_YCBCR420); > } > > -static int > -intel_hdmi_ycbcr420_config(struct intel_crtc_state *crtc_state, > - const struct drm_connector_state *conn_state) > -{ > - struct drm_connector *connector = conn_state->connector; > - struct drm_i915_private *i915 = to_i915(connector->dev); > - const struct drm_display_mode *adjusted_mode = > - &crtc_state->hw.adjusted_mode; > - > - if (!drm_mode_is_420_only(&connector->display_info, adjusted_mode)) > - return 0; > - > - if (!connector->ycbcr_420_allowed) { > - drm_err(&i915->drm, > - "Platform doesn't support YCBCR420 output\n"); > - return -EINVAL; > - } > - > - crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420; > - > - return intel_pch_panel_fitting(crtc_state, conn_state); > -} > - > static int intel_hdmi_compute_bpc(struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > int clock) > @@ -2128,6 +2105,30 @@ static bool intel_hdmi_has_audio(struct intel_encoder *encoder, > return intel_conn_state->force_audio == HDMI_AUDIO_ON; > } > > +static int intel_hdmi_compute_output_format(struct intel_encoder *encoder, > + struct intel_crtc_state *crtc_state, > + const struct drm_connector_state *conn_state) > +{ > + struct drm_connector *connector = conn_state->connector; > + struct drm_i915_private *i915 = to_i915(connector->dev); > + const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; > + int ret; > + bool ycbcr_420_only; > + > + ycbcr_420_only = drm_mode_is_420_only(&connector->display_info, adjusted_mode); > + if (connector->ycbcr_420_allowed && ycbcr_420_only) { > + crtc_state->output_format = INTEL_OUTPUT_FORMAT_YCBCR420; > + } else { > + if (!connector->ycbcr_420_allowed && ycbcr_420_only) > + drm_err(&i915->drm, "Display only supports YCbCr420 output, but connector does not allow it. Fallback to RGB, but this will likely fail.\n"); We can't let the user spam dmesg with errors freely. So this needs to be a drm_dbg_kms(). Also a bit long, so going to annoyingly wrap always. Could maybe shorten a bit to something like: "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not possible. Falling back to RGB." With that sorted, and the intel_hdmi_port_clock() stuff restored, I believe this series is good to go. I think you confused our CI by replying to the old patch with a whole new series. It can generally deal with a whole new series as a new thread or replies to individual patches with updated versions of exactly that patch, but not full series as a reply to a patch. So I suggest just posting the final versions as a new series. Thanks. > + crtc_state->output_format = INTEL_OUTPUT_FORMAT_RGB; > + } > + > + ret = intel_hdmi_compute_clock(encoder, crtc_state); > + > + return ret; > +} > + > int intel_hdmi_compute_config(struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) > @@ -2152,23 +2153,25 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder, > if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) > pipe_config->pixel_multiplier = 2; > > - ret = intel_hdmi_ycbcr420_config(pipe_config, conn_state); > - if (ret) > - return ret; > - > - pipe_config->limited_color_range = > - intel_hdmi_limited_color_range(pipe_config, conn_state); > - > if (HAS_PCH_SPLIT(dev_priv) && !HAS_DDI(dev_priv)) > pipe_config->has_pch_encoder = true; > > pipe_config->has_audio = > intel_hdmi_has_audio(encoder, pipe_config, conn_state); > > - ret = intel_hdmi_compute_clock(encoder, pipe_config); > + ret = intel_hdmi_compute_output_format(encoder, pipe_config, conn_state); > if (ret) > return ret; > > + if (pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) { > + ret = intel_pch_panel_fitting(pipe_config, conn_state); > + if (ret) > + return ret; > + } > + > + pipe_config->limited_color_range = > + intel_hdmi_limited_color_range(pipe_config, conn_state); > + > if (conn_state->picture_aspect_ratio) > adjusted_mode->picture_aspect_ratio = > conn_state->picture_aspect_ratio; > -- > 2.25.1 -- Ville Syrj?l? Intel