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 373CDC3F6B0 for ; Thu, 11 Aug 2022 06:34:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234150AbiHKGd7 (ORCPT ); Thu, 11 Aug 2022 02:33:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40840 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234130AbiHKGdy (ORCPT ); Thu, 11 Aug 2022 02:33:54 -0400 Received: from lelv0142.ext.ti.com (lelv0142.ext.ti.com [198.47.23.249]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C50789CCF; Wed, 10 Aug 2022 23:33:53 -0700 (PDT) Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id 27B6XfMu044921; Thu, 11 Aug 2022 01:33:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1660199621; bh=yzK2an5BKyP+0RYoMBaTeudHFE1F2Hqxri5uvYv3AHA=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=o83SXv8ke8Ue04/DoJa2xxkmuhw2LWiif313DydEdDoA9UcQpz8xMGSwP3KmwIucR A/gvLlfYz7tQDDo5DDC7x28NkE6a5PU18UlsChxNhwC96040lpWSyd35q7cI2w7IHw iIUPbRkfQt8Qh0CtOrvo7Ku5ZQT9bbQptZchPejk= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 27B6XfHj043858 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Aug 2022 01:33:41 -0500 Received: from DFLE106.ent.ti.com (10.64.6.27) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14; Thu, 11 Aug 2022 01:33:40 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE106.ent.ti.com (10.64.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14 via Frontend Transport; Thu, 11 Aug 2022 01:33:40 -0500 Received: from ubuntu (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 27B6XVEY026502; Thu, 11 Aug 2022 01:33:33 -0500 Date: Wed, 10 Aug 2022 23:33:28 -0700 From: Matt Ranostay To: Lee Jones CC: , , , , , Keerthy Subject: Re: [PATCH 2/4] MFD: TPS6594x: Add new mfd device for TPS6594x PMIC Message-ID: References: <20220805064352.793918-1-mranostay@ti.com> <20220805064352.793918-3-mranostay@ti.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org On Wed, Aug 10, 2022 at 12:27:25PM +0100, Lee Jones wrote: > On Thu, 04 Aug 2022, Matt Ranostay wrote: > > > From: Keerthy > > > > The TPS6594x chip is a PMIC, and contains the following components: > > > > - Regulators > > - GPIO controller > > - RTC > > > > However initially only RTC is supported. > > > > Signed-off-by: Keerthy > > Signed-off-by: Matt Ranostay > > --- > > drivers/mfd/Kconfig | 14 +++++ > > drivers/mfd/Makefile | 1 + > > drivers/mfd/tps6594x.c | 106 +++++++++++++++++++++++++++++++++++ > > include/linux/mfd/tps6594x.h | 66 ++++++++++++++++++++++ > > 4 files changed, 187 insertions(+) > > create mode 100644 drivers/mfd/tps6594x.c > > create mode 100644 include/linux/mfd/tps6594x.h > > > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > > index abb58ab1a1a4..cfb5b3d66b76 100644 > > --- a/drivers/mfd/Kconfig > > +++ b/drivers/mfd/Kconfig > > @@ -1547,6 +1547,20 @@ config MFD_TI_LP873X > > This driver can also be built as a module. If so, the module > > will be called lp873x. > > > > +config MFD_TPS6594X > > + tristate "TI TPS6594X Power Management IC" > > + depends on I2C > > + select MFD_CORE > > + select REGMAP_I2C > > + help > > + If you say yes here then you get support for the TPS6594X series of > > + Power Management Integrated Circuits (PMIC). > > + These include voltage regulators, RTS, configurable > > + General Purpose Outputs (GPO) that are used in portable devices. > > + > > + This driver can also be built as a module. If so, the module > > + will be called tps7694x. > > + > > config MFD_TI_LP87565 > > tristate "TI LP87565 Power Management IC" > > depends on I2C && OF > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > > index 858cacf659d6..7ff6a8a57d55 100644 > > --- a/drivers/mfd/Makefile > > +++ b/drivers/mfd/Makefile > > @@ -105,6 +105,7 @@ obj-$(CONFIG_MFD_TPS65910) += tps65910.o > > obj-$(CONFIG_MFD_TPS65912) += tps65912-core.o > > obj-$(CONFIG_MFD_TPS65912_I2C) += tps65912-i2c.o > > obj-$(CONFIG_MFD_TPS65912_SPI) += tps65912-spi.o > > +obj-$(CONFIG_MFD_TPS6594X) += tps6594x.o > > obj-$(CONFIG_MENELAUS) += menelaus.o > > > > obj-$(CONFIG_TWL4030_CORE) += twl-core.o twl4030-irq.o twl6030-irq.o > > diff --git a/drivers/mfd/tps6594x.c b/drivers/mfd/tps6594x.c > > new file mode 100644 > > index 000000000000..519162cc1fbe > > --- /dev/null > > +++ b/drivers/mfd/tps6594x.c > > @@ -0,0 +1,106 @@ > > +// SPDX-License-Identifier: GPL-2.0-or-later > > +/* > > + * tps6594x.c -- TI TPS6594x chip family multi-function driver > > No filenames in comments please. > > Also, there are too many spaces around the '--'. > > It's not a "multi-function driver" it's a PMIC Core driver. > Noted. Will change to PMIC core driver to be more concise. > > + * Copyright (C) 2022 Texas Instruments Incorporated - https://www.ti.com/ > > + * > > + * Author: Keerthy > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > Alphabetical. > > > +#include > > + > > +static const struct regmap_config tps6594x_regmap_config = { > > + .reg_bits = 8, > > + .val_bits = 8, > > + .max_register = TPS6594X_REG_MAX, > > +}; > > + > > +static const struct mfd_cell tps6594x_cells[] = { > > + { .name = "tps6594x-rtc", }, > > +}; > > Where are the rest of the devices? > > This is not an MFD with only one device. There are other devices, however there isn't any drivers currently for them just the RTC. Should there be placeholders for the gpio, and regulators even if support currently doesn't exist. > > > +static struct tps6594x *tps; > > + > > +static void tps6594x_power_off(void) > > +{ > > + regmap_write(tps->regmap, TPS6594X_FSM_NSLEEP_TRIGGERS, 0x3); > > + regmap_write(tps->regmap, TPS6594X_INT_STARTUP, 0xff); > > + regmap_write(tps->regmap, TPS6594X_INT_MISC, 0xff); > > + regmap_write(tps->regmap, TPS6594X_CONFIG_1, 0xc0); > > + regmap_write(tps->regmap, TPS6594X_FSM_I2C_TRIGGERS, 0x1); > > No magic numbers please. Define all of those values. > Will add some defines for the bitmasking to make more clear. > > +} > > + > > +static int tps6594x_probe(struct i2c_client *client, > > + const struct i2c_device_id *ids) > > +{ > > + struct tps6594x *tps6594; > > *ddata is preferred. > > > + int ret; > > + unsigned int otpid; > > + struct device_node *node = client->dev.of_node; > > Re-order these - usually 'structs' go first, then ints. > > > + tps6594 = devm_kzalloc(&client->dev, sizeof(*tps6594), GFP_KERNEL); > > + if (!tps6594) > > + return -ENOMEM; > > + > > + tps6594->dev = &client->dev; > > + > > + tps6594->regmap = devm_regmap_init_i2c(client, &tps6594x_regmap_config); > > + if (IS_ERR(tps6594->regmap)) { > > + ret = PTR_ERR(tps6594->regmap); > > + dev_err(tps6594->dev, > > + "Failed to initialize register map: %d\n", ret); > > + return ret; > > + } > > + > > + ret = regmap_read(tps6594->regmap, TPS6594X_REG_DEV_REV, &otpid); > > + if (ret) { > > + dev_err(tps6594->dev, "Failed to read OTP ID\n"); > > + return ret; > > + } > > + > > + tps6594->rev = otpid; > > + > > + i2c_set_clientdata(client, tps6594); > > + > > + ret = mfd_add_devices(tps6594->dev, PLATFORM_DEVID_AUTO, tps6594x_cells, > > + ARRAY_SIZE(tps6594x_cells), NULL, 0, NULL); > > + > > + tps = tps6594; > > + if (of_property_read_bool(node, "ti,system-power-controller")) > > + pm_power_off = tps6594x_power_off; > > You setting this up even if mfd_add_devices() fails? > > Seems wrong. > Good catch.. yes it shouldn't be setup in that case. > > + return ret; > > +} > > + > > +static const struct of_device_id of_tps6594x_match_table[] = { > > + { .compatible = "ti,tps6594x", }, > > + {} > > +}; > > +MODULE_DEVICE_TABLE(of, of_tps6594x_match_table); > > + > > +static const struct i2c_device_id tps6594x_id_table[] = { > > + { "tps6594x", 0 }, > > + { }, > > +}; > > +MODULE_DEVICE_TABLE(i2c, tps6594x_id_table); > > Remove this and use .probe_new instead please. > > > +static struct i2c_driver tps6594x_driver = { > > + .driver = { > > + .name = "tps6594x", > > + .of_match_table = of_tps6594x_match_table, > > + }, > > + .probe = tps6594x_probe, > > + .id_table = tps6594x_id_table, > > +}; > > +module_i2c_driver(tps6594x_driver); > > + > > +MODULE_AUTHOR("J Keerthy "); > > +MODULE_DESCRIPTION("TPS6594X chip family Multi-Function Device driver"); > > Not an MFD. > > > +MODULE_LICENSE("GPL"); > > diff --git a/include/linux/mfd/tps6594x.h b/include/linux/mfd/tps6594x.h > > new file mode 100644 > > index 000000000000..41349f96f013 > > --- /dev/null > > +++ b/include/linux/mfd/tps6594x.h > > @@ -0,0 +1,66 @@ > > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > > +/* > > + * tps6594x.h -- TI TPS6594x > > No filenames. > Noted. > > + * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/ > > 2016? >From internal tree likely, but copyrights should be updated. > > > + */ > > + > > +#ifndef __LINUX_MFD_TPS6594X_H > > +#define __LINUX_MFD_TPS6594X_H > > Any reason go keep the LINUX part? > Nope not any real reason. > > +#include > > + > > +/* TPS6594x chip id list */ > > "ID" > > > +#define TPS6594X 0x00 > > + > > +/* All register addresses */ > > +#define TPS6594X_REG_DEV_REV 0x01 > > +#define TPS6594X_INT_STARTUP 0x65 > > +#define TPS6594X_INT_MISC 0x66 > > +#define TPS6594X_CONFIG_1 0x7d > > +#define TPS6594X_FSM_I2C_TRIGGERS 0x85 > > +#define TPS6594X_FSM_NSLEEP_TRIGGERS 0x86 > > + > > +#define TPS6594X_RTC_SECONDS 0xb5 > > +#define TPS6594X_RTC_MINUTES 0xb6 > > +#define TPS6594X_RTC_HOURS 0xb7 > > +#define TPS6594X_RTC_DAYS 0xb8 > > +#define TPS6594X_RTC_MONTHS 0xb9 > > +#define TPS6594X_RTC_YEARS 0xba > > +#define TPS6594X_RTC_WEEKS 0xbb > > +#define TPS6594X_ALARM_SECONDS 0xbc > > +#define TPS6594X_ALARM_MINUTES 0xbd > > +#define TPS6594X_ALARM_HOURS 0xbe > > +#define TPS6594X_ALARM_DAYS 0xbf > > +#define TPS6594X_ALARM_MONTHS 0xc0 > > +#define TPS6594X_ALARM_YEARS 0xc1 > > +#define TPS6594X_RTC_CTRL_1 0xc2 > > +#define TPS6594X_RTC_CTRL_2 0xc3 > > +#define TPS6594X_RTC_STATUS 0xc4 > > +#define TPS6594X_RTC_INTERRUPTS 0xc5 > > +#define TPS6594X_REG_MAX 0xd0 > > + > > +/* Register field definitions */ > > +#define TPS6594X_DEV_REV_DEV_ID 0xff > > + > > +#define TPS6594X_RTC_CTRL_REG_GET_TIME BIT(6) > > +#define TPS6594X_RTC_CTRL_REG_STOP_RTC BIT(0) > > +#define TPS6594X_RTC_INTERRUPTS_REG_IT_ALARM BIT(3) > > + > > +#define TPS6594X_RTC_STATUS_RUN BIT(1) > > + > > +/** > > + * struct tps6594x - state holder for the tps6594x driver > > + * @dev: struct device pointer for MFD device > > + * @rev: revision of the tps6594x > > + * @lock: lock guarding the data structure > > + * @regmap: register map of the tps6594x PMIC > > + * > > + * Device data may be used to access the TPS6594X chip > > + */ > > +struct tps6594x { > > + struct device *dev; > > + u8 rev; > > + struct regmap *regmap; > > +}; > > Please test compile with W=1 enabled and fix the issues. > Thanks, Matt > > +#endif /* __LINUX_MFD_TPS6594X_H */ > > -- > Lee Jones [李琼斯] 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 0DECFC19F2D for ; Thu, 11 Aug 2022 06:39:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:CC:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xkyDpFwW8eLktj9v81gkq/p67JD/JyojTMDUgisFUBI=; b=QgRZAPCXIxlLlr 64hirqyzDti+BC7xpy508K51yoROqYMw6UptZ0x3xIXy+/4i0QZ4rp23gFBL8mVfIkhQIqRYYcIpE J4/WhdAUhFd5bE8WBKawwu2ug2xAE/nCGfQDgUBY3jGxYO4m4SroDJK63aRp8N2850G5RIriU5lVt lpknh/9IZuJXMfNbwneiLWTSv5X9NfZ+wqCnefgRUe3jNIyHSnr7e2+P81PtBRBnMcSfSPoh6Np3E 3m/2t37N2cdDGr5GHmKmHy6Eoy8A23ZSVTmzenMN2WDDKySDehiG5pQ6kRKom6wHxR6OTo5IXOFeE F9Cgn/8D4XZgMVNRKsrw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oM1pX-007E0e-Ne; Thu, 11 Aug 2022 06:38:08 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oM1lM-007A2v-BK for linux-arm-kernel@lists.infradead.org; Thu, 11 Aug 2022 06:33:51 +0000 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id 27B6XfMu044921; Thu, 11 Aug 2022 01:33:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1660199621; bh=yzK2an5BKyP+0RYoMBaTeudHFE1F2Hqxri5uvYv3AHA=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=o83SXv8ke8Ue04/DoJa2xxkmuhw2LWiif313DydEdDoA9UcQpz8xMGSwP3KmwIucR A/gvLlfYz7tQDDo5DDC7x28NkE6a5PU18UlsChxNhwC96040lpWSyd35q7cI2w7IHw iIUPbRkfQt8Qh0CtOrvo7Ku5ZQT9bbQptZchPejk= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 27B6XfHj043858 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 11 Aug 2022 01:33:41 -0500 Received: from DFLE106.ent.ti.com (10.64.6.27) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14; Thu, 11 Aug 2022 01:33:40 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE106.ent.ti.com (10.64.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.14 via Frontend Transport; Thu, 11 Aug 2022 01:33:40 -0500 Received: from ubuntu (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 27B6XVEY026502; Thu, 11 Aug 2022 01:33:33 -0500 Date: Wed, 10 Aug 2022 23:33:28 -0700 From: Matt Ranostay To: Lee Jones CC: , , , , , Keerthy Subject: Re: [PATCH 2/4] MFD: TPS6594x: Add new mfd device for TPS6594x PMIC Message-ID: References: <20220805064352.793918-1-mranostay@ti.com> <20220805064352.793918-3-mranostay@ti.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220810_233348_638366_E343AF31 X-CRM114-Status: GOOD ( 46.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBBdWcgMTAsIDIwMjIgYXQgMTI6Mjc6MjVQTSArMDEwMCwgTGVlIEpvbmVzIHdyb3Rl Ogo+IE9uIFRodSwgMDQgQXVnIDIwMjIsIE1hdHQgUmFub3N0YXkgd3JvdGU6Cj4gCj4gPiBGcm9t OiBLZWVydGh5IDxqLWtlZXJ0aHlAdGkuY29tPgo+ID4gCj4gPiBUaGUgVFBTNjU5NHggY2hpcCBp cyBhIFBNSUMsIGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6Cj4gPiAKPiA+ IC0gUmVndWxhdG9ycwo+ID4gLSBHUElPIGNvbnRyb2xsZXIKPiA+IC0gUlRDCj4gPiAKPiA+IEhv d2V2ZXIgaW5pdGlhbGx5IG9ubHkgUlRDIGlzIHN1cHBvcnRlZC4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogS2VlcnRoeSA8ai1rZWVydGh5QHRpLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE1hdHQg UmFub3N0YXkgPG1yYW5vc3RheUB0aS5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL21mZC9LY29u ZmlnICAgICAgICAgIHwgIDE0ICsrKysrCj4gPiAgZHJpdmVycy9tZmQvTWFrZWZpbGUgICAgICAg ICB8ICAgMSArCj4gPiAgZHJpdmVycy9tZmQvdHBzNjU5NHguYyAgICAgICB8IDEwNiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIGluY2x1ZGUvbGludXgvbWZkL3RwczY1 OTR4LmggfCAgNjYgKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDQgZmlsZXMgY2hhbmdlZCwg MTg3IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZmQvdHBz NjU5NHguYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21mZC90cHM2NTk0 eC5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9t ZmQvS2NvbmZpZwo+ID4gaW5kZXggYWJiNThhYjFhMWE0Li5jZmI1YjNkNjZiNzYgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCj4gPiArKysgYi9kcml2ZXJzL21mZC9LY29uZmln Cj4gPiBAQCAtMTU0Nyw2ICsxNTQ3LDIwIEBAIGNvbmZpZyBNRkRfVElfTFA4NzNYCj4gPiAgCSAg VGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9k dWxlCj4gPiAgCSAgd2lsbCBiZSBjYWxsZWQgbHA4NzN4Lgo+ID4gIAo+ID4gK2NvbmZpZyBNRkRf VFBTNjU5NFgKPiA+ICsJdHJpc3RhdGUgIlRJIFRQUzY1OTRYIFBvd2VyIE1hbmFnZW1lbnQgSUMi Cj4gPiArCWRlcGVuZHMgb24gSTJDCj4gPiArCXNlbGVjdCBNRkRfQ09SRQo+ID4gKwlzZWxlY3Qg UkVHTUFQX0kyQwo+ID4gKwloZWxwCj4gPiArCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB0aGVuIHlv dSBnZXQgc3VwcG9ydCBmb3IgdGhlIFRQUzY1OTRYIHNlcmllcyBvZgo+ID4gKwkgIFBvd2VyIE1h bmFnZW1lbnQgSW50ZWdyYXRlZCBDaXJjdWl0cyAoUE1JQykuCj4gPiArCSAgVGhlc2UgaW5jbHVk ZSB2b2x0YWdlIHJlZ3VsYXRvcnMsIFJUUywgY29uZmlndXJhYmxlCj4gPiArCSAgR2VuZXJhbCBQ dXJwb3NlIE91dHB1dHMgKEdQTykgdGhhdCBhcmUgdXNlZCBpbiBwb3J0YWJsZSBkZXZpY2VzLgo+ ID4gKwo+ID4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJ ZiBzbywgdGhlIG1vZHVsZQo+ID4gKwkgIHdpbGwgYmUgY2FsbGVkIHRwczc2OTR4Lgo+ID4gKwo+ ID4gIGNvbmZpZyBNRkRfVElfTFA4NzU2NQo+ID4gIAl0cmlzdGF0ZSAiVEkgTFA4NzU2NSBQb3dl ciBNYW5hZ2VtZW50IElDIgo+ID4gIAlkZXBlbmRzIG9uIEkyQyAmJiBPRgo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWZkL01ha2VmaWxlIGIvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiA+IGluZGV4 IDg1OGNhY2Y2NTlkNi4uN2ZmNmE4YTU3ZDU1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9tZmQv TWFrZWZpbGUKPiA+ICsrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCj4gPiBAQCAtMTA1LDYgKzEw NSw3IEBAIG9iai0kKENPTkZJR19NRkRfVFBTNjU5MTApCSs9IHRwczY1OTEwLm8KPiA+ICBvYmot JChDT05GSUdfTUZEX1RQUzY1OTEyKQkrPSB0cHM2NTkxMi1jb3JlLm8KPiA+ICBvYmotJChDT05G SUdfTUZEX1RQUzY1OTEyX0kyQykJKz0gdHBzNjU5MTItaTJjLm8KPiA+ICBvYmotJChDT05GSUdf TUZEX1RQUzY1OTEyX1NQSSkgICs9IHRwczY1OTEyLXNwaS5vCj4gPiArb2JqLSQoQ09ORklHX01G RF9UUFM2NTk0WCkJKz0gdHBzNjU5NHgubwo+ID4gIG9iai0kKENPTkZJR19NRU5FTEFVUykJCSs9 IG1lbmVsYXVzLm8KPiA+ICAKPiA+ICBvYmotJChDT05GSUdfVFdMNDAzMF9DT1JFKQkrPSB0d2wt Y29yZS5vIHR3bDQwMzAtaXJxLm8gdHdsNjAzMC1pcnEubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbWZkL3RwczY1OTR4LmMgYi9kcml2ZXJzL21mZC90cHM2NTk0eC5jCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi41MTkxNjJjYzFmYmUKPiA+IC0tLSAv ZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvbWZkL3RwczY1OTR4LmMKPiA+IEBAIC0wLDAgKzEs MTA2IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIK PiA+ICsvKgo+ID4gKyAqIHRwczY1OTR4LmMgIC0tICBUSSBUUFM2NTk0eCBjaGlwIGZhbWlseSBt dWx0aS1mdW5jdGlvbiBkcml2ZXIKPiAKPiBObyBmaWxlbmFtZXMgaW4gY29tbWVudHMgcGxlYXNl Lgo+IAo+IEFsc28sIHRoZXJlIGFyZSB0b28gbWFueSBzcGFjZXMgYXJvdW5kIHRoZSAnLS0nLgo+ IAo+IEl0J3Mgbm90IGEgIm11bHRpLWZ1bmN0aW9uIGRyaXZlciIgaXQncyBhIFBNSUMgQ29yZSBk cml2ZXIuCj4KCk5vdGVkLiBXaWxsIGNoYW5nZSB0byBQTUlDIGNvcmUgZHJpdmVyIHRvIGJlIG1v cmUgY29uY2lzZS4KCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDIyIFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHBzOi8vd3d3LnRpLmNvbS8KPiA+ICsgKgo+ID4gKyAqIEF1dGhv cjogS2VlcnRoeSA8ai1rZWVydGh5QHRpLmNvbT4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZp Y2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jl Z21hcC5oPgo+IAo+IEFscGhhYmV0aWNhbC4KPiAKPiA+ICsjaW5jbHVkZSA8bGludXgvbWZkL3Rw czY1OTR4Lmg+Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHRw czY1OTR4X3JlZ21hcF9jb25maWcgPSB7Cj4gPiArCS5yZWdfYml0cyA9IDgsCj4gPiArCS52YWxf Yml0cyA9IDgsCj4gPiArCS5tYXhfcmVnaXN0ZXIgPSBUUFM2NTk0WF9SRUdfTUFYLAo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCB0cHM2NTk0eF9jZWxsc1td ID0gewo+ID4gKwl7IC5uYW1lID0gInRwczY1OTR4LXJ0YyIsIH0sCj4gPiArfTsKPiAKPiBXaGVy ZSBhcmUgdGhlIHJlc3Qgb2YgdGhlIGRldmljZXM/Cj4gCj4gVGhpcyBpcyBub3QgYW4gTUZEIHdp dGggb25seSBvbmUgZGV2aWNlLgoKVGhlcmUgYXJlIG90aGVyIGRldmljZXMsIGhvd2V2ZXIgdGhl cmUgaXNuJ3QgYW55IGRyaXZlcnMgY3VycmVudGx5IGZvciB0aGVtCmp1c3QgdGhlIFJUQy4gU2hv dWxkIHRoZXJlIGJlIHBsYWNlaG9sZGVycyBmb3IgdGhlIGdwaW8sIGFuZCByZWd1bGF0b3JzIGV2 ZW4KaWYgc3VwcG9ydCBjdXJyZW50bHkgZG9lc24ndCBleGlzdC4KCj4gCj4gPiArc3RhdGljIHN0 cnVjdCB0cHM2NTk0eCAqdHBzOwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHRwczY1OTR4X3Bvd2Vy X29mZih2b2lkKQo+ID4gK3sKPiA+ICsJcmVnbWFwX3dyaXRlKHRwcy0+cmVnbWFwLCBUUFM2NTk0 WF9GU01fTlNMRUVQX1RSSUdHRVJTLCAweDMpOwo+ID4gKwlyZWdtYXBfd3JpdGUodHBzLT5yZWdt YXAsIFRQUzY1OTRYX0lOVF9TVEFSVFVQLCAweGZmKTsKPiA+ICsJcmVnbWFwX3dyaXRlKHRwcy0+ cmVnbWFwLCBUUFM2NTk0WF9JTlRfTUlTQywgMHhmZik7Cj4gPiArCXJlZ21hcF93cml0ZSh0cHMt PnJlZ21hcCwgVFBTNjU5NFhfQ09ORklHXzEsIDB4YzApOwo+ID4gKwlyZWdtYXBfd3JpdGUodHBz LT5yZWdtYXAsIFRQUzY1OTRYX0ZTTV9JMkNfVFJJR0dFUlMsIDB4MSk7Cj4gCj4gTm8gbWFnaWMg bnVtYmVycyBwbGVhc2UuICBEZWZpbmUgYWxsIG9mIHRob3NlIHZhbHVlcy4KPgoKV2lsbCBhZGQg c29tZSBkZWZpbmVzIGZvciB0aGUgYml0bWFza2luZyB0byBtYWtlIG1vcmUgY2xlYXIuCgo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHRwczY1OTR4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50 ICpjbGllbnQsCj4gPiArCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkcykKPiA+ICt7 Cj4gPiArCXN0cnVjdCB0cHM2NTk0eCAqdHBzNjU5NDsKPiAKPiAqZGRhdGEgaXMgcHJlZmVycmVk Lgo+IAo+ID4gKwlpbnQgcmV0Owo+ID4gKwl1bnNpZ25lZCBpbnQgb3RwaWQ7Cj4gPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7Cj4gCj4gUmUtb3JkZXIg dGhlc2UgLSB1c3VhbGx5ICdzdHJ1Y3RzJyBnbyBmaXJzdCwgdGhlbiBpbnRzLgo+IAo+ID4gKwl0 cHM2NTk0ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCp0cHM2NTk0KSwgR0ZQ X0tFUk5FTCk7Cj4gPiArCWlmICghdHBzNjU5NCkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4g Kwo+ID4gKwl0cHM2NTk0LT5kZXYgPSAmY2xpZW50LT5kZXY7Cj4gPiArCj4gPiArCXRwczY1OTQt PnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJnRwczY1OTR4X3JlZ21hcF9j b25maWcpOwo+ID4gKwlpZiAoSVNfRVJSKHRwczY1OTQtPnJlZ21hcCkpIHsKPiA+ICsJCXJldCA9 IFBUUl9FUlIodHBzNjU5NC0+cmVnbWFwKTsKPiA+ICsJCWRldl9lcnIodHBzNjU5NC0+ZGV2LAo+ ID4gKwkJCSJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdpc3RlciBtYXA6ICVkXG4iLCByZXQpOwo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSByZWdtYXBfcmVhZCh0 cHM2NTk0LT5yZWdtYXAsIFRQUzY1OTRYX1JFR19ERVZfUkVWLCAmb3RwaWQpOwo+ID4gKwlpZiAo cmV0KSB7Cj4gPiArCQlkZXZfZXJyKHRwczY1OTQtPmRldiwgIkZhaWxlZCB0byByZWFkIE9UUCBJ RFxuIik7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXRwczY1OTQtPnJl diA9IG90cGlkOwo+ID4gKwo+ID4gKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0cHM2NTk0 KTsKPiA+ICsKPiA+ICsJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKHRwczY1OTQtPmRldiwgUExBVEZP Uk1fREVWSURfQVVUTywgdHBzNjU5NHhfY2VsbHMsCj4gPiArCQkJICAgICAgQVJSQVlfU0laRSh0 cHM2NTk0eF9jZWxscyksIE5VTEwsIDAsIE5VTEwpOwo+ID4gKwo+ID4gKwl0cHMgPSB0cHM2NTk0 Owo+ID4gKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ0aSxzeXN0ZW0tcG93ZXIt Y29udHJvbGxlciIpKQo+ID4gKwkJcG1fcG93ZXJfb2ZmID0gdHBzNjU5NHhfcG93ZXJfb2ZmOwo+ IAo+IFlvdSBzZXR0aW5nIHRoaXMgdXAgZXZlbiBpZiBtZmRfYWRkX2RldmljZXMoKSBmYWlscz8K PiAKPiBTZWVtcyB3cm9uZy4KPiAKCkdvb2QgY2F0Y2guLiB5ZXMgaXQgc2hvdWxkbid0IGJlIHNl dHVwIGluIHRoYXQgY2FzZS4KCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3RwczY1OTR4X21hdGNoX3RhYmxlW10g PSB7Cj4gPiArCXsgLmNvbXBhdGlibGUgPSAidGksdHBzNjU5NHgiLCB9LAo+ID4gKwl7fQo+ID4g K307Cj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfdHBzNjU5NHhfbWF0Y2hfdGFibGUp Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0cHM2NTk0eF9p ZF90YWJsZVtdID0gewo+ID4gKwl7ICJ0cHM2NTk0eCIsIDAgfSwKPiA+ICsJeyB9LAo+ID4gK307 Cj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRwczY1OTR4X2lkX3RhYmxlKTsKPiAKPiBS ZW1vdmUgdGhpcyBhbmQgdXNlIC5wcm9iZV9uZXcgaW5zdGVhZCBwbGVhc2UuCj4gCj4gPiArc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIHRwczY1OTR4X2RyaXZlciA9IHsKPiA+ICsJLmRyaXZlcgk9 IHsKPiA+ICsJCS5uYW1lCT0gInRwczY1OTR4IiwKPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9m X3RwczY1OTR4X21hdGNoX3RhYmxlLAo+ID4gKwl9LAo+ID4gKwkucHJvYmUJCT0gdHBzNjU5NHhf cHJvYmUsCj4gPiArCS5pZF90YWJsZQk9IHRwczY1OTR4X2lkX3RhYmxlLAo+ID4gK307Cj4gPiAr bW9kdWxlX2kyY19kcml2ZXIodHBzNjU5NHhfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVU SE9SKCJKIEtlZXJ0aHkgPGota2VlcnRoeUB0aS5jb20+Iik7Cj4gPiArTU9EVUxFX0RFU0NSSVBU SU9OKCJUUFM2NTk0WCBjaGlwIGZhbWlseSBNdWx0aS1GdW5jdGlvbiBEZXZpY2UgZHJpdmVyIik7 Cj4gCj4gTm90IGFuIE1GRC4KPiAKPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdHBzNjU5NHguaCBiL2luY2x1ZGUvbGludXgvbWZk L3RwczY1OTR4LmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAw MDAuLjQxMzQ5Zjk2ZjAxMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvaW5jbHVkZS9saW51 eC9tZmQvdHBzNjU5NHguaAo+ID4gQEAgLTAsMCArMSw2NiBAQAo+ID4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCj4gPiArLyoKPiA+ICsgKiB0cHM2NTk0 eC5oICAtLSAgVEkgVFBTNjU5NHgKPiAKPiBObyBmaWxlbmFtZXMuCj4gCgpOb3RlZC4KCj4gPiAr ICogQ29weXJpZ2h0IChDKSAyMDE2IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0 dHBzOi8vd3d3LnRpLmNvbS8KPiAKPiAyMDE2PwoKRnJvbSBpbnRlcm5hbCB0cmVlIGxpa2VseSwg YnV0IGNvcHlyaWdodHMgc2hvdWxkIGJlIHVwZGF0ZWQuCgo+IAo+ID4gKyAqLwo+ID4gKwo+ID4g KyNpZm5kZWYgX19MSU5VWF9NRkRfVFBTNjU5NFhfSAo+ID4gKyNkZWZpbmUgX19MSU5VWF9NRkRf VFBTNjU5NFhfSAo+IAo+IEFueSByZWFzb24gZ28ga2VlcCB0aGUgTElOVVggcGFydD8KPiAKCk5v cGUgbm90IGFueSByZWFsIHJlYXNvbi4KCj4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4KPiA+ ICsKPiA+ICsvKiBUUFM2NTk0eCBjaGlwIGlkIGxpc3QgKi8KPiAKPiAiSUQiCj4gCj4gPiArI2Rl ZmluZSBUUFM2NTk0WAkJCTB4MDAKPiA+ICsKPiA+ICsvKiBBbGwgcmVnaXN0ZXIgYWRkcmVzc2Vz ICovCj4gPiArI2RlZmluZSBUUFM2NTk0WF9SRUdfREVWX1JFVgkJCTB4MDEKPiA+ICsjZGVmaW5l IFRQUzY1OTRYX0lOVF9TVEFSVFVQCQkJMHg2NQo+ID4gKyNkZWZpbmUgVFBTNjU5NFhfSU5UX01J U0MJCQkweDY2Cj4gPiArI2RlZmluZSBUUFM2NTk0WF9DT05GSUdfMQkJCTB4N2QKPiA+ICsjZGVm aW5lIFRQUzY1OTRYX0ZTTV9JMkNfVFJJR0dFUlMJCTB4ODUKPiA+ICsjZGVmaW5lIFRQUzY1OTRY X0ZTTV9OU0xFRVBfVFJJR0dFUlMJCTB4ODYKPiA+ICsKPiA+ICsjZGVmaW5lIFRQUzY1OTRYX1JU Q19TRUNPTkRTCQkJMHhiNQo+ID4gKyNkZWZpbmUgVFBTNjU5NFhfUlRDX01JTlVURVMJCQkweGI2 Cj4gPiArI2RlZmluZSBUUFM2NTk0WF9SVENfSE9VUlMJCQkweGI3Cj4gPiArI2RlZmluZSBUUFM2 NTk0WF9SVENfREFZUwkJCTB4YjgKPiA+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19NT05USFMJCQkw eGI5Cj4gPiArI2RlZmluZSBUUFM2NTk0WF9SVENfWUVBUlMJCQkweGJhCj4gPiArI2RlZmluZSBU UFM2NTk0WF9SVENfV0VFS1MJCQkweGJiCj4gPiArI2RlZmluZSBUUFM2NTk0WF9BTEFSTV9TRUNP TkRTCQkJMHhiYwo+ID4gKyNkZWZpbmUgVFBTNjU5NFhfQUxBUk1fTUlOVVRFUwkJCTB4YmQKPiA+ ICsjZGVmaW5lIFRQUzY1OTRYX0FMQVJNX0hPVVJTCQkJMHhiZQo+ID4gKyNkZWZpbmUgVFBTNjU5 NFhfQUxBUk1fREFZUwkJCTB4YmYKPiA+ICsjZGVmaW5lIFRQUzY1OTRYX0FMQVJNX01PTlRIUwkJ CTB4YzAKPiA+ICsjZGVmaW5lIFRQUzY1OTRYX0FMQVJNX1lFQVJTCQkJMHhjMQo+ID4gKyNkZWZp bmUgVFBTNjU5NFhfUlRDX0NUUkxfMQkJCTB4YzIKPiA+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19D VFJMXzIJCQkweGMzCj4gPiArI2RlZmluZSBUUFM2NTk0WF9SVENfU1RBVFVTCQkJMHhjNAo+ID4g KyNkZWZpbmUgVFBTNjU5NFhfUlRDX0lOVEVSUlVQVFMJCQkweGM1Cj4gPiArI2RlZmluZSBUUFM2 NTk0WF9SRUdfTUFYCQkJMHhkMAo+ID4gKwo+ID4gKy8qIFJlZ2lzdGVyIGZpZWxkIGRlZmluaXRp b25zICovCj4gPiArI2RlZmluZSBUUFM2NTk0WF9ERVZfUkVWX0RFVl9JRAkJCTB4ZmYKPiA+ICsK PiA+ICsjZGVmaW5lIFRQUzY1OTRYX1JUQ19DVFJMX1JFR19HRVRfVElNRQkJQklUKDYpCj4gPiAr I2RlZmluZSBUUFM2NTk0WF9SVENfQ1RSTF9SRUdfU1RPUF9SVEMJCUJJVCgwKQo+ID4gKyNkZWZp bmUgVFBTNjU5NFhfUlRDX0lOVEVSUlVQVFNfUkVHX0lUX0FMQVJNCUJJVCgzKQo+ID4gKwo+ID4g KyNkZWZpbmUgVFBTNjU5NFhfUlRDX1NUQVRVU19SVU4JCQlCSVQoMSkKPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBzdHJ1Y3QgdHBzNjU5NHggLSBzdGF0ZSBob2xkZXIgZm9yIHRoZSB0cHM2NTk0eCBk cml2ZXIKPiA+ICsgKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgZm9yIE1GRCBkZXZpY2UK PiA+ICsgKiBAcmV2OiByZXZpc2lvbiBvZiB0aGUgdHBzNjU5NHgKPiA+ICsgKiBAbG9jazogbG9j ayBndWFyZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUKPiA+ICsgKiBAcmVnbWFwOiByZWdpc3RlciBt YXAgb2YgdGhlIHRwczY1OTR4IFBNSUMKPiA+ICsgKgo+ID4gKyAqIERldmljZSBkYXRhIG1heSBi ZSB1c2VkIHRvIGFjY2VzcyB0aGUgVFBTNjU5NFggY2hpcAo+ID4gKyAqLwo+ID4gK3N0cnVjdCB0 cHM2NTk0eCB7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICsJdTggcmV2Owo+ID4gKwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4gPiArfTsKPiAKPiBQbGVhc2UgdGVzdCBjb21waWxlIHdp dGggVz0xIGVuYWJsZWQgYW5kIGZpeCB0aGUgaXNzdWVzLgo+CgpUaGFua3MsCgpNYXR0Cgo+ID4g KyNlbmRpZiAvKiBfX0xJTlVYX01GRF9UUFM2NTk0WF9IICovCj4gCj4gLS0gCj4gTGVlIEpvbmVz IFvmnY7nkLzmlq9dCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg==