From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ihKJJJT7" Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEB7CD68 for ; Tue, 5 Dec 2023 03:34:30 -0800 (PST) Received: by mail-qv1-xf2b.google.com with SMTP id 6a1803df08f44-67aa9a99915so23027866d6.3 for ; Tue, 05 Dec 2023 03:34:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1701776070; x=1702380870; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=iwtFK4uZk8YXwxxWxxu0bCEynVzQGRZAOw69ApxLFiQ=; b=ihKJJJT7y0e/y0ZPDK5C6hInE0FnJ52aCMDP3gAWADbxyCSIkDsmt8hAnpyUMtyDo2 SGFZhluROoQkXTzSPDmhl+oXxem4unyoDYWrUjW6OyBpl0J07ebLSlw0s8GziB/1sn+6 3fd3nPeudbVohPJPYWRYMrz0PTCkMrl+F13/Bvx7SGrYhbQQjhmenqnqPyjT2JYjuqPH wEAaPL0Qp4QE27v6bZBqCe5cb8MjEYZNrKOKpARWIFRUGr8g2An+3i6CE++uEGFkCsh5 ws31sKK7XA3yn7GchqUoCrrjaJt1C5/d5FPpF8ssXHj1PzAwRktV6avns6TbgpWPnZ3z X3Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701776070; x=1702380870; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iwtFK4uZk8YXwxxWxxu0bCEynVzQGRZAOw69ApxLFiQ=; b=tarCJP+Tpz7intbO8uaaSyTgx1kThr/dkxITQ2pYj4X+yx5LmUFB87jdqARXnKeehh u9nh38CsgkdM6JCsoZWmyuzPtvSNhcltFOvtEz/Kleu9uxoULNilgWEjlP7ewNO8mDMY B/ThxTlSRA6bp7Oj63DqBZb5gOjgX3+I66nesf5mnF0YKqhsR33jLXH65LwVWUrhkyff c+HE1AeC0vwV8p7NMDT3vyZ3TpZ1aKu+b0YxY6jCLJuzKNMs/5RrklDfeBjkr9h5u68A 9h6K71Skk67cAn8Wr3OIQ3Ml7szULDeEcbAYAFU42Ar/DJeNN+BVJjidplkOob6hKjE2 6JzA== X-Gm-Message-State: AOJu0YwZXGum/wDLgVrxYZJhP0HkUfawlpsFEsrD15yz77zwrihxBakY pOnV2sPS/Ozu0za8LciDu4QhstnnXWpH3itOG4r/Nw== X-Google-Smtp-Source: AGHT+IGx7N4HJp+W5DRsPvhVHmiYYxTg2xQR3uNUhGbspvlU5nXwTu6Ab40JkEXEQ/QdRnqcCARDEIeu+koLqGwogag= X-Received: by 2002:ad4:44a3:0:b0:67a:509c:78af with SMTP id n3-20020ad444a3000000b0067a509c78afmr1430322qvt.60.1701776069546; Tue, 05 Dec 2023 03:34:29 -0800 (PST) Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20231201160925.3136868-1-peter.griffin@linaro.org> <20231201160925.3136868-14-peter.griffin@linaro.org> In-Reply-To: From: Peter Griffin Date: Tue, 5 Dec 2023 11:34:18 +0000 Message-ID: Subject: Re: [PATCH v5 13/20] pinctrl: samsung: Add filter selection support for alive banks To: Sam Protsenko Cc: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, mturquette@baylibre.com, conor+dt@kernel.org, sboyd@kernel.org, tomasz.figa@gmail.com, s.nawrocki@samsung.com, linus.walleij@linaro.org, wim@linux-watchdog.org, linux@roeck-us.net, catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de, olof@lixom.net, gregkh@linuxfoundation.org, jirislaby@kernel.org, cw00.choi@samsung.com, alim.akhtar@samsung.com, tudor.ambarus@linaro.org, andre.draszik@linaro.org, saravanak@google.com, willmcvicker@google.com, soc@kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-watchdog@vger.kernel.org, kernel-team@android.com, linux-serial@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Sam, Thanks for your review. On Sat, 2 Dec 2023 at 00:22, Sam Protsenko wro= te: > > On Fri, Dec 1, 2023 at 10:11=E2=80=AFAM Peter Griffin wrote: > > > > Newer Exynos SoCs have a filter selection register on alive bank pins. > > This allows the selection of a digital or delay filter for each pin. If > > the filter selection register is not available then the default filter > > (digital) is applied. > > > > On suspend we apply the analog filter to all pins in the bank (as the > > digital filter relies on a clock). On resume the digital filter is > > reapplied to all pins in the bank. The digital filter is working via > > clock and has an adjustable filter delay register bitfield, whereas > > the analog filter uses a fixed delay. > > > > The filter determines to what extent signal fluctuations received throu= gh > > the pad are considered glitches. > > > > The code path can be exercised using > > echo mem > /sys/power/state > > And then wake the device using a eint gpio > > Period. Will fix > > > > > Signed-off-by: Peter Griffin > > --- > > drivers/pinctrl/samsung/pinctrl-exynos.c | 89 ++++++++++++++++++++++- > > drivers/pinctrl/samsung/pinctrl-exynos.h | 7 ++ > > drivers/pinctrl/samsung/pinctrl-samsung.c | 2 + > > drivers/pinctrl/samsung/pinctrl-samsung.h | 22 ++++++ > > 4 files changed, 119 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl= /samsung/pinctrl-exynos.c > > index 6b58ec84e34b..56fc11a1fe2f 100644 > > --- a/drivers/pinctrl/samsung/pinctrl-exynos.c > > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c > > @@ -269,6 +269,71 @@ struct exynos_eint_gpio_save { > > u32 eint_mask; > > }; > > > > +/* > > + * Set the desired filter (digital or analog delay) to every pin in > > + * the bank. Note the filter selection bitfield is only found on alive > > + * banks. The filter determines to what extent signal fluctuations > > + * received through the pad are considered glitches. > > + */ > > +static void exynos_eint_flt_config(struct samsung_pinctrl_drv_data *d, > > + struct samsung_pin_bank *bank, int f= ilter) > > +{ > > + unsigned int flt_reg, flt_con =3D 0; > > + unsigned int val, shift; > > + int i; > > + int loop_cnt; > > + > > + /* > > + * The FLTCON register has the following layout > > + * > > + * BitfieldName[PinNum][Bit:Bit] > > + * FLT_EN[3][31] FLT_SEL[3][30] FLT_WIDTH[3][29:24] > > + * FLT_EN[2][23] FLT_SEL[2][22] FLT_WIDTH[2][21:16] > > + * FLT_EN[1][15] FLT_SEL[1][14] FLT_WIDTH[1][13:8] > > + * FLT_EN[0][7] FLT_SEL[0][6] FLT_WIDTH[0][5:0] > > + * > > + * FLT_EN 0x0 =3D Disable, 0x1=3DEnable > > + * FLT_SEL 0x0 =3D Delay filter, 0x1 Digital filter > > + * FLT_WIDTH Filtering width. Valid when FLT_SEL is 0x1 > > + */ > > + > > + flt_con |=3D EXYNOS9_FLTCON_EN; > > + > > + if (filter) > > + flt_con |=3D EXYNOS9_FLTCON_DIGITAL; > > + > > + flt_reg =3D EXYNOS_GPIO_EFLTCON_OFFSET + bank->fltcon_offset; > > + > > + /* > > + * If nr_pins > 4, we should set FLTCON0 register fully. > > + * (pin0 ~ 3). So loop 4 times in case of FLTCON0. > > + */ > > + if (bank->nr_pins > EXYNOS9_FLTCON_NR_PIN) > > + loop_cnt =3D EXYNOS9_FLTCON_NR_PIN; > > + else > > + loop_cnt =3D bank->nr_pins; > > + > > + val =3D readl(d->virt_base + flt_reg); > > + for (i =3D 0; i < loop_cnt; i++) { > > + shift =3D i * EXYNOS9_FLTCON_LEN; > > + val &=3D ~(EXYNOS9_FLTCON_MASK << shift); > > + val |=3D (flt_con << shift); > > + } > > + writel(val, d->virt_base + flt_reg); > > + > > + /* Loop for FLTCON1 pin 4 ~ 7 */ > > + if (bank->nr_pins > EXYNOS9_FLTCON_NR_PIN) { > > + loop_cnt =3D (bank->nr_pins - EXYNOS9_FLTCON_NR_PIN); > > + val =3D readl(d->virt_base + flt_reg + 0x4); > > + for (i =3D 0; i < loop_cnt; i++) { > > + shift =3D i * EXYNOS9_FLTCON_LEN; > > + val &=3D ~(EXYNOS9_FLTCON_MASK << shift); > > + val |=3D (flt_con << shift); > > + } > > + writel(val, d->virt_base + flt_reg + 0x4); > > + } > > +} > > + > > This whole function needs a refactoring. Do you think below code looks be= tter? Yes it does! > > 8<----------------------------------------------------------------->8 > static void exynos_eint_update_flt_reg(void __iomem *reg, int cnt, int co= n) > { > unsigned int val, shift; > int i; > > val =3D readl(reg); > for (i =3D 0; i < cnt; i++) { > shift =3D i * EXYNOS9_FLTCON_LEN; > val &=3D ~(EXYNOS9_FLTCON_MASK << shift); > val |=3D con << shift; > } > writel(val, reg); > } > > /* > * Set the desired filter (digital or analog delay) to every pin in the b= ank. > * Note the filter selection bitfield is only found on alive banks. The f= ilter > * determines to what extent signal fluctuations received through the pad= are > * considered glitches. > * > * The FLTCON register has the following layout: > * > * BitfieldName[PinNum][Bit:Bit] > * FLT_EN[3][31] FLT_SEL[3][30] FLT_WIDTH[3][29:24] > * FLT_EN[2][23] FLT_SEL[2][22] FLT_WIDTH[2][21:16] > * FLT_EN[1][15] FLT_SEL[1][14] FLT_WIDTH[1][13:8] > * FLT_EN[0][7] FLT_SEL[0][6] FLT_WIDTH[0][5:0] > * > * FLT_EN 0x0 =3D Disable, 0x1 =3D Enable > * FLT_SEL 0x0 =3D Delay filter, 0x1 =3D Digital filter > * FLT_WIDTH Filtering width. Valid when FLT_SEL is 0x1 > */ > static void exynos_eint_flt_config(struct samsung_pinctrl_drv_data *d, > struct samsung_pin_bank *bank, int filter) > { > unsigned int off =3D EXYNOS_GPIO_EFLTCON_OFFSET + bank->fltcon_offset= ; > unsigned int con =3D EXYNOS9_FLTCON_EN | filter; > void __iomem *reg =3D d->virt_base + off; > u8 n =3D bank->nr_pins; > > if (bank->fltcon_type =3D=3D FLT_DEFAULT) > return; > > /* > * If nr_pins > 4, we should set FLTCON0 register fully (pin0~3). > * So loop 4 times in case of FLTCON0. Loop for FLTCON1 pin4~7. > */ > if (n <=3D 4) { > exynos_eint_update_flt_reg(reg, n, con); > } else { > exynos_eint_update_flt_reg(reg, 4, con); > exynos_eint_update_flt_reg(reg + 0x4, n - 4, con); > } > } > 8<----------------------------------------------------------------->8 > > (the code is only to illustrate the idea, I never tested it). I can refactor it along those lines. > > > /* > > * exynos_eint_gpio_init() - setup handling of external gpio interrupt= s. > > * @d: driver data of samsung pinctrl driver. > > @@ -321,6 +386,10 @@ __init int exynos_eint_gpio_init(struct samsung_pi= nctrl_drv_data *d) > > goto err_domains; > > } > > > > + /* Set Delay Analog Filter */ > > The code below looks quite self-explanatory to. Maybe remove all > comments like this? If you don't think exynos_eint_flt_config() is > clear, maybe rename it to exynos_eint_set_filter(). Ok, I will update the function name to exynos_eint_set_filter() and remove the comments. > > > + if (bank->fltcon_type !=3D FLT_DEFAULT) > > + exynos_eint_flt_config(d, bank, > > + EXYNOS9_FLTCON_DELAY); > > It fits the previous line just fine, no need to break the line. > > Also, if you use the refactored version of exynos_eint_flt_config() I > mentioned above, you can drop all 'if' conditions like this. Will fix > > > } > > > > return 0; > > @@ -555,6 +624,11 @@ __init int exynos_eint_wkup_init(struct samsung_pi= nctrl_drv_data *d) > > if (bank->eint_type !=3D EINT_TYPE_WKUP) > > continue; > > > > + /* Set Digital Filter */ > > + if (bank->fltcon_type !=3D FLT_DEFAULT) > > + exynos_eint_flt_config(d, bank, > > + EXYNOS9_FLTCON_DIGITAL); > > Ditto: no need to break the line, remove the comment. If you use the > refactored function, you can drop 'if'. will fix > > > + > > bank->irq_chip =3D devm_kmemdup(dev, irq_chip, sizeof(*= irq_chip), > > GFP_KERNEL); > > if (!bank->irq_chip) { > > @@ -658,6 +732,7 @@ static void exynos_pinctrl_suspend_bank( > > void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata) > > { > > struct samsung_pin_bank *bank =3D drvdata->pin_banks; > > + struct samsung_pinctrl_drv_data *d =3D bank->drvdata; > > struct exynos_irq_chip *irq_chip =3D NULL; > > int i; > > > > @@ -665,6 +740,10 @@ void exynos_pinctrl_suspend(struct samsung_pinctrl= _drv_data *drvdata) > > if (bank->eint_type =3D=3D EINT_TYPE_GPIO) > > exynos_pinctrl_suspend_bank(drvdata, bank); > > else if (bank->eint_type =3D=3D EINT_TYPE_WKUP) { > > + /* Setting Delay (Analog) Filter */ > > + if (bank->fltcon_type !=3D FLT_DEFAULT) > > + exynos_eint_flt_config(d, bank, > > + EXYNOS9_FLTCON_D= ELAY); > > Ditto: no need to break the line, remove the comment. If you use the > refactored function, you can drop 'if'. Will fix > > > if (!irq_chip) { > > irq_chip =3D bank->irq_chip; > > irq_chip->set_eint_wakeup_mask(drvdata, > > @@ -707,11 +786,19 @@ static void exynos_pinctrl_resume_bank( > > void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata) > > { > > struct samsung_pin_bank *bank =3D drvdata->pin_banks; > > + struct samsung_pinctrl_drv_data *d =3D bank->drvdata; > > int i; > > > > for (i =3D 0; i < drvdata->nr_banks; ++i, ++bank) > > - if (bank->eint_type =3D=3D EINT_TYPE_GPIO) > > + if (bank->eint_type =3D=3D EINT_TYPE_GPIO) { > > exynos_pinctrl_resume_bank(drvdata, bank); > > + } else if (bank->eint_type =3D=3D EINT_TYPE_WKUP || > > + bank->eint_type =3D=3D EINT_TYPE_WKUP_MUX) { > > + /* Set Digital Filter */ > > + if (bank->fltcon_type !=3D FLT_DEFAULT) > > + exynos_eint_flt_config(d, bank, > > + EXYNOS9_FLTCON_D= IGITAL); > > Ditto: remove the comment, and if you use the refactored function, you > can drop 'if'; also there will be no need to break the line. Will fix > > > + } > > } > > > > static void exynos_retention_enable(struct samsung_pinctrl_drv_data *d= rvdata) > > diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.h b/drivers/pinctrl= /samsung/pinctrl-exynos.h > > index 3ac52c2cf998..e2799ff1b5e9 100644 > > --- a/drivers/pinctrl/samsung/pinctrl-exynos.h > > +++ b/drivers/pinctrl/samsung/pinctrl-exynos.h > > @@ -50,6 +50,13 @@ > > > > #define EXYNOS_EINT_MAX_PER_BANK 8 > > #define EXYNOS_EINT_NR_WKUP_EINT > > Maybe add an empty line here? Will fix > > > +/* EINT filter configuration */ > > +#define EXYNOS9_FLTCON_EN BIT(7) > > +#define EXYNOS9_FLTCON_DIGITAL BIT(6) > > +#define EXYNOS9_FLTCON_DELAY (0 << 6) > > +#define EXYNOS9_FLTCON_MASK 0xff > > +#define EXYNOS9_FLTCON_LEN 8 > > +#define EXYNOS9_FLTCON_NR_PIN 4 > > I'd say drop this one and just hard-code it where needed? Ok, will drop. > > > > > #define EXYNOS_PIN_BANK_EINTN(pins, reg, id) \ > > { \ > > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctr= l/samsung/pinctrl-samsung.c > > index 79babbb39ced..50c360b4753a 100644 > > --- a/drivers/pinctrl/samsung/pinctrl-samsung.c > > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c > > @@ -1105,6 +1105,8 @@ samsung_pinctrl_get_soc_data(struct samsung_pinct= rl_drv_data *d, > > bank->eint_func =3D bdata->eint_func; > > bank->eint_type =3D bdata->eint_type; > > bank->eint_mask =3D bdata->eint_mask; > > + bank->fltcon_type =3D bdata->fltcon_type; > > + bank->fltcon_offset =3D bdata->fltcon_offset; > > bank->eint_offset =3D bdata->eint_offset; > > bank->name =3D bdata->name; > > > > diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctr= l/samsung/pinctrl-samsung.h > > index 9b3db50adef3..5fab3885a7d7 100644 > > --- a/drivers/pinctrl/samsung/pinctrl-samsung.h > > +++ b/drivers/pinctrl/samsung/pinctrl-samsung.h > > @@ -82,6 +82,20 @@ enum eint_type { > > EINT_TYPE_WKUP_MUX, > > }; > > > > +/** > > + * enum fltcon_type - filter selection > > + * @FLT_DEFAULT: filter not selectable, default digital filter > > + * @FLT_SELECT: filter selectable (digital or delay) > > + * > > + * Some banks on newer Exynos based SoCs have a selectable filter on a= live > > + * banks of 'analog/delay' or 'digital'. If the filter selection regis= ter is > > + * not available then the default filter is used (digital). > > + */ > > +enum fltcon_type { > > + FLT_DEFAULT, > > + FLT_SELECTABLE, > > +}; > > Is there any benefit of having this enum over replacing it with just a > bool field (e.g. 'bool flt_selectable')? I thought it made it clearer at the callee sites which filter was being set, but I can update to a bool if that's what you prefer. regards, Peter. > > > + > > /* maximum length of a pin in pin descriptor (example: "gpa0-0") */ > > #define PIN_NAME_LENGTH 10 > > > > @@ -122,6 +136,8 @@ struct samsung_pin_bank_type { > > * @eint_type: type of the external interrupt supported by the bank. > > * @eint_mask: bit mask of pins which support EINT function. > > * @eint_offset: SoC-specific EINT register or interrupt offset of ban= k. > > + * @fltcon_type: whether the filter (delay/digital) is selectable > > + * @fltcon_offset: SoC-specific EINT filter control register offset of= bank. > > * @name: name to be prefixed for each pin in this pin bank. > > */ > > struct samsung_pin_bank_data { > > @@ -133,6 +149,8 @@ struct samsung_pin_bank_data { > > enum eint_type eint_type; > > u32 eint_mask; > > u32 eint_offset; > > + enum fltcon_type fltcon_type; > > + u32 fltcon_offset; > > const char *name; > > }; > > > > @@ -147,6 +165,8 @@ struct samsung_pin_bank_data { > > * @eint_type: type of the external interrupt supported by the bank. > > * @eint_mask: bit mask of pins which support EINT function. > > * @eint_offset: SoC-specific EINT register or interrupt offset of ban= k. > > + * @fltcon_type: whether the filter (delay/digital) is selectable > > + * @fltcon_offset: SoC-specific EINT filter control register offset of= bank. > > * @name: name to be prefixed for each pin in this pin bank. > > * @id: id of the bank, propagated to the pin range. > > * @pin_base: starting pin number of the bank. > > @@ -170,6 +190,8 @@ struct samsung_pin_bank { > > enum eint_type eint_type; > > u32 eint_mask; > > u32 eint_offset; > > + enum fltcon_type fltcon_type; > > + u32 fltcon_offset; > > const char *name; > > u32 id; > > > > -- > > 2.43.0.rc2.451.g8631bc7472-goog > > 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 C2EDDC4167B for ; Tue, 5 Dec 2023 11:35:07 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=D3b5mHU6ozSkJ03cF9Y/qAYVaExEfASAwAjIipvhVo4=; b=ahisfWiFVdgTgC olTV3KWo6n5wIopjoRu/ZF1FRzQfLYBXYzqAioa1Zo5GN521m4mmb+1StYSioZSuIC+epIjrKUxTl 9LThqfdu/eUSXKTHDqS1MFTYiuWBPVLJ8BytMdCxsYKvPqak0brU7yOSW7K/XsoiOmh42gI4HWHGR Hhi0uYMqoFam5LhKLZ72OkdnJusnR8aKFhBhEY3Uj/E9fQ/SM39PTVkUdhEWDhw9dAEyDcOHUWUxJ Zu/XKMGLp5xvuiS0mxgtRBZHMQCywNFRYgDKP5GNbmnpWheXGtIz5q2vVkZMuL2NXpknbfUgruxLY 6jOTLGG2u5sSKChH5G/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rAThG-0078jN-0Y; Tue, 05 Dec 2023 11:34:38 +0000 Received: from mail-qv1-xf35.google.com ([2607:f8b0:4864:20::f35]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rAThC-0078iQ-0X for linux-arm-kernel@lists.infradead.org; Tue, 05 Dec 2023 11:34:36 +0000 Received: by mail-qv1-xf35.google.com with SMTP id 6a1803df08f44-67ab19339b4so21354016d6.0 for ; Tue, 05 Dec 2023 03:34:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1701776070; x=1702380870; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=iwtFK4uZk8YXwxxWxxu0bCEynVzQGRZAOw69ApxLFiQ=; b=nQlAp149Dx5x24c6hEk3ZDyk1YySfHhCH1t6anWSAOYRC79guZZdNRs6HqUR99YCbx g0jaLYq84Q8y2XMVV7g81quz0dTMZNtvCyE+NAidZ7X7eWIQRYAXsdPW7rtKZvx1sn+9 EF51pnH5UN7gL1AB+cI+rSUsDECRkwAvTeeMRM+9c1siMuRtIA1ihh75znJTlW2maGgA tb1Myf4uaLktnXlZxDtaWXGnuKyATKf+cYsGCXTn2Kv8f2eYTzRhFCUzQ2iPhp/ij3+H ER5dqxyLyALpAE5MGL9R0oKHX5MCYyyrYD1jDtEhgrFiYA+nr3+mCFkKDgYTW5pc0m4x XrPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701776070; x=1702380870; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iwtFK4uZk8YXwxxWxxu0bCEynVzQGRZAOw69ApxLFiQ=; b=RZvCQuIxiHjr3zm+IONWGZ/rLvJCWLtlEVeTOdWxL7l+Bs/S3YCch1qdAesfYulDSs Tdgngv0gUfQd0dCre2yXvxzOhIqRecC5QAbXAyuxploHnEcC/xU18ZhT9Jcemh25yehN I/HjTEa8diBXgjXaxAXqRXpmsFyWaF7dHOGXFscSZVy7ZgHBszu/PShf7+8tEHEpHdEl YPQQelMyBe0dwebtyqe/TC5xSUmVOrIhP6xckw3T/8ZlfHh6498j1fl8AEjXk8QgmR96 f8IY2XZIPVSsm2ApJXJz6T/Azjodz/Hu02ExxZGsddkigUGYzQcsCljmoWxaADdJ3SPi EAuA== X-Gm-Message-State: AOJu0YziOqUyJus0zrnb6T6XSigBJ3GVXkGbprDtA5mVFZS0nBep4xxm 8YYVR80Gp/vrhqArwWWDMAloA99S0edGiu9bU4IFfw== X-Google-Smtp-Source: AGHT+IGx7N4HJp+W5DRsPvhVHmiYYxTg2xQR3uNUhGbspvlU5nXwTu6Ab40JkEXEQ/QdRnqcCARDEIeu+koLqGwogag= X-Received: by 2002:ad4:44a3:0:b0:67a:509c:78af with SMTP id n3-20020ad444a3000000b0067a509c78afmr1430322qvt.60.1701776069546; Tue, 05 Dec 2023 03:34:29 -0800 (PST) MIME-Version: 1.0 References: <20231201160925.3136868-1-peter.griffin@linaro.org> <20231201160925.3136868-14-peter.griffin@linaro.org> In-Reply-To: From: Peter Griffin Date: Tue, 5 Dec 2023 11:34:18 +0000 Message-ID: Subject: Re: [PATCH v5 13/20] pinctrl: samsung: Add filter selection support for alive banks To: Sam Protsenko Cc: robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, mturquette@baylibre.com, conor+dt@kernel.org, sboyd@kernel.org, tomasz.figa@gmail.com, s.nawrocki@samsung.com, linus.walleij@linaro.org, wim@linux-watchdog.org, linux@roeck-us.net, catalin.marinas@arm.com, will@kernel.org, arnd@arndb.de, olof@lixom.net, gregkh@linuxfoundation.org, jirislaby@kernel.org, cw00.choi@samsung.com, alim.akhtar@samsung.com, tudor.ambarus@linaro.org, andre.draszik@linaro.org, saravanak@google.com, willmcvicker@google.com, soc@kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-watchdog@vger.kernel.org, kernel-team@android.com, linux-serial@vger.kernel.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231205_033434_209653_3EE11EE3 X-CRM114-Status: GOOD ( 47.51 ) 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 SGkgU2FtLAoKVGhhbmtzIGZvciB5b3VyIHJldmlldy4KCk9uIFNhdCwgMiBEZWMgMjAyMyBhdCAw MDoyMiwgU2FtIFByb3RzZW5rbyA8c2VtZW4ucHJvdHNlbmtvQGxpbmFyby5vcmc+IHdyb3RlOgo+ Cj4gT24gRnJpLCBEZWMgMSwgMjAyMyBhdCAxMDoxMeKAr0FNIFBldGVyIEdyaWZmaW4gPHBldGVy LmdyaWZmaW5AbGluYXJvLm9yZz4gd3JvdGU6Cj4gPgo+ID4gTmV3ZXIgRXh5bm9zIFNvQ3MgaGF2 ZSBhIGZpbHRlciBzZWxlY3Rpb24gcmVnaXN0ZXIgb24gYWxpdmUgYmFuayBwaW5zLgo+ID4gVGhp cyBhbGxvd3MgdGhlIHNlbGVjdGlvbiBvZiBhIGRpZ2l0YWwgb3IgZGVsYXkgZmlsdGVyIGZvciBl YWNoIHBpbi4gSWYKPiA+IHRoZSBmaWx0ZXIgc2VsZWN0aW9uIHJlZ2lzdGVyIGlzIG5vdCBhdmFp bGFibGUgdGhlbiB0aGUgZGVmYXVsdCBmaWx0ZXIKPiA+IChkaWdpdGFsKSBpcyBhcHBsaWVkLgo+ ID4KPiA+IE9uIHN1c3BlbmQgd2UgYXBwbHkgdGhlIGFuYWxvZyBmaWx0ZXIgdG8gYWxsIHBpbnMg aW4gdGhlIGJhbmsgKGFzIHRoZQo+ID4gZGlnaXRhbCBmaWx0ZXIgcmVsaWVzIG9uIGEgY2xvY2sp LiBPbiByZXN1bWUgdGhlIGRpZ2l0YWwgZmlsdGVyIGlzCj4gPiByZWFwcGxpZWQgdG8gYWxsIHBp bnMgaW4gdGhlIGJhbmsuIFRoZSBkaWdpdGFsIGZpbHRlciBpcyB3b3JraW5nIHZpYQo+ID4gY2xv Y2sgYW5kIGhhcyBhbiBhZGp1c3RhYmxlIGZpbHRlciBkZWxheSByZWdpc3RlciBiaXRmaWVsZCwg d2hlcmVhcwo+ID4gdGhlIGFuYWxvZyBmaWx0ZXIgdXNlcyBhIGZpeGVkIGRlbGF5Lgo+ID4KPiA+ IFRoZSBmaWx0ZXIgZGV0ZXJtaW5lcyB0byB3aGF0IGV4dGVudCBzaWduYWwgZmx1Y3R1YXRpb25z IHJlY2VpdmVkIHRocm91Z2gKPiA+IHRoZSBwYWQgYXJlIGNvbnNpZGVyZWQgZ2xpdGNoZXMuCj4g Pgo+ID4gVGhlIGNvZGUgcGF0aCBjYW4gYmUgZXhlcmNpc2VkIHVzaW5nCj4gPiBlY2hvIG1lbSA+ IC9zeXMvcG93ZXIvc3RhdGUKPiA+IEFuZCB0aGVuIHdha2UgdGhlIGRldmljZSB1c2luZyBhIGVp bnQgZ3Bpbwo+Cj4gUGVyaW9kLgoKV2lsbCBmaXgKCj4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBQ ZXRlciBHcmlmZmluIDxwZXRlci5ncmlmZmluQGxpbmFyby5vcmc+Cj4gPiAtLS0KPiA+ICBkcml2 ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5jICB8IDg5ICsrKysrKysrKysrKysr KysrKysrKystCj4gPiAgZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1leHlub3MuaCAg fCAgNyArKwo+ID4gIGRyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3VuZy5jIHwg IDIgKwo+ID4gIGRyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtc2Ftc3VuZy5oIHwgMjIg KysrKysrCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJs LWV4eW5vcy5jIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1leHlub3MuYwo+ID4g aW5kZXggNmI1OGVjODRlMzRiLi41NmZjMTFhMWZlMmYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5jCj4gPiArKysgYi9kcml2ZXJzL3BpbmN0 cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5jCj4gPiBAQCAtMjY5LDYgKzI2OSw3MSBAQCBzdHJ1 Y3QgZXh5bm9zX2VpbnRfZ3Bpb19zYXZlIHsKPiA+ICAgICAgICAgdTMyIGVpbnRfbWFzazsKPiA+ ICB9Owo+ID4KPiA+ICsvKgo+ID4gKyAqIFNldCB0aGUgZGVzaXJlZCBmaWx0ZXIgKGRpZ2l0YWwg b3IgYW5hbG9nIGRlbGF5KSB0byBldmVyeSBwaW4gaW4KPiA+ICsgKiB0aGUgYmFuay4gTm90ZSB0 aGUgZmlsdGVyIHNlbGVjdGlvbiBiaXRmaWVsZCBpcyBvbmx5IGZvdW5kIG9uIGFsaXZlCj4gPiAr ICogYmFua3MuIFRoZSBmaWx0ZXIgZGV0ZXJtaW5lcyB0byB3aGF0IGV4dGVudCBzaWduYWwgZmx1 Y3R1YXRpb25zCj4gPiArICogcmVjZWl2ZWQgdGhyb3VnaCB0aGUgcGFkIGFyZSBjb25zaWRlcmVk IGdsaXRjaGVzLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIGV4eW5vc19laW50X2ZsdF9jb25m aWcoc3RydWN0IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0YSAqZCwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNhbXN1bmdfcGluX2JhbmsgKmJhbmssIGludCBm aWx0ZXIpCj4gPiArewo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgZmx0X3JlZywgZmx0X2NvbiA9 IDA7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCB2YWwsIHNoaWZ0Owo+ID4gKyAgICAgICBpbnQg aTsKPiA+ICsgICAgICAgaW50IGxvb3BfY250Owo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAg ICAgICAgKiBUaGUgRkxUQ09OIHJlZ2lzdGVyIGhhcyB0aGUgZm9sbG93aW5nIGxheW91dAo+ID4g KyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBCaXRmaWVsZE5hbWVbUGluTnVtXVtCaXQ6Qml0XQo+ ID4gKyAgICAgICAgKiBGTFRfRU5bM11bMzFdIEZMVF9TRUxbM11bMzBdIEZMVF9XSURUSFszXVsy OToyNF0KPiA+ICsgICAgICAgICogRkxUX0VOWzJdWzIzXSBGTFRfU0VMWzJdWzIyXSBGTFRfV0lE VEhbMl1bMjE6MTZdCj4gPiArICAgICAgICAqIEZMVF9FTlsxXVsxNV0gRkxUX1NFTFsxXVsxNF0g RkxUX1dJRFRIWzFdWzEzOjhdCj4gPiArICAgICAgICAqIEZMVF9FTlswXVs3XSAgRkxUX1NFTFsw XVs2XSAgRkxUX1dJRFRIWzBdWzU6MF0KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRkxU X0VOICAgICAgIDB4MCA9IERpc2FibGUsIDB4MT1FbmFibGUKPiA+ICsgICAgICAgICogRkxUX1NF TCAgICAgIDB4MCA9IERlbGF5IGZpbHRlciwgMHgxIERpZ2l0YWwgZmlsdGVyCj4gPiArICAgICAg ICAqIEZMVF9XSURUSCAgICBGaWx0ZXJpbmcgd2lkdGguIFZhbGlkIHdoZW4gRkxUX1NFTCBpcyAw eDEKPiA+ICsgICAgICAgICovCj4gPiArCj4gPiArICAgICAgIGZsdF9jb24gfD0gRVhZTk9TOV9G TFRDT05fRU47Cj4gPiArCj4gPiArICAgICAgIGlmIChmaWx0ZXIpCj4gPiArICAgICAgICAgICAg ICAgZmx0X2NvbiB8PSBFWFlOT1M5X0ZMVENPTl9ESUdJVEFMOwo+ID4gKwo+ID4gKyAgICAgICBm bHRfcmVnID0gRVhZTk9TX0dQSU9fRUZMVENPTl9PRkZTRVQgKyBiYW5rLT5mbHRjb25fb2Zmc2V0 Owo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAgICAgICAgKiBJZiBucl9waW5zID4gNCwgd2Ug c2hvdWxkIHNldCBGTFRDT04wIHJlZ2lzdGVyIGZ1bGx5Lgo+ID4gKyAgICAgICAgKiAocGluMCB+ IDMpLiBTbyBsb29wIDQgdGltZXMgaW4gY2FzZSBvZiBGTFRDT04wLgo+ID4gKyAgICAgICAgKi8K PiA+ICsgICAgICAgaWYgKGJhbmstPm5yX3BpbnMgPiBFWFlOT1M5X0ZMVENPTl9OUl9QSU4pCj4g PiArICAgICAgICAgICAgICAgbG9vcF9jbnQgPSBFWFlOT1M5X0ZMVENPTl9OUl9QSU47Cj4gPiAr ICAgICAgIGVsc2UKPiA+ICsgICAgICAgICAgICAgICBsb29wX2NudCA9IGJhbmstPm5yX3BpbnM7 Cj4gPiArCj4gPiArICAgICAgIHZhbCA9IHJlYWRsKGQtPnZpcnRfYmFzZSArIGZsdF9yZWcpOwo+ ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbG9vcF9jbnQ7IGkrKykgewo+ID4gKyAgICAgICAg ICAgICAgIHNoaWZ0ID0gaSAqIEVYWU5PUzlfRkxUQ09OX0xFTjsKPiA+ICsgICAgICAgICAgICAg ICB2YWwgJj0gfihFWFlOT1M5X0ZMVENPTl9NQVNLIDw8IHNoaWZ0KTsKPiA+ICsgICAgICAgICAg ICAgICB2YWwgfD0gKGZsdF9jb24gPDwgc2hpZnQpOwo+ID4gKyAgICAgICB9Cj4gPiArICAgICAg IHdyaXRlbCh2YWwsIGQtPnZpcnRfYmFzZSArIGZsdF9yZWcpOwo+ID4gKwo+ID4gKyAgICAgICAv KiBMb29wIGZvciBGTFRDT04xIHBpbiA0IH4gNyAqLwo+ID4gKyAgICAgICBpZiAoYmFuay0+bnJf cGlucyA+IEVYWU5PUzlfRkxUQ09OX05SX1BJTikgewo+ID4gKyAgICAgICAgICAgICAgIGxvb3Bf Y250ID0gKGJhbmstPm5yX3BpbnMgLSBFWFlOT1M5X0ZMVENPTl9OUl9QSU4pOwo+ID4gKyAgICAg ICAgICAgICAgIHZhbCA9IHJlYWRsKGQtPnZpcnRfYmFzZSArIGZsdF9yZWcgKyAweDQpOwo+ID4g KyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsb29wX2NudDsgaSsrKSB7Cj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGkgKiBFWFlOT1M5X0ZMVENPTl9MRU47Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICB2YWwgJj0gfihFWFlOT1M5X0ZMVENPTl9NQVNLIDw8IHNo aWZ0KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSAoZmx0X2NvbiA8PCBzaGlm dCk7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICAgIHdyaXRlbCh2YWws IGQtPnZpcnRfYmFzZSArIGZsdF9yZWcgKyAweDQpOwo+ID4gKyAgICAgICB9Cj4gPiArfQo+ID4g Kwo+Cj4gVGhpcyB3aG9sZSBmdW5jdGlvbiBuZWVkcyBhIHJlZmFjdG9yaW5nLiBEbyB5b3UgdGhp bmsgYmVsb3cgY29kZSBsb29rcyBiZXR0ZXI/CgpZZXMgaXQgZG9lcyEKPgo+IDg8LS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ OAo+IHN0YXRpYyB2b2lkIGV4eW5vc19laW50X3VwZGF0ZV9mbHRfcmVnKHZvaWQgX19pb21lbSAq cmVnLCBpbnQgY250LCBpbnQgY29uKQo+IHsKPiAgICAgdW5zaWduZWQgaW50IHZhbCwgc2hpZnQ7 Cj4gICAgIGludCBpOwo+Cj4gICAgIHZhbCA9IHJlYWRsKHJlZyk7Cj4gICAgIGZvciAoaSA9IDA7 IGkgPCBjbnQ7IGkrKykgewo+ICAgICAgICAgc2hpZnQgPSBpICogRVhZTk9TOV9GTFRDT05fTEVO Owo+ICAgICAgICAgdmFsICY9IH4oRVhZTk9TOV9GTFRDT05fTUFTSyA8PCBzaGlmdCk7Cj4gICAg ICAgICB2YWwgfD0gY29uIDw8IHNoaWZ0Owo+ICAgICB9Cj4gICAgIHdyaXRlbCh2YWwsIHJlZyk7 Cj4gfQo+Cj4gLyoKPiAgKiBTZXQgdGhlIGRlc2lyZWQgZmlsdGVyIChkaWdpdGFsIG9yIGFuYWxv ZyBkZWxheSkgdG8gZXZlcnkgcGluIGluIHRoZSBiYW5rLgo+ICAqIE5vdGUgdGhlIGZpbHRlciBz ZWxlY3Rpb24gYml0ZmllbGQgaXMgb25seSBmb3VuZCBvbiBhbGl2ZSBiYW5rcy4gVGhlIGZpbHRl cgo+ICAqIGRldGVybWluZXMgdG8gd2hhdCBleHRlbnQgc2lnbmFsIGZsdWN0dWF0aW9ucyByZWNl aXZlZCB0aHJvdWdoIHRoZSBwYWQgYXJlCj4gICogY29uc2lkZXJlZCBnbGl0Y2hlcy4KPiAgKgo+ ICAqIFRoZSBGTFRDT04gcmVnaXN0ZXIgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0Ogo+ICAqCj4g ICogICAgIEJpdGZpZWxkTmFtZVtQaW5OdW1dW0JpdDpCaXRdCj4gICogICAgIEZMVF9FTlszXVsz MV0gRkxUX1NFTFszXVszMF0gRkxUX1dJRFRIWzNdWzI5OjI0XQo+ICAqICAgICBGTFRfRU5bMl1b MjNdIEZMVF9TRUxbMl1bMjJdIEZMVF9XSURUSFsyXVsyMToxNl0KPiAgKiAgICAgRkxUX0VOWzFd WzE1XSBGTFRfU0VMWzFdWzE0XSBGTFRfV0lEVEhbMV1bMTM6OF0KPiAgKiAgICAgRkxUX0VOWzBd WzddICBGTFRfU0VMWzBdWzZdICBGTFRfV0lEVEhbMF1bNTowXQo+ICAqCj4gICogRkxUX0VOICAg IDB4MCA9IERpc2FibGUsIDB4MSA9IEVuYWJsZQo+ICAqIEZMVF9TRUwgICAgMHgwID0gRGVsYXkg ZmlsdGVyLCAweDEgPSBEaWdpdGFsIGZpbHRlcgo+ICAqIEZMVF9XSURUSCAgICBGaWx0ZXJpbmcg d2lkdGguIFZhbGlkIHdoZW4gRkxUX1NFTCBpcyAweDEKPiAgKi8KPiBzdGF0aWMgdm9pZCBleHlu b3NfZWludF9mbHRfY29uZmlnKHN0cnVjdCBzYW1zdW5nX3BpbmN0cmxfZHJ2X2RhdGEgKmQsCj4g ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rICpiYW5rLCBpbnQgZmls dGVyKQo+IHsKPiAgICAgdW5zaWduZWQgaW50IG9mZiA9IEVYWU5PU19HUElPX0VGTFRDT05fT0ZG U0VUICsgYmFuay0+Zmx0Y29uX29mZnNldDsKPiAgICAgdW5zaWduZWQgaW50IGNvbiA9IEVYWU5P UzlfRkxUQ09OX0VOIHwgZmlsdGVyOwo+ICAgICB2b2lkIF9faW9tZW0gKnJlZyA9IGQtPnZpcnRf YmFzZSArIG9mZjsKPiAgICAgdTggbiA9IGJhbmstPm5yX3BpbnM7Cj4KPiAgICAgaWYgKGJhbmst PmZsdGNvbl90eXBlID09IEZMVF9ERUZBVUxUKQo+ICAgICAgICAgcmV0dXJuOwo+Cj4gICAgIC8q Cj4gICAgICAqIElmIG5yX3BpbnMgPiA0LCB3ZSBzaG91bGQgc2V0IEZMVENPTjAgcmVnaXN0ZXIg ZnVsbHkgKHBpbjB+MykuCj4gICAgICAqIFNvIGxvb3AgNCB0aW1lcyBpbiBjYXNlIG9mIEZMVENP TjAuIExvb3AgZm9yIEZMVENPTjEgcGluNH43Lgo+ICAgICAgKi8KPiAgICAgaWYgKG4gPD0gNCkg ewo+ICAgICAgICAgZXh5bm9zX2VpbnRfdXBkYXRlX2ZsdF9yZWcocmVnLCBuLCBjb24pOwo+ICAg ICB9IGVsc2Ugewo+ICAgICAgICAgZXh5bm9zX2VpbnRfdXBkYXRlX2ZsdF9yZWcocmVnLCA0LCBj b24pOwo+ICAgICAgICAgZXh5bm9zX2VpbnRfdXBkYXRlX2ZsdF9yZWcocmVnICsgMHg0LCBuIC0g NCwgY29uKTsKPiAgICAgfQo+IH0KPiA4PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjgKPgo+ICh0aGUgY29kZSBpcyBvbmx5 IHRvIGlsbHVzdHJhdGUgdGhlIGlkZWEsIEkgbmV2ZXIgdGVzdGVkIGl0KS4KCkkgY2FuIHJlZmFj dG9yIGl0IGFsb25nIHRob3NlIGxpbmVzLgoKPgo+ID4gIC8qCj4gPiAgICogZXh5bm9zX2VpbnRf Z3Bpb19pbml0KCkgLSBzZXR1cCBoYW5kbGluZyBvZiBleHRlcm5hbCBncGlvIGludGVycnVwdHMu Cj4gPiAgICogQGQ6IGRyaXZlciBkYXRhIG9mIHNhbXN1bmcgcGluY3RybCBkcml2ZXIuCj4gPiBA QCAtMzIxLDYgKzM4NiwxMCBAQCBfX2luaXQgaW50IGV4eW5vc19laW50X2dwaW9faW5pdChzdHJ1 Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRhICpkKQo+ID4gICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBlcnJfZG9tYWluczsKPiA+ICAgICAgICAgICAgICAgICB9Cj4gPgo+ID4gKyAgICAg ICAgICAgICAgIC8qIFNldCBEZWxheSBBbmFsb2cgRmlsdGVyICovCj4KPiBUaGUgY29kZSBiZWxv dyBsb29rcyBxdWl0ZSBzZWxmLWV4cGxhbmF0b3J5IHRvLiBNYXliZSByZW1vdmUgYWxsCj4gY29t bWVudHMgbGlrZSB0aGlzPyBJZiB5b3UgZG9uJ3QgdGhpbmsgZXh5bm9zX2VpbnRfZmx0X2NvbmZp ZygpIGlzCj4gY2xlYXIsIG1heWJlIHJlbmFtZSBpdCB0byBleHlub3NfZWludF9zZXRfZmlsdGVy KCkuCgpPaywgSSB3aWxsIHVwZGF0ZSB0aGUgZnVuY3Rpb24gbmFtZSB0byBleHlub3NfZWludF9z ZXRfZmlsdGVyKCkgYW5kCnJlbW92ZSB0aGUgY29tbWVudHMuCgo+Cj4gPiArICAgICAgICAgICAg ICAgaWYgKGJhbmstPmZsdGNvbl90eXBlICE9IEZMVF9ERUZBVUxUKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgZXh5bm9zX2VpbnRfZmx0X2NvbmZpZyhkLCBiYW5rLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFlOT1M5X0ZMVENPTl9ERUxB WSk7Cj4KPiBJdCBmaXRzIHRoZSBwcmV2aW91cyBsaW5lIGp1c3QgZmluZSwgbm8gbmVlZCB0byBi cmVhayB0aGUgbGluZS4KPgo+IEFsc28sIGlmIHlvdSB1c2UgdGhlIHJlZmFjdG9yZWQgdmVyc2lv biBvZiBleHlub3NfZWludF9mbHRfY29uZmlnKCkgSQo+IG1lbnRpb25lZCBhYm92ZSwgeW91IGNh biBkcm9wIGFsbCAnaWYnIGNvbmRpdGlvbnMgbGlrZSB0aGlzLgoKV2lsbCBmaXgKCj4KPiA+ICAg ICAgICAgfQo+ID4KPiA+ICAgICAgICAgcmV0dXJuIDA7Cj4gPiBAQCAtNTU1LDYgKzYyNCwxMSBA QCBfX2luaXQgaW50IGV4eW5vc19laW50X3drdXBfaW5pdChzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJs X2Rydl9kYXRhICpkKQo+ID4gICAgICAgICAgICAgICAgIGlmIChiYW5rLT5laW50X3R5cGUgIT0g RUlOVF9UWVBFX1dLVVApCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPiA+ Cj4gPiArICAgICAgICAgICAgICAgLyogU2V0IERpZ2l0YWwgRmlsdGVyICovCj4gPiArICAgICAg ICAgICAgICAgaWYgKGJhbmstPmZsdGNvbl90eXBlICE9IEZMVF9ERUZBVUxUKQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZXh5bm9zX2VpbnRfZmx0X2NvbmZpZyhkLCBiYW5rLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFlOT1M5X0ZMVENP Tl9ESUdJVEFMKTsKPgo+IERpdHRvOiBubyBuZWVkIHRvIGJyZWFrIHRoZSBsaW5lLCByZW1vdmUg dGhlIGNvbW1lbnQuIElmIHlvdSB1c2UgdGhlCj4gcmVmYWN0b3JlZCBmdW5jdGlvbiwgeW91IGNh biBkcm9wICdpZicuCgp3aWxsIGZpeAoKPgo+ID4gKwo+ID4gICAgICAgICAgICAgICAgIGJhbmst PmlycV9jaGlwID0gZGV2bV9rbWVtZHVwKGRldiwgaXJxX2NoaXAsIHNpemVvZigqaXJxX2NoaXAp LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9L RVJORUwpOwo+ID4gICAgICAgICAgICAgICAgIGlmICghYmFuay0+aXJxX2NoaXApIHsKPiA+IEBA IC02NTgsNiArNzMyLDcgQEAgc3RhdGljIHZvaWQgZXh5bm9zX3BpbmN0cmxfc3VzcGVuZF9iYW5r KAo+ID4gIHZvaWQgZXh5bm9zX3BpbmN0cmxfc3VzcGVuZChzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJs X2Rydl9kYXRhICpkcnZkYXRhKQo+ID4gIHsKPiA+ICAgICAgICAgc3RydWN0IHNhbXN1bmdfcGlu X2JhbmsgKmJhbmsgPSBkcnZkYXRhLT5waW5fYmFua3M7Cj4gPiArICAgICAgIHN0cnVjdCBzYW1z dW5nX3BpbmN0cmxfZHJ2X2RhdGEgKmQgPSBiYW5rLT5kcnZkYXRhOwo+ID4gICAgICAgICBzdHJ1 Y3QgZXh5bm9zX2lycV9jaGlwICppcnFfY2hpcCA9IE5VTEw7Cj4gPiAgICAgICAgIGludCBpOwo+ ID4KPiA+IEBAIC02NjUsNiArNzQwLDEwIEBAIHZvaWQgZXh5bm9zX3BpbmN0cmxfc3VzcGVuZChz dHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRhICpkcnZkYXRhKQo+ID4gICAgICAgICAgICAg ICAgIGlmIChiYW5rLT5laW50X3R5cGUgPT0gRUlOVF9UWVBFX0dQSU8pCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICBleHlub3NfcGluY3RybF9zdXNwZW5kX2JhbmsoZHJ2ZGF0YSwgYmFuayk7 Cj4gPiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYmFuay0+ZWludF90eXBlID09IEVJTlRfVFlQ RV9XS1VQKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXR0aW5nIERlbGF5IChB bmFsb2cpIEZpbHRlciAqLwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhbmstPmZs dGNvbl90eXBlICE9IEZMVF9ERUZBVUxUKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBleHlub3NfZWludF9mbHRfY29uZmlnKGQsIGJhbmssCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhZTk9TOV9GTFRDT05fREVM QVkpOwo+Cj4gRGl0dG86IG5vIG5lZWQgdG8gYnJlYWsgdGhlIGxpbmUsIHJlbW92ZSB0aGUgY29t bWVudC4gSWYgeW91IHVzZSB0aGUKPiByZWZhY3RvcmVkIGZ1bmN0aW9uLCB5b3UgY2FuIGRyb3Ag J2lmJy4KCldpbGwgZml4Cj4KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXJxX2No aXApIHsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX2NoaXAgPSBiYW5r LT5pcnFfY2hpcDsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX2NoaXAt PnNldF9laW50X3dha2V1cF9tYXNrKGRydmRhdGEsCj4gPiBAQCAtNzA3LDExICs3ODYsMTkgQEAg c3RhdGljIHZvaWQgZXh5bm9zX3BpbmN0cmxfcmVzdW1lX2JhbmsoCj4gPiAgdm9pZCBleHlub3Nf cGluY3RybF9yZXN1bWUoc3RydWN0IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0YSAqZHJ2ZGF0YSkK PiA+ICB7Cj4gPiAgICAgICAgIHN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rICpiYW5rID0gZHJ2ZGF0 YS0+cGluX2JhbmtzOwo+ID4gKyAgICAgICBzdHJ1Y3Qgc2Ftc3VuZ19waW5jdHJsX2Rydl9kYXRh ICpkID0gYmFuay0+ZHJ2ZGF0YTsKPiA+ICAgICAgICAgaW50IGk7Cj4gPgo+ID4gICAgICAgICBm b3IgKGkgPSAwOyBpIDwgZHJ2ZGF0YS0+bnJfYmFua3M7ICsraSwgKytiYW5rKQo+ID4gLSAgICAg ICAgICAgICAgIGlmIChiYW5rLT5laW50X3R5cGUgPT0gRUlOVF9UWVBFX0dQSU8pCj4gPiArICAg ICAgICAgICAgICAgaWYgKGJhbmstPmVpbnRfdHlwZSA9PSBFSU5UX1RZUEVfR1BJTykgewo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgZXh5bm9zX3BpbmN0cmxfcmVzdW1lX2JhbmsoZHJ2ZGF0 YSwgYmFuayk7Cj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiYW5rLT5laW50X3R5cGUg PT0gRUlOVF9UWVBFX1dLVVAgfHwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbmst PmVpbnRfdHlwZSA9PSBFSU5UX1RZUEVfV0tVUF9NVVgpIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNldCBEaWdpdGFsIEZpbHRlciAqLwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGJhbmstPmZsdGNvbl90eXBlICE9IEZMVF9ERUZBVUxUKQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleHlub3NfZWludF9mbHRfY29uZmlnKGQsIGJhbmssCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhZ Tk9TOV9GTFRDT05fRElHSVRBTCk7Cj4KPiBEaXR0bzogcmVtb3ZlIHRoZSBjb21tZW50LCBhbmQg aWYgeW91IHVzZSB0aGUgcmVmYWN0b3JlZCBmdW5jdGlvbiwgeW91Cj4gY2FuIGRyb3AgJ2lmJzsg YWxzbyB0aGVyZSB3aWxsIGJlIG5vIG5lZWQgdG8gYnJlYWsgdGhlIGxpbmUuCgpXaWxsIGZpeAo+ Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gIH0KPiA+Cj4gPiAgc3RhdGljIHZvaWQgZXh5bm9z X3JldGVudGlvbl9lbmFibGUoc3RydWN0IHNhbXN1bmdfcGluY3RybF9kcnZfZGF0YSAqZHJ2ZGF0 YSkKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5v cy5oIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1leHlub3MuaAo+ID4gaW5kZXgg M2FjNTJjMmNmOTk4Li5lMjc5OWZmMWI1ZTkgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BpbmN0 cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5oCj4gPiArKysgYi9kcml2ZXJzL3BpbmN0cmwvc2Ft c3VuZy9waW5jdHJsLWV4eW5vcy5oCj4gPiBAQCAtNTAsNiArNTAsMTMgQEAKPiA+Cj4gPiAgI2Rl ZmluZSBFWFlOT1NfRUlOVF9NQVhfUEVSX0JBTksgICAgICAgOAo+ID4gICNkZWZpbmUgRVhZTk9T X0VJTlRfTlJfV0tVUF9FSU5UCj4KPiBNYXliZSBhZGQgYW4gZW1wdHkgbGluZSBoZXJlPwoKV2ls bCBmaXgKPgo+ID4gKy8qIEVJTlQgZmlsdGVyIGNvbmZpZ3VyYXRpb24gKi8KPiA+ICsjZGVmaW5l IEVYWU5PUzlfRkxUQ09OX0VOICAgICAgICAgICAgICBCSVQoNykKPiA+ICsjZGVmaW5lIEVYWU5P UzlfRkxUQ09OX0RJR0lUQUwgICAgICAgICBCSVQoNikKPiA+ICsjZGVmaW5lIEVYWU5PUzlfRkxU Q09OX0RFTEFZICAgICAgICAgICAoMCA8PCA2KQo+ID4gKyNkZWZpbmUgRVhZTk9TOV9GTFRDT05f TUFTSyAgICAgICAgICAgIDB4ZmYKPiA+ICsjZGVmaW5lIEVYWU5PUzlfRkxUQ09OX0xFTiAgICAg ICAgICAgICA4Cj4gPiArI2RlZmluZSBFWFlOT1M5X0ZMVENPTl9OUl9QSU4gICAgICAgICAgNAo+ Cj4gSSdkIHNheSBkcm9wIHRoaXMgb25lIGFuZCBqdXN0IGhhcmQtY29kZSBpdCB3aGVyZSBuZWVk ZWQ/CgpPaywgd2lsbCBkcm9wLgoKPgo+ID4KPiA+ICAjZGVmaW5lIEVYWU5PU19QSU5fQkFOS19F SU5UTihwaW5zLCByZWcsIGlkKSAgICAgICAgICAgXAo+ID4gICAgICAgICB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1zYW1zdW5nLmMgYi9kcml2ZXJzL3BpbmN0cmwv c2Ftc3VuZy9waW5jdHJsLXNhbXN1bmcuYwo+ID4gaW5kZXggNzliYWJiYjM5Y2VkLi41MGMzNjBi NDc1M2EgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLXNh bXN1bmcuYwo+ID4gKysrIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1zYW1zdW5n LmMKPiA+IEBAIC0xMTA1LDYgKzExMDUsOCBAQCBzYW1zdW5nX3BpbmN0cmxfZ2V0X3NvY19kYXRh KHN0cnVjdCBzYW1zdW5nX3BpbmN0cmxfZHJ2X2RhdGEgKmQsCj4gPiAgICAgICAgICAgICAgICAg YmFuay0+ZWludF9mdW5jID0gYmRhdGEtPmVpbnRfZnVuYzsKPiA+ICAgICAgICAgICAgICAgICBi YW5rLT5laW50X3R5cGUgPSBiZGF0YS0+ZWludF90eXBlOwo+ID4gICAgICAgICAgICAgICAgIGJh bmstPmVpbnRfbWFzayA9IGJkYXRhLT5laW50X21hc2s7Cj4gPiArICAgICAgICAgICAgICAgYmFu ay0+Zmx0Y29uX3R5cGUgPSBiZGF0YS0+Zmx0Y29uX3R5cGU7Cj4gPiArICAgICAgICAgICAgICAg YmFuay0+Zmx0Y29uX29mZnNldCA9IGJkYXRhLT5mbHRjb25fb2Zmc2V0Owo+ID4gICAgICAgICAg ICAgICAgIGJhbmstPmVpbnRfb2Zmc2V0ID0gYmRhdGEtPmVpbnRfb2Zmc2V0Owo+ID4gICAgICAg ICAgICAgICAgIGJhbmstPm5hbWUgPSBiZGF0YS0+bmFtZTsKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1zYW1zdW5nLmggYi9kcml2ZXJzL3BpbmN0 cmwvc2Ftc3VuZy9waW5jdHJsLXNhbXN1bmcuaAo+ID4gaW5kZXggOWIzZGI1MGFkZWYzLi41ZmFi Mzg4NWE3ZDcgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJs LXNhbXN1bmcuaAo+ID4gKysrIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1zYW1z dW5nLmgKPiA+IEBAIC04Miw2ICs4MiwyMCBAQCBlbnVtIGVpbnRfdHlwZSB7Cj4gPiAgICAgICAg IEVJTlRfVFlQRV9XS1VQX01VWCwKPiA+ICB9Owo+ID4KPiA+ICsvKioKPiA+ICsgKiBlbnVtIGZs dGNvbl90eXBlIC0gZmlsdGVyIHNlbGVjdGlvbgo+ID4gKyAqIEBGTFRfREVGQVVMVDogZmlsdGVy IG5vdCBzZWxlY3RhYmxlLCBkZWZhdWx0IGRpZ2l0YWwgZmlsdGVyCj4gPiArICogQEZMVF9TRUxF Q1Q6IGZpbHRlciBzZWxlY3RhYmxlIChkaWdpdGFsIG9yIGRlbGF5KQo+ID4gKyAqCj4gPiArICog U29tZSBiYW5rcyBvbiBuZXdlciBFeHlub3MgYmFzZWQgU29DcyBoYXZlIGEgc2VsZWN0YWJsZSBm aWx0ZXIgb24gYWxpdmUKPiA+ICsgKiBiYW5rcyBvZiAnYW5hbG9nL2RlbGF5JyBvciAnZGlnaXRh bCcuIElmIHRoZSBmaWx0ZXIgc2VsZWN0aW9uIHJlZ2lzdGVyIGlzCj4gPiArICogbm90IGF2YWls YWJsZSB0aGVuIHRoZSBkZWZhdWx0IGZpbHRlciBpcyB1c2VkIChkaWdpdGFsKS4KPiA+ICsgKi8K PiA+ICtlbnVtIGZsdGNvbl90eXBlIHsKPiA+ICsgICAgICAgRkxUX0RFRkFVTFQsCj4gPiArICAg ICAgIEZMVF9TRUxFQ1RBQkxFLAo+ID4gK307Cj4KPiBJcyB0aGVyZSBhbnkgYmVuZWZpdCBvZiBo YXZpbmcgdGhpcyBlbnVtIG92ZXIgcmVwbGFjaW5nIGl0IHdpdGgganVzdCBhCj4gYm9vbCBmaWVs ZCAoZS5nLiAnYm9vbCBmbHRfc2VsZWN0YWJsZScpPwoKSSB0aG91Z2h0IGl0IG1hZGUgaXQgY2xl YXJlciBhdCB0aGUgY2FsbGVlIHNpdGVzIHdoaWNoIGZpbHRlciB3YXMKYmVpbmcgc2V0LCBidXQg SSBjYW4gdXBkYXRlIHRvIGEgYm9vbCBpZiB0aGF0J3Mgd2hhdCB5b3UgcHJlZmVyLgoKcmVnYXJk cywKClBldGVyLgoKPgo+ID4gKwo+ID4gIC8qIG1heGltdW0gbGVuZ3RoIG9mIGEgcGluIGluIHBp biBkZXNjcmlwdG9yIChleGFtcGxlOiAiZ3BhMC0wIikgKi8KPiA+ICAjZGVmaW5lIFBJTl9OQU1F X0xFTkdUSCAgICAgICAgMTAKPiA+Cj4gPiBAQCAtMTIyLDYgKzEzNiw4IEBAIHN0cnVjdCBzYW1z dW5nX3Bpbl9iYW5rX3R5cGUgewo+ID4gICAqIEBlaW50X3R5cGU6IHR5cGUgb2YgdGhlIGV4dGVy bmFsIGludGVycnVwdCBzdXBwb3J0ZWQgYnkgdGhlIGJhbmsuCj4gPiAgICogQGVpbnRfbWFzazog Yml0IG1hc2sgb2YgcGlucyB3aGljaCBzdXBwb3J0IEVJTlQgZnVuY3Rpb24uCj4gPiAgICogQGVp bnRfb2Zmc2V0OiBTb0Mtc3BlY2lmaWMgRUlOVCByZWdpc3RlciBvciBpbnRlcnJ1cHQgb2Zmc2V0 IG9mIGJhbmsuCj4gPiArICogQGZsdGNvbl90eXBlOiB3aGV0aGVyIHRoZSBmaWx0ZXIgKGRlbGF5 L2RpZ2l0YWwpIGlzIHNlbGVjdGFibGUKPiA+ICsgKiBAZmx0Y29uX29mZnNldDogU29DLXNwZWNp ZmljIEVJTlQgZmlsdGVyIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0IG9mIGJhbmsuCj4gPiAgICog QG5hbWU6IG5hbWUgdG8gYmUgcHJlZml4ZWQgZm9yIGVhY2ggcGluIGluIHRoaXMgcGluIGJhbmsu Cj4gPiAgICovCj4gPiAgc3RydWN0IHNhbXN1bmdfcGluX2JhbmtfZGF0YSB7Cj4gPiBAQCAtMTMz LDYgKzE0OSw4IEBAIHN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5rX2RhdGEgewo+ID4gICAgICAgICBl bnVtIGVpbnRfdHlwZSAgZWludF90eXBlOwo+ID4gICAgICAgICB1MzIgICAgICAgICAgICAgZWlu dF9tYXNrOwo+ID4gICAgICAgICB1MzIgICAgICAgICAgICAgZWludF9vZmZzZXQ7Cj4gPiArICAg ICAgIGVudW0gZmx0Y29uX3R5cGUgZmx0Y29uX3R5cGU7Cj4gPiArICAgICAgIHUzMiAgICAgICAg ICAgICBmbHRjb25fb2Zmc2V0Owo+ID4gICAgICAgICBjb25zdCBjaGFyICAgICAgKm5hbWU7Cj4g PiAgfTsKPiA+Cj4gPiBAQCAtMTQ3LDYgKzE2NSw4IEBAIHN0cnVjdCBzYW1zdW5nX3Bpbl9iYW5r X2RhdGEgewo+ID4gICAqIEBlaW50X3R5cGU6IHR5cGUgb2YgdGhlIGV4dGVybmFsIGludGVycnVw dCBzdXBwb3J0ZWQgYnkgdGhlIGJhbmsuCj4gPiAgICogQGVpbnRfbWFzazogYml0IG1hc2sgb2Yg cGlucyB3aGljaCBzdXBwb3J0IEVJTlQgZnVuY3Rpb24uCj4gPiAgICogQGVpbnRfb2Zmc2V0OiBT b0Mtc3BlY2lmaWMgRUlOVCByZWdpc3RlciBvciBpbnRlcnJ1cHQgb2Zmc2V0IG9mIGJhbmsuCj4g PiArICogQGZsdGNvbl90eXBlOiB3aGV0aGVyIHRoZSBmaWx0ZXIgKGRlbGF5L2RpZ2l0YWwpIGlz IHNlbGVjdGFibGUKPiA+ICsgKiBAZmx0Y29uX29mZnNldDogU29DLXNwZWNpZmljIEVJTlQgZmls dGVyIGNvbnRyb2wgcmVnaXN0ZXIgb2Zmc2V0IG9mIGJhbmsuCj4gPiAgICogQG5hbWU6IG5hbWUg dG8gYmUgcHJlZml4ZWQgZm9yIGVhY2ggcGluIGluIHRoaXMgcGluIGJhbmsuCj4gPiAgICogQGlk OiBpZCBvZiB0aGUgYmFuaywgcHJvcGFnYXRlZCB0byB0aGUgcGluIHJhbmdlLgo+ID4gICAqIEBw aW5fYmFzZTogc3RhcnRpbmcgcGluIG51bWJlciBvZiB0aGUgYmFuay4KPiA+IEBAIC0xNzAsNiAr MTkwLDggQEAgc3RydWN0IHNhbXN1bmdfcGluX2Jhbmsgewo+ID4gICAgICAgICBlbnVtIGVpbnRf dHlwZSAgZWludF90eXBlOwo+ID4gICAgICAgICB1MzIgICAgICAgICAgICAgZWludF9tYXNrOwo+ ID4gICAgICAgICB1MzIgICAgICAgICAgICAgZWludF9vZmZzZXQ7Cj4gPiArICAgICAgIGVudW0g Zmx0Y29uX3R5cGUgZmx0Y29uX3R5cGU7Cj4gPiArICAgICAgIHUzMiAgICAgICAgICAgICBmbHRj b25fb2Zmc2V0Owo+ID4gICAgICAgICBjb25zdCBjaGFyICAgICAgKm5hbWU7Cj4gPiAgICAgICAg IHUzMiAgICAgICAgICAgICBpZDsKPiA+Cj4gPiAtLQo+ID4gMi40My4wLnJjMi40NTEuZzg2MzFi Yzc0NzItZ29vZwo+ID4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK