From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 240236127; Fri, 15 Mar 2024 08:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710489927; cv=none; b=oW4UmH07S5G/+jpn7YkBfCg/Ai57uj0cDYdk3Du6qELww2T5yXbsX0pYsUsSEWgr68nzRnNVyJxvWMSRxZ4+opDRYMfe66xuYoripcFfzMNdrZ6O9W2T0HveIwwhYV/5hXmtZcu4dcitW+C6SdNp128Mu1xg/P3TmvFA8RbTN3s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710489927; c=relaxed/simple; bh=TrRBinZzGLucal8rlgqc2RLz4DMh0sLsKis+qasbHo0=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=XsdacQefnen+TbAftUdGb6/ywjF3QmCD/TTtPbqY6EMPgW/h2Ut4LNkxa/mR7V7MVg1RCwcr8X+Y9tcdoGxi59zGudHPgBaYCe6Fz4JPlYwqZxjbh14mfmWIq3ooMbTGUDEjP+/RtzBFWX/u1dGMzOR7SnRblv7T1oZUUfSrwq4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=KbJfA7lJ; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="KbJfA7lJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710489925; x=1742025925; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=TrRBinZzGLucal8rlgqc2RLz4DMh0sLsKis+qasbHo0=; b=KbJfA7lJfxnmBdoFRXy9PP74cArhbvQewJpJ+HQgzO+Y6tUdBanGweCc aBH/sI8DRVWgGN0jYiz9BQ7OtDwx1eEC5rHY6jkyadVif5ddyGEfoo7w2 CnE9TybK1nEX6iNIu1PbezZnBi2Yyvr7GgczTZ03c0Gr7rs1oiA4HPU9D OQ+qo4d6H0Y0hAVoN0uMWJkf4jmkRSpwcGjANAzLw5G2ETw0BzLploZyp qp9jPcTuyJtupZtV7mSa5FzNtDeSWTEslXHp8+OdS4FX4owGm5KExWlU7 uJLWUVumm4SWZN4pwXd7YTk7xLL+rhdm7jSdonDbNrjCVv0FfZvfZ1Kuc g==; X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="5287405" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="5287405" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Mar 2024 01:05:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="827780531" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="827780531" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 15 Mar 2024 01:05:17 -0700 Received: by stinkbox (sSMTP sendmail emulation); Fri, 15 Mar 2024 10:05:16 +0200 Date: Fri, 15 Mar 2024 10:05:16 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Maxime Ripard Cc: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Jonathan Corbet , Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Hans Verkuil , Sebastian Wick , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: Re: [PATCH v9 14/27] drm/connector: hdmi: Compute bpc and format automatically Message-ID: References: <20240311-kms-hdmi-connector-state-v9-0-d45890323344@kernel.org> <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> X-Patchwork-Hint: comment On Mon, Mar 11, 2024 at 03:49:42PM +0100, Maxime Ripard wrote: > Now that we have all the infrastructure needed, we can add some code > that will, for a given connector state and mode, compute the best output > format and bpc. > > The algorithm is equivalent to the one already found in i915 and vc4. > > Signed-off-by: Maxime Ripard > --- > drivers/gpu/drm/drm_atomic_state_helper.c | 184 ++++++++++++++++++++- > .../gpu/drm/tests/drm_atomic_state_helper_test.c | 25 ++- > 2 files changed, 197 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c > index 448b4a73d1c8..9f517599f117 100644 > --- a/drivers/gpu/drm/drm_atomic_state_helper.c > +++ b/drivers/gpu/drm/drm_atomic_state_helper.c > @@ -29,10 +29,11 @@ > #include > #include > #include > #include > #include > +#include > #include > #include > #include > #include > #include > @@ -660,10 +661,100 @@ connector_state_get_mode(const struct drm_connector_state *conn_state) > return NULL; > > return &crtc_state->mode; > } > > +static bool > +sink_supports_format_bpc(const struct drm_connector *connector, > + const struct drm_display_info *info, > + const struct drm_display_mode *mode, > + unsigned int format, unsigned int bpc) > +{ > + struct drm_device *dev = connector->dev; > + u8 vic = drm_match_cea_mode(mode); > + > + if (vic == 1 && bpc != 8) { > + drm_dbg(dev, "VIC1 requires a bpc of 8, got %u\n", bpc); Use of drm_dbg() for kms stuff is surprising. > + return false; > + } I don't think we have this in i915. My original impression was that you can use higher color depth if you can determine the sink capabilities, but all sinks are required to accept 640x480@8bpc as a fallback. but CTA-861-H says: "5.4 Color Coding & Quantization Component Depth: The coding shall be N-bit, where N = 8, 10, 12, or 16 bits/component — except in the case of the default 640x480 Video Timing 1, where the value of N shall be 8." So that does seem to imply that you're supposed to use exactly 8bpc. Though the word "default" in there is confusing. Are they specifically using that to indicate that this is about the fallback behaviour, or is it just indicating that it is a "default mode that always has to be supported". Dunno. I guess no real harm in forcing 8bpc for 640x480 since no one is likely to use that for any high fidelity stuff. > + > + if (!info->is_hdmi && > + (format != HDMI_COLORSPACE_RGB || bpc != 8)) { > + drm_dbg(dev, "DVI Monitors require an RGB output at 8 bpc\n"); > + return false; > + } > + > + if (!(connector->hdmi.supported_formats & BIT(format))) { > + drm_dbg(dev, "%s format unsupported by the connector.\n", > + drm_hdmi_connector_get_output_format_name(format)); > + return false; > + } > + > + switch (format) { > + case HDMI_COLORSPACE_RGB: > + drm_dbg(dev, "RGB Format, checking the constraints.\n"); > + > + if (!(info->color_formats & DRM_COLOR_FORMAT_RGB444)) > + return false; > + > + if (bpc == 10 && !(info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_30)) { > + drm_dbg(dev, "10 BPC but sink doesn't support Deep Color 30.\n"); > + return false; > + } > + > + if (bpc == 12 && !(info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_36)) { > + drm_dbg(dev, "12 BPC but sink doesn't support Deep Color 36.\n"); > + return false; > + } > + > + drm_dbg(dev, "RGB format supported in that configuration.\n"); > + > + return true; > + > + case HDMI_COLORSPACE_YUV422: > + drm_dbg(dev, "YUV422 format, checking the constraints.\n"); > + > + if (!(info->color_formats & DRM_COLOR_FORMAT_YCBCR422)) { > + drm_dbg(dev, "Sink doesn't support YUV422.\n"); > + return false; > + } > + > + if (bpc != 12) { > + drm_dbg(dev, "YUV422 only supports 12 bpc.\n"); > + return false; > + } > + > + drm_dbg(dev, "YUV422 format supported in that configuration.\n"); > + > + return true; > + > + case HDMI_COLORSPACE_YUV444: > + drm_dbg(dev, "YUV444 format, checking the constraints.\n"); > + > + if (!(info->color_formats & DRM_COLOR_FORMAT_YCBCR444)) { > + drm_dbg(dev, "Sink doesn't support YUV444.\n"); > + return false; > + } > + > + if (bpc == 10 && !(info->edid_hdmi_ycbcr444_dc_modes & DRM_EDID_HDMI_DC_30)) { > + drm_dbg(dev, "10 BPC but sink doesn't support Deep Color 30.\n"); > + return false; > + } > + > + if (bpc == 12 && !(info->edid_hdmi_ycbcr444_dc_modes & DRM_EDID_HDMI_DC_36)) { > + drm_dbg(dev, "12 BPC but sink doesn't support Deep Color 36.\n"); > + return false; > + } > + > + drm_dbg(dev, "YUV444 format supported in that configuration.\n"); > + > + return true; > + } > + > + return false; > +} > + > static enum drm_mode_status > hdmi_clock_valid(const struct drm_connector *connector, > const struct drm_display_mode *mode, > unsigned long long clock) > { > @@ -704,10 +795,99 @@ hdmi_compute_clock(const struct drm_connector *connector, > state->hdmi.tmds_char_rate = clock; > > return 0; > } > > +static bool > +hdmi_try_format_bpc(const struct drm_connector *connector, > + struct drm_connector_state *state, "state" is IMO not a great naming choice. It forces you to go and look up the definition whenever you're not sure what 'state' actually is when reading the code. Als at some point you may want to plumb different kinds of states into these, or just switch to passing in the whole drm_atomic_state. So I recommend using more specific names for the different kinds of states (eg. "crtc_state"/"conn_state"/etc.) everywhere. > + const struct drm_display_mode *mode, > + unsigned int bpc, enum hdmi_colorspace fmt) > +{ > + const struct drm_display_info *info = &connector->display_info; > + struct drm_device *dev = connector->dev; > + int ret; > + > + drm_dbg(dev, "Trying %s output format\n", > + drm_hdmi_connector_get_output_format_name(fmt)); > + > + if (!sink_supports_format_bpc(connector, info, mode, fmt, bpc)) { > + drm_dbg(dev, "%s output format not supported with %u bpc\n", > + drm_hdmi_connector_get_output_format_name(fmt), bpc); > + return false; > + } > + > + ret = hdmi_compute_clock(connector, state, mode, bpc, fmt); > + if (ret) { > + drm_dbg(dev, "Couldn't compute clock for %s output format and %u bpc\n", > + drm_hdmi_connector_get_output_format_name(fmt), bpc); > + return false; > + } > + > + drm_dbg(dev, "%s output format supported with %u (TMDS char rate: %llu Hz)\n", > + drm_hdmi_connector_get_output_format_name(fmt), bpc, state->hdmi.tmds_char_rate); > + > + return true; > +} > + > +static int > +hdmi_compute_format(const struct drm_connector *connector, > + struct drm_connector_state *state, > + const struct drm_display_mode *mode, > + unsigned int bpc) > +{ > + struct drm_device *dev = connector->dev; > + > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_RGB)) { > + state->hdmi.output_format = HDMI_COLORSPACE_RGB; > + return 0; > + } > + > + if (hdmi_try_format_bpc(connector, state, mode, bpc, HDMI_COLORSPACE_YUV422)) { > + state->hdmi.output_format = HDMI_COLORSPACE_YUV422; > + return 0; > + } Looks like you're preferring YCbCr 4:2:2 over RGB 8bpc. Not sure if that's a good tradeoff to make. In i915 we don't currently expose 4:2:2 at all because it doesn't help in getting a working display, and we have no uapi for the user to force it if they really want 4:2:2 over RGB. > + > + drm_dbg(dev, "Failed. No Format Supported for that bpc count.\n"); > + > + return -EINVAL; > +} > + > +static int > +hdmi_compute_config(const struct drm_connector *connector, > + struct drm_connector_state *state, > + const struct drm_display_mode *mode) > +{ > + struct drm_device *dev = connector->dev; > + unsigned int max_bpc = clamp_t(unsigned int, > + state->max_bpc, > + 8, connector->max_bpc); > + unsigned int bpc; > + int ret; > + > + for (bpc = max_bpc; bpc >= 8; bpc -= 2) { > + drm_dbg(dev, "Trying with a %d bpc output\n", bpc); > + > + ret = hdmi_compute_format(connector, state, mode, bpc); Hmm. Actually I'm not sure your 4:2:2 stuff even works since you check for bpc==12 in there and only call this based on the max_bpc. I'm not convinced max_bpc would actually be 12 for a sink that supports YCbCr 4:2:2 but not 12bpc RGB. > + if (ret) > + continue; > + > + state->hdmi.output_bpc = bpc; > + > + drm_dbg(dev, > + "Mode %ux%u @ %uHz: Found configuration: bpc: %u, fmt: %s, clock: %llu\n", > + mode->hdisplay, mode->vdisplay, drm_mode_vrefresh(mode), > + state->hdmi.output_bpc, > + drm_hdmi_connector_get_output_format_name(state->hdmi.output_format), > + state->hdmi.tmds_char_rate); > + > + return 0; > + } > + > + return -EINVAL; > +} > + > /** > * drm_atomic_helper_connector_hdmi_check() - Helper to check HDMI connector atomic state > * @connector: DRM Connector > * @state: the DRM State object > * > @@ -727,13 +907,11 @@ int drm_atomic_helper_connector_hdmi_check(struct drm_connector *connector, > drm_atomic_get_new_connector_state(state, connector); > const struct drm_display_mode *mode = > connector_state_get_mode(new_state); > int ret; > > - ret = hdmi_compute_clock(connector, new_state, mode, > - new_state->hdmi.output_bpc, > - new_state->hdmi.output_format); > + ret = hdmi_compute_config(connector, new_state, mode); > if (ret) > return ret; > > if (old_state->hdmi.output_bpc != new_state->hdmi.output_bpc || > old_state->hdmi.output_format != new_state->hdmi.output_format) { > diff --git a/drivers/gpu/drm/tests/drm_atomic_state_helper_test.c b/drivers/gpu/drm/tests/drm_atomic_state_helper_test.c > index 5a8750153510..f010fde0eb69 100644 > --- a/drivers/gpu/drm/tests/drm_atomic_state_helper_test.c > +++ b/drivers/gpu/drm/tests/drm_atomic_state_helper_test.c > @@ -68,13 +68,10 @@ static int light_up_connector(struct kunit *test, > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); > > conn_state = drm_atomic_get_connector_state(state, connector); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); > > - conn_state->hdmi.output_bpc = connector->max_bpc; > - conn_state->hdmi.output_format = HDMI_COLORSPACE_RGB; > - > ret = drm_atomic_set_crtc_for_connector(conn_state, crtc); > KUNIT_EXPECT_EQ(test, ret, 0); > > crtc_state = drm_atomic_get_crtc_state(state, crtc); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state); > @@ -249,14 +246,19 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test) > priv = drm_atomic_helper_connector_hdmi_init(test, > BIT(HDMI_COLORSPACE_RGB), > 10); > KUNIT_ASSERT_NOT_NULL(test, priv); > > + conn = &priv->connector; > + ret = set_connector_edid(test, conn, > + test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz, > + ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz)); > + KUNIT_ASSERT_EQ(test, ret, 0); > + > ctx = drm_kunit_helper_acquire_ctx_alloc(test); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); > > - conn = &priv->connector; > preferred = find_preferred_mode(conn); > KUNIT_ASSERT_NOT_NULL(test, preferred); > > drm = &priv->drm; > crtc = priv->crtc; > @@ -270,15 +272,15 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test) > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_conn_state); > > old_conn_state = drm_atomic_get_old_connector_state(state, conn); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, old_conn_state); > > - new_conn_state->hdmi.output_bpc = 8; > + new_conn_state->max_requested_bpc = 8; > > KUNIT_ASSERT_NE(test, > - old_conn_state->hdmi.output_bpc, > - new_conn_state->hdmi.output_bpc); > + old_conn_state->max_requested_bpc, > + new_conn_state->max_requested_bpc); > > ret = drm_atomic_check_only(state); > KUNIT_ASSERT_EQ(test, ret, 0); > > old_conn_state = drm_atomic_get_old_connector_state(state, conn); > @@ -318,14 +320,19 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test) > priv = drm_atomic_helper_connector_hdmi_init(test, > BIT(HDMI_COLORSPACE_RGB), > 10); > KUNIT_ASSERT_NOT_NULL(test, priv); > > + conn = &priv->connector; > + ret = set_connector_edid(test, conn, > + test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz, > + ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz)); > + KUNIT_ASSERT_EQ(test, ret, 0); > + > ctx = drm_kunit_helper_acquire_ctx_alloc(test); > KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); > > - conn = &priv->connector; > preferred = find_preferred_mode(conn); > KUNIT_ASSERT_NOT_NULL(test, preferred); > > drm = &priv->drm; > crtc = priv->crtc; > @@ -668,11 +675,11 @@ static void drm_test_check_format_value(struct kunit *test) > 8); > KUNIT_ASSERT_NOT_NULL(test, priv); > > conn = &priv->connector; > conn_state = conn->state; > - KUNIT_EXPECT_EQ(test, conn_state->hdmi.output_format, HDMI_COLORSPACE_RGB); > + KUNIT_EXPECT_EQ(test, conn_state->hdmi.output_format, 0); > } > > /* > * Test that the value of the output format property out of reset is set > * to 0, and will be computed at atomic_check time. > > -- > 2.43.2 -- Ville Syrjälä Intel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 826C5C54E66 for ; Fri, 15 Mar 2024 08:05:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=r9TFvW9B9PckS+WcKPDVRfsBbYN1EQwlTrjUrmbid9M=; b=bXYxKwZG6y0C14 2yQmIcksCzttG5/QHliciIP9NkC6oLl14OnC+bqSuw1iBfQmmQMrKkUEVFf++xnf7YFlZzhWBfKmP NPfebaNd6H+nCx5pu6cAhHThl34TYlihBZ3q7V9hjr6tSwQGTAjP3sN9lFaoMZb/DUIeAXrFPaHfe z6OMQ5r597rD243r7zjgm7nFkNVzwbjCBJHtuqMEbxj23XwC8o6hY1m84v06cLi9BXJ4qArbt7gZf jEEj4uoGRrkn+PKg4YxWIyRkS62us9D3O0zL29wQ0gGiwj8hVucsgNXEAGT+heUm4rwTgtYk/nOuT fF3OHu7VqdosIF80Xw4w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rl2ZE-0000000H4QN-2BuE; Fri, 15 Mar 2024 08:05:28 +0000 Received: from mgamail.intel.com ([198.175.65.21]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rl2ZA-0000000H4PX-3lb6; Fri, 15 Mar 2024 08:05:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710489926; x=1742025926; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=TrRBinZzGLucal8rlgqc2RLz4DMh0sLsKis+qasbHo0=; b=CNiN5rpQQHJjXVjm/e6jiR5+3AknwrfR5SIs+AZ1ZeaWTVfK9c9bwsc4 d4z3+gauLdrrlyY3k80/C1HsNG4n4tyZzEepiNZCGDZWKQQ0K/1eKSZ6P PjDhAWNlgSA9LAjKNUimn2vBH1XmszKqEseQf33pDRkzNJDv16NtHtiAi DA+kt98TdoWan8VBwy+xDMSaV2F2OGfFcUI46GGEsG1rPJc0Wrja9fjWM kcn4rMAOgwViokQKFz+CLW/CdNUWfHUFVTf9aw9p2IFzmSROO8q013ngE wNPOeOQ2dtKw5U/0jRjZ/pbXfm9m5Io9lBo4jMCVPb9UDXHQ0tnkI6qU6 A==; X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="5287416" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="5287416" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Mar 2024 01:05:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="827780531" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="827780531" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 15 Mar 2024 01:05:17 -0700 Received: by stinkbox (sSMTP sendmail emulation); Fri, 15 Mar 2024 10:05:16 +0200 Date: Fri, 15 Mar 2024 10:05:16 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Maxime Ripard Cc: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Jonathan Corbet , Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Hans Verkuil , Sebastian Wick , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: Re: [PATCH v9 14/27] drm/connector: hdmi: Compute bpc and format automatically Message-ID: References: <20240311-kms-hdmi-connector-state-v9-0-d45890323344@kernel.org> <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> X-Patchwork-Hint: comment X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240315_010525_118071_E2578804 X-CRM114-Status: GOOD ( 37.54 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gTW9uLCBNYXIgMTEsIDIwMjQgYXQgMDM6NDk6NDJQTSArMDEwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkLCB3 ZSBjYW4gYWRkIHNvbWUgY29kZQo+IHRoYXQgd2lsbCwgZm9yIGEgZ2l2ZW4gY29ubmVjdG9yIHN0 YXRlIGFuZCBtb2RlLCBjb21wdXRlIHRoZSBiZXN0IG91dHB1dAo+IGZvcm1hdCBhbmQgYnBjLgo+ IAo+IFRoZSBhbGdvcml0aG0gaXMgZXF1aXZhbGVudCB0byB0aGUgb25lIGFscmVhZHkgZm91bmQg aW4gaTkxNSBhbmQgdmM0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1yaXBh cmRAa2VybmVsLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVf aGVscGVyLmMgICAgICAgICAgfCAxODQgKysrKysrKysrKysrKysrKysrKystCj4gIC4uLi9ncHUv ZHJtL3Rlc3RzL2RybV9hdG9taWNfc3RhdGVfaGVscGVyX3Rlc3QuYyAgIHwgIDI1ICsrLQo+ICAy IGZpbGVzIGNoYW5nZWQsIDE5NyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwo+IGluZGV4IDQ0OGI0YTcz ZDFjOC4uOWY1MTc1OTlmMTE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3Rh dGVfaGVscGVyLmMKPiBAQCAtMjksMTAgKzI5LDExIEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX2Js ZW5kLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV9jb25uZWN0b3IuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICAjaW5jbHVkZSA8 ZHJtL2RybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9mcmFtZWJ1ZmZlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZS5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV92Ymxhbmsu aD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+Cj4gQEAgLTY2MCwxMCArNjYxLDEw MCBAQCBjb25uZWN0b3Jfc3RhdGVfZ2V0X21vZGUoY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJcmV0dXJuICZjcnRj X3N0YXRlLT5tb2RlOwo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbAo+ICtzaW5rX3N1cHBvcnRzX2Zv cm1hdF9icGMoY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLAo+ICsJCQkgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCSB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25l ZCBpbnQgYnBjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5k ZXY7Cj4gKwl1OCB2aWMgPSBkcm1fbWF0Y2hfY2VhX21vZGUobW9kZSk7Cj4gKwo+ICsJaWYgKHZp YyA9PSAxICYmIGJwYyAhPSA4KSB7Cj4gKwkJZHJtX2RiZyhkZXYsICJWSUMxIHJlcXVpcmVzIGEg YnBjIG9mIDgsIGdvdCAldVxuIiwgYnBjKTsKClVzZSBvZiBkcm1fZGJnKCkgZm9yIGttcyBzdHVm ZiBpcyBzdXJwcmlzaW5nLgoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9CgpJIGRvbid0IHRoaW5r IHdlIGhhdmUgdGhpcyBpbiBpOTE1LiBNeSBvcmlnaW5hbCBpbXByZXNzaW9uIHdhcyB0aGF0IHlv dQpjYW4gdXNlIGhpZ2hlciBjb2xvciBkZXB0aCBpZiB5b3UgY2FuIGRldGVybWluZSB0aGUgc2lu ayBjYXBhYmlsaXRpZXMsCmJ1dCBhbGwgc2lua3MgYXJlIHJlcXVpcmVkIHRvIGFjY2VwdCA2NDB4 NDgwQDhicGMgYXMgYSBmYWxsYmFjay4KCmJ1dCBDVEEtODYxLUggc2F5czoKIjUuNCBDb2xvciBD b2RpbmcgJiBRdWFudGl6YXRpb24KIENvbXBvbmVudCBEZXB0aDogVGhlIGNvZGluZyBzaGFsbCBi ZSBOLWJpdCwgd2hlcmUgTiA9IDgsIDEwLCAxMiwgb3IgMTYKIGJpdHMvY29tcG9uZW50IOKAlCBl eGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgNjQweDQ4MCBWaWRlbyBUaW1pbmcgMSwK IHdoZXJlIHRoZSB2YWx1ZSBvZiBOIHNoYWxsIGJlIDguIgoKU28gdGhhdCBkb2VzIHNlZW0gdG8g aW1wbHkgdGhhdCB5b3UncmUgc3VwcG9zZWQgdG8gdXNlIGV4YWN0bHkgOGJwYy4KVGhvdWdoIHRo ZSB3b3JkICJkZWZhdWx0IiBpbiB0aGVyZSBpcyBjb25mdXNpbmcuIEFyZSB0aGV5IHNwZWNpZmlj YWxseQp1c2luZyB0aGF0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhYm91dCB0aGUgZmFsbGJh Y2sgYmVoYXZpb3VyLCBvcgppcyBpdCBqdXN0IGluZGljYXRpbmcgdGhhdCBpdCBpcyBhICJkZWZh dWx0IG1vZGUgdGhhdCBhbHdheXMgaGFzIHRvCmJlIHN1cHBvcnRlZCIuIER1bm5vLiBJIGd1ZXNz IG5vIHJlYWwgaGFybSBpbiBmb3JjaW5nIDhicGMgZm9yIDY0MHg0ODAKc2luY2Ugbm8gb25lIGlz IGxpa2VseSB0byB1c2UgdGhhdCBmb3IgYW55IGhpZ2ggZmlkZWxpdHkgc3R1ZmYuCgo+ICsKPiAr CWlmICghaW5mby0+aXNfaGRtaSAmJgo+ICsJICAgIChmb3JtYXQgIT0gSERNSV9DT0xPUlNQQUNF X1JHQiB8fCBicGMgIT0gOCkpIHsKPiArCQlkcm1fZGJnKGRldiwgIkRWSSBNb25pdG9ycyByZXF1 aXJlIGFuIFJHQiBvdXRwdXQgYXQgOCBicGNcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0K PiArCj4gKwlpZiAoIShjb25uZWN0b3ItPmhkbWkuc3VwcG9ydGVkX2Zvcm1hdHMgJiBCSVQoZm9y bWF0KSkpIHsKPiArCQlkcm1fZGJnKGRldiwgIiVzIGZvcm1hdCB1bnN1cHBvcnRlZCBieSB0aGUg Y29ubmVjdG9yLlxuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0 X25hbWUoZm9ybWF0KSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAo Zm9ybWF0KSB7Cj4gKwljYXNlIEhETUlfQ09MT1JTUEFDRV9SR0I6Cj4gKwkJZHJtX2RiZyhkZXYs ICJSR0IgRm9ybWF0LCBjaGVja2luZyB0aGUgY29uc3RyYWludHMuXG4iKTsKPiArCj4gKwkJaWYg KCEoaW5mby0+Y29sb3JfZm9ybWF0cyAmIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0KSkKPiArCQkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAoYnBjID09IDEwICYmICEoaW5mby0+ZWRpZF9oZG1p X3JnYjQ0NF9kY19tb2RlcyAmIERSTV9FRElEX0hETUlfRENfMzApKSB7Cj4gKwkJCWRybV9kYmco ZGV2LCAiMTAgQlBDIGJ1dCBzaW5rIGRvZXNuJ3Qgc3VwcG9ydCBEZWVwIENvbG9yIDMwLlxuIik7 Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWlmIChicGMgPT0gMTIgJiYgIShp bmZvLT5lZGlkX2hkbWlfcmdiNDQ0X2RjX21vZGVzICYgRFJNX0VESURfSERNSV9EQ18zNikpIHsK PiArCQkJZHJtX2RiZyhkZXYsICIxMiBCUEMgYnV0IHNpbmsgZG9lc24ndCBzdXBwb3J0IERlZXAg Q29sb3IgMzYuXG4iKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJZHJtX2Ri ZyhkZXYsICJSR0IgZm9ybWF0IHN1cHBvcnRlZCBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uXG4iKTsK PiArCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJY2FzZSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDIy Ogo+ICsJCWRybV9kYmcoZGV2LCAiWVVWNDIyIGZvcm1hdCwgY2hlY2tpbmcgdGhlIGNvbnN0cmFp bnRzLlxuIik7Cj4gKwo+ICsJCWlmICghKGluZm8tPmNvbG9yX2Zvcm1hdHMgJiBEUk1fQ09MT1Jf Rk9STUFUX1lDQkNSNDIyKSkgewo+ICsJCQlkcm1fZGJnKGRldiwgIlNpbmsgZG9lc24ndCBzdXBw b3J0IFlVVjQyMi5cbiIpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlpZiAo YnBjICE9IDEyKSB7Cj4gKwkJCWRybV9kYmcoZGV2LCAiWVVWNDIyIG9ubHkgc3VwcG9ydHMgMTIg YnBjLlxuIik7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWRybV9kYmcoZGV2 LCAiWVVWNDIyIGZvcm1hdCBzdXBwb3J0ZWQgaW4gdGhhdCBjb25maWd1cmF0aW9uLlxuIik7Cj4g Kwo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWNhc2UgSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDoK PiArCQlkcm1fZGJnKGRldiwgIllVVjQ0NCBmb3JtYXQsIGNoZWNraW5nIHRoZSBjb25zdHJhaW50 cy5cbiIpOwo+ICsKPiArCQlpZiAoIShpbmZvLT5jb2xvcl9mb3JtYXRzICYgRFJNX0NPTE9SX0ZP Uk1BVF9ZQ0JDUjQ0NCkpIHsKPiArCQkJZHJtX2RiZyhkZXYsICJTaW5rIGRvZXNuJ3Qgc3VwcG9y dCBZVVY0NDQuXG4iKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJaWYgKGJw YyA9PSAxMCAmJiAhKGluZm8tPmVkaWRfaGRtaV95Y2JjcjQ0NF9kY19tb2RlcyAmIERSTV9FRElE X0hETUlfRENfMzApKSB7Cj4gKwkJCWRybV9kYmcoZGV2LCAiMTAgQlBDIGJ1dCBzaW5rIGRvZXNu J3Qgc3VwcG9ydCBEZWVwIENvbG9yIDMwLlxuIik7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9 Cj4gKwo+ICsJCWlmIChicGMgPT0gMTIgJiYgIShpbmZvLT5lZGlkX2hkbWlfeWNiY3I0NDRfZGNf bW9kZXMgJiBEUk1fRURJRF9IRE1JX0RDXzM2KSkgewo+ICsJCQlkcm1fZGJnKGRldiwgIjEyIEJQ QyBidXQgc2luayBkb2Vzbid0IHN1cHBvcnQgRGVlcCBDb2xvciAzNi5cbiIpOwo+ICsJCQlyZXR1 cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlkcm1fZGJnKGRldiwgIllVVjQ0NCBmb3JtYXQgc3Vw cG9ydGVkIGluIHRoYXQgY29uZmlndXJhdGlvbi5cbiIpOwo+ICsKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gIHN0YXRpYyBlbnVtIGRybV9t b2RlX3N0YXR1cwo+ICBoZG1pX2Nsb2NrX3ZhbGlkKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCj4gIAkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ ICAJCSB1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2spCj4gIHsKPiBAQCAtNzA0LDEwICs3OTUsOTkg QEAgaGRtaV9jb21wdXRlX2Nsb2NrKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gIAlzdGF0ZS0+aGRtaS50bWRzX2NoYXJfcmF0ZSA9IGNsb2NrOwo+ICAKPiAgCXJldHVy biAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbAo+ICtoZG1pX3RyeV9mb3JtYXRfYnBjKGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJICAgIHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpzdGF0ZSwKCiJzdGF0ZSIgaXMgSU1PIG5vdCBhIGdyZWF0IG5hbWluZyBj aG9pY2UuIEl0IGZvcmNlcyB5b3UgdG8gZ28gYW5kCmxvb2sgdXAgdGhlIGRlZmluaXRpb24gd2hl bmV2ZXIgeW91J3JlIG5vdCBzdXJlIHdoYXQgJ3N0YXRlJyBhY3R1YWxseQppcyB3aGVuIHJlYWRp bmcgdGhlIGNvZGUuIAoKQWxzIGF0IHNvbWUgcG9pbnQgeW91IG1heSB3YW50IHRvIHBsdW1iIGRp ZmZlcmVudCBraW5kcyBvZiBzdGF0ZXMKaW50byB0aGVzZSwgb3IganVzdCBzd2l0Y2ggdG8gcGFz c2luZyBpbiB0aGUgd2hvbGUgZHJtX2F0b21pY19zdGF0ZS4KClNvIEkgcmVjb21tZW5kIHVzaW5n IG1vcmUgc3BlY2lmaWMgbmFtZXMgZm9yIHRoZSBkaWZmZXJlbnQga2luZHMgb2YKc3RhdGVzIChl Zy4gImNydGNfc3RhdGUiLyJjb25uX3N0YXRlIi9ldGMuKSBldmVyeXdoZXJlLgoKPiArCQkgICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJICAgIHVuc2lnbmVkIGlu dCBicGMsIGVudW0gaGRtaV9jb2xvcnNwYWNlIGZtdCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWRybV9kYmcoZGV2LCAiVHJ5aW5nICVzIG91dHB1dCBmb3JtYXRcbiIsCj4gKwkJZHJtX2hkbWlf Y29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUoZm10KSk7Cj4gKwo+ICsJaWYgKCFzaW5r X3N1cHBvcnRzX2Zvcm1hdF9icGMoY29ubmVjdG9yLCBpbmZvLCBtb2RlLCBmbXQsIGJwYykpIHsK PiArCQlkcm1fZGJnKGRldiwgIiVzIG91dHB1dCBmb3JtYXQgbm90IHN1cHBvcnRlZCB3aXRoICV1 IGJwY1xuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUo Zm10KSwgYnBjKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaGRtaV9j b21wdXRlX2Nsb2NrKGNvbm5lY3Rvciwgc3RhdGUsIG1vZGUsIGJwYywgZm10KTsKPiArCWlmIChy ZXQpIHsKPiArCQlkcm1fZGJnKGRldiwgIkNvdWxkbid0IGNvbXB1dGUgY2xvY2sgZm9yICVzIG91 dHB1dCBmb3JtYXQgYW5kICV1IGJwY1xuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9v dXRwdXRfZm9ybWF0X25hbWUoZm10KSwgYnBjKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4g Kwo+ICsJZHJtX2RiZyhkZXYsICIlcyBvdXRwdXQgZm9ybWF0IHN1cHBvcnRlZCB3aXRoICV1IChU TURTIGNoYXIgcmF0ZTogJWxsdSBIeilcbiIsCj4gKwkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9v dXRwdXRfZm9ybWF0X25hbWUoZm10KSwgYnBjLCBzdGF0ZS0+aGRtaS50bWRzX2NoYXJfcmF0ZSk7 Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraGRtaV9jb21w dXRlX2Zvcm1hdChjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCSAg ICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCj4gKwkJICAgIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCSAgICB1bnNpZ25lZCBpbnQgYnBjKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwo+ICsJaWYg KGhkbWlfdHJ5X2Zvcm1hdF9icGMoY29ubmVjdG9yLCBzdGF0ZSwgbW9kZSwgYnBjLCBIRE1JX0NP TE9SU1BBQ0VfUkdCKSkgewo+ICsJCXN0YXRlLT5oZG1pLm91dHB1dF9mb3JtYXQgPSBIRE1JX0NP TE9SU1BBQ0VfUkdCOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChoZG1pX3RyeV9m b3JtYXRfYnBjKGNvbm5lY3Rvciwgc3RhdGUsIG1vZGUsIGJwYywgSERNSV9DT0xPUlNQQUNFX1lV VjQyMikpIHsKPiArCQlzdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0ID0gSERNSV9DT0xPUlNQQUNF X1lVVjQyMjsKPiArCQlyZXR1cm4gMDsKPiArCX0KCkxvb2tzIGxpa2UgeW91J3JlIHByZWZlcnJp bmcgWUNiQ3IgNDoyOjIgb3ZlciBSR0IgOGJwYy4gTm90IHN1cmUKaWYgdGhhdCdzIGEgZ29vZCB0 cmFkZW9mZiB0byBtYWtlLgoKSW4gaTkxNSB3ZSBkb24ndCBjdXJyZW50bHkgZXhwb3NlIDQ6Mjoy IGF0IGFsbCBiZWNhdXNlIGl0IGRvZXNuJ3QKaGVscCBpbiBnZXR0aW5nIGEgd29ya2luZyBkaXNw bGF5LCBhbmQgd2UgaGF2ZSBubyB1YXBpIGZvciB0aGUKdXNlciB0byBmb3JjZSBpdCBpZiB0aGV5 IHJlYWxseSB3YW50IDQ6MjoyIG92ZXIgUkdCLgoKPiArCj4gKwlkcm1fZGJnKGRldiwgIkZhaWxl ZC4gTm8gRm9ybWF0IFN1cHBvcnRlZCBmb3IgdGhhdCBicGMgY291bnQuXG4iKTsKPiArCj4gKwly ZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtoZG1pX2NvbXB1dGVfY29u ZmlnKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJICAgIHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKPiArCQkgICAgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25u ZWN0b3ItPmRldjsKPiArCXVuc2lnbmVkIGludCBtYXhfYnBjID0gY2xhbXBfdCh1bnNpZ25lZCBp bnQsCj4gKwkJCQkgICAgICAgc3RhdGUtPm1heF9icGMsCj4gKwkJCQkgICAgICAgOCwgY29ubmVj dG9yLT5tYXhfYnBjKTsKPiArCXVuc2lnbmVkIGludCBicGM7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWZvciAoYnBjID0gbWF4X2JwYzsgYnBjID49IDg7IGJwYyAtPSAyKSB7Cj4gKwkJZHJtX2RiZyhk ZXYsICJUcnlpbmcgd2l0aCBhICVkIGJwYyBvdXRwdXRcbiIsIGJwYyk7Cj4gKwo+ICsJCXJldCA9 IGhkbWlfY29tcHV0ZV9mb3JtYXQoY29ubmVjdG9yLCBzdGF0ZSwgbW9kZSwgYnBjKTsKCkhtbS4g QWN0dWFsbHkgSSdtIG5vdCBzdXJlIHlvdXIgNDoyOjIgc3R1ZmYgZXZlbiB3b3JrcyBzaW5jZSB5 b3UgCmNoZWNrIGZvciBicGM9PTEyIGluIHRoZXJlIGFuZCBvbmx5IGNhbGwgdGhpcyBiYXNlZCBv biB0aGUgbWF4X2JwYy4KSSdtIG5vdCBjb252aW5jZWQgbWF4X2JwYyB3b3VsZCBhY3R1YWxseSBi ZSAxMiBmb3IgYSBzaW5rIHRoYXQKc3VwcG9ydHMgWUNiQ3IgNDoyOjIgYnV0IG5vdCAxMmJwYyBS R0IuCgo+ICsJCWlmIChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzdGF0ZS0+aGRtaS5v dXRwdXRfYnBjID0gYnBjOwo+ICsKPiArCQlkcm1fZGJnKGRldiwKPiArCQkJIk1vZGUgJXV4JXUg QCAldUh6OiBGb3VuZCBjb25maWd1cmF0aW9uOiBicGM6ICV1LCBmbXQ6ICVzLCBjbG9jazogJWxs dVxuIiwKPiArCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBkcm1fbW9kZV92cmVm cmVzaChtb2RlKSwKPiArCQkJc3RhdGUtPmhkbWkub3V0cHV0X2JwYywKPiArCQkJZHJtX2hkbWlf Y29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUoc3RhdGUtPmhkbWkub3V0cHV0X2Zvcm1h dCksCj4gKwkJCXN0YXRlLT5oZG1pLnRtZHNfY2hhcl9yYXRlKTsKPiArCj4gKwkJcmV0dXJuIDA7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gIC8qKgo+ICAgKiBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfaGRtaV9jaGVjaygpIC0gSGVscGVyIHRvIGNoZWNrIEhE TUkgY29ubmVjdG9yIGF0b21pYyBzdGF0ZQo+ICAgKiBAY29ubmVjdG9yOiBEUk0gQ29ubmVjdG9y Cj4gICAqIEBzdGF0ZTogdGhlIERSTSBTdGF0ZSBvYmplY3QKPiAgICoKPiBAQCAtNzI3LDEzICs5 MDcsMTEgQEAgaW50IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5l Y3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlID0KPiAgCQljb25uZWN0b3Jfc3RhdGVfZ2V0X21vZGUobmV3X3N0YXRlKTsK PiAgCWludCByZXQ7Cj4gIAo+IC0JcmV0ID0gaGRtaV9jb21wdXRlX2Nsb2NrKGNvbm5lY3Rvciwg bmV3X3N0YXRlLCBtb2RlLAo+IC0JCQkJIG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjLAo+IC0J CQkJIG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KTsKPiArCXJldCA9IGhkbWlfY29tcHV0 ZV9jb25maWcoY29ubmVjdG9yLCBuZXdfc3RhdGUsIG1vZGUpOwo+ICAJaWYgKHJldCkKPiAgCQly ZXR1cm4gcmV0Owo+ICAKPiAgCWlmIChvbGRfc3RhdGUtPmhkbWkub3V0cHV0X2JwYyAhPSBuZXdf c3RhdGUtPmhkbWkub3V0cHV0X2JwYyB8fAo+ICAJICAgIG9sZF9zdGF0ZS0+aGRtaS5vdXRwdXRf Zm9ybWF0ICE9IG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KSB7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90ZXN0cy9kcm1fYXRvbWljX3N0YXRlX2hlbHBlcl90ZXN0LmMgYi9k cml2ZXJzL2dwdS9kcm0vdGVzdHMvZHJtX2F0b21pY19zdGF0ZV9oZWxwZXJfdGVzdC5jCj4gaW5k ZXggNWE4NzUwMTUzNTEwLi5mMDEwZmRlMGViNjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3Rlc3RzL2RybV9hdG9taWNfc3RhdGVfaGVscGVyX3Rlc3QuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS90ZXN0cy9kcm1fYXRvbWljX3N0YXRlX2hlbHBlcl90ZXN0LmMKPiBAQCAtNjgsMTMg KzY4LDEwIEBAIHN0YXRpYyBpbnQgbGlnaHRfdXBfY29ubmVjdG9yKHN0cnVjdCBrdW5pdCAqdGVz dCwKPiAgCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgc3RhdGUpOwo+ICAKPiAg CWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5l Y3Rvcik7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGNvbm5fc3RhdGUp Owo+ICAKPiAtCWNvbm5fc3RhdGUtPmhkbWkub3V0cHV0X2JwYyA9IGNvbm5lY3Rvci0+bWF4X2Jw YzsKPiAtCWNvbm5fc3RhdGUtPmhkbWkub3V0cHV0X2Zvcm1hdCA9IEhETUlfQ09MT1JTUEFDRV9S R0I7Cj4gLQo+ICAJcmV0ID0gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKGNvbm5f c3RhdGUsIGNydGMpOwo+ICAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgMCk7Cj4gIAo+ICAJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ICAJ S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBjcnRjX3N0YXRlKTsKPiBAQCAtMjQ5 LDE0ICsyNDYsMTkgQEAgc3RhdGljIHZvaWQgZHJtX3Rlc3RfY2hlY2tfb3V0cHV0X2JwY19jcnRj X21vZGVfY2hhbmdlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gIAlwcml2ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2hkbWlfaW5pdCh0ZXN0LAo+ICAJCQkJCQkgICAgIEJJVChIRE1JX0NP TE9SU1BBQ0VfUkdCKSwKPiAgCQkJCQkJICAgICAxMCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05V TEwodGVzdCwgcHJpdik7Cj4gIAo+ICsJY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gKwlyZXQg PSBzZXRfY29ubmVjdG9yX2VkaWQodGVzdCwgY29ubiwKPiArCQkJCSB0ZXN0X2VkaWRfaGRtaV8x MDgwcF9yZ2JfeXV2X2RjX21heF8yMDBtaHosCj4gKwkJCQkgQVJSQVlfU0laRSh0ZXN0X2VkaWRf aGRtaV8xMDgwcF9yZ2JfeXV2X2RjX21heF8yMDBtaHopKTsKPiArCUtVTklUX0FTU0VSVF9FUSh0 ZXN0LCByZXQsIDApOwo+ICsKPiAgCWN0eCA9IGRybV9rdW5pdF9oZWxwZXJfYWNxdWlyZV9jdHhf YWxsb2ModGVzdCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGN0eCk7 Cj4gIAo+IC0JY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gIAlwcmVmZXJyZWQgPSBmaW5kX3By ZWZlcnJlZF9tb2RlKGNvbm4pOwo+ICAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHByZWZl cnJlZCk7Cj4gIAo+ICAJZHJtID0gJnByaXYtPmRybTsKPiAgCWNydGMgPSBwcml2LT5jcnRjOwo+ IEBAIC0yNzAsMTUgKzI3MiwxNSBAQCBzdGF0aWMgdm9pZCBkcm1fdGVzdF9jaGVja19vdXRwdXRf YnBjX2NydGNfbW9kZV9jaGFuZ2VkKHN0cnVjdCBrdW5pdCAqdGVzdCkKPiAgCUtVTklUX0FTU0VS VF9OT1RfRVJSX09SX05VTEwodGVzdCwgbmV3X2Nvbm5fc3RhdGUpOwo+ICAKPiAgCW9sZF9jb25u X3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7 Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG9sZF9jb25uX3N0YXRlKTsK PiAgCj4gLQluZXdfY29ubl9zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjID0gODsKPiArCW5ld19jb25u X3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyA9IDg7Cj4gIAo+ICAJS1VOSVRfQVNTRVJUX05FKHRl c3QsCj4gLQkJCW9sZF9jb25uX3N0YXRlLT5oZG1pLm91dHB1dF9icGMsCj4gLQkJCW5ld19jb25u X3N0YXRlLT5oZG1pLm91dHB1dF9icGMpOwo+ICsJCQlvbGRfY29ubl9zdGF0ZS0+bWF4X3JlcXVl c3RlZF9icGMsCj4gKwkJCW5ld19jb25uX3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyk7Cj4gIAo+ ICAJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKPiAgCUtVTklUX0FTU0VSVF9F USh0ZXN0LCByZXQsIDApOwo+ICAKPiAgCW9sZF9jb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRf b2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7Cj4gQEAgLTMxOCwxNCArMzIwLDE5IEBA IHN0YXRpYyB2b2lkIGRybV90ZXN0X2NoZWNrX291dHB1dF9icGNfY3J0Y19tb2RlX25vdF9jaGFu Z2VkKHN0cnVjdCBrdW5pdCAqdGVzdCkKPiAgCXByaXYgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfaGRtaV9pbml0KHRlc3QsCj4gIAkJCQkJCSAgICAgQklUKEhETUlfQ09MT1JTUEFDRV9S R0IpLAo+ICAJCQkJCQkgICAgIDEwKTsKPiAgCUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBw cml2KTsKPiAgCj4gKwljb25uID0gJnByaXYtPmNvbm5lY3RvcjsKPiArCXJldCA9IHNldF9jb25u ZWN0b3JfZWRpZCh0ZXN0LCBjb25uLAo+ICsJCQkJIHRlc3RfZWRpZF9oZG1pXzEwODBwX3JnYl95 dXZfZGNfbWF4XzIwMG1oeiwKPiArCQkJCSBBUlJBWV9TSVpFKHRlc3RfZWRpZF9oZG1pXzEwODBw X3JnYl95dXZfZGNfbWF4XzIwMG1oeikpOwo+ICsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwg MCk7Cj4gKwo+ICAJY3R4ID0gZHJtX2t1bml0X2hlbHBlcl9hY3F1aXJlX2N0eF9hbGxvYyh0ZXN0 KTsKPiAgCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgY3R4KTsKPiAgCj4gLQlj b25uID0gJnByaXYtPmNvbm5lY3RvcjsKPiAgCXByZWZlcnJlZCA9IGZpbmRfcHJlZmVycmVkX21v ZGUoY29ubik7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcHJlZmVycmVkKTsKPiAg Cj4gIAlkcm0gPSAmcHJpdi0+ZHJtOwo+ICAJY3J0YyA9IHByaXYtPmNydGM7Cj4gQEAgLTY2OCwx MSArNjc1LDExIEBAIHN0YXRpYyB2b2lkIGRybV90ZXN0X2NoZWNrX2Zvcm1hdF92YWx1ZShzdHJ1 Y3Qga3VuaXQgKnRlc3QpCj4gIAkJCQkJCSAgICAgOCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05V TEwodGVzdCwgcHJpdik7Cj4gIAo+ICAJY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gIAljb25u X3N0YXRlID0gY29ubi0+c3RhdGU7Cj4gLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgY29ubl9zdGF0 ZS0+aGRtaS5vdXRwdXRfZm9ybWF0LCBIRE1JX0NPTE9SU1BBQ0VfUkdCKTsKPiArCUtVTklUX0VY UEVDVF9FUSh0ZXN0LCBjb25uX3N0YXRlLT5oZG1pLm91dHB1dF9mb3JtYXQsIDApOwo+ICB9Cj4g IAo+ICAvKgo+ICAgKiBUZXN0IHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBvdXRwdXQgZm9ybWF0IHBy b3BlcnR5IG91dCBvZiByZXNldCBpcyBzZXQKPiAgICogdG8gMCwgYW5kIHdpbGwgYmUgY29tcHV0 ZWQgYXQgYXRvbWljX2NoZWNrIHRpbWUuCj4gCj4gLS0gCj4gMi40My4yCgotLSAKVmlsbGUgU3ly asOkbMOkCkludGVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXJvY2tjaGlwCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EC670C54E58 for ; Fri, 15 Mar 2024 08:05:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9xyaAXRjKuDhofKT3dhIQaoWTc7v5E855e+/BH2IOgY=; b=V09EnXqW22fcc/ r+SWXwwYY0q61hf0nghMnpRtHrQRCOCHM0BZ0enZn8lI0WVw8T31oTJUZR/Pkc3TFY8EvZz10d/89 TTebvW9u5HzoL/XuiLjb3Z4ZKrVZ2Q110gUqadGBoz1rfpviEfdS+UNAzo+RiI9dlGCw8kcDLpZh+ DFXDzQE4fvrf0BHuCSc06FOScK7K0m1YukvUFF9bNJnJYOt/odIwFNpX2FU20ALAGUOmf2k3ZZ2hP OSXhsl2Lo7hV72+MSRU/m2QLfqWcR6abUrWvV/JbMnqTRha//gDSr+nVS1SOpbwIyWhaFTKgsrBm/ LvW5BEKbTZEBfwYarWHQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rl2ZD-0000000H4QF-3hnr; Fri, 15 Mar 2024 08:05:27 +0000 Received: from mgamail.intel.com ([198.175.65.21]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rl2ZA-0000000H4PX-3lb6; Fri, 15 Mar 2024 08:05:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710489926; x=1742025926; h=date:from:to:cc:subject:message-id:references: mime-version:content-transfer-encoding:in-reply-to; bh=TrRBinZzGLucal8rlgqc2RLz4DMh0sLsKis+qasbHo0=; b=CNiN5rpQQHJjXVjm/e6jiR5+3AknwrfR5SIs+AZ1ZeaWTVfK9c9bwsc4 d4z3+gauLdrrlyY3k80/C1HsNG4n4tyZzEepiNZCGDZWKQQ0K/1eKSZ6P PjDhAWNlgSA9LAjKNUimn2vBH1XmszKqEseQf33pDRkzNJDv16NtHtiAi DA+kt98TdoWan8VBwy+xDMSaV2F2OGfFcUI46GGEsG1rPJc0Wrja9fjWM kcn4rMAOgwViokQKFz+CLW/CdNUWfHUFVTf9aw9p2IFzmSROO8q013ngE wNPOeOQ2dtKw5U/0jRjZ/pbXfm9m5Io9lBo4jMCVPb9UDXHQ0tnkI6qU6 A==; X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="5287416" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="5287416" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Mar 2024 01:05:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,11013"; a="827780531" X-IronPort-AV: E=Sophos;i="6.07,127,1708416000"; d="scan'208";a="827780531" Received: from stinkpipe.fi.intel.com (HELO stinkbox) ([10.237.72.74]) by orsmga001.jf.intel.com with SMTP; 15 Mar 2024 01:05:17 -0700 Received: by stinkbox (sSMTP sendmail emulation); Fri, 15 Mar 2024 10:05:16 +0200 Date: Fri, 15 Mar 2024 10:05:16 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Maxime Ripard Cc: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Jonathan Corbet , Sandy Huang , Heiko =?iso-8859-1?Q?St=FCbner?= , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Hans Verkuil , Sebastian Wick , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: Re: [PATCH v9 14/27] drm/connector: hdmi: Compute bpc and format automatically Message-ID: References: <20240311-kms-hdmi-connector-state-v9-0-d45890323344@kernel.org> <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240311-kms-hdmi-connector-state-v9-14-d45890323344@kernel.org> X-Patchwork-Hint: comment X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240315_010525_118071_E2578804 X-CRM114-Status: GOOD ( 37.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBNYXIgMTEsIDIwMjQgYXQgMDM6NDk6NDJQTSArMDEwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkLCB3 ZSBjYW4gYWRkIHNvbWUgY29kZQo+IHRoYXQgd2lsbCwgZm9yIGEgZ2l2ZW4gY29ubmVjdG9yIHN0 YXRlIGFuZCBtb2RlLCBjb21wdXRlIHRoZSBiZXN0IG91dHB1dAo+IGZvcm1hdCBhbmQgYnBjLgo+ IAo+IFRoZSBhbGdvcml0aG0gaXMgZXF1aXZhbGVudCB0byB0aGUgb25lIGFscmVhZHkgZm91bmQg aW4gaTkxNSBhbmQgdmM0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1yaXBh cmRAa2VybmVsLm9yZz4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVf aGVscGVyLmMgICAgICAgICAgfCAxODQgKysrKysrKysrKysrKysrKysrKystCj4gIC4uLi9ncHUv ZHJtL3Rlc3RzL2RybV9hdG9taWNfc3RhdGVfaGVscGVyX3Rlc3QuYyAgIHwgIDI1ICsrLQo+ICAy IGZpbGVzIGNoYW5nZWQsIDE5NyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwo+IGluZGV4IDQ0OGI0YTcz ZDFjOC4uOWY1MTc1OTlmMTE3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX3N0YXRlX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3Rh dGVfaGVscGVyLmMKPiBAQCAtMjksMTAgKzI5LDExIEBACj4gICNpbmNsdWRlIDxkcm0vZHJtX2Js ZW5kLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2Ry bV9jb25uZWN0b3IuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICAjaW5jbHVkZSA8 ZHJtL2RybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9mcmFtZWJ1ZmZlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZS5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV92Ymxhbmsu aD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+Cj4gQEAgLTY2MCwxMCArNjYxLDEw MCBAQCBjb25uZWN0b3Jfc3RhdGVfZ2V0X21vZGUoY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJcmV0dXJuICZjcnRj X3N0YXRlLT5tb2RlOwo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbAo+ICtzaW5rX3N1cHBvcnRzX2Zv cm1hdF9icGMoY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLAo+ICsJCQkgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCSB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25l ZCBpbnQgYnBjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5k ZXY7Cj4gKwl1OCB2aWMgPSBkcm1fbWF0Y2hfY2VhX21vZGUobW9kZSk7Cj4gKwo+ICsJaWYgKHZp YyA9PSAxICYmIGJwYyAhPSA4KSB7Cj4gKwkJZHJtX2RiZyhkZXYsICJWSUMxIHJlcXVpcmVzIGEg YnBjIG9mIDgsIGdvdCAldVxuIiwgYnBjKTsKClVzZSBvZiBkcm1fZGJnKCkgZm9yIGttcyBzdHVm ZiBpcyBzdXJwcmlzaW5nLgoKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9CgpJIGRvbid0IHRoaW5r IHdlIGhhdmUgdGhpcyBpbiBpOTE1LiBNeSBvcmlnaW5hbCBpbXByZXNzaW9uIHdhcyB0aGF0IHlv dQpjYW4gdXNlIGhpZ2hlciBjb2xvciBkZXB0aCBpZiB5b3UgY2FuIGRldGVybWluZSB0aGUgc2lu ayBjYXBhYmlsaXRpZXMsCmJ1dCBhbGwgc2lua3MgYXJlIHJlcXVpcmVkIHRvIGFjY2VwdCA2NDB4 NDgwQDhicGMgYXMgYSBmYWxsYmFjay4KCmJ1dCBDVEEtODYxLUggc2F5czoKIjUuNCBDb2xvciBD b2RpbmcgJiBRdWFudGl6YXRpb24KIENvbXBvbmVudCBEZXB0aDogVGhlIGNvZGluZyBzaGFsbCBi ZSBOLWJpdCwgd2hlcmUgTiA9IDgsIDEwLCAxMiwgb3IgMTYKIGJpdHMvY29tcG9uZW50IOKAlCBl eGNlcHQgaW4gdGhlIGNhc2Ugb2YgdGhlIGRlZmF1bHQgNjQweDQ4MCBWaWRlbyBUaW1pbmcgMSwK IHdoZXJlIHRoZSB2YWx1ZSBvZiBOIHNoYWxsIGJlIDguIgoKU28gdGhhdCBkb2VzIHNlZW0gdG8g aW1wbHkgdGhhdCB5b3UncmUgc3VwcG9zZWQgdG8gdXNlIGV4YWN0bHkgOGJwYy4KVGhvdWdoIHRo ZSB3b3JkICJkZWZhdWx0IiBpbiB0aGVyZSBpcyBjb25mdXNpbmcuIEFyZSB0aGV5IHNwZWNpZmlj YWxseQp1c2luZyB0aGF0IHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhYm91dCB0aGUgZmFsbGJh Y2sgYmVoYXZpb3VyLCBvcgppcyBpdCBqdXN0IGluZGljYXRpbmcgdGhhdCBpdCBpcyBhICJkZWZh dWx0IG1vZGUgdGhhdCBhbHdheXMgaGFzIHRvCmJlIHN1cHBvcnRlZCIuIER1bm5vLiBJIGd1ZXNz IG5vIHJlYWwgaGFybSBpbiBmb3JjaW5nIDhicGMgZm9yIDY0MHg0ODAKc2luY2Ugbm8gb25lIGlz IGxpa2VseSB0byB1c2UgdGhhdCBmb3IgYW55IGhpZ2ggZmlkZWxpdHkgc3R1ZmYuCgo+ICsKPiAr CWlmICghaW5mby0+aXNfaGRtaSAmJgo+ICsJICAgIChmb3JtYXQgIT0gSERNSV9DT0xPUlNQQUNF X1JHQiB8fCBicGMgIT0gOCkpIHsKPiArCQlkcm1fZGJnKGRldiwgIkRWSSBNb25pdG9ycyByZXF1 aXJlIGFuIFJHQiBvdXRwdXQgYXQgOCBicGNcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0K PiArCj4gKwlpZiAoIShjb25uZWN0b3ItPmhkbWkuc3VwcG9ydGVkX2Zvcm1hdHMgJiBCSVQoZm9y bWF0KSkpIHsKPiArCQlkcm1fZGJnKGRldiwgIiVzIGZvcm1hdCB1bnN1cHBvcnRlZCBieSB0aGUg Y29ubmVjdG9yLlxuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0 X25hbWUoZm9ybWF0KSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAo Zm9ybWF0KSB7Cj4gKwljYXNlIEhETUlfQ09MT1JTUEFDRV9SR0I6Cj4gKwkJZHJtX2RiZyhkZXYs ICJSR0IgRm9ybWF0LCBjaGVja2luZyB0aGUgY29uc3RyYWludHMuXG4iKTsKPiArCj4gKwkJaWYg KCEoaW5mby0+Y29sb3JfZm9ybWF0cyAmIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0KSkKPiArCQkJ cmV0dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAoYnBjID09IDEwICYmICEoaW5mby0+ZWRpZF9oZG1p X3JnYjQ0NF9kY19tb2RlcyAmIERSTV9FRElEX0hETUlfRENfMzApKSB7Cj4gKwkJCWRybV9kYmco ZGV2LCAiMTAgQlBDIGJ1dCBzaW5rIGRvZXNuJ3Qgc3VwcG9ydCBEZWVwIENvbG9yIDMwLlxuIik7 Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWlmIChicGMgPT0gMTIgJiYgIShp bmZvLT5lZGlkX2hkbWlfcmdiNDQ0X2RjX21vZGVzICYgRFJNX0VESURfSERNSV9EQ18zNikpIHsK PiArCQkJZHJtX2RiZyhkZXYsICIxMiBCUEMgYnV0IHNpbmsgZG9lc24ndCBzdXBwb3J0IERlZXAg Q29sb3IgMzYuXG4iKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJZHJtX2Ri ZyhkZXYsICJSR0IgZm9ybWF0IHN1cHBvcnRlZCBpbiB0aGF0IGNvbmZpZ3VyYXRpb24uXG4iKTsK PiArCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJY2FzZSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDIy Ogo+ICsJCWRybV9kYmcoZGV2LCAiWVVWNDIyIGZvcm1hdCwgY2hlY2tpbmcgdGhlIGNvbnN0cmFp bnRzLlxuIik7Cj4gKwo+ICsJCWlmICghKGluZm8tPmNvbG9yX2Zvcm1hdHMgJiBEUk1fQ09MT1Jf Rk9STUFUX1lDQkNSNDIyKSkgewo+ICsJCQlkcm1fZGJnKGRldiwgIlNpbmsgZG9lc24ndCBzdXBw b3J0IFlVVjQyMi5cbiIpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlpZiAo YnBjICE9IDEyKSB7Cj4gKwkJCWRybV9kYmcoZGV2LCAiWVVWNDIyIG9ubHkgc3VwcG9ydHMgMTIg YnBjLlxuIik7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwo+ICsJCWRybV9kYmcoZGV2 LCAiWVVWNDIyIGZvcm1hdCBzdXBwb3J0ZWQgaW4gdGhhdCBjb25maWd1cmF0aW9uLlxuIik7Cj4g Kwo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWNhc2UgSERNSV9DT0xPUlNQQUNFX1lVVjQ0NDoK PiArCQlkcm1fZGJnKGRldiwgIllVVjQ0NCBmb3JtYXQsIGNoZWNraW5nIHRoZSBjb25zdHJhaW50 cy5cbiIpOwo+ICsKPiArCQlpZiAoIShpbmZvLT5jb2xvcl9mb3JtYXRzICYgRFJNX0NPTE9SX0ZP Uk1BVF9ZQ0JDUjQ0NCkpIHsKPiArCQkJZHJtX2RiZyhkZXYsICJTaW5rIGRvZXNuJ3Qgc3VwcG9y dCBZVVY0NDQuXG4iKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJaWYgKGJw YyA9PSAxMCAmJiAhKGluZm8tPmVkaWRfaGRtaV95Y2JjcjQ0NF9kY19tb2RlcyAmIERSTV9FRElE X0hETUlfRENfMzApKSB7Cj4gKwkJCWRybV9kYmcoZGV2LCAiMTAgQlBDIGJ1dCBzaW5rIGRvZXNu J3Qgc3VwcG9ydCBEZWVwIENvbG9yIDMwLlxuIik7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9 Cj4gKwo+ICsJCWlmIChicGMgPT0gMTIgJiYgIShpbmZvLT5lZGlkX2hkbWlfeWNiY3I0NDRfZGNf bW9kZXMgJiBEUk1fRURJRF9IRE1JX0RDXzM2KSkgewo+ICsJCQlkcm1fZGJnKGRldiwgIjEyIEJQ QyBidXQgc2luayBkb2Vzbid0IHN1cHBvcnQgRGVlcCBDb2xvciAzNi5cbiIpOwo+ICsJCQlyZXR1 cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlkcm1fZGJnKGRldiwgIllVVjQ0NCBmb3JtYXQgc3Vw cG9ydGVkIGluIHRoYXQgY29uZmlndXJhdGlvbi5cbiIpOwo+ICsKPiArCQlyZXR1cm4gdHJ1ZTsK PiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gIHN0YXRpYyBlbnVtIGRybV9t b2RlX3N0YXR1cwo+ICBoZG1pX2Nsb2NrX3ZhbGlkKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCj4gIAkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ ICAJCSB1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2spCj4gIHsKPiBAQCAtNzA0LDEwICs3OTUsOTkg QEAgaGRtaV9jb21wdXRlX2Nsb2NrKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gIAlzdGF0ZS0+aGRtaS50bWRzX2NoYXJfcmF0ZSA9IGNsb2NrOwo+ICAKPiAgCXJldHVy biAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbAo+ICtoZG1pX3RyeV9mb3JtYXRfYnBjKGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJICAgIHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpzdGF0ZSwKCiJzdGF0ZSIgaXMgSU1PIG5vdCBhIGdyZWF0IG5hbWluZyBj aG9pY2UuIEl0IGZvcmNlcyB5b3UgdG8gZ28gYW5kCmxvb2sgdXAgdGhlIGRlZmluaXRpb24gd2hl bmV2ZXIgeW91J3JlIG5vdCBzdXJlIHdoYXQgJ3N0YXRlJyBhY3R1YWxseQppcyB3aGVuIHJlYWRp bmcgdGhlIGNvZGUuIAoKQWxzIGF0IHNvbWUgcG9pbnQgeW91IG1heSB3YW50IHRvIHBsdW1iIGRp ZmZlcmVudCBraW5kcyBvZiBzdGF0ZXMKaW50byB0aGVzZSwgb3IganVzdCBzd2l0Y2ggdG8gcGFz c2luZyBpbiB0aGUgd2hvbGUgZHJtX2F0b21pY19zdGF0ZS4KClNvIEkgcmVjb21tZW5kIHVzaW5n IG1vcmUgc3BlY2lmaWMgbmFtZXMgZm9yIHRoZSBkaWZmZXJlbnQga2luZHMgb2YKc3RhdGVzIChl Zy4gImNydGNfc3RhdGUiLyJjb25uX3N0YXRlIi9ldGMuKSBldmVyeXdoZXJlLgoKPiArCQkgICAg Y29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJICAgIHVuc2lnbmVkIGlu dCBicGMsIGVudW0gaGRtaV9jb2xvcnNwYWNlIGZtdCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWRybV9kYmcoZGV2LCAiVHJ5aW5nICVzIG91dHB1dCBmb3JtYXRcbiIsCj4gKwkJZHJtX2hkbWlf Y29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUoZm10KSk7Cj4gKwo+ICsJaWYgKCFzaW5r X3N1cHBvcnRzX2Zvcm1hdF9icGMoY29ubmVjdG9yLCBpbmZvLCBtb2RlLCBmbXQsIGJwYykpIHsK PiArCQlkcm1fZGJnKGRldiwgIiVzIG91dHB1dCBmb3JtYXQgbm90IHN1cHBvcnRlZCB3aXRoICV1 IGJwY1xuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUo Zm10KSwgYnBjKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaGRtaV9j b21wdXRlX2Nsb2NrKGNvbm5lY3Rvciwgc3RhdGUsIG1vZGUsIGJwYywgZm10KTsKPiArCWlmIChy ZXQpIHsKPiArCQlkcm1fZGJnKGRldiwgIkNvdWxkbid0IGNvbXB1dGUgY2xvY2sgZm9yICVzIG91 dHB1dCBmb3JtYXQgYW5kICV1IGJwY1xuIiwKPiArCQkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9v dXRwdXRfZm9ybWF0X25hbWUoZm10KSwgYnBjKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4g Kwo+ICsJZHJtX2RiZyhkZXYsICIlcyBvdXRwdXQgZm9ybWF0IHN1cHBvcnRlZCB3aXRoICV1IChU TURTIGNoYXIgcmF0ZTogJWxsdSBIeilcbiIsCj4gKwkJZHJtX2hkbWlfY29ubmVjdG9yX2dldF9v dXRwdXRfZm9ybWF0X25hbWUoZm10KSwgYnBjLCBzdGF0ZS0+aGRtaS50bWRzX2NoYXJfcmF0ZSk7 Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiAraGRtaV9jb21w dXRlX2Zvcm1hdChjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCSAg ICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCj4gKwkJICAgIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCSAgICB1bnNpZ25lZCBpbnQgYnBjKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwo+ICsJaWYg KGhkbWlfdHJ5X2Zvcm1hdF9icGMoY29ubmVjdG9yLCBzdGF0ZSwgbW9kZSwgYnBjLCBIRE1JX0NP TE9SU1BBQ0VfUkdCKSkgewo+ICsJCXN0YXRlLT5oZG1pLm91dHB1dF9mb3JtYXQgPSBIRE1JX0NP TE9SU1BBQ0VfUkdCOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChoZG1pX3RyeV9m b3JtYXRfYnBjKGNvbm5lY3Rvciwgc3RhdGUsIG1vZGUsIGJwYywgSERNSV9DT0xPUlNQQUNFX1lV VjQyMikpIHsKPiArCQlzdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0ID0gSERNSV9DT0xPUlNQQUNF X1lVVjQyMjsKPiArCQlyZXR1cm4gMDsKPiArCX0KCkxvb2tzIGxpa2UgeW91J3JlIHByZWZlcnJp bmcgWUNiQ3IgNDoyOjIgb3ZlciBSR0IgOGJwYy4gTm90IHN1cmUKaWYgdGhhdCdzIGEgZ29vZCB0 cmFkZW9mZiB0byBtYWtlLgoKSW4gaTkxNSB3ZSBkb24ndCBjdXJyZW50bHkgZXhwb3NlIDQ6Mjoy IGF0IGFsbCBiZWNhdXNlIGl0IGRvZXNuJ3QKaGVscCBpbiBnZXR0aW5nIGEgd29ya2luZyBkaXNw bGF5LCBhbmQgd2UgaGF2ZSBubyB1YXBpIGZvciB0aGUKdXNlciB0byBmb3JjZSBpdCBpZiB0aGV5 IHJlYWxseSB3YW50IDQ6MjoyIG92ZXIgUkdCLgoKPiArCj4gKwlkcm1fZGJnKGRldiwgIkZhaWxl ZC4gTm8gRm9ybWF0IFN1cHBvcnRlZCBmb3IgdGhhdCBicGMgY291bnQuXG4iKTsKPiArCj4gKwly ZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtoZG1pX2NvbXB1dGVfY29u ZmlnKGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJICAgIHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKPiArCQkgICAgY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25u ZWN0b3ItPmRldjsKPiArCXVuc2lnbmVkIGludCBtYXhfYnBjID0gY2xhbXBfdCh1bnNpZ25lZCBp bnQsCj4gKwkJCQkgICAgICAgc3RhdGUtPm1heF9icGMsCj4gKwkJCQkgICAgICAgOCwgY29ubmVj dG9yLT5tYXhfYnBjKTsKPiArCXVuc2lnbmVkIGludCBicGM7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWZvciAoYnBjID0gbWF4X2JwYzsgYnBjID49IDg7IGJwYyAtPSAyKSB7Cj4gKwkJZHJtX2RiZyhk ZXYsICJUcnlpbmcgd2l0aCBhICVkIGJwYyBvdXRwdXRcbiIsIGJwYyk7Cj4gKwo+ICsJCXJldCA9 IGhkbWlfY29tcHV0ZV9mb3JtYXQoY29ubmVjdG9yLCBzdGF0ZSwgbW9kZSwgYnBjKTsKCkhtbS4g QWN0dWFsbHkgSSdtIG5vdCBzdXJlIHlvdXIgNDoyOjIgc3R1ZmYgZXZlbiB3b3JrcyBzaW5jZSB5 b3UgCmNoZWNrIGZvciBicGM9PTEyIGluIHRoZXJlIGFuZCBvbmx5IGNhbGwgdGhpcyBiYXNlZCBv biB0aGUgbWF4X2JwYy4KSSdtIG5vdCBjb252aW5jZWQgbWF4X2JwYyB3b3VsZCBhY3R1YWxseSBi ZSAxMiBmb3IgYSBzaW5rIHRoYXQKc3VwcG9ydHMgWUNiQ3IgNDoyOjIgYnV0IG5vdCAxMmJwYyBS R0IuCgo+ICsJCWlmIChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzdGF0ZS0+aGRtaS5v dXRwdXRfYnBjID0gYnBjOwo+ICsKPiArCQlkcm1fZGJnKGRldiwKPiArCQkJIk1vZGUgJXV4JXUg QCAldUh6OiBGb3VuZCBjb25maWd1cmF0aW9uOiBicGM6ICV1LCBmbXQ6ICVzLCBjbG9jazogJWxs dVxuIiwKPiArCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBkcm1fbW9kZV92cmVm cmVzaChtb2RlKSwKPiArCQkJc3RhdGUtPmhkbWkub3V0cHV0X2JwYywKPiArCQkJZHJtX2hkbWlf Y29ubmVjdG9yX2dldF9vdXRwdXRfZm9ybWF0X25hbWUoc3RhdGUtPmhkbWkub3V0cHV0X2Zvcm1h dCksCj4gKwkJCXN0YXRlLT5oZG1pLnRtZHNfY2hhcl9yYXRlKTsKPiArCj4gKwkJcmV0dXJuIDA7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gIC8qKgo+ICAgKiBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfaGRtaV9jaGVjaygpIC0gSGVscGVyIHRvIGNoZWNrIEhE TUkgY29ubmVjdG9yIGF0b21pYyBzdGF0ZQo+ICAgKiBAY29ubmVjdG9yOiBEUk0gQ29ubmVjdG9y Cj4gICAqIEBzdGF0ZTogdGhlIERSTSBTdGF0ZSBvYmplY3QKPiAgICoKPiBAQCAtNzI3LDEzICs5 MDcsMTEgQEAgaW50IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAkJZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5l Y3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlID0KPiAgCQljb25uZWN0b3Jfc3RhdGVfZ2V0X21vZGUobmV3X3N0YXRlKTsK PiAgCWludCByZXQ7Cj4gIAo+IC0JcmV0ID0gaGRtaV9jb21wdXRlX2Nsb2NrKGNvbm5lY3Rvciwg bmV3X3N0YXRlLCBtb2RlLAo+IC0JCQkJIG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjLAo+IC0J CQkJIG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KTsKPiArCXJldCA9IGhkbWlfY29tcHV0 ZV9jb25maWcoY29ubmVjdG9yLCBuZXdfc3RhdGUsIG1vZGUpOwo+ICAJaWYgKHJldCkKPiAgCQly ZXR1cm4gcmV0Owo+ICAKPiAgCWlmIChvbGRfc3RhdGUtPmhkbWkub3V0cHV0X2JwYyAhPSBuZXdf c3RhdGUtPmhkbWkub3V0cHV0X2JwYyB8fAo+ICAJICAgIG9sZF9zdGF0ZS0+aGRtaS5vdXRwdXRf Zm9ybWF0ICE9IG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KSB7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90ZXN0cy9kcm1fYXRvbWljX3N0YXRlX2hlbHBlcl90ZXN0LmMgYi9k cml2ZXJzL2dwdS9kcm0vdGVzdHMvZHJtX2F0b21pY19zdGF0ZV9oZWxwZXJfdGVzdC5jCj4gaW5k ZXggNWE4NzUwMTUzNTEwLi5mMDEwZmRlMGViNjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3Rlc3RzL2RybV9hdG9taWNfc3RhdGVfaGVscGVyX3Rlc3QuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS90ZXN0cy9kcm1fYXRvbWljX3N0YXRlX2hlbHBlcl90ZXN0LmMKPiBAQCAtNjgsMTMg KzY4LDEwIEBAIHN0YXRpYyBpbnQgbGlnaHRfdXBfY29ubmVjdG9yKHN0cnVjdCBrdW5pdCAqdGVz dCwKPiAgCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgc3RhdGUpOwo+ICAKPiAg CWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5l Y3Rvcik7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGNvbm5fc3RhdGUp Owo+ICAKPiAtCWNvbm5fc3RhdGUtPmhkbWkub3V0cHV0X2JwYyA9IGNvbm5lY3Rvci0+bWF4X2Jw YzsKPiAtCWNvbm5fc3RhdGUtPmhkbWkub3V0cHV0X2Zvcm1hdCA9IEhETUlfQ09MT1JTUEFDRV9S R0I7Cj4gLQo+ICAJcmV0ID0gZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKGNvbm5f c3RhdGUsIGNydGMpOwo+ICAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJldCwgMCk7Cj4gIAo+ICAJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ICAJ S1VOSVRfQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBjcnRjX3N0YXRlKTsKPiBAQCAtMjQ5 LDE0ICsyNDYsMTkgQEAgc3RhdGljIHZvaWQgZHJtX3Rlc3RfY2hlY2tfb3V0cHV0X2JwY19jcnRj X21vZGVfY2hhbmdlZChzdHJ1Y3Qga3VuaXQgKnRlc3QpCj4gIAlwcml2ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2hkbWlfaW5pdCh0ZXN0LAo+ICAJCQkJCQkgICAgIEJJVChIRE1JX0NP TE9SU1BBQ0VfUkdCKSwKPiAgCQkJCQkJICAgICAxMCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05V TEwodGVzdCwgcHJpdik7Cj4gIAo+ICsJY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gKwlyZXQg PSBzZXRfY29ubmVjdG9yX2VkaWQodGVzdCwgY29ubiwKPiArCQkJCSB0ZXN0X2VkaWRfaGRtaV8x MDgwcF9yZ2JfeXV2X2RjX21heF8yMDBtaHosCj4gKwkJCQkgQVJSQVlfU0laRSh0ZXN0X2VkaWRf aGRtaV8xMDgwcF9yZ2JfeXV2X2RjX21heF8yMDBtaHopKTsKPiArCUtVTklUX0FTU0VSVF9FUSh0 ZXN0LCByZXQsIDApOwo+ICsKPiAgCWN0eCA9IGRybV9rdW5pdF9oZWxwZXJfYWNxdWlyZV9jdHhf YWxsb2ModGVzdCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIGN0eCk7 Cj4gIAo+IC0JY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gIAlwcmVmZXJyZWQgPSBmaW5kX3By ZWZlcnJlZF9tb2RlKGNvbm4pOwo+ICAJS1VOSVRfQVNTRVJUX05PVF9OVUxMKHRlc3QsIHByZWZl cnJlZCk7Cj4gIAo+ICAJZHJtID0gJnByaXYtPmRybTsKPiAgCWNydGMgPSBwcml2LT5jcnRjOwo+ IEBAIC0yNzAsMTUgKzI3MiwxNSBAQCBzdGF0aWMgdm9pZCBkcm1fdGVzdF9jaGVja19vdXRwdXRf YnBjX2NydGNfbW9kZV9jaGFuZ2VkKHN0cnVjdCBrdW5pdCAqdGVzdCkKPiAgCUtVTklUX0FTU0VS VF9OT1RfRVJSX09SX05VTEwodGVzdCwgbmV3X2Nvbm5fc3RhdGUpOwo+ICAKPiAgCW9sZF9jb25u X3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7 Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX0VSUl9PUl9OVUxMKHRlc3QsIG9sZF9jb25uX3N0YXRlKTsK PiAgCj4gLQluZXdfY29ubl9zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjID0gODsKPiArCW5ld19jb25u X3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyA9IDg7Cj4gIAo+ICAJS1VOSVRfQVNTRVJUX05FKHRl c3QsCj4gLQkJCW9sZF9jb25uX3N0YXRlLT5oZG1pLm91dHB1dF9icGMsCj4gLQkJCW5ld19jb25u X3N0YXRlLT5oZG1pLm91dHB1dF9icGMpOwo+ICsJCQlvbGRfY29ubl9zdGF0ZS0+bWF4X3JlcXVl c3RlZF9icGMsCj4gKwkJCW5ld19jb25uX3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyk7Cj4gIAo+ ICAJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKPiAgCUtVTklUX0FTU0VSVF9F USh0ZXN0LCByZXQsIDApOwo+ICAKPiAgCW9sZF9jb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRf b2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubik7Cj4gQEAgLTMxOCwxNCArMzIwLDE5IEBA IHN0YXRpYyB2b2lkIGRybV90ZXN0X2NoZWNrX291dHB1dF9icGNfY3J0Y19tb2RlX25vdF9jaGFu Z2VkKHN0cnVjdCBrdW5pdCAqdGVzdCkKPiAgCXByaXYgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfaGRtaV9pbml0KHRlc3QsCj4gIAkJCQkJCSAgICAgQklUKEhETUlfQ09MT1JTUEFDRV9S R0IpLAo+ICAJCQkJCQkgICAgIDEwKTsKPiAgCUtVTklUX0FTU0VSVF9OT1RfTlVMTCh0ZXN0LCBw cml2KTsKPiAgCj4gKwljb25uID0gJnByaXYtPmNvbm5lY3RvcjsKPiArCXJldCA9IHNldF9jb25u ZWN0b3JfZWRpZCh0ZXN0LCBjb25uLAo+ICsJCQkJIHRlc3RfZWRpZF9oZG1pXzEwODBwX3JnYl95 dXZfZGNfbWF4XzIwMG1oeiwKPiArCQkJCSBBUlJBWV9TSVpFKHRlc3RfZWRpZF9oZG1pXzEwODBw X3JnYl95dXZfZGNfbWF4XzIwMG1oeikpOwo+ICsJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJldCwg MCk7Cj4gKwo+ICAJY3R4ID0gZHJtX2t1bml0X2hlbHBlcl9hY3F1aXJlX2N0eF9hbGxvYyh0ZXN0 KTsKPiAgCUtVTklUX0FTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgY3R4KTsKPiAgCj4gLQlj b25uID0gJnByaXYtPmNvbm5lY3RvcjsKPiAgCXByZWZlcnJlZCA9IGZpbmRfcHJlZmVycmVkX21v ZGUoY29ubik7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05VTEwodGVzdCwgcHJlZmVycmVkKTsKPiAg Cj4gIAlkcm0gPSAmcHJpdi0+ZHJtOwo+ICAJY3J0YyA9IHByaXYtPmNydGM7Cj4gQEAgLTY2OCwx MSArNjc1LDExIEBAIHN0YXRpYyB2b2lkIGRybV90ZXN0X2NoZWNrX2Zvcm1hdF92YWx1ZShzdHJ1 Y3Qga3VuaXQgKnRlc3QpCj4gIAkJCQkJCSAgICAgOCk7Cj4gIAlLVU5JVF9BU1NFUlRfTk9UX05V TEwodGVzdCwgcHJpdik7Cj4gIAo+ICAJY29ubiA9ICZwcml2LT5jb25uZWN0b3I7Cj4gIAljb25u X3N0YXRlID0gY29ubi0+c3RhdGU7Cj4gLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgY29ubl9zdGF0 ZS0+aGRtaS5vdXRwdXRfZm9ybWF0LCBIRE1JX0NPTE9SU1BBQ0VfUkdCKTsKPiArCUtVTklUX0VY UEVDVF9FUSh0ZXN0LCBjb25uX3N0YXRlLT5oZG1pLm91dHB1dF9mb3JtYXQsIDApOwo+ICB9Cj4g IAo+ICAvKgo+ICAgKiBUZXN0IHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBvdXRwdXQgZm9ybWF0IHBy b3BlcnR5IG91dCBvZiByZXNldCBpcyBzZXQKPiAgICogdG8gMCwgYW5kIHdpbGwgYmUgY29tcHV0 ZWQgYXQgYXRvbWljX2NoZWNrIHRpbWUuCj4gCj4gLS0gCj4gMi40My4yCgotLSAKVmlsbGUgU3ly asOkbMOkCkludGVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==