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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 7B566C4338F for ; Mon, 16 Aug 2021 08:11:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5774461AFA for ; Mon, 16 Aug 2021 08:11:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234437AbhHPIMV convert rfc822-to-8bit (ORCPT ); Mon, 16 Aug 2021 04:12:21 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:58083 "EHLO relay11.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231716AbhHPIMS (ORCPT ); Mon, 16 Aug 2021 04:12:18 -0400 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 8EFE0100004; Mon, 16 Aug 2021 08:11:44 +0000 (UTC) Date: Mon, 16 Aug 2021 10:11:43 +0200 From: Miquel Raynal To: Daniel Palmer Cc: linux-mtd@lists.infradead.org, richard@nod.at, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v3] mtd: spinand: add support for Foresee FS35ND0*G parts Message-ID: <20210816101143.2a64d7b9@xps13> In-Reply-To: <20210811084924.52293-1-daniel@0x0f.com> References: <20210811084924.52293-1-daniel@0x0f.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Daniel, Daniel Palmer wrote on Wed, 11 Aug 2021 17:49:24 +0900: > Add support for the various Foresee FS35ND0*G parts manufactured by Longsys. > > Signed-off-by: Daniel Palmer > > Link: https://datasheet.lcsc.com/szlcsc/2008121142_FORESEE-FS35ND01G-S1Y2QWFI000_C719495.pdf > --- > Changes since v2: > - Originally I only had the 1Gbit version of this chip, now I have the 2Gbit and 4Gbit > variations so I've added support for those too. There is no datasheet for the bigger > chips but they are documented in a flashing tool from an SoC vendor so I took the parameters > from there. > - Previous versions of this patch only had single io read cache variants. My SPI flash driver > now supports dual and quad io for reading so I added and tested those modes too. > My driver/hardware only supports single io for writing so those are still left out. > - Implemented proper logic for checking the ECC status. > - Combined with the previous patch for 1-filling the OOB in the page buffer before writing > I have been using this for a few months now without anything getting broken. > > drivers/mtd/nand/spi/Makefile | 2 +- > drivers/mtd/nand/spi/core.c | 1 + > drivers/mtd/nand/spi/longsys.c | 134 +++++++++++++++++++++++++++++++++ > include/linux/mtd/spinand.h | 1 + > 4 files changed, 137 insertions(+), 1 deletion(-) > create mode 100644 drivers/mtd/nand/spi/longsys.c > > diff --git a/drivers/mtd/nand/spi/Makefile b/drivers/mtd/nand/spi/Makefile > index 9662b9c1d5a9..1d6819022e43 100644 > --- a/drivers/mtd/nand/spi/Makefile > +++ b/drivers/mtd/nand/spi/Makefile > @@ -1,3 +1,3 @@ > # SPDX-License-Identifier: GPL-2.0 > -spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o > +spinand-objs := core.o gigadevice.o longsys.o macronix.o micron.o paragon.o toshiba.o winbond.o > obj-$(CONFIG_MTD_SPI_NAND) += spinand.o > diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c > index 446ba8d43fbc..48f635d5c1ff 100644 > --- a/drivers/mtd/nand/spi/core.c > +++ b/drivers/mtd/nand/spi/core.c > @@ -895,6 +895,7 @@ static const struct nand_ops spinand_ops = { > > static const struct spinand_manufacturer *spinand_manufacturers[] = { > &gigadevice_spinand_manufacturer, > + &longsys_spinand_manufacturer, > ¯onix_spinand_manufacturer, > µn_spinand_manufacturer, > ¶gon_spinand_manufacturer, > diff --git a/drivers/mtd/nand/spi/longsys.c b/drivers/mtd/nand/spi/longsys.c > new file mode 100644 > index 000000000000..ee38f8728262 > --- /dev/null > +++ b/drivers/mtd/nand/spi/longsys.c > @@ -0,0 +1,134 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (c) 2020 Daniel Palmer > + * > + */ > + > +#include > +#include > +#include > + > +#define SPINAND_MFR_LONGSYS 0xCD > +#define FS35ND01G_S1Y2_STATUS_ECC_0_3_BITFLIPS (0 << 4) > +#define FS35ND01G_S1Y2_STATUS_ECC_4_BITFLIPS (1 << 4) > +#define FS35ND01G_S1Y2_STATUS_ECC_UNCORRECTABLE (2 << 4) > + > +static SPINAND_OP_VARIANTS(read_cache_variants, > + SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), > + SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), > + SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), > + SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), > + SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); > + > +static SPINAND_OP_VARIANTS(write_cache_variants, > + SPINAND_PROG_LOAD(true, 0, NULL, 0)); > + > +static SPINAND_OP_VARIANTS(update_cache_variants, > + SPINAND_PROG_LOAD(false, 0, NULL, 0)); > + > +static int fs35nd01g_s1y2_ooblayout_ecc(struct mtd_info *mtd, int section, > + struct mtd_oob_region *region) > +{ > + if (section > 3) > + return -ERANGE; > + > + /* ECC is not user accessible */ > + region->offset = 0; > + region->length = 0; Can't you just return -ERANGE directly? (maybe not). If you can't then just return -ERANGE on if (section), no need for two additional calls. > + > + return 0; > +} > + > +static int fs35nd01g_s1y2_ooblayout_free(struct mtd_info *mtd, int section, > + struct mtd_oob_region *region) > +{ > + if (section > 3) > + return -ERANGE; > + > + /* > + * No ECC data is stored in the accessible OOB so the full 16 bytes > + * of each spare region is available to the user. Apparently also > + * covered by the internal ECC. > + */ > + if (section) { > + region->offset = 16 * section; > + region->length = 16; > + } else { > + /* First byte in spare0 area is used for bad block marker */ > + region->offset = 1; So far we reserved two bytes for BBM while we know for now we only use one. > + region->length = 15; > + } You can just return if (section) return -ERANGE; offset = 2; length = (4 * 16) - offset; return 0; > + > + return 0; > +} > + > +static const struct mtd_ooblayout_ops fs35nd01g_s1y2_ooblayout = { > + .ecc = fs35nd01g_s1y2_ooblayout_ecc, > + .free = fs35nd01g_s1y2_ooblayout_free, > +}; > + > +static int fs35nd01g_s1y2_ecc_get_status(struct spinand_device *spinand, > + u8 status) > +{ > + switch (status & STATUS_ECC_MASK) { > + case FS35ND01G_S1Y2_STATUS_ECC_0_3_BITFLIPS: > + return 3; > + /* > + * The datasheet says *successful* with 4 bits flipped. > + * nandbiterrs always complains that the read reported > + * successful but the data is incorrect. > + */ > + case FS35ND01G_S1Y2_STATUS_ECC_4_BITFLIPS: > + return 4; This is a real issue. Can you use the nandflipbits tool from the mtd-utils package (you should take a recent version of the package) and try to observe what happens when you insert a 4th bitflip in a section? I generally believe the tool more than the datasheet :) > + case FS35ND01G_S1Y2_STATUS_ECC_UNCORRECTABLE: > + return -EBADMSG; > + default: > + break; > + } > + > + return -EINVAL; > +} > + > +static const struct spinand_info longsys_spinand_table[] = { > + SPINAND_INFO("FS35ND01G-S1Y2", > + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xEA, 0x11), > + NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), > + NAND_ECCREQ(4, 512), > + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, > + &write_cache_variants, > + &update_cache_variants), > + SPINAND_HAS_QE_BIT, > + SPINAND_ECCINFO(&fs35nd01g_s1y2_ooblayout, > + fs35nd01g_s1y2_ecc_get_status)), > + SPINAND_INFO("FS35ND02G-S3Y2", > + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xEB, 0x11), > + NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), > + NAND_ECCREQ(4, 512), > + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, > + &write_cache_variants, > + &update_cache_variants), > + SPINAND_HAS_QE_BIT, > + SPINAND_ECCINFO(&fs35nd01g_s1y2_ooblayout, > + fs35nd01g_s1y2_ecc_get_status)), > + SPINAND_INFO("FS35ND04G-S2Y2", > + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xEC, 0x11), > + NAND_MEMORG(1, 2048, 64, 64, 4096, 40, 1, 1, 1), > + NAND_ECCREQ(4, 512), > + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, > + &write_cache_variants, > + &update_cache_variants), > + SPINAND_HAS_QE_BIT, > + SPINAND_ECCINFO(&fs35nd01g_s1y2_ooblayout, > + fs35nd01g_s1y2_ecc_get_status)), > +}; > + > +static const struct spinand_manufacturer_ops longsys_spinand_manuf_ops = { > +}; > + > +const struct spinand_manufacturer longsys_spinand_manufacturer = { > + .id = SPINAND_MFR_LONGSYS, > + .name = "Longsys", > + .chips = longsys_spinand_table, > + .nchips = ARRAY_SIZE(longsys_spinand_table), > + .ops = &longsys_spinand_manuf_ops, > +}; > diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h > index 6988956b8492..f6c38528bb03 100644 > --- a/include/linux/mtd/spinand.h > +++ b/include/linux/mtd/spinand.h > @@ -261,6 +261,7 @@ struct spinand_manufacturer { > > /* SPI NAND manufacturers */ > extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; > +extern const struct spinand_manufacturer longsys_spinand_manufacturer; > extern const struct spinand_manufacturer macronix_spinand_manufacturer; > extern const struct spinand_manufacturer micron_spinand_manufacturer; > extern const struct spinand_manufacturer paragon_spinand_manufacturer; Otherwise LGTM. 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=-15.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 E3C42C4338F for ; Mon, 16 Aug 2021 08:12:52 +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 A7A6261AFB for ; Mon, 16 Aug 2021 08:12:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org A7A6261AFB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=nt9ICWUgHqQrxS4OFWSEjmGHZsLOBs0JQXFfM8H9LvI=; b=U04bD43iTGbVF3 4w5i/fgVexhFQh8RQKAyl5V+rUnwbibt7SIuFF7x+JAZrz5ZDU3mwlZ91gJuJJpfFsYotvJEPAzpf EgTs/YVYiPM4EwdkzyOOup3V6AP6tWVcLXyqeLPnX0R7fjkPMOo1WjfekN/SfK5Sy+MJtWWuk/jM0 0tpuLMkT1X680pKWeLciOg9QD5HzDjwiC3IFzTw1+t5DsDBWKqsd6FQw6bqpaXaKeWHT/XOBpc2dS LM3vJ6mcj6vTPvatjIb8ediqGXyQNs5C+C+CidD5qbXdfy6eoLNRz3kvGigEgQ73pa2dT4fXtadNs /z7gPiOX+b0fw8FmjmhA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFXj4-00GUe2-UF; Mon, 16 Aug 2021 08:12:06 +0000 Received: from relay11.mail.gandi.net ([217.70.178.231]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFXip-00GUbE-B9; Mon, 16 Aug 2021 08:11:55 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 8EFE0100004; Mon, 16 Aug 2021 08:11:44 +0000 (UTC) Date: Mon, 16 Aug 2021 10:11:43 +0200 From: Miquel Raynal To: Daniel Palmer Cc: linux-mtd@lists.infradead.org, richard@nod.at, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v3] mtd: spinand: add support for Foresee FS35ND0*G parts Message-ID: <20210816101143.2a64d7b9@xps13> In-Reply-To: <20210811084924.52293-1-daniel@0x0f.com> References: <20210811084924.52293-1-daniel@0x0f.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (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-20210816_011151_704512_706BBAB4 X-CRM114-Status: GOOD ( 38.86 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 SGkgRGFuaWVsLAoKRGFuaWVsIFBhbG1lciA8ZGFuaWVsQDB4MGYuY29tPiB3cm90ZSBvbiBXZWQs IDExIEF1ZyAyMDIxIDE3OjQ5OjI0CiswOTAwOgoKPiBBZGQgc3VwcG9ydCBmb3IgdGhlIHZhcmlv dXMgRm9yZXNlZSBGUzM1TkQwKkcgcGFydHMgbWFudWZhY3R1cmVkIGJ5IExvbmdzeXMuCj4gCj4g U2lnbmVkLW9mZi1ieTogRGFuaWVsIFBhbG1lciA8ZGFuaWVsQDB4MGYuY29tPgo+IAo+IExpbms6 IGh0dHBzOi8vZGF0YXNoZWV0Lmxjc2MuY29tL3N6bGNzYy8yMDA4MTIxMTQyX0ZPUkVTRUUtRlMz NU5EMDFHLVMxWTJRV0ZJMDAwX0M3MTk0OTUucGRmCj4gLS0tCj4gIENoYW5nZXMgc2luY2UgdjI6 Cj4gIC0gT3JpZ2luYWxseSBJIG9ubHkgaGFkIHRoZSAxR2JpdCB2ZXJzaW9uIG9mIHRoaXMgY2hp cCwgbm93IEkgaGF2ZSB0aGUgMkdiaXQgYW5kIDRHYml0Cj4gICAgdmFyaWF0aW9ucyBzbyBJJ3Zl IGFkZGVkIHN1cHBvcnQgZm9yIHRob3NlIHRvby4gVGhlcmUgaXMgbm8gZGF0YXNoZWV0IGZvciB0 aGUgYmlnZ2VyCj4gICAgY2hpcHMgYnV0IHRoZXkgYXJlIGRvY3VtZW50ZWQgaW4gYSBmbGFzaGlu ZyB0b29sIGZyb20gYW4gU29DIHZlbmRvciBzbyBJIHRvb2sgdGhlIHBhcmFtZXRlcnMKPiAgICBm cm9tIHRoZXJlLgo+ICAtIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgcGF0Y2ggb25seSBoYWQg c2luZ2xlIGlvIHJlYWQgY2FjaGUgdmFyaWFudHMuIE15IFNQSSBmbGFzaCBkcml2ZXIKPiAgICBu b3cgc3VwcG9ydHMgZHVhbCBhbmQgcXVhZCBpbyBmb3IgcmVhZGluZyBzbyBJIGFkZGVkIGFuZCB0 ZXN0ZWQgdGhvc2UgbW9kZXMgdG9vLgo+ICAgIE15IGRyaXZlci9oYXJkd2FyZSBvbmx5IHN1cHBv cnRzIHNpbmdsZSBpbyBmb3Igd3JpdGluZyBzbyB0aG9zZSBhcmUgc3RpbGwgbGVmdCBvdXQuCj4g IC0gSW1wbGVtZW50ZWQgcHJvcGVyIGxvZ2ljIGZvciBjaGVja2luZyB0aGUgRUNDIHN0YXR1cy4K PiAgLSBDb21iaW5lZCB3aXRoIHRoZSBwcmV2aW91cyBwYXRjaCBmb3IgMS1maWxsaW5nIHRoZSBP T0IgaW4gdGhlIHBhZ2UgYnVmZmVyIGJlZm9yZSB3cml0aW5nCj4gICAgSSBoYXZlIGJlZW4gdXNp bmcgdGhpcyBmb3IgYSBmZXcgbW9udGhzIG5vdyB3aXRob3V0IGFueXRoaW5nIGdldHRpbmcgYnJv a2VuLgo+ICAKPiAgZHJpdmVycy9tdGQvbmFuZC9zcGkvTWFrZWZpbGUgIHwgICAyICstCj4gIGRy aXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYyAgICB8ICAgMSArCj4gIGRyaXZlcnMvbXRkL25hbmQv c3BpL2xvbmdzeXMuYyB8IDEzNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg aW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oICAgIHwgICAxICsKPiAgNCBmaWxlcyBjaGFuZ2Vk LCAxMzcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tdGQvbmFuZC9zcGkvbG9uZ3N5cy5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9zcGkvTWFrZWZpbGUKPiBp bmRleCA5NjYyYjljMWQ1YTkuLjFkNjgxOTAyMmU0MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL210 ZC9uYW5kL3NwaS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvc3BpL01ha2VmaWxl Cj4gQEAgLTEsMyArMSwzIEBACj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiAtc3BpbmFuZC1vYmpzIDo9IGNvcmUubyBnaWdhZGV2aWNlLm8gbWFjcm9uaXgubyBtaWNyb24u byBwYXJhZ29uLm8gdG9zaGliYS5vIHdpbmJvbmQubwo+ICtzcGluYW5kLW9ianMgOj0gY29yZS5v IGdpZ2FkZXZpY2UubyBsb25nc3lzLm8gbWFjcm9uaXgubyBtaWNyb24ubyBwYXJhZ29uLm8gdG9z aGliYS5vIHdpbmJvbmQubwo+ICBvYmotJChDT05GSUdfTVREX1NQSV9OQU5EKSArPSBzcGluYW5k Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jIGIvZHJpdmVycy9t dGQvbmFuZC9zcGkvY29yZS5jCj4gaW5kZXggNDQ2YmE4ZDQzZmJjLi40OGY2MzVkNWMxZmYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jCj4gKysrIGIvZHJpdmVycy9t dGQvbmFuZC9zcGkvY29yZS5jCj4gQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IG5hbmRfb3BzIHNwaW5hbmRfb3BzID0gewo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBz cGluYW5kX21hbnVmYWN0dXJlciAqc3BpbmFuZF9tYW51ZmFjdHVyZXJzW10gPSB7Cj4gIAkmZ2ln YWRldmljZV9zcGluYW5kX21hbnVmYWN0dXJlciwKPiArCSZsb25nc3lzX3NwaW5hbmRfbWFudWZh Y3R1cmVyLAo+ICAJJm1hY3Jvbml4X3NwaW5hbmRfbWFudWZhY3R1cmVyLAo+ICAJJm1pY3Jvbl9z cGluYW5kX21hbnVmYWN0dXJlciwKPiAgCSZwYXJhZ29uX3NwaW5hbmRfbWFudWZhY3R1cmVyLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NwaS9sb25nc3lzLmMgYi9kcml2ZXJzL210 ZC9uYW5kL3NwaS9sb25nc3lzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZWUzOGY4NzI4MjYyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbXRk L25hbmQvc3BpL2xvbmdzeXMuYwo+IEBAIC0wLDAgKzEsMTM0IEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBEYW5p ZWwgUGFsbWVyIDxkYW5pZWxAdGhpbmd5LmpwPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbXRkL3NwaW5hbmQuaD4KPiArCj4gKyNkZWZpbmUgU1BJTkFORF9NRlJfTE9OR1NZ UwkJCTB4Q0QKPiArI2RlZmluZSBGUzM1TkQwMUdfUzFZMl9TVEFUVVNfRUNDXzBfM19CSVRGTElQ UwkoMCA8PCA0KQo+ICsjZGVmaW5lIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfNF9CSVRGTElQ UwkoMSA8PCA0KQo+ICsjZGVmaW5lIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfVU5DT1JSRUNU QUJMRQkoMiA8PCA0KQo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMocmVhZF9jYWNo ZV92YXJpYW50cywKPiArCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1FVQURJT19PUCgw LCAyLCBOVUxMLCAwKSwKPiArCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1g0X09QKDAs IDEsIE5VTEwsIDApLAo+ICsJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfRFVBTElPX09Q KDAsIDEsIE5VTEwsIDApLAo+ICsJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfWDJfT1Ao MCwgMSwgTlVMTCwgMCksCj4gKwkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9PUChmYWxz ZSwgMCwgMSwgTlVMTCwgMCkpOwo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMod3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJU1BJTkFORF9QUk9HX0xPQUQodHJ1ZSwgMCwgTlVMTCwg MCkpOwo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFModXBkYXRlX2NhY2hlX3Zhcmlh bnRzLAo+ICsJCVNQSU5BTkRfUFJPR19MT0FEKGZhbHNlLCAwLCBOVUxMLCAwKSk7Cj4gKwo+ICtz dGF0aWMgaW50IGZzMzVuZDAxZ19zMXkyX29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICpt dGQsIGludCBzZWN0aW9uLAo+ICsJCQkJCXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqcmVnaW9uKQo+ ICt7Cj4gKwlpZiAoc2VjdGlvbiA+IDMpCj4gKwkJcmV0dXJuIC1FUkFOR0U7Cj4gKwo+ICsJLyog RUNDIGlzIG5vdCB1c2VyIGFjY2Vzc2libGUgKi8KPiArCXJlZ2lvbi0+b2Zmc2V0ID0gMDsKPiAr CXJlZ2lvbi0+bGVuZ3RoID0gMDsKCkNhbid0IHlvdSBqdXN0IHJldHVybiAtRVJBTkdFIGRpcmVj dGx5PyAobWF5YmUgbm90KS4KSWYgeW91IGNhbid0IHRoZW4ganVzdCByZXR1cm4gLUVSQU5HRSBv biBpZiAoc2VjdGlvbiksIG5vIG5lZWQgZm9yIHR3bwphZGRpdGlvbmFsIGNhbGxzLgoKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmczM1bmQwMWdfczF5Ml9vb2JsYXlv dXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gKwkJCQkgICAgc3Ry dWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCj4gK3sKPiArCWlmIChzZWN0aW9uID4gMykKPiAr CQlyZXR1cm4gLUVSQU5HRTsKPiArCj4gKwkvKgo+ICsJICogTm8gRUNDIGRhdGEgaXMgc3RvcmVk IGluIHRoZSBhY2Nlc3NpYmxlIE9PQiBzbyB0aGUgZnVsbCAxNiBieXRlcwo+ICsJICogb2YgZWFj aCBzcGFyZSByZWdpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLiBBcHBhcmVudGx5IGFsc28K PiArCSAqIGNvdmVyZWQgYnkgdGhlIGludGVybmFsIEVDQy4KPiArCSAqLwo+ICsJaWYgKHNlY3Rp b24pIHsKPiArCQlyZWdpb24tPm9mZnNldCA9IDE2ICogc2VjdGlvbjsKPiArCQlyZWdpb24tPmxl bmd0aCA9IDE2Owo+ICsJfSBlbHNlIHsKPiArCQkvKiBGaXJzdCBieXRlIGluIHNwYXJlMCBhcmVh IGlzIHVzZWQgZm9yIGJhZCBibG9jayBtYXJrZXIgKi8KPiArCQlyZWdpb24tPm9mZnNldCA9IDE7 CgpTbyBmYXIgd2UgcmVzZXJ2ZWQgdHdvIGJ5dGVzIGZvciBCQk0gd2hpbGUgd2Uga25vdyBmb3Ig bm93IHdlIG9ubHkgdXNlCm9uZS4KCj4gKwkJcmVnaW9uLT5sZW5ndGggPSAxNTsKPiArCX0KCllv dSBjYW4ganVzdCByZXR1cm4KCglpZiAoc2VjdGlvbikKCQlyZXR1cm4gLUVSQU5HRTsKCglvZmZz ZXQgPSAyOwoJbGVuZ3RoID0gKDQgKiAxNikgLSBvZmZzZXQ7CgoJcmV0dXJuIDA7CgoKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0 X29wcyBmczM1bmQwMWdfczF5Ml9vb2JsYXlvdXQgPSB7Cj4gKwkuZWNjID0gZnMzNW5kMDFnX3Mx eTJfb29ibGF5b3V0X2VjYywKPiArCS5mcmVlID0gZnMzNW5kMDFnX3MxeTJfb29ibGF5b3V0X2Zy ZWUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGZzMzVuZDAxZ19zMXkyX2VjY19nZXRfc3RhdHVz KHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwKPiArCQkJCQl1OCBzdGF0dXMpCj4gK3sK PiArCXN3aXRjaCAoc3RhdHVzICYgU1RBVFVTX0VDQ19NQVNLKSB7Cj4gKwljYXNlIEZTMzVORDAx R19TMVkyX1NUQVRVU19FQ0NfMF8zX0JJVEZMSVBTOgo+ICsJCXJldHVybiAzOwo+ICsJLyoKPiAr CSAqIFRoZSBkYXRhc2hlZXQgc2F5cyAqc3VjY2Vzc2Z1bCogd2l0aCA0IGJpdHMgZmxpcHBlZC4K PiArCSAqIG5hbmRiaXRlcnJzIGFsd2F5cyBjb21wbGFpbnMgdGhhdCB0aGUgcmVhZCByZXBvcnRl ZAo+ICsJICogc3VjY2Vzc2Z1bCBidXQgdGhlIGRhdGEgaXMgaW5jb3JyZWN0Lgo+ICsJICovCj4g KwljYXNlIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfNF9CSVRGTElQUzoKPiArCQlyZXR1cm4g NDsKClRoaXMgaXMgYSByZWFsIGlzc3VlLiBDYW4geW91IHVzZSB0aGUgbmFuZGZsaXBiaXRzIHRv b2wgZnJvbSB0aGUKbXRkLXV0aWxzIHBhY2thZ2UgKHlvdSBzaG91bGQgdGFrZSBhIHJlY2VudCB2 ZXJzaW9uIG9mIHRoZSBwYWNrYWdlKSBhbmQKdHJ5IHRvIG9ic2VydmUgd2hhdCBoYXBwZW5zIHdo ZW4geW91IGluc2VydCBhIDR0aCBiaXRmbGlwIGluIGEgc2VjdGlvbj8KCkkgZ2VuZXJhbGx5IGJl bGlldmUgdGhlIHRvb2wgbW9yZSB0aGFuIHRoZSBkYXRhc2hlZXQgOikKCj4gKwljYXNlIEZTMzVO RDAxR19TMVkyX1NUQVRVU19FQ0NfVU5DT1JSRUNUQUJMRToKPiArCQlyZXR1cm4gLUVCQURNU0c7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaW5hbmRfaW5mbyBsb25nc3lzX3NwaW5h bmRfdGFibGVbXSA9IHsKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDFHLVMxWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVBLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgMTAyNCwgMjAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDJHLVMzWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVCLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgMjA0OCwgNDAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDRHLVMyWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVDLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgNDA5NiwgNDAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9t YW51ZmFjdHVyZXJfb3BzIGxvbmdzeXNfc3BpbmFuZF9tYW51Zl9vcHMgPSB7Cj4gK307Cj4gKwo+ ICtjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIgbG9uZ3N5c19zcGluYW5kX21hbnVm YWN0dXJlciA9IHsKPiArCS5pZCA9IFNQSU5BTkRfTUZSX0xPTkdTWVMsCj4gKwkubmFtZSA9ICJM b25nc3lzIiwKPiArCS5jaGlwcyA9IGxvbmdzeXNfc3BpbmFuZF90YWJsZSwKPiArCS5uY2hpcHMg PSBBUlJBWV9TSVpFKGxvbmdzeXNfc3BpbmFuZF90YWJsZSksCj4gKwkub3BzID0gJmxvbmdzeXNf c3BpbmFuZF9tYW51Zl9vcHMsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRk L3NwaW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAo+IGluZGV4IDY5ODg5NTZi ODQ5Mi4uZjZjMzg1MjhiYjAzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3NwaW5h bmQuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAo+IEBAIC0yNjEsNiArMjYx LDcgQEAgc3RydWN0IHNwaW5hbmRfbWFudWZhY3R1cmVyIHsKPiAgCj4gIC8qIFNQSSBOQU5EIG1h bnVmYWN0dXJlcnMgKi8KPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcGluYW5kX21hbnVmYWN0dXJl ciBnaWdhZGV2aWNlX3NwaW5hbmRfbWFudWZhY3R1cmVyOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0 IHNwaW5hbmRfbWFudWZhY3R1cmVyIGxvbmdzeXNfc3BpbmFuZF9tYW51ZmFjdHVyZXI7Cj4gIGV4 dGVybiBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIgbWFjcm9uaXhfc3BpbmFuZF9t YW51ZmFjdHVyZXI7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIg bWljcm9uX3NwaW5hbmRfbWFudWZhY3R1cmVyOwo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHNwaW5h bmRfbWFudWZhY3R1cmVyIHBhcmFnb25fc3BpbmFuZF9tYW51ZmFjdHVyZXI7CgpPdGhlcndpc2Ug TEdUTS4KClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K 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=-15.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable 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 69847C4338F for ; Mon, 16 Aug 2021 08:14:01 +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 242BD61AFB for ; Mon, 16 Aug 2021 08:14:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 242BD61AFB Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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=Gk/BzsWtJPZgbgTghfe+214RcKeVLUovEv3fwkzLbRY=; b=xZtmu31RnTkWw1 FYI2cHwnPIJFtc7bnRMgJsXq6gAwnMC/mygcxdN/iNIQcRKT+qV3JjGki5ggWOhl99Hmw/kqKn1QI A7LfDYNbOACL0ljk4y9h6tDnCJeg1sIsw/KlvCzXn0hYm+bZOcW0y/RTrL1vQdm7tDyJnnAggKTOp Dswgwn6mgMXjoxqk5aXzzvvO8gbe/n25fHxafe1SXptK5GErINxuX8WdRPOZY+mC7gdD/B9js1e/m PzZTCIMPFyVWxLw5ASKAUtgzbvuW8w5sNcbGVw3b6/X9ue/RRXm/uqzHTlqzVTWAE45b3XnY2gvPo /a3xgC9ImucTAGj2kP8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFXiv-00GUcK-R6; Mon, 16 Aug 2021 08:11:57 +0000 Received: from relay11.mail.gandi.net ([217.70.178.231]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mFXip-00GUbE-B9; Mon, 16 Aug 2021 08:11:55 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 8EFE0100004; Mon, 16 Aug 2021 08:11:44 +0000 (UTC) Date: Mon, 16 Aug 2021 10:11:43 +0200 From: Miquel Raynal To: Daniel Palmer Cc: linux-mtd@lists.infradead.org, richard@nod.at, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v3] mtd: spinand: add support for Foresee FS35ND0*G parts Message-ID: <20210816101143.2a64d7b9@xps13> In-Reply-To: <20210811084924.52293-1-daniel@0x0f.com> References: <20210811084924.52293-1-daniel@0x0f.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (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-20210816_011151_704512_706BBAB4 X-CRM114-Status: GOOD ( 38.86 ) 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 SGkgRGFuaWVsLAoKRGFuaWVsIFBhbG1lciA8ZGFuaWVsQDB4MGYuY29tPiB3cm90ZSBvbiBXZWQs IDExIEF1ZyAyMDIxIDE3OjQ5OjI0CiswOTAwOgoKPiBBZGQgc3VwcG9ydCBmb3IgdGhlIHZhcmlv dXMgRm9yZXNlZSBGUzM1TkQwKkcgcGFydHMgbWFudWZhY3R1cmVkIGJ5IExvbmdzeXMuCj4gCj4g U2lnbmVkLW9mZi1ieTogRGFuaWVsIFBhbG1lciA8ZGFuaWVsQDB4MGYuY29tPgo+IAo+IExpbms6 IGh0dHBzOi8vZGF0YXNoZWV0Lmxjc2MuY29tL3N6bGNzYy8yMDA4MTIxMTQyX0ZPUkVTRUUtRlMz NU5EMDFHLVMxWTJRV0ZJMDAwX0M3MTk0OTUucGRmCj4gLS0tCj4gIENoYW5nZXMgc2luY2UgdjI6 Cj4gIC0gT3JpZ2luYWxseSBJIG9ubHkgaGFkIHRoZSAxR2JpdCB2ZXJzaW9uIG9mIHRoaXMgY2hp cCwgbm93IEkgaGF2ZSB0aGUgMkdiaXQgYW5kIDRHYml0Cj4gICAgdmFyaWF0aW9ucyBzbyBJJ3Zl IGFkZGVkIHN1cHBvcnQgZm9yIHRob3NlIHRvby4gVGhlcmUgaXMgbm8gZGF0YXNoZWV0IGZvciB0 aGUgYmlnZ2VyCj4gICAgY2hpcHMgYnV0IHRoZXkgYXJlIGRvY3VtZW50ZWQgaW4gYSBmbGFzaGlu ZyB0b29sIGZyb20gYW4gU29DIHZlbmRvciBzbyBJIHRvb2sgdGhlIHBhcmFtZXRlcnMKPiAgICBm cm9tIHRoZXJlLgo+ICAtIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgcGF0Y2ggb25seSBoYWQg c2luZ2xlIGlvIHJlYWQgY2FjaGUgdmFyaWFudHMuIE15IFNQSSBmbGFzaCBkcml2ZXIKPiAgICBu b3cgc3VwcG9ydHMgZHVhbCBhbmQgcXVhZCBpbyBmb3IgcmVhZGluZyBzbyBJIGFkZGVkIGFuZCB0 ZXN0ZWQgdGhvc2UgbW9kZXMgdG9vLgo+ICAgIE15IGRyaXZlci9oYXJkd2FyZSBvbmx5IHN1cHBv cnRzIHNpbmdsZSBpbyBmb3Igd3JpdGluZyBzbyB0aG9zZSBhcmUgc3RpbGwgbGVmdCBvdXQuCj4g IC0gSW1wbGVtZW50ZWQgcHJvcGVyIGxvZ2ljIGZvciBjaGVja2luZyB0aGUgRUNDIHN0YXR1cy4K PiAgLSBDb21iaW5lZCB3aXRoIHRoZSBwcmV2aW91cyBwYXRjaCBmb3IgMS1maWxsaW5nIHRoZSBP T0IgaW4gdGhlIHBhZ2UgYnVmZmVyIGJlZm9yZSB3cml0aW5nCj4gICAgSSBoYXZlIGJlZW4gdXNp bmcgdGhpcyBmb3IgYSBmZXcgbW9udGhzIG5vdyB3aXRob3V0IGFueXRoaW5nIGdldHRpbmcgYnJv a2VuLgo+ICAKPiAgZHJpdmVycy9tdGQvbmFuZC9zcGkvTWFrZWZpbGUgIHwgICAyICstCj4gIGRy aXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYyAgICB8ICAgMSArCj4gIGRyaXZlcnMvbXRkL25hbmQv c3BpL2xvbmdzeXMuYyB8IDEzNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg aW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oICAgIHwgICAxICsKPiAgNCBmaWxlcyBjaGFuZ2Vk LCAxMzcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tdGQvbmFuZC9zcGkvbG9uZ3N5cy5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvc3BpL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9zcGkvTWFrZWZpbGUKPiBp bmRleCA5NjYyYjljMWQ1YTkuLjFkNjgxOTAyMmU0MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL210 ZC9uYW5kL3NwaS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvc3BpL01ha2VmaWxl Cj4gQEAgLTEsMyArMSwzIEBACj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiAtc3BpbmFuZC1vYmpzIDo9IGNvcmUubyBnaWdhZGV2aWNlLm8gbWFjcm9uaXgubyBtaWNyb24u byBwYXJhZ29uLm8gdG9zaGliYS5vIHdpbmJvbmQubwo+ICtzcGluYW5kLW9ianMgOj0gY29yZS5v IGdpZ2FkZXZpY2UubyBsb25nc3lzLm8gbWFjcm9uaXgubyBtaWNyb24ubyBwYXJhZ29uLm8gdG9z aGliYS5vIHdpbmJvbmQubwo+ICBvYmotJChDT05GSUdfTVREX1NQSV9OQU5EKSArPSBzcGluYW5k Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jIGIvZHJpdmVycy9t dGQvbmFuZC9zcGkvY29yZS5jCj4gaW5kZXggNDQ2YmE4ZDQzZmJjLi40OGY2MzVkNWMxZmYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zcGkvY29yZS5jCj4gKysrIGIvZHJpdmVycy9t dGQvbmFuZC9zcGkvY29yZS5jCj4gQEAgLTg5NSw2ICs4OTUsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IG5hbmRfb3BzIHNwaW5hbmRfb3BzID0gewo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBz cGluYW5kX21hbnVmYWN0dXJlciAqc3BpbmFuZF9tYW51ZmFjdHVyZXJzW10gPSB7Cj4gIAkmZ2ln YWRldmljZV9zcGluYW5kX21hbnVmYWN0dXJlciwKPiArCSZsb25nc3lzX3NwaW5hbmRfbWFudWZh Y3R1cmVyLAo+ICAJJm1hY3Jvbml4X3NwaW5hbmRfbWFudWZhY3R1cmVyLAo+ICAJJm1pY3Jvbl9z cGluYW5kX21hbnVmYWN0dXJlciwKPiAgCSZwYXJhZ29uX3NwaW5hbmRfbWFudWZhY3R1cmVyLAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3NwaS9sb25nc3lzLmMgYi9kcml2ZXJzL210 ZC9uYW5kL3NwaS9sb25nc3lzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZWUzOGY4NzI4MjYyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbXRk L25hbmQvc3BpL2xvbmdzeXMuYwo+IEBAIC0wLDAgKzEsMTM0IEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBEYW5p ZWwgUGFsbWVyIDxkYW5pZWxAdGhpbmd5LmpwPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbXRkL3NwaW5hbmQuaD4KPiArCj4gKyNkZWZpbmUgU1BJTkFORF9NRlJfTE9OR1NZ UwkJCTB4Q0QKPiArI2RlZmluZSBGUzM1TkQwMUdfUzFZMl9TVEFUVVNfRUNDXzBfM19CSVRGTElQ UwkoMCA8PCA0KQo+ICsjZGVmaW5lIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfNF9CSVRGTElQ UwkoMSA8PCA0KQo+ICsjZGVmaW5lIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfVU5DT1JSRUNU QUJMRQkoMiA8PCA0KQo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMocmVhZF9jYWNo ZV92YXJpYW50cywKPiArCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1FVQURJT19PUCgw LCAyLCBOVUxMLCAwKSwKPiArCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1g0X09QKDAs IDEsIE5VTEwsIDApLAo+ICsJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfRFVBTElPX09Q KDAsIDEsIE5VTEwsIDApLAo+ICsJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfWDJfT1Ao MCwgMSwgTlVMTCwgMCksCj4gKwkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9PUChmYWxz ZSwgMCwgMSwgTlVMTCwgMCkpOwo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMod3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJU1BJTkFORF9QUk9HX0xPQUQodHJ1ZSwgMCwgTlVMTCwg MCkpOwo+ICsKPiArc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFModXBkYXRlX2NhY2hlX3Zhcmlh bnRzLAo+ICsJCVNQSU5BTkRfUFJPR19MT0FEKGZhbHNlLCAwLCBOVUxMLCAwKSk7Cj4gKwo+ICtz dGF0aWMgaW50IGZzMzVuZDAxZ19zMXkyX29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICpt dGQsIGludCBzZWN0aW9uLAo+ICsJCQkJCXN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqcmVnaW9uKQo+ ICt7Cj4gKwlpZiAoc2VjdGlvbiA+IDMpCj4gKwkJcmV0dXJuIC1FUkFOR0U7Cj4gKwo+ICsJLyog RUNDIGlzIG5vdCB1c2VyIGFjY2Vzc2libGUgKi8KPiArCXJlZ2lvbi0+b2Zmc2V0ID0gMDsKPiAr CXJlZ2lvbi0+bGVuZ3RoID0gMDsKCkNhbid0IHlvdSBqdXN0IHJldHVybiAtRVJBTkdFIGRpcmVj dGx5PyAobWF5YmUgbm90KS4KSWYgeW91IGNhbid0IHRoZW4ganVzdCByZXR1cm4gLUVSQU5HRSBv biBpZiAoc2VjdGlvbiksIG5vIG5lZWQgZm9yIHR3bwphZGRpdGlvbmFsIGNhbGxzLgoKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmczM1bmQwMWdfczF5Ml9vb2JsYXlv dXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gKwkJCQkgICAgc3Ry dWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCj4gK3sKPiArCWlmIChzZWN0aW9uID4gMykKPiAr CQlyZXR1cm4gLUVSQU5HRTsKPiArCj4gKwkvKgo+ICsJICogTm8gRUNDIGRhdGEgaXMgc3RvcmVk IGluIHRoZSBhY2Nlc3NpYmxlIE9PQiBzbyB0aGUgZnVsbCAxNiBieXRlcwo+ICsJICogb2YgZWFj aCBzcGFyZSByZWdpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyLiBBcHBhcmVudGx5IGFsc28K PiArCSAqIGNvdmVyZWQgYnkgdGhlIGludGVybmFsIEVDQy4KPiArCSAqLwo+ICsJaWYgKHNlY3Rp b24pIHsKPiArCQlyZWdpb24tPm9mZnNldCA9IDE2ICogc2VjdGlvbjsKPiArCQlyZWdpb24tPmxl bmd0aCA9IDE2Owo+ICsJfSBlbHNlIHsKPiArCQkvKiBGaXJzdCBieXRlIGluIHNwYXJlMCBhcmVh IGlzIHVzZWQgZm9yIGJhZCBibG9jayBtYXJrZXIgKi8KPiArCQlyZWdpb24tPm9mZnNldCA9IDE7 CgpTbyBmYXIgd2UgcmVzZXJ2ZWQgdHdvIGJ5dGVzIGZvciBCQk0gd2hpbGUgd2Uga25vdyBmb3Ig bm93IHdlIG9ubHkgdXNlCm9uZS4KCj4gKwkJcmVnaW9uLT5sZW5ndGggPSAxNTsKPiArCX0KCllv dSBjYW4ganVzdCByZXR1cm4KCglpZiAoc2VjdGlvbikKCQlyZXR1cm4gLUVSQU5HRTsKCglvZmZz ZXQgPSAyOwoJbGVuZ3RoID0gKDQgKiAxNikgLSBvZmZzZXQ7CgoJcmV0dXJuIDA7CgoKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29ibGF5b3V0 X29wcyBmczM1bmQwMWdfczF5Ml9vb2JsYXlvdXQgPSB7Cj4gKwkuZWNjID0gZnMzNW5kMDFnX3Mx eTJfb29ibGF5b3V0X2VjYywKPiArCS5mcmVlID0gZnMzNW5kMDFnX3MxeTJfb29ibGF5b3V0X2Zy ZWUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGZzMzVuZDAxZ19zMXkyX2VjY19nZXRfc3RhdHVz KHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwKPiArCQkJCQl1OCBzdGF0dXMpCj4gK3sK PiArCXN3aXRjaCAoc3RhdHVzICYgU1RBVFVTX0VDQ19NQVNLKSB7Cj4gKwljYXNlIEZTMzVORDAx R19TMVkyX1NUQVRVU19FQ0NfMF8zX0JJVEZMSVBTOgo+ICsJCXJldHVybiAzOwo+ICsJLyoKPiAr CSAqIFRoZSBkYXRhc2hlZXQgc2F5cyAqc3VjY2Vzc2Z1bCogd2l0aCA0IGJpdHMgZmxpcHBlZC4K PiArCSAqIG5hbmRiaXRlcnJzIGFsd2F5cyBjb21wbGFpbnMgdGhhdCB0aGUgcmVhZCByZXBvcnRl ZAo+ICsJICogc3VjY2Vzc2Z1bCBidXQgdGhlIGRhdGEgaXMgaW5jb3JyZWN0Lgo+ICsJICovCj4g KwljYXNlIEZTMzVORDAxR19TMVkyX1NUQVRVU19FQ0NfNF9CSVRGTElQUzoKPiArCQlyZXR1cm4g NDsKClRoaXMgaXMgYSByZWFsIGlzc3VlLiBDYW4geW91IHVzZSB0aGUgbmFuZGZsaXBiaXRzIHRv b2wgZnJvbSB0aGUKbXRkLXV0aWxzIHBhY2thZ2UgKHlvdSBzaG91bGQgdGFrZSBhIHJlY2VudCB2 ZXJzaW9uIG9mIHRoZSBwYWNrYWdlKSBhbmQKdHJ5IHRvIG9ic2VydmUgd2hhdCBoYXBwZW5zIHdo ZW4geW91IGluc2VydCBhIDR0aCBiaXRmbGlwIGluIGEgc2VjdGlvbj8KCkkgZ2VuZXJhbGx5IGJl bGlldmUgdGhlIHRvb2wgbW9yZSB0aGFuIHRoZSBkYXRhc2hlZXQgOikKCj4gKwljYXNlIEZTMzVO RDAxR19TMVkyX1NUQVRVU19FQ0NfVU5DT1JSRUNUQUJMRToKPiArCQlyZXR1cm4gLUVCQURNU0c7 Cj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaW5hbmRfaW5mbyBsb25nc3lzX3NwaW5h bmRfdGFibGVbXSA9IHsKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDFHLVMxWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVBLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgMTAyNCwgMjAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDJHLVMzWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVCLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgMjA0OCwgNDAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArCVNQSU5BTkRfSU5GTygiRlMzNU5EMDRHLVMyWTIiLAo+ICsJCSAg ICAgU1BJTkFORF9JRChTUElOQU5EX1JFQURJRF9NRVRIT0RfT1BDT0RFX0RVTU1ZLCAweEVDLCAw eDExKSwKPiArCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgNDA5NiwgNDAsIDEs IDEsIDEpLAo+ICsJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKPiArCQkgICAgIFNQSU5BTkRf SU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50cywKPiArCQkJCQkgICAgICAmd3Jp dGVfY2FjaGVfdmFyaWFudHMsCj4gKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyks Cj4gKwkJICAgICBTUElOQU5EX0hBU19RRV9CSVQsCj4gKwkJICAgICBTUElOQU5EX0VDQ0lORk8o JmZzMzVuZDAxZ19zMXkyX29vYmxheW91dCwKPiArCQkJCSAgICAgZnMzNW5kMDFnX3MxeTJfZWNj X2dldF9zdGF0dXMpKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9t YW51ZmFjdHVyZXJfb3BzIGxvbmdzeXNfc3BpbmFuZF9tYW51Zl9vcHMgPSB7Cj4gK307Cj4gKwo+ ICtjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIgbG9uZ3N5c19zcGluYW5kX21hbnVm YWN0dXJlciA9IHsKPiArCS5pZCA9IFNQSU5BTkRfTUZSX0xPTkdTWVMsCj4gKwkubmFtZSA9ICJM b25nc3lzIiwKPiArCS5jaGlwcyA9IGxvbmdzeXNfc3BpbmFuZF90YWJsZSwKPiArCS5uY2hpcHMg PSBBUlJBWV9TSVpFKGxvbmdzeXNfc3BpbmFuZF90YWJsZSksCj4gKwkub3BzID0gJmxvbmdzeXNf c3BpbmFuZF9tYW51Zl9vcHMsCj4gK307Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRk L3NwaW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAo+IGluZGV4IDY5ODg5NTZi ODQ5Mi4uZjZjMzg1MjhiYjAzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3NwaW5h bmQuaAo+ICsrKyBiL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAo+IEBAIC0yNjEsNiArMjYx LDcgQEAgc3RydWN0IHNwaW5hbmRfbWFudWZhY3R1cmVyIHsKPiAgCj4gIC8qIFNQSSBOQU5EIG1h bnVmYWN0dXJlcnMgKi8KPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcGluYW5kX21hbnVmYWN0dXJl ciBnaWdhZGV2aWNlX3NwaW5hbmRfbWFudWZhY3R1cmVyOwo+ICtleHRlcm4gY29uc3Qgc3RydWN0 IHNwaW5hbmRfbWFudWZhY3R1cmVyIGxvbmdzeXNfc3BpbmFuZF9tYW51ZmFjdHVyZXI7Cj4gIGV4 dGVybiBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIgbWFjcm9uaXhfc3BpbmFuZF9t YW51ZmFjdHVyZXI7Cj4gIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9tYW51ZmFjdHVyZXIg bWljcm9uX3NwaW5hbmRfbWFudWZhY3R1cmVyOwo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHNwaW5h bmRfbWFudWZhY3R1cmVyIHBhcmFnb25fc3BpbmFuZF9tYW51ZmFjdHVyZXI7CgpPdGhlcndpc2Ug TEdUTS4KClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=