From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) (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 A31BE157472 for ; Wed, 10 Apr 2024 12:35:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712752512; cv=none; b=TF9EMFOCSy5L6Cp3RusV4MCbyfU91MuJHyg+o92FsGJ/dyp/cjrsZkPibKEqtyBsfxs7aSp9a0xfetFoWMupXlOcgtYDgMpjvUxpP3phAIp8MKCAg3ctkjJ+tVKAv3xWzx/Jqhh8lI7BLt2IwXPxkaaJyiuDWiXE2IgwhtfepjQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712752512; c=relaxed/simple; bh=zIUfJWhof1UMg6uEwOAu/mj91VoIle+JxLjGJ7YPwWE=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uzA/Ez6vbIqJMMTiD9ym2otB4SH4MoHjcjKFqduo4w/WKtfBluwvd1F9g/nm1Gad9R8ItqL1tpv8jwEUwjrbj6Pj/gNRo1GMpyp3eR6WssfQO3mou8TOaQWFTo0rxmOJTG0gdmPCgWRNAhKqvkgcE3OSecRpmrAVqhIj/yaSkyw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=BKigrls3; arc=none smtp.client-ip=217.70.183.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="BKigrls3" Received: by mail.gandi.net (Postfix) with ESMTPSA id 224176000A; Wed, 10 Apr 2024 12:35:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1712752502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zshKLDyDonwwJOFV5yyCRSdib7yb+zjws8DcpnfUXkI=; b=BKigrls3jfxPWZ3a/Ku6NujZQUUa940viUX2NvVyuSDflgyRf7cQ5v5lr0GGQfVfLK7QRx eXs2SeYrU6zP0Upj2/zxGa2SOc5f+QVX83hbvX04odQHq0SPzeHMG53BZ1kDQcykmZPHBJ +gOszkziMDuE1eXeuCi3TW9H83/13Bvp44oym3Bf8rnRHvoMw29KCMk1VhpE8KFP+6KxI8 RwwI7+yF2GmBAwhcUpAGCLek7KB8naJjR8gBP2FdRLvNL+DdIjAodEccQUo6w6yZjGVhXT A96Qx4Q9SulLQG9OIRkLr0xHTKqdwRX1WQgEEByHDvBN6IqBWwBGL1O8BQ2HoA== Date: Wed, 10 Apr 2024 14:35:00 +0200 From: Herve Codina To: Saravana Kannan Cc: Geert Uytterhoeven , Rob Herring , kernel-team@android.com, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-spi@vger.kernel.org, linux-acpi@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: Re: [RFC PATCH v2 0/2] fw_devlink overlay fix Message-ID: <20240410143500.783d7eba@bootlin.com> In-Reply-To: References: <20240409053704.428336-1-saravanak@google.com> <20240409150247.61e30a86@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-redhat-linux-gnu) Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: herve.codina@bootlin.com Hi Saravana, On Tue, 9 Apr 2024 18:06:33 -0700 Saravana Kannan wrote: > On Tue, Apr 9, 2024 at 6:02 AM Herve Codina wrote: > > > > Hi Saravana, > > > > +CC Luca and Thomas > > > > On Mon, 8 Apr 2024 22:37:01 -0700 > > Saravana Kannan wrote: > > > > > Don't bother reviewing this patch. It needs to be tested and possibly > > > refactored first. > > > > > > Geert and Herve, > > > > > > This patch serious should hopefully fix both of your use cases > > > [1][2][3]. Can you please check to make sure the device links created > > > to/from the overlay devices are to/from the right ones? > > > > > > I've only compile tested it. If I made some obvious mistake, feel free > > > to fix it and give it a shot. > > > > > > Cc: Rob Herring > > > > > > [1] - https://lore.kernel.org/lkml/CAMuHMdXEnSD4rRJ-o90x4OprUacN_rJgyo8x6=9F9rZ+-KzjOg@mail.gmail.com/ > > > [2] - https://lore.kernel.org/all/20240221095137.616d2aaa@bootlin.com/ > > > [3] - https://lore.kernel.org/lkml/20240312151835.29ef62a0@bootlin.com/ > > > > > > > I tested your patches. > > > > Concerning my use cases, they fix the issue described in > > https://lore.kernel.org/all/20240221095137.616d2aaa@bootlin.com/ > > I went back and looked at the example. I'm not even sure I understand > that example. In that example at the link above, are you saying > without any changes to upstream reg_dock_sys_3v3 was listing it's > supplier as i2c5 instead of tca6424_dock_1? Why wasn't Geert's > existing changes in of_i2c_notify not sufficient? Looking at it, it > does: > rd->dn->fwnode.flags &= ~FWNODE_FLAG_NOT_DEVICE; > > Which should clear the flag for tca6424_dock_1. Can you help me > understand why it's not getting cleared? I don't really know but I can mke some asumptions. Maybe the link involved in the issue is created quite early in the overlay applying process, before the calls to the of notifier of_i2c_notify() that can clear the FWNODE_FLAG_NOT_DEVICE. The link is created by of_link_to_phandle(). This functions is triggered from of_fwnode_add_links() which is the .add_link() operation of the OF fwnode_operations. The operation is called by fw_devlink_parse_fwnode(), itself triggered by fw_devlink_link_device() each time device_add() is called. If the device_add() related to the reg_dock_sys_3v3 is called before the of_i2c_notify() related to tca6424_dock_1, the FWNODE_FLAG_NOT_DEVICE flag in tca6424_dock_1 is not cleared when of_link_to_phandle() is called. Does this scenario make sense ? > > > But not the one described in > > https://lore.kernel.org/lkml/20240312151835.29ef62a0@bootlin.com/ > > A link is still present between the i2c@600 and the PCI device. > > instead of the i2c@600 and the pci-ep-bus. > > What do you mean by PCI device here? You say the same thing in the > link, but I don't understand what you mean. Can you clarify what > exactly gets added by the overlay? Please use the fwnode name in all > the descriptions, even when talking about device links. That should > help avoid the confusion. > > Also, if you can show what the target node of the overlay looks like, > that'd help too. > > > Adding the patch clearing the FWNODE_FLAG_NOT_DEVICE in device_add() available > > at [1] on top of your patches fixes the link issue. > > With this additional patch applied, the link is present between the i2c@600 > > and the pci-ep-bus. > > I know the problem with this patch series. But to fix it properly, I > need to understand the root of the overlay node in your examples and > the target it's applied to. This is the Microchip Lan966x PCI device use case. The Lan966x is a component that can be a "standard" SoC (i.e. core CPUs and some peripherals) or as a PCI device. When in PCI device mode, the core CPUs are not available and are replaced by an endpoint PCI. The PCI host in PCI device mode has to act the code CPUs in SoC mode. In other word the PCI host has access to peripherals (PCI MMIO accesses) and has to handle each peripherals. Drivers for these peripherals are already available in the kernel (reset controller, i2c controller, network switch, clock controllers, ...) and are functional when the Lan966x is in SoC mode. In order to re-use all of these drivers, the solution was to have a Lan966x PCI driver that is probe() matching the Lan966x PCI Vendor/Device ID. This driver then load a DT overlay to described the Lan966x internal components. Basically, the base DT (the DT describing the PCI host board) has the PCI nodes between the root PCI node and the Lan966x PCI device built at runtime during the PCI bus scan. At the end of the scan, the Lan966x driver load the overlay and the final DT looks like the following: --- 8< --- soc { ... pcie@d0070000 { compatible = "marvell,armada-3700-pcie"; ... /* A bridge, created at runtime during PCI scan */ pci@0,0 { compatible = "pci11ab,100\0pciclass,060400\0pciclass,0604"; ... /* The Lan966x PCI device, created at runtime during PCI scan */ dev@0,0 { compatible = "pci1055,9660\0pciclass,020000\0pciclass,0200"; ... /* * This node is added by the overlay * during lan966x PCI driver probe() */ pci-ep-bus@0 { compatible = "simple-bus"; ... flx0: flexcom@e0040000 { compatible = "atmel,sama5d2-flexcom"; reg = <0xe0040000 0x100>; ranges = <0x0 0xe0040000 0x800>; ... i2c_lan966x: i2c@600 { compatible = "microchip,lan966x-i2c"; reg = <0x600 0x200>; ... }; }; ... }; }; }; }; }; --- 8< --- Without clearing FWNODE_FLAG_NOT_DEVICE, a link is created between i2c@600 and dev@0,0. With the FWNODE_FLAG_NOT_DEVICE cleared in device_add(), the link is created between i2c@600 and pci-ep-bus@0. flexcom@e0040000 is a MFD device. In the lan966x PCI driver, the overlay is applied using the following: --- 8< --- static int lan966x_pci_load_overlay(struct lan966x_pci *data) { u32 dtbo_size = __dtbo_lan966x_pci_end - __dtbo_lan966x_pci_begin; void *dtbo_start = __dtbo_lan966x_pci_begin; int ret; ret = of_overlay_fdt_apply(dtbo_start, dtbo_size, &data->ovcs_id, data->dev->of_node); if (ret) return ret; return 0; } static int lan966x_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) { struct device *dev = &pdev->dev; struct lan966x_pci *data; ... data->dev = dev; ... ret = lan966x_pci_load_overlay(data); if (ret) return ret; ... ret = of_platform_default_populate(dev->of_node, NULL, dev); if (ret) goto err_unload_overlay; return 0; ... } --- 8< --- Hope my explanations were clear enough and answered your question. Feel free to ask some more details if needed. I provided only extractions of the full dtso file. If you need some more information (all nodes, all properties) feel free to ask. Best regards, Hervé 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 0A874CD11C2 for ; Wed, 10 Apr 2024 12:35:25 +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:MIME-Version:References:In-Reply-To: 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=mb3d7asvUF9Kc80AcJ/0sSH4fGDcftY5lB38IdCe+KQ=; b=woEa4I8Yo5Shl4 KEfZz8iRK4NA6FqRjR8vskicj7sFWdzzznOboD50YB1Tl1AcCOTPqGpwR38Y+/2kBnbk9u+Eg58Qo MRJVV7YMazIjZhYHrSm3Vr7bZn44QyF5C+6XLn52b4spyk141lSg88xs1qB2RKILxzsrqs/nqHUPK 57U1+IfG9sPEPyu58GJAksf77XElQIzVRWBlcmcGcVO7237elSnfkDYs5nUBUi4Hjlrrda95ZWcCj LqvQ4VypkwImqPxEFpxD8Pzq6BQKLfGXucC88G/SPq67UHtr61EK8K/xA2//lziIyv0UqworWyiog yxpsT5PQkX91K/iTYLuQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruXAU-00000006teG-0g07; Wed, 10 Apr 2024 12:35:10 +0000 Received: from relay3-d.mail.gandi.net ([2001:4b98:dc4:8::223]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1ruXAQ-00000006tda-1IHl for linux-arm-kernel@lists.infradead.org; Wed, 10 Apr 2024 12:35:08 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 224176000A; Wed, 10 Apr 2024 12:35:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1712752502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zshKLDyDonwwJOFV5yyCRSdib7yb+zjws8DcpnfUXkI=; b=BKigrls3jfxPWZ3a/Ku6NujZQUUa940viUX2NvVyuSDflgyRf7cQ5v5lr0GGQfVfLK7QRx eXs2SeYrU6zP0Upj2/zxGa2SOc5f+QVX83hbvX04odQHq0SPzeHMG53BZ1kDQcykmZPHBJ +gOszkziMDuE1eXeuCi3TW9H83/13Bvp44oym3Bf8rnRHvoMw29KCMk1VhpE8KFP+6KxI8 RwwI7+yF2GmBAwhcUpAGCLek7KB8naJjR8gBP2FdRLvNL+DdIjAodEccQUo6w6yZjGVhXT A96Qx4Q9SulLQG9OIRkLr0xHTKqdwRX1WQgEEByHDvBN6IqBWwBGL1O8BQ2HoA== Date: Wed, 10 Apr 2024 14:35:00 +0200 From: Herve Codina To: Saravana Kannan Cc: Geert Uytterhoeven , Rob Herring , kernel-team@android.com, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-spi@vger.kernel.org, linux-acpi@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: Re: [RFC PATCH v2 0/2] fw_devlink overlay fix Message-ID: <20240410143500.783d7eba@bootlin.com> In-Reply-To: References: <20240409053704.428336-1-saravanak@google.com> <20240409150247.61e30a86@bootlin.com> Organization: Bootlin X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-redhat-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: herve.codina@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240410_053506_751620_F3AE2D2E X-CRM114-Status: GOOD ( 44.87 ) 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 SGkgU2FyYXZhbmEsCgpPbiBUdWUsIDkgQXByIDIwMjQgMTg6MDY6MzMgLTA3MDAKU2FyYXZhbmEg S2FubmFuIDxzYXJhdmFuYWtAZ29vZ2xlLmNvbT4gd3JvdGU6Cgo+IE9uIFR1ZSwgQXByIDksIDIw MjQgYXQgNjowMuKAr0FNIEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPiB3 cm90ZToKPiA+Cj4gPiBIaSBTYXJhdmFuYSwKPiA+Cj4gPiArQ0MgTHVjYSBhbmQgVGhvbWFzCj4g Pgo+ID4gT24gTW9uLCAgOCBBcHIgMjAyNCAyMjozNzowMSAtMDcwMAo+ID4gU2FyYXZhbmEgS2Fu bmFuIDxzYXJhdmFuYWtAZ29vZ2xlLmNvbT4gd3JvdGU6Cj4gPiAgCj4gPiA+IERvbid0IGJvdGhl ciByZXZpZXdpbmcgdGhpcyBwYXRjaC4gSXQgbmVlZHMgdG8gYmUgdGVzdGVkIGFuZCBwb3NzaWJs eQo+ID4gPiByZWZhY3RvcmVkIGZpcnN0Lgo+ID4gPgo+ID4gPiBHZWVydCBhbmQgSGVydmUsCj4g PiA+Cj4gPiA+IFRoaXMgcGF0Y2ggc2VyaW91cyBzaG91bGQgaG9wZWZ1bGx5IGZpeCBib3RoIG9m IHlvdXIgdXNlIGNhc2VzCj4gPiA+IFsxXVsyXVszXS4gQ2FuIHlvdSBwbGVhc2UgY2hlY2sgdG8g bWFrZSBzdXJlIHRoZSBkZXZpY2UgbGlua3MgY3JlYXRlZAo+ID4gPiB0by9mcm9tIHRoZSBvdmVy bGF5IGRldmljZXMgYXJlIHRvL2Zyb20gdGhlIHJpZ2h0IG9uZXM/Cj4gPiA+Cj4gPiA+IEkndmUg b25seSBjb21waWxlIHRlc3RlZCBpdC4gSWYgSSBtYWRlIHNvbWUgb2J2aW91cyBtaXN0YWtlLCBm ZWVsIGZyZWUKPiA+ID4gdG8gZml4IGl0IGFuZCBnaXZlIGl0IGEgc2hvdC4KPiA+ID4KPiA+ID4g Q2M6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+Cj4gPiA+Cj4gPiA+IFsxXSAtIGh0dHBz Oi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvQ0FNdUhNZFhFblNENHJSSi1vOTB4NE9wclVhY05fckpn eW84eDY9OUY5clorLUt6ak9nQG1haWwuZ21haWwuY29tLwo+ID4gPiBbMl0gLSBodHRwczovL2xv cmUua2VybmVsLm9yZy9hbGwvMjAyNDAyMjEwOTUxMzcuNjE2ZDJhYWFAYm9vdGxpbi5jb20vCj4g PiA+IFszXSAtIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyNDAzMTIxNTE4MzUuMjll ZjYyYTBAYm9vdGxpbi5jb20vCj4gPiA+ICAKPiA+Cj4gPiBJIHRlc3RlZCB5b3VyIHBhdGNoZXMu Cj4gPgo+ID4gQ29uY2VybmluZyBteSB1c2UgY2FzZXMsIHRoZXkgZml4IHRoZSBpc3N1ZSBkZXNj cmliZWQgaW4KPiA+ICAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjQwMjIxMDk1MTM3 LjYxNmQyYWFhQGJvb3RsaW4uY29tLyAgCj4gCj4gSSB3ZW50IGJhY2sgYW5kIGxvb2tlZCBhdCB0 aGUgZXhhbXBsZS4gSSdtIG5vdCBldmVuIHN1cmUgSSB1bmRlcnN0YW5kCj4gdGhhdCBleGFtcGxl LiBJbiB0aGF0IGV4YW1wbGUgYXQgdGhlIGxpbmsgYWJvdmUsIGFyZSB5b3Ugc2F5aW5nCj4gd2l0 aG91dCBhbnkgY2hhbmdlcyB0byB1cHN0cmVhbSByZWdfZG9ja19zeXNfM3YzIHdhcyBsaXN0aW5n IGl0J3MKPiBzdXBwbGllciBhcyBpMmM1IGluc3RlYWQgb2YgdGNhNjQyNF9kb2NrXzE/IFdoeSB3 YXNuJ3QgR2VlcnQncwo+IGV4aXN0aW5nIGNoYW5nZXMgaW4gb2ZfaTJjX25vdGlmeSBub3Qgc3Vm ZmljaWVudD8gTG9va2luZyBhdCBpdCwgaXQKPiBkb2VzOgo+IHJkLT5kbi0+Zndub2RlLmZsYWdz ICY9IH5GV05PREVfRkxBR19OT1RfREVWSUNFOwo+IAo+IFdoaWNoIHNob3VsZCBjbGVhciB0aGUg ZmxhZyBmb3IgdGNhNjQyNF9kb2NrXzEuIENhbiB5b3UgaGVscCBtZQo+IHVuZGVyc3RhbmQgd2h5 IGl0J3Mgbm90IGdldHRpbmcgY2xlYXJlZD8KCkkgZG9uJ3QgcmVhbGx5IGtub3cgYnV0IEkgY2Fu IG1rZSBzb21lIGFzdW1wdGlvbnMuCgpNYXliZSB0aGUgbGluayBpbnZvbHZlZCBpbiB0aGUgaXNz dWUgaXMgY3JlYXRlZCBxdWl0ZSBlYXJseSBpbiB0aGUgb3ZlcmxheQphcHBseWluZyBwcm9jZXNz LCBiZWZvcmUgdGhlIGNhbGxzIHRvIHRoZSBvZiBub3RpZmllciBvZl9pMmNfbm90aWZ5KCkgdGhh dApjYW4gY2xlYXIgdGhlIEZXTk9ERV9GTEFHX05PVF9ERVZJQ0UuCgpUaGUgbGluayBpcyBjcmVh dGVkIGJ5IG9mX2xpbmtfdG9fcGhhbmRsZSgpLiBUaGlzIGZ1bmN0aW9ucyBpcyB0cmlnZ2VyZWQK ZnJvbSBvZl9md25vZGVfYWRkX2xpbmtzKCkgd2hpY2ggaXMgdGhlIC5hZGRfbGluaygpIG9wZXJh dGlvbiBvZiB0aGUgT0YKZndub2RlX29wZXJhdGlvbnMuCgpUaGUgb3BlcmF0aW9uIGlzIGNhbGxl ZCBieSBmd19kZXZsaW5rX3BhcnNlX2Z3bm9kZSgpLCBpdHNlbGYgdHJpZ2dlcmVkIGJ5CmZ3X2Rl dmxpbmtfbGlua19kZXZpY2UoKSBlYWNoIHRpbWUgZGV2aWNlX2FkZCgpIGlzIGNhbGxlZC4KCklm IHRoZSBkZXZpY2VfYWRkKCkgcmVsYXRlZCB0byB0aGUgcmVnX2RvY2tfc3lzXzN2MyBpcyBjYWxs ZWQgYmVmb3JlIHRoZQpvZl9pMmNfbm90aWZ5KCkgcmVsYXRlZCB0byB0Y2E2NDI0X2RvY2tfMSwg dGhlIEZXTk9ERV9GTEFHX05PVF9ERVZJQ0UgZmxhZwppbiB0Y2E2NDI0X2RvY2tfMSBpcyBub3Qg Y2xlYXJlZCB3aGVuIG9mX2xpbmtfdG9fcGhhbmRsZSgpIGlzIGNhbGxlZC4KCkRvZXMgdGhpcyBz Y2VuYXJpbyBtYWtlIHNlbnNlID8KCj4gCj4gPiBCdXQgbm90IHRoZSBvbmUgZGVzY3JpYmVkIGlu Cj4gPiAgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyNDAzMTIxNTE4MzUuMjllZjYy YTBAYm9vdGxpbi5jb20vCj4gPiBBIGxpbmsgaXMgc3RpbGwgcHJlc2VudCBiZXR3ZWVuIHRoZSBp MmNANjAwIGFuZCB0aGUgUENJIGRldmljZS4KPiA+IGluc3RlYWQgb2YgdGhlIGkyY0A2MDAgYW5k IHRoZSBwY2ktZXAtYnVzLiAgCj4gCj4gV2hhdCBkbyB5b3UgbWVhbiBieSBQQ0kgZGV2aWNlIGhl cmU/IFlvdSBzYXkgdGhlIHNhbWUgdGhpbmcgaW4gdGhlCj4gbGluaywgYnV0IEkgZG9uJ3QgdW5k ZXJzdGFuZCB3aGF0IHlvdSBtZWFuLiBDYW4geW91IGNsYXJpZnkgd2hhdAo+IGV4YWN0bHkgZ2V0 cyBhZGRlZCBieSB0aGUgb3ZlcmxheT8gUGxlYXNlIHVzZSB0aGUgZndub2RlIG5hbWUgaW4gYWxs Cj4gdGhlIGRlc2NyaXB0aW9ucywgZXZlbiB3aGVuIHRhbGtpbmcgYWJvdXQgZGV2aWNlIGxpbmtz LiBUaGF0IHNob3VsZAo+IGhlbHAgYXZvaWQgdGhlIGNvbmZ1c2lvbi4KPiAKPiBBbHNvLCBpZiB5 b3UgY2FuIHNob3cgd2hhdCB0aGUgdGFyZ2V0IG5vZGUgb2YgdGhlIG92ZXJsYXkgbG9va3MgbGlr ZSwKPiB0aGF0J2QgaGVscCB0b28uCj4gCj4gPiBBZGRpbmcgdGhlIHBhdGNoIGNsZWFyaW5nIHRo ZSBGV05PREVfRkxBR19OT1RfREVWSUNFIGluIGRldmljZV9hZGQoKSBhdmFpbGFibGUKPiA+IGF0 IFsxXSBvbiB0b3Agb2YgeW91ciBwYXRjaGVzIGZpeGVzIHRoZSBsaW5rIGlzc3VlLgo+ID4gV2l0 aCB0aGlzIGFkZGl0aW9uYWwgcGF0Y2ggYXBwbGllZCwgdGhlIGxpbmsgaXMgcHJlc2VudCBiZXR3 ZWVuIHRoZSBpMmNANjAwCj4gPiBhbmQgdGhlIHBjaS1lcC1idXMuICAKPiAKPiBJIGtub3cgdGhl IHByb2JsZW0gd2l0aCB0aGlzIHBhdGNoIHNlcmllcy4gQnV0IHRvIGZpeCBpdCBwcm9wZXJseSwg SQo+IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcm9vdCBvZiB0aGUgb3ZlcmxheSBub2RlIGluIHlv dXIgZXhhbXBsZXMgYW5kCj4gdGhlIHRhcmdldCBpdCdzIGFwcGxpZWQgdG8uCgoKVGhpcyBpcyB0 aGUgTWljcm9jaGlwIExhbjk2NnggUENJIGRldmljZSB1c2UgY2FzZS4KVGhlIExhbjk2NnggaXMg YSBjb21wb25lbnQgdGhhdCBjYW4gYmUgYSAic3RhbmRhcmQiIFNvQyAoaS5lLiBjb3JlIENQVXMK YW5kIHNvbWUgcGVyaXBoZXJhbHMpIG9yIGFzIGEgUENJIGRldmljZS4KV2hlbiBpbiBQQ0kgZGV2 aWNlIG1vZGUsIHRoZSBjb3JlIENQVXMgYXJlIG5vdCBhdmFpbGFibGUgYW5kIGFyZSByZXBsYWNl ZApieSBhbiBlbmRwb2ludCBQQ0kuIFRoZSBQQ0kgaG9zdCBpbiBQQ0kgZGV2aWNlIG1vZGUgaGFz IHRvIGFjdCB0aGUgY29kZSBDUFVzCmluIFNvQyBtb2RlLiBJbiBvdGhlciB3b3JkIHRoZSBQQ0kg aG9zdCBoYXMgYWNjZXNzIHRvIHBlcmlwaGVyYWxzIChQQ0kgTU1JTwphY2Nlc3NlcykgYW5kIGhh cyB0byBoYW5kbGUgZWFjaCBwZXJpcGhlcmFscy4KCkRyaXZlcnMgZm9yIHRoZXNlIHBlcmlwaGVy YWxzIGFyZSBhbHJlYWR5IGF2YWlsYWJsZSBpbiB0aGUga2VybmVsIChyZXNldApjb250cm9sbGVy LCBpMmMgY29udHJvbGxlciwgbmV0d29yayBzd2l0Y2gsIGNsb2NrIGNvbnRyb2xsZXJzLCAuLi4p IGFuZCBhcmUKZnVuY3Rpb25hbCB3aGVuIHRoZSBMYW45NjZ4IGlzIGluIFNvQyBtb2RlLgoKSW4g b3JkZXIgdG8gcmUtdXNlIGFsbCBvZiB0aGVzZSBkcml2ZXJzLCB0aGUgc29sdXRpb24gd2FzIHRv IGhhdmUgYSBMYW45NjZ4ClBDSSBkcml2ZXIgdGhhdCBpcyBwcm9iZSgpIG1hdGNoaW5nIHRoZSBM YW45NjZ4IFBDSSBWZW5kb3IvRGV2aWNlIElELgpUaGlzIGRyaXZlciB0aGVuIGxvYWQgYSBEVCBv dmVybGF5IHRvIGRlc2NyaWJlZCB0aGUgTGFuOTY2eCBpbnRlcm5hbCBjb21wb25lbnRzLgoKQmFz aWNhbGx5LCB0aGUgYmFzZSBEVCAodGhlIERUIGRlc2NyaWJpbmcgdGhlIFBDSSBob3N0IGJvYXJk KSBoYXMgdGhlIFBDSSBub2RlcwpiZXR3ZWVuIHRoZSByb290IFBDSSBub2RlIGFuZCB0aGUgTGFu OTY2eCBQQ0kgZGV2aWNlIGJ1aWx0IGF0IHJ1bnRpbWUgZHVyaW5nIHRoZQpQQ0kgYnVzIHNjYW4u IEF0IHRoZSBlbmQgb2YgdGhlIHNjYW4sIHRoZSBMYW45NjZ4IGRyaXZlciBsb2FkIHRoZSBvdmVy bGF5IGFuZAp0aGUgZmluYWwgRFQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOgotLS0gODwgLS0t CnNvYyB7CgkuLi4KCXBjaWVAZDAwNzAwMDAgewoJCWNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1h ZGEtMzcwMC1wY2llIjsKCQkuLi4KCQkvKiBBIGJyaWRnZSwgY3JlYXRlZCBhdCBydW50aW1lIGR1 cmluZyBQQ0kgc2NhbiAqLwoJCXBjaUAwLDAgewoJCQljb21wYXRpYmxlID0gInBjaTExYWIsMTAw XDBwY2ljbGFzcywwNjA0MDBcMHBjaWNsYXNzLDA2MDQiOwoJCQkuLi4KCgkJCS8qIFRoZSBMYW45 NjZ4IFBDSSBkZXZpY2UsIGNyZWF0ZWQgYXQgcnVudGltZSBkdXJpbmcgUENJIHNjYW4gKi8KCQkJ ZGV2QDAsMCB7IAoJCQkJY29tcGF0aWJsZSA9ICJwY2kxMDU1LDk2NjBcMHBjaWNsYXNzLDAyMDAw MFwwcGNpY2xhc3MsMDIwMCI7CgkJCQkuLi4KCgkJCQkvKgoJCQkJICogVGhpcyBub2RlIGlzIGFk ZGVkIGJ5IHRoZSBvdmVybGF5CgkJCQkgKiBkdXJpbmcgbGFuOTY2eCBQQ0kgZHJpdmVyIHByb2Jl KCkKCQkJCSAqLwoJCQkJcGNpLWVwLWJ1c0AwIHsKCQkJCQljb21wYXRpYmxlID0gInNpbXBsZS1i dXMiOwoJCQkJCS4uLgoKCQkJCQlmbHgwOiBmbGV4Y29tQGUwMDQwMDAwIHsKCQkJCQkJY29tcGF0 aWJsZSA9ICJhdG1lbCxzYW1hNWQyLWZsZXhjb20iOwoJCQkJCQlyZWcgPSA8MHhlMDA0MDAwMCAw eDEwMD47CgkJCQkJCXJhbmdlcyA9IDwweDAgMHhlMDA0MDAwMCAweDgwMD47CgkJCQkJCS4uLgkJ CQoKCQkJCQkJaTJjX2xhbjk2Nng6IGkyY0A2MDAgewoJCQkJCQkJY29tcGF0aWJsZSA9ICJtaWNy b2NoaXAsbGFuOTY2eC1pMmMiOwoJCQkJCQkJcmVnID0gPDB4NjAwIDB4MjAwPjsKCQkJCQkJCS4u LgoJCQkJCQl9OwoJCQkJCX07CgkJCQkJLi4uCgkJCQl9OwoJCQl9OwoJCX07Cgl9Owp9OwotLS0g ODwgLS0tCgpXaXRob3V0IGNsZWFyaW5nIEZXTk9ERV9GTEFHX05PVF9ERVZJQ0UsIGEgbGluayBp cyBjcmVhdGVkIGJldHdlZW4KaTJjQDYwMCBhbmQgZGV2QDAsMC4KV2l0aCB0aGUgRldOT0RFX0ZM QUdfTk9UX0RFVklDRSBjbGVhcmVkIGluIGRldmljZV9hZGQoKSwgdGhlIGxpbmsgaXMKY3JlYXRl ZCBiZXR3ZWVuIGkyY0A2MDAgYW5kIHBjaS1lcC1idXNAMC4KCmZsZXhjb21AZTAwNDAwMDAgaXMg YSBNRkQgZGV2aWNlLgoKSW4gdGhlIGxhbjk2NnggUENJIGRyaXZlciwgdGhlIG92ZXJsYXkgaXMg YXBwbGllZCB1c2luZyB0aGUgZm9sbG93aW5nOgotLS0gODwgLS0tCgpzdGF0aWMgaW50IGxhbjk2 NnhfcGNpX2xvYWRfb3ZlcmxheShzdHJ1Y3QgbGFuOTY2eF9wY2kgKmRhdGEpCnsKCXUzMiBkdGJv X3NpemUgPSBfX2R0Ym9fbGFuOTY2eF9wY2lfZW5kIC0gX19kdGJvX2xhbjk2NnhfcGNpX2JlZ2lu OwoJdm9pZCAqZHRib19zdGFydCA9IF9fZHRib19sYW45NjZ4X3BjaV9iZWdpbjsKCWludCByZXQ7 CgoJcmV0ID0gb2Zfb3ZlcmxheV9mZHRfYXBwbHkoZHRib19zdGFydCwgZHRib19zaXplLCAmZGF0 YS0+b3Zjc19pZCwKCQkJCSAgIGRhdGEtPmRldi0+b2Zfbm9kZSk7CglpZiAocmV0KQoJCXJldHVy biByZXQ7CgoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgbGFuOTY2eF9wY2lfcHJvYmUoc3RydWN0 IHBjaV9kZXYgKnBkZXYsCgkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQp7 CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwoJc3RydWN0IGxhbjk2NnhfcGNpICpk YXRhOwoJLi4uCglkYXRhLT5kZXYgPSBkZXY7CgkuLi4KCXJldCA9IGxhbjk2NnhfcGNpX2xvYWRf b3ZlcmxheShkYXRhKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCgkuLi4KCXJldCA9IG9mX3Bs YXRmb3JtX2RlZmF1bHRfcG9wdWxhdGUoZGV2LT5vZl9ub2RlLCBOVUxMLCBkZXYpOwoJaWYgKHJl dCkKCQlnb3RvIGVycl91bmxvYWRfb3ZlcmxheTsKCglyZXR1cm4gMDsKCS4uLgp9Ci0tLSA4PCAt LS0KCkhvcGUgbXkgZXhwbGFuYXRpb25zIHdlcmUgY2xlYXIgZW5vdWdoIGFuZCBhbnN3ZXJlZCB5 b3VyIHF1ZXN0aW9uLgpGZWVsIGZyZWUgdG8gYXNrIHNvbWUgbW9yZSBkZXRhaWxzIGlmIG5lZWRl ZC4KCkkgcHJvdmlkZWQgb25seSBleHRyYWN0aW9ucyBvZiB0aGUgZnVsbCBkdHNvIGZpbGUuIElm IHlvdSBuZWVkIHNvbWUgbW9yZQppbmZvcm1hdGlvbiAoYWxsIG5vZGVzLCBhbGwgcHJvcGVydGll cykgZmVlbCBmcmVlIHRvIGFzay4KCkJlc3QgcmVnYXJkcywKSGVydsOpCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==