From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64E533AE1A4; Tue, 31 Mar 2026 11:29:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774956564; cv=none; b=MKV2B3JFGrDF3FmSFnDApBHMCxv6lgFsRRY1o/mfB/UCKDipetY9cfkC9yv3J3EMINZB3A+/agjmDq7oH/fspd32kSoU19osbaGri0jlPQAudoM1aiMvmq6g/CzYq++JxxPOmeFSRvdoJBaDw/9M0X6VYbqGNxEV921SAqe/KgU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774956564; c=relaxed/simple; bh=S/vMHtpXmmwINoW98j8tfDkxvqXu7f2o4UFRAH921GM=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=AabTiRA73gzJ+HZfoZnnsFB5E8qgL1JT6BshFtlTLiiU7X6yNnp+S/UmSJByzThsWMX5e2d64kgHP6INWZsKg7xrswpWxrwEwoiAeqVrKPRLcX/rhJsRgCtsVc3EEj6utrcKNu1Y/CHyU9JiEDg/jaKwL5OD7gQFVGfDWTjLOa4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ufX/9lvJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ufX/9lvJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA522C2BCB5; Tue, 31 Mar 2026 11:29:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774956564; bh=S/vMHtpXmmwINoW98j8tfDkxvqXu7f2o4UFRAH921GM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ufX/9lvJw9d25VwcF3VjDq/OD4oVn03acEo3fyAgqixpxoawSFmBBZ7blTgVReEqT BDpF0Ygb/kS1ZeFQ6/c6RIaAlSZzJEgnh4J/iQBB4pgtP0OMl9wZs5kSoCwg9RzXSd 9NrIj4+rzcS42RbYBAVV7amBu1onxzFcxjmtMiDRFyU6W9nVOzspV8LCnNBS1hWWNc 2YuRCbQg1fw4d7bvC76wENH/jU5NxsCAVYdCixcvYW29FwGdvZhYtBHH2EW1UlP8KA L9l3kCQYRq+GpoBOn31Z7YJarIvkghuuoYr5gxQQAxCtLiaFPRNa1IQHieE6WDZt+Y 3s2xDJri0LwfA== Date: Tue, 31 Mar 2026 12:29:18 +0100 From: Lee Jones To: Lakshay Piplani Cc: linux-kernel@vger.kernel.org, linux-i3c@lists.infradead.org, alexandre.belloni@bootlin.com, krzk+dt@kernel.org, robh@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, broonie@kernel.org, Frank.Li@nxp.com, lgirdwood@gmail.com, vikash.bansal@nxp.com, priyanka.jain@nxp.com, aman.kumarpandey@nxp.com Subject: Re: [PATCH v8 4/7] mfd: p3h2x4x: Add driver for NXP P3H2x4x i3c hub and on-die regulator Message-ID: <20260331112918.GD3795166@google.com> References: <20260323062737.886728-1-lakshay.piplani@nxp.com> <20260323062737.886728-5-lakshay.piplani@nxp.com> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20260323062737.886728-5-lakshay.piplani@nxp.com> On Mon, 23 Mar 2026, Lakshay Piplani wrote: > From: Aman Kumar Pandey > > Add core MFD support for the NXP P3H2x4x (P3H2440/P3H2441/P3H2840/P3H2841) > family of multiport I3C hub devices. These devices connect to a host via > I3C/I2C/SMBus and expose multiple downstream target ports. > > Signed-off-by: Aman Kumar Pandey > Signed-off-by: Vikash Bansal > > --- > Changes in v8: > - No change > > Changes in v7: > - Use new config I3C_OR_I2C > > Changes in v6: > - No change > > Changes in v5: > - Corrected the ordering in the Makefile and Kconfig for MFD_P3H2X4X > - Updated dev_err_probe() for regmap_init failure. > - Updated module description > > Changes in v4: > - Split the driver into three separate patches(mfd, regulator and I3C hub) > - Added support for NXP P3H2x4x MFD functionality > --- > --- > MAINTAINERS | 2 + > drivers/mfd/Kconfig | 13 ++++ > drivers/mfd/Makefile | 1 + > drivers/mfd/p3h2840.c | 125 ++++++++++++++++++++++++++++++++++++ > include/linux/mfd/p3h2840.h | 27 ++++++++ > 5 files changed, 168 insertions(+) > create mode 100644 drivers/mfd/p3h2840.c > create mode 100644 include/linux/mfd/p3h2840.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index c72976dbdf31..4f67fe64c833 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -19101,6 +19101,8 @@ L: linux-kernel@vger.kernel.org > L: linux-i3c-owner@lists.infradead.org > S: Maintained > F: Documentation/devicetree/bindings/i3c/nxp,p3h2840.yaml > +F: drivers/mfd/p3h2840.c > +F: include/linux/mfd/p3h2840.h > > NXP PF5300/PF5301/PF5302 PMIC REGULATOR DEVICE DRIVER > M: Woodrow Douglass > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 7192c9d1d268..14f4736683a1 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -617,6 +617,19 @@ config MFD_MX25_TSADC > i.MX25 processors. They consist of a conversion queue for general > purpose ADC and a queue for Touchscreens. > > +config MFD_P3H2X4X > + tristate "NXP P3H2X4X I3C Hub Device" > + depends on I3C_OR_I2C > + select MFD_CORE > + select REGMAP_I3C > + select REGMAP_I2C Please use a single tab to indent config attributes, and a tab plus two spaces for the help text. Also, if 'I3C' is disabled but 'I2C' is enabled, unconditionally selecting 'REGMAP_I3C' could result in unmet dependencies. Should these selects be made conditional? > + help > + Enable Support for NXP P3H244x/P3H284x I3C HUB device using I3C/I2C > + communication interface. > + > + This driver provides support for I3C hub and regulator, each subdriver > + can be enabled independently depending on the required functionality. > + > config MFD_PF1550 > tristate "NXP PF1550 PMIC Support" > depends on I2C=y && OF > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index e75e8045c28a..aaadf50fedf4 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -122,6 +122,7 @@ obj-$(CONFIG_MFD_MC13XXX) += mc13xxx-core.o > obj-$(CONFIG_MFD_MC13XXX_SPI) += mc13xxx-spi.o > obj-$(CONFIG_MFD_MC13XXX_I2C) += mc13xxx-i2c.o > > +obj-$(CONFIG_MFD_P3H2X4X) += p3h2840.o No spaces before tabs. > obj-$(CONFIG_MFD_PF1550) += pf1550.o > > obj-$(CONFIG_MFD_NCT6694) += nct6694.o > diff --git a/drivers/mfd/p3h2840.c b/drivers/mfd/p3h2840.c > new file mode 100644 > index 000000000000..65090a09f7c6 > --- /dev/null > +++ b/drivers/mfd/p3h2840.c > @@ -0,0 +1,125 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright 2025 NXP This is quite out of date at this point. > + * P3H2x4x i3c hub and regulator device. > + */ > + > +#include > +#include > +#include > +#include > +#include Alphabetical. > +static const struct mfd_cell p3h2x4x_devs[] = { > + { > + .name = "p3h2x4x-regulator", > + }, > + { > + .name = "p3h2x4x-i3c-hub", > + }, > +}; > + > +static const struct regmap_config p3h2x4x_regmap_config = { > + .reg_bits = P3H2x4x_REG_BITS, Please use standard uppercase for macro names (e.g., 'P3H2X4X_REG_BITS'). > + .val_bits = P3H2x4x_VAL_BITS, > + .max_register = 0xFF, > +}; > + > +static int p3h2x4x_device_probe_i3c(struct i3c_device *i3cdev) This probe function and 'p3h2x4x_device_probe_i2c()' are nearly identical. Could we refactor the common logic into a single generic helper function? > +{ > + struct p3h2x4x_dev *p3h2x4x; > + int ret; > + > + p3h2x4x = devm_kzalloc(&i3cdev->dev, sizeof(*p3h2x4x), GFP_KERNEL); > + if (!p3h2x4x) > + return -ENOMEM; > + > + i3cdev_set_drvdata(i3cdev, p3h2x4x); > + > + p3h2x4x->regmap = devm_regmap_init_i3c(i3cdev, &p3h2x4x_regmap_config); > + if (IS_ERR(p3h2x4x->regmap)) > + return dev_err_probe(&i3cdev->dev, PTR_ERR(p3h2x4x->regmap), > + "Failed to register I3C HUB regmap\n"); > + > + p3h2x4x->is_p3h2x4x_in_i3c = true; > + p3h2x4x->i3cdev = i3cdev; > + > + ret = devm_mfd_add_devices(&i3cdev->dev, PLATFORM_DEVID_NONE, Why are you using PLATFORM_DEVID_NONE here instead of *_AUTO? > + p3h2x4x_devs, ARRAY_SIZE(p3h2x4x_devs), > + NULL, 0, NULL); > + if (ret) > + return dev_err_probe(&i3cdev->dev, ret, "Failed to add sub devices\n"); > + > + return 0; > +} > + > +static int p3h2x4x_device_probe_i2c(struct i2c_client *client) > +{ > + struct p3h2x4x_dev *p3h2x4x; > + int ret; > + > + p3h2x4x = devm_kzalloc(&client->dev, sizeof(*p3h2x4x), GFP_KERNEL); > + if (!p3h2x4x) > + return -ENOMEM; > + > + i2c_set_clientdata(client, p3h2x4x); > + > + p3h2x4x->regmap = devm_regmap_init_i2c(client, &p3h2x4x_regmap_config); > + if (IS_ERR(p3h2x4x->regmap)) > + return dev_err_probe(&client->dev, PTR_ERR(p3h2x4x->regmap), > + "Failed to register I3C HUB regmap\n"); I3C? > + > + p3h2x4x->is_p3h2x4x_in_i3c = false; > + > + ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, > + p3h2x4x_devs, ARRAY_SIZE(p3h2x4x_devs), > + NULL, 0, NULL); > + if (ret) > + return dev_err_probe(&client->dev, ret, "Failed to add sub devices\n"); > + > + return 0; > +} > + > +/* p3h2x4x ids (i3c) */ This comment doesn't add anything. Please remove it. > +static const struct i3c_device_id p3h2x4x_i3c_ids[] = { > + I3C_CLASS(I3C_DCR_HUB, NULL), > + { /* sentinel */ }, > +}; > +MODULE_DEVICE_TABLE(i3c, p3h2x4x_i3c_ids); > + > +/* p3h2x4x ids (i2c) */ And this one. > +static const struct i2c_device_id p3h2x4x_i2c_id_table[] = { > + { "nxp-i3c-hub" }, > + { /* sentinel */ } > +}; > +MODULE_DEVICE_TABLE(i2c, p3h2x4x_i2c_id_table); > + > +static const struct of_device_id p3h2x4x_i2c_of_match[] = { Too many spaces. > + { .compatible = "nxp,p3h2840", }, > + { /* sentinel */ } > +}; > + > +MODULE_DEVICE_TABLE(of, p3h2x4x_i2c_of_match); This needs to be moved up a line. It's linked with 'p3h2x4x_i2c_of_match', not 'p3h2x4x_i3c'. > +static struct i3c_driver p3h2x4x_i3c = { > + .driver = { > + .name = "p3h2x4x_i3c_drv", > + }, > + .probe = p3h2x4x_device_probe_i3c, > + .id_table = p3h2x4x_i3c_ids, > +}; > + > +static struct i2c_driver p3h2x4x_i2c = { > + .driver = { > + .name = "p3h2x4x_i2c_drv", > + .of_match_table = p3h2x4x_i2c_of_match, > + }, > + .probe = p3h2x4x_device_probe_i2c, > + .id_table = p3h2x4x_i2c_id_table, > +}; > + > +module_i3c_i2c_driver(p3h2x4x_i3c, &p3h2x4x_i2c); > + > +MODULE_AUTHOR("Aman Kumar Pandey "); > +MODULE_AUTHOR("Vikash Bansal "); > +MODULE_DESCRIPTION("P3H2x4x I3C HUB multi function driver"); > +MODULE_LICENSE("GPL"); > diff --git a/include/linux/mfd/p3h2840.h b/include/linux/mfd/p3h2840.h > new file mode 100644 > index 000000000000..cba6fa516d1e > --- /dev/null > +++ b/include/linux/mfd/p3h2840.h > @@ -0,0 +1,27 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ These should use // in header files. > +/* > + * Copyright 2025 NXP > + * This header file contain private Reg address and its bit mapping etc. > + */ > + > +#ifndef _LINUX_MFD_P3H2840_H > +#define _LINUX_MFD_P3H2840_H > + > +#include > + > +/* Device Configuration Registers */ > +#define P3H2x4x_DEV_REG_PROTECTION_CODE 0x10 > +#define P3H2x4x_REGISTERS_LOCK_CODE 0x00 > +#define P3H2x4x_REGISTERS_UNLOCK_CODE 0x69 > +#define P3H2x4x_CP1_REGISTERS_UNLOCK_CODE 0x6a Could we use standard uppercase for all macro names (e.g., 'P3H2X4X_')? > + > +/* Reg config for Regmap */ > +#define P3H2x4x_REG_BITS 8 > +#define P3H2x4x_VAL_BITS 8 > + > +struct p3h2x4x_dev { > + struct i3c_device *i3cdev; > + struct regmap *regmap; > + bool is_p3h2x4x_in_i3c; > +}; Which attributes do the child drivers actually use? -- 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 F19811061B32 for ; Tue, 31 Mar 2026 11:29:26 +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=YsMEId64jRaThCRL+HK94F+Li5gkQAhBw1AnpcTC8bs=; b=hVCZY5C6AKbYPd aR8h3aj9pklg0irZnjLT0By9Pnmgg7rGG9yr4Fz1kyhHYzl0xZGTWMaTdC6DihWvDR7erEOBIzE2+ rTsFKRkDj8jptx2XWR56a0s2npotsHC6cg1hnOOfOb2UPpekNe0l8xVgIGEC9e1w1dmBC+09QI4ss PZ8HxaD4zk2MbS8xJUs4isJ3XQvS5FvzmcUIAChjTh/7EsOO4FXrmFVTXiJBdSpdeEUI2mtZgUCeH mtz1iktzJlqGn+bbI2q5QrGEhYPWw9QzHRbO6xmMR1CTcnMhZ6Cjkm+z9wpBctgnYAMTlOrGn33NM 3CfJ+Vs3Vh2IAemZy1MA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w7XHi-0000000Crh6-30V7; Tue, 31 Mar 2026 11:29:26 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1w7XHg-0000000Crfe-3e8i for linux-i3c@lists.infradead.org; Tue, 31 Mar 2026 11:29:24 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 4CC8860132; Tue, 31 Mar 2026 11:29:24 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA522C2BCB5; Tue, 31 Mar 2026 11:29:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774956564; bh=S/vMHtpXmmwINoW98j8tfDkxvqXu7f2o4UFRAH921GM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ufX/9lvJw9d25VwcF3VjDq/OD4oVn03acEo3fyAgqixpxoawSFmBBZ7blTgVReEqT BDpF0Ygb/kS1ZeFQ6/c6RIaAlSZzJEgnh4J/iQBB4pgtP0OMl9wZs5kSoCwg9RzXSd 9NrIj4+rzcS42RbYBAVV7amBu1onxzFcxjmtMiDRFyU6W9nVOzspV8LCnNBS1hWWNc 2YuRCbQg1fw4d7bvC76wENH/jU5NxsCAVYdCixcvYW29FwGdvZhYtBHH2EW1UlP8KA L9l3kCQYRq+GpoBOn31Z7YJarIvkghuuoYr5gxQQAxCtLiaFPRNa1IQHieE6WDZt+Y 3s2xDJri0LwfA== Date: Tue, 31 Mar 2026 12:29:18 +0100 From: Lee Jones To: Lakshay Piplani Cc: linux-kernel@vger.kernel.org, linux-i3c@lists.infradead.org, alexandre.belloni@bootlin.com, krzk+dt@kernel.org, robh@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, broonie@kernel.org, Frank.Li@nxp.com, lgirdwood@gmail.com, vikash.bansal@nxp.com, priyanka.jain@nxp.com, aman.kumarpandey@nxp.com Subject: Re: [PATCH v8 4/7] mfd: p3h2x4x: Add driver for NXP P3H2x4x i3c hub and on-die regulator Message-ID: <20260331112918.GD3795166@google.com> References: <20260323062737.886728-1-lakshay.piplani@nxp.com> <20260323062737.886728-5-lakshay.piplani@nxp.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20260323062737.886728-5-lakshay.piplani@nxp.com> X-BeenThere: linux-i3c@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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org T24gTW9uLCAyMyBNYXIgMjAyNiwgTGFrc2hheSBQaXBsYW5pIHdyb3RlOgoKPiBGcm9tOiBBbWFu IEt1bWFyIFBhbmRleSA8YW1hbi5rdW1hcnBhbmRleUBueHAuY29tPgo+IAo+IEFkZCBjb3JlIE1G RCBzdXBwb3J0IGZvciB0aGUgTlhQIFAzSDJ4NHggKFAzSDI0NDAvUDNIMjQ0MS9QM0gyODQwL1Az SDI4NDEpCj4gZmFtaWx5IG9mIG11bHRpcG9ydCBJM0MgaHViIGRldmljZXMuIFRoZXNlIGRldmlj ZXMgY29ubmVjdCB0byBhIGhvc3QgdmlhCj4gSTNDL0kyQy9TTUJ1cyBhbmQgZXhwb3NlIG11bHRp cGxlIGRvd25zdHJlYW0gdGFyZ2V0IHBvcnRzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFtYW4gS3Vt YXIgUGFuZGV5IDxhbWFuLmt1bWFycGFuZGV5QG54cC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogVmlr YXNoIEJhbnNhbCA8dmlrYXNoLmJhbnNhbEBueHAuY29tPgo+IAo+IC0tLQo+IENoYW5nZXMgaW4g djg6Cj4gIC0gTm8gY2hhbmdlCj4gCj4gQ2hhbmdlcyBpbiB2NzoKPiAgLSBVc2UgbmV3IGNvbmZp ZyBJM0NfT1JfSTJDCj4gCj4gQ2hhbmdlcyBpbiB2NjoKPiAgLSBObyBjaGFuZ2UKPiAKPiBDaGFu Z2VzIGluIHY1Ogo+ICAtIENvcnJlY3RlZCB0aGUgb3JkZXJpbmcgaW4gdGhlIE1ha2VmaWxlIGFu ZCBLY29uZmlnIGZvciBNRkRfUDNIMlg0WAo+ICAtIFVwZGF0ZWQgZGV2X2Vycl9wcm9iZSgpIGZv ciByZWdtYXBfaW5pdCBmYWlsdXJlLgo+ICAtIFVwZGF0ZWQgbW9kdWxlIGRlc2NyaXB0aW9uCj4g Cj4gQ2hhbmdlcyBpbiB2NDoKPiAgLSBTcGxpdCB0aGUgZHJpdmVyIGludG8gdGhyZWUgc2VwYXJh dGUgcGF0Y2hlcyhtZmQsIHJlZ3VsYXRvciBhbmQgSTNDIGh1YikKPiAgLSBBZGRlZCBzdXBwb3J0 IGZvciBOWFAgUDNIMng0eCBNRkQgZnVuY3Rpb25hbGl0eQo+IC0tLQo+IC0tLQo+ICBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJzL21mZC9LY29uZmlnICAgICAg ICAgfCAgMTMgKysrKwo+ICBkcml2ZXJzL21mZC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwo+ICBk cml2ZXJzL21mZC9wM2gyODQwLmMgICAgICAgfCAxMjUgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIGluY2x1ZGUvbGludXgvbWZkL3AzaDI4NDAuaCB8ICAyNyArKysrKysr Kwo+ICA1IGZpbGVzIGNoYW5nZWQsIDE2OCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL21mZC9wM2gyODQwLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv bGludXgvbWZkL3AzaDI4NDAuaAo+IAo+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5U QUlORVJTCj4gaW5kZXggYzcyOTc2ZGJkZjMxLi40ZjY3ZmU2NGM4MzMgMTAwNjQ0Cj4gLS0tIGEv TUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0xOTEwMSw2ICsxOTEwMSw4IEBA IEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKPiAgTDoJbGludXgtaTNjLW93bmVyQGxp c3RzLmluZnJhZGVhZC5vcmcKPiAgUzoJTWFpbnRhaW5lZAo+ICBGOglEb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvaTNjL254cCxwM2gyODQwLnlhbWwKPiArRjoJZHJpdmVycy9tZmQv cDNoMjg0MC5jCj4gK0Y6CWluY2x1ZGUvbGludXgvbWZkL3AzaDI4NDAuaAo+ICAKPiAgTlhQIFBG NTMwMC9QRjUzMDEvUEY1MzAyIFBNSUMgUkVHVUxBVE9SIERFVklDRSBEUklWRVIKPiAgTToJV29v ZHJvdyBEb3VnbGFzcyA8d2RvdWdsYXNzQGNhcm5lZ2llcm9ib3RpY3MuY29tPgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwo+IGluZGV4IDcx OTJjOWQxZDI2OC4uMTRmNDczNjY4M2ExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWZkL0tjb25m aWcKPiArKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCj4gQEAgLTYxNyw2ICs2MTcsMTkgQEAgY29u ZmlnIE1GRF9NWDI1X1RTQURDCj4gIAkgIGkuTVgyNSBwcm9jZXNzb3JzLiBUaGV5IGNvbnNpc3Qg b2YgYSBjb252ZXJzaW9uIHF1ZXVlIGZvciBnZW5lcmFsCj4gIAkgIHB1cnBvc2UgQURDIGFuZCBh IHF1ZXVlIGZvciBUb3VjaHNjcmVlbnMuCj4gIAo+ICtjb25maWcgTUZEX1AzSDJYNFgKPiArICAg ICAgIHRyaXN0YXRlICJOWFAgUDNIMlg0WCBJM0MgSHViIERldmljZSIKPiArICAgICAgIGRlcGVu ZHMgb24gSTNDX09SX0kyQwo+ICsgICAgICAgc2VsZWN0IE1GRF9DT1JFCj4gKyAgICAgICBzZWxl Y3QgUkVHTUFQX0kzQwo+ICsgICAgICAgc2VsZWN0IFJFR01BUF9JMkMKClBsZWFzZSB1c2UgYSBz aW5nbGUgdGFiIHRvIGluZGVudCBjb25maWcgYXR0cmlidXRlcywgYW5kIGEgdGFiIHBsdXMgdHdv IHNwYWNlcwpmb3IgdGhlIGhlbHAgdGV4dC4KCkFsc28sIGlmICdJM0MnIGlzIGRpc2FibGVkIGJ1 dCAnSTJDJyBpcyBlbmFibGVkLCB1bmNvbmRpdGlvbmFsbHkgc2VsZWN0aW5nCidSRUdNQVBfSTND JyBjb3VsZCByZXN1bHQgaW4gdW5tZXQgZGVwZW5kZW5jaWVzLiBTaG91bGQgdGhlc2Ugc2VsZWN0 cyBiZSBtYWRlCmNvbmRpdGlvbmFsPwoKPiArICAgICAgIGhlbHAKPiArICAgICAgICAgRW5hYmxl IFN1cHBvcnQgZm9yIE5YUCBQM0gyNDR4L1AzSDI4NHggSTNDIEhVQiBkZXZpY2UgdXNpbmcgSTND L0kyQwo+ICsgICAgICAgICBjb21tdW5pY2F0aW9uIGludGVyZmFjZS4KPiArCj4gKyAgICAgICAg IFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIEkzQyBodWIgYW5kIHJlZ3VsYXRvciwg ZWFjaCBzdWJkcml2ZXIKPiArICAgICAgICAgY2FuIGJlIGVuYWJsZWQgaW5kZXBlbmRlbnRseSBk ZXBlbmRpbmcgb24gdGhlIHJlcXVpcmVkIGZ1bmN0aW9uYWxpdHkuCj4gKwo+ICBjb25maWcgTUZE X1BGMTU1MAo+ICAJdHJpc3RhdGUgIk5YUCBQRjE1NTAgUE1JQyBTdXBwb3J0Igo+ICAJZGVwZW5k cyBvbiBJMkM9eSAmJiBPRgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2Ry aXZlcnMvbWZkL01ha2VmaWxlCj4gaW5kZXggZTc1ZTgwNDVjMjhhLi5hYWFkZjUwZmVkZjQgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9tZmQvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL21mZC9NYWtl ZmlsZQo+IEBAIC0xMjIsNiArMTIyLDcgQEAgb2JqLSQoQ09ORklHX01GRF9NQzEzWFhYKQkrPSBt YzEzeHh4LWNvcmUubwo+ICBvYmotJChDT05GSUdfTUZEX01DMTNYWFhfU1BJKQkrPSBtYzEzeHh4 LXNwaS5vCj4gIG9iai0kKENPTkZJR19NRkRfTUMxM1hYWF9JMkMpCSs9IG1jMTN4eHgtaTJjLm8K PiAgCj4gK29iai0kKENPTkZJR19NRkRfUDNIMlg0WCkgCSs9IHAzaDI4NDAubwoKTm8gc3BhY2Vz IGJlZm9yZSB0YWJzLgoKPiAgb2JqLSQoQ09ORklHX01GRF9QRjE1NTApCSs9IHBmMTU1MC5vCj4g IAo+ICBvYmotJChDT05GSUdfTUZEX05DVDY2OTQpCSs9IG5jdDY2OTQubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21mZC9wM2gyODQwLmMgYi9kcml2ZXJzL21mZC9wM2gyODQwLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjUwOTBhMDlmN2M2Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWZkL3AzaDI4NDAuYwo+IEBAIC0wLDAgKzEsMTI1IEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHly aWdodCAyMDI1IE5YUAoKVGhpcyBpcyBxdWl0ZSBvdXQgb2YgZGF0ZSBhdCB0aGlzIHBvaW50LgoK PiArICogUDNIMng0eCBpM2MgaHViIGFuZCByZWd1bGF0b3IgZGV2aWNlLgo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxsaW51eC9pM2MvbWFzdGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4K PiArI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvcDNo Mjg0MC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CgpBbHBoYWJldGljYWwuCgo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG1mZF9jZWxsIHAzaDJ4NHhfZGV2c1tdID0gewo+ICsJewo+ICsJ CS5uYW1lID0gInAzaDJ4NHgtcmVndWxhdG9yIiwKPiArCX0sCj4gKwl7Cj4gKwkJLm5hbWUgPSAi cDNoMng0eC1pM2MtaHViIiwKPiArCX0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHJlZ21hcF9jb25maWcgcDNoMng0eF9yZWdtYXBfY29uZmlnID0gewo+ICsJLnJlZ19iaXRzID0g UDNIMng0eF9SRUdfQklUUywKClBsZWFzZSB1c2Ugc3RhbmRhcmQgdXBwZXJjYXNlIGZvciBtYWNy byBuYW1lcyAoZS5nLiwgJ1AzSDJYNFhfUkVHX0JJVFMnKS4KCj4gKwkudmFsX2JpdHMgPSBQM0gy eDR4X1ZBTF9CSVRTLAo+ICsJLm1heF9yZWdpc3RlciA9IDB4RkYsCj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IHAzaDJ4NHhfZGV2aWNlX3Byb2JlX2kzYyhzdHJ1Y3QgaTNjX2RldmljZSAqaTNjZGV2 KQoKVGhpcyBwcm9iZSBmdW5jdGlvbiBhbmQgJ3AzaDJ4NHhfZGV2aWNlX3Byb2JlX2kyYygpJyBh cmUgbmVhcmx5IGlkZW50aWNhbC4KQ291bGQgd2UgcmVmYWN0b3IgdGhlIGNvbW1vbiBsb2dpYyBp bnRvIGEgc2luZ2xlIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9uPwoKPiArewo+ICsJc3RydWN0IHAz aDJ4NHhfZGV2ICpwM2gyeDR4Owo+ICsJaW50IHJldDsKPiArCj4gKwlwM2gyeDR4ID0gZGV2bV9r emFsbG9jKCZpM2NkZXYtPmRldiwgc2l6ZW9mKCpwM2gyeDR4KSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIXAzaDJ4NHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaTNjZGV2X3NldF9kcnZk YXRhKGkzY2RldiwgcDNoMng0eCk7Cj4gKwo+ICsJcDNoMng0eC0+cmVnbWFwID0gZGV2bV9yZWdt YXBfaW5pdF9pM2MoaTNjZGV2LCAmcDNoMng0eF9yZWdtYXBfY29uZmlnKTsKPiArCWlmIChJU19F UlIocDNoMng0eC0+cmVnbWFwKSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmaTNjZGV2LT5k ZXYsIFBUUl9FUlIocDNoMng0eC0+cmVnbWFwKSwKPiArCQkJCSAgICAgIkZhaWxlZCB0byByZWdp c3RlciBJM0MgSFVCIHJlZ21hcFxuIik7Cj4gKwo+ICsJcDNoMng0eC0+aXNfcDNoMng0eF9pbl9p M2MgPSB0cnVlOwo+ICsJcDNoMng0eC0+aTNjZGV2ID0gaTNjZGV2Owo+ICsKPiArCXJldCA9IGRl dm1fbWZkX2FkZF9kZXZpY2VzKCZpM2NkZXYtPmRldiwgUExBVEZPUk1fREVWSURfTk9ORSwKCldo eSBhcmUgeW91IHVzaW5nIFBMQVRGT1JNX0RFVklEX05PTkUgaGVyZSBpbnN0ZWFkIG9mICpfQVVU Tz8KCj4gKwkJCQkgICBwM2gyeDR4X2RldnMsIEFSUkFZX1NJWkUocDNoMng0eF9kZXZzKSwKPiAr CQkJCSAgIE5VTEwsIDAsIE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gZGV2X2Vycl9w cm9iZSgmaTNjZGV2LT5kZXYsIHJldCwgIkZhaWxlZCB0byBhZGQgc3ViIGRldmljZXNcbiIpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHAzaDJ4NHhfZGV2aWNlX3By b2JlX2kyYyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgcDNoMng0 eF9kZXYgKnAzaDJ4NHg7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXAzaDJ4NHggPSBkZXZtX2t6YWxs b2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnAzaDJ4NHgpLCBHRlBfS0VSTkVMKTsKPiArCWlmICgh cDNoMng0eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlpMmNfc2V0X2NsaWVudGRhdGEo Y2xpZW50LCBwM2gyeDR4KTsKPiArCj4gKwlwM2gyeDR4LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9p bml0X2kyYyhjbGllbnQsICZwM2gyeDR4X3JlZ21hcF9jb25maWcpOwo+ICsJaWYgKElTX0VSUihw M2gyeDR4LT5yZWdtYXApKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZjbGllbnQtPmRldiwg UFRSX0VSUihwM2gyeDR4LT5yZWdtYXApLAo+ICsJCQkJICAgICAiRmFpbGVkIHRvIHJlZ2lzdGVy IEkzQyBIVUIgcmVnbWFwXG4iKTsKCkkzQz8KCj4gKwo+ICsJcDNoMng0eC0+aXNfcDNoMng0eF9p bl9pM2MgPSBmYWxzZTsKPiArCj4gKwlyZXQgPSBkZXZtX21mZF9hZGRfZGV2aWNlcygmY2xpZW50 LT5kZXYsIFBMQVRGT1JNX0RFVklEX05PTkUsCj4gKwkJCQkgICBwM2gyeDR4X2RldnMsIEFSUkFZ X1NJWkUocDNoMng0eF9kZXZzKSwKPiArCQkJCSAgIE5VTEwsIDAsIE5VTEwpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmY2xpZW50LT5kZXYsIHJldCwgIkZhaWxlZCB0 byBhZGQgc3ViIGRldmljZXNcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBw M2gyeDR4IGlkcyAoaTNjKSAqLwoKVGhpcyBjb21tZW50IGRvZXNuJ3QgYWRkIGFueXRoaW5nLiAg UGxlYXNlIHJlbW92ZSBpdC4KCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTNjX2RldmljZV9pZCBw M2gyeDR4X2kzY19pZHNbXSA9IHsKPiArCUkzQ19DTEFTUyhJM0NfRENSX0hVQiwgTlVMTCksCj4g Kwl7IC8qIHNlbnRpbmVsICovIH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTNjLCBw M2gyeDR4X2kzY19pZHMpOwo+ICsKPiArLyogcDNoMng0eCBpZHMgKGkyYykgKi8KCkFuZCB0aGlz IG9uZS4KCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwM2gyeDR4X2kyY19p ZF90YWJsZVtdID0gewo+ICsJeyAibnhwLWkzYy1odWIiIH0sCj4gKwl7IC8qIHNlbnRpbmVsICov IH0KPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHAzaDJ4NHhfaTJjX2lkX3RhYmxl KTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICBwM2gyeDR4X2kyY19v Zl9tYXRjaFtdID0gewoKVG9vIG1hbnkgc3BhY2VzLgoKPiArCXsgLmNvbXBhdGlibGUgPSAibnhw LHAzaDI4NDAiLCB9LAo+ICsJeyAvKiBzZW50aW5lbCAqLyB9Cj4gK307Cj4gKwo+ICtNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBwM2gyeDR4X2kyY19vZl9tYXRjaCk7CgpUaGlzIG5lZWRzIHRvIGJl IG1vdmVkIHVwIGEgbGluZS4KCkl0J3MgbGlua2VkIHdpdGggJ3AzaDJ4NHhfaTJjX29mX21hdGNo Jywgbm90ICdwM2gyeDR4X2kzYycuCgo+ICtzdGF0aWMgc3RydWN0IGkzY19kcml2ZXIgcDNoMng0 eF9pM2MgPSB7Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInAzaDJ4NHhfaTNjX2RydiIs Cj4gKwl9LAo+ICsJLnByb2JlID0gcDNoMng0eF9kZXZpY2VfcHJvYmVfaTNjLAo+ICsJLmlkX3Rh YmxlID0gcDNoMng0eF9pM2NfaWRzLAo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJp dmVyIHAzaDJ4NHhfaTJjID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9ICJwM2gyeDR4 X2kyY19kcnYiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHAzaDJ4NHhfaTJjX29mX21hdGNoLAo+ ICsJfSwKPiArCS5wcm9iZSA9ICBwM2gyeDR4X2RldmljZV9wcm9iZV9pMmMsCj4gKwkuaWRfdGFi bGUgPSBwM2gyeDR4X2kyY19pZF90YWJsZSwKPiArfTsKPiArCj4gK21vZHVsZV9pM2NfaTJjX2Ry aXZlcihwM2gyeDR4X2kzYywgJnAzaDJ4NHhfaTJjKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkFt YW4gS3VtYXIgUGFuZGV5IDxhbWFuLmt1bWFycGFuZGV5QG54cC5jb20+Iik7Cj4gK01PRFVMRV9B VVRIT1IoIlZpa2FzaCBCYW5zYWwgPHZpa2FzaC5iYW5zYWxAbnhwLmNvbT4iKTsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJQM0gyeDR4IEkzQyBIVUIgbXVsdGkgZnVuY3Rpb24gZHJpdmVyIik7Cj4g K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQv cDNoMjg0MC5oIGIvaW5jbHVkZS9saW51eC9tZmQvcDNoMjg0MC5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNiYTZmYTUxNmQxZQo+IC0tLSAvZGV2L251bGwK PiArKysgYi9pbmNsdWRlL2xpbnV4L21mZC9wM2gyODQwLmgKPiBAQCAtMCwwICsxLDI3IEBACj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCgpUaGVzZSBzaG91bGQgdXNl IC8vIGluIGhlYWRlciBmaWxlcy4KCj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDI1IE5YUAo+ICsg KiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW4gcHJpdmF0ZSBSZWcgYWRkcmVzcyBhbmQgaXRzIGJp dCBtYXBwaW5nIGV0Yy4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9MSU5VWF9NRkRfUDNIMjg0MF9I Cj4gKyNkZWZpbmUgX0xJTlVYX01GRF9QM0gyODQwX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgo+ICsKPiArLyogRGV2aWNlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzICovCj4gKyNk ZWZpbmUgUDNIMng0eF9ERVZfUkVHX1BST1RFQ1RJT05fQ09ERQkJCQkweDEwCj4gKyNkZWZpbmUg UDNIMng0eF9SRUdJU1RFUlNfTE9DS19DT0RFCQkJCTB4MDAKPiArI2RlZmluZSBQM0gyeDR4X1JF R0lTVEVSU19VTkxPQ0tfQ09ERQkJCQkweDY5Cj4gKyNkZWZpbmUgUDNIMng0eF9DUDFfUkVHSVNU RVJTX1VOTE9DS19DT0RFCQkJMHg2YQoKQ291bGQgd2UgdXNlIHN0YW5kYXJkIHVwcGVyY2FzZSBm b3IgYWxsIG1hY3JvIG5hbWVzIChlLmcuLCAnUDNIMlg0WF8nKT8KCj4gKwo+ICsvKiBSZWcgY29u ZmlnIGZvciBSZWdtYXAgKi8KPiArI2RlZmluZSBQM0gyeDR4X1JFR19CSVRTCQkJCQk4Cj4gKyNk ZWZpbmUgUDNIMng0eF9WQUxfQklUUwkJCQkJOAo+ICsKPiArc3RydWN0IHAzaDJ4NHhfZGV2IHsK PiArCXN0cnVjdCBpM2NfZGV2aWNlICppM2NkZXY7Cj4gKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7 Cj4gKwlib29sIGlzX3AzaDJ4NHhfaW5faTNjOwo+ICt9OwoKV2hpY2ggYXR0cmlidXRlcyBkbyB0 aGUgY2hpbGQgZHJpdmVycyBhY3R1YWxseSB1c2U/CgotLSAKTGVlIEpvbmVzIFvmnY7nkLzmlq9d CgotLSAKbGludXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1pM2NAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWkzYwo=