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 X-Spam-Level: X-Spam-Status: No, score=-14.0 required=3.0 tests=BAYES_00,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44AEDC433DB for ; Wed, 20 Jan 2021 23:45:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A8A5223DB for ; Wed, 20 Jan 2021 23:45:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731188AbhATXoA convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 18:44:00 -0500 Received: from mail-ej1-f48.google.com ([209.85.218.48]:36281 "EHLO mail-ej1-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726486AbhATVZ6 (ORCPT ); Wed, 20 Jan 2021 16:25:58 -0500 Received: by mail-ej1-f48.google.com with SMTP id l9so29848874ejx.3; Wed, 20 Jan 2021 13:25:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=6Ssw+zjtZMLxcvdLjzPmT7CToAEOi56wCkeJfmxJW4I=; b=reK9Vs6ZJveOsiZ+AYNR45xB7RSF9kpcCT1K3LgONl/DPj8AK22Ycd2gpEnBuHuvmH 7zXxYd8gepl38ROw72fWfe9LpqUpwDsVfU5GbRZ5OtlyigQOY0ChpeTkWAtjH6r5SbLA 9yjbRJNYRDcZZ/xHoPgdMVuFPFJbqSpFyOE+6pF5I8zhY3lctxlj/Scq3e9MS/rjdmFX lkgdm5FHCK7jaej9Lqp8Y99SrtDKVAxvck4G4CZgI4OAuaIXUYcy0kXmj3vIGYc8Pz3W lwnuQljDj5bGhH8xphqwLZ/rBgHkEKWw/aHc7WVWhF36TsMfFWYD6wvUsviNXWoWjKxo 23Aw== X-Gm-Message-State: AOAM533UNnO17eAWyIOgTNh/c3ymkgiGGr6+kO6xUdRCuWxbwBeyITtg LIaDpLOHJxUKm5PWS0JSpGqnPe0Zj+2pPes/Klg= X-Google-Smtp-Source: ABdhPJwA8jaJH1cue93hQcI8gC8bjDq5+XuGYA9A+xpAXXoZxgH1Db2zivwKW9byseEEx4hNwqVGZrpyrZvQD05sPkM= X-Received: by 2002:a17:906:32d6:: with SMTP id k22mr7314707ejk.457.1611177914999; Wed, 20 Jan 2021 13:25:14 -0800 (PST) MIME-Version: 1.0 References: <20210120142801.334550-1-arnd@kernel.org> <20210120142801.334550-3-arnd@kernel.org> In-Reply-To: <20210120142801.334550-3-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:25:03 +1300 Message-ID: Subject: Re: [PATCH 2/2] mmc: remove sirf prima/atlas driver To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, LKML , linux-mmc@vger.kernel.org, Ulf Hansson , Arnd Bergmann Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arnd Bergmann 于2021年1月21日周四 上午3:28写道: > > From: Arnd Bergmann > > The CSR SiRF prima2/atlas platforms are getting removed, so this driver > is no longer needed. > > Cc: Barry Song > Signed-off-by: Arnd Bergmann Acked-by: Barry Song > --- > .../devicetree/bindings/mmc/sdhci-sirf.txt | 18 -- > drivers/mmc/host/Kconfig | 12 - > drivers/mmc/host/Makefile | 1 - > drivers/mmc/host/sdhci-sirf.c | 235 ------------------ > 4 files changed, 266 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/mmc/sdhci-sirf.txt > delete mode 100644 drivers/mmc/host/sdhci-sirf.c > > diff --git a/Documentation/devicetree/bindings/mmc/sdhci-sirf.txt b/Documentation/devicetree/bindings/mmc/sdhci-sirf.txt > deleted file mode 100644 > index dd6ed464bcb8..000000000000 > --- a/Documentation/devicetree/bindings/mmc/sdhci-sirf.txt > +++ /dev/null > @@ -1,18 +0,0 @@ > -* SiRFprimII/marco/atlas6 SDHCI Controller > - > -This file documents differences between the core properties in mmc.txt > -and the properties used by the sdhci-sirf driver. > - > -Required properties: > -- compatible: sirf,prima2-sdhc > - > -Optional properties: > -- cd-gpios: card detect gpio, with zero flags. > - > -Example: > - > - sd0: sdhci@56000000 { > - compatible = "sirf,prima2-sdhc"; > - reg = <0xcd000000 0x100000>; > - cd-gpios = <&gpio 6 0>; > - }; > diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig > index 255d37e8bd3a..b67f6028b6f3 100644 > --- a/drivers/mmc/host/Kconfig > +++ b/drivers/mmc/host/Kconfig > @@ -312,18 +312,6 @@ config MMC_SDHCI_S3C > > If unsure, say N. > > -config MMC_SDHCI_SIRF > - tristate "SDHCI support on CSR SiRFprimaII and SiRFmarco SoCs" > - depends on ARCH_SIRF || COMPILE_TEST > - depends on MMC_SDHCI_PLTFM > - select MMC_SDHCI_IO_ACCESSORS > - help > - This selects the SDHCI support for SiRF System-on-Chip devices. > - > - If you have a controller with this interface, say Y or M here. > - > - If unsure, say N. > - > config MMC_SDHCI_PXAV3 > tristate "Marvell MMP2 SD Host Controller support (PXAV3)" > depends on CLKDEV_LOOKUP > diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile > index 43136d382d5f..d2ec428cc808 100644 > --- a/drivers/mmc/host/Makefile > +++ b/drivers/mmc/host/Makefile > @@ -19,7 +19,6 @@ obj-$(CONFIG_MMC_SDHCI_ACPI) += sdhci-acpi.o > obj-$(CONFIG_MMC_SDHCI_PXAV3) += sdhci-pxav3.o > obj-$(CONFIG_MMC_SDHCI_PXAV2) += sdhci-pxav2.o > obj-$(CONFIG_MMC_SDHCI_S3C) += sdhci-s3c.o > -obj-$(CONFIG_MMC_SDHCI_SIRF) += sdhci-sirf.o > obj-$(CONFIG_MMC_SDHCI_F_SDH30) += sdhci_f_sdh30.o > obj-$(CONFIG_MMC_SDHCI_MILBEAUT) += sdhci-milbeaut.o > obj-$(CONFIG_MMC_SDHCI_SPEAR) += sdhci-spear.o > diff --git a/drivers/mmc/host/sdhci-sirf.c b/drivers/mmc/host/sdhci-sirf.c > deleted file mode 100644 > index e9b347b3af7e..000000000000 > --- a/drivers/mmc/host/sdhci-sirf.c > +++ /dev/null > @@ -1,235 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-or-later > -/* > - * SDHCI support for SiRF primaII and marco SoCs > - * > - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. > - */ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include "sdhci-pltfm.h" > - > -#define SDHCI_CLK_DELAY_SETTING 0x4C > -#define SDHCI_SIRF_8BITBUS BIT(3) > -#define SIRF_TUNING_COUNT 16384 > - > -static void sdhci_sirf_set_bus_width(struct sdhci_host *host, int width) > -{ > - u8 ctrl; > - > - ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); > - ctrl &= ~(SDHCI_CTRL_4BITBUS | SDHCI_SIRF_8BITBUS); > - > - /* > - * CSR atlas7 and prima2 SD host version is not 3.0 > - * 8bit-width enable bit of CSR SD hosts is 3, > - * while stardard hosts use bit 5 > - */ > - if (width == MMC_BUS_WIDTH_8) > - ctrl |= SDHCI_SIRF_8BITBUS; > - else if (width == MMC_BUS_WIDTH_4) > - ctrl |= SDHCI_CTRL_4BITBUS; > - > - sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); > -} > - > -static u32 sdhci_sirf_readl_le(struct sdhci_host *host, int reg) > -{ > - u32 val = readl(host->ioaddr + reg); > - > - if (unlikely((reg == SDHCI_CAPABILITIES_1) && > - (host->mmc->caps & MMC_CAP_UHS_SDR50))) { > - /* fake CAP_1 register */ > - val = SDHCI_SUPPORT_DDR50 | > - SDHCI_SUPPORT_SDR50 | SDHCI_USE_SDR50_TUNING; > - } > - > - if (unlikely(reg == SDHCI_SLOT_INT_STATUS)) { > - u32 prss = val; > - /* fake chips as V3.0 host conreoller */ > - prss &= ~(0xFF << 16); > - val = prss | (SDHCI_SPEC_300 << 16); > - } > - return val; > -} > - > -static u16 sdhci_sirf_readw_le(struct sdhci_host *host, int reg) > -{ > - u16 ret = 0; > - > - ret = readw(host->ioaddr + reg); > - > - if (unlikely(reg == SDHCI_HOST_VERSION)) { > - ret = readw(host->ioaddr + SDHCI_HOST_VERSION); > - ret |= SDHCI_SPEC_300; > - } > - > - return ret; > -} > - > -static int sdhci_sirf_execute_tuning(struct sdhci_host *host, u32 opcode) > -{ > - int tuning_seq_cnt = 3; > - int phase; > - u8 tuned_phase_cnt = 0; > - int rc = 0, longest_range = 0; > - int start = -1, end = 0, tuning_value = -1, range = 0; > - u16 clock_setting; > - struct mmc_host *mmc = host->mmc; > - > - clock_setting = sdhci_readw(host, SDHCI_CLK_DELAY_SETTING); > - clock_setting &= ~0x3fff; > - > -retry: > - phase = 0; > - tuned_phase_cnt = 0; > - do { > - sdhci_writel(host, > - clock_setting | phase, > - SDHCI_CLK_DELAY_SETTING); > - > - if (!mmc_send_tuning(mmc, opcode, NULL)) { > - /* Tuning is successful at this tuning point */ > - tuned_phase_cnt++; > - dev_dbg(mmc_dev(mmc), "%s: Found good phase = %d\n", > - mmc_hostname(mmc), phase); > - if (start == -1) > - start = phase; > - end = phase; > - range++; > - if (phase == (SIRF_TUNING_COUNT - 1) > - && range > longest_range) > - tuning_value = (start + end) / 2; > - } else { > - dev_dbg(mmc_dev(mmc), "%s: Found bad phase = %d\n", > - mmc_hostname(mmc), phase); > - if (range > longest_range) { > - tuning_value = (start + end) / 2; > - longest_range = range; > - } > - start = -1; > - end = range = 0; > - } > - } while (++phase < SIRF_TUNING_COUNT); > - > - if (tuned_phase_cnt && tuning_value > 0) { > - /* > - * Finally set the selected phase in delay > - * line hw block. > - */ > - phase = tuning_value; > - sdhci_writel(host, > - clock_setting | phase, > - SDHCI_CLK_DELAY_SETTING); > - > - dev_dbg(mmc_dev(mmc), "%s: Setting the tuning phase to %d\n", > - mmc_hostname(mmc), phase); > - } else { > - if (--tuning_seq_cnt) > - goto retry; > - /* Tuning failed */ > - dev_dbg(mmc_dev(mmc), "%s: No tuning point found\n", > - mmc_hostname(mmc)); > - rc = -EIO; > - } > - > - return rc; > -} > - > -static const struct sdhci_ops sdhci_sirf_ops = { > - .read_l = sdhci_sirf_readl_le, > - .read_w = sdhci_sirf_readw_le, > - .platform_execute_tuning = sdhci_sirf_execute_tuning, > - .set_clock = sdhci_set_clock, > - .get_max_clock = sdhci_pltfm_clk_get_max_clock, > - .set_bus_width = sdhci_sirf_set_bus_width, > - .reset = sdhci_reset, > - .set_uhs_signaling = sdhci_set_uhs_signaling, > -}; > - > -static const struct sdhci_pltfm_data sdhci_sirf_pdata = { > - .ops = &sdhci_sirf_ops, > - .quirks = SDHCI_QUIRK_BROKEN_TIMEOUT_VAL | > - SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | > - SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | > - SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS, > - .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN, > -}; > - > -static int sdhci_sirf_probe(struct platform_device *pdev) > -{ > - struct sdhci_host *host; > - struct sdhci_pltfm_host *pltfm_host; > - struct clk *clk; > - int ret; > - > - clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(clk)) { > - dev_err(&pdev->dev, "unable to get clock"); > - return PTR_ERR(clk); > - } > - > - host = sdhci_pltfm_init(pdev, &sdhci_sirf_pdata, 0); > - if (IS_ERR(host)) > - return PTR_ERR(host); > - > - pltfm_host = sdhci_priv(host); > - pltfm_host->clk = clk; > - > - sdhci_get_of_property(pdev); > - > - ret = clk_prepare_enable(pltfm_host->clk); > - if (ret) > - goto err_clk_prepare; > - > - ret = sdhci_add_host(host); > - if (ret) > - goto err_sdhci_add; > - > - /* > - * We must request the IRQ after sdhci_add_host(), as the tasklet only > - * gets setup in sdhci_add_host() and we oops. > - */ > - ret = mmc_gpiod_request_cd(host->mmc, "cd", 0, false, 0); > - if (ret == -EPROBE_DEFER) > - goto err_request_cd; > - if (!ret) > - mmc_gpiod_request_cd_irq(host->mmc); > - > - return 0; > - > -err_request_cd: > - sdhci_remove_host(host, 0); > -err_sdhci_add: > - clk_disable_unprepare(pltfm_host->clk); > -err_clk_prepare: > - sdhci_pltfm_free(pdev); > - return ret; > -} > - > -static const struct of_device_id sdhci_sirf_of_match[] = { > - { .compatible = "sirf,prima2-sdhc" }, > - { } > -}; > -MODULE_DEVICE_TABLE(of, sdhci_sirf_of_match); > - > -static struct platform_driver sdhci_sirf_driver = { > - .driver = { > - .name = "sdhci-sirf", > - .probe_type = PROBE_PREFER_ASYNCHRONOUS, > - .of_match_table = sdhci_sirf_of_match, > - .pm = &sdhci_pltfm_pmops, > - }, > - .probe = sdhci_sirf_probe, > - .remove = sdhci_pltfm_unregister, > -}; > - > -module_platform_driver(sdhci_sirf_driver); > - > -MODULE_DESCRIPTION("SDHCI driver for SiRFprimaII/SiRFmarco"); > -MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); > -MODULE_LICENSE("GPL v2"); > -- > 2.29.2 > 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 X-Spam-Level: X-Spam-Status: No, score=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6B33FC433E0 for ; Wed, 20 Jan 2021 21:27:26 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E883123602 for ; Wed, 20 Jan 2021 21:27:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E883123602 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id: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=F5aV+QSevOQruaDOC6VQmSgCHJi8MBwc4zr2zNd42q4=; b=2XTKJZaF+lu9/hWNIYfpvzFjo 1DB3t8S4bHlupbcJOaZmAN6FFxdVDc42eH3CSjRJIKOfQddjO5Lkjy93dBczbxV5XRTAczzfxm3fJ TofiIBDMQE4fnn/9DYQQl2SRZ85pblLibNp2FHYYfToz9uPNA41CfheT6Zt1Lw7O52LKq+iMgICmU cPVwoXMbsilq3xVJmRPws+5N3avFKkC1LzEUYeWamicVNqH3htotDigdSzHTDNNSSg1jKtPdS2Id/ PkXhbEYzIjPUXwj4Dey71CZLhG+vi1OnfCkVoTmO3PAuW4+SlwhCr/Mc74o7WCfl2zk+z+/t0CmLI kSFHPmakg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kyj-0007WZ-ID; Wed, 20 Jan 2021 21:25:25 +0000 Received: from mail-ej1-f53.google.com ([209.85.218.53]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kya-0007Td-Ld for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 21:25:20 +0000 Received: by mail-ej1-f53.google.com with SMTP id b5so19130402ejv.4 for ; Wed, 20 Jan 2021 13:25:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=6Ssw+zjtZMLxcvdLjzPmT7CToAEOi56wCkeJfmxJW4I=; b=dKZkFbhsYa1jm+7FUHFQDpd7ntU7hzvRWt4/CLNDXo1wcD9qagno6QKGJAiY6yq+RK yR6qEJJ5daRjoxScRb07LPRNQE9eg9kvwVRPYsbgH8/neEzgZeLPkiUS+DhBr2OZl+PA WVCe3d9Cu2kOo1ZTlCHMq/n8jxNx0pksPj7WxMxQ8y0SweckqtfLy1HPTCCGJtYysV/d 9b49lK6BdDjaRYX820Thb326tUNwi5KehNv+JaS14SaBTgeuMduMeUNwXcxNJOGU1pFZ YWbCy5bASzAOuVsIuXjEaRNE5upSs95wQqcFB9b2GGnrDboO37h9y29gPSZT9bUABBuq nDAg== X-Gm-Message-State: AOAM531+cAnef4mOHD1GLOOJkG+pqBpqYxaKyChKmQSvG3QUrq6Vdglm vMjsIIpsmtqYD37A3JptM74Z068K59t1qjPNx7YxC5ZlQ8VSnQ== X-Google-Smtp-Source: ABdhPJwA8jaJH1cue93hQcI8gC8bjDq5+XuGYA9A+xpAXXoZxgH1Db2zivwKW9byseEEx4hNwqVGZrpyrZvQD05sPkM= X-Received: by 2002:a17:906:32d6:: with SMTP id k22mr7314707ejk.457.1611177914999; Wed, 20 Jan 2021 13:25:14 -0800 (PST) MIME-Version: 1.0 References: <20210120142801.334550-1-arnd@kernel.org> <20210120142801.334550-3-arnd@kernel.org> In-Reply-To: <20210120142801.334550-3-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:25:03 +1300 Message-ID: Subject: Re: [PATCH 2/2] mmc: remove sirf prima/atlas driver To: Arnd Bergmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_162516_788032_4683E161 X-CRM114-Status: GOOD ( 27.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , Ulf Hansson , linux-mmc@vger.kernel.org, LKML , linux-arm-kernel@lists.infradead.org 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 QXJuZCBCZXJnbWFubiA8YXJuZEBrZXJuZWwub3JnPiDkuo4yMDIx5bm0MeaciDIx5pel5ZGo5Zub IOS4iuWNiDM6MjjlhpnpgZPvvJoKPgo+IEZyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIu ZGU+Cj4KPiBUaGUgQ1NSIFNpUkYgcHJpbWEyL2F0bGFzIHBsYXRmb3JtcyBhcmUgZ2V0dGluZyBy ZW1vdmVkLCBzbyB0aGlzIGRyaXZlcgo+IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4KPiBDYzogQmFy cnkgU29uZyA8YmFvaHVhQGtlcm5lbC5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFu biA8YXJuZEBhcm5kYi5kZT4KCkFja2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFAa2VybmVsLm9y Zz4KCj4gLS0tCj4gIC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1zaXJmLnR4dCAg ICB8ICAxOCAtLQo+ICBkcml2ZXJzL21tYy9ob3N0L0tjb25maWcgICAgICAgICAgICAgICAgICAg ICAgfCAgMTIgLQo+ICBkcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgLQo+ICBkcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYyAgICAgICAgICAgICAg ICAgfCAyMzUgLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDQgZmlsZXMgY2hhbmdlZCwgMjY2IGRlbGV0 aW9ucygtKQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL21tYy9zZGhjaS1zaXJmLnR4dAo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9t bWMvaG9zdC9zZGhjaS1zaXJmLmMKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXNpcmYudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1zaXJmLnR4dAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IGRkNmVkNDY0YmNiOC4uMDAwMDAwMDAwMDAwCj4gLS0tIGEvRG9jdW1lbnRhdGlv bi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1zaXJmLnR4dAo+ICsrKyAvZGV2L251bGwK PiBAQCAtMSwxOCArMCwwIEBACj4gLSogU2lSRnByaW1JSS9tYXJjby9hdGxhczYgU0RIQ0kgQ29u dHJvbGxlcgo+IC0KPiAtVGhpcyBmaWxlIGRvY3VtZW50cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRo ZSBjb3JlIHByb3BlcnRpZXMgaW4gbW1jLnR4dAo+IC1hbmQgdGhlIHByb3BlcnRpZXMgdXNlZCBi eSB0aGUgc2RoY2ktc2lyZiBkcml2ZXIuCj4gLQo+IC1SZXF1aXJlZCBwcm9wZXJ0aWVzOgo+IC0t IGNvbXBhdGlibGU6IHNpcmYscHJpbWEyLXNkaGMKPiAtCj4gLU9wdGlvbmFsIHByb3BlcnRpZXM6 Cj4gLS0gY2QtZ3Bpb3M6IGNhcmQgZGV0ZWN0IGdwaW8sIHdpdGggemVybyBmbGFncy4KPiAtCj4g LUV4YW1wbGU6Cj4gLQo+IC0gICAgICAgc2QwOiBzZGhjaUA1NjAwMDAwMCB7Cj4gLSAgICAgICAg ICAgICAgIGNvbXBhdGlibGUgPSAic2lyZixwcmltYTItc2RoYyI7Cj4gLSAgICAgICAgICAgICAg IHJlZyA9IDwweGNkMDAwMDAwIDB4MTAwMDAwPjsKPiAtICAgICAgICAgICAgICAgY2QtZ3Bpb3Mg PSA8JmdwaW8gNiAwPjsKPiAtICAgICAgIH07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hv c3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwo+IGluZGV4IDI1NWQzN2U4YmQz YS4uYjY3ZjYwMjhiNmYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwo+IEBAIC0zMTIsMTggKzMxMiw2IEBAIGNv bmZpZyBNTUNfU0RIQ0lfUzNDCj4KPiAgICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KPgo+IC1j b25maWcgTU1DX1NESENJX1NJUkYKPiAtICAgICAgIHRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9u IENTUiBTaVJGcHJpbWFJSSBhbmQgU2lSRm1hcmNvIFNvQ3MiCj4gLSAgICAgICBkZXBlbmRzIG9u IEFSQ0hfU0lSRiB8fCBDT01QSUxFX1RFU1QKPiAtICAgICAgIGRlcGVuZHMgb24gTU1DX1NESENJ X1BMVEZNCj4gLSAgICAgICBzZWxlY3QgTU1DX1NESENJX0lPX0FDQ0VTU09SUwo+IC0gICAgICAg aGVscAo+IC0gICAgICAgICBUaGlzIHNlbGVjdHMgdGhlIFNESENJIHN1cHBvcnQgZm9yIFNpUkYg U3lzdGVtLW9uLUNoaXAgZGV2aWNlcy4KPiAtCj4gLSAgICAgICAgIElmIHlvdSBoYXZlIGEgY29u dHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCj4gLQo+IC0gICAg ICAgICBJZiB1bnN1cmUsIHNheSBOLgo+IC0KPiAgY29uZmlnIE1NQ19TREhDSV9QWEFWMwo+ICAg ICAgICAgdHJpc3RhdGUgIk1hcnZlbGwgTU1QMiBTRCBIb3N0IENvbnRyb2xsZXIgc3VwcG9ydCAo UFhBVjMpIgo+ICAgICAgICAgZGVwZW5kcyBvbiBDTEtERVZfTE9PS1VQCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCj4g aW5kZXggNDMxMzZkMzgyZDVmLi5kMmVjNDI4Y2M4MDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t bWMvaG9zdC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKPiBAQCAt MTksNyArMTksNiBAQCBvYmotJChDT05GSUdfTU1DX1NESENJX0FDUEkpICArPSBzZGhjaS1hY3Bp Lm8KPiAgb2JqLSQoQ09ORklHX01NQ19TREhDSV9QWEFWMykgICs9IHNkaGNpLXB4YXYzLm8KPiAg b2JqLSQoQ09ORklHX01NQ19TREhDSV9QWEFWMikgICs9IHNkaGNpLXB4YXYyLm8KPiAgb2JqLSQo Q09ORklHX01NQ19TREhDSV9TM0MpICAgICs9IHNkaGNpLXMzYy5vCj4gLW9iai0kKENPTkZJR19N TUNfU0RIQ0lfU0lSRikgICAgICAgICAgICs9IHNkaGNpLXNpcmYubwo+ICBvYmotJChDT05GSUdf TU1DX1NESENJX0ZfU0RIMzApICAgICAgICArPSBzZGhjaV9mX3NkaDMwLm8KPiAgb2JqLSQoQ09O RklHX01NQ19TREhDSV9NSUxCRUFVVCkgICAgICAgKz0gc2RoY2ktbWlsYmVhdXQubwo+ICBvYmot JChDT05GSUdfTU1DX1NESENJX1NQRUFSKSAgKz0gc2RoY2ktc3BlYXIubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kt c2lyZi5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggZTliMzQ3YjNhZjdlLi4w MDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYwo+ICsrKyAv ZGV2L251bGwKPiBAQCAtMSwyMzUgKzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vci1sYXRlcgo+IC0vKgo+IC0gKiBTREhDSSBzdXBwb3J0IGZvciBTaVJGIHBy aW1hSUkgYW5kIG1hcmNvIFNvQ3MKPiAtICoKPiAtICogQ29weXJpZ2h0IChjKSAyMDExIENhbWJy aWRnZSBTaWxpY29uIFJhZGlvIExpbWl0ZWQsIGEgQ1NSIHBsYyBncm91cCBjb21wYW55Lgo+IC0g Ki8KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+IC0jaW5jbHVkZSA8bGludXgvZGV2 aWNlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgo+IC0jaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+IC0jaW5jbHVkZSA8bGludXgvbW1j L3Nsb3QtZ3Bpby5oPgo+IC0jaW5jbHVkZSAic2RoY2ktcGx0Zm0uaCIKPiAtCj4gLSNkZWZpbmUg U0RIQ0lfQ0xLX0RFTEFZX1NFVFRJTkcgMHg0Qwo+IC0jZGVmaW5lIFNESENJX1NJUkZfOEJJVEJV UyBCSVQoMykKPiAtI2RlZmluZSBTSVJGX1RVTklOR19DT1VOVCAxNjM4NAo+IC0KPiAtc3RhdGlj IHZvaWQgc2RoY2lfc2lyZl9zZXRfYnVzX3dpZHRoKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBp bnQgd2lkdGgpCj4gLXsKPiAtICAgICAgIHU4IGN0cmw7Cj4gLQo+IC0gICAgICAgY3RybCA9IHNk aGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7Cj4gLSAgICAgICBjdHJsICY9IH4o U0RIQ0lfQ1RSTF80QklUQlVTIHwgU0RIQ0lfU0lSRl84QklUQlVTKTsKPiAtCj4gLSAgICAgICAv Kgo+IC0gICAgICAgICogQ1NSIGF0bGFzNyBhbmQgcHJpbWEyIFNEIGhvc3QgdmVyc2lvbiBpcyBu b3QgMy4wCj4gLSAgICAgICAgKiA4Yml0LXdpZHRoIGVuYWJsZSBiaXQgb2YgQ1NSIFNEIGhvc3Rz IGlzIDMsCj4gLSAgICAgICAgKiB3aGlsZSBzdGFyZGFyZCBob3N0cyB1c2UgYml0IDUKPiAtICAg ICAgICAqLwo+IC0gICAgICAgaWYgKHdpZHRoID09IE1NQ19CVVNfV0lEVEhfOCkKPiAtICAgICAg ICAgICAgICAgY3RybCB8PSBTREhDSV9TSVJGXzhCSVRCVVM7Cj4gLSAgICAgICBlbHNlIGlmICh3 aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCj4gLSAgICAgICAgICAgICAgIGN0cmwgfD0gU0RIQ0lf Q1RSTF80QklUQlVTOwo+IC0KPiAtICAgICAgIHNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhD SV9IT1NUX0NPTlRST0wpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdTMyIHNkaGNpX3NpcmZfcmVhZGxf bGUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCj4gLXsKPiAtICAgICAgIHUzMiB2 YWwgPSByZWFkbChob3N0LT5pb2FkZHIgKyByZWcpOwo+IC0KPiAtICAgICAgIGlmICh1bmxpa2Vs eSgocmVnID09IFNESENJX0NBUEFCSUxJVElFU18xKSAmJgo+IC0gICAgICAgICAgICAgICAgICAg ICAgIChob3N0LT5tbWMtPmNhcHMgJiBNTUNfQ0FQX1VIU19TRFI1MCkpKSB7Cj4gLSAgICAgICAg ICAgICAgIC8qIGZha2UgQ0FQXzEgcmVnaXN0ZXIgKi8KPiAtICAgICAgICAgICAgICAgdmFsID0g U0RIQ0lfU1VQUE9SVF9ERFI1MCB8Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgU0RIQ0lfU1VQ UE9SVF9TRFI1MCB8IFNESENJX1VTRV9TRFI1MF9UVU5JTkc7Cj4gLSAgICAgICB9Cj4gLQo+IC0g ICAgICAgaWYgKHVubGlrZWx5KHJlZyA9PSBTREhDSV9TTE9UX0lOVF9TVEFUVVMpKSB7Cj4gLSAg ICAgICAgICAgICAgIHUzMiBwcnNzID0gdmFsOwo+IC0gICAgICAgICAgICAgICAvKiBmYWtlIGNo aXBzIGFzIFYzLjAgaG9zdCBjb25yZW9sbGVyICovCj4gLSAgICAgICAgICAgICAgIHByc3MgJj0g figweEZGIDw8IDE2KTsKPiAtICAgICAgICAgICAgICAgdmFsID0gcHJzcyB8IChTREhDSV9TUEVD XzMwMCA8PCAxNik7Cj4gLSAgICAgICB9Cj4gLSAgICAgICByZXR1cm4gdmFsOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdTE2IHNkaGNpX3NpcmZfcmVhZHdfbGUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Qs IGludCByZWcpCj4gLXsKPiAtICAgICAgIHUxNiByZXQgPSAwOwo+IC0KPiAtICAgICAgIHJldCA9 IHJlYWR3KGhvc3QtPmlvYWRkciArIHJlZyk7Cj4gLQo+IC0gICAgICAgaWYgKHVubGlrZWx5KHJl ZyA9PSBTREhDSV9IT1NUX1ZFUlNJT04pKSB7Cj4gLSAgICAgICAgICAgICAgIHJldCA9IHJlYWR3 KGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfVkVSU0lPTik7Cj4gLSAgICAgICAgICAgICAgIHJl dCB8PSBTREhDSV9TUEVDXzMwMDsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICByZXR1cm4gcmV0 Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHNkaGNpX3NpcmZfZXhlY3V0ZV90dW5pbmcoc3RydWN0 IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBvcGNvZGUpCj4gLXsKPiAtICAgICAgIGludCB0dW5pbmdf c2VxX2NudCA9IDM7Cj4gLSAgICAgICBpbnQgcGhhc2U7Cj4gLSAgICAgICB1OCB0dW5lZF9waGFz ZV9jbnQgPSAwOwo+IC0gICAgICAgaW50IHJjID0gMCwgbG9uZ2VzdF9yYW5nZSA9IDA7Cj4gLSAg ICAgICBpbnQgc3RhcnQgPSAtMSwgZW5kID0gMCwgdHVuaW5nX3ZhbHVlID0gLTEsIHJhbmdlID0g MDsKPiAtICAgICAgIHUxNiBjbG9ja19zZXR0aW5nOwo+IC0gICAgICAgc3RydWN0IG1tY19ob3N0 ICptbWMgPSBob3N0LT5tbWM7Cj4gLQo+IC0gICAgICAgY2xvY2tfc2V0dGluZyA9IHNkaGNpX3Jl YWR3KGhvc3QsIFNESENJX0NMS19ERUxBWV9TRVRUSU5HKTsKPiAtICAgICAgIGNsb2NrX3NldHRp bmcgJj0gfjB4M2ZmZjsKPiAtCj4gLXJldHJ5Ogo+IC0gICAgICAgcGhhc2UgPSAwOwo+IC0gICAg ICAgdHVuZWRfcGhhc2VfY250ID0gMDsKPiAtICAgICAgIGRvIHsKPiAtICAgICAgICAgICAgICAg c2RoY2lfd3JpdGVsKGhvc3QsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfc2V0dGlu ZyB8IHBoYXNlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgIFNESENJX0NMS19ERUxBWV9TRVRU SU5HKTsKPiAtCj4gLSAgICAgICAgICAgICAgIGlmICghbW1jX3NlbmRfdHVuaW5nKG1tYywgb3Bj b2RlLCBOVUxMKSkgewo+IC0gICAgICAgICAgICAgICAgICAgICAgIC8qIFR1bmluZyBpcyBzdWNj ZXNzZnVsIGF0IHRoaXMgdHVuaW5nIHBvaW50ICovCj4gLSAgICAgICAgICAgICAgICAgICAgICAg dHVuZWRfcGhhc2VfY250Kys7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZyhtbWNf ZGV2KG1tYyksICIlczogRm91bmQgZ29vZCBwaGFzZSA9ICVkXG4iLAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1tY19ob3N0bmFtZShtbWMpLCBwaGFzZSk7Cj4gLSAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKQo+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RhcnQgPSBwaGFzZTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBw aGFzZTsKPiAtICAgICAgICAgICAgICAgICAgICAgICByYW5nZSsrOwo+IC0gICAgICAgICAgICAg ICAgICAgICAgIGlmIChwaGFzZSA9PSAoU0lSRl9UVU5JTkdfQ09VTlQgLSAxKQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmFuZ2UgPiBsb25nZXN0X3JhbmdlKQo+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVuaW5nX3ZhbHVlID0gKHN0YXJ0ICsgZW5kKSAv IDI7Cj4gLSAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAgICAgICAgICAgICAg ZGV2X2RiZyhtbWNfZGV2KG1tYyksICIlczogRm91bmQgYmFkIHBoYXNlID0gJWRcbiIsCj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIHBoYXNlKTsK PiAtICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UgPiBsb25nZXN0X3JhbmdlKSB7Cj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dW5pbmdfdmFsdWUgPSAoc3RhcnQgKyBl bmQpIC8gMjsKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdlc3RfcmFuZ2Ug PSByYW5nZTsKPiAtICAgICAgICAgICAgICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgICAgICAg ICAgICAgc3RhcnQgPSAtMTsKPiAtICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSByYW5nZSA9 IDA7Cj4gLSAgICAgICAgICAgICAgIH0KPiAtICAgICAgIH0gd2hpbGUgKCsrcGhhc2UgPCBTSVJG X1RVTklOR19DT1VOVCk7Cj4gLQo+IC0gICAgICAgaWYgKHR1bmVkX3BoYXNlX2NudCAmJiB0dW5p bmdfdmFsdWUgPiAwKSB7Cj4gLSAgICAgICAgICAgICAgIC8qCj4gLSAgICAgICAgICAgICAgICAq IEZpbmFsbHkgc2V0IHRoZSBzZWxlY3RlZCBwaGFzZSBpbiBkZWxheQo+IC0gICAgICAgICAgICAg ICAgKiBsaW5lIGh3IGJsb2NrLgo+IC0gICAgICAgICAgICAgICAgKi8KPiAtICAgICAgICAgICAg ICAgcGhhc2UgPSB0dW5pbmdfdmFsdWU7Cj4gLSAgICAgICAgICAgICAgIHNkaGNpX3dyaXRlbCho b3N0LAo+IC0gICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3NldHRpbmcgfCBwaGFzZSwKPiAt ICAgICAgICAgICAgICAgICAgICAgICBTREhDSV9DTEtfREVMQVlfU0VUVElORyk7Cj4gLQo+IC0g ICAgICAgICAgICAgICBkZXZfZGJnKG1tY19kZXYobW1jKSwgIiVzOiBTZXR0aW5nIHRoZSB0dW5p bmcgcGhhc2UgdG8gJWRcbiIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIG1tY19ob3N0bmFt ZShtbWMpLCBwaGFzZSk7Cj4gLSAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICAgICBpZiAo LS10dW5pbmdfc2VxX2NudCkKPiAtICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5Owo+ IC0gICAgICAgICAgICAgICAvKiBUdW5pbmcgZmFpbGVkICovCj4gLSAgICAgICAgICAgICAgIGRl dl9kYmcobW1jX2RldihtbWMpLCAiJXM6IE5vIHR1bmluZyBwb2ludCBmb3VuZFxuIiwKPiAtICAg ICAgICAgICAgICAgICAgICAgIG1tY19ob3N0bmFtZShtbWMpKTsKPiAtICAgICAgICAgICAgICAg cmMgPSAtRUlPOwo+IC0gICAgICAgfQo+IC0KPiAtICAgICAgIHJldHVybiByYzsKPiAtfQo+IC0K PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9vcHMgc2RoY2lfc2lyZl9vcHMgPSB7Cj4gLSAg ICAgICAucmVhZF9sID0gc2RoY2lfc2lyZl9yZWFkbF9sZSwKPiAtICAgICAgIC5yZWFkX3cgPSBz ZGhjaV9zaXJmX3JlYWR3X2xlLAo+IC0gICAgICAgLnBsYXRmb3JtX2V4ZWN1dGVfdHVuaW5nID0g c2RoY2lfc2lyZl9leGVjdXRlX3R1bmluZywKPiAtICAgICAgIC5zZXRfY2xvY2sgPSBzZGhjaV9z ZXRfY2xvY2ssCj4gLSAgICAgICAuZ2V0X21heF9jbG9jayAgPSBzZGhjaV9wbHRmbV9jbGtfZ2V0 X21heF9jbG9jaywKPiAtICAgICAgIC5zZXRfYnVzX3dpZHRoID0gc2RoY2lfc2lyZl9zZXRfYnVz X3dpZHRoLAo+IC0gICAgICAgLnJlc2V0ID0gc2RoY2lfcmVzZXQsCj4gLSAgICAgICAuc2V0X3Vo c19zaWduYWxpbmcgPSBzZGhjaV9zZXRfdWhzX3NpZ25hbGluZywKPiAtfTsKPiAtCj4gLXN0YXRp YyBjb25zdCBzdHJ1Y3Qgc2RoY2lfcGx0Zm1fZGF0YSBzZGhjaV9zaXJmX3BkYXRhID0gewo+IC0g ICAgICAgLm9wcyA9ICZzZGhjaV9zaXJmX29wcywKPiAtICAgICAgIC5xdWlya3MgPSBTREhDSV9R VUlSS19CUk9LRU5fVElNRU9VVF9WQUwgfAo+IC0gICAgICAgICAgICAgICBTREhDSV9RVUlSS19E QVRBX1RJTUVPVVRfVVNFU19TRENMSyB8Cj4gLSAgICAgICAgICAgICAgIFNESENJX1FVSVJLX0NB UF9DTE9DS19CQVNFX0JST0tFTiB8Cj4gLSAgICAgICAgICAgICAgIFNESENJX1FVSVJLX1JFU0VU X0NNRF9EQVRBX09OX0lPUywKPiAtICAgICAgIC5xdWlya3MyID0gU0RIQ0lfUVVJUksyX1BSRVNF VF9WQUxVRV9CUk9LRU4sCj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IHNkaGNpX3NpcmZfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAtewo+IC0gICAgICAgc3RydWN0IHNkaGNp X2hvc3QgKmhvc3Q7Cj4gLSAgICAgICBzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9z dDsKPiAtICAgICAgIHN0cnVjdCBjbGsgKmNsazsKPiAtICAgICAgIGludCByZXQ7Cj4gLQo+IC0g ICAgICAgY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwo+IC0gICAgICAgaWYg KElTX0VSUihjbGspKSB7Cj4gLSAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgInVu YWJsZSB0byBnZXQgY2xvY2siKTsKPiAtICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoY2xr KTsKPiAtICAgICAgIH0KPiAtCj4gLSAgICAgICBob3N0ID0gc2RoY2lfcGx0Zm1faW5pdChwZGV2 LCAmc2RoY2lfc2lyZl9wZGF0YSwgMCk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKGhvc3QpKQo+IC0g ICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihob3N0KTsKPiAtCj4gLSAgICAgICBwbHRmbV9o b3N0ID0gc2RoY2lfcHJpdihob3N0KTsKPiAtICAgICAgIHBsdGZtX2hvc3QtPmNsayA9IGNsazsK PiAtCj4gLSAgICAgICBzZGhjaV9nZXRfb2ZfcHJvcGVydHkocGRldik7Cj4gLQo+IC0gICAgICAg cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBsdGZtX2hvc3QtPmNsayk7Cj4gLSAgICAgICBpZiAo cmV0KQo+IC0gICAgICAgICAgICAgICBnb3RvIGVycl9jbGtfcHJlcGFyZTsKPiAtCj4gLSAgICAg ICByZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKPiAtICAgICAgIGlmIChyZXQpCj4gLSAgICAg ICAgICAgICAgIGdvdG8gZXJyX3NkaGNpX2FkZDsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAg ICogV2UgbXVzdCByZXF1ZXN0IHRoZSBJUlEgYWZ0ZXIgc2RoY2lfYWRkX2hvc3QoKSwgYXMgdGhl IHRhc2tsZXQgb25seQo+IC0gICAgICAgICogZ2V0cyBzZXR1cCBpbiBzZGhjaV9hZGRfaG9zdCgp IGFuZCB3ZSBvb3BzLgo+IC0gICAgICAgICovCj4gLSAgICAgICByZXQgPSBtbWNfZ3Bpb2RfcmVx dWVzdF9jZChob3N0LT5tbWMsICJjZCIsIDAsIGZhbHNlLCAwKTsKPiAtICAgICAgIGlmIChyZXQg PT0gLUVQUk9CRV9ERUZFUikKPiAtICAgICAgICAgICAgICAgZ290byBlcnJfcmVxdWVzdF9jZDsK PiAtICAgICAgIGlmICghcmV0KQo+IC0gICAgICAgICAgICAgICBtbWNfZ3Bpb2RfcmVxdWVzdF9j ZF9pcnEoaG9zdC0+bW1jKTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtCj4gLWVycl9yZXF1 ZXN0X2NkOgo+IC0gICAgICAgc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMCk7Cj4gLWVycl9zZGhj aV9hZGQ6Cj4gLSAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUocGx0Zm1faG9zdC0+Y2xrKTsK PiAtZXJyX2Nsa19wcmVwYXJlOgo+IC0gICAgICAgc2RoY2lfcGx0Zm1fZnJlZShwZGV2KTsKPiAt ICAgICAgIHJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHNkaGNpX3NpcmZfb2ZfbWF0Y2hbXSA9IHsKPiAtICAgICAgIHsgLmNvbXBhdGlibGUg PSAic2lyZixwcmltYTItc2RoYyIgfSwKPiAtICAgICAgIHsgfQo+IC19Owo+IC1NT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBzZGhjaV9zaXJmX29mX21hdGNoKTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHNkaGNpX3NpcmZfZHJpdmVyID0gewo+IC0gICAgICAgLmRyaXZlciAg ICAgICAgID0gewo+IC0gICAgICAgICAgICAgICAubmFtZSAgID0gInNkaGNpLXNpcmYiLAo+IC0g ICAgICAgICAgICAgICAucHJvYmVfdHlwZSA9IFBST0JFX1BSRUZFUl9BU1lOQ0hST05PVVMsCj4g LSAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHNkaGNpX3NpcmZfb2ZfbWF0Y2gsCj4g LSAgICAgICAgICAgICAgIC5wbSAgICAgPSAmc2RoY2lfcGx0Zm1fcG1vcHMsCj4gLSAgICAgICB9 LAo+IC0gICAgICAgLnByb2JlICAgICAgICAgID0gc2RoY2lfc2lyZl9wcm9iZSwKPiAtICAgICAg IC5yZW1vdmUgICAgICAgICA9IHNkaGNpX3BsdGZtX3VucmVnaXN0ZXIsCj4gLX07Cj4gLQo+IC1t b2R1bGVfcGxhdGZvcm1fZHJpdmVyKHNkaGNpX3NpcmZfZHJpdmVyKTsKPiAtCj4gLU1PRFVMRV9E RVNDUklQVElPTigiU0RIQ0kgZHJpdmVyIGZvciBTaVJGcHJpbWFJSS9TaVJGbWFyY28iKTsKPiAt TU9EVUxFX0FVVEhPUigiQmFycnkgU29uZyA8MjFjbmJhb0BnbWFpbC5jb20+Iik7Cj4gLU1PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKPiAtLQo+IDIuMjkuMgo+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==