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 F028CC433E0 for ; Wed, 20 Jan 2021 22:12:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BAB9C235FF for ; Wed, 20 Jan 2021 22:12:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730627AbhATVkM convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 16:40:12 -0500 Received: from mail-ed1-f54.google.com ([209.85.208.54]:39682 "EHLO mail-ed1-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388468AbhATVQQ (ORCPT ); Wed, 20 Jan 2021 16:16:16 -0500 Received: by mail-ed1-f54.google.com with SMTP id b21so1696edy.6; Wed, 20 Jan 2021 13:15:59 -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=5oYC75PmO4R043rd4aC6SKBywNaXBiqKKe3Uoo/WWB4=; b=rJ+FYwbpQnCp3y1xZp/4ettKDmaCvz1qdJB//f6nFQ1oWYFq/4AQe2evVDlJMslkLW W9Ktynnzvq/Sh+94Wz68vbx/loplV4FKCjlnaxloYk5rSCeb5qRcddiG7psDzMY8dUNq mAb6AbHTAklw7Vo1vgmbtp9QyVjrAVZS62+yUnwVZl9cjTLuukqpvXiYlZMbtDqhglPk 3ttdoNkLXUlj2NmeSRjzMVXtg3Ad4a7CL4oqJPsDufgLaAB4emH++VhRyZEXDS0QBIih g9uM7RqDiCBKMpaCv1vG5SCjRCDDeVZZrYplHx+SrhozsF6jRRe8iz++9dHx4r8pMs/U RIaA== X-Gm-Message-State: AOAM5330HkQBSiDwFvfTo/mYKfc45h8gUt44sJsgySXkrqY+oh7791xy p0mw8g0IHJoIUaJgykB8gaTBUDgGZHanlE+L1Jg= X-Google-Smtp-Source: ABdhPJzdAzvVX6KsSRj/oSYEDygtfov7p/fHo+3Wk15lTIsFpPzWfJz+kHeGXjjj50B19twsBGQQEsKBB7kz+kkqsCI= X-Received: by 2002:a05:6402:510f:: with SMTP id m15mr8809347edd.267.1611177333656; Wed, 20 Jan 2021 13:15:33 -0800 (PST) MIME-Version: 1.0 References: <20210120162745.61268-1-arnd@kernel.org> <20210120162745.61268-2-arnd@kernel.org> In-Reply-To: <20210120162745.61268-2-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:15:22 +1300 Message-ID: Subject: Re: [PATCH 1/5] watchdog: remove sirf prima driver To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, LKML , linux-watchdog@vger.kernel.org, Guenter Roeck , Wim Van Sebroeck , 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日周四 上午5:27写道: > > 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 > --- > .../bindings/watchdog/sirfsoc_wdt.txt | 18 -- > drivers/watchdog/Kconfig | 10 - > drivers/watchdog/Makefile | 1 - > drivers/watchdog/sirfsoc_wdt.c | 216 ------------------ > 4 files changed, 245 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/watchdog/sirfsoc_wdt.txt > delete mode 100644 drivers/watchdog/sirfsoc_wdt.c > > diff --git a/Documentation/devicetree/bindings/watchdog/sirfsoc_wdt.txt b/Documentation/devicetree/bindings/watchdog/sirfsoc_wdt.txt > deleted file mode 100644 > index 0dce5e3100b4..000000000000 > --- a/Documentation/devicetree/bindings/watchdog/sirfsoc_wdt.txt > +++ /dev/null > @@ -1,18 +0,0 @@ > -SiRFSoC Timer and Watchdog Timer(WDT) Controller > - > -Required properties: > -- compatible: "sirf,prima2-tick" > -- reg: Address range of tick timer/WDT register set > -- interrupts: interrupt number to the cpu > - > -Optional properties: > -- timeout-sec : Contains the watchdog timeout in seconds > - > -Example: > - > -timer@b0020000 { > - compatible = "sirf,prima2-tick"; > - reg = <0xb0020000 0x1000>; > - interrupts = <0>; > - timeout-sec = <30>; > -}; > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 7ff941e71b79..88f4827849e4 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -788,16 +788,6 @@ config MOXART_WDT > To compile this driver as a module, choose M here: the > module will be called moxart_wdt. > > -config SIRFSOC_WATCHDOG > - tristate "SiRFSOC watchdog" > - depends on HAS_IOMEM > - depends on ARCH_SIRF || COMPILE_TEST > - select WATCHDOG_CORE > - default y > - help > - Support for CSR SiRFprimaII and SiRFatlasVI watchdog. When > - the watchdog triggers the system will be reset. > - > config ST_LPC_WATCHDOG > tristate "STMicroelectronics LPC Watchdog" > depends on ARCH_STI || COMPILE_TEST > diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile > index 5c74ee19d441..1741ed3c6ce6 100644 > --- a/drivers/watchdog/Makefile > +++ b/drivers/watchdog/Makefile > @@ -73,7 +73,6 @@ obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o > obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o > obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o > obj-$(CONFIG_MOXART_WDT) += moxart_wdt.o > -obj-$(CONFIG_SIRFSOC_WATCHDOG) += sirfsoc_wdt.o > obj-$(CONFIG_ST_LPC_WATCHDOG) += st_lpc_wdt.o > obj-$(CONFIG_QCOM_WDT) += qcom-wdt.o > obj-$(CONFIG_BCM_KONA_WDT) += bcm_kona_wdt.o > diff --git a/drivers/watchdog/sirfsoc_wdt.c b/drivers/watchdog/sirfsoc_wdt.c > deleted file mode 100644 > index 734cf2966ecb..000000000000 > --- a/drivers/watchdog/sirfsoc_wdt.c > +++ /dev/null > @@ -1,216 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-or-later > -/* > - * Watchdog driver for CSR SiRFprimaII and SiRFatlasVI > - * > - * Copyright (c) 2013 Cambridge Silicon Radio Limited, a CSR plc group company. > - */ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -#define CLOCK_FREQ 1000000 > - > -#define SIRFSOC_TIMER_COUNTER_LO 0x0000 > -#define SIRFSOC_TIMER_MATCH_0 0x0008 > -#define SIRFSOC_TIMER_INT_EN 0x0024 > -#define SIRFSOC_TIMER_WATCHDOG_EN 0x0028 > -#define SIRFSOC_TIMER_LATCH 0x0030 > -#define SIRFSOC_TIMER_LATCHED_LO 0x0034 > - > -#define SIRFSOC_TIMER_WDT_INDEX 5 > - > -#define SIRFSOC_WDT_MIN_TIMEOUT 30 /* 30 secs */ > -#define SIRFSOC_WDT_MAX_TIMEOUT (10 * 60) /* 10 mins */ > -#define SIRFSOC_WDT_DEFAULT_TIMEOUT 30 /* 30 secs */ > - > -static unsigned int timeout; > -static bool nowayout = WATCHDOG_NOWAYOUT; > - > -module_param(timeout, uint, 0); > -module_param(nowayout, bool, 0); > - > -MODULE_PARM_DESC(timeout, "Default watchdog timeout (in seconds)"); > -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" > - __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); > - > -static void __iomem *sirfsoc_wdt_base(struct watchdog_device *wdd) > -{ > - return (void __iomem __force *)watchdog_get_drvdata(wdd); > -} > - > -static unsigned int sirfsoc_wdt_gettimeleft(struct watchdog_device *wdd) > -{ > - u32 counter, match; > - void __iomem *wdt_base; > - int time_left; > - > - wdt_base = sirfsoc_wdt_base(wdd); > - counter = readl(wdt_base + SIRFSOC_TIMER_COUNTER_LO); > - match = readl(wdt_base + > - SIRFSOC_TIMER_MATCH_0 + (SIRFSOC_TIMER_WDT_INDEX << 2)); > - > - time_left = match - counter; > - > - return time_left / CLOCK_FREQ; > -} > - > -static int sirfsoc_wdt_updatetimeout(struct watchdog_device *wdd) > -{ > - u32 counter, timeout_ticks; > - void __iomem *wdt_base; > - > - timeout_ticks = wdd->timeout * CLOCK_FREQ; > - wdt_base = sirfsoc_wdt_base(wdd); > - > - /* Enable the latch before reading the LATCH_LO register */ > - writel(1, wdt_base + SIRFSOC_TIMER_LATCH); > - > - /* Set the TO value */ > - counter = readl(wdt_base + SIRFSOC_TIMER_LATCHED_LO); > - > - counter += timeout_ticks; > - > - writel(counter, wdt_base + > - SIRFSOC_TIMER_MATCH_0 + (SIRFSOC_TIMER_WDT_INDEX << 2)); > - > - return 0; > -} > - > -static int sirfsoc_wdt_enable(struct watchdog_device *wdd) > -{ > - void __iomem *wdt_base = sirfsoc_wdt_base(wdd); > - sirfsoc_wdt_updatetimeout(wdd); > - > - /* > - * NOTE: If interrupt is not enabled > - * then WD-Reset doesn't get generated at all. > - */ > - writel(readl(wdt_base + SIRFSOC_TIMER_INT_EN) > - | (1 << SIRFSOC_TIMER_WDT_INDEX), > - wdt_base + SIRFSOC_TIMER_INT_EN); > - writel(1, wdt_base + SIRFSOC_TIMER_WATCHDOG_EN); > - > - return 0; > -} > - > -static int sirfsoc_wdt_disable(struct watchdog_device *wdd) > -{ > - void __iomem *wdt_base = sirfsoc_wdt_base(wdd); > - > - writel(0, wdt_base + SIRFSOC_TIMER_WATCHDOG_EN); > - writel(readl(wdt_base + SIRFSOC_TIMER_INT_EN) > - & (~(1 << SIRFSOC_TIMER_WDT_INDEX)), > - wdt_base + SIRFSOC_TIMER_INT_EN); > - > - return 0; > -} > - > -static int sirfsoc_wdt_settimeout(struct watchdog_device *wdd, unsigned int to) > -{ > - wdd->timeout = to; > - sirfsoc_wdt_updatetimeout(wdd); > - > - return 0; > -} > - > -#define OPTIONS (WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE) > - > -static const struct watchdog_info sirfsoc_wdt_ident = { > - .options = OPTIONS, > - .firmware_version = 0, > - .identity = "SiRFSOC Watchdog", > -}; > - > -static const struct watchdog_ops sirfsoc_wdt_ops = { > - .owner = THIS_MODULE, > - .start = sirfsoc_wdt_enable, > - .stop = sirfsoc_wdt_disable, > - .get_timeleft = sirfsoc_wdt_gettimeleft, > - .ping = sirfsoc_wdt_updatetimeout, > - .set_timeout = sirfsoc_wdt_settimeout, > -}; > - > -static struct watchdog_device sirfsoc_wdd = { > - .info = &sirfsoc_wdt_ident, > - .ops = &sirfsoc_wdt_ops, > - .timeout = SIRFSOC_WDT_DEFAULT_TIMEOUT, > - .min_timeout = SIRFSOC_WDT_MIN_TIMEOUT, > - .max_timeout = SIRFSOC_WDT_MAX_TIMEOUT, > -}; > - > -static int sirfsoc_wdt_probe(struct platform_device *pdev) > -{ > - struct device *dev = &pdev->dev; > - int ret; > - void __iomem *base; > - > - base = devm_platform_ioremap_resource(pdev, 0); > - if (IS_ERR(base)) > - return PTR_ERR(base); > - > - watchdog_set_drvdata(&sirfsoc_wdd, (__force void *)base); > - > - watchdog_init_timeout(&sirfsoc_wdd, timeout, dev); > - watchdog_set_nowayout(&sirfsoc_wdd, nowayout); > - sirfsoc_wdd.parent = dev; > - > - watchdog_stop_on_reboot(&sirfsoc_wdd); > - watchdog_stop_on_unregister(&sirfsoc_wdd); > - ret = devm_watchdog_register_device(dev, &sirfsoc_wdd); > - if (ret) > - return ret; > - > - platform_set_drvdata(pdev, &sirfsoc_wdd); > - > - return 0; > -} > - > -#ifdef CONFIG_PM_SLEEP > -static int sirfsoc_wdt_suspend(struct device *dev) > -{ > - return 0; > -} > - > -static int sirfsoc_wdt_resume(struct device *dev) > -{ > - struct watchdog_device *wdd = dev_get_drvdata(dev); > - > - /* > - * NOTE: Since timer controller registers settings are saved > - * and restored back by the timer-prima2.c, so we need not > - * update WD settings except refreshing timeout. > - */ > - sirfsoc_wdt_updatetimeout(wdd); > - > - return 0; > -} > -#endif > - > -static SIMPLE_DEV_PM_OPS(sirfsoc_wdt_pm_ops, > - sirfsoc_wdt_suspend, sirfsoc_wdt_resume); > - > -static const struct of_device_id sirfsoc_wdt_of_match[] = { > - { .compatible = "sirf,prima2-tick"}, > - {}, > -}; > -MODULE_DEVICE_TABLE(of, sirfsoc_wdt_of_match); > - > -static struct platform_driver sirfsoc_wdt_driver = { > - .driver = { > - .name = "sirfsoc-wdt", > - .pm = &sirfsoc_wdt_pm_ops, > - .of_match_table = sirfsoc_wdt_of_match, > - }, > - .probe = sirfsoc_wdt_probe, > -}; > -module_platform_driver(sirfsoc_wdt_driver); > - > -MODULE_DESCRIPTION("SiRF SoC watchdog driver"); > -MODULE_AUTHOR("Xianglong Du "); > -MODULE_LICENSE("GPL v2"); > -MODULE_ALIAS("platform:sirfsoc-wdt"); > -- > 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 E65B0C433E6 for ; Wed, 20 Jan 2021 21:22:58 +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 8E8EB23444 for ; Wed, 20 Jan 2021 21:22:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8E8EB23444 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=zowgZIgkggOXz/gE126CcOwCSMsZVb/lGGJcCdoG8E0=; b=fjUixEpTuhYwA5TA4i6OqGwGm LmQKgAI+IdcpeLJct/j7yauw5j647n3sJRSodhdWtotF9nKrl5ofqYNRUZsvki83/PMieVwrLqI5Q M4TS+sjkPF14MQXi6SMf1W0FA9Bv7abBWiU+OPHmf8GhUpEgfpLLaY+MYguVwFKVz+2E5yHY9jHT4 k4W5Th4RD3fVQHiCEa4HaiHWTUFvBZ2gU/W9o8N9z/sU1eTpzh7Ew3qJI5TciMNUr2Vqoh3J0f4B+ 1uTLY/zEPIRmUgwFAMvRgFInxFs28oy6LulsbcBpFPseSZkPAmcWeC2i+K5VUgWdXNvmE14KUQT2l Eduq4qTLA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2KtP-0005CH-J0; Wed, 20 Jan 2021 21:19:55 +0000 Received: from mail-ed1-f48.google.com ([209.85.208.48]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2KpD-00037a-Bc for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 21:15:37 +0000 Received: by mail-ed1-f48.google.com with SMTP id n6so12369670edt.10 for ; Wed, 20 Jan 2021 13:15:34 -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=5oYC75PmO4R043rd4aC6SKBywNaXBiqKKe3Uoo/WWB4=; b=YK3wP3A0CFUriq53nsTfMobwJHTCmFS9A709y2y+lblQmhaddExmY9soiSeAqxet5p u4ZoseYkfZCHLq0ftzdJ8SmgxvUMx5VV3hep0d+5wtkfPNRTf/2EQQ5NoSCVMgnExj5V e89rXQgbJco0bKJkwV331U1tpmhan9xxNI/msSlDPozugvYNj8yhoPFo+PclXwaWk7fB zPiyPt15PtRTlPRt+asSIyJQTIo3ZRSScUMKgD1MlYxYt5/OFLPeLz7zaFIbEp88aK4y W3BsTHF1dNLSO3COIk+w0MITKMOBqfExgPFLP3S0IlCS0qRppCdwvDJO70FODpyGAsF/ EKjQ== X-Gm-Message-State: AOAM533rkoMkFm7SUDQeMJK4i2g4GcCUnNvOB4Cd9v6DmN1yyBBOoKLy t9qC9t6pdx5YkQE36RfzLX84FxwybI6vYiogOr8= X-Google-Smtp-Source: ABdhPJzdAzvVX6KsSRj/oSYEDygtfov7p/fHo+3Wk15lTIsFpPzWfJz+kHeGXjjj50B19twsBGQQEsKBB7kz+kkqsCI= X-Received: by 2002:a05:6402:510f:: with SMTP id m15mr8809347edd.267.1611177333656; Wed, 20 Jan 2021 13:15:33 -0800 (PST) MIME-Version: 1.0 References: <20210120162745.61268-1-arnd@kernel.org> <20210120162745.61268-2-arnd@kernel.org> In-Reply-To: <20210120162745.61268-2-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:15:22 +1300 Message-ID: Subject: Re: [PATCH 1/5] watchdog: remove sirf prima driver To: Arnd Bergmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_161536_060966_AF1440B7 X-CRM114-Status: GOOD ( 27.72 ) 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: linux-watchdog@vger.kernel.org, Arnd Bergmann , LKML , linux-arm-kernel@lists.infradead.org, Wim Van Sebroeck , Guenter Roeck 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 IOS4iuWNiDU6MjflhpnpgZPvvJoKPgo+IEZyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIu ZGU+Cj4KPiBUaGUgQ1NSIFNpUkYgcHJpbWEyL2F0bGFzIHBsYXRmb3JtcyBhcmUgZ2V0dGluZyBy ZW1vdmVkLCBzbyB0aGlzIGRyaXZlcgo+IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4KPiBDYzogQmFy cnkgU29uZyA8YmFvaHVhQGtlcm5lbC5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFu biA8YXJuZEBhcm5kYi5kZT4KCkFja2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFAa2VybmVsLm9y Zz4KCj4gLS0tCj4gIC4uLi9iaW5kaW5ncy93YXRjaGRvZy9zaXJmc29jX3dkdC50eHQgICAgICAg ICB8ICAxOCAtLQo+ICBkcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgICAgICAgICAgICAgICAgICAg ICAgfCAgMTAgLQo+ICBkcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgLQo+ICBkcml2ZXJzL3dhdGNoZG9nL3NpcmZzb2Nfd2R0LmMgICAgICAgICAgICAg ICAgfCAyMTYgLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDQgZmlsZXMgY2hhbmdlZCwgMjQ1IGRlbGV0 aW9ucygtKQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL3dhdGNoZG9nL3NpcmZzb2Nfd2R0LnR4dAo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy93YXRjaGRvZy9zaXJmc29jX3dkdC5jCj4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9kZXZpY2V0cmVlL2JpbmRpbmdzL3dhdGNoZG9nL3NpcmZzb2Nfd2R0LnR4dCBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93YXRjaGRvZy9zaXJmc29jX3dkdC50eHQKPiBkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwZGNlNWUzMTAwYjQuLjAwMDAwMDAwMDAwMAo+ IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy93YXRjaGRvZy9zaXJmc29j X3dkdC50eHQKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTggKzAsMCBAQAo+IC1TaVJGU29DIFRp bWVyIGFuZCBXYXRjaGRvZyBUaW1lcihXRFQpIENvbnRyb2xsZXIKPiAtCj4gLVJlcXVpcmVkIHBy b3BlcnRpZXM6Cj4gLS0gY29tcGF0aWJsZTogInNpcmYscHJpbWEyLXRpY2siCj4gLS0gcmVnOiBB ZGRyZXNzIHJhbmdlIG9mIHRpY2sgdGltZXIvV0RUIHJlZ2lzdGVyIHNldAo+IC0tIGludGVycnVw dHM6IGludGVycnVwdCBudW1iZXIgdG8gdGhlIGNwdQo+IC0KPiAtT3B0aW9uYWwgcHJvcGVydGll czoKPiAtLSB0aW1lb3V0LXNlYyA6IENvbnRhaW5zIHRoZSB3YXRjaGRvZyB0aW1lb3V0IGluIHNl Y29uZHMKPiAtCj4gLUV4YW1wbGU6Cj4gLQo+IC10aW1lckBiMDAyMDAwMCB7Cj4gLSAgICAgICBj b21wYXRpYmxlID0gInNpcmYscHJpbWEyLXRpY2siOwo+IC0gICAgICAgcmVnID0gPDB4YjAwMjAw MDAgMHgxMDAwPjsKPiAtICAgICAgIGludGVycnVwdHMgPSA8MD47Cj4gLSAgICAgICB0aW1lb3V0 LXNlYyA9IDwzMD47Cj4gLX07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZp ZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwo+IGluZGV4IDdmZjk0MWU3MWI3OS4uODhmNDgy Nzg0OWU0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwo+ICsrKyBiL2Ry aXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwo+IEBAIC03ODgsMTYgKzc4OCw2IEBAIGNvbmZpZyBNT1hB UlRfV0RUCj4gICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNo b29zZSBNIGhlcmU6IHRoZQo+ICAgICAgICAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbW94YXJ0 X3dkdC4KPgo+IC1jb25maWcgU0lSRlNPQ19XQVRDSERPRwo+IC0gICAgICAgdHJpc3RhdGUgIlNp UkZTT0Mgd2F0Y2hkb2ciCj4gLSAgICAgICBkZXBlbmRzIG9uIEhBU19JT01FTQo+IC0gICAgICAg ZGVwZW5kcyBvbiBBUkNIX1NJUkYgfHwgQ09NUElMRV9URVNUCj4gLSAgICAgICBzZWxlY3QgV0FU Q0hET0dfQ09SRQo+IC0gICAgICAgZGVmYXVsdCB5Cj4gLSAgICAgICBoZWxwCj4gLSAgICAgICAg IFN1cHBvcnQgZm9yIENTUiBTaVJGcHJpbWFJSSBhbmQgU2lSRmF0bGFzVkkgd2F0Y2hkb2cuIFdo ZW4KPiAtICAgICAgICAgdGhlIHdhdGNoZG9nIHRyaWdnZXJzIHRoZSBzeXN0ZW0gd2lsbCBiZSBy ZXNldC4KPiAtCj4gIGNvbmZpZyBTVF9MUENfV0FUQ0hET0cKPiAgICAgICAgIHRyaXN0YXRlICJT VE1pY3JvZWxlY3Ryb25pY3MgTFBDIFdhdGNoZG9nIgo+ICAgICAgICAgZGVwZW5kcyBvbiBBUkNI X1NUSSB8fCBDT01QSUxFX1RFU1QKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtl ZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKPiBpbmRleCA1Yzc0ZWUxOWQ0NDEuLjE3 NDFlZDNjNmNlNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQo+IEBAIC03Myw3ICs3Myw2IEBAIG9iai0kKENP TkZJR19VWDUwMF9XQVRDSERPRykgKz0gdXg1MDBfd2R0Lm8KPiAgb2JqLSQoQ09ORklHX1JFVFVf V0FUQ0hET0cpICs9IHJldHVfd2R0Lm8KPiAgb2JqLSQoQ09ORklHX0JDTTI4MzVfV0RUKSArPSBi Y20yODM1X3dkdC5vCj4gIG9iai0kKENPTkZJR19NT1hBUlRfV0RUKSArPSBtb3hhcnRfd2R0Lm8K PiAtb2JqLSQoQ09ORklHX1NJUkZTT0NfV0FUQ0hET0cpICs9IHNpcmZzb2Nfd2R0Lm8KPiAgb2Jq LSQoQ09ORklHX1NUX0xQQ19XQVRDSERPRykgKz0gc3RfbHBjX3dkdC5vCj4gIG9iai0kKENPTkZJ R19RQ09NX1dEVCkgKz0gcWNvbS13ZHQubwo+ICBvYmotJChDT05GSUdfQkNNX0tPTkFfV0RUKSAr PSBiY21fa29uYV93ZHQubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NpcmZzb2Nf d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NpcmZzb2Nfd2R0LmMKPiBkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCA3MzRjZjI5NjZlY2IuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZl cnMvd2F0Y2hkb2cvc2lyZnNvY193ZHQuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwyMTYgKzAs MCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgo+IC0v Kgo+IC0gKiBXYXRjaGRvZyBkcml2ZXIgZm9yIENTUiBTaVJGcHJpbWFJSSBhbmQgU2lSRmF0bGFz VkkKPiAtICoKPiAtICogQ29weXJpZ2h0IChjKSAyMDEzIENhbWJyaWRnZSBTaWxpY29uIFJhZGlv IExpbWl0ZWQsIGEgQ1NSIHBsYyBncm91cCBjb21wYW55Lgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Cj4gLSNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBh cmFtLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9vZi5oPgo+IC0jaW5jbHVkZSA8bGludXgvaW8uaD4K PiAtI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiAtCj4gLSNkZWZpbmUgQ0xPQ0tfRlJFUSAg ICAgMTAwMDAwMAo+IC0KPiAtI2RlZmluZSBTSVJGU09DX1RJTUVSX0NPVU5URVJfTE8gICAgICAg MHgwMDAwCj4gLSNkZWZpbmUgU0lSRlNPQ19USU1FUl9NQVRDSF8wICAgICAgICAgIDB4MDAwOAo+ IC0jZGVmaW5lIFNJUkZTT0NfVElNRVJfSU5UX0VOICAgICAgICAgICAweDAwMjQKPiAtI2RlZmlu ZSBTSVJGU09DX1RJTUVSX1dBVENIRE9HX0VOICAgICAgMHgwMDI4Cj4gLSNkZWZpbmUgU0lSRlNP Q19USU1FUl9MQVRDSCAgICAgICAgICAgIDB4MDAzMAo+IC0jZGVmaW5lIFNJUkZTT0NfVElNRVJf TEFUQ0hFRF9MTyAgICAgICAweDAwMzQKPiAtCj4gLSNkZWZpbmUgU0lSRlNPQ19USU1FUl9XRFRf SU5ERVggICAgICAgICAgICAgICAgNQo+IC0KPiAtI2RlZmluZSBTSVJGU09DX1dEVF9NSU5fVElN RU9VVCAgICAgICAgICAgICAgICAzMCAgICAgICAgICAgICAgLyogMzAgc2VjcyAqLwo+IC0jZGVm aW5lIFNJUkZTT0NfV0RUX01BWF9USU1FT1VUICAgICAgICAgICAgICAgICgxMCAqIDYwKSAgICAg ICAvKiAxMCBtaW5zICovCj4gLSNkZWZpbmUgU0lSRlNPQ19XRFRfREVGQVVMVF9USU1FT1VUICAg IDMwICAgICAgICAgICAgICAvKiAzMCBzZWNzICovCj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgaW50 IHRpbWVvdXQ7Cj4gLXN0YXRpYyBib29sIG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Cj4g LQo+IC1tb2R1bGVfcGFyYW0odGltZW91dCwgdWludCwgMCk7Cj4gLW1vZHVsZV9wYXJhbShub3dh eW91dCwgYm9vbCwgMCk7Cj4gLQo+IC1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJEZWZhdWx0 IHdhdGNoZG9nIHRpbWVvdXQgKGluIHNlY29uZHMpIik7Cj4gLU1PRFVMRV9QQVJNX0RFU0Mobm93 YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9 Igo+IC0gICAgICAgICAgICAgICAgICAgICAgIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dB WU9VVCkgIikiKTsKPiAtCj4gLXN0YXRpYyB2b2lkIF9faW9tZW0gKnNpcmZzb2Nfd2R0X2Jhc2Uo c3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2RkKQo+IC17Cj4gLSAgICAgICByZXR1cm4gKHZvaWQg X19pb21lbSBfX2ZvcmNlICopd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2RkKTsKPiAtfQo+IC0KPiAt c3RhdGljIHVuc2lnbmVkIGludCBzaXJmc29jX3dkdF9nZXR0aW1lbGVmdChzdHJ1Y3Qgd2F0Y2hk b2dfZGV2aWNlICp3ZGQpCj4gLXsKPiAtICAgICAgIHUzMiBjb3VudGVyLCBtYXRjaDsKPiAtICAg ICAgIHZvaWQgX19pb21lbSAqd2R0X2Jhc2U7Cj4gLSAgICAgICBpbnQgdGltZV9sZWZ0Owo+IC0K PiAtICAgICAgIHdkdF9iYXNlID0gc2lyZnNvY193ZHRfYmFzZSh3ZGQpOwo+IC0gICAgICAgY291 bnRlciA9IHJlYWRsKHdkdF9iYXNlICsgU0lSRlNPQ19USU1FUl9DT1VOVEVSX0xPKTsKPiAtICAg ICAgIG1hdGNoID0gcmVhZGwod2R0X2Jhc2UgKwo+IC0gICAgICAgICAgICAgICBTSVJGU09DX1RJ TUVSX01BVENIXzAgKyAoU0lSRlNPQ19USU1FUl9XRFRfSU5ERVggPDwgMikpOwo+IC0KPiAtICAg ICAgIHRpbWVfbGVmdCA9IG1hdGNoIC0gY291bnRlcjsKPiAtCj4gLSAgICAgICByZXR1cm4gdGlt ZV9sZWZ0IC8gQ0xPQ0tfRlJFUTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBzaXJmc29jX3dkdF91 cGRhdGV0aW1lb3V0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCkKPiAtewo+IC0gICAgICAg dTMyIGNvdW50ZXIsIHRpbWVvdXRfdGlja3M7Cj4gLSAgICAgICB2b2lkIF9faW9tZW0gKndkdF9i YXNlOwo+IC0KPiAtICAgICAgIHRpbWVvdXRfdGlja3MgPSB3ZGQtPnRpbWVvdXQgKiBDTE9DS19G UkVROwo+IC0gICAgICAgd2R0X2Jhc2UgPSBzaXJmc29jX3dkdF9iYXNlKHdkZCk7Cj4gLQo+IC0g ICAgICAgLyogRW5hYmxlIHRoZSBsYXRjaCBiZWZvcmUgcmVhZGluZyB0aGUgTEFUQ0hfTE8gcmVn aXN0ZXIgKi8KPiAtICAgICAgIHdyaXRlbCgxLCB3ZHRfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFU Q0gpOwo+IC0KPiAtICAgICAgIC8qIFNldCB0aGUgVE8gdmFsdWUgKi8KPiAtICAgICAgIGNvdW50 ZXIgPSByZWFkbCh3ZHRfYmFzZSArIFNJUkZTT0NfVElNRVJfTEFUQ0hFRF9MTyk7Cj4gLQo+IC0g ICAgICAgY291bnRlciArPSB0aW1lb3V0X3RpY2tzOwo+IC0KPiAtICAgICAgIHdyaXRlbChjb3Vu dGVyLCB3ZHRfYmFzZSArCj4gLSAgICAgICAgICAgICAgIFNJUkZTT0NfVElNRVJfTUFUQ0hfMCAr IChTSVJGU09DX1RJTUVSX1dEVF9JTkRFWCA8PCAyKSk7Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgc2lyZnNvY193ZHRfZW5hYmxlKHN0cnVjdCB3YXRjaGRv Z19kZXZpY2UgKndkZCkKPiAtewo+IC0gICAgICAgdm9pZCBfX2lvbWVtICp3ZHRfYmFzZSA9IHNp cmZzb2Nfd2R0X2Jhc2Uod2RkKTsKPiAtICAgICAgIHNpcmZzb2Nfd2R0X3VwZGF0ZXRpbWVvdXQo d2RkKTsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogTk9URTogSWYgaW50ZXJydXB0IGlz IG5vdCBlbmFibGVkCj4gLSAgICAgICAgKiB0aGVuIFdELVJlc2V0IGRvZXNuJ3QgZ2V0IGdlbmVy YXRlZCBhdCBhbGwuCj4gLSAgICAgICAgKi8KPiAtICAgICAgIHdyaXRlbChyZWFkbCh3ZHRfYmFz ZSArIFNJUkZTT0NfVElNRVJfSU5UX0VOKQo+IC0gICAgICAgICAgICAgICB8ICgxIDw8IFNJUkZT T0NfVElNRVJfV0RUX0lOREVYKSwKPiAtICAgICAgICAgICAgICAgd2R0X2Jhc2UgKyBTSVJGU09D X1RJTUVSX0lOVF9FTik7Cj4gLSAgICAgICB3cml0ZWwoMSwgd2R0X2Jhc2UgKyBTSVJGU09DX1RJ TUVSX1dBVENIRE9HX0VOKTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBzaXJmc29jX3dkdF9kaXNhYmxlKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCkK PiAtewo+IC0gICAgICAgdm9pZCBfX2lvbWVtICp3ZHRfYmFzZSA9IHNpcmZzb2Nfd2R0X2Jhc2Uo d2RkKTsKPiAtCj4gLSAgICAgICB3cml0ZWwoMCwgd2R0X2Jhc2UgKyBTSVJGU09DX1RJTUVSX1dB VENIRE9HX0VOKTsKPiAtICAgICAgIHdyaXRlbChyZWFkbCh3ZHRfYmFzZSArIFNJUkZTT0NfVElN RVJfSU5UX0VOKQo+IC0gICAgICAgICAgICAgICAmICh+KDEgPDwgU0lSRlNPQ19USU1FUl9XRFRf SU5ERVgpKSwKPiAtICAgICAgICAgICAgICAgd2R0X2Jhc2UgKyBTSVJGU09DX1RJTUVSX0lOVF9F Tik7Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgc2lyZnNv Y193ZHRfc2V0dGltZW91dChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZGQsIHVuc2lnbmVkIGlu dCB0bykKPiAtewo+IC0gICAgICAgd2RkLT50aW1lb3V0ID0gdG87Cj4gLSAgICAgICBzaXJmc29j X3dkdF91cGRhdGV0aW1lb3V0KHdkZCk7Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gLSNkZWZpbmUgT1BUSU9OUyAoV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJ TkcgfCBXRElPRl9NQUdJQ0NMT1NFKQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRv Z19pbmZvIHNpcmZzb2Nfd2R0X2lkZW50ID0gewo+IC0gICAgICAgLm9wdGlvbnMgICAgICAgICAg PSAgICAgT1BUSU9OUywKPiAtICAgICAgIC5maXJtd2FyZV92ZXJzaW9uID0gICAgIDAsCj4gLSAg ICAgICAuaWRlbnRpdHkgICAgICAgICA9ICAgICAiU2lSRlNPQyBXYXRjaGRvZyIsCj4gLX07Cj4g LQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX29wcyBzaXJmc29jX3dkdF9vcHMgPSB7 Cj4gLSAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKPiAtICAgICAgIC5zdGFydCA9IHNpcmZz b2Nfd2R0X2VuYWJsZSwKPiAtICAgICAgIC5zdG9wID0gc2lyZnNvY193ZHRfZGlzYWJsZSwKPiAt ICAgICAgIC5nZXRfdGltZWxlZnQgPSBzaXJmc29jX3dkdF9nZXR0aW1lbGVmdCwKPiAtICAgICAg IC5waW5nID0gc2lyZnNvY193ZHRfdXBkYXRldGltZW91dCwKPiAtICAgICAgIC5zZXRfdGltZW91 dCA9IHNpcmZzb2Nfd2R0X3NldHRpbWVvdXQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgc3RydWN0IHdh dGNoZG9nX2RldmljZSBzaXJmc29jX3dkZCA9IHsKPiAtICAgICAgIC5pbmZvID0gJnNpcmZzb2Nf d2R0X2lkZW50LAo+IC0gICAgICAgLm9wcyA9ICZzaXJmc29jX3dkdF9vcHMsCj4gLSAgICAgICAu dGltZW91dCA9IFNJUkZTT0NfV0RUX0RFRkFVTFRfVElNRU9VVCwKPiAtICAgICAgIC5taW5fdGlt ZW91dCA9IFNJUkZTT0NfV0RUX01JTl9USU1FT1VULAo+IC0gICAgICAgLm1heF90aW1lb3V0ID0g U0lSRlNPQ19XRFRfTUFYX1RJTUVPVVQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IHNpcmZzb2Nf d2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gLXsKPiAtICAgICAgIHN0 cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gLSAgICAgICBpbnQgcmV0Owo+IC0gICAg ICAgdm9pZCBfX2lvbWVtICpiYXNlOwo+IC0KPiAtICAgICAgIGJhc2UgPSBkZXZtX3BsYXRmb3Jt X2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7Cj4gLSAgICAgICBpZiAoSVNfRVJSKGJhc2UpKQo+ IC0gICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihiYXNlKTsKPiAtCj4gLSAgICAgICB3YXRj aGRvZ19zZXRfZHJ2ZGF0YSgmc2lyZnNvY193ZGQsIChfX2ZvcmNlIHZvaWQgKiliYXNlKTsKPiAt Cj4gLSAgICAgICB3YXRjaGRvZ19pbml0X3RpbWVvdXQoJnNpcmZzb2Nfd2RkLCB0aW1lb3V0LCBk ZXYpOwo+IC0gICAgICAgd2F0Y2hkb2dfc2V0X25vd2F5b3V0KCZzaXJmc29jX3dkZCwgbm93YXlv dXQpOwo+IC0gICAgICAgc2lyZnNvY193ZGQucGFyZW50ID0gZGV2Owo+IC0KPiAtICAgICAgIHdh dGNoZG9nX3N0b3Bfb25fcmVib290KCZzaXJmc29jX3dkZCk7Cj4gLSAgICAgICB3YXRjaGRvZ19z dG9wX29uX3VucmVnaXN0ZXIoJnNpcmZzb2Nfd2RkKTsKPiAtICAgICAgIHJldCA9IGRldm1fd2F0 Y2hkb2dfcmVnaXN0ZXJfZGV2aWNlKGRldiwgJnNpcmZzb2Nfd2RkKTsKPiAtICAgICAgIGlmIChy ZXQpCj4gLSAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgICAgcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgJnNpcmZzb2Nfd2RkKTsKPiAtCj4gLSAgICAgICByZXR1cm4gMDsK PiAtfQo+IC0KPiAtI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+IC1zdGF0aWMgaW50IHNpcmZzb2Nf d2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+IC17Cj4gLSAgICAgICByZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBzaXJmc29jX3dkdF9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZGQgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiAtCj4gLSAgICAgICAvKgo+IC0gICAgICAgICogTk9URTogU2luY2Ug dGltZXIgY29udHJvbGxlciByZWdpc3RlcnMgc2V0dGluZ3MgYXJlIHNhdmVkCj4gLSAgICAgICAg KiBhbmQgcmVzdG9yZWQgYmFjayBieSB0aGUgdGltZXItcHJpbWEyLmMsIHNvIHdlIG5lZWQgbm90 Cj4gLSAgICAgICAgKiB1cGRhdGUgV0Qgc2V0dGluZ3MgZXhjZXB0IHJlZnJlc2hpbmcgdGltZW91 dC4KPiAtICAgICAgICAqLwo+IC0gICAgICAgc2lyZnNvY193ZHRfdXBkYXRldGltZW91dCh3ZGQp Owo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLSNlbmRpZgo+IC0KPiAtc3RhdGljIFNJ TVBMRV9ERVZfUE1fT1BTKHNpcmZzb2Nfd2R0X3BtX29wcywKPiAtICAgICAgICAgICAgICAgc2ly ZnNvY193ZHRfc3VzcGVuZCwgc2lyZnNvY193ZHRfcmVzdW1lKTsKPiAtCj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNpcmZzb2Nfd2R0X29mX21hdGNoW10gPSB7Cj4gLSAgICAg ICB7IC5jb21wYXRpYmxlID0gInNpcmYscHJpbWEyLXRpY2sifSwKPiAtICAgICAgIHt9LAo+IC19 Owo+IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaXJmc29jX3dkdF9vZl9tYXRjaCk7Cj4gLQo+ IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaXJmc29jX3dkdF9kcml2ZXIgPSB7Cj4g LSAgICAgICAuZHJpdmVyID0gewo+IC0gICAgICAgICAgICAgICAubmFtZSA9ICJzaXJmc29jLXdk dCIsCj4gLSAgICAgICAgICAgICAgIC5wbSA9ICZzaXJmc29jX3dkdF9wbV9vcHMsCj4gLSAgICAg ICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHNpcmZzb2Nfd2R0X29mX21hdGNoLAo+IC0gICAg ICAgfSwKPiAtICAgICAgIC5wcm9iZSA9IHNpcmZzb2Nfd2R0X3Byb2JlLAo+IC19Owo+IC1tb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKHNpcmZzb2Nfd2R0X2RyaXZlcik7Cj4gLQo+IC1NT0RVTEVfREVT Q1JJUFRJT04oIlNpUkYgU29DIHdhdGNoZG9nIGRyaXZlciIpOwo+IC1NT0RVTEVfQVVUSE9SKCJY aWFuZ2xvbmcgRHUgPFhpYW5nbG9uZy5EdUBjc3IuY29tPiIpOwo+IC1NT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7Cj4gLU1PRFVMRV9BTElBUygicGxhdGZvcm06c2lyZnNvYy13ZHQiKTsKPiAtLQo+ IDIuMjkuMgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==