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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13C1FC433F5 for ; Fri, 14 Jan 2022 05:14:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233086AbiANFOu (ORCPT ); Fri, 14 Jan 2022 00:14:50 -0500 Received: from mail-sz.amlogic.com ([211.162.65.117]:35843 "EHLO mail-sz.amlogic.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229379AbiANFOs (ORCPT ); Fri, 14 Jan 2022 00:14:48 -0500 Received: from [10.28.39.106] (10.28.39.106) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Fri, 14 Jan 2022 13:14:46 +0800 Message-ID: <09ff9044-9abc-d1ad-26c1-5e6ece56d30c@amlogic.com> Date: Fri, 14 Jan 2022 13:14:46 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v9 4/4] clk: meson: add sub MMC clock controller driver Content-Language: en-US To: Stephen Boyd , Jerome Brunet , Kevin Hilman , Michael Turquette , Neil Armstrong , Rob Herring , CC: Martin Blumenstingl , Jianxin Pan , Victor Wan , XianWei Zhao , Kelvin Zhang , BiChao Zheng , YongHui Yu , , , References: <20220113115745.45826-1-liang.yang@amlogic.com> <20220113115745.45826-5-liang.yang@amlogic.com> <20220113213513.9819AC36AEA@smtp.kernel.org> From: Liang Yang In-Reply-To: <20220113213513.9819AC36AEA@smtp.kernel.org> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.28.39.106] X-ClientProxiedBy: mail-sz.amlogic.com (10.28.11.5) To mail-sz.amlogic.com (10.28.11.5) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Stephen, On 2022/1/14 5:35, Stephen Boyd wrote: > [ EXTERNAL EMAIL ] > > Quoting Liang Yang (2022-01-13 03:57:45) >> diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig >> index bb0f59eea366..3de6f3b24461 100644 >> --- a/drivers/clk/meson/Kconfig >> +++ b/drivers/clk/meson/Kconfig >> @@ -39,6 +39,20 @@ config COMMON_CLK_MESON_AO_CLKC >> select COMMON_CLK_MESON_REGMAP >> select RESET_CONTROLLER >> >> +config COMMON_CLK_MMC_MESON >> + tristate "Meson MMC Sub Clock Controller Driver" >> + depends on ARCH_MESON || COMPILE_TEST >> + select MFD_SYSCON >> + select COMMON_CLK_AMLOGIC >> + select COMMON_CLK_MESON_PHASE >> + select COMMON_CLK_MESON_PHASE_DELAY >> + select COMMON_CLK_MESON_SCLK_DIV >> + help >> + Support for the MMC sub clock controller on >> + Amlogic Meson Platform, which includes S905 (GXBB, GXL), >> + A113D/X (AXG) devices . Say Y if you want this > > s/devices /devices/ ok, i will fix it > >> + clock enabled. >> + >> config COMMON_CLK_MESON_EE_CLKC >> tristate >> select COMMON_CLK_MESON_REGMAP >> diff --git a/drivers/clk/meson/mmc-clkc.c b/drivers/clk/meson/mmc-clkc.c >> new file mode 100644 >> index 000000000000..f53977f61390 >> --- /dev/null >> +++ b/drivers/clk/meson/mmc-clkc.c >> @@ -0,0 +1,300 @@ >> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) >> +/* >> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include "sclk-div.h" >> +#include "clk-phase-delay.h" >> +#include "clk-regmap.h" >> +#include "clk-phase.h" >> + >> +/* clock ID used by internal driver */ >> + >> +#define SD_EMMC_CLOCK 0 >> +#define CLK_DELAY_STEP_PS_GX 200 >> +#define CLK_DELAY_STEP_PS_AXG 78 >> +#define MUX_CLK_NUM_PARENTS 2 >> +#define MMC_MAX_CLKS 4 >> + >> +struct mmc_clkc_data { >> + struct meson_clk_phase_delay_data tx; >> + struct meson_clk_phase_delay_data rx; >> +}; >> + >> +static struct clk_regmap_mux_data mmc_clkc_mux_data = { >> + .offset = SD_EMMC_CLOCK, >> + .mask = 0x3, >> + .shift = 6, >> +}; >> + >> +static const struct meson_sclk_div_data mmc_clkc_div_data = { >> + .div = { >> + .reg_off = SD_EMMC_CLOCK, >> + .width = 6, >> + }, >> + .flags = MESON_SCLK_ONE_BASED, >> +}; >> + >> +static struct meson_clk_phase_data mmc_clkc_core_phase = { >> + .ph = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 8, >> + .width = 2, >> + } >> +}; >> + >> +static const struct mmc_clkc_data mmc_clkc_gx_data = { >> + .tx = { >> + .phase = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 10, >> + .width = 2, >> + }, >> + .delay = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 16, >> + .width = 4, >> + }, >> + .delay_step_ps = CLK_DELAY_STEP_PS_GX, >> + }, >> + .rx = { >> + .phase = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 12, >> + .width = 2, >> + }, >> + .delay = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 20, >> + .width = 4, >> + }, >> + .delay_step_ps = CLK_DELAY_STEP_PS_GX, >> + }, >> +}; >> + >> +static const struct mmc_clkc_data mmc_clkc_axg_data = { >> + .tx = { >> + .phase = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 10, >> + .width = 2, >> + }, >> + .delay = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 16, >> + .width = 6, >> + }, >> + .delay_step_ps = CLK_DELAY_STEP_PS_AXG, >> + }, >> + .rx = { >> + .phase = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 12, >> + .width = 2, >> + }, >> + .delay = { >> + .reg_off = SD_EMMC_CLOCK, >> + .shift = 22, >> + .width = 6, >> + }, >> + .delay_step_ps = CLK_DELAY_STEP_PS_AXG, >> + }, >> +}; >> + >> +static const struct of_device_id mmc_clkc_match_table[] = { >> + { >> + .compatible = "amlogic,gx-mmc-clkc", >> + .data = &mmc_clkc_gx_data >> + }, >> + { >> + .compatible = "amlogic,axg-mmc-clkc", >> + .data = &mmc_clkc_axg_data >> + }, >> + {} >> +}; >> +MODULE_DEVICE_TABLE(of, mmc_clkc_match_table); >> + >> +static struct clk_regmap * >> +mmc_clkc_register_clk(struct device *dev, struct regmap *map, >> + struct clk_init_data *init, >> + const char *suffix, void *data) >> +{ >> + struct clk_regmap *clk; >> + char *name; >> + int ret; >> + >> + clk = devm_kzalloc(dev, sizeof(*clk), GFP_KERNEL); >> + if (!clk) >> + return ERR_PTR(-ENOMEM); >> + >> + name = kasprintf(GFP_KERNEL, "%s#%s", dev_name(dev), suffix); >> + if (!name) >> + return ERR_PTR(-ENOMEM); >> + >> + init->name = name; >> + clk->map = map; >> + clk->data = data; >> + clk->hw.init = init; >> + ret = devm_clk_hw_register(dev, &clk->hw); >> + if (ret) >> + clk = ERR_PTR(ret); >> + >> + kfree(name); >> + return clk; >> +} >> + >> +static struct clk_regmap *mmc_clkc_register_mux(struct device *dev, >> + struct regmap *map) >> +{ >> + const char *parent_names[MUX_CLK_NUM_PARENTS]; >> + struct clk_init_data init; >> + struct clk_regmap *mux; >> + struct clk *clk; >> + int i; >> + >> + for (i = 0; i < MUX_CLK_NUM_PARENTS; i++) { >> + char name[8]; >> + >> + snprintf(name, sizeof(name), "clkin%d", i); >> + clk = devm_clk_get(dev, name); >> + if (IS_ERR(clk)) { >> + if (clk != ERR_PTR(-EPROBE_DEFER)) >> + dev_err(dev, "Missing clock %s\n", name); > > Use dev_err_probe()? ok > >> + return ERR_CAST(clk); >> + } >> + >> + parent_names[i] = __clk_get_name(clk); > > Why can't we use clk_parent_data? ok, i will try clk_parent_data. > >> + } >> + >> + init.ops = &clk_regmap_mux_ops; >> + init.flags = CLK_SET_RATE_PARENT; >> + init.parent_names = parent_names; >> + init.num_parents = MUX_CLK_NUM_PARENTS; >> + >> + mux = mmc_clkc_register_clk(dev, map, &init, "mux", &mmc_clkc_mux_data); >> + if (IS_ERR(mux)) >> + dev_err(dev, "Mux clock registration failed\n"); >> + >> + return mux; >> +} >> + >> +static struct clk_regmap * >> +mmc_clkc_register_clk_with_parent(struct device *dev, struct regmap *map, >> + char *suffix, const struct clk_hw *hw, >> + unsigned long flags, >> + const struct clk_ops *ops, void *data) >> +{ >> + struct clk_init_data init; >> + struct clk_regmap *clk; >> + const char *parent_name = clk_hw_get_name(hw); >> + >> + init.ops = ops; >> + init.flags = flags; >> + init.parent_names = &parent_name; >> + init.num_parents = 1; >> + >> + clk = mmc_clkc_register_clk(dev, map, &init, suffix, data); >> + if (IS_ERR(clk)) >> + dev_err(dev, "%s clock registration failed\n", suffix); >> + >> + return clk; >> +} >> + >> +static int mmc_clkc_probe(struct platform_device *pdev) >> +{ >> + struct clk_hw_onecell_data *onecell_data; >> + struct device *dev = &pdev->dev; >> + struct mmc_clkc_data *data; >> + struct regmap *map; >> + struct clk_regmap *clk, *core; >> + struct meson_sclk_div_data *div_data; >> + >> + /*cast to drop the const in match->data*/ > > Space after *, also why do we need to cast away const? The user of this > pointer passes it all the way down to mmc_clkc_register_clk() which > could take the data as const void pointer and decide to cast away const > there. if use 'const' here, it will report a warning: drivers/clk/meson/mmc-clkc.c:224:7: error: assignment discards ‘const’ qualifier from pointer targe t type [-Werror=discarded-qualifiers] data = (const struct mmc_clkc_data *)of_device_get_match_data(dev); > >> + data = (struct mmc_clkc_data *)of_device_get_match_data(dev); >> + if (!data) >> + return -ENODEV; >> + >> + map = syscon_node_to_regmap(dev->of_node); >> + if (IS_ERR(map)) { >> + dev_err(dev, "could not find mmc clock controller\n"); >> + return PTR_ERR(map); >> + } >> + >> + onecell_data = devm_kzalloc(dev, >> + struct_size(onecell_data, hws, >> + MMC_MAX_CLKS), >> + GFP_KERNEL); >> + if (!onecell_data) >> + return -ENOMEM; >> + >> + clk = mmc_clkc_register_mux(dev, map); >> + if (IS_ERR(clk)) >> + return PTR_ERR(clk); >> + >> + div_data = devm_kzalloc(dev, sizeof(*div_data), GFP_KERNEL); >> + if (!div_data) >> + return -ENOMEM; >> + >> + memcpy(div_data, &mmc_clkc_div_data, sizeof(*div_data)); >> + clk = mmc_clkc_register_clk_with_parent(dev, map, "div", >> + &clk->hw, >> + CLK_SET_RATE_PARENT, >> + &meson_sclk_div_ops, >> + div_data); >> + if (IS_ERR(clk)) >> + return PTR_ERR(clk); >> + >> + onecell_data->hws[CLKID_MMC_DIV] = &clk->hw; >> + core = mmc_clkc_register_clk_with_parent(dev, map, "core", >> + &clk->hw, >> + CLK_SET_RATE_PARENT, >> + &meson_clk_phase_ops, >> + &mmc_clkc_core_phase); >> + if (IS_ERR(core)) >> + return PTR_ERR(core); >> + >> + onecell_data->hws[CLKID_MMC_PHASE_CORE] = &core->hw; >> + clk = mmc_clkc_register_clk_with_parent(dev, map, "rx", >> + &core->hw, 0, >> + &meson_clk_phase_delay_ops, >> + &data->rx); >> + if (IS_ERR(clk)) >> + return PTR_ERR(clk); >> + >> + onecell_data->hws[CLKID_MMC_PHASE_RX] = &clk->hw; >> + clk = mmc_clkc_register_clk_with_parent(dev, map, "tx", >> + &core->hw, 0, >> + &meson_clk_phase_delay_ops, >> + &data->tx); >> + if (IS_ERR(clk)) >> + return PTR_ERR(clk); >> + >> + onecell_data->hws[CLKID_MMC_PHASE_TX] = &clk->hw; >> + onecell_data->num = MMC_MAX_CLKS; >> + return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, >> + onecell_data); >> +} >> + >> +static struct platform_driver mmc_clkc_driver = { >> + .probe = mmc_clkc_probe, >> + .driver = { >> + .name = "meson-mmc-clkc", >> + .of_match_table = of_match_ptr(mmc_clkc_match_table), >> + }, >> +}; >> + >> +module_platform_driver(mmc_clkc_driver); >> + >> +MODULE_DESCRIPTION("Amlogic AXG MMC clock driver"); >> +MODULE_AUTHOR("Jianxin Pan "); >> +MODULE_LICENSE("GPL v2"); > > . 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 45098C433F5 for ; Fri, 14 Jan 2022 05:15:12 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zy9Xe4s3Zw0BWmdq4DSt8rCipbcl+jGmg22rHSxuePI=; b=RR2lpNYnPrqZQ+ Xfb+5GTmkZ894N1EIZryJ3ce88ZuNioBgPZtu3vDs4+hJqfKHirmsJ/DfGduDeMzR+21HLWtz/5hQ O24shhuiQI46gOHd6zRQRnJmSJb0mdI0XOgSbXJh4OaZ+maV6zWVpHiC8UZLX0lveNpJ6K+hkQ5XW wpWu8VUJDEmtGajoaPUngTAWzFt54TLWXfS4HTmoSZ2tB1NJ4kP0vUQht261m2lTCXF5+34eBU85L fQJJvNiXQIARNPf4jIP0WUQ70bCYLLO9mw9aPNeZeUBrAygspRMKEO2CV0lofR35kq+ZzILCyASqA JRErqA4/xftOcx5gwLUA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n8EvY-007lK0-Kn; Fri, 14 Jan 2022 05:15:04 +0000 Received: from mail-sz.amlogic.com ([211.162.65.117]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n8EvL-007lHz-NZ; Fri, 14 Jan 2022 05:14:53 +0000 Received: from [10.28.39.106] (10.28.39.106) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Fri, 14 Jan 2022 13:14:46 +0800 Message-ID: <09ff9044-9abc-d1ad-26c1-5e6ece56d30c@amlogic.com> Date: Fri, 14 Jan 2022 13:14:46 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v9 4/4] clk: meson: add sub MMC clock controller driver Content-Language: en-US To: Stephen Boyd , Jerome Brunet , Kevin Hilman , Michael Turquette , Neil Armstrong , Rob Herring , CC: Martin Blumenstingl , Jianxin Pan , Victor Wan , XianWei Zhao , Kelvin Zhang , BiChao Zheng , YongHui Yu , , , References: <20220113115745.45826-1-liang.yang@amlogic.com> <20220113115745.45826-5-liang.yang@amlogic.com> <20220113213513.9819AC36AEA@smtp.kernel.org> From: Liang Yang In-Reply-To: <20220113213513.9819AC36AEA@smtp.kernel.org> X-Originating-IP: [10.28.39.106] X-ClientProxiedBy: mail-sz.amlogic.com (10.28.11.5) To mail-sz.amlogic.com (10.28.11.5) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220113_211451_811120_4E25B6B6 X-CRM114-Status: GOOD ( 19.96 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGkgU3RlcGhlbiwKCk9uIDIwMjIvMS8xNCA1OjM1LCBTdGVwaGVuIEJveWQgd3JvdGU6Cj4gWyBF WFRFUk5BTCBFTUFJTCBdCj4gCj4gUXVvdGluZyBMaWFuZyBZYW5nICgyMDIyLTAxLTEzIDAzOjU3 OjQ1KQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vS2NvbmZpZyBiL2RyaXZlcnMv Y2xrL21lc29uL0tjb25maWcKPj4gaW5kZXggYmIwZjU5ZWVhMzY2Li4zZGU2ZjNiMjQ0NjEgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvY2xrL21lc29uL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9j bGsvbWVzb24vS2NvbmZpZwo+PiBAQCAtMzksNiArMzksMjAgQEAgY29uZmlnIENPTU1PTl9DTEtf TUVTT05fQU9fQ0xLQwo+PiAgICAgICAgICBzZWxlY3QgQ09NTU9OX0NMS19NRVNPTl9SRUdNQVAK Pj4gICAgICAgICAgc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKPj4gICAKPj4gK2NvbmZpZyBDT01N T05fQ0xLX01NQ19NRVNPTgo+PiArICAgICAgIHRyaXN0YXRlICJNZXNvbiBNTUMgU3ViIENsb2Nr IENvbnRyb2xsZXIgRHJpdmVyIgo+PiArICAgICAgIGRlcGVuZHMgb24gQVJDSF9NRVNPTiB8fCBD T01QSUxFX1RFU1QKPj4gKyAgICAgICBzZWxlY3QgTUZEX1NZU0NPTgo+PiArICAgICAgIHNlbGVj dCBDT01NT05fQ0xLX0FNTE9HSUMKPj4gKyAgICAgICBzZWxlY3QgQ09NTU9OX0NMS19NRVNPTl9Q SEFTRQo+PiArICAgICAgIHNlbGVjdCBDT01NT05fQ0xLX01FU09OX1BIQVNFX0RFTEFZCj4+ICsg ICAgICAgc2VsZWN0IENPTU1PTl9DTEtfTUVTT05fU0NMS19ESVYKPj4gKyAgICAgICBoZWxwCj4+ ICsgICAgICAgICBTdXBwb3J0IGZvciB0aGUgTU1DIHN1YiBjbG9jayBjb250cm9sbGVyIG9uCj4+ ICsgICAgICAgICBBbWxvZ2ljIE1lc29uIFBsYXRmb3JtLCB3aGljaCBpbmNsdWRlcyBTOTA1IChH WEJCLCBHWEwpLAo+PiArICAgICAgICAgQTExM0QvWCAoQVhHKSBkZXZpY2VzIC4gU2F5IFkgaWYg eW91IHdhbnQgdGhpcwo+IAo+IHMvZGV2aWNlcyAvZGV2aWNlcy8Kb2ssIGkgd2lsbCBmaXggaXQK PiAKPj4gKyAgICAgICAgIGNsb2NrIGVuYWJsZWQuCj4+ICsKPj4gICBjb25maWcgQ09NTU9OX0NM S19NRVNPTl9FRV9DTEtDCj4+ICAgICAgICAgIHRyaXN0YXRlCj4+ICAgICAgICAgIHNlbGVjdCBD T01NT05fQ0xLX01FU09OX1JFR01BUAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24v bW1jLWNsa2MuYyBiL2RyaXZlcnMvY2xrL21lc29uL21tYy1jbGtjLmMKPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNTM5NzdmNjEzOTAKPj4gLS0tIC9kZXYv bnVsbAo+PiArKysgYi9kcml2ZXJzL2Nsay9tZXNvbi9tbWMtY2xrYy5jCj4+IEBAIC0wLDAgKzEs MzAwIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkK Pj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv bWZkL3N5c2Nvbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2FtbG9naWMsbW1jLWNsa2MuaD4KPj4gKwo+PiAr I2luY2x1ZGUgInNjbGstZGl2LmgiCj4+ICsjaW5jbHVkZSAiY2xrLXBoYXNlLWRlbGF5LmgiCj4+ ICsjaW5jbHVkZSAiY2xrLXJlZ21hcC5oIgo+PiArI2luY2x1ZGUgImNsay1waGFzZS5oIgo+PiAr Cj4+ICsvKiBjbG9jayBJRCB1c2VkIGJ5IGludGVybmFsIGRyaXZlciAqLwo+PiArCj4+ICsjZGVm aW5lIFNEX0VNTUNfQ0xPQ0sgICAgICAgICAgMAo+PiArI2RlZmluZSBDTEtfREVMQVlfU1RFUF9Q U19HWCAgIDIwMAo+PiArI2RlZmluZSBDTEtfREVMQVlfU1RFUF9QU19BWEcgIDc4Cj4+ICsjZGVm aW5lIE1VWF9DTEtfTlVNX1BBUkVOVFMgICAgMgo+PiArI2RlZmluZSBNTUNfTUFYX0NMS1MgICAg ICAgICAgIDQKPj4gKwo+PiArc3RydWN0IG1tY19jbGtjX2RhdGEgewo+PiArICAgICAgIHN0cnVj dCBtZXNvbl9jbGtfcGhhc2VfZGVsYXlfZGF0YSB0eDsKPj4gKyAgICAgICBzdHJ1Y3QgbWVzb25f Y2xrX3BoYXNlX2RlbGF5X2RhdGEgcng7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXBfbXV4X2RhdGEgbW1jX2Nsa2NfbXV4X2RhdGEgPSB7Cj4+ICsgICAgICAgLm9mZnNl dCA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgLm1hc2sgICA9IDB4MywKPj4gKyAgICAgICAu c2hpZnQgID0gNiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fc2Ns a19kaXZfZGF0YSBtbWNfY2xrY19kaXZfZGF0YSA9IHsKPj4gKyAgICAgICAuZGl2ID0gewo+PiAr ICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAgICAgICAg ICAgLndpZHRoICAgPSA2LAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLmZsYWdzID0gTUVTT05f U0NMS19PTkVfQkFTRUQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IG1lc29uX2Nsa19w aGFzZV9kYXRhIG1tY19jbGtjX2NvcmVfcGhhc2UgPSB7Cj4+ICsgICAgICAgLnBoID0gewo+PiAr ICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAgICAgICAg ICAgLnNoaWZ0ICAgPSA4LAo+PiArICAgICAgICAgICAgICAgLndpZHRoICAgPSAyLAo+PiArICAg ICAgIH0KPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2Nsa2NfZGF0YSBt bWNfY2xrY19neF9kYXRhID0gewo+PiArICAgICAgIC50eCA9IHsKPj4gKyAgICAgICAgICAgICAg IC5waGFzZSA9IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1D X0NMT0NLLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAuc2hpZnQgICA9IDEwLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAud2lkdGggICA9IDIsCj4+ICsgICAgICAgICAgICAgICB9LAo+ PiArICAgICAgICAgICAgICAgLmRlbGF5ID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAu cmVnX29mZiA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlm dCAgID0gMTYsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gNCwKPj4gKyAg ICAgICAgICAgICAgIH0sCj4+ICsgICAgICAgICAgICAgICAuZGVsYXlfc3RlcF9wcyA9IENMS19E RUxBWV9TVEVQX1BTX0dYLAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLnJ4ID0gewo+PiArICAg ICAgICAgICAgICAgLnBoYXNlID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29m ZiA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0g MTIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gMiwKPj4gKyAgICAgICAg ICAgICAgIH0sCj4+ICsgICAgICAgICAgICAgICAuZGVsYXkgPSB7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIC5yZWdfb2ZmID0gU0RfRU1NQ19DTE9DSywKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgLnNoaWZ0ICAgPSAyMCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLndpZHRoICAg PSA0LAo+PiArICAgICAgICAgICAgICAgfSwKPj4gKyAgICAgICAgICAgICAgIC5kZWxheV9zdGVw X3BzICAgPSBDTEtfREVMQVlfU1RFUF9QU19HWCwKPj4gKyAgICAgICB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfY2xrY19kYXRhIG1tY19jbGtjX2F4Z19kYXRhID0g ewo+PiArICAgICAgIC50eCA9IHsKPj4gKyAgICAgICAgICAgICAgIC5waGFzZSA9IHsKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAuc2hpZnQgICA9IDEwLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAud2lkdGggICA9IDIsCj4+ICsgICAgICAgICAgICAgICB9LAo+PiArICAgICAgICAgICAgICAg LmRlbGF5ID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29mZiA9IFNEX0VNTUNf Q0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0gMTYsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gNiwKPj4gKyAgICAgICAgICAgICAgIH0sCj4+ ICsgICAgICAgICAgICAgICAuZGVsYXlfc3RlcF9wcyAgID0gQ0xLX0RFTEFZX1NURVBfUFNfQVhH LAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLnJ4ID0gewo+PiArICAgICAgICAgICAgICAgLnBo YXNlID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29mZiA9IFNEX0VNTUNfQ0xP Q0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0gMTIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIC53aWR0aCAgID0gMiwKPj4gKyAgICAgICAgICAgICAgIH0sCj4+ICsg ICAgICAgICAgICAgICAuZGVsYXkgPSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5yZWdf b2ZmID0gU0RfRU1NQ19DTE9DSywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLnNoaWZ0ICAg PSAyMiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLndpZHRoICAgPSA2LAo+PiArICAgICAg ICAgICAgICAgfSwKPj4gKyAgICAgICAgICAgICAgIC5kZWxheV9zdGVwX3BzICAgPSBDTEtfREVM QVlfU1RFUF9QU19BWEcsCj4+ICsgICAgICAgfSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1tY19jbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+ICsgICAg ICAgewo+PiArICAgICAgICAgICAgICAgLmNvbXBhdGlibGUgICAgID0gImFtbG9naWMsZ3gtbW1j LWNsa2MiLAo+PiArICAgICAgICAgICAgICAgLmRhdGEgICAgICAgICAgID0gJm1tY19jbGtjX2d4 X2RhdGEKPj4gKyAgICAgICB9LAo+PiArICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgIC5jb21w YXRpYmxlICAgICA9ICJhbWxvZ2ljLGF4Zy1tbWMtY2xrYyIsCj4+ICsgICAgICAgICAgICAgICAu ZGF0YSAgICAgICAgICAgPSAmbW1jX2Nsa2NfYXhnX2RhdGEKPj4gKyAgICAgICB9LAo+PiArICAg ICAgIHt9Cj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW1jX2Nsa2NfbWF0Y2hf dGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgKgo+PiArbW1jX2Nsa2Nf cmVnaXN0ZXJfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqbWFwLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNsa19pbml0X2RhdGEgKmluaXQsCj4+ICsgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ ICsgICAgICAgc3RydWN0IGNsa19yZWdtYXAgKmNsazsKPj4gKyAgICAgICBjaGFyICpuYW1lOwo+ PiArICAgICAgIGludCByZXQ7Cj4+ICsKPj4gKyAgICAgICBjbGsgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmNsayksIEdGUF9LRVJORUwpOwo+PiArICAgICAgIGlmICghY2xrKQo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ICsKPj4gKyAgICAgICBuYW1l ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyMlcyIsIGRldl9uYW1lKGRldiksIHN1ZmZpeCk7 Cj4+ICsgICAgICAgaWYgKCFuYW1lKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4+ICsKPj4gKyAgICAgICBpbml0LT5uYW1lID0gbmFtZTsKPj4gKyAgICAgICBj bGstPm1hcCA9IG1hcDsKPj4gKyAgICAgICBjbGstPmRhdGEgPSBkYXRhOwo+PiArICAgICAgIGNs ay0+aHcuaW5pdCA9IGluaXQ7Cj4+ICsgICAgICAgcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIo ZGV2LCAmY2xrLT5odyk7Cj4+ICsgICAgICAgaWYgKHJldCkKPj4gKyAgICAgICAgICAgICAgIGNs ayA9IEVSUl9QVFIocmV0KTsKPj4gKwo+PiArICAgICAgIGtmcmVlKG5hbWUpOwo+PiArICAgICAg IHJldHVybiBjbGs7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCAqbW1j X2Nsa2NfcmVnaXN0ZXJfbXV4KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlZ21hcCAqbWFwKQo+PiAr ewo+PiArICAgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lc1tNVVhfQ0xLX05VTV9QQVJFTlRT XTsKPj4gKyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owo+PiArICAgICAgIHN0cnVj dCBjbGtfcmVnbWFwICptdXg7Cj4+ICsgICAgICAgc3RydWN0IGNsayAqY2xrOwo+PiArICAgICAg IGludCBpOwo+PiArCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1VWF9DTEtfTlVNX1BBUkVO VFM7IGkrKykgewo+PiArICAgICAgICAgICAgICAgY2hhciBuYW1lWzhdOwo+PiArCj4+ICsgICAg ICAgICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJjbGtpbiVkIiwgaSk7Cj4+ ICsgICAgICAgICAgICAgICBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBuYW1lKTsKPj4gKyAgICAg ICAgICAgICAgIGlmIChJU19FUlIoY2xrKSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBp ZiAoY2xrICE9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUikpCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2X2VycihkZXYsICJNaXNzaW5nIGNsb2NrICVzXG4iLCBuYW1lKTsKPiAK PiBVc2UgZGV2X2Vycl9wcm9iZSgpPwpvawo+IAo+PiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gRVJSX0NBU1QoY2xrKTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAg ICAgICAgICAgcGFyZW50X25hbWVzW2ldID0gX19jbGtfZ2V0X25hbWUoY2xrKTsKPiAKPiBXaHkg Y2FuJ3Qgd2UgdXNlIGNsa19wYXJlbnRfZGF0YT8KCm9rLCBpIHdpbGwgdHJ5IGNsa19wYXJlbnRf ZGF0YS4KCj4gCj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgaW5pdC5vcHMgPSAmY2xrX3Jl Z21hcF9tdXhfb3BzOwo+PiArICAgICAgIGluaXQuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U Owo+PiArICAgICAgIGluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWVzOwo+PiArICAgICAg IGluaXQubnVtX3BhcmVudHMgPSBNVVhfQ0xLX05VTV9QQVJFTlRTOwo+PiArCj4+ICsgICAgICAg bXV4ID0gbW1jX2Nsa2NfcmVnaXN0ZXJfY2xrKGRldiwgbWFwLCAmaW5pdCwgIm11eCIsICZtbWNf Y2xrY19tdXhfZGF0YSk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihtdXgpKQo+PiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJNdXggY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+ ICsKPj4gKyAgICAgICByZXR1cm4gbXV4Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXAgKgo+PiArbW1jX2Nsa2NfcmVnaXN0ZXJfY2xrX3dpdGhfcGFyZW50KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqbWFwLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqc3VmZml4LCBjb25zdCBzdHJ1Y3QgY2xrX2h3ICpodywKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xrX29wcyAqb3Bz LCB2b2lkICpkYXRhKQo+PiArewo+PiArICAgICAgIHN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 Cj4+ICsgICAgICAgc3RydWN0IGNsa19yZWdtYXAgKmNsazsKPj4gKyAgICAgICBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7Cj4+ICsKPj4gKyAgICAgICBpbml0 Lm9wcyA9IG9wczsKPj4gKyAgICAgICBpbml0LmZsYWdzID0gZmxhZ3M7Cj4+ICsgICAgICAgaW5p dC5wYXJlbnRfbmFtZXMgPSAmcGFyZW50X25hbWU7Cj4+ICsgICAgICAgaW5pdC5udW1fcGFyZW50 cyA9IDE7Cj4+ICsKPj4gKyAgICAgICBjbGsgPSBtbWNfY2xrY19yZWdpc3Rlcl9jbGsoZGV2LCBt YXAsICZpbml0LCBzdWZmaXgsIGRhdGEpOwo+PiArICAgICAgIGlmIChJU19FUlIoY2xrKSkKPj4g KyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiJXMgY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWxl ZFxuIiwgc3VmZml4KTsKPj4gKwo+PiArICAgICAgIHJldHVybiBjbGs7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgbW1jX2Nsa2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK Pj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqb25lY2VsbF9kYXRh Owo+PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICsgICAgICAg c3RydWN0IG1tY19jbGtjX2RhdGEgKmRhdGE7Cj4+ICsgICAgICAgc3RydWN0IHJlZ21hcCAqbWFw Owo+PiArICAgICAgIHN0cnVjdCBjbGtfcmVnbWFwICpjbGssICpjb3JlOwo+PiArICAgICAgIHN0 cnVjdCBtZXNvbl9zY2xrX2Rpdl9kYXRhICpkaXZfZGF0YTsKPj4gKwo+PiArICAgICAgIC8qY2Fz dCB0byBkcm9wIHRoZSBjb25zdCBpbiBtYXRjaC0+ZGF0YSovCj4gCj4gU3BhY2UgYWZ0ZXIgKiwg YWxzbyB3aHkgZG8gd2UgbmVlZCB0byBjYXN0IGF3YXkgY29uc3Q/IFRoZSB1c2VyIG9mIHRoaXMK PiBwb2ludGVyIHBhc3NlcyBpdCBhbGwgdGhlIHdheSBkb3duIHRvIG1tY19jbGtjX3JlZ2lzdGVy X2NsaygpIHdoaWNoCj4gY291bGQgdGFrZSB0aGUgZGF0YSBhcyBjb25zdCB2b2lkIHBvaW50ZXIg YW5kIGRlY2lkZSB0byBjYXN0IGF3YXkgY29uc3QKPiB0aGVyZS4KCmlmIHVzZSAnY29uc3QnIGhl cmUsIGl0IHdpbGwgcmVwb3J0IGEgd2FybmluZzoKZHJpdmVycy9jbGsvbWVzb24vbW1jLWNsa2Mu YzoyMjQ6NzogZXJyb3I6IGFzc2lnbm1lbnQgZGlzY2FyZHMg4oCYY29uc3TigJkgCnF1YWxpZmll ciBmcm9tIHBvaW50ZXIgdGFyZ2UKdCB0eXBlIFstV2Vycm9yPWRpc2NhcmRlZC1xdWFsaWZpZXJz XSAKCiAgIGRhdGEgPSAoY29uc3Qgc3RydWN0IG1tY19jbGtjX2RhdGEgKilvZl9kZXZpY2VfZ2V0 X21hdGNoX2RhdGEoZGV2KTsKCj4gCj4+ICsgICAgICAgZGF0YSA9IChzdHJ1Y3QgbW1jX2Nsa2Nf ZGF0YSAqKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+PiArICAgICAgIGlmICghZGF0 YSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICsgICAgICAgbWFw ID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi0+b2Zfbm9kZSk7Cj4+ICsgICAgICAgaWYgKElT X0VSUihtYXApKSB7Cj4+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBm aW5kIG1tYyBjbG9jayBjb250cm9sbGVyXG4iKTsKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQ VFJfRVJSKG1hcCk7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgb25lY2VsbF9kYXRhID0g ZGV2bV9remFsbG9jKGRldiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0X3NpemUob25lY2VsbF9kYXRhLCBod3MsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1NQ19NQVhfQ0xLUyksCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+PiArICAgICAgIGlmICghb25lY2Vs bF9kYXRhKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAg ICBjbGsgPSBtbWNfY2xrY19yZWdpc3Rlcl9tdXgoZGV2LCBtYXApOwo+PiArICAgICAgIGlmIChJ U19FUlIoY2xrKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNsayk7Cj4+ICsK Pj4gKyAgICAgICBkaXZfZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGl2X2RhdGEp LCBHRlBfS0VSTkVMKTsKPj4gKyAgICAgICBpZiAoIWRpdl9kYXRhKQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAgICBtZW1jcHkoZGl2X2RhdGEsICZtbWNf Y2xrY19kaXZfZGF0YSwgc2l6ZW9mKCpkaXZfZGF0YSkpOwo+PiArICAgICAgIGNsayA9IG1tY19j bGtjX3JlZ2lzdGVyX2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgImRpdiIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGstPmh3LAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEtfU0VUX1JBVEVf UEFSRU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbWVzb25fc2Nsa19kaXZfb3BzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXZfZGF0YSk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihjbGspKQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoY2xrKTsKPj4gKwo+PiArICAgICAgIG9u ZWNlbGxfZGF0YS0+aHdzW0NMS0lEX01NQ19ESVZdID0gJmNsay0+aHc7Cj4+ICsgICAgICAgY29y ZSA9IG1tY19jbGtjX3JlZ2lzdGVyX2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgImNvcmUiLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsay0+ aHcsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD TEtfU0VUX1JBVEVfUEFSRU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm1lc29uX2Nsa19waGFzZV9vcHMsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW1jX2Nsa2NfY29yZV9waGFzZSk7Cj4+ ICsgICAgICAgaWYgKElTX0VSUihjb3JlKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKGNvcmUpOwo+PiArCj4+ICsgICAgICAgb25lY2VsbF9kYXRhLT5od3NbQ0xLSURfTU1DX1BI QVNFX0NPUkVdID0gJmNvcmUtPmh3Owo+PiArICAgICAgIGNsayA9IG1tY19jbGtjX3JlZ2lzdGVy X2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgInJ4IiwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvcmUtPmh3LCAgMCwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1lc29uX2Nsa19waGFzZV9kZWxh eV9vcHMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZkYXRhLT5yeCk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihjbGspKQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIoY2xrKTsKPj4gKwo+PiArICAgICAgIG9uZWNlbGxfZGF0YS0+aHdz W0NMS0lEX01NQ19QSEFTRV9SWF0gPSAmY2xrLT5odzsKPj4gKyAgICAgICBjbGsgPSBtbWNfY2xr Y19yZWdpc3Rlcl9jbGtfd2l0aF9wYXJlbnQoZGV2LCBtYXAsICJ0eCIsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3JlLT5odywgIDAsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXNvbl9jbGtf cGhhc2VfZGVsYXlfb3BzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZGF0YS0+dHgpOwo+PiArICAgICAgIGlmIChJU19FUlIoY2xrKSkKPj4gKyAg ICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNsayk7Cj4+ICsKPj4gKyAgICAgICBvbmVjZWxs X2RhdGEtPmh3c1tDTEtJRF9NTUNfUEhBU0VfVFhdID0gJmNsay0+aHc7Cj4+ICsgICAgICAgb25l Y2VsbF9kYXRhLT5udW0gPSBNTUNfTUFYX0NMS1M7Cj4+ICsgICAgICAgcmV0dXJuIGRldm1fb2Zf Y2xrX2FkZF9od19wcm92aWRlcihkZXYsIG9mX2Nsa19od19vbmVjZWxsX2dldCwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZWNlbGxfZGF0YSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1tY19jbGtjX2RyaXZlciA9 IHsKPj4gKyAgICAgICAucHJvYmUgICAgICAgICAgPSBtbWNfY2xrY19wcm9iZSwKPj4gKyAgICAg ICAuZHJpdmVyICAgICAgICAgPSB7Cj4+ICsgICAgICAgICAgICAgICAubmFtZSAgID0gIm1lc29u LW1tYy1jbGtjIiwKPj4gKyAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNo X3B0cihtbWNfY2xrY19tYXRjaF90YWJsZSksCj4+ICsgICAgICAgfSwKPj4gK307Cj4+ICsKPj4g K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobW1jX2Nsa2NfZHJpdmVyKTsKPj4gKwo+PiArTU9EVUxF X0RFU0NSSVBUSU9OKCJBbWxvZ2ljIEFYRyBNTUMgY2xvY2sgZHJpdmVyIik7Cj4+ICtNT0RVTEVf QVVUSE9SKCJKaWFueGluIFBhbiA8amlhbnhpbi5wYW5AYW1sb2dpYy5jb20+Iik7Cj4+ICtNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gCj4gLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgtYW1s b2dpY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYW1sb2dpYwo= 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 18638C433F5 for ; Fri, 14 Jan 2022 05:16:34 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=d/Y7rThboATG9NKJ1nfGOoSKUyoHcpzc8jRBtKfoRrA=; b=GWVeR6wZmk/AbF xVdRfl8U1/tKJ/tJzBToX1bItn4TB5Dwp2YEttYSEp51dtg67qFqJ9L91glHTjtOk3EqO26SANEYA mYSelD2WiW+oruN0HxddhAwFtyZK4Ckx8H2RC9MVCApYKuMID+6vQE9+a469Ve8N3cYU7alajAUPp W5rZ/qTqwuKLJObEUyw2LcWnlQftWtvt6/B2rd0qisbVrga1TGV+BH5mdEpr5LJYQdPa8KVfQkzFH Rz5RFsphFDz+zejtc3nWRwZ6Ztr+QJm6APtFjAk0YpQA0Jn+G8/X96Dh6NPgzHLHRfhgVqbK4OOGT 056inKTIkkv+DRnArULA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n8EvQ-007lJ9-4W; Fri, 14 Jan 2022 05:14:56 +0000 Received: from mail-sz.amlogic.com ([211.162.65.117]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n8EvL-007lHz-NZ; Fri, 14 Jan 2022 05:14:53 +0000 Received: from [10.28.39.106] (10.28.39.106) by mail-sz.amlogic.com (10.28.11.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Fri, 14 Jan 2022 13:14:46 +0800 Message-ID: <09ff9044-9abc-d1ad-26c1-5e6ece56d30c@amlogic.com> Date: Fri, 14 Jan 2022 13:14:46 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v9 4/4] clk: meson: add sub MMC clock controller driver Content-Language: en-US To: Stephen Boyd , Jerome Brunet , Kevin Hilman , Michael Turquette , Neil Armstrong , Rob Herring , CC: Martin Blumenstingl , Jianxin Pan , Victor Wan , XianWei Zhao , Kelvin Zhang , BiChao Zheng , YongHui Yu , , , References: <20220113115745.45826-1-liang.yang@amlogic.com> <20220113115745.45826-5-liang.yang@amlogic.com> <20220113213513.9819AC36AEA@smtp.kernel.org> From: Liang Yang In-Reply-To: <20220113213513.9819AC36AEA@smtp.kernel.org> X-Originating-IP: [10.28.39.106] X-ClientProxiedBy: mail-sz.amlogic.com (10.28.11.5) To mail-sz.amlogic.com (10.28.11.5) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220113_211451_811120_4E25B6B6 X-CRM114-Status: GOOD ( 19.96 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU3RlcGhlbiwKCk9uIDIwMjIvMS8xNCA1OjM1LCBTdGVwaGVuIEJveWQgd3JvdGU6Cj4gWyBF WFRFUk5BTCBFTUFJTCBdCj4gCj4gUXVvdGluZyBMaWFuZyBZYW5nICgyMDIyLTAxLTEzIDAzOjU3 OjQ1KQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vS2NvbmZpZyBiL2RyaXZlcnMv Y2xrL21lc29uL0tjb25maWcKPj4gaW5kZXggYmIwZjU5ZWVhMzY2Li4zZGU2ZjNiMjQ0NjEgMTAw NjQ0Cj4+IC0tLSBhL2RyaXZlcnMvY2xrL21lc29uL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9j bGsvbWVzb24vS2NvbmZpZwo+PiBAQCAtMzksNiArMzksMjAgQEAgY29uZmlnIENPTU1PTl9DTEtf TUVTT05fQU9fQ0xLQwo+PiAgICAgICAgICBzZWxlY3QgQ09NTU9OX0NMS19NRVNPTl9SRUdNQVAK Pj4gICAgICAgICAgc2VsZWN0IFJFU0VUX0NPTlRST0xMRVIKPj4gICAKPj4gK2NvbmZpZyBDT01N T05fQ0xLX01NQ19NRVNPTgo+PiArICAgICAgIHRyaXN0YXRlICJNZXNvbiBNTUMgU3ViIENsb2Nr IENvbnRyb2xsZXIgRHJpdmVyIgo+PiArICAgICAgIGRlcGVuZHMgb24gQVJDSF9NRVNPTiB8fCBD T01QSUxFX1RFU1QKPj4gKyAgICAgICBzZWxlY3QgTUZEX1NZU0NPTgo+PiArICAgICAgIHNlbGVj dCBDT01NT05fQ0xLX0FNTE9HSUMKPj4gKyAgICAgICBzZWxlY3QgQ09NTU9OX0NMS19NRVNPTl9Q SEFTRQo+PiArICAgICAgIHNlbGVjdCBDT01NT05fQ0xLX01FU09OX1BIQVNFX0RFTEFZCj4+ICsg ICAgICAgc2VsZWN0IENPTU1PTl9DTEtfTUVTT05fU0NMS19ESVYKPj4gKyAgICAgICBoZWxwCj4+ ICsgICAgICAgICBTdXBwb3J0IGZvciB0aGUgTU1DIHN1YiBjbG9jayBjb250cm9sbGVyIG9uCj4+ ICsgICAgICAgICBBbWxvZ2ljIE1lc29uIFBsYXRmb3JtLCB3aGljaCBpbmNsdWRlcyBTOTA1IChH WEJCLCBHWEwpLAo+PiArICAgICAgICAgQTExM0QvWCAoQVhHKSBkZXZpY2VzIC4gU2F5IFkgaWYg eW91IHdhbnQgdGhpcwo+IAo+IHMvZGV2aWNlcyAvZGV2aWNlcy8Kb2ssIGkgd2lsbCBmaXggaXQK PiAKPj4gKyAgICAgICAgIGNsb2NrIGVuYWJsZWQuCj4+ICsKPj4gICBjb25maWcgQ09NTU9OX0NM S19NRVNPTl9FRV9DTEtDCj4+ICAgICAgICAgIHRyaXN0YXRlCj4+ICAgICAgICAgIHNlbGVjdCBD T01NT05fQ0xLX01FU09OX1JFR01BUAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24v bW1jLWNsa2MuYyBiL2RyaXZlcnMvY2xrL21lc29uL21tYy1jbGtjLmMKPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNTM5NzdmNjEzOTAKPj4gLS0tIC9kZXYv bnVsbAo+PiArKysgYi9kcml2ZXJzL2Nsay9tZXNvbi9tbWMtY2xrYy5jCj4+IEBAIC0wLDAgKzEs MzAwIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkK Pj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv bWZkL3N5c2Nvbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL2FtbG9naWMsbW1jLWNsa2MuaD4KPj4gKwo+PiAr I2luY2x1ZGUgInNjbGstZGl2LmgiCj4+ICsjaW5jbHVkZSAiY2xrLXBoYXNlLWRlbGF5LmgiCj4+ ICsjaW5jbHVkZSAiY2xrLXJlZ21hcC5oIgo+PiArI2luY2x1ZGUgImNsay1waGFzZS5oIgo+PiAr Cj4+ICsvKiBjbG9jayBJRCB1c2VkIGJ5IGludGVybmFsIGRyaXZlciAqLwo+PiArCj4+ICsjZGVm aW5lIFNEX0VNTUNfQ0xPQ0sgICAgICAgICAgMAo+PiArI2RlZmluZSBDTEtfREVMQVlfU1RFUF9Q U19HWCAgIDIwMAo+PiArI2RlZmluZSBDTEtfREVMQVlfU1RFUF9QU19BWEcgIDc4Cj4+ICsjZGVm aW5lIE1VWF9DTEtfTlVNX1BBUkVOVFMgICAgMgo+PiArI2RlZmluZSBNTUNfTUFYX0NMS1MgICAg ICAgICAgIDQKPj4gKwo+PiArc3RydWN0IG1tY19jbGtjX2RhdGEgewo+PiArICAgICAgIHN0cnVj dCBtZXNvbl9jbGtfcGhhc2VfZGVsYXlfZGF0YSB0eDsKPj4gKyAgICAgICBzdHJ1Y3QgbWVzb25f Y2xrX3BoYXNlX2RlbGF5X2RhdGEgcng7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXBfbXV4X2RhdGEgbW1jX2Nsa2NfbXV4X2RhdGEgPSB7Cj4+ICsgICAgICAgLm9mZnNl dCA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgLm1hc2sgICA9IDB4MywKPj4gKyAgICAgICAu c2hpZnQgID0gNiwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fc2Ns a19kaXZfZGF0YSBtbWNfY2xrY19kaXZfZGF0YSA9IHsKPj4gKyAgICAgICAuZGl2ID0gewo+PiAr ICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAgICAgICAg ICAgLndpZHRoICAgPSA2LAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLmZsYWdzID0gTUVTT05f U0NMS19PTkVfQkFTRUQsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IG1lc29uX2Nsa19w aGFzZV9kYXRhIG1tY19jbGtjX2NvcmVfcGhhc2UgPSB7Cj4+ICsgICAgICAgLnBoID0gewo+PiAr ICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAgICAgICAg ICAgLnNoaWZ0ICAgPSA4LAo+PiArICAgICAgICAgICAgICAgLndpZHRoICAgPSAyLAo+PiArICAg ICAgIH0KPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2Nsa2NfZGF0YSBt bWNfY2xrY19neF9kYXRhID0gewo+PiArICAgICAgIC50eCA9IHsKPj4gKyAgICAgICAgICAgICAg IC5waGFzZSA9IHsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1D X0NMT0NLLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAuc2hpZnQgICA9IDEwLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAud2lkdGggICA9IDIsCj4+ICsgICAgICAgICAgICAgICB9LAo+ PiArICAgICAgICAgICAgICAgLmRlbGF5ID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAu cmVnX29mZiA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlm dCAgID0gMTYsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gNCwKPj4gKyAg ICAgICAgICAgICAgIH0sCj4+ICsgICAgICAgICAgICAgICAuZGVsYXlfc3RlcF9wcyA9IENMS19E RUxBWV9TVEVQX1BTX0dYLAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLnJ4ID0gewo+PiArICAg ICAgICAgICAgICAgLnBoYXNlID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29m ZiA9IFNEX0VNTUNfQ0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0g MTIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gMiwKPj4gKyAgICAgICAg ICAgICAgIH0sCj4+ICsgICAgICAgICAgICAgICAuZGVsYXkgPSB7Cj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIC5yZWdfb2ZmID0gU0RfRU1NQ19DTE9DSywKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgLnNoaWZ0ICAgPSAyMCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLndpZHRoICAg PSA0LAo+PiArICAgICAgICAgICAgICAgfSwKPj4gKyAgICAgICAgICAgICAgIC5kZWxheV9zdGVw X3BzICAgPSBDTEtfREVMQVlfU1RFUF9QU19HWCwKPj4gKyAgICAgICB9LAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfY2xrY19kYXRhIG1tY19jbGtjX2F4Z19kYXRhID0g ewo+PiArICAgICAgIC50eCA9IHsKPj4gKyAgICAgICAgICAgICAgIC5waGFzZSA9IHsKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgLnJlZ19vZmYgPSBTRF9FTU1DX0NMT0NLLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAuc2hpZnQgICA9IDEwLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAud2lkdGggICA9IDIsCj4+ICsgICAgICAgICAgICAgICB9LAo+PiArICAgICAgICAgICAgICAg LmRlbGF5ID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29mZiA9IFNEX0VNTUNf Q0xPQ0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0gMTYsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIC53aWR0aCAgID0gNiwKPj4gKyAgICAgICAgICAgICAgIH0sCj4+ ICsgICAgICAgICAgICAgICAuZGVsYXlfc3RlcF9wcyAgID0gQ0xLX0RFTEFZX1NURVBfUFNfQVhH LAo+PiArICAgICAgIH0sCj4+ICsgICAgICAgLnJ4ID0gewo+PiArICAgICAgICAgICAgICAgLnBo YXNlID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAucmVnX29mZiA9IFNEX0VNTUNfQ0xP Q0ssCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5zaGlmdCAgID0gMTIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIC53aWR0aCAgID0gMiwKPj4gKyAgICAgICAgICAgICAgIH0sCj4+ICsg ICAgICAgICAgICAgICAuZGVsYXkgPSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIC5yZWdf b2ZmID0gU0RfRU1NQ19DTE9DSywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLnNoaWZ0ICAg PSAyMiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgLndpZHRoICAgPSA2LAo+PiArICAgICAg ICAgICAgICAgfSwKPj4gKyAgICAgICAgICAgICAgIC5kZWxheV9zdGVwX3BzICAgPSBDTEtfREVM QVlfU1RFUF9QU19BWEcsCj4+ICsgICAgICAgfSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1tY19jbGtjX21hdGNoX3RhYmxlW10gPSB7Cj4+ICsgICAg ICAgewo+PiArICAgICAgICAgICAgICAgLmNvbXBhdGlibGUgICAgID0gImFtbG9naWMsZ3gtbW1j LWNsa2MiLAo+PiArICAgICAgICAgICAgICAgLmRhdGEgICAgICAgICAgID0gJm1tY19jbGtjX2d4 X2RhdGEKPj4gKyAgICAgICB9LAo+PiArICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgIC5jb21w YXRpYmxlICAgICA9ICJhbWxvZ2ljLGF4Zy1tbWMtY2xrYyIsCj4+ICsgICAgICAgICAgICAgICAu ZGF0YSAgICAgICAgICAgPSAmbW1jX2Nsa2NfYXhnX2RhdGEKPj4gKyAgICAgICB9LAo+PiArICAg ICAgIHt9Cj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW1jX2Nsa2NfbWF0Y2hf dGFibGUpOwo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgKgo+PiArbW1jX2Nsa2Nf cmVnaXN0ZXJfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqbWFwLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNsa19pbml0X2RhdGEgKmluaXQsCj4+ICsgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWZmaXgsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ ICsgICAgICAgc3RydWN0IGNsa19yZWdtYXAgKmNsazsKPj4gKyAgICAgICBjaGFyICpuYW1lOwo+ PiArICAgICAgIGludCByZXQ7Cj4+ICsKPj4gKyAgICAgICBjbGsgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmNsayksIEdGUF9LRVJORUwpOwo+PiArICAgICAgIGlmICghY2xrKQo+PiArICAg ICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ICsKPj4gKyAgICAgICBuYW1l ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyMlcyIsIGRldl9uYW1lKGRldiksIHN1ZmZpeCk7 Cj4+ICsgICAgICAgaWYgKCFuYW1lKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4+ICsKPj4gKyAgICAgICBpbml0LT5uYW1lID0gbmFtZTsKPj4gKyAgICAgICBj bGstPm1hcCA9IG1hcDsKPj4gKyAgICAgICBjbGstPmRhdGEgPSBkYXRhOwo+PiArICAgICAgIGNs ay0+aHcuaW5pdCA9IGluaXQ7Cj4+ICsgICAgICAgcmV0ID0gZGV2bV9jbGtfaHdfcmVnaXN0ZXIo ZGV2LCAmY2xrLT5odyk7Cj4+ICsgICAgICAgaWYgKHJldCkKPj4gKyAgICAgICAgICAgICAgIGNs ayA9IEVSUl9QVFIocmV0KTsKPj4gKwo+PiArICAgICAgIGtmcmVlKG5hbWUpOwo+PiArICAgICAg IHJldHVybiBjbGs7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCAqbW1j X2Nsa2NfcmVnaXN0ZXJfbXV4KHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlZ21hcCAqbWFwKQo+PiAr ewo+PiArICAgICAgIGNvbnN0IGNoYXIgKnBhcmVudF9uYW1lc1tNVVhfQ0xLX05VTV9QQVJFTlRT XTsKPj4gKyAgICAgICBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owo+PiArICAgICAgIHN0cnVj dCBjbGtfcmVnbWFwICptdXg7Cj4+ICsgICAgICAgc3RydWN0IGNsayAqY2xrOwo+PiArICAgICAg IGludCBpOwo+PiArCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1VWF9DTEtfTlVNX1BBUkVO VFM7IGkrKykgewo+PiArICAgICAgICAgICAgICAgY2hhciBuYW1lWzhdOwo+PiArCj4+ICsgICAg ICAgICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJjbGtpbiVkIiwgaSk7Cj4+ ICsgICAgICAgICAgICAgICBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBuYW1lKTsKPj4gKyAgICAg ICAgICAgICAgIGlmIChJU19FUlIoY2xrKSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBp ZiAoY2xrICE9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUikpCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGV2X2VycihkZXYsICJNaXNzaW5nIGNsb2NrICVzXG4iLCBuYW1lKTsKPiAK PiBVc2UgZGV2X2Vycl9wcm9iZSgpPwpvawo+IAo+PiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gRVJSX0NBU1QoY2xrKTsKPj4gKyAgICAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAg ICAgICAgICAgcGFyZW50X25hbWVzW2ldID0gX19jbGtfZ2V0X25hbWUoY2xrKTsKPiAKPiBXaHkg Y2FuJ3Qgd2UgdXNlIGNsa19wYXJlbnRfZGF0YT8KCm9rLCBpIHdpbGwgdHJ5IGNsa19wYXJlbnRf ZGF0YS4KCj4gCj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgaW5pdC5vcHMgPSAmY2xrX3Jl Z21hcF9tdXhfb3BzOwo+PiArICAgICAgIGluaXQuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U Owo+PiArICAgICAgIGluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWVzOwo+PiArICAgICAg IGluaXQubnVtX3BhcmVudHMgPSBNVVhfQ0xLX05VTV9QQVJFTlRTOwo+PiArCj4+ICsgICAgICAg bXV4ID0gbW1jX2Nsa2NfcmVnaXN0ZXJfY2xrKGRldiwgbWFwLCAmaW5pdCwgIm11eCIsICZtbWNf Y2xrY19tdXhfZGF0YSk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihtdXgpKQo+PiArICAgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJNdXggY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Cj4+ ICsKPj4gKyAgICAgICByZXR1cm4gbXV4Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGNs a19yZWdtYXAgKgo+PiArbW1jX2Nsa2NfcmVnaXN0ZXJfY2xrX3dpdGhfcGFyZW50KHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqbWFwLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqc3VmZml4LCBjb25zdCBzdHJ1Y3QgY2xrX2h3ICpodywKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgY2xrX29wcyAqb3Bz LCB2b2lkICpkYXRhKQo+PiArewo+PiArICAgICAgIHN0cnVjdCBjbGtfaW5pdF9kYXRhIGluaXQ7 Cj4+ICsgICAgICAgc3RydWN0IGNsa19yZWdtYXAgKmNsazsKPj4gKyAgICAgICBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSA9IGNsa19od19nZXRfbmFtZShodyk7Cj4+ICsKPj4gKyAgICAgICBpbml0 Lm9wcyA9IG9wczsKPj4gKyAgICAgICBpbml0LmZsYWdzID0gZmxhZ3M7Cj4+ICsgICAgICAgaW5p dC5wYXJlbnRfbmFtZXMgPSAmcGFyZW50X25hbWU7Cj4+ICsgICAgICAgaW5pdC5udW1fcGFyZW50 cyA9IDE7Cj4+ICsKPj4gKyAgICAgICBjbGsgPSBtbWNfY2xrY19yZWdpc3Rlcl9jbGsoZGV2LCBt YXAsICZpbml0LCBzdWZmaXgsIGRhdGEpOwo+PiArICAgICAgIGlmIChJU19FUlIoY2xrKSkKPj4g KyAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiJXMgY2xvY2sgcmVnaXN0cmF0aW9uIGZhaWxl ZFxuIiwgc3VmZml4KTsKPj4gKwo+PiArICAgICAgIHJldHVybiBjbGs7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgbW1jX2Nsa2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK Pj4gK3sKPj4gKyAgICAgICBzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqb25lY2VsbF9kYXRh Owo+PiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICsgICAgICAg c3RydWN0IG1tY19jbGtjX2RhdGEgKmRhdGE7Cj4+ICsgICAgICAgc3RydWN0IHJlZ21hcCAqbWFw Owo+PiArICAgICAgIHN0cnVjdCBjbGtfcmVnbWFwICpjbGssICpjb3JlOwo+PiArICAgICAgIHN0 cnVjdCBtZXNvbl9zY2xrX2Rpdl9kYXRhICpkaXZfZGF0YTsKPj4gKwo+PiArICAgICAgIC8qY2Fz dCB0byBkcm9wIHRoZSBjb25zdCBpbiBtYXRjaC0+ZGF0YSovCj4gCj4gU3BhY2UgYWZ0ZXIgKiwg YWxzbyB3aHkgZG8gd2UgbmVlZCB0byBjYXN0IGF3YXkgY29uc3Q/IFRoZSB1c2VyIG9mIHRoaXMK PiBwb2ludGVyIHBhc3NlcyBpdCBhbGwgdGhlIHdheSBkb3duIHRvIG1tY19jbGtjX3JlZ2lzdGVy X2NsaygpIHdoaWNoCj4gY291bGQgdGFrZSB0aGUgZGF0YSBhcyBjb25zdCB2b2lkIHBvaW50ZXIg YW5kIGRlY2lkZSB0byBjYXN0IGF3YXkgY29uc3QKPiB0aGVyZS4KCmlmIHVzZSAnY29uc3QnIGhl cmUsIGl0IHdpbGwgcmVwb3J0IGEgd2FybmluZzoKZHJpdmVycy9jbGsvbWVzb24vbW1jLWNsa2Mu YzoyMjQ6NzogZXJyb3I6IGFzc2lnbm1lbnQgZGlzY2FyZHMg4oCYY29uc3TigJkgCnF1YWxpZmll ciBmcm9tIHBvaW50ZXIgdGFyZ2UKdCB0eXBlIFstV2Vycm9yPWRpc2NhcmRlZC1xdWFsaWZpZXJz XSAKCiAgIGRhdGEgPSAoY29uc3Qgc3RydWN0IG1tY19jbGtjX2RhdGEgKilvZl9kZXZpY2VfZ2V0 X21hdGNoX2RhdGEoZGV2KTsKCj4gCj4+ICsgICAgICAgZGF0YSA9IChzdHJ1Y3QgbW1jX2Nsa2Nf ZGF0YSAqKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+PiArICAgICAgIGlmICghZGF0 YSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICsgICAgICAgbWFw ID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi0+b2Zfbm9kZSk7Cj4+ICsgICAgICAgaWYgKElT X0VSUihtYXApKSB7Cj4+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBm aW5kIG1tYyBjbG9jayBjb250cm9sbGVyXG4iKTsKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQ VFJfRVJSKG1hcCk7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgb25lY2VsbF9kYXRhID0g ZGV2bV9remFsbG9jKGRldiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0X3NpemUob25lY2VsbF9kYXRhLCBod3MsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1NQ19NQVhfQ0xLUyksCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+PiArICAgICAgIGlmICghb25lY2Vs bF9kYXRhKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAg ICBjbGsgPSBtbWNfY2xrY19yZWdpc3Rlcl9tdXgoZGV2LCBtYXApOwo+PiArICAgICAgIGlmIChJ U19FUlIoY2xrKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNsayk7Cj4+ICsK Pj4gKyAgICAgICBkaXZfZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGl2X2RhdGEp LCBHRlBfS0VSTkVMKTsKPj4gKyAgICAgICBpZiAoIWRpdl9kYXRhKQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKyAgICAgICBtZW1jcHkoZGl2X2RhdGEsICZtbWNf Y2xrY19kaXZfZGF0YSwgc2l6ZW9mKCpkaXZfZGF0YSkpOwo+PiArICAgICAgIGNsayA9IG1tY19j bGtjX3JlZ2lzdGVyX2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgImRpdiIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGstPmh3LAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEtfU0VUX1JBVEVf UEFSRU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbWVzb25fc2Nsa19kaXZfb3BzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXZfZGF0YSk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihjbGspKQo+ PiArICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoY2xrKTsKPj4gKwo+PiArICAgICAgIG9u ZWNlbGxfZGF0YS0+aHdzW0NMS0lEX01NQ19ESVZdID0gJmNsay0+aHc7Cj4+ICsgICAgICAgY29y ZSA9IG1tY19jbGtjX3JlZ2lzdGVyX2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgImNvcmUiLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsay0+ aHcsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD TEtfU0VUX1JBVEVfUEFSRU5ULAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm1lc29uX2Nsa19waGFzZV9vcHMsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW1jX2Nsa2NfY29yZV9waGFzZSk7Cj4+ ICsgICAgICAgaWYgKElTX0VSUihjb3JlKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKGNvcmUpOwo+PiArCj4+ICsgICAgICAgb25lY2VsbF9kYXRhLT5od3NbQ0xLSURfTU1DX1BI QVNFX0NPUkVdID0gJmNvcmUtPmh3Owo+PiArICAgICAgIGNsayA9IG1tY19jbGtjX3JlZ2lzdGVy X2Nsa193aXRoX3BhcmVudChkZXYsIG1hcCwgInJ4IiwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvcmUtPmh3LCAgMCwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1lc29uX2Nsa19waGFzZV9kZWxh eV9vcHMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZkYXRhLT5yeCk7Cj4+ICsgICAgICAgaWYgKElTX0VSUihjbGspKQo+PiArICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIoY2xrKTsKPj4gKwo+PiArICAgICAgIG9uZWNlbGxfZGF0YS0+aHdz W0NMS0lEX01NQ19QSEFTRV9SWF0gPSAmY2xrLT5odzsKPj4gKyAgICAgICBjbGsgPSBtbWNfY2xr Y19yZWdpc3Rlcl9jbGtfd2l0aF9wYXJlbnQoZGV2LCBtYXAsICJ0eCIsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3JlLT5odywgIDAsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXNvbl9jbGtf cGhhc2VfZGVsYXlfb3BzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZGF0YS0+dHgpOwo+PiArICAgICAgIGlmIChJU19FUlIoY2xrKSkKPj4gKyAg ICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNsayk7Cj4+ICsKPj4gKyAgICAgICBvbmVjZWxs X2RhdGEtPmh3c1tDTEtJRF9NTUNfUEhBU0VfVFhdID0gJmNsay0+aHc7Cj4+ICsgICAgICAgb25l Y2VsbF9kYXRhLT5udW0gPSBNTUNfTUFYX0NMS1M7Cj4+ICsgICAgICAgcmV0dXJuIGRldm1fb2Zf Y2xrX2FkZF9od19wcm92aWRlcihkZXYsIG9mX2Nsa19od19vbmVjZWxsX2dldCwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZWNlbGxfZGF0YSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1tY19jbGtjX2RyaXZlciA9 IHsKPj4gKyAgICAgICAucHJvYmUgICAgICAgICAgPSBtbWNfY2xrY19wcm9iZSwKPj4gKyAgICAg ICAuZHJpdmVyICAgICAgICAgPSB7Cj4+ICsgICAgICAgICAgICAgICAubmFtZSAgID0gIm1lc29u LW1tYy1jbGtjIiwKPj4gKyAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNo X3B0cihtbWNfY2xrY19tYXRjaF90YWJsZSksCj4+ICsgICAgICAgfSwKPj4gK307Cj4+ICsKPj4g K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobW1jX2Nsa2NfZHJpdmVyKTsKPj4gKwo+PiArTU9EVUxF X0RFU0NSSVBUSU9OKCJBbWxvZ2ljIEFYRyBNTUMgY2xvY2sgZHJpdmVyIik7Cj4+ICtNT0RVTEVf QVVUSE9SKCJKaWFueGluIFBhbiA8amlhbnhpbi5wYW5AYW1sb2dpYy5jb20+Iik7Cj4+ICtNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gCj4gLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=