From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mout-p-102.mailbox.org (mout-p-102.mailbox.org [80.241.56.152]) (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 9585A1A38CA for ; Thu, 14 Mar 2024 05:44:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=80.241.56.152 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395057; cv=none; b=Hy5DalB1/UgHzbwMtd3kGUPtlVzlQ4gTLgJzcXd2+fuKTYlJaExIijE9f0mp5eJklh6gyzI35zLDj1JytGUAQ92fA/fQ3vcujyJhtemEnJOMdJ4HY4wNr9i/n0h7ksUJAQdp+4pzDcv2VjFDwTxntAxh12ROVojnjZXfOEGpFF8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395057; c=relaxed/simple; bh=cwcJBxyeb7vOv3XrdLcrxBFEkCrwJyOEt5gUtMjvyTw=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=c+BrMeF/OaqrqTHUTQS04Mv1fPKDakPfcNuI/jwPEjUBgR8vesaIbLgxZj3dGgK35bpIQ4MRLoSegjtIzGgUoytJIF+qZYFB/wTuVMj4XPIicH1H44PZXxodXLpO49yK4TAcRTuUslcRHDWgDNbT8hlLYkmGmVqscWfVUqfI+jc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oltmanns.dev; spf=pass smtp.mailfrom=oltmanns.dev; dkim=pass (2048-bit key) header.d=oltmanns.dev header.i=@oltmanns.dev header.b=kZa0iucc; arc=none smtp.client-ip=80.241.56.152 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oltmanns.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oltmanns.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oltmanns.dev header.i=@oltmanns.dev header.b="kZa0iucc" Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4TwGXP1tdJz9tQC; Thu, 14 Mar 2024 06:44:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oltmanns.dev; s=MBO0001; t=1710395045; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jaJ8pZ9W3PfGOzFfzKRaF6N9Sdm8RE+dMAfP+mS3M4w=; b=kZa0iuccJg3vDYU5HlPowebCDXer3FTu+HyECKKe+JZcd7E35fgCaG+C3L4a5PTI4nez19 m+yjGPjpHC1wTYs0mOuG1rrWgef6yz8r1zsj7tSBxtyVsjtSa7S22NUbr6Nwd9DpJCTbiJ ayLrIK+S4K6sb1FLyLdRb6tYrhQ3ByY7yz6AmFQw1mxLwMU4qa2rWMOMOMTVrmDpsGSoms 3PFZYSYTL5zpa9QtgaMUm/phj+5BwXUJN0g8mJ7MtsEKjFUGYYE7pkJAy4HHjt+coIJ1b3 snkMQKnb1Hxp/PFlIhPUF+F7okVAb6ZXG9N7VRa86n4UNrA1r2YzvAdivh8uNw== From: Frank Oltmanns To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: Maxime Ripard , Chen-Yu Tsai , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Samuel Holland , Icenowy Zheng , Ondrej Jirman , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/sun4i: tcon: Support keeping dclk rate upon ancestor clock changes In-Reply-To: <3793448.kQq0lBPeGt@jernej-laptop> ("Jernej =?utf-8?Q?=C5=A0k?= =?utf-8?Q?rabec=22's?= message of "Wed, 13 Mar 2024 19:11:37 +0100") References: <20240310-tcon_keep_stable_rate-v1-1-0296b0a85c02@oltmanns.dev> <3793448.kQq0lBPeGt@jernej-laptop> Date: Thu, 14 Mar 2024 06:43:55 +0100 Message-ID: <87sf0twep0.fsf@oltmanns.dev> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TwGXP1tdJz9tQC On 2024-03-13 at 19:11:37 +0100, Jernej =C5=A0krabec wrote: Hi Jernej, Thank you for your having a thorough look at this! > Hi Frank! > > Thanks on tackling this issue. > > Dne nedelja, 10. marec 2024 ob 14:32:29 CET je Frank Oltmanns napisal(a): >> Allow the dclk to reset its rate when a rate change is initiated from an >> ancestor clock. This makes it possible to no longer to get an exclusive >> lock. As a consequence, it is now possible to set new rates if >> necessary, e.g. when an external display is connected. >> >> The first user of this functionality is the A64 because PLL-VIDEO0 is an >> ancestor for both HDMI and TCON0. This allows to select an optimal rate >> for TCON0 as long as there is no external HDMI connection. Once a change >> in PLL-VIDEO0 is performed when an HDMI connection is established, TCON0 >> can react gracefully and select an optimal rate based on this the new >> constraint. >> >> Signed-off-by: Frank Oltmanns >> --- >> I would like to make the Allwinner A64's data-clock keep its rate >> when its ancestor's (pll-video0) rate changes. Keeping data-clock's rate >> is required, to let the A64 drive both an LCD and HDMI display at the >> same time, because both have pll-video0 as an ancestor. >> >> TCONs that use this flag store the ideal rate for their data-clock and >> subscribe to be notified when data-clock changes. When rate setting has >> finished (indicated by a POST_RATE_CHANGE event) the call back function >> schedules delayed work to set the data-clock's rate to the initial value >> after 100 ms. Using delayed work maks sure that the clock setting is >> finished. >> >> I've implemented this functionality as a quirk, so that it is possible >> to use it only for the A64. >> >> This patch supersedes [1]. >> >> This work is inspired by an out-of-tree patchset [2] [3] [4]. >> Unfortunately, the patchset uses clk_set_rate() directly in a notifier >> callback, which the following comment on clk_notifier_register() >> forbids: "The callbacks associated with the notifier must not re-enter >> into the clk framework by calling any top-level clk APIs." [5] >> Furthermore, that out-of-tree patchset no longer works since 6.6, >> because setting pll-mipi is now also resetting pll-video0 and therefore >> causes a race condition. >> >> Thank you for considering this contribution, >> Frank >> >> [1] https://lore.kernel.org/lkml/20230825-pll-mipi_keep_rate-v1-0-35bc43= 570730@oltmanns.dev/ >> [2] https://codeberg.org/megi/linux/commit/a37cda2fff41a67a2bacf82b1594e= 10335d0bd8a >> [3] https://codeberg.org/megi/linux/commit/24dc09128d2c8efc6ddf19249420e= 9798e967a46 >> [4] https://codeberg.org/megi/linux/commit/728a93d46f99f0eb231ed6fa8971a= 45f97c7182c >> [5] https://elixir.bootlin.com/linux/v6.7.9/source/drivers/clk/clk.c#L46= 69 >> --- >> drivers/gpu/drm/sun4i/sun4i_tcon.c | 70 +++++++++++++++++++++++++++++++= +++---- >> drivers/gpu/drm/sun4i/sun4i_tcon.h | 12 +++++++ >> 2 files changed, 76 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/= sun4i_tcon.c >> index a1a2c845ade0..b880bd44049a 100644 >> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c >> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c >> @@ -108,9 +108,11 @@ static void sun4i_tcon_channel_set_status(struct su= n4i_tcon *tcon, int channel, >> >> if (enabled) { >> clk_prepare_enable(clk); >> - clk_rate_exclusive_get(clk); >> + if (!tcon->quirks->restores_rate) >> + clk_rate_exclusive_get(clk); >> } else { >> - clk_rate_exclusive_put(clk); >> + if (!tcon->quirks->restores_rate) >> + clk_rate_exclusive_put(clk); >> clk_disable_unprepare(clk); >> } >> } >> @@ -343,6 +345,53 @@ static void sun4i_tcon0_mode_set_dithering(struct s= un4i_tcon *tcon, >> regmap_write(tcon->regs, SUN4I_TCON_FRM_CTL_REG, val); >> } >> >> +static void sun4i_rate_reset_notifier_delayed_update(struct work_struct= *work) >> +{ >> + struct sun4i_rate_reset_nb *rate_reset =3D container_of(work, struct s= un4i_rate_reset_nb, >> + reset_rate_work.work); >> + >> + clk_set_rate(rate_reset->target_clk, rate_reset->saved_rate); >> +} >> + >> +static int sun4i_rate_reset_notifier_cb(struct notifier_block *nb, >> + unsigned long event, void *data) >> +{ >> + struct sun4i_rate_reset_nb *rate_reset =3D to_sun4i_rate_reset_nb(nb); >> + >> + if (event =3D=3D POST_RATE_CHANGE) >> + schedule_delayed_work(&rate_reset->reset_rate_work, msecs_to_jiffies(= 100)); > > Do we need that delay though? Since clock is set exclusive on TV TCONs, t= hen > it shouldn't be changed. Alternative, simpler variation would be something > like this: > https://elixir.bootlin.com/linux/v6.8/source/drivers/tty/serial/8250/8250= _dw.c#L333 > Interesting! My reason for scheduling the work was to make sure we don't call any clk API functions from the callback as described in my cover letter above. But using the queue is a much nicer approach for achieving the same thing! Thanks! >> + >> + return NOTIFY_DONE; >> +} >> + >> +static void sun4i_rate_reset_notifier_register(struct sun4i_rate_reset_= nb *rate_reset_nb) >> +{ >> + if (rate_reset_nb->is_registered) >> + return; >> + >> + rate_reset_nb->clk_nb.notifier_call =3D sun4i_rate_reset_notifier_cb; >> + >> + INIT_DELAYED_WORK(&rate_reset_nb->reset_rate_work, >> + sun4i_rate_reset_notifier_delayed_update); >> + >> + if (!clk_notifier_register(rate_reset_nb->target_clk, >> + &rate_reset_nb->clk_nb)) >> + rate_reset_nb->is_registered =3D true; >> +} >> + >> +static struct sun4i_rate_reset_nb tcon_rate_reset_tcon0_nb; > > Is there any specific reason for global variable? Note that R40 and T507 = have > 2 LCD and 2 TV TCONs. If it's ever used there, it won't fly. Please move = to > TCON struct. You can drop a few fields for doing so. The only reason is that global variables were used for the SoC specific callbacks that served as my inspiration. So, I thought it was a common pattern. Actually, I wanted to make it part of the tcon struct but refrained from doing so to not break the pattern. Now that I have your blessing, I'll refactor. > >> + >> +static void sun4i_tcon0_set_dclk_rate(struct sun4i_tcon *tcon, unsigned= long rate) >> +{ >> + clk_set_rate(tcon->dclk, rate); >> + >> + if (tcon->quirks->restores_rate) { >> + tcon_rate_reset_tcon0_nb.target_clk =3D tcon->dclk; >> + tcon_rate_reset_tcon0_nb.saved_rate =3D rate; >> + sun4i_rate_reset_notifier_register(&tcon_rate_reset_tcon0_nb); > > Can't be registration done at TCON init time? Probably yes! I'll make sure to do so in V2. Thanks again for the great feedback, Frank > > Best regards, > Jernej > >> + } >> +} >> + >> static void sun4i_tcon0_mode_set_cpu(struct sun4i_tcon *tcon, >> const struct drm_encoder *encoder, >> const struct drm_display_mode *mode) >> @@ -360,8 +409,8 @@ static void sun4i_tcon0_mode_set_cpu(struct sun4i_tc= on *tcon, >> */ >> tcon->dclk_min_div =3D SUN6I_DSI_TCON_DIV; >> tcon->dclk_max_div =3D SUN6I_DSI_TCON_DIV; >> - clk_set_rate(tcon->dclk, mode->crtc_clock * 1000 * (bpp / lanes) >> - / SUN6I_DSI_TCON_DIV); >> + sun4i_tcon0_set_dclk_rate(tcon, mode->crtc_clock * 1000 * (bpp / lanes) >> + / SUN6I_DSI_TCON_DIV); >> >> /* Set the resolution */ >> regmap_write(tcon->regs, SUN4I_TCON0_BASIC0_REG, >> @@ -434,7 +483,7 @@ static void sun4i_tcon0_mode_set_lvds(struct sun4i_t= con *tcon, >> >> tcon->dclk_min_div =3D 7; >> tcon->dclk_max_div =3D 7; >> - clk_set_rate(tcon->dclk, mode->crtc_clock * 1000); >> + sun4i_tcon0_set_dclk_rate(tcon, mode->crtc_clock * 1000); >> >> /* Set the resolution */ >> regmap_write(tcon->regs, SUN4I_TCON0_BASIC0_REG, >> @@ -516,7 +565,7 @@ static void sun4i_tcon0_mode_set_rgb(struct sun4i_tc= on *tcon, >> >> tcon->dclk_min_div =3D tcon->quirks->dclk_min_div; >> tcon->dclk_max_div =3D 127; >> - clk_set_rate(tcon->dclk, mode->crtc_clock * 1000); >> + sun4i_tcon0_set_dclk_rate(tcon, mode->crtc_clock * 1000); >> >> /* Set the resolution */ >> regmap_write(tcon->regs, SUN4I_TCON0_BASIC0_REG, >> @@ -1503,6 +1552,14 @@ static const struct sun4i_tcon_quirks sun8i_a33_q= uirks =3D { >> .supports_lvds =3D true, >> }; >> >> +static const struct sun4i_tcon_quirks sun50i_a64_lcd_quirks =3D { >> + .supports_lvds =3D true, >> + .has_channel_0 =3D true, >> + .restores_rate =3D true, >> + .dclk_min_div =3D 1, >> + .setup_lvds_phy =3D sun6i_tcon_setup_lvds_phy, >> +}; >> + >> static const struct sun4i_tcon_quirks sun8i_a83t_lcd_quirks =3D { >> .supports_lvds =3D true, >> .has_channel_0 =3D true, >> @@ -1561,6 +1618,7 @@ const struct of_device_id sun4i_tcon_of_table[] = =3D { >> { .compatible =3D "allwinner,sun9i-a80-tcon-tv", .data =3D &sun9i_a80_= tcon_tv_quirks }, >> { .compatible =3D "allwinner,sun20i-d1-tcon-lcd", .data =3D &sun20i_d1= _lcd_quirks }, >> { .compatible =3D "allwinner,sun20i-d1-tcon-tv", .data =3D &sun8i_r40_= tv_quirks }, >> + { .compatible =3D "allwinner,sun50i-a64-tcon-lcd", .data =3D &sun50i_a= 64_lcd_quirks }, >> { } >> }; >> MODULE_DEVICE_TABLE(of, sun4i_tcon_of_table); >> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.h b/drivers/gpu/drm/sun4i/= sun4i_tcon.h >> index fa23aa23fe4a..bd4abc90062b 100644 >> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.h >> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.h >> @@ -243,6 +243,7 @@ struct sun4i_tcon_quirks { >> bool needs_edp_reset; /* a80 edp reset needed for tcon0 access */ >> bool supports_lvds; /* Does the TCON support an LVDS output? */ >> bool polarity_in_ch0; /* some tcon1 channels have polarity bits in tco= n0 pol register */ >> + bool restores_rate; /* restores the initial rate when rate changes */ >> u8 dclk_min_div; /* minimum divider for TCON0 DCLK */ >> >> /* callback to handle tcon muxing options */ >> @@ -300,4 +301,15 @@ void sun4i_tcon_set_status(struct sun4i_tcon *crtc, >> >> extern const struct of_device_id sun4i_tcon_of_table[]; >> >> +struct sun4i_rate_reset_nb { >> + struct notifier_block clk_nb; >> + struct delayed_work reset_rate_work; >> + >> + struct clk *target_clk; >> + unsigned long saved_rate; >> + bool is_registered; >> +}; >> + >> +#define to_sun4i_rate_reset_nb(_nb) container_of(_nb, struct sun4i_rate= _reset_nb, clk_nb) >> + >> #endif /* __SUN4I_TCON_H__ */ >> >> --- >> base-commit: dcb6c8ee6acc6c347caec1e73fb900c0f4ff9806 >> change-id: 20240304-tcon_keep_stable_rate-5729c7706343 >> >> Best regards, >> 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 13106C5475B for ; Thu, 14 Mar 2024 05:44:35 +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:Message-ID:Date:References :In-Reply-To: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=2ZhTdp6fp4A8fthUGoV3jBfGFm+QAXFsYbEKqSZz8oc=; b=gsmIBxDUoyilDQ DsB/MbjohKVR1ggwgO4iilZ7bHHrEvpgSEIFlY76r0qJddu3dN3abKWb/ZOT/pzz6pNazPgEOYqAd ZjKA/ZqDOHMuMKk/D0cQYNZLpESTXnl4/paxn4JBDXntNqKdtGi/i96qQW51WbiPP8Ahawv0Nznbz 5NwJNlhKy81s8xP1x6I70sy9XC4FoBEDjzXe+mupjT837eEkzDW6mEtsmNlR9UFvIDOa1Vpmq0itu LCSZIzsrC7hn+A+/JoyHmrR4PFUMA3a9BiSqLhlBVvaEyWSNEAbYGb5+P/+xiUFLXEFBPKS3+ZU2y MKu7oAhrB56cwwSOp9eQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rkdt5-0000000D4W6-1Ny9; Thu, 14 Mar 2024 05:44:19 +0000 Received: from mout-p-102.mailbox.org ([2001:67c:2050:0:465::102]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rkdt2-0000000D4Uh-1Pcj for linux-arm-kernel@lists.infradead.org; Thu, 14 Mar 2024 05:44:18 +0000 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4TwGXP1tdJz9tQC; Thu, 14 Mar 2024 06:44:05 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oltmanns.dev; s=MBO0001; t=1710395045; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jaJ8pZ9W3PfGOzFfzKRaF6N9Sdm8RE+dMAfP+mS3M4w=; b=kZa0iuccJg3vDYU5HlPowebCDXer3FTu+HyECKKe+JZcd7E35fgCaG+C3L4a5PTI4nez19 m+yjGPjpHC1wTYs0mOuG1rrWgef6yz8r1zsj7tSBxtyVsjtSa7S22NUbr6Nwd9DpJCTbiJ ayLrIK+S4K6sb1FLyLdRb6tYrhQ3ByY7yz6AmFQw1mxLwMU4qa2rWMOMOMTVrmDpsGSoms 3PFZYSYTL5zpa9QtgaMUm/phj+5BwXUJN0g8mJ7MtsEKjFUGYYE7pkJAy4HHjt+coIJ1b3 snkMQKnb1Hxp/PFlIhPUF+F7okVAb6ZXG9N7VRa86n4UNrA1r2YzvAdivh8uNw== From: Frank Oltmanns To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: Maxime Ripard , Chen-Yu Tsai , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Daniel Vetter , Samuel Holland , Icenowy Zheng , Ondrej Jirman , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/sun4i: tcon: Support keeping dclk rate upon ancestor clock changes In-Reply-To: <3793448.kQq0lBPeGt@jernej-laptop> ("Jernej =?utf-8?Q?=C5=A0k?= =?utf-8?Q?rabec=22's?= message of "Wed, 13 Mar 2024 19:11:37 +0100") References: <20240310-tcon_keep_stable_rate-v1-1-0296b0a85c02@oltmanns.dev> <3793448.kQq0lBPeGt@jernej-laptop> Date: Thu, 14 Mar 2024 06:43:55 +0100 Message-ID: <87sf0twep0.fsf@oltmanns.dev> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4TwGXP1tdJz9tQC X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240313_224416_536684_B9EC7530 X-CRM114-Status: GOOD ( 38.45 ) 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 T24gMjAyNC0wMy0xMyBhdCAxOToxMTozNyArMDEwMCwgSmVybmVqIMWga3JhYmVjIDxqZXJuZWou c2tyYWJlY0BnbWFpbC5jb20+IHdyb3RlOgpIaSBKZXJuZWosCgpUaGFuayB5b3UgZm9yIHlvdXIg aGF2aW5nIGEgdGhvcm91Z2ggbG9vayBhdCB0aGlzIQoKPiBIaSBGcmFuayEKPgo+IFRoYW5rcyBv biB0YWNrbGluZyB0aGlzIGlzc3VlLgo+Cj4gRG5lIG5lZGVsamEsIDEwLiBtYXJlYyAyMDI0IG9i IDE0OjMyOjI5IENFVCBqZSBGcmFuayBPbHRtYW5ucyBuYXBpc2FsKGEpOgo+PiBBbGxvdyB0aGUg ZGNsayB0byByZXNldCBpdHMgcmF0ZSB3aGVuIGEgcmF0ZSBjaGFuZ2UgaXMgaW5pdGlhdGVkIGZy b20gYW4KPj4gYW5jZXN0b3IgY2xvY2suIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbm8gbG9u Z2VyIHRvIGdldCBhbiBleGNsdXNpdmUKPj4gbG9jay4gQXMgYSBjb25zZXF1ZW5jZSwgaXQgaXMg bm93IHBvc3NpYmxlIHRvIHNldCBuZXcgcmF0ZXMgaWYKPj4gbmVjZXNzYXJ5LCBlLmcuIHdoZW4g YW4gZXh0ZXJuYWwgZGlzcGxheSBpcyBjb25uZWN0ZWQuCj4+Cj4+IFRoZSBmaXJzdCB1c2VyIG9m IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB0aGUgQTY0IGJlY2F1c2UgUExMLVZJREVPMCBpcyBhbgo+ PiBhbmNlc3RvciBmb3IgYm90aCBIRE1JIGFuZCBUQ09OMC4gVGhpcyBhbGxvd3MgdG8gc2VsZWN0 IGFuIG9wdGltYWwgcmF0ZQo+PiBmb3IgVENPTjAgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBleHRl cm5hbCBIRE1JIGNvbm5lY3Rpb24uIE9uY2UgYSBjaGFuZ2UKPj4gaW4gUExMLVZJREVPMCBpcyBw ZXJmb3JtZWQgd2hlbiBhbiBIRE1JIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIFRDT04wCj4+ IGNhbiByZWFjdCBncmFjZWZ1bGx5IGFuZCBzZWxlY3QgYW4gb3B0aW1hbCByYXRlIGJhc2VkIG9u IHRoaXMgdGhlIG5ldwo+PiBjb25zdHJhaW50Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBGcmFuayBP bHRtYW5ucyA8ZnJhbmtAb2x0bWFubnMuZGV2Pgo+PiAtLS0KPj4gSSB3b3VsZCBsaWtlIHRvIG1h a2UgdGhlIEFsbHdpbm5lciBBNjQncyBkYXRhLWNsb2NrIGtlZXAgaXRzIHJhdGUKPj4gd2hlbiBp dHMgYW5jZXN0b3IncyAocGxsLXZpZGVvMCkgcmF0ZSBjaGFuZ2VzLiBLZWVwaW5nIGRhdGEtY2xv Y2sncyByYXRlCj4+IGlzIHJlcXVpcmVkLCB0byBsZXQgdGhlIEE2NCBkcml2ZSBib3RoIGFuIExD RCBhbmQgSERNSSBkaXNwbGF5IGF0IHRoZQo+PiBzYW1lIHRpbWUsIGJlY2F1c2UgYm90aCBoYXZl IHBsbC12aWRlbzAgYXMgYW4gYW5jZXN0b3IuCj4+Cj4+IFRDT05zIHRoYXQgdXNlIHRoaXMgZmxh ZyBzdG9yZSB0aGUgaWRlYWwgcmF0ZSBmb3IgdGhlaXIgZGF0YS1jbG9jayBhbmQKPj4gc3Vic2Ny aWJlIHRvIGJlIG5vdGlmaWVkIHdoZW4gZGF0YS1jbG9jayBjaGFuZ2VzLiBXaGVuIHJhdGUgc2V0 dGluZyBoYXMKPj4gZmluaXNoZWQgKGluZGljYXRlZCBieSBhIFBPU1RfUkFURV9DSEFOR0UgZXZl bnQpIHRoZSBjYWxsIGJhY2sgZnVuY3Rpb24KPj4gc2NoZWR1bGVzIGRlbGF5ZWQgd29yayB0byBz ZXQgdGhlIGRhdGEtY2xvY2sncyByYXRlIHRvIHRoZSBpbml0aWFsIHZhbHVlCj4+IGFmdGVyIDEw MCBtcy4gVXNpbmcgZGVsYXllZCB3b3JrIG1ha3Mgc3VyZSB0aGF0IHRoZSBjbG9jayBzZXR0aW5n IGlzCj4+IGZpbmlzaGVkLgo+Pgo+PiBJJ3ZlIGltcGxlbWVudGVkIHRoaXMgZnVuY3Rpb25hbGl0 eSBhcyBhIHF1aXJrLCBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlCj4+IHRvIHVzZSBpdCBvbmx5IGZv ciB0aGUgQTY0Lgo+Pgo+PiBUaGlzIHBhdGNoIHN1cGVyc2VkZXMgWzFdLgo+Pgo+PiBUaGlzIHdv cmsgaXMgaW5zcGlyZWQgYnkgYW4gb3V0LW9mLXRyZWUgcGF0Y2hzZXQgWzJdIFszXSBbNF0uCj4+ IFVuZm9ydHVuYXRlbHksIHRoZSBwYXRjaHNldCB1c2VzIGNsa19zZXRfcmF0ZSgpIGRpcmVjdGx5 IGluIGEgbm90aWZpZXIKPj4gY2FsbGJhY2ssIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29tbWVudCBv biBjbGtfbm90aWZpZXJfcmVnaXN0ZXIoKQo+PiBmb3JiaWRzOiAiVGhlIGNhbGxiYWNrcyBhc3Nv Y2lhdGVkIHdpdGggdGhlIG5vdGlmaWVyIG11c3Qgbm90IHJlLWVudGVyCj4+IGludG8gdGhlIGNs ayBmcmFtZXdvcmsgYnkgY2FsbGluZyBhbnkgdG9wLWxldmVsIGNsayBBUElzLiIgWzVdCj4+IEZ1 cnRoZXJtb3JlLCB0aGF0IG91dC1vZi10cmVlIHBhdGNoc2V0IG5vIGxvbmdlciB3b3JrcyBzaW5j ZSA2LjYsCj4+IGJlY2F1c2Ugc2V0dGluZyBwbGwtbWlwaSBpcyBub3cgYWxzbyByZXNldHRpbmcg cGxsLXZpZGVvMCBhbmQgdGhlcmVmb3JlCj4+IGNhdXNlcyBhIHJhY2UgY29uZGl0aW9uLgo+Pgo+ PiBUaGFuayB5b3UgZm9yIGNvbnNpZGVyaW5nIHRoaXMgY29udHJpYnV0aW9uLAo+PiAgIEZyYW5r Cj4+Cj4+IFsxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjMwODI1LXBsbC1taXBp X2tlZXBfcmF0ZS12MS0wLTM1YmM0MzU3MDczMEBvbHRtYW5ucy5kZXYvCj4+IFsyXSBodHRwczov L2NvZGViZXJnLm9yZy9tZWdpL2xpbnV4L2NvbW1pdC9hMzdjZGEyZmZmNDFhNjdhMmJhY2Y4MmIx NTk0ZTEwMzM1ZDBiZDhhCj4+IFszXSBodHRwczovL2NvZGViZXJnLm9yZy9tZWdpL2xpbnV4L2Nv bW1pdC8yNGRjMDkxMjhkMmM4ZWZjNmRkZjE5MjQ5NDIwZTk3OThlOTY3YTQ2Cj4+IFs0XSBodHRw czovL2NvZGViZXJnLm9yZy9tZWdpL2xpbnV4L2NvbW1pdC83MjhhOTNkNDZmOTlmMGViMjMxZWQ2 ZmE4OTcxYTQ1Zjk3YzcxODJjCj4+IFs1XSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51 eC92Ni43Ljkvc291cmNlL2RyaXZlcnMvY2xrL2Nsay5jI0w0NjY5Cj4+IC0tLQo+PiAgZHJpdmVy cy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24uYyB8IDcwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tCj4+ICBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oIHwg MTIgKysrKysrKwo+PiAgMiBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0 aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rj b24uYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29uLmMKPj4gaW5kZXggYTFhMmM4 NDVhZGUwLi5iODgwYmQ0NDA0OWEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40 aS9zdW40aV90Y29uLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX3Rjb24u Ywo+PiBAQCAtMTA4LDkgKzEwOCwxMSBAQCBzdGF0aWMgdm9pZCBzdW40aV90Y29uX2NoYW5uZWxf c2V0X3N0YXR1cyhzdHJ1Y3Qgc3VuNGlfdGNvbiAqdGNvbiwgaW50IGNoYW5uZWwsCj4+Cj4+ICAJ aWYgKGVuYWJsZWQpIHsKPj4gIAkJY2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7Cj4+IC0JCWNsa19y YXRlX2V4Y2x1c2l2ZV9nZXQoY2xrKTsKPj4gKwkJaWYgKCF0Y29uLT5xdWlya3MtPnJlc3RvcmVz X3JhdGUpCj4+ICsJCQljbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGNsayk7Cj4+ICAJfSBlbHNlIHsK Pj4gLQkJY2xrX3JhdGVfZXhjbHVzaXZlX3B1dChjbGspOwo+PiArCQlpZiAoIXRjb24tPnF1aXJr cy0+cmVzdG9yZXNfcmF0ZSkKPj4gKwkJCWNsa19yYXRlX2V4Y2x1c2l2ZV9wdXQoY2xrKTsKPj4g IAkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7Cj4+ICAJfQo+PiAgfQo+PiBAQCAtMzQzLDYg KzM0NSw1MyBAQCBzdGF0aWMgdm9pZCBzdW40aV90Y29uMF9tb2RlX3NldF9kaXRoZXJpbmcoc3Ry dWN0IHN1bjRpX3Rjb24gKnRjb24sCj4+ICAJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJ X1RDT05fRlJNX0NUTF9SRUcsIHZhbCk7Cj4+ICB9Cj4+Cj4+ICtzdGF0aWMgdm9pZCBzdW40aV9y YXRlX3Jlc2V0X25vdGlmaWVyX2RlbGF5ZWRfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29y aykKPj4gK3sKPj4gKwlzdHJ1Y3Qgc3VuNGlfcmF0ZV9yZXNldF9uYiAqcmF0ZV9yZXNldCA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3VuNGlfcmF0ZV9yZXNldF9uYiwKPj4gKwkJCQkJCQkg ICAgcmVzZXRfcmF0ZV93b3JrLndvcmspOwo+PiArCj4+ICsJY2xrX3NldF9yYXRlKHJhdGVfcmVz ZXQtPnRhcmdldF9jbGssIHJhdGVfcmVzZXQtPnNhdmVkX3JhdGUpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IHN1bjRpX3JhdGVfcmVzZXRfbm90aWZpZXJfY2Ioc3RydWN0IG5vdGlmaWVyX2Js b2NrICpuYiwKPj4gKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQo+ PiArewo+PiArCXN0cnVjdCBzdW40aV9yYXRlX3Jlc2V0X25iICpyYXRlX3Jlc2V0ID0gdG9fc3Vu NGlfcmF0ZV9yZXNldF9uYihuYik7Cj4+ICsKPj4gKwlpZiAoZXZlbnQgPT0gUE9TVF9SQVRFX0NI QU5HRSkKPj4gKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyYXRlX3Jlc2V0LT5yZXNldF9yYXRl X3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7Cj4KPiBEbyB3ZSBuZWVkIHRoYXQgZGVsYXkg dGhvdWdoPyBTaW5jZSBjbG9jayBpcyBzZXQgZXhjbHVzaXZlIG9uIFRWIFRDT05zLCB0aGVuCj4g aXQgc2hvdWxkbid0IGJlIGNoYW5nZWQuIEFsdGVybmF0aXZlLCBzaW1wbGVyIHZhcmlhdGlvbiB3 b3VsZCBiZSBzb21ldGhpbmcKPiBsaWtlIHRoaXM6Cj4gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5j b20vbGludXgvdjYuOC9zb3VyY2UvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9kdy5jI0wz MzMKPgoKSW50ZXJlc3RpbmchIE15IHJlYXNvbiBmb3Igc2NoZWR1bGluZyB0aGUgd29yayB3YXMg dG8gbWFrZSBzdXJlIHdlIGRvbid0CmNhbGwgYW55IGNsayBBUEkgZnVuY3Rpb25zIGZyb20gdGhl IGNhbGxiYWNrIGFzIGRlc2NyaWJlZCBpbiBteSBjb3ZlcgpsZXR0ZXIgYWJvdmUuIEJ1dCB1c2lu ZyB0aGUgcXVldWUgaXMgYSBtdWNoIG5pY2VyIGFwcHJvYWNoIGZvciBhY2hpZXZpbmcKdGhlIHNh bWUgdGhpbmchIFRoYW5rcyEKCj4+ICsKPj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIHN1bjRpX3JhdGVfcmVzZXRfbm90aWZpZXJfcmVnaXN0ZXIoc3Ry dWN0IHN1bjRpX3JhdGVfcmVzZXRfbmIgKnJhdGVfcmVzZXRfbmIpCj4+ICt7Cj4+ICsJaWYgKHJh dGVfcmVzZXRfbmItPmlzX3JlZ2lzdGVyZWQpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCXJhdGVf cmVzZXRfbmItPmNsa19uYi5ub3RpZmllcl9jYWxsID0gc3VuNGlfcmF0ZV9yZXNldF9ub3RpZmll cl9jYjsKPj4gKwo+PiArCUlOSVRfREVMQVlFRF9XT1JLKCZyYXRlX3Jlc2V0X25iLT5yZXNldF9y YXRlX3dvcmssCj4+ICsJCQkgIHN1bjRpX3JhdGVfcmVzZXRfbm90aWZpZXJfZGVsYXllZF91cGRh dGUpOwo+PiArCj4+ICsJaWYgKCFjbGtfbm90aWZpZXJfcmVnaXN0ZXIocmF0ZV9yZXNldF9uYi0+ dGFyZ2V0X2NsaywKPj4gKwkJCQkgICAmcmF0ZV9yZXNldF9uYi0+Y2xrX25iKSkKPj4gKwkJcmF0 ZV9yZXNldF9uYi0+aXNfcmVnaXN0ZXJlZCA9IHRydWU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBz dHJ1Y3Qgc3VuNGlfcmF0ZV9yZXNldF9uYiB0Y29uX3JhdGVfcmVzZXRfdGNvbjBfbmI7Cj4KPiBJ cyB0aGVyZSBhbnkgc3BlY2lmaWMgcmVhc29uIGZvciBnbG9iYWwgdmFyaWFibGU/IE5vdGUgdGhh dCBSNDAgYW5kIFQ1MDcgaGF2ZQo+IDIgTENEIGFuZCAyIFRWIFRDT05zLiBJZiBpdCdzIGV2ZXIg dXNlZCB0aGVyZSwgaXQgd29uJ3QgZmx5LiBQbGVhc2UgbW92ZSB0bwo+IFRDT04gc3RydWN0LiBZ b3UgY2FuIGRyb3AgYSBmZXcgZmllbGRzIGZvciBkb2luZyBzby4KClRoZSBvbmx5IHJlYXNvbiBp cyB0aGF0IGdsb2JhbCB2YXJpYWJsZXMgd2VyZSB1c2VkIGZvciB0aGUgU29DIHNwZWNpZmljCmNh bGxiYWNrcyB0aGF0IHNlcnZlZCBhcyBteSBpbnNwaXJhdGlvbi4gU28sIEkgdGhvdWdodCBpdCB3 YXMgYSBjb21tb24KcGF0dGVybi4gQWN0dWFsbHksIEkgd2FudGVkIHRvIG1ha2UgaXQgcGFydCBv ZiB0aGUgdGNvbiBzdHJ1Y3QgYnV0CnJlZnJhaW5lZCBmcm9tIGRvaW5nIHNvIHRvIG5vdCBicmVh ayB0aGUgcGF0dGVybi4gTm93IHRoYXQgSSBoYXZlIHlvdXIKYmxlc3NpbmcsIEknbGwgcmVmYWN0 b3IuCgo+Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHN1bjRpX3Rjb24wX3NldF9kY2xrX3JhdGUoc3Ry dWN0IHN1bjRpX3Rjb24gKnRjb24sIHVuc2lnbmVkIGxvbmcgcmF0ZSkKPj4gK3sKPj4gKwljbGtf c2V0X3JhdGUodGNvbi0+ZGNsaywgcmF0ZSk7Cj4+ICsKPj4gKwlpZiAodGNvbi0+cXVpcmtzLT5y ZXN0b3Jlc19yYXRlKSB7Cj4+ICsJCXRjb25fcmF0ZV9yZXNldF90Y29uMF9uYi50YXJnZXRfY2xr ID0gdGNvbi0+ZGNsazsKPj4gKwkJdGNvbl9yYXRlX3Jlc2V0X3Rjb24wX25iLnNhdmVkX3JhdGUg PSByYXRlOwo+PiArCQlzdW40aV9yYXRlX3Jlc2V0X25vdGlmaWVyX3JlZ2lzdGVyKCZ0Y29uX3Jh dGVfcmVzZXRfdGNvbjBfbmIpOwo+Cj4gQ2FuJ3QgYmUgcmVnaXN0cmF0aW9uIGRvbmUgYXQgVENP TiBpbml0IHRpbWU/CgpQcm9iYWJseSB5ZXMhIEknbGwgbWFrZSBzdXJlIHRvIGRvIHNvIGluIFYy LgoKVGhhbmtzIGFnYWluIGZvciB0aGUgZ3JlYXQgZmVlZGJhY2ssCiAgRnJhbmsKCj4KPiBCZXN0 IHJlZ2FyZHMsCj4gSmVybmVqCj4KPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyB2b2lkIHN1 bjRpX3Rjb24wX21vZGVfc2V0X2NwdShzdHJ1Y3Qgc3VuNGlfdGNvbiAqdGNvbiwKPj4gIAkJCQkg ICAgIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKPj4gIAkJCQkgICAgIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+PiBAQCAtMzYwLDggKzQwOSw4IEBAIHN0 YXRpYyB2b2lkIHN1bjRpX3Rjb24wX21vZGVfc2V0X2NwdShzdHJ1Y3Qgc3VuNGlfdGNvbiAqdGNv biwKPj4gIAkgKi8KPj4gIAl0Y29uLT5kY2xrX21pbl9kaXYgPSBTVU42SV9EU0lfVENPTl9ESVY7 Cj4+ICAJdGNvbi0+ZGNsa19tYXhfZGl2ID0gU1VONklfRFNJX1RDT05fRElWOwo+PiAtCWNsa19z ZXRfcmF0ZSh0Y29uLT5kY2xrLCBtb2RlLT5jcnRjX2Nsb2NrICogMTAwMCAqIChicHAgLyBsYW5l cykKPj4gLQkJCQkJCSAgLyBTVU42SV9EU0lfVENPTl9ESVYpOwo+PiArCXN1bjRpX3Rjb24wX3Nl dF9kY2xrX3JhdGUodGNvbiwgbW9kZS0+Y3J0Y19jbG9jayAqIDEwMDAgKiAoYnBwIC8gbGFuZXMp Cj4+ICsJCQkJICAvIFNVTjZJX0RTSV9UQ09OX0RJVik7Cj4+Cj4+ICAJLyogU2V0IHRoZSByZXNv bHV0aW9uICovCj4+ICAJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT04wX0JBU0lD MF9SRUcsCj4+IEBAIC00MzQsNyArNDgzLDcgQEAgc3RhdGljIHZvaWQgc3VuNGlfdGNvbjBfbW9k ZV9zZXRfbHZkcyhzdHJ1Y3Qgc3VuNGlfdGNvbiAqdGNvbiwKPj4KPj4gIAl0Y29uLT5kY2xrX21p bl9kaXYgPSA3Owo+PiAgCXRjb24tPmRjbGtfbWF4X2RpdiA9IDc7Cj4+IC0JY2xrX3NldF9yYXRl KHRjb24tPmRjbGssIG1vZGUtPmNydGNfY2xvY2sgKiAxMDAwKTsKPj4gKwlzdW40aV90Y29uMF9z ZXRfZGNsa19yYXRlKHRjb24sIG1vZGUtPmNydGNfY2xvY2sgKiAxMDAwKTsKPj4KPj4gIAkvKiBT ZXQgdGhlIHJlc29sdXRpb24gKi8KPj4gIAlyZWdtYXBfd3JpdGUodGNvbi0+cmVncywgU1VONElf VENPTjBfQkFTSUMwX1JFRywKPj4gQEAgLTUxNiw3ICs1NjUsNyBAQCBzdGF0aWMgdm9pZCBzdW40 aV90Y29uMF9tb2RlX3NldF9yZ2Ioc3RydWN0IHN1bjRpX3Rjb24gKnRjb24sCj4+Cj4+ICAJdGNv bi0+ZGNsa19taW5fZGl2ID0gdGNvbi0+cXVpcmtzLT5kY2xrX21pbl9kaXY7Cj4+ICAJdGNvbi0+ ZGNsa19tYXhfZGl2ID0gMTI3Owo+PiAtCWNsa19zZXRfcmF0ZSh0Y29uLT5kY2xrLCBtb2RlLT5j cnRjX2Nsb2NrICogMTAwMCk7Cj4+ICsJc3VuNGlfdGNvbjBfc2V0X2RjbGtfcmF0ZSh0Y29uLCBt b2RlLT5jcnRjX2Nsb2NrICogMTAwMCk7Cj4+Cj4+ICAJLyogU2V0IHRoZSByZXNvbHV0aW9uICov Cj4+ICAJcmVnbWFwX3dyaXRlKHRjb24tPnJlZ3MsIFNVTjRJX1RDT04wX0JBU0lDMF9SRUcsCj4+ IEBAIC0xNTAzLDYgKzE1NTIsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdW40aV90Y29uX3F1 aXJrcyBzdW44aV9hMzNfcXVpcmtzID0gewo+PiAgCS5zdXBwb3J0c19sdmRzCQk9IHRydWUsCj4+ ICB9Owo+Pgo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBzdW40aV90Y29uX3F1aXJrcyBzdW41MGlf YTY0X2xjZF9xdWlya3MgPSB7Cj4+ICsJLnN1cHBvcnRzX2x2ZHMJCT0gdHJ1ZSwKPj4gKwkuaGFz X2NoYW5uZWxfMAkJPSB0cnVlLAo+PiArCS5yZXN0b3Jlc19yYXRlCQk9IHRydWUsCj4+ICsJLmRj bGtfbWluX2RpdgkJPSAxLAo+PiArCS5zZXR1cF9sdmRzX3BoeQkJPSBzdW42aV90Y29uX3NldHVw X2x2ZHNfcGh5LAo+PiArfTsKPj4gKwo+PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdW40aV90Y29u X3F1aXJrcyBzdW44aV9hODN0X2xjZF9xdWlya3MgPSB7Cj4+ICAJLnN1cHBvcnRzX2x2ZHMJCT0g dHJ1ZSwKPj4gIAkuaGFzX2NoYW5uZWxfMAkJPSB0cnVlLAo+PiBAQCAtMTU2MSw2ICsxNjE4LDcg QEAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW40aV90Y29uX29mX3RhYmxlW10gPSB7Cj4+ ICAJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOWktYTgwLXRjb24tdHYiLCAuZGF0YSA9 ICZzdW45aV9hODBfdGNvbl90dl9xdWlya3MgfSwKPj4gIAl7IC5jb21wYXRpYmxlID0gImFsbHdp bm5lcixzdW4yMGktZDEtdGNvbi1sY2QiLCAuZGF0YSA9ICZzdW4yMGlfZDFfbGNkX3F1aXJrcyB9 LAo+PiAgCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjIwaS1kMS10Y29uLXR2IiwgLmRh dGEgPSAmc3VuOGlfcjQwX3R2X3F1aXJrcyB9LAo+PiArCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lu bmVyLHN1bjUwaS1hNjQtdGNvbi1sY2QiLCAuZGF0YSA9ICZzdW41MGlfYTY0X2xjZF9xdWlya3Mg fSwKPj4gIAl7IH0KPj4gIH07Cj4+ICBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40aV90Y29u X29mX3RhYmxlKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90 Y29uLmggYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfdGNvbi5oCj4+IGluZGV4IGZhMjNh YTIzZmU0YS4uYmQ0YWJjOTAwNjJiIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3Vu NGkvc3VuNGlfdGNvbi5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV90Y29u LmgKPj4gQEAgLTI0Myw2ICsyNDMsNyBAQCBzdHJ1Y3Qgc3VuNGlfdGNvbl9xdWlya3Mgewo+PiAg CWJvb2wgICAgbmVlZHNfZWRwX3Jlc2V0OyAvKiBhODAgZWRwIHJlc2V0IG5lZWRlZCBmb3IgdGNv bjAgYWNjZXNzICovCj4+ICAJYm9vbAlzdXBwb3J0c19sdmRzOyAgIC8qIERvZXMgdGhlIFRDT04g c3VwcG9ydCBhbiBMVkRTIG91dHB1dD8gKi8KPj4gIAlib29sCXBvbGFyaXR5X2luX2NoMDsgLyog c29tZSB0Y29uMSBjaGFubmVscyBoYXZlIHBvbGFyaXR5IGJpdHMgaW4gdGNvbjAgcG9sIHJlZ2lz dGVyICovCj4+ICsJYm9vbAlyZXN0b3Jlc19yYXRlOyAgIC8qIHJlc3RvcmVzIHRoZSBpbml0aWFs IHJhdGUgd2hlbiByYXRlIGNoYW5nZXMgKi8KPj4gIAl1OAlkY2xrX21pbl9kaXY7CS8qIG1pbmlt dW0gZGl2aWRlciBmb3IgVENPTjAgRENMSyAqLwo+Pgo+PiAgCS8qIGNhbGxiYWNrIHRvIGhhbmRs ZSB0Y29uIG11eGluZyBvcHRpb25zICovCj4+IEBAIC0zMDAsNCArMzAxLDE1IEBAIHZvaWQgc3Vu NGlfdGNvbl9zZXRfc3RhdHVzKHN0cnVjdCBzdW40aV90Y29uICpjcnRjLAo+Pgo+PiAgZXh0ZXJu IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNGlfdGNvbl9vZl90YWJsZVtdOwo+Pgo+PiAr c3RydWN0IHN1bjRpX3JhdGVfcmVzZXRfbmIgewo+PiArCXN0cnVjdCBub3RpZmllcl9ibG9jawlj bGtfbmI7Cj4+ICsJc3RydWN0IGRlbGF5ZWRfd29yawlyZXNldF9yYXRlX3dvcms7Cj4+ICsKPj4g KwlzdHJ1Y3QgY2xrCQkqdGFyZ2V0X2NsazsKPj4gKwl1bnNpZ25lZCBsb25nCQlzYXZlZF9yYXRl Owo+PiArCWJvb2wJCQlpc19yZWdpc3RlcmVkOwo+PiArfTsKPj4gKwo+PiArI2RlZmluZSB0b19z dW40aV9yYXRlX3Jlc2V0X25iKF9uYikgY29udGFpbmVyX29mKF9uYiwgc3RydWN0IHN1bjRpX3Jh dGVfcmVzZXRfbmIsIGNsa19uYikKPj4gKwo+PiAgI2VuZGlmIC8qIF9fU1VONElfVENPTl9IX18g Ki8KPj4KPj4gLS0tCj4+IGJhc2UtY29tbWl0OiBkY2I2YzhlZTZhY2M2YzM0N2NhZWMxZTczZmI5 MDBjMGY0ZmY5ODA2Cj4+IGNoYW5nZS1pZDogMjAyNDAzMDQtdGNvbl9rZWVwX3N0YWJsZV9yYXRl LTU3MjljNzcwNjM0Mwo+Pgo+PiBCZXN0IHJlZ2FyZHMsCj4+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==