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=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_2 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 DF383C432C0 for ; Mon, 25 Nov 2019 15:37:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B5195207FD for ; Mon, 25 Nov 2019 15:37:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728585AbfKYPhu convert rfc822-to-8bit (ORCPT ); Mon, 25 Nov 2019 10:37:50 -0500 Received: from relay8-d.mail.gandi.net ([217.70.183.201]:54083 "EHLO relay8-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728036AbfKYPhu (ORCPT ); Mon, 25 Nov 2019 10:37:50 -0500 X-Originating-IP: 90.76.211.102 Received: from xps13 (lfbn-1-2154-102.w90-76.abo.wanadoo.fr [90.76.211.102]) (Authenticated sender: miquel.raynal@bootlin.com) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 74B281BF207; Mon, 25 Nov 2019 15:37:46 +0000 (UTC) Date: Mon, 25 Nov 2019 16:37:45 +0100 From: Miquel Raynal To: Christophe Kerello Cc: , , , , , Boris Brezillon Subject: Re: mtd: Use mtd device name instead of mtd->name when registering nvmem device Message-ID: <20191125163745.26095b68@xps13> In-Reply-To: <20191125160503.1243f817@xps13> References: <1574442222-19759-1-git-send-email-christophe.kerello@st.com> <20191125160503.1243f817@xps13> Organization: Bootlin X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Miquel Raynal wrote on Mon, 25 Nov 2019 16:05:03 +0100: > Hi Christophe, > > Christophe Kerello wrote on Fri, 22 Nov > 2019 18:03:42 +0100: > > > MTD currently allows to have same partition name on different devices. > > Since nvmen device registration has been added, it is not more possible > > to have same partition name on different devices. We get following > > logs: > > sysfs: cannot create duplicate filename XXX > > Failed to register NVMEM device > > > > To avoid such issue, the proposed patch uses the mtd device name instead of > > the partition name. > > > > Fixes: c4dfa25ab307 ("mtd: add support for reading MTD devices via the nvmem API") > > Signed-off-by: Christophe Kerello > > --- > > Hi, > > > > With latest mtd-next branch, we get following logs on our STM32MP1 eval board. > > > > [ 1.979089] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xd3 > > [ 1.984055] nand: Micron MT29F8G08ABACAH4 > > [ 1.988000] nand: 1024 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 224 > > [ 1.996378] Bad block table found at page 262080, version 0x01 > > [ 2.001945] Bad block table found at page 262016, version 0x01 > > [ 2.008002] 4 fixed-partitions partitions found on MTD device 58002000.nand-controller > > [ 2.015398] Creating 4 MTD partitions on "58002000.nand-controller": > > [ 2.021751] 0x000000000000-0x000000200000 : "fsbl" > > [ 2.028506] 0x000000200000-0x000000400000 : "ssbl1" > > [ 2.033741] 0x000000400000-0x000000600000 : "ssbl2" > > [ 2.038924] 0x000000600000-0x000040000000 : "UBI" > > [ 2.051336] spi-nor spi0.0: mx66l51235l (65536 Kbytes) > > [ 2.055123] 4 fixed-partitions partitions found on MTD device spi0.0 > > [ 2.061378] Creating 4 MTD partitions on "spi0.0": > > [ 2.066243] 0x000000000000-0x000000040000 : "fsbl" > > [ 2.071429] sysfs: cannot create duplicate filename '/bus/nvmem/devices/fsbl' > > [ 2.078157] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.0-rc4-00031-g589e1b6 #176 > > [ 2.085781] Hardware name: STM32 (Device Tree Support) > > [ 2.090957] [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > > [ 2.098693] [] (show_stack) from [] (dump_stack+0xb4/0xc8) > > [ 2.105929] [] (dump_stack) from [] (sysfs_warn_dup+0x58/0x64) > > [ 2.113509] [] (sysfs_warn_dup) from [] (sysfs_do_create_link_sd+0xe4/0xe8) > > [ 2.122224] [] (sysfs_do_create_link_sd) from [] (bus_add_device+0x80/0xfc) > > [ 2.130938] [] (bus_add_device) from [] (device_add+0x35c/0x608) > > [ 2.138697] [] (device_add) from [] (nvmem_register.part.2+0x180/0x624) > > [ 2.147065] [] (nvmem_register.part.2) from [] (add_mtd_device+0x2d8/0x4b8) > > [ 2.155776] [] (add_mtd_device) from [] (add_mtd_partitions+0x84/0x16c) > > [ 2.164140] [] (add_mtd_partitions) from [] (parse_mtd_partitions+0x220/0x3c4) > > [ 2.173118] [] (parse_mtd_partitions) from [] (mtd_device_parse_register+0x40/0x164) > > [ 2.182622] [] (mtd_device_parse_register) from [] (spi_nor_probe+0xd0/0x190) > > [ 2.191513] [] (spi_nor_probe) from [] (spi_drv_probe+0x80/0xa4) > > [ 2.199268] [] (spi_drv_probe) from [] (really_probe+0x234/0x34c) > > [ 2.207111] [] (really_probe) from [] (driver_probe_device+0x60/0x174) > > [ 2.215391] [] (driver_probe_device) from [] (bus_for_each_drv+0x58/0xb8) > > [ 2.223932] [] (bus_for_each_drv) from [] (__device_attach+0xd0/0x13c) > > [ 2.232212] [] (__device_attach) from [] (bus_probe_device+0x84/0x8c) > > [ 2.240404] [] (bus_probe_device) from [] (device_add+0x3bc/0x608) > > [ 2.248334] [] (device_add) from [] (spi_add_device+0x9c/0x14c) > > [ 2.256003] [] (spi_add_device) from [] (of_register_spi_device+0x234/0x370) > > [ 2.264807] [] (of_register_spi_device) from [] (spi_register_controller+0x578/0x734) > > [ 2.274394] [] (spi_register_controller) from [] (devm_spi_register_controller+0x34/0x6c) > > [ 2.284331] [] (devm_spi_register_controller) from [] (stm32_qspi_probe+0x338/0x3bc) > > [ 2.293831] [] (stm32_qspi_probe) from [] (platform_drv_probe+0x48/0x98) > > [ 2.302285] [] (platform_drv_probe) from [] (really_probe+0x234/0x34c) > > [ 2.310566] [] (really_probe) from [] (driver_probe_device+0x60/0x174) > > [ 2.318847] [] (driver_probe_device) from [] (device_driver_attach+0x58/0x60) > > [ 2.327735] [] (device_driver_attach) from [] (__driver_attach+0x80/0xbc) > > [ 2.336276] [] (__driver_attach) from [] (bus_for_each_dev+0x74/0xb4) > > [ 2.344469] [] (bus_for_each_dev) from [] (bus_add_driver+0x164/0x1e8) > > [ 2.352749] [] (bus_add_driver) from [] (driver_register+0x74/0x108) > > [ 2.360854] [] (driver_register) from [] (do_one_initcall+0x54/0x22c) > > [ 2.369047] [] (do_one_initcall) from [] (kernel_init_freeable+0x150/0x1ec) > > [ 2.377762] [] (kernel_init_freeable) from [] (kernel_init+0x8/0x114) > > [ 2.385951] [] (kernel_init) from [] (ret_from_fork+0x14/0x2c) > > [ 2.393525] Exception stack(0xe68c1fb0 to 0xe68c1ff8) > > [ 2.398583] 1fa0: 00000000 00000000 00000000 00000000 > > [ 2.406777] 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > > [ 2.414967] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 > > [ 2.421879] mtd mtd4: Failed to register NVMEM device > > > > Before nvmen device registration was added, it was possible to have same partition name on different devices. > > Instead of using the partition name, this patch proposes to use the MTD device name (mtdX). > > > > Regards, > > Christophe Kerello. > > > > drivers/mtd/mtdcore.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c > > index 5fac435..559b693 100644 > > --- a/drivers/mtd/mtdcore.c > > +++ b/drivers/mtd/mtdcore.c > > @@ -551,7 +551,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd) > > > > config.id = -1; > > config.dev = &mtd->dev; > > - config.name = mtd->name; > > + config.name = dev_name(&mtd->dev); > > What about creating an mtd->fullname field which would be, for > partitions: mtdX: and would be unique? The actual mtd->name (driver name or label if given) instead of the mtd number would be better. That would give things like "nand0:mypart". > > > config.owner = THIS_MODULE; > > config.reg_read = mtd_nvmem_reg_read; > > config.size = mtd->size; > > Thanks, > Miquèl Thanks, Miquèl 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=-8.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 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 923B5C432C0 for ; Mon, 25 Nov 2019 15:38:18 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 6493A207FD for ; Mon, 25 Nov 2019 15:38:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ZBDCz8/w" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6493A207FD Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject: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=bvzhnBHvXDkhmPKtonYpGIR0H5k6MS7DDR/yAC04mkY=; b=ZBDCz8/wusQXYg ZRqOnlMrnPInWUBlckfvqiMuHQh+xqWnCB4v/t1eCPeVHxkNelPUoCOk1JBgzftuZxsu0GUKV2+qs c3gDSY/7IEJau1FM3dcuRF6gk+pAWZk1yVWYqGPwkbuVciLJP5CAzDGLRhEWcZYUbPZpPwSDjeKWF vK3TlLzNstBMt63A4iR9jk5Rg1WhGp1xFojpK1AbzzHRtHZuLxl/7WdntCVqZxj+h7wlp0H9EeJ6Z 5qeI9zqgDMNaCC4XEx/amDj+QObGI6kT/AVWleo6HZUmOjACeSyBCWkw4t9J2KXUKq9BT1BcKdDZ2 FIpqQ4E65w9/agxMfQgQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iZGR8-0000Zj-TX; Mon, 25 Nov 2019 15:38:02 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iZGR4-0000W4-Us for linux-mtd@lists.infradead.org; Mon, 25 Nov 2019 15:38:01 +0000 X-Originating-IP: 90.76.211.102 Received: from xps13 (lfbn-1-2154-102.w90-76.abo.wanadoo.fr [90.76.211.102]) (Authenticated sender: miquel.raynal@bootlin.com) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 74B281BF207; Mon, 25 Nov 2019 15:37:46 +0000 (UTC) Date: Mon, 25 Nov 2019 16:37:45 +0100 From: Miquel Raynal To: Christophe Kerello Subject: Re: mtd: Use mtd device name instead of mtd->name when registering nvmem device Message-ID: <20191125163745.26095b68@xps13> In-Reply-To: <20191125160503.1243f817@xps13> References: <1574442222-19759-1-git-send-email-christophe.kerello@st.com> <20191125160503.1243f817@xps13> Organization: Bootlin X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191125_073759_277078_0E216761 X-CRM114-Status: GOOD ( 17.93 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: vigneshr@ti.com, Boris Brezillon , richard@nod.at, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org TWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4gd3JvdGUgb24gTW9uLCAy NSBOb3YgMjAxOQoxNjowNTowMyArMDEwMDoKCj4gSGkgQ2hyaXN0b3BoZSwKPiAKPiBDaHJpc3Rv cGhlIEtlcmVsbG8gPGNocmlzdG9waGUua2VyZWxsb0BzdC5jb20+IHdyb3RlIG9uIEZyaSwgMjIg Tm92Cj4gMjAxOSAxODowMzo0MiArMDEwMDoKPiAKPiA+IE1URCBjdXJyZW50bHkgYWxsb3dzIHRv IGhhdmUgc2FtZSBwYXJ0aXRpb24gbmFtZSBvbiBkaWZmZXJlbnQgZGV2aWNlcy4KPiA+IFNpbmNl IG52bWVuIGRldmljZSByZWdpc3RyYXRpb24gaGFzIGJlZW4gYWRkZWQsIGl0IGlzIG5vdCBtb3Jl IHBvc3NpYmxlCj4gPiB0byBoYXZlIHNhbWUgcGFydGl0aW9uIG5hbWUgb24gZGlmZmVyZW50IGRl dmljZXMuIFdlIGdldCBmb2xsb3dpbmcKPiA+IGxvZ3M6Cj4gPiBzeXNmczogY2Fubm90IGNyZWF0 ZSBkdXBsaWNhdGUgZmlsZW5hbWUgWFhYCj4gPiBGYWlsZWQgdG8gcmVnaXN0ZXIgTlZNRU0gZGV2 aWNlCj4gPiAKPiA+IFRvIGF2b2lkIHN1Y2ggaXNzdWUsIHRoZSBwcm9wb3NlZCBwYXRjaCB1c2Vz IHRoZSBtdGQgZGV2aWNlIG5hbWUgaW5zdGVhZCBvZgo+ID4gdGhlIHBhcnRpdGlvbiBuYW1lLgo+ ID4gCj4gPiBGaXhlczogYzRkZmEyNWFiMzA3ICgibXRkOiBhZGQgc3VwcG9ydCBmb3IgcmVhZGlu ZyBNVEQgZGV2aWNlcyB2aWEgdGhlIG52bWVtIEFQSSIpCj4gPiBTaWduZWQtb2ZmLWJ5OiBDaHJp c3RvcGhlIEtlcmVsbG8gPGNocmlzdG9waGUua2VyZWxsb0BzdC5jb20+Cj4gPiAtLS0KPiA+IEhp LAo+ID4gCj4gPiBXaXRoIGxhdGVzdCBtdGQtbmV4dCBicmFuY2gsIHdlIGdldCBmb2xsb3dpbmcg bG9ncyBvbiBvdXIgU1RNMzJNUDEgZXZhbCBib2FyZC4KPiA+IAo+ID4gWyAgICAxLjk3OTA4OV0g bmFuZDogZGV2aWNlIGZvdW5kLCBNYW51ZmFjdHVyZXIgSUQ6IDB4MmMsIENoaXAgSUQ6IDB4ZDMK PiA+IFsgICAgMS45ODQwNTVdIG5hbmQ6IE1pY3JvbiBNVDI5RjhHMDhBQkFDQUg0Cj4gPiBbICAg IDEuOTg4MDAwXSBuYW5kOiAxMDI0IE1pQiwgU0xDLCBlcmFzZSBzaXplOiAyNTYgS2lCLCBwYWdl IHNpemU6IDQwOTYsIE9PQiBzaXplOiAyMjQKPiA+IFsgICAgMS45OTYzNzhdIEJhZCBibG9jayB0 YWJsZSBmb3VuZCBhdCBwYWdlIDI2MjA4MCwgdmVyc2lvbiAweDAxCj4gPiBbICAgIDIuMDAxOTQ1 XSBCYWQgYmxvY2sgdGFibGUgZm91bmQgYXQgcGFnZSAyNjIwMTYsIHZlcnNpb24gMHgwMQo+ID4g WyAgICAyLjAwODAwMl0gNCBmaXhlZC1wYXJ0aXRpb25zIHBhcnRpdGlvbnMgZm91bmQgb24gTVRE IGRldmljZSA1ODAwMjAwMC5uYW5kLWNvbnRyb2xsZXIKPiA+IFsgICAgMi4wMTUzOThdIENyZWF0 aW5nIDQgTVREIHBhcnRpdGlvbnMgb24gIjU4MDAyMDAwLm5hbmQtY29udHJvbGxlciI6Cj4gPiBb ICAgIDIuMDIxNzUxXSAweDAwMDAwMDAwMDAwMC0weDAwMDAwMDIwMDAwMCA6ICJmc2JsIgo+ID4g WyAgICAyLjAyODUwNl0gMHgwMDAwMDAyMDAwMDAtMHgwMDAwMDA0MDAwMDAgOiAic3NibDEiCj4g PiBbICAgIDIuMDMzNzQxXSAweDAwMDAwMDQwMDAwMC0weDAwMDAwMDYwMDAwMCA6ICJzc2JsMiIK PiA+IFsgICAgMi4wMzg5MjRdIDB4MDAwMDAwNjAwMDAwLTB4MDAwMDQwMDAwMDAwIDogIlVCSSIK PiA+IFsgICAgMi4wNTEzMzZdIHNwaS1ub3Igc3BpMC4wOiBteDY2bDUxMjM1bCAoNjU1MzYgS2J5 dGVzKQo+ID4gWyAgICAyLjA1NTEyM10gNCBmaXhlZC1wYXJ0aXRpb25zIHBhcnRpdGlvbnMgZm91 bmQgb24gTVREIGRldmljZSBzcGkwLjAKPiA+IFsgICAgMi4wNjEzNzhdIENyZWF0aW5nIDQgTVRE IHBhcnRpdGlvbnMgb24gInNwaTAuMCI6Cj4gPiBbICAgIDIuMDY2MjQzXSAweDAwMDAwMDAwMDAw MC0weDAwMDAwMDA0MDAwMCA6ICJmc2JsIgo+ID4gWyAgICAyLjA3MTQyOV0gc3lzZnM6IGNhbm5v dCBjcmVhdGUgZHVwbGljYXRlIGZpbGVuYW1lICcvYnVzL252bWVtL2RldmljZXMvZnNibCcKPiA+ IFsgICAgMi4wNzgxNTddIENQVTogMCBQSUQ6IDEgQ29tbTogc3dhcHBlci8wIE5vdCB0YWludGVk IDUuNC4wLXJjNC0wMDAzMS1nNTg5ZTFiNiAjMTc2Cj4gPiBbICAgIDIuMDg1NzgxXSBIYXJkd2Fy ZSBuYW1lOiBTVE0zMiAoRGV2aWNlIFRyZWUgU3VwcG9ydCkKPiA+IFsgICAgMi4wOTA5NTddIFs8 YzAzMTI4MzA+XSAodW53aW5kX2JhY2t0cmFjZSkgZnJvbSBbPGMwMzBjYmU0Pl0gKHNob3dfc3Rh Y2srMHgxMC8weDE0KQo+ID4gWyAgICAyLjA5ODY5M10gWzxjMDMwY2JlND5dIChzaG93X3N0YWNr KSBmcm9tIFs8YzBlOGQzNDA+XSAoZHVtcF9zdGFjaysweGI0LzB4YzgpCj4gPiBbICAgIDIuMTA1 OTI5XSBbPGMwZThkMzQwPl0gKGR1bXBfc3RhY2spIGZyb20gWzxjMDUwZmNkYz5dIChzeXNmc193 YXJuX2R1cCsweDU4LzB4NjQpCj4gPiBbICAgIDIuMTEzNTA5XSBbPGMwNTBmY2RjPl0gKHN5c2Zz X3dhcm5fZHVwKSBmcm9tIFs8YzA1MTAwMTA+XSAoc3lzZnNfZG9fY3JlYXRlX2xpbmtfc2QrMHhl NC8weGU4KQo+ID4gWyAgICAyLjEyMjIyNF0gWzxjMDUxMDAxMD5dIChzeXNmc19kb19jcmVhdGVf bGlua19zZCkgZnJvbSBbPGMwOTU2ZjYwPl0gKGJ1c19hZGRfZGV2aWNlKzB4ODAvMHhmYykKPiA+ IFsgICAgMi4xMzA5MzhdIFs8YzA5NTZmNjA+XSAoYnVzX2FkZF9kZXZpY2UpIGZyb20gWzxjMDk1 M2Y1ND5dIChkZXZpY2VfYWRkKzB4MzVjLzB4NjA4KQo+ID4gWyAgICAyLjEzODY5N10gWzxjMDk1 M2Y1ND5dIChkZXZpY2VfYWRkKSBmcm9tIFs8YzBkMTJlMGM+XSAobnZtZW1fcmVnaXN0ZXIucGFy dC4yKzB4MTgwLzB4NjI0KQo+ID4gWyAgICAyLjE0NzA2NV0gWzxjMGQxMmUwYz5dIChudm1lbV9y ZWdpc3Rlci5wYXJ0LjIpIGZyb20gWzxjMDllYTVjOD5dIChhZGRfbXRkX2RldmljZSsweDJkOC8w eDRiOCkKPiA+IFsgICAgMi4xNTU3NzZdIFs8YzA5ZWE1Yzg+XSAoYWRkX210ZF9kZXZpY2UpIGZy b20gWzxjMDllZGJkND5dIChhZGRfbXRkX3BhcnRpdGlvbnMrMHg4NC8weDE2YykKPiA+IFsgICAg Mi4xNjQxNDBdIFs8YzA5ZWRiZDQ+XSAoYWRkX210ZF9wYXJ0aXRpb25zKSBmcm9tIFs8YzA5ZWQ5 YWM+XSAocGFyc2VfbXRkX3BhcnRpdGlvbnMrMHgyMjAvMHgzYzQpCj4gPiBbICAgIDIuMTczMTE4 XSBbPGMwOWVkOWFjPl0gKHBhcnNlX210ZF9wYXJ0aXRpb25zKSBmcm9tIFs8YzA5ZWE4ZDQ+XSAo bXRkX2RldmljZV9wYXJzZV9yZWdpc3RlcisweDQwLzB4MTY0KQo+ID4gWyAgICAyLjE4MjYyMl0g WzxjMDllYThkND5dIChtdGRfZGV2aWNlX3BhcnNlX3JlZ2lzdGVyKSBmcm9tIFs8YzBhMjJkZmM+ XSAoc3BpX25vcl9wcm9iZSsweGQwLzB4MTkwKQo+ID4gWyAgICAyLjE5MTUxM10gWzxjMGEyMmRm Yz5dIChzcGlfbm9yX3Byb2JlKSBmcm9tIFs8YzBhMzcwYTA+XSAoc3BpX2Rydl9wcm9iZSsweDgw LzB4YTQpCj4gPiBbICAgIDIuMTk5MjY4XSBbPGMwYTM3MGEwPl0gKHNwaV9kcnZfcHJvYmUpIGZy b20gWzxjMDk1N2Y4Yz5dIChyZWFsbHlfcHJvYmUrMHgyMzQvMHgzNGMpCj4gPiBbICAgIDIuMjA3 MTExXSBbPGMwOTU3ZjhjPl0gKHJlYWxseV9wcm9iZSkgZnJvbSBbPGMwOTU4MjFjPl0gKGRyaXZl cl9wcm9iZV9kZXZpY2UrMHg2MC8weDE3NCkKPiA+IFsgICAgMi4yMTUzOTFdIFs8YzA5NTgyMWM+ XSAoZHJpdmVyX3Byb2JlX2RldmljZSkgZnJvbSBbPGMwOTU2Mzc4Pl0gKGJ1c19mb3JfZWFjaF9k cnYrMHg1OC8weGI4KQo+ID4gWyAgICAyLjIyMzkzMl0gWzxjMDk1NjM3OD5dIChidXNfZm9yX2Vh Y2hfZHJ2KSBmcm9tIFs8YzA5NTdjZTQ+XSAoX19kZXZpY2VfYXR0YWNoKzB4ZDAvMHgxM2MpCj4g PiBbICAgIDIuMjMyMjEyXSBbPGMwOTU3Y2U0Pl0gKF9fZGV2aWNlX2F0dGFjaCkgZnJvbSBbPGMw OTU3MDYwPl0gKGJ1c19wcm9iZV9kZXZpY2UrMHg4NC8weDhjKQo+ID4gWyAgICAyLjI0MDQwNF0g WzxjMDk1NzA2MD5dIChidXNfcHJvYmVfZGV2aWNlKSBmcm9tIFs8YzA5NTNmYjQ+XSAoZGV2aWNl X2FkZCsweDNiYy8weDYwOCkKPiA+IFsgICAgMi4yNDgzMzRdIFs8YzA5NTNmYjQ+XSAoZGV2aWNl X2FkZCkgZnJvbSBbPGMwYTM3N2I0Pl0gKHNwaV9hZGRfZGV2aWNlKzB4OWMvMHgxNGMpCj4gPiBb ICAgIDIuMjU2MDAzXSBbPGMwYTM3N2I0Pl0gKHNwaV9hZGRfZGV2aWNlKSBmcm9tIFs8YzBhMzdi OTg+XSAob2ZfcmVnaXN0ZXJfc3BpX2RldmljZSsweDIzNC8weDM3MCkKPiA+IFsgICAgMi4yNjQ4 MDddIFs8YzBhMzdiOTg+XSAob2ZfcmVnaXN0ZXJfc3BpX2RldmljZSkgZnJvbSBbPGMwYTM4NGVj Pl0gKHNwaV9yZWdpc3Rlcl9jb250cm9sbGVyKzB4NTc4LzB4NzM0KQo+ID4gWyAgICAyLjI3NDM5 NF0gWzxjMGEzODRlYz5dIChzcGlfcmVnaXN0ZXJfY29udHJvbGxlcikgZnJvbSBbPGMwYTM4NmRj Pl0gKGRldm1fc3BpX3JlZ2lzdGVyX2NvbnRyb2xsZXIrMHgzNC8weDZjKQo+ID4gWyAgICAyLjI4 NDMzMV0gWzxjMGEzODZkYz5dIChkZXZtX3NwaV9yZWdpc3Rlcl9jb250cm9sbGVyKSBmcm9tIFs8 YzBhNGQwYjg+XSAoc3RtMzJfcXNwaV9wcm9iZSsweDMzOC8weDNiYykKPiA+IFsgICAgMi4yOTM4 MzFdIFs8YzBhNGQwYjg+XSAoc3RtMzJfcXNwaV9wcm9iZSkgZnJvbSBbPGMwOTU5ZWUwPl0gKHBs YXRmb3JtX2Rydl9wcm9iZSsweDQ4LzB4OTgpCj4gPiBbICAgIDIuMzAyMjg1XSBbPGMwOTU5ZWUw Pl0gKHBsYXRmb3JtX2Rydl9wcm9iZSkgZnJvbSBbPGMwOTU3ZjhjPl0gKHJlYWxseV9wcm9iZSsw eDIzNC8weDM0YykKPiA+IFsgICAgMi4zMTA1NjZdIFs8YzA5NTdmOGM+XSAocmVhbGx5X3Byb2Jl KSBmcm9tIFs8YzA5NTgyMWM+XSAoZHJpdmVyX3Byb2JlX2RldmljZSsweDYwLzB4MTc0KQo+ID4g WyAgICAyLjMxODg0N10gWzxjMDk1ODIxYz5dIChkcml2ZXJfcHJvYmVfZGV2aWNlKSBmcm9tIFs8 YzA5NTg0ZDg+XSAoZGV2aWNlX2RyaXZlcl9hdHRhY2grMHg1OC8weDYwKQo+ID4gWyAgICAyLjMy NzczNV0gWzxjMDk1ODRkOD5dIChkZXZpY2VfZHJpdmVyX2F0dGFjaCkgZnJvbSBbPGMwOTU4NTYw Pl0gKF9fZHJpdmVyX2F0dGFjaCsweDgwLzB4YmMpCj4gPiBbICAgIDIuMzM2Mjc2XSBbPGMwOTU4 NTYwPl0gKF9fZHJpdmVyX2F0dGFjaCkgZnJvbSBbPGMwOTU2MmNjPl0gKGJ1c19mb3JfZWFjaF9k ZXYrMHg3NC8weGI0KQo+ID4gWyAgICAyLjM0NDQ2OV0gWzxjMDk1NjJjYz5dIChidXNfZm9yX2Vh Y2hfZGV2KSBmcm9tIFs8YzA5NTcyYzQ+XSAoYnVzX2FkZF9kcml2ZXIrMHgxNjQvMHgxZTgpCj4g PiBbICAgIDIuMzUyNzQ5XSBbPGMwOTU3MmM0Pl0gKGJ1c19hZGRfZHJpdmVyKSBmcm9tIFs8YzA5 NThmZDg+XSAoZHJpdmVyX3JlZ2lzdGVyKzB4NzQvMHgxMDgpCj4gPiBbICAgIDIuMzYwODU0XSBb PGMwOTU4ZmQ4Pl0gKGRyaXZlcl9yZWdpc3RlcikgZnJvbSBbPGMwMzAyZWM4Pl0gKGRvX29uZV9p bml0Y2FsbCsweDU0LzB4MjJjKQo+ID4gWyAgICAyLjM2OTA0N10gWzxjMDMwMmVjOD5dIChkb19v bmVfaW5pdGNhbGwpIGZyb20gWzxjMTUwMTAyND5dIChrZXJuZWxfaW5pdF9mcmVlYWJsZSsweDE1 MC8weDFlYykKPiA+IFsgICAgMi4zNzc3NjJdIFs8YzE1MDEwMjQ+XSAoa2VybmVsX2luaXRfZnJl ZWFibGUpIGZyb20gWzxjMGVhNWU3ND5dIChrZXJuZWxfaW5pdCsweDgvMHgxMTQpCj4gPiBbICAg IDIuMzg1OTUxXSBbPGMwZWE1ZTc0Pl0gKGtlcm5lbF9pbml0KSBmcm9tIFs8YzAzMDEwZTg+XSAo cmV0X2Zyb21fZm9yaysweDE0LzB4MmMpCj4gPiBbICAgIDIuMzkzNTI1XSBFeGNlcHRpb24gc3Rh Y2soMHhlNjhjMWZiMCB0byAweGU2OGMxZmY4KQo+ID4gWyAgICAyLjM5ODU4M10gMWZhMDogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAw MDAgMDAwMDAwMDAKPiA+IFsgICAgMi40MDY3NzddIDFmYzA6IDAwMDAwMDAwIDAwMDAwMDAwIDAw MDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwCj4gPiBb ICAgIDIuNDE0OTY3XSAxZmUwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAw MDAwMDAxMyAwMDAwMDAwMAo+ID4gWyAgICAyLjQyMTg3OV0gbXRkIG10ZDQ6IEZhaWxlZCB0byBy ZWdpc3RlciBOVk1FTSBkZXZpY2UKPiA+IAo+ID4gQmVmb3JlIG52bWVuIGRldmljZSByZWdpc3Ry YXRpb24gd2FzIGFkZGVkLCBpdCB3YXMgcG9zc2libGUgdG8gaGF2ZSBzYW1lIHBhcnRpdGlvbiBu YW1lIG9uIGRpZmZlcmVudCBkZXZpY2VzLgo+ID4gSW5zdGVhZCBvZiB1c2luZyB0aGUgcGFydGl0 aW9uIG5hbWUsIHRoaXMgcGF0Y2ggcHJvcG9zZXMgdG8gdXNlIHRoZSBNVEQgZGV2aWNlIG5hbWUg KG10ZFgpLgo+ID4gCj4gPiBSZWdhcmRzLAo+ID4gQ2hyaXN0b3BoZSBLZXJlbGxvLgo+ID4gCj4g PiAgZHJpdmVycy9tdGQvbXRkY29yZS5jIHwgMiArLQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCAxIGlu c2VydGlvbigrKSwgMSBkZWxldGlvbigtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9t dGQvbXRkY29yZS5jIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCj4gPiBpbmRleCA1ZmFjNDM1Li41 NTliNjkzIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9tdGQvbXRkY29yZS5jCj4gPiArKysgYi9k cml2ZXJzL210ZC9tdGRjb3JlLmMKPiA+IEBAIC01NTEsNyArNTUxLDcgQEAgc3RhdGljIGludCBt dGRfbnZtZW1fYWRkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQo+ID4gIAo+ID4gIAljb25maWcuaWQg PSAtMTsKPiA+ICAJY29uZmlnLmRldiA9ICZtdGQtPmRldjsKPiA+IC0JY29uZmlnLm5hbWUgPSBt dGQtPm5hbWU7Cj4gPiArCWNvbmZpZy5uYW1lID0gZGV2X25hbWUoJm10ZC0+ZGV2KTsgIAo+IAo+ IFdoYXQgYWJvdXQgY3JlYXRpbmcgYW4gbXRkLT5mdWxsbmFtZSBmaWVsZCB3aGljaCB3b3VsZCBi ZSwgZm9yCj4gcGFydGl0aW9uczogbXRkWDo8cGFydGl0aW9uLW5hbWU+IGFuZCB3b3VsZCBiZSB1 bmlxdWU/CgpUaGUgYWN0dWFsIG10ZC0+bmFtZSAoZHJpdmVyIG5hbWUgb3IgbGFiZWwgaWYgZ2l2 ZW4pIGluc3RlYWQgb2YgdGhlIG10ZApudW1iZXIgd291bGQgYmUgYmV0dGVyLiBUaGF0IHdvdWxk IGdpdmUgdGhpbmdzIGxpa2UgIm5hbmQwOm15cGFydCIuCgo+IAo+ID4gIAljb25maWcub3duZXIg PSBUSElTX01PRFVMRTsKPiA+ICAJY29uZmlnLnJlZ19yZWFkID0gbXRkX252bWVtX3JlZ19yZWFk Owo+ID4gIAljb25maWcuc2l6ZSA9IG10ZC0+c2l6ZTsgIAo+IAo+IFRoYW5rcywKPiBNaXF1w6hs CgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==