From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx1.tq-group.com (mx1.tq-group.com [93.104.207.81]) (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 1C3CA55C15; Fri, 8 Mar 2024 11:26:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.104.207.81 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709897179; cv=none; b=XM3fnRO/o7nekdPlmHyyRUCPdrL9xFexaUIoUlIQdggRwS75nEjrHfYJfIR4HsDfqhaX27xJW6xppG1JKjg8MHVepplsvFwudMbzeZoHctcTG7KauWdglsnLyrF1saBdcLaBn/0pP/FCnIegPKBa16Sa2VEmYoQFAC5J5/TarnQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709897179; c=relaxed/simple; bh=C8oNyBpdlPU921QLvd4gKKqViOuj/nH5jByNm1KwM00=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Qs6pmlJrYKf7R0lGHG8tqCSniFAALExXHeMycvecUCGlvB/QazUFRdCbHclqScx5yIsYpJOkW4oqz8kFGs4/Ic5ASEWNI/W6V6GPoejgLEoXyQpT4b1gaqUJqdpOUHohai+/gnehbyV7yBNMf1R2a86BnCBYNaGXcOyiWn9xuuo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ew.tq-group.com; spf=pass smtp.mailfrom=ew.tq-group.com; dkim=pass (2048-bit key) header.d=tq-group.com header.i=@tq-group.com header.b=ZGmCMHSU; arc=none smtp.client-ip=93.104.207.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ew.tq-group.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ew.tq-group.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=tq-group.com header.i=@tq-group.com header.b="ZGmCMHSU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1709897175; x=1741433175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3XEDr/u0bX7GLSURb+lX54qKf7q5lzFuBl44pcpwkWk=; b=ZGmCMHSU5XHUK/WRiDgkwIdzOuB8Y7OhCi/HuoV9u/aqNAhIEcrhRPZR lKRZ9z6zIiALzy5qgPqJcwTSwFMqb1v+UvaWTlCZS3MA7V3NrGrru8dEb AkhkdWLrNjTzmhEQuWw5XNkUqj8yXX05s5PtuyNzDRvGP78gfPP26O4if Rn8wV8py5GOg7qGTdMoZl9VIJUT04uUp3MYX/iSJcO9dXigjuxg3EPXTj TLCsPy86aDOCAuCQGsq890zL0WVw57aS+uxdo73/u0nBVOJrjgAJF7bYn rKdzqym6YXEZiWdldTgDr6o02hCO9T0yNJoV69x/O/AEYa60bmFTRERyg g==; X-IronPort-AV: E=Sophos;i="6.07,109,1708383600"; d="scan'208";a="35807667" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 08 Mar 2024 12:26:13 +0100 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 7AA7928007C; Fri, 8 Mar 2024 12:26:12 +0100 (CET) From: Alexander Stein To: 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 , dri-devel@lists.freedesktop.org Cc: Hans Verkuil , Sebastian Wick , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , 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, Maxime Ripard , Dave Stevenson , Pekka Paalanen , Maxime Ripard Subject: Re: [PATCH v8 16/27] drm/connector: hdmi: Add Broadcast RGB property Date: Fri, 08 Mar 2024 12:26:14 +0100 Message-ID: <2599919.Lt9SDvczpP@steina-w> Organization: TQ-Systems GmbH In-Reply-To: <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> References: <20240307-kms-hdmi-connector-state-v8-0-ef6a6f31964b@kernel.org> <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Hi Maxime, Am Donnerstag, 7. M=C3=A4rz 2024, 14:38:43 CET schrieb Maxime Ripard: > The i915 driver has a property to force the RGB range of an HDMI output. > The vc4 driver then implemented the same property with the same > semantics. KWin has support for it, and a PR for mutter is also there to > support it. >=20 > Both drivers implementing the same property with the same semantics, > plus the userspace having support for it, is proof enough that it's > pretty much a de-facto standard now and we can provide helpers for it. >=20 > Let's plumb it into the newly created HDMI connector. >=20 > Reviewed-by: Dave Stevenson > Acked-by: Pekka Paalanen > Reviewed-by: Sebastian Wick > Signed-off-by: Maxime Ripard > --- > Documentation/gpu/kms-properties.csv | 1 - > drivers/gpu/drm/drm_atomic.c | 2 + > drivers/gpu/drm/drm_atomic_state_helper.c | 4 +- > drivers/gpu/drm/drm_atomic_uapi.c | 4 ++ > drivers/gpu/drm/drm_connector.c | 88 +++++++++++++++++++++++++= ++++++ > include/drm/drm_connector.h | 36 +++++++++++++ > 6 files changed, 133 insertions(+), 2 deletions(-) >=20 > diff --git a/Documentation/gpu/kms-properties.csv b/Documentation/gpu/kms= =2Dproperties.csv > index 0f9590834829..caef14c532d4 100644 > --- a/Documentation/gpu/kms-properties.csv > +++ b/Documentation/gpu/kms-properties.csv > @@ -15,11 +15,10 @@ Owner Module/Drivers,Group,Property Name,Type,Propert= y Values,Object attached,De > ,,=E2=80=9Csaturation=E2=80=9D,RANGE,"Min=3D0, Max=3D100",Connector,TBD > ,,=E2=80=9Chue=E2=80=9D,RANGE,"Min=3D0, Max=3D100",Connector,TBD > ,Virtual GPU,=E2=80=9Csuggested X=E2=80=9D,RANGE,"Min=3D0, Max=3D0xfffff= fff",Connector,property to suggest an X offset for a connector > ,,=E2=80=9Csuggested Y=E2=80=9D,RANGE,"Min=3D0, Max=3D0xffffffff",Connec= tor,property to suggest an Y offset for a connector > ,Optional,"""aspect ratio""",ENUM,"{ ""None"", ""4:3"", ""16:9"" }",Conn= ector,TDB > -i915,Generic,"""Broadcast RGB""",ENUM,"{ ""Automatic"", ""Full"", ""Limi= ted 16:235"" }",Connector,"When this property is set to Limited 16:235 and = CTM is set, the hardware will be programmed with the result of the multipli= cation of CTM by the limited range matrix to ensure the pixels normally in = the range 0..1.0 are remapped to the range 16/255..235/255." > ,,=E2=80=9Caudio=E2=80=9D,ENUM,"{ ""force-dvi"", ""off"", ""auto"", ""on= "" }",Connector,TBD > ,SDVO-TV,=E2=80=9Cmode=E2=80=9D,ENUM,"{ ""NTSC_M"", ""NTSC_J"", ""NTSC_4= 43"", ""PAL_B"" } etc.",Connector,TBD > ,,"""left_margin""",RANGE,"Min=3D0, Max=3D SDVO dependent",Connector,TBD > ,,"""right_margin""",RANGE,"Min=3D0, Max=3D SDVO dependent",Connector,TBD > ,,"""top_margin""",RANGE,"Min=3D0, Max=3D SDVO dependent",Connector,TBD > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index 26f9e525c0a0..3e57d98d8418 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -1143,10 +1143,12 @@ static void drm_atomic_connector_print_state(stru= ct drm_printer *p, > drm_printf(p, "\tmax_requested_bpc=3D%d\n", state->max_requested_bpc); > drm_printf(p, "\tcolorspace=3D%s\n", drm_get_colorspace_name(state->col= orspace)); > =20 > if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_HDMIA || > connector->connector_type =3D=3D DRM_MODE_CONNECTOR_HDMIB) { > + drm_printf(p, "\tbroadcast_rgb=3D%s\n", > + drm_hdmi_connector_get_broadcast_rgb_name(state->hdmi.broadcast_rg= b)); > drm_printf(p, "\toutput_bpc=3D%u\n", state->hdmi.output_bpc); > drm_printf(p, "\toutput_format=3D%s\n", > drm_hdmi_connector_get_output_format_name(state->hdmi.output_forma= t)); > drm_printf(p, "\ttmds_char_rate=3D%llu\n", state->hdmi.tmds_char_rate); > } > diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/= drm_atomic_state_helper.c > index 9f517599f117..0e8fb653965a 100644 > --- a/drivers/gpu/drm/drm_atomic_state_helper.c > +++ b/drivers/gpu/drm/drm_atomic_state_helper.c > @@ -587,10 +587,11 @@ void __drm_atomic_helper_connector_hdmi_reset(struc= t drm_connector *connector, > { > unsigned int max_bpc =3D connector->max_bpc; > =20 > new_state->max_bpc =3D max_bpc; > new_state->max_requested_bpc =3D max_bpc; > + new_state->hdmi.broadcast_rgb =3D DRM_HDMI_BROADCAST_RGB_AUTO; > } > EXPORT_SYMBOL(__drm_atomic_helper_connector_hdmi_reset); > =20 > /** > * drm_atomic_helper_connector_tv_check - Validate an analog TV connecto= r state > @@ -911,11 +912,12 @@ int drm_atomic_helper_connector_hdmi_check(struct d= rm_connector *connector, > =20 > ret =3D hdmi_compute_config(connector, new_state, mode); > if (ret) > return ret; > =20 > - if (old_state->hdmi.output_bpc !=3D new_state->hdmi.output_bpc || > + if (old_state->hdmi.broadcast_rgb !=3D new_state->hdmi.broadcast_rgb || > + old_state->hdmi.output_bpc !=3D new_state->hdmi.output_bpc || > old_state->hdmi.output_format !=3D new_state->hdmi.output_format) { > struct drm_crtc *crtc =3D new_state->crtc; > struct drm_crtc_state *crtc_state; > =20 > crtc_state =3D drm_atomic_get_crtc_state(state, crtc); > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atom= ic_uapi.c > index 29d4940188d4..2b415b4ed506 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -774,10 +774,12 @@ static int drm_atomic_connector_set_property(struct= drm_connector *connector, > fence_ptr); > } else if (property =3D=3D connector->max_bpc_property) { > state->max_requested_bpc =3D val; > } else if (property =3D=3D connector->privacy_screen_sw_state_property)= { > state->privacy_screen_sw_state =3D val; > + } else if (property =3D=3D connector->broadcast_rgb_property) { > + state->hdmi.broadcast_rgb =3D val; > } else if (connector->funcs->atomic_set_property) { > return connector->funcs->atomic_set_property(connector, > state, property, val); > } else { > drm_dbg_atomic(connector->dev, > @@ -857,10 +859,12 @@ drm_atomic_connector_get_property(struct drm_connec= tor *connector, > *val =3D 0; > } else if (property =3D=3D connector->max_bpc_property) { > *val =3D state->max_requested_bpc; > } else if (property =3D=3D connector->privacy_screen_sw_state_property)= { > *val =3D state->privacy_screen_sw_state; > + } else if (property =3D=3D connector->broadcast_rgb_property) { > + *val =3D state->hdmi.broadcast_rgb; > } else if (connector->funcs->atomic_get_property) { > return connector->funcs->atomic_get_property(connector, > state, property, val); > } else { > drm_dbg_atomic(dev, > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connec= tor.c > index 591d2d500f61..0272e1d05cc6 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1210,10 +1210,33 @@ static const u32 dp_colorspaces =3D > BIT(DRM_MODE_COLORIMETRY_SYCC_601) | > BIT(DRM_MODE_COLORIMETRY_OPYCC_601) | > BIT(DRM_MODE_COLORIMETRY_BT2020_CYCC) | > BIT(DRM_MODE_COLORIMETRY_BT2020_YCC); > =20 > +static const struct drm_prop_enum_list broadcast_rgb_names[] =3D { > + { DRM_HDMI_BROADCAST_RGB_AUTO, "Automatic" }, > + { DRM_HDMI_BROADCAST_RGB_FULL, "Full" }, > + { DRM_HDMI_BROADCAST_RGB_LIMITED, "Limited 16:235" }, > +}; > + > +/* > + * drm_hdmi_connector_get_broadcast_rgb_name - Return a string for HDMI = connector RGB broadcast selection > + * @broadcast_rgb: Broadcast RGB selection to compute name of > + * > + * Returns: the name of the Broadcast RGB selection, or NULL if the type > + * is not valid. > + */ > +const char * > +drm_hdmi_connector_get_broadcast_rgb_name(enum drm_hdmi_broadcast_rgb br= oadcast_rgb) > +{ > + if (broadcast_rgb > DRM_HDMI_BROADCAST_RGB_LIMITED) I don't know if this was brought up before. IMHO it's easier to read checki= ng: if (broadcast_rgb > ARRAY_SIZE(broadcast_rgb_names) Best regards, Alexander > + return NULL; > + > + return broadcast_rgb_names[broadcast_rgb].name; > +} > +EXPORT_SYMBOL(drm_hdmi_connector_get_broadcast_rgb_name); > + > static const char * const output_format_str[] =3D { > [HDMI_COLORSPACE_RGB] =3D "RGB", > [HDMI_COLORSPACE_YUV420] =3D "YUV 4:2:0", > [HDMI_COLORSPACE_YUV422] =3D "YUV 4:2:2", > [HDMI_COLORSPACE_YUV444] =3D "YUV 4:4:4", > @@ -1706,10 +1729,42 @@ void drm_connector_attach_dp_subconnector_propert= y(struct drm_connector *connect > EXPORT_SYMBOL(drm_connector_attach_dp_subconnector_property); > =20 > /** > * DOC: HDMI connector properties > * > + * Broadcast RGB (HDMI specific) > + * Indicates the Quantization Range (Full vs Limited) used. The col= or > + * processing pipeline will be adjusted to match the value of the > + * property, and the Infoframes will be generated and sent accordin= gly. > + * > + * This property is only relevant if the HDMI output format is RGB.= If > + * it's one of the YCbCr variant, it will be ignored. > + * > + * The CRTC attached to the connector must be configured by user-sp= ace to > + * always produce full-range pixels. > + * > + * The value of this property can be one of the following: > + * > + * Automatic: > + * The quantization range is selected automatically based o= n the > + * mode according to the HDMI specifications (HDMI 1.4b - S= ection > + * 6.6 - Video Quantization Ranges). > + * > + * Full: > + * Full quantization range is forced. > + * > + * Limited 16:235: > + * Limited quantization range is forced. Unlike the name su= ggests, > + * this works for any number of bits-per-component. > + * > + * Property values other than Automatic can result in colors being = off (if > + * limited is selected but the display expects full), or a black sc= reen > + * (if full is selected but the display expects limited). > + * > + * Drivers can set up this property by calling > + * drm_connector_attach_broadcast_rgb_property(). > + * > * content type (HDMI specific): > * Indicates content type setting to be used in HDMI infoframes to indic= ate > * content type for the external device, so that it adjusts its display > * settings accordingly. > * > @@ -2568,10 +2623,43 @@ int drm_connector_attach_hdr_output_metadata_prop= erty(struct drm_connector *conn > =20 > return 0; > } > EXPORT_SYMBOL(drm_connector_attach_hdr_output_metadata_property); > =20 > +/** > + * drm_connector_attach_broadcast_rgb_property - attach "Broadcast RGB" = property > + * @connector: connector to attach the property on. > + * > + * This is used to add support for forcing the RGB range on a connector > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_attach_broadcast_rgb_property(struct drm_connector *co= nnector) > +{ > + struct drm_device *dev =3D connector->dev; > + struct drm_property *prop; > + > + prop =3D connector->broadcast_rgb_property; > + if (!prop) { > + prop =3D drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, > + "Broadcast RGB", > + broadcast_rgb_names, > + ARRAY_SIZE(broadcast_rgb_names)); > + if (!prop) > + return -EINVAL; > + > + connector->broadcast_rgb_property =3D prop; > + } > + > + drm_object_attach_property(&connector->base, prop, > + DRM_HDMI_BROADCAST_RGB_AUTO); > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_attach_broadcast_rgb_property); > + > /** > * drm_connector_attach_colorspace_property - attach "Colorspace" proper= ty > * @connector: connector to attach the property on. > * > * This is used to allow the userspace to signal the output colorspace > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 8cda902934cd..bb6b6a36ade3 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -367,10 +367,33 @@ enum drm_panel_orientation { > DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP, > DRM_MODE_PANEL_ORIENTATION_LEFT_UP, > DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, > }; > =20 > +/** > + * enum drm_hdmi_broadcast_rgb - Broadcast RGB Selection for an HDMI @dr= m_connector > + */ > +enum drm_hdmi_broadcast_rgb { > + /** > + * @DRM_HDMI_BROADCAST_RGB_AUTO: The RGB range is selected > + * automatically based on the mode. > + */ > + DRM_HDMI_BROADCAST_RGB_AUTO, > + > + /** > + * @DRM_HDMI_BROADCAST_RGB_FULL: Full range RGB is forced. > + */ > + DRM_HDMI_BROADCAST_RGB_FULL, > + > + /** > + * @DRM_HDMI_BROADCAST_RGB_LIMITED: Limited range RGB is forced. > + */ > + DRM_HDMI_BROADCAST_RGB_LIMITED, > +}; > + > +const char * > +drm_hdmi_connector_get_broadcast_rgb_name(enum drm_hdmi_broadcast_rgb br= oadcast_rgb); > const char * > drm_hdmi_connector_get_output_format_name(enum hdmi_colorspace fmt); > =20 > /** > * struct drm_monitor_range_info - Panel's Monitor range in EDID for > @@ -1039,10 +1062,16 @@ struct drm_connector_state { > /** > * @hdmi: HDMI-related variable and properties. Filled by > * @drm_atomic_helper_connector_hdmi_check(). > */ > struct { > + /** > + * @broadcast_rgb: Connector property to pass the > + * Broadcast RGB selection value. > + */ > + enum drm_hdmi_broadcast_rgb broadcast_rgb; > + > /** > * @output_bpc: Bits per color channel to output. > */ > unsigned int output_bpc; > =20 > @@ -1751,10 +1780,16 @@ struct drm_connector { > * @privacy_screen_hw_state_property: Optional atomic property for the > * connector to report the actual integrated privacy screen state. > */ > struct drm_property *privacy_screen_hw_state_property; > =20 > + /** > + * @broadcast_rgb_property: Connector property to set the > + * Broadcast RGB selection to output with. > + */ > + struct drm_property *broadcast_rgb_property; > + > #define DRM_CONNECTOR_POLL_HPD (1 << 0) > #define DRM_CONNECTOR_POLL_CONNECT (1 << 1) > #define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2) > =20 > /** > @@ -2090,10 +2125,11 @@ int drm_mode_create_scaling_mode_property(struct = drm_device *dev); > int drm_connector_attach_content_type_property(struct drm_connector *dev= ); > int drm_connector_attach_scaling_mode_property(struct drm_connector *con= nector, > u32 scaling_mode_mask); > int drm_connector_attach_vrr_capable_property( > struct drm_connector *connector); > +int drm_connector_attach_broadcast_rgb_property(struct drm_connector *co= nnector); > int drm_connector_attach_colorspace_property(struct drm_connector *conne= ctor); > int drm_connector_attach_hdr_output_metadata_property(struct drm_connect= or *connector); > bool drm_connector_atomic_hdr_metadata_equal(struct drm_connector_state = *old_state, > struct drm_connector_state *new_state); > int drm_mode_create_aspect_ratio_property(struct drm_device *dev); >=20 >=20 =2D-=20 TQ-Systems GmbH | M=C3=BChlstra=C3=9Fe 2, Gut Delling | 82229 Seefeld, Germ= any Amtsgericht M=C3=BCnchen, HRB 105018 Gesch=C3=A4ftsf=C3=BChrer: Detlef Schneider, R=C3=BCdiger Stahl, Stefan Sch= neider http://www.tq-group.com/ 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 47178C54E4A for ; Fri, 8 Mar 2024 11:26:29 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mmQHzoRAtSK8xDAqdm9FlvZh/z98pWIb0+yw4UQ05dY=; b=rx27SuYylJXF5w tkURsOCe2+mQ5BFA9lj0wLzFBhVlnK29j7+HqXmyC6Dz6FYPfrTr5PtuwgmPOiweSLWT4QMIzEqmr lZ3IbU64x81xo0uTqKEjjCT0FFxjznoRdCxWfgIX9nWLMeX6mLd5imx/IpKh1FUavE7Jqe/bXfdc+ +/j5voANSLXPFiCHRfQiHxeSLE4ySHslSe3jEIy8rcUiKl487vSap3DOcHkJEuadz5zx0gQ+zG+CT br7DMyaFsDiOzbHGpCOsc59D6xfDHNdjJntNkTi4EFpm4gslON2jvYIRffgaO7OEN3hNkQ+7iFR5r 1SrQzqChxSgllWXhN1+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1riYMm-00000008yPN-1g24; Fri, 08 Mar 2024 11:26:20 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1riYMh-00000008yMa-1zSV; Fri, 08 Mar 2024 11:26:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1709897175; x=1741433175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3XEDr/u0bX7GLSURb+lX54qKf7q5lzFuBl44pcpwkWk=; b=ZGmCMHSU5XHUK/WRiDgkwIdzOuB8Y7OhCi/HuoV9u/aqNAhIEcrhRPZR lKRZ9z6zIiALzy5qgPqJcwTSwFMqb1v+UvaWTlCZS3MA7V3NrGrru8dEb AkhkdWLrNjTzmhEQuWw5XNkUqj8yXX05s5PtuyNzDRvGP78gfPP26O4if Rn8wV8py5GOg7qGTdMoZl9VIJUT04uUp3MYX/iSJcO9dXigjuxg3EPXTj TLCsPy86aDOCAuCQGsq890zL0WVw57aS+uxdo73/u0nBVOJrjgAJF7bYn rKdzqym6YXEZiWdldTgDr6o02hCO9T0yNJoV69x/O/AEYa60bmFTRERyg g==; X-IronPort-AV: E=Sophos;i="6.07,109,1708383600"; d="scan'208";a="35807667" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 08 Mar 2024 12:26:13 +0100 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 7AA7928007C; Fri, 8 Mar 2024 12:26:12 +0100 (CET) From: Alexander Stein To: 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 , dri-devel@lists.freedesktop.org Cc: Hans Verkuil , Sebastian Wick , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , 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, Maxime Ripard , Dave Stevenson , Pekka Paalanen , Maxime Ripard Subject: Re: [PATCH v8 16/27] drm/connector: hdmi: Add Broadcast RGB property Date: Fri, 08 Mar 2024 12:26:14 +0100 Message-ID: <2599919.Lt9SDvczpP@steina-w> Organization: TQ-Systems GmbH In-Reply-To: <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> References: <20240307-kms-hdmi-connector-state-v8-0-ef6a6f31964b@kernel.org> <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240308_032616_079490_C5FE4344 X-CRM114-Status: GOOD ( 41.01 ) 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 SGkgTWF4aW1lLAoKQW0gRG9ubmVyc3RhZywgNy4gTcOkcnogMjAyNCwgMTQ6Mzg6NDMgQ0VUIHNj aHJpZWIgTWF4aW1lIFJpcGFyZDoKPiBUaGUgaTkxNSBkcml2ZXIgaGFzIGEgcHJvcGVydHkgdG8g Zm9yY2UgdGhlIFJHQiByYW5nZSBvZiBhbiBIRE1JIG91dHB1dC4KPiBUaGUgdmM0IGRyaXZlciB0 aGVuIGltcGxlbWVudGVkIHRoZSBzYW1lIHByb3BlcnR5IHdpdGggdGhlIHNhbWUKPiBzZW1hbnRp Y3MuIEtXaW4gaGFzIHN1cHBvcnQgZm9yIGl0LCBhbmQgYSBQUiBmb3IgbXV0dGVyIGlzIGFsc28g dGhlcmUgdG8KPiBzdXBwb3J0IGl0Lgo+IAo+IEJvdGggZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhl IHNhbWUgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MsCj4gcGx1cyB0aGUgdXNlcnNw YWNlIGhhdmluZyBzdXBwb3J0IGZvciBpdCwgaXMgcHJvb2YgZW5vdWdoIHRoYXQgaXQncwo+IHBy ZXR0eSBtdWNoIGEgZGUtZmFjdG8gc3RhbmRhcmQgbm93IGFuZCB3ZSBjYW4gcHJvdmlkZSBoZWxw ZXJzIGZvciBpdC4KPiAKPiBMZXQncyBwbHVtYiBpdCBpbnRvIHRoZSBuZXdseSBjcmVhdGVkIEhE TUkgY29ubmVjdG9yLgo+IAo+IFJldmlld2VkLWJ5OiBEYXZlIFN0ZXZlbnNvbiA8ZGF2ZS5zdGV2 ZW5zb25AcmFzcGJlcnJ5cGkuY29tPgo+IEFja2VkLWJ5OiBQZWtrYSBQYWFsYW5lbiA8cGVra2Eu cGFhbGFuZW5AY29sbGFib3JhLmNvbT4KPiBSZXZpZXdlZC1ieTogU2ViYXN0aWFuIFdpY2sgPHNl YmFzdGlhbi53aWNrQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8 bXJpcGFyZEBrZXJuZWwub3JnPgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2dwdS9rbXMtcHJvcGVy dGllcy5jc3YgICAgICB8ICAxIC0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyAgICAg ICAgICAgICAgfCAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBl ci5jIHwgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jICAgICAgICAg fCAgNCArKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jICAgICAgICAgICB8IDg4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5l Y3Rvci5oICAgICAgICAgICAgICAgfCAzNiArKysrKysrKysrKysrCj4gIDYgZmlsZXMgY2hhbmdl ZCwgMTMzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdiBiL0RvY3VtZW50YXRpb24vZ3B1L2tt cy1wcm9wZXJ0aWVzLmNzdgo+IGluZGV4IDBmOTU5MDgzNDgyOS4uY2FlZjE0YzUzMmQ0IDEwMDY0 NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdgo+ICsrKyBiL0Rv Y3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdgo+IEBAIC0xNSwxMSArMTUsMTAgQEAg T3duZXIgTW9kdWxlL0RyaXZlcnMsR3JvdXAsUHJvcGVydHkgTmFtZSxUeXBlLFByb3BlcnR5IFZh bHVlcyxPYmplY3QgYXR0YWNoZWQsRGUKPiAgLCzigJxzYXR1cmF0aW9u4oCdLFJBTkdFLCJNaW49 MCwgTWF4PTEwMCIsQ29ubmVjdG9yLFRCRAo+ICAsLOKAnGh1ZeKAnSxSQU5HRSwiTWluPTAsIE1h eD0xMDAiLENvbm5lY3RvcixUQkQKPiAgLFZpcnR1YWwgR1BVLOKAnHN1Z2dlc3RlZCBY4oCdLFJB TkdFLCJNaW49MCwgTWF4PTB4ZmZmZmZmZmYiLENvbm5lY3Rvcixwcm9wZXJ0eSB0byBzdWdnZXN0 IGFuIFggb2Zmc2V0IGZvciBhIGNvbm5lY3Rvcgo+ICAsLOKAnHN1Z2dlc3RlZCBZ4oCdLFJBTkdF LCJNaW49MCwgTWF4PTB4ZmZmZmZmZmYiLENvbm5lY3Rvcixwcm9wZXJ0eSB0byBzdWdnZXN0IGFu IFkgb2Zmc2V0IGZvciBhIGNvbm5lY3Rvcgo+ICAsT3B0aW9uYWwsIiIiYXNwZWN0IHJhdGlvIiIi LEVOVU0sInsgIiJOb25lIiIsICIiNDozIiIsICIiMTY6OSIiIH0iLENvbm5lY3RvcixUREIKPiAt aTkxNSxHZW5lcmljLCIiIkJyb2FkY2FzdCBSR0IiIiIsRU5VTSwieyAiIkF1dG9tYXRpYyIiLCAi IkZ1bGwiIiwgIiJMaW1pdGVkIDE2OjIzNSIiIH0iLENvbm5lY3RvciwiV2hlbiB0aGlzIHByb3Bl cnR5IGlzIHNldCB0byBMaW1pdGVkIDE2OjIzNSBhbmQgQ1RNIGlzIHNldCwgdGhlIGhhcmR3YXJl IHdpbGwgYmUgcHJvZ3JhbW1lZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxpY2F0aW9u IG9mIENUTSBieSB0aGUgbGltaXRlZCByYW5nZSBtYXRyaXggdG8gZW5zdXJlIHRoZSBwaXhlbHMg bm9ybWFsbHkgaW4gdGhlIHJhbmdlIDAuLjEuMCBhcmUgcmVtYXBwZWQgdG8gdGhlIHJhbmdlIDE2 LzI1NS4uMjM1LzI1NS4iCj4gICws4oCcYXVkaW/igJ0sRU5VTSwieyAiImZvcmNlLWR2aSIiLCAi Im9mZiIiLCAiImF1dG8iIiwgIiJvbiIiIH0iLENvbm5lY3RvcixUQkQKPiAgLFNEVk8tVFYs4oCc bW9kZeKAnSxFTlVNLCJ7ICIiTlRTQ19NIiIsICIiTlRTQ19KIiIsICIiTlRTQ180NDMiIiwgIiJQ QUxfQiIiIH0gZXRjLiIsQ29ubmVjdG9yLFRCRAo+ICAsLCIiImxlZnRfbWFyZ2luIiIiLFJBTkdF LCJNaW49MCwgTWF4PSBTRFZPIGRlcGVuZGVudCIsQ29ubmVjdG9yLFRCRAo+ICAsLCIiInJpZ2h0 X21hcmdpbiIiIixSQU5HRSwiTWluPTAsIE1heD0gU0RWTyBkZXBlbmRlbnQiLENvbm5lY3RvcixU QkQKPiAgLCwiIiJ0b3BfbWFyZ2luIiIiLFJBTkdFLCJNaW49MCwgTWF4PSBTRFZPIGRlcGVuZGVu dCIsQ29ubmVjdG9yLFRCRAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+IGluZGV4IDI2ZjllNTI1YzBhMC4u M2U1N2Q5OGQ4NDE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gQEAgLTExNDMsMTAgKzExNDMs MTIgQEAgc3RhdGljIHZvaWQgZHJtX2F0b21pY19jb25uZWN0b3JfcHJpbnRfc3RhdGUoc3RydWN0 IGRybV9wcmludGVyICpwLAo+ICAJZHJtX3ByaW50ZihwLCAiXHRtYXhfcmVxdWVzdGVkX2JwYz0l ZFxuIiwgc3RhdGUtPm1heF9yZXF1ZXN0ZWRfYnBjKTsKPiAgCWRybV9wcmludGYocCwgIlx0Y29s b3JzcGFjZT0lc1xuIiwgZHJtX2dldF9jb2xvcnNwYWNlX25hbWUoc3RhdGUtPmNvbG9yc3BhY2Up KTsKPiAgCj4gIAlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05O RUNUT1JfSERNSUEgfHwKPiAgCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9N T0RFX0NPTk5FQ1RPUl9IRE1JQikgewo+ICsJCWRybV9wcmludGYocCwgIlx0YnJvYWRjYXN0X3Jn Yj0lc1xuIiwKPiArCQkJICAgZHJtX2hkbWlfY29ubmVjdG9yX2dldF9icm9hZGNhc3RfcmdiX25h bWUoc3RhdGUtPmhkbWkuYnJvYWRjYXN0X3JnYikpOwo+ICAJCWRybV9wcmludGYocCwgIlx0b3V0 cHV0X2JwYz0ldVxuIiwgc3RhdGUtPmhkbWkub3V0cHV0X2JwYyk7Cj4gIAkJZHJtX3ByaW50Zihw LCAiXHRvdXRwdXRfZm9ybWF0PSVzXG4iLAo+ICAJCQkgICBkcm1faGRtaV9jb25uZWN0b3JfZ2V0 X291dHB1dF9mb3JtYXRfbmFtZShzdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KSk7Cj4gIAkJZHJt X3ByaW50ZihwLCAiXHR0bWRzX2NoYXJfcmF0ZT0lbGx1XG4iLCBzdGF0ZS0+aGRtaS50bWRzX2No YXJfcmF0ZSk7Cj4gIAl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X3N0YXRlX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVy LmMKPiBpbmRleCA5ZjUxNzU5OWYxMTcuLjBlOGZiNjUzOTY1YSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jCj4gQEAgLTU4NywxMCArNTg3LDExIEBAIHZv aWQgX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfaGRtaV9yZXNldChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+ICB7Cj4gIAl1bnNpZ25lZCBpbnQgbWF4X2JwYyA9IGNvbm5l Y3Rvci0+bWF4X2JwYzsKPiAgCj4gIAluZXdfc3RhdGUtPm1heF9icGMgPSBtYXhfYnBjOwo+ICAJ bmV3X3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyA9IG1heF9icGM7Cj4gKwluZXdfc3RhdGUtPmhk bWkuYnJvYWRjYXN0X3JnYiA9IERSTV9IRE1JX0JST0FEQ0FTVF9SR0JfQVVUTzsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2hkbWlfcmVzZXQpOwo+ ICAKPiAgLyoqCj4gICAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl90dl9jaGVjayAtIFZh bGlkYXRlIGFuIGFuYWxvZyBUViBjb25uZWN0b3Igc3RhdGUKPiBAQCAtOTExLDExICs5MTIsMTIg QEAgaW50IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAo+ICAJcmV0ID0gaGRtaV9jb21wdXRlX2NvbmZpZyhj b25uZWN0b3IsIG5ld19zdGF0ZSwgbW9kZSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7 Cj4gIAo+IC0JaWYgKG9sZF9zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjICE9IG5ld19zdGF0ZS0+aGRt aS5vdXRwdXRfYnBjIHx8Cj4gKwlpZiAob2xkX3N0YXRlLT5oZG1pLmJyb2FkY2FzdF9yZ2IgIT0g bmV3X3N0YXRlLT5oZG1pLmJyb2FkY2FzdF9yZ2IgfHwKPiArCSAgICBvbGRfc3RhdGUtPmhkbWku b3V0cHV0X2JwYyAhPSBuZXdfc3RhdGUtPmhkbWkub3V0cHV0X2JwYyB8fAo+ICAJICAgIG9sZF9z dGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0ICE9IG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0 KSB7Cj4gIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3N0YXRlLT5jcnRjOwo+ICAJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCj4gIAkJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Y191YXBpLmMKPiBpbmRleCAyOWQ0OTQwMTg4ZDQuLjJiNDE1YjRlZDUwNiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY191YXBpLmMKPiBAQCAtNzc0LDEwICs3NzQsMTIgQEAgc3RhdGljIGludCBk cm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKPiAgCQkJCQkJICAgZmVuY2VfcHRyKTsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29ubmVjdG9yLT5tYXhfYnBjX3Byb3BlcnR5KSB7Cj4gIAkJc3RhdGUtPm1heF9yZXF1ZXN0 ZWRfYnBjID0gdmFsOwo+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnByaXZh Y3lfc2NyZWVuX3N3X3N0YXRlX3Byb3BlcnR5KSB7Cj4gIAkJc3RhdGUtPnByaXZhY3lfc2NyZWVu X3N3X3N0YXRlID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmJy b2FkY2FzdF9yZ2JfcHJvcGVydHkpIHsKPiArCQlzdGF0ZS0+aGRtaS5icm9hZGNhc3RfcmdiID0g dmFsOwo+ICAJfSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5 KSB7Cj4gIAkJcmV0dXJuIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19zZXRfcHJvcGVydHkoY29u bmVjdG9yLAo+ICAJCQkJc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ICAJfSBlbHNlIHsKPiAgCQlk cm1fZGJnX2F0b21pYyhjb25uZWN0b3ItPmRldiwKPiBAQCAtODU3LDEwICs4NTksMTIgQEAgZHJt X2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gIAkJKnZhbCA9IDA7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rv ci0+bWF4X2JwY19wcm9wZXJ0eSkgewo+ICAJCSp2YWwgPSBzdGF0ZS0+bWF4X3JlcXVlc3RlZF9i cGM7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5f c3dfc3RhdGVfcHJvcGVydHkpIHsKPiAgCQkqdmFsID0gc3RhdGUtPnByaXZhY3lfc2NyZWVuX3N3 X3N0YXRlOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmJyb2FkY2FzdF9y Z2JfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPmhkbWkuYnJvYWRjYXN0X3JnYjsKPiAg CX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkgewo+ICAJ CXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNvbm5lY3RvciwK PiAgCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiAgCX0gZWxzZSB7Cj4gIAkJZHJtX2RiZ19h dG9taWMoZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYwo+IGluZGV4IDU5MWQyZDUwMGY2MS4u MDI3MmUxZDA1Y2M2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9y LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jCj4gQEAgLTEyMTAsMTAg KzEyMTAsMzMgQEAgc3RhdGljIGNvbnN0IHUzMiBkcF9jb2xvcnNwYWNlcyA9Cj4gIAlCSVQoRFJN X01PREVfQ09MT1JJTUVUUllfU1lDQ182MDEpIHwKPiAgCUJJVChEUk1fTU9ERV9DT0xPUklNRVRS WV9PUFlDQ182MDEpIHwKPiAgCUJJVChEUk1fTU9ERV9DT0xPUklNRVRSWV9CVDIwMjBfQ1lDQykg fAo+ICAJQklUKERSTV9NT0RFX0NPTE9SSU1FVFJZX0JUMjAyMF9ZQ0MpOwo+ICAKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgYnJvYWRjYXN0X3JnYl9uYW1lc1tdID0g ewo+ICsJeyBEUk1fSERNSV9CUk9BRENBU1RfUkdCX0FVVE8sICJBdXRvbWF0aWMiIH0sCj4gKwl7 IERSTV9IRE1JX0JST0FEQ0FTVF9SR0JfRlVMTCwgIkZ1bGwiIH0sCj4gKwl7IERSTV9IRE1JX0JS T0FEQ0FTVF9SR0JfTElNSVRFRCwgIkxpbWl0ZWQgMTY6MjM1IiB9LAo+ICt9Owo+ICsKPiArLyoK PiArICogZHJtX2hkbWlfY29ubmVjdG9yX2dldF9icm9hZGNhc3RfcmdiX25hbWUgLSBSZXR1cm4g YSBzdHJpbmcgZm9yIEhETUkgY29ubmVjdG9yIFJHQiBicm9hZGNhc3Qgc2VsZWN0aW9uCj4gKyAq IEBicm9hZGNhc3RfcmdiOiBCcm9hZGNhc3QgUkdCIHNlbGVjdGlvbiB0byBjb21wdXRlIG5hbWUg b2YKPiArICoKPiArICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIEJyb2FkY2FzdCBSR0Igc2Vs ZWN0aW9uLCBvciBOVUxMIGlmIHRoZSB0eXBlCj4gKyAqIGlzIG5vdCB2YWxpZC4KPiArICovCj4g K2NvbnN0IGNoYXIgKgo+ICtkcm1faGRtaV9jb25uZWN0b3JfZ2V0X2Jyb2FkY2FzdF9yZ2JfbmFt ZShlbnVtIGRybV9oZG1pX2Jyb2FkY2FzdF9yZ2IgYnJvYWRjYXN0X3JnYikKPiArewo+ICsJaWYg KGJyb2FkY2FzdF9yZ2IgPiBEUk1fSERNSV9CUk9BRENBU1RfUkdCX0xJTUlURUQpCgpJIGRvbid0 IGtub3cgaWYgdGhpcyB3YXMgYnJvdWdodCB1cCBiZWZvcmUuIElNSE8gaXQncyBlYXNpZXIgdG8g cmVhZCBjaGVja2luZzoKIGlmIChicm9hZGNhc3RfcmdiID4gQVJSQVlfU0laRShicm9hZGNhc3Rf cmdiX25hbWVzKQoKQmVzdCByZWdhcmRzLApBbGV4YW5kZXIKCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJcmV0dXJuIGJyb2FkY2FzdF9yZ2JfbmFtZXNbYnJvYWRjYXN0X3JnYl0ubmFtZTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MKGRybV9oZG1pX2Nvbm5lY3Rvcl9nZXRfYnJvYWRjYXN0X3JnYl9u YW1lKTsKPiArCj4gIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgb3V0cHV0X2Zvcm1hdF9zdHJb XSA9IHsKPiAgCVtIRE1JX0NPTE9SU1BBQ0VfUkdCXQkJPSAiUkdCIiwKPiAgCVtIRE1JX0NPTE9S U1BBQ0VfWVVWNDIwXQk9ICJZVVYgNDoyOjAiLAo+ICAJW0hETUlfQ09MT1JTUEFDRV9ZVVY0MjJd CT0gIllVViA0OjI6MiIsCj4gIAlbSERNSV9DT0xPUlNQQUNFX1lVVjQ0NF0JPSAiWVVWIDQ6NDo0 IiwKPiBAQCAtMTcwNiwxMCArMTcyOSw0MiBAQCB2b2lkIGRybV9jb25uZWN0b3JfYXR0YWNoX2Rw X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdAo+ICBF WFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1YmNvbm5lY3Rvcl9wcm9wZXJ0 eSk7Cj4gIAo+ICAvKioKPiAgICogRE9DOiBIRE1JIGNvbm5lY3RvciBwcm9wZXJ0aWVzCj4gICAq Cj4gKyAqIEJyb2FkY2FzdCBSR0IgKEhETUkgc3BlY2lmaWMpCj4gKyAqICAgICAgSW5kaWNhdGVz IHRoZSBRdWFudGl6YXRpb24gUmFuZ2UgKEZ1bGwgdnMgTGltaXRlZCkgdXNlZC4gVGhlIGNvbG9y Cj4gKyAqICAgICAgcHJvY2Vzc2luZyBwaXBlbGluZSB3aWxsIGJlIGFkanVzdGVkIHRvIG1hdGNo IHRoZSB2YWx1ZSBvZiB0aGUKPiArICogICAgICBwcm9wZXJ0eSwgYW5kIHRoZSBJbmZvZnJhbWVz IHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBzZW50IGFjY29yZGluZ2x5Lgo+ICsgKgo+ICsgKiAgICAg IFRoaXMgcHJvcGVydHkgaXMgb25seSByZWxldmFudCBpZiB0aGUgSERNSSBvdXRwdXQgZm9ybWF0 IGlzIFJHQi4gSWYKPiArICogICAgICBpdCdzIG9uZSBvZiB0aGUgWUNiQ3IgdmFyaWFudCwgaXQg d2lsbCBiZSBpZ25vcmVkLgo+ICsgKgo+ICsgKiAgICAgIFRoZSBDUlRDIGF0dGFjaGVkIHRvIHRo ZSBjb25uZWN0b3IgbXVzdCBiZSBjb25maWd1cmVkIGJ5IHVzZXItc3BhY2UgdG8KPiArICogICAg ICBhbHdheXMgcHJvZHVjZSBmdWxsLXJhbmdlIHBpeGVscy4KPiArICoKPiArICogICAgICBUaGUg dmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cj4gKyAq Cj4gKyAqICAgICAgQXV0b21hdGljOgo+ICsgKiAgICAgICAgICAgICAgVGhlIHF1YW50aXphdGlv biByYW5nZSBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZQo+ICsgKiAgICAg ICAgICAgICAgbW9kZSBhY2NvcmRpbmcgdG8gdGhlIEhETUkgc3BlY2lmaWNhdGlvbnMgKEhETUkg MS40YiAtIFNlY3Rpb24KPiArICogICAgICAgICAgICAgIDYuNiAtIFZpZGVvIFF1YW50aXphdGlv biBSYW5nZXMpLgo+ICsgKgo+ICsgKiAgICAgIEZ1bGw6Cj4gKyAqICAgICAgICAgICAgICBGdWxs IHF1YW50aXphdGlvbiByYW5nZSBpcyBmb3JjZWQuCj4gKyAqCj4gKyAqICAgICAgTGltaXRlZCAx NjoyMzU6Cj4gKyAqICAgICAgICAgICAgICBMaW1pdGVkIHF1YW50aXphdGlvbiByYW5nZSBpcyBm b3JjZWQuIFVubGlrZSB0aGUgbmFtZSBzdWdnZXN0cywKPiArICogICAgICAgICAgICAgIHRoaXMg d29ya3MgZm9yIGFueSBudW1iZXIgb2YgYml0cy1wZXItY29tcG9uZW50Lgo+ICsgKgo+ICsgKiAg ICAgIFByb3BlcnR5IHZhbHVlcyBvdGhlciB0aGFuIEF1dG9tYXRpYyBjYW4gcmVzdWx0IGluIGNv bG9ycyBiZWluZyBvZmYgKGlmCj4gKyAqICAgICAgbGltaXRlZCBpcyBzZWxlY3RlZCBidXQgdGhl IGRpc3BsYXkgZXhwZWN0cyBmdWxsKSwgb3IgYSBibGFjayBzY3JlZW4KPiArICogICAgICAoaWYg ZnVsbCBpcyBzZWxlY3RlZCBidXQgdGhlIGRpc3BsYXkgZXhwZWN0cyBsaW1pdGVkKS4KPiArICoK PiArICogICAgICBEcml2ZXJzIGNhbiBzZXQgdXAgdGhpcyBwcm9wZXJ0eSBieSBjYWxsaW5nCj4g KyAqICAgICAgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSgpLgo+ ICsgKgo+ICAgKiBjb250ZW50IHR5cGUgKEhETUkgc3BlY2lmaWMpOgo+ICAgKglJbmRpY2F0ZXMg Y29udGVudCB0eXBlIHNldHRpbmcgdG8gYmUgdXNlZCBpbiBIRE1JIGluZm9mcmFtZXMgdG8gaW5k aWNhdGUKPiAgICoJY29udGVudCB0eXBlIGZvciB0aGUgZXh0ZXJuYWwgZGV2aWNlLCBzbyB0aGF0 IGl0IGFkanVzdHMgaXRzIGRpc3BsYXkKPiAgICoJc2V0dGluZ3MgYWNjb3JkaW5nbHkuCj4gICAq Cj4gQEAgLTI1NjgsMTAgKzI2MjMsNDMgQEAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX2hkcl9v dXRwdXRfbWV0YWRhdGFfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4KPiAgCj4g IAlyZXR1cm4gMDsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfYXR0YWNoX2hk cl9vdXRwdXRfbWV0YWRhdGFfcHJvcGVydHkpOwo+ICAKPiArLyoqCj4gKyAqIGRybV9jb25uZWN0 b3JfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkgLSBhdHRhY2ggIkJyb2FkY2FzdCBSR0Ii IHByb3BlcnR5Cj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0byBhdHRhY2ggdGhlIHByb3Bl cnR5IG9uLgo+ICsgKgo+ICsgKiBUaGlzIGlzIHVzZWQgdG8gYWRkIHN1cHBvcnQgZm9yIGZvcmNp bmcgdGhlIFJHQiByYW5nZSBvbiBhIGNvbm5lY3Rvcgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsg KiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtp bnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y29ubmVjdG9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwo+ICsKPiArCXBy b3AgPSBjb25uZWN0b3ItPmJyb2FkY2FzdF9yZ2JfcHJvcGVydHk7Cj4gKwlpZiAoIXByb3ApIHsK PiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGRldiwgRFJNX01PREVfUFJPUF9F TlVNLAo+ICsJCQkJCQkiQnJvYWRjYXN0IFJHQiIsCj4gKwkJCQkJCWJyb2FkY2FzdF9yZ2JfbmFt ZXMsCj4gKwkJCQkJCUFSUkFZX1NJWkUoYnJvYWRjYXN0X3JnYl9uYW1lcykpOwo+ICsJCWlmICgh cHJvcCkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCWNvbm5lY3Rvci0+YnJvYWRjYXN0 X3JnYl9wcm9wZXJ0eSA9IHByb3A7Cj4gKwl9Cj4gKwo+ICsJZHJtX29iamVjdF9hdHRhY2hfcHJv cGVydHkoJmNvbm5lY3Rvci0+YmFzZSwgcHJvcCwKPiArCQkJCSAgIERSTV9IRE1JX0JST0FEQ0FT VF9SR0JfQVVUTyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1f Y29ubmVjdG9yX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KTsKPiArCj4gIC8qKgo+ICAg KiBkcm1fY29ubmVjdG9yX2F0dGFjaF9jb2xvcnNwYWNlX3Byb3BlcnR5IC0gYXR0YWNoICJDb2xv cnNwYWNlIiBwcm9wZXJ0eQo+ICAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gYXR0YWNoIHRo ZSBwcm9wZXJ0eSBvbi4KPiAgICoKPiAgICogVGhpcyBpcyB1c2VkIHRvIGFsbG93IHRoZSB1c2Vy c3BhY2UgdG8gc2lnbmFsIHRoZSBvdXRwdXQgY29sb3JzcGFjZQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiBp bmRleCA4Y2RhOTAyOTM0Y2QuLmJiNmI2YTM2YWRlMyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS9kcm1fY29ubmVjdG9yLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiBA QCAtMzY3LDEwICszNjcsMzMgQEAgZW51bSBkcm1fcGFuZWxfb3JpZW50YXRpb24gewo+ICAJRFJN X01PREVfUEFORUxfT1JJRU5UQVRJT05fQk9UVE9NX1VQLAo+ICAJRFJNX01PREVfUEFORUxfT1JJ RU5UQVRJT05fTEVGVF9VUCwKPiAgCURSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX1JJR0hUX1VQ LAo+ICB9Owo+ICAKPiArLyoqCj4gKyAqIGVudW0gZHJtX2hkbWlfYnJvYWRjYXN0X3JnYiAtIEJy b2FkY2FzdCBSR0IgU2VsZWN0aW9uIGZvciBhbiBIRE1JIEBkcm1fY29ubmVjdG9yCj4gKyAqLwo+ ICtlbnVtIGRybV9oZG1pX2Jyb2FkY2FzdF9yZ2Igewo+ICsJLyoqCj4gKwkgKiBARFJNX0hETUlf QlJPQURDQVNUX1JHQl9BVVRPOiBUaGUgUkdCIHJhbmdlIGlzIHNlbGVjdGVkCj4gKwkgKiBhdXRv bWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBtb2RlLgo+ICsJICovCj4gKwlEUk1fSERNSV9CUk9BRENB U1RfUkdCX0FVVE8sCj4gKwo+ICsJLyoqCj4gKwkgKiBARFJNX0hETUlfQlJPQURDQVNUX1JHQl9G VUxMOiBGdWxsIHJhbmdlIFJHQiBpcyBmb3JjZWQuCj4gKwkgKi8KPiArCURSTV9IRE1JX0JST0FE Q0FTVF9SR0JfRlVMTCwKPiArCj4gKwkvKioKPiArCSAqIEBEUk1fSERNSV9CUk9BRENBU1RfUkdC X0xJTUlURUQ6IExpbWl0ZWQgcmFuZ2UgUkdCIGlzIGZvcmNlZC4KPiArCSAqLwo+ICsJRFJNX0hE TUlfQlJPQURDQVNUX1JHQl9MSU1JVEVELAo+ICt9Owo+ICsKPiArY29uc3QgY2hhciAqCj4gK2Ry bV9oZG1pX2Nvbm5lY3Rvcl9nZXRfYnJvYWRjYXN0X3JnYl9uYW1lKGVudW0gZHJtX2hkbWlfYnJv YWRjYXN0X3JnYiBicm9hZGNhc3RfcmdiKTsKPiAgY29uc3QgY2hhciAqCj4gIGRybV9oZG1pX2Nv bm5lY3Rvcl9nZXRfb3V0cHV0X2Zvcm1hdF9uYW1lKGVudW0gaGRtaV9jb2xvcnNwYWNlIGZtdCk7 Cj4gIAo+ICAvKioKPiAgICogc3RydWN0IGRybV9tb25pdG9yX3JhbmdlX2luZm8gLSBQYW5lbCdz IE1vbml0b3IgcmFuZ2UgaW4gRURJRCBmb3IKPiBAQCAtMTAzOSwxMCArMTA2MiwxNiBAQCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4gIAkvKioKPiAgCSAqIEBoZG1pOiBIRE1JLXJlbGF0 ZWQgdmFyaWFibGUgYW5kIHByb3BlcnRpZXMuIEZpbGxlZCBieQo+ICAJICogQGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKCkuCj4gIAkgKi8KPiAgCXN0cnVjdCB7Cj4gKwkJ LyoqCj4gKwkJICogQGJyb2FkY2FzdF9yZ2I6IENvbm5lY3RvciBwcm9wZXJ0eSB0byBwYXNzIHRo ZQo+ICsJCSAqIEJyb2FkY2FzdCBSR0Igc2VsZWN0aW9uIHZhbHVlLgo+ICsJCSAqLwo+ICsJCWVu dW0gZHJtX2hkbWlfYnJvYWRjYXN0X3JnYiBicm9hZGNhc3RfcmdiOwo+ICsKPiAgCQkvKioKPiAg CQkgKiBAb3V0cHV0X2JwYzogQml0cyBwZXIgY29sb3IgY2hhbm5lbCB0byBvdXRwdXQuCj4gIAkJ ICovCj4gIAkJdW5zaWduZWQgaW50IG91dHB1dF9icGM7Cj4gIAo+IEBAIC0xNzUxLDEwICsxNzgw LDE2IEBAIHN0cnVjdCBkcm1fY29ubmVjdG9yIHsKPiAgCSAqIEBwcml2YWN5X3NjcmVlbl9od19z dGF0ZV9wcm9wZXJ0eTogT3B0aW9uYWwgYXRvbWljIHByb3BlcnR5IGZvciB0aGUKPiAgCSAqIGNv bm5lY3RvciB0byByZXBvcnQgdGhlIGFjdHVhbCBpbnRlZ3JhdGVkIHByaXZhY3kgc2NyZWVuIHN0 YXRlLgo+ICAJICovCj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcml2YWN5X3NjcmVlbl9od19z dGF0ZV9wcm9wZXJ0eTsKPiAgCj4gKwkvKioKPiArCSAqIEBicm9hZGNhc3RfcmdiX3Byb3BlcnR5 OiBDb25uZWN0b3IgcHJvcGVydHkgdG8gc2V0IHRoZQo+ICsJICogQnJvYWRjYXN0IFJHQiBzZWxl Y3Rpb24gdG8gb3V0cHV0IHdpdGguCj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKmJy b2FkY2FzdF9yZ2JfcHJvcGVydHk7Cj4gKwo+ICAjZGVmaW5lIERSTV9DT05ORUNUT1JfUE9MTF9I UEQgKDEgPDwgMCkKPiAgI2RlZmluZSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCAoMSA8PCAx KQo+ICAjZGVmaW5lIERSTV9DT05ORUNUT1JfUE9MTF9ESVNDT05ORUNUICgxIDw8IDIpCj4gIAo+ ICAJLyoqCj4gQEAgLTIwOTAsMTAgKzIxMjUsMTEgQEAgaW50IGRybV9tb2RlX2NyZWF0ZV9zY2Fs aW5nX21vZGVfcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIGludCBkcm1fY29u bmVjdG9yX2F0dGFjaF9jb250ZW50X3R5cGVfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3Ig KmRldik7Cj4gIGludCBkcm1fY29ubmVjdG9yX2F0dGFjaF9zY2FsaW5nX21vZGVfcHJvcGVydHko c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQkJCQkgICAgICAgdTMyIHNjYWxp bmdfbW9kZV9tYXNrKTsKPiAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX3Zycl9jYXBhYmxlX3By b3BlcnR5KAo+ICAJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICtpbnQgZHJt X2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKTsKPiAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX2NvbG9yc3BhY2Vf cHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gIGludCBkcm1fY29u bmVjdG9yX2F0dGFjaF9oZHJfb3V0cHV0X21ldGFkYXRhX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ICBib29sIGRybV9jb25uZWN0b3JfYXRvbWljX2hkcl9tZXRh ZGF0YV9lcXVhbChzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX3N0YXRlLAo+ICAJCQkJ CSAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19zdGF0ZSk7Cj4gIGludCBkcm1f bW9kZV9jcmVhdGVfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+IAo+IAoKCi0tIApUUS1TeXN0ZW1zIEdtYkggfCBNw7xobHN0cmHDn2UgMiwgR3V0IERlbGxp bmcgfCA4MjIyOSBTZWVmZWxkLCBHZXJtYW55CkFtdHNnZXJpY2h0IE3DvG5jaGVuLCBIUkIgMTA1 MDE4Ckdlc2Now6RmdHNmw7xocmVyOiBEZXRsZWYgU2NobmVpZGVyLCBSw7xkaWdlciBTdGFobCwg U3RlZmFuIFNjaG5laWRlcgpodHRwOi8vd3d3LnRxLWdyb3VwLmNvbS8KCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGlu ZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo= 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 61D9EC5475B for ; Fri, 8 Mar 2024 11:26:31 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=179ydd2NKFM+1GidtEQcGnYsl+LEWFOqGtOhXwk4Nns=; b=o4fhp7Yy8/OYa/ bvU1JQ0IBlIeMGf/OQU1j4PNHWnDjM2PTYGY+1eO+tjL1ULD0Y6OdNoOVjSN1wg/3wzX1kRqKmJDY DkDNyg8JL65YzmBigWPROuG5aQjqw+oQKFt56Cl2XZBVR2YnAIYGhoB3XKvUa37Oj2mlzSR8L7D0f +lGgv46+d6/kbmf9pxg5PkMfAYi4RlP9e9L5WemKv1WcuUSd9jA6M8ggAKPGBiT68lrzkB6md9jh7 eNqJpDs0CaF+MCwWmgb6fKwqFV1AdlAV9iAM82KZYBbLJ9agfq7thoVapQ+H8uW8xXpLg4hB/oSFS Wiuwhmaa/ne1vPt99JNg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1riYMl-00000008yP4-38U0; Fri, 08 Mar 2024 11:26:19 +0000 Received: from mx1.tq-group.com ([93.104.207.81]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1riYMh-00000008yMa-1zSV; Fri, 08 Mar 2024 11:26:18 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tq-group.com; i=@tq-group.com; q=dns/txt; s=key1; t=1709897175; x=1741433175; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3XEDr/u0bX7GLSURb+lX54qKf7q5lzFuBl44pcpwkWk=; b=ZGmCMHSU5XHUK/WRiDgkwIdzOuB8Y7OhCi/HuoV9u/aqNAhIEcrhRPZR lKRZ9z6zIiALzy5qgPqJcwTSwFMqb1v+UvaWTlCZS3MA7V3NrGrru8dEb AkhkdWLrNjTzmhEQuWw5XNkUqj8yXX05s5PtuyNzDRvGP78gfPP26O4if Rn8wV8py5GOg7qGTdMoZl9VIJUT04uUp3MYX/iSJcO9dXigjuxg3EPXTj TLCsPy86aDOCAuCQGsq890zL0WVw57aS+uxdo73/u0nBVOJrjgAJF7bYn rKdzqym6YXEZiWdldTgDr6o02hCO9T0yNJoV69x/O/AEYa60bmFTRERyg g==; X-IronPort-AV: E=Sophos;i="6.07,109,1708383600"; d="scan'208";a="35807667" Received: from vtuxmail01.tq-net.de ([10.115.0.20]) by mx1.tq-group.com with ESMTP; 08 Mar 2024 12:26:13 +0100 Received: from steina-w.localnet (steina-w.tq-net.de [10.123.53.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by vtuxmail01.tq-net.de (Postfix) with ESMTPSA id 7AA7928007C; Fri, 8 Mar 2024 12:26:12 +0100 (CET) From: Alexander Stein To: 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 , dri-devel@lists.freedesktop.org Cc: Hans Verkuil , Sebastian Wick , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , 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, Maxime Ripard , Dave Stevenson , Pekka Paalanen , Maxime Ripard Subject: Re: [PATCH v8 16/27] drm/connector: hdmi: Add Broadcast RGB property Date: Fri, 08 Mar 2024 12:26:14 +0100 Message-ID: <2599919.Lt9SDvczpP@steina-w> Organization: TQ-Systems GmbH In-Reply-To: <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> References: <20240307-kms-hdmi-connector-state-v8-0-ef6a6f31964b@kernel.org> <20240307-kms-hdmi-connector-state-v8-16-ef6a6f31964b@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240308_032616_079490_C5FE4344 X-CRM114-Status: GOOD ( 41.01 ) 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 SGkgTWF4aW1lLAoKQW0gRG9ubmVyc3RhZywgNy4gTcOkcnogMjAyNCwgMTQ6Mzg6NDMgQ0VUIHNj aHJpZWIgTWF4aW1lIFJpcGFyZDoKPiBUaGUgaTkxNSBkcml2ZXIgaGFzIGEgcHJvcGVydHkgdG8g Zm9yY2UgdGhlIFJHQiByYW5nZSBvZiBhbiBIRE1JIG91dHB1dC4KPiBUaGUgdmM0IGRyaXZlciB0 aGVuIGltcGxlbWVudGVkIHRoZSBzYW1lIHByb3BlcnR5IHdpdGggdGhlIHNhbWUKPiBzZW1hbnRp Y3MuIEtXaW4gaGFzIHN1cHBvcnQgZm9yIGl0LCBhbmQgYSBQUiBmb3IgbXV0dGVyIGlzIGFsc28g dGhlcmUgdG8KPiBzdXBwb3J0IGl0Lgo+IAo+IEJvdGggZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhl IHNhbWUgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MsCj4gcGx1cyB0aGUgdXNlcnNw YWNlIGhhdmluZyBzdXBwb3J0IGZvciBpdCwgaXMgcHJvb2YgZW5vdWdoIHRoYXQgaXQncwo+IHBy ZXR0eSBtdWNoIGEgZGUtZmFjdG8gc3RhbmRhcmQgbm93IGFuZCB3ZSBjYW4gcHJvdmlkZSBoZWxw ZXJzIGZvciBpdC4KPiAKPiBMZXQncyBwbHVtYiBpdCBpbnRvIHRoZSBuZXdseSBjcmVhdGVkIEhE TUkgY29ubmVjdG9yLgo+IAo+IFJldmlld2VkLWJ5OiBEYXZlIFN0ZXZlbnNvbiA8ZGF2ZS5zdGV2 ZW5zb25AcmFzcGJlcnJ5cGkuY29tPgo+IEFja2VkLWJ5OiBQZWtrYSBQYWFsYW5lbiA8cGVra2Eu cGFhbGFuZW5AY29sbGFib3JhLmNvbT4KPiBSZXZpZXdlZC1ieTogU2ViYXN0aWFuIFdpY2sgPHNl YmFzdGlhbi53aWNrQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8 bXJpcGFyZEBrZXJuZWwub3JnPgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2dwdS9rbXMtcHJvcGVy dGllcy5jc3YgICAgICB8ICAxIC0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyAgICAg ICAgICAgICAgfCAgMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBl ci5jIHwgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jICAgICAgICAg fCAgNCArKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jICAgICAgICAgICB8IDg4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5l Y3Rvci5oICAgICAgICAgICAgICAgfCAzNiArKysrKysrKysrKysrCj4gIDYgZmlsZXMgY2hhbmdl ZCwgMTMzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdiBiL0RvY3VtZW50YXRpb24vZ3B1L2tt cy1wcm9wZXJ0aWVzLmNzdgo+IGluZGV4IDBmOTU5MDgzNDgyOS4uY2FlZjE0YzUzMmQ0IDEwMDY0 NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdgo+ICsrKyBiL0Rv Y3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdgo+IEBAIC0xNSwxMSArMTUsMTAgQEAg T3duZXIgTW9kdWxlL0RyaXZlcnMsR3JvdXAsUHJvcGVydHkgTmFtZSxUeXBlLFByb3BlcnR5IFZh bHVlcyxPYmplY3QgYXR0YWNoZWQsRGUKPiAgLCzigJxzYXR1cmF0aW9u4oCdLFJBTkdFLCJNaW49 MCwgTWF4PTEwMCIsQ29ubmVjdG9yLFRCRAo+ICAsLOKAnGh1ZeKAnSxSQU5HRSwiTWluPTAsIE1h eD0xMDAiLENvbm5lY3RvcixUQkQKPiAgLFZpcnR1YWwgR1BVLOKAnHN1Z2dlc3RlZCBY4oCdLFJB TkdFLCJNaW49MCwgTWF4PTB4ZmZmZmZmZmYiLENvbm5lY3Rvcixwcm9wZXJ0eSB0byBzdWdnZXN0 IGFuIFggb2Zmc2V0IGZvciBhIGNvbm5lY3Rvcgo+ICAsLOKAnHN1Z2dlc3RlZCBZ4oCdLFJBTkdF LCJNaW49MCwgTWF4PTB4ZmZmZmZmZmYiLENvbm5lY3Rvcixwcm9wZXJ0eSB0byBzdWdnZXN0IGFu IFkgb2Zmc2V0IGZvciBhIGNvbm5lY3Rvcgo+ICAsT3B0aW9uYWwsIiIiYXNwZWN0IHJhdGlvIiIi LEVOVU0sInsgIiJOb25lIiIsICIiNDozIiIsICIiMTY6OSIiIH0iLENvbm5lY3RvcixUREIKPiAt aTkxNSxHZW5lcmljLCIiIkJyb2FkY2FzdCBSR0IiIiIsRU5VTSwieyAiIkF1dG9tYXRpYyIiLCAi IkZ1bGwiIiwgIiJMaW1pdGVkIDE2OjIzNSIiIH0iLENvbm5lY3RvciwiV2hlbiB0aGlzIHByb3Bl cnR5IGlzIHNldCB0byBMaW1pdGVkIDE2OjIzNSBhbmQgQ1RNIGlzIHNldCwgdGhlIGhhcmR3YXJl IHdpbGwgYmUgcHJvZ3JhbW1lZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGxpY2F0aW9u IG9mIENUTSBieSB0aGUgbGltaXRlZCByYW5nZSBtYXRyaXggdG8gZW5zdXJlIHRoZSBwaXhlbHMg bm9ybWFsbHkgaW4gdGhlIHJhbmdlIDAuLjEuMCBhcmUgcmVtYXBwZWQgdG8gdGhlIHJhbmdlIDE2 LzI1NS4uMjM1LzI1NS4iCj4gICws4oCcYXVkaW/igJ0sRU5VTSwieyAiImZvcmNlLWR2aSIiLCAi Im9mZiIiLCAiImF1dG8iIiwgIiJvbiIiIH0iLENvbm5lY3RvcixUQkQKPiAgLFNEVk8tVFYs4oCc bW9kZeKAnSxFTlVNLCJ7ICIiTlRTQ19NIiIsICIiTlRTQ19KIiIsICIiTlRTQ180NDMiIiwgIiJQ QUxfQiIiIH0gZXRjLiIsQ29ubmVjdG9yLFRCRAo+ICAsLCIiImxlZnRfbWFyZ2luIiIiLFJBTkdF LCJNaW49MCwgTWF4PSBTRFZPIGRlcGVuZGVudCIsQ29ubmVjdG9yLFRCRAo+ICAsLCIiInJpZ2h0 X21hcmdpbiIiIixSQU5HRSwiTWluPTAsIE1heD0gU0RWTyBkZXBlbmRlbnQiLENvbm5lY3RvcixU QkQKPiAgLCwiIiJ0b3BfbWFyZ2luIiIiLFJBTkdFLCJNaW49MCwgTWF4PSBTRFZPIGRlcGVuZGVu dCIsQ29ubmVjdG9yLFRCRAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+IGluZGV4IDI2ZjllNTI1YzBhMC4u M2U1N2Q5OGQ4NDE4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gQEAgLTExNDMsMTAgKzExNDMs MTIgQEAgc3RhdGljIHZvaWQgZHJtX2F0b21pY19jb25uZWN0b3JfcHJpbnRfc3RhdGUoc3RydWN0 IGRybV9wcmludGVyICpwLAo+ICAJZHJtX3ByaW50ZihwLCAiXHRtYXhfcmVxdWVzdGVkX2JwYz0l ZFxuIiwgc3RhdGUtPm1heF9yZXF1ZXN0ZWRfYnBjKTsKPiAgCWRybV9wcmludGYocCwgIlx0Y29s b3JzcGFjZT0lc1xuIiwgZHJtX2dldF9jb2xvcnNwYWNlX25hbWUoc3RhdGUtPmNvbG9yc3BhY2Up KTsKPiAgCj4gIAlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05O RUNUT1JfSERNSUEgfHwKPiAgCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9N T0RFX0NPTk5FQ1RPUl9IRE1JQikgewo+ICsJCWRybV9wcmludGYocCwgIlx0YnJvYWRjYXN0X3Jn Yj0lc1xuIiwKPiArCQkJICAgZHJtX2hkbWlfY29ubmVjdG9yX2dldF9icm9hZGNhc3RfcmdiX25h bWUoc3RhdGUtPmhkbWkuYnJvYWRjYXN0X3JnYikpOwo+ICAJCWRybV9wcmludGYocCwgIlx0b3V0 cHV0X2JwYz0ldVxuIiwgc3RhdGUtPmhkbWkub3V0cHV0X2JwYyk7Cj4gIAkJZHJtX3ByaW50Zihw LCAiXHRvdXRwdXRfZm9ybWF0PSVzXG4iLAo+ICAJCQkgICBkcm1faGRtaV9jb25uZWN0b3JfZ2V0 X291dHB1dF9mb3JtYXRfbmFtZShzdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0KSk7Cj4gIAkJZHJt X3ByaW50ZihwLCAiXHR0bWRzX2NoYXJfcmF0ZT0lbGx1XG4iLCBzdGF0ZS0+aGRtaS50bWRzX2No YXJfcmF0ZSk7Cj4gIAl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWlj X3N0YXRlX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVy LmMKPiBpbmRleCA5ZjUxNzU5OWYxMTcuLjBlOGZiNjUzOTY1YSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX3N0YXRlX2hlbHBlci5jCj4gQEAgLTU4NywxMCArNTg3LDExIEBAIHZv aWQgX19kcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfaGRtaV9yZXNldChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+ICB7Cj4gIAl1bnNpZ25lZCBpbnQgbWF4X2JwYyA9IGNvbm5l Y3Rvci0+bWF4X2JwYzsKPiAgCj4gIAluZXdfc3RhdGUtPm1heF9icGMgPSBtYXhfYnBjOwo+ICAJ bmV3X3N0YXRlLT5tYXhfcmVxdWVzdGVkX2JwYyA9IG1heF9icGM7Cj4gKwluZXdfc3RhdGUtPmhk bWkuYnJvYWRjYXN0X3JnYiA9IERSTV9IRE1JX0JST0FEQ0FTVF9SR0JfQVVUTzsKPiAgfQo+ICBF WFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2hkbWlfcmVzZXQpOwo+ ICAKPiAgLyoqCj4gICAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl90dl9jaGVjayAtIFZh bGlkYXRlIGFuIGFuYWxvZyBUViBjb25uZWN0b3Igc3RhdGUKPiBAQCAtOTExLDExICs5MTIsMTIg QEAgaW50IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gIAo+ICAJcmV0ID0gaGRtaV9jb21wdXRlX2NvbmZpZyhj b25uZWN0b3IsIG5ld19zdGF0ZSwgbW9kZSk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7 Cj4gIAo+IC0JaWYgKG9sZF9zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjICE9IG5ld19zdGF0ZS0+aGRt aS5vdXRwdXRfYnBjIHx8Cj4gKwlpZiAob2xkX3N0YXRlLT5oZG1pLmJyb2FkY2FzdF9yZ2IgIT0g bmV3X3N0YXRlLT5oZG1pLmJyb2FkY2FzdF9yZ2IgfHwKPiArCSAgICBvbGRfc3RhdGUtPmhkbWku b3V0cHV0X2JwYyAhPSBuZXdfc3RhdGUtPmhkbWkub3V0cHV0X2JwYyB8fAo+ICAJICAgIG9sZF9z dGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0ICE9IG5ld19zdGF0ZS0+aGRtaS5vdXRwdXRfZm9ybWF0 KSB7Cj4gIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3N0YXRlLT5jcnRjOwo+ICAJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCj4gIAkJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Y191YXBpLmMKPiBpbmRleCAyOWQ0OTQwMTg4ZDQuLjJiNDE1YjRlZDUwNiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY191YXBpLmMKPiBAQCAtNzc0LDEwICs3NzQsMTIgQEAgc3RhdGljIGludCBk cm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKPiAgCQkJCQkJICAgZmVuY2VfcHRyKTsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29ubmVjdG9yLT5tYXhfYnBjX3Byb3BlcnR5KSB7Cj4gIAkJc3RhdGUtPm1heF9yZXF1ZXN0 ZWRfYnBjID0gdmFsOwo+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnByaXZh Y3lfc2NyZWVuX3N3X3N0YXRlX3Byb3BlcnR5KSB7Cj4gIAkJc3RhdGUtPnByaXZhY3lfc2NyZWVu X3N3X3N0YXRlID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmJy b2FkY2FzdF9yZ2JfcHJvcGVydHkpIHsKPiArCQlzdGF0ZS0+aGRtaS5icm9hZGNhc3RfcmdiID0g dmFsOwo+ICAJfSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5 KSB7Cj4gIAkJcmV0dXJuIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19zZXRfcHJvcGVydHkoY29u bmVjdG9yLAo+ICAJCQkJc3RhdGUsIHByb3BlcnR5LCB2YWwpOwo+ICAJfSBlbHNlIHsKPiAgCQlk cm1fZGJnX2F0b21pYyhjb25uZWN0b3ItPmRldiwKPiBAQCAtODU3LDEwICs4NTksMTIgQEAgZHJt X2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gIAkJKnZhbCA9IDA7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rv ci0+bWF4X2JwY19wcm9wZXJ0eSkgewo+ICAJCSp2YWwgPSBzdGF0ZS0+bWF4X3JlcXVlc3RlZF9i cGM7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+cHJpdmFjeV9zY3JlZW5f c3dfc3RhdGVfcHJvcGVydHkpIHsKPiAgCQkqdmFsID0gc3RhdGUtPnByaXZhY3lfc2NyZWVuX3N3 X3N0YXRlOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPmJyb2FkY2FzdF9y Z2JfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPmhkbWkuYnJvYWRjYXN0X3JnYjsKPiAg CX0gZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkgewo+ICAJ CXJldHVybiBjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNvbm5lY3RvciwK PiAgCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiAgCX0gZWxzZSB7Cj4gIAkJZHJtX2RiZ19h dG9taWMoZGV2LAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYwo+IGluZGV4IDU5MWQyZDUwMGY2MS4u MDI3MmUxZDA1Y2M2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9y LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jCj4gQEAgLTEyMTAsMTAg KzEyMTAsMzMgQEAgc3RhdGljIGNvbnN0IHUzMiBkcF9jb2xvcnNwYWNlcyA9Cj4gIAlCSVQoRFJN X01PREVfQ09MT1JJTUVUUllfU1lDQ182MDEpIHwKPiAgCUJJVChEUk1fTU9ERV9DT0xPUklNRVRS WV9PUFlDQ182MDEpIHwKPiAgCUJJVChEUk1fTU9ERV9DT0xPUklNRVRSWV9CVDIwMjBfQ1lDQykg fAo+ICAJQklUKERSTV9NT0RFX0NPTE9SSU1FVFJZX0JUMjAyMF9ZQ0MpOwo+ICAKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgYnJvYWRjYXN0X3JnYl9uYW1lc1tdID0g ewo+ICsJeyBEUk1fSERNSV9CUk9BRENBU1RfUkdCX0FVVE8sICJBdXRvbWF0aWMiIH0sCj4gKwl7 IERSTV9IRE1JX0JST0FEQ0FTVF9SR0JfRlVMTCwgIkZ1bGwiIH0sCj4gKwl7IERSTV9IRE1JX0JS T0FEQ0FTVF9SR0JfTElNSVRFRCwgIkxpbWl0ZWQgMTY6MjM1IiB9LAo+ICt9Owo+ICsKPiArLyoK PiArICogZHJtX2hkbWlfY29ubmVjdG9yX2dldF9icm9hZGNhc3RfcmdiX25hbWUgLSBSZXR1cm4g YSBzdHJpbmcgZm9yIEhETUkgY29ubmVjdG9yIFJHQiBicm9hZGNhc3Qgc2VsZWN0aW9uCj4gKyAq IEBicm9hZGNhc3RfcmdiOiBCcm9hZGNhc3QgUkdCIHNlbGVjdGlvbiB0byBjb21wdXRlIG5hbWUg b2YKPiArICoKPiArICogUmV0dXJuczogdGhlIG5hbWUgb2YgdGhlIEJyb2FkY2FzdCBSR0Igc2Vs ZWN0aW9uLCBvciBOVUxMIGlmIHRoZSB0eXBlCj4gKyAqIGlzIG5vdCB2YWxpZC4KPiArICovCj4g K2NvbnN0IGNoYXIgKgo+ICtkcm1faGRtaV9jb25uZWN0b3JfZ2V0X2Jyb2FkY2FzdF9yZ2JfbmFt ZShlbnVtIGRybV9oZG1pX2Jyb2FkY2FzdF9yZ2IgYnJvYWRjYXN0X3JnYikKPiArewo+ICsJaWYg KGJyb2FkY2FzdF9yZ2IgPiBEUk1fSERNSV9CUk9BRENBU1RfUkdCX0xJTUlURUQpCgpJIGRvbid0 IGtub3cgaWYgdGhpcyB3YXMgYnJvdWdodCB1cCBiZWZvcmUuIElNSE8gaXQncyBlYXNpZXIgdG8g cmVhZCBjaGVja2luZzoKIGlmIChicm9hZGNhc3RfcmdiID4gQVJSQVlfU0laRShicm9hZGNhc3Rf cmdiX25hbWVzKQoKQmVzdCByZWdhcmRzLApBbGV4YW5kZXIKCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJcmV0dXJuIGJyb2FkY2FzdF9yZ2JfbmFtZXNbYnJvYWRjYXN0X3JnYl0ubmFtZTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MKGRybV9oZG1pX2Nvbm5lY3Rvcl9nZXRfYnJvYWRjYXN0X3JnYl9u YW1lKTsKPiArCj4gIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgb3V0cHV0X2Zvcm1hdF9zdHJb XSA9IHsKPiAgCVtIRE1JX0NPTE9SU1BBQ0VfUkdCXQkJPSAiUkdCIiwKPiAgCVtIRE1JX0NPTE9S U1BBQ0VfWVVWNDIwXQk9ICJZVVYgNDoyOjAiLAo+ICAJW0hETUlfQ09MT1JTUEFDRV9ZVVY0MjJd CT0gIllVViA0OjI6MiIsCj4gIAlbSERNSV9DT0xPUlNQQUNFX1lVVjQ0NF0JPSAiWVVWIDQ6NDo0 IiwKPiBAQCAtMTcwNiwxMCArMTcyOSw0MiBAQCB2b2lkIGRybV9jb25uZWN0b3JfYXR0YWNoX2Rw X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdAo+ICBF WFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfYXR0YWNoX2RwX3N1YmNvbm5lY3Rvcl9wcm9wZXJ0 eSk7Cj4gIAo+ICAvKioKPiAgICogRE9DOiBIRE1JIGNvbm5lY3RvciBwcm9wZXJ0aWVzCj4gICAq Cj4gKyAqIEJyb2FkY2FzdCBSR0IgKEhETUkgc3BlY2lmaWMpCj4gKyAqICAgICAgSW5kaWNhdGVz IHRoZSBRdWFudGl6YXRpb24gUmFuZ2UgKEZ1bGwgdnMgTGltaXRlZCkgdXNlZC4gVGhlIGNvbG9y Cj4gKyAqICAgICAgcHJvY2Vzc2luZyBwaXBlbGluZSB3aWxsIGJlIGFkanVzdGVkIHRvIG1hdGNo IHRoZSB2YWx1ZSBvZiB0aGUKPiArICogICAgICBwcm9wZXJ0eSwgYW5kIHRoZSBJbmZvZnJhbWVz IHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBzZW50IGFjY29yZGluZ2x5Lgo+ICsgKgo+ICsgKiAgICAg IFRoaXMgcHJvcGVydHkgaXMgb25seSByZWxldmFudCBpZiB0aGUgSERNSSBvdXRwdXQgZm9ybWF0 IGlzIFJHQi4gSWYKPiArICogICAgICBpdCdzIG9uZSBvZiB0aGUgWUNiQ3IgdmFyaWFudCwgaXQg d2lsbCBiZSBpZ25vcmVkLgo+ICsgKgo+ICsgKiAgICAgIFRoZSBDUlRDIGF0dGFjaGVkIHRvIHRo ZSBjb25uZWN0b3IgbXVzdCBiZSBjb25maWd1cmVkIGJ5IHVzZXItc3BhY2UgdG8KPiArICogICAg ICBhbHdheXMgcHJvZHVjZSBmdWxsLXJhbmdlIHBpeGVscy4KPiArICoKPiArICogICAgICBUaGUg dmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cj4gKyAq Cj4gKyAqICAgICAgQXV0b21hdGljOgo+ICsgKiAgICAgICAgICAgICAgVGhlIHF1YW50aXphdGlv biByYW5nZSBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZQo+ICsgKiAgICAg ICAgICAgICAgbW9kZSBhY2NvcmRpbmcgdG8gdGhlIEhETUkgc3BlY2lmaWNhdGlvbnMgKEhETUkg MS40YiAtIFNlY3Rpb24KPiArICogICAgICAgICAgICAgIDYuNiAtIFZpZGVvIFF1YW50aXphdGlv biBSYW5nZXMpLgo+ICsgKgo+ICsgKiAgICAgIEZ1bGw6Cj4gKyAqICAgICAgICAgICAgICBGdWxs IHF1YW50aXphdGlvbiByYW5nZSBpcyBmb3JjZWQuCj4gKyAqCj4gKyAqICAgICAgTGltaXRlZCAx NjoyMzU6Cj4gKyAqICAgICAgICAgICAgICBMaW1pdGVkIHF1YW50aXphdGlvbiByYW5nZSBpcyBm b3JjZWQuIFVubGlrZSB0aGUgbmFtZSBzdWdnZXN0cywKPiArICogICAgICAgICAgICAgIHRoaXMg d29ya3MgZm9yIGFueSBudW1iZXIgb2YgYml0cy1wZXItY29tcG9uZW50Lgo+ICsgKgo+ICsgKiAg ICAgIFByb3BlcnR5IHZhbHVlcyBvdGhlciB0aGFuIEF1dG9tYXRpYyBjYW4gcmVzdWx0IGluIGNv bG9ycyBiZWluZyBvZmYgKGlmCj4gKyAqICAgICAgbGltaXRlZCBpcyBzZWxlY3RlZCBidXQgdGhl IGRpc3BsYXkgZXhwZWN0cyBmdWxsKSwgb3IgYSBibGFjayBzY3JlZW4KPiArICogICAgICAoaWYg ZnVsbCBpcyBzZWxlY3RlZCBidXQgdGhlIGRpc3BsYXkgZXhwZWN0cyBsaW1pdGVkKS4KPiArICoK PiArICogICAgICBEcml2ZXJzIGNhbiBzZXQgdXAgdGhpcyBwcm9wZXJ0eSBieSBjYWxsaW5nCj4g KyAqICAgICAgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSgpLgo+ ICsgKgo+ICAgKiBjb250ZW50IHR5cGUgKEhETUkgc3BlY2lmaWMpOgo+ICAgKglJbmRpY2F0ZXMg Y29udGVudCB0eXBlIHNldHRpbmcgdG8gYmUgdXNlZCBpbiBIRE1JIGluZm9mcmFtZXMgdG8gaW5k aWNhdGUKPiAgICoJY29udGVudCB0eXBlIGZvciB0aGUgZXh0ZXJuYWwgZGV2aWNlLCBzbyB0aGF0 IGl0IGFkanVzdHMgaXRzIGRpc3BsYXkKPiAgICoJc2V0dGluZ3MgYWNjb3JkaW5nbHkuCj4gICAq Cj4gQEAgLTI1NjgsMTAgKzI2MjMsNDMgQEAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX2hkcl9v dXRwdXRfbWV0YWRhdGFfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4KPiAgCj4g IAlyZXR1cm4gMDsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfYXR0YWNoX2hk cl9vdXRwdXRfbWV0YWRhdGFfcHJvcGVydHkpOwo+ICAKPiArLyoqCj4gKyAqIGRybV9jb25uZWN0 b3JfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkgLSBhdHRhY2ggIkJyb2FkY2FzdCBSR0Ii IHByb3BlcnR5Cj4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0byBhdHRhY2ggdGhlIHByb3Bl cnR5IG9uLgo+ICsgKgo+ICsgKiBUaGlzIGlzIHVzZWQgdG8gYWRkIHN1cHBvcnQgZm9yIGZvcmNp bmcgdGhlIFJHQiByYW5nZSBvbiBhIGNvbm5lY3Rvcgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsg KiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtp bnQgZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y29ubmVjdG9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOwo+ICsKPiArCXBy b3AgPSBjb25uZWN0b3ItPmJyb2FkY2FzdF9yZ2JfcHJvcGVydHk7Cj4gKwlpZiAoIXByb3ApIHsK PiArCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGRldiwgRFJNX01PREVfUFJPUF9F TlVNLAo+ICsJCQkJCQkiQnJvYWRjYXN0IFJHQiIsCj4gKwkJCQkJCWJyb2FkY2FzdF9yZ2JfbmFt ZXMsCj4gKwkJCQkJCUFSUkFZX1NJWkUoYnJvYWRjYXN0X3JnYl9uYW1lcykpOwo+ICsJCWlmICgh cHJvcCkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJCWNvbm5lY3Rvci0+YnJvYWRjYXN0 X3JnYl9wcm9wZXJ0eSA9IHByb3A7Cj4gKwl9Cj4gKwo+ICsJZHJtX29iamVjdF9hdHRhY2hfcHJv cGVydHkoJmNvbm5lY3Rvci0+YmFzZSwgcHJvcCwKPiArCQkJCSAgIERSTV9IRE1JX0JST0FEQ0FT VF9SR0JfQVVUTyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1f Y29ubmVjdG9yX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KTsKPiArCj4gIC8qKgo+ICAg KiBkcm1fY29ubmVjdG9yX2F0dGFjaF9jb2xvcnNwYWNlX3Byb3BlcnR5IC0gYXR0YWNoICJDb2xv cnNwYWNlIiBwcm9wZXJ0eQo+ICAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gYXR0YWNoIHRo ZSBwcm9wZXJ0eSBvbi4KPiAgICoKPiAgICogVGhpcyBpcyB1c2VkIHRvIGFsbG93IHRoZSB1c2Vy c3BhY2UgdG8gc2lnbmFsIHRoZSBvdXRwdXQgY29sb3JzcGFjZQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiBp bmRleCA4Y2RhOTAyOTM0Y2QuLmJiNmI2YTM2YWRlMyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS9kcm1fY29ubmVjdG9yLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiBA QCAtMzY3LDEwICszNjcsMzMgQEAgZW51bSBkcm1fcGFuZWxfb3JpZW50YXRpb24gewo+ICAJRFJN X01PREVfUEFORUxfT1JJRU5UQVRJT05fQk9UVE9NX1VQLAo+ICAJRFJNX01PREVfUEFORUxfT1JJ RU5UQVRJT05fTEVGVF9VUCwKPiAgCURSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX1JJR0hUX1VQ LAo+ICB9Owo+ICAKPiArLyoqCj4gKyAqIGVudW0gZHJtX2hkbWlfYnJvYWRjYXN0X3JnYiAtIEJy b2FkY2FzdCBSR0IgU2VsZWN0aW9uIGZvciBhbiBIRE1JIEBkcm1fY29ubmVjdG9yCj4gKyAqLwo+ ICtlbnVtIGRybV9oZG1pX2Jyb2FkY2FzdF9yZ2Igewo+ICsJLyoqCj4gKwkgKiBARFJNX0hETUlf QlJPQURDQVNUX1JHQl9BVVRPOiBUaGUgUkdCIHJhbmdlIGlzIHNlbGVjdGVkCj4gKwkgKiBhdXRv bWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBtb2RlLgo+ICsJICovCj4gKwlEUk1fSERNSV9CUk9BRENB U1RfUkdCX0FVVE8sCj4gKwo+ICsJLyoqCj4gKwkgKiBARFJNX0hETUlfQlJPQURDQVNUX1JHQl9G VUxMOiBGdWxsIHJhbmdlIFJHQiBpcyBmb3JjZWQuCj4gKwkgKi8KPiArCURSTV9IRE1JX0JST0FE Q0FTVF9SR0JfRlVMTCwKPiArCj4gKwkvKioKPiArCSAqIEBEUk1fSERNSV9CUk9BRENBU1RfUkdC X0xJTUlURUQ6IExpbWl0ZWQgcmFuZ2UgUkdCIGlzIGZvcmNlZC4KPiArCSAqLwo+ICsJRFJNX0hE TUlfQlJPQURDQVNUX1JHQl9MSU1JVEVELAo+ICt9Owo+ICsKPiArY29uc3QgY2hhciAqCj4gK2Ry bV9oZG1pX2Nvbm5lY3Rvcl9nZXRfYnJvYWRjYXN0X3JnYl9uYW1lKGVudW0gZHJtX2hkbWlfYnJv YWRjYXN0X3JnYiBicm9hZGNhc3RfcmdiKTsKPiAgY29uc3QgY2hhciAqCj4gIGRybV9oZG1pX2Nv bm5lY3Rvcl9nZXRfb3V0cHV0X2Zvcm1hdF9uYW1lKGVudW0gaGRtaV9jb2xvcnNwYWNlIGZtdCk7 Cj4gIAo+ICAvKioKPiAgICogc3RydWN0IGRybV9tb25pdG9yX3JhbmdlX2luZm8gLSBQYW5lbCdz IE1vbml0b3IgcmFuZ2UgaW4gRURJRCBmb3IKPiBAQCAtMTAzOSwxMCArMTA2MiwxNiBAQCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4gIAkvKioKPiAgCSAqIEBoZG1pOiBIRE1JLXJlbGF0 ZWQgdmFyaWFibGUgYW5kIHByb3BlcnRpZXMuIEZpbGxlZCBieQo+ICAJICogQGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9oZG1pX2NoZWNrKCkuCj4gIAkgKi8KPiAgCXN0cnVjdCB7Cj4gKwkJ LyoqCj4gKwkJICogQGJyb2FkY2FzdF9yZ2I6IENvbm5lY3RvciBwcm9wZXJ0eSB0byBwYXNzIHRo ZQo+ICsJCSAqIEJyb2FkY2FzdCBSR0Igc2VsZWN0aW9uIHZhbHVlLgo+ICsJCSAqLwo+ICsJCWVu dW0gZHJtX2hkbWlfYnJvYWRjYXN0X3JnYiBicm9hZGNhc3RfcmdiOwo+ICsKPiAgCQkvKioKPiAg CQkgKiBAb3V0cHV0X2JwYzogQml0cyBwZXIgY29sb3IgY2hhbm5lbCB0byBvdXRwdXQuCj4gIAkJ ICovCj4gIAkJdW5zaWduZWQgaW50IG91dHB1dF9icGM7Cj4gIAo+IEBAIC0xNzUxLDEwICsxNzgw LDE2IEBAIHN0cnVjdCBkcm1fY29ubmVjdG9yIHsKPiAgCSAqIEBwcml2YWN5X3NjcmVlbl9od19z dGF0ZV9wcm9wZXJ0eTogT3B0aW9uYWwgYXRvbWljIHByb3BlcnR5IGZvciB0aGUKPiAgCSAqIGNv bm5lY3RvciB0byByZXBvcnQgdGhlIGFjdHVhbCBpbnRlZ3JhdGVkIHByaXZhY3kgc2NyZWVuIHN0 YXRlLgo+ICAJICovCj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcml2YWN5X3NjcmVlbl9od19z dGF0ZV9wcm9wZXJ0eTsKPiAgCj4gKwkvKioKPiArCSAqIEBicm9hZGNhc3RfcmdiX3Byb3BlcnR5 OiBDb25uZWN0b3IgcHJvcGVydHkgdG8gc2V0IHRoZQo+ICsJICogQnJvYWRjYXN0IFJHQiBzZWxl Y3Rpb24gdG8gb3V0cHV0IHdpdGguCj4gKwkgKi8KPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKmJy b2FkY2FzdF9yZ2JfcHJvcGVydHk7Cj4gKwo+ICAjZGVmaW5lIERSTV9DT05ORUNUT1JfUE9MTF9I UEQgKDEgPDwgMCkKPiAgI2RlZmluZSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCAoMSA8PCAx KQo+ICAjZGVmaW5lIERSTV9DT05ORUNUT1JfUE9MTF9ESVNDT05ORUNUICgxIDw8IDIpCj4gIAo+ ICAJLyoqCj4gQEAgLTIwOTAsMTAgKzIxMjUsMTEgQEAgaW50IGRybV9tb2RlX2NyZWF0ZV9zY2Fs aW5nX21vZGVfcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gIGludCBkcm1fY29u bmVjdG9yX2F0dGFjaF9jb250ZW50X3R5cGVfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3Ig KmRldik7Cj4gIGludCBkcm1fY29ubmVjdG9yX2F0dGFjaF9zY2FsaW5nX21vZGVfcHJvcGVydHko c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQkJCQkgICAgICAgdTMyIHNjYWxp bmdfbW9kZV9tYXNrKTsKPiAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX3Zycl9jYXBhYmxlX3By b3BlcnR5KAo+ICAJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ICtpbnQgZHJt X2Nvbm5lY3Rvcl9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKTsKPiAgaW50IGRybV9jb25uZWN0b3JfYXR0YWNoX2NvbG9yc3BhY2Vf cHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gIGludCBkcm1fY29u bmVjdG9yX2F0dGFjaF9oZHJfb3V0cHV0X21ldGFkYXRhX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ICBib29sIGRybV9jb25uZWN0b3JfYXRvbWljX2hkcl9tZXRh ZGF0YV9lcXVhbChzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX3N0YXRlLAo+ICAJCQkJ CSAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19zdGF0ZSk7Cj4gIGludCBkcm1f bW9kZV9jcmVhdGVfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+IAo+IAoKCi0tIApUUS1TeXN0ZW1zIEdtYkggfCBNw7xobHN0cmHDn2UgMiwgR3V0IERlbGxp bmcgfCA4MjIyOSBTZWVmZWxkLCBHZXJtYW55CkFtdHNnZXJpY2h0IE3DvG5jaGVuLCBIUkIgMTA1 MDE4Ckdlc2Now6RmdHNmw7xocmVyOiBEZXRsZWYgU2NobmVpZGVyLCBSw7xkaWdlciBTdGFobCwg U3RlZmFuIFNjaG5laWRlcgpodHRwOi8vd3d3LnRxLWdyb3VwLmNvbS8KCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=