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=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 B60A5C07EBC for ; Tue, 19 Jan 2021 14:57:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 982EE20DD4 for ; Tue, 19 Jan 2021 14:57:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732408AbhASOyx (ORCPT ); Tue, 19 Jan 2021 09:54:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389462AbhASOW5 (ORCPT ); Tue, 19 Jan 2021 09:22:57 -0500 Received: from mail-io1-xd2d.google.com (mail-io1-xd2d.google.com [IPv6:2607:f8b0:4864:20::d2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCBD5C061575 for ; Tue, 19 Jan 2021 06:21:45 -0800 (PST) Received: by mail-io1-xd2d.google.com with SMTP id y19so39829536iov.2 for ; Tue, 19 Jan 2021 06:21:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=mJFDfw+g9OuT0wOlNFL2GBollo5UBJxkeDTl/x7M484=; b=AfmzuhGFzZ+mzDqvMjOjjVWCrq8X7Jw3OJMXlfmcfnZU9WcaagPTrzBzqvaj0t23Im hsPODsI1ge6xmb1dhix9m18eVPnYuAT5Z/Z+dtLOBWRTwwdaHV47OtiW9Qe9eYOG65K9 CJ4vqO41KRKviVQG4e+OUkCx9JHcec47MP9DR/DMXFlGaYdtv5OjmkK9p9ZKgLpuMiMn tiR/Hi++XIQIwRPvSjhfIl529oci60/hX2FDgaT3pz/X6MhIQ0eIoRnDS564DO815Q8f ULJhavsh4sKjn4LppZQDkCBOXIhyynigL/OvyX88iKIdUZ8mxANxplybb27Kuj5xhrYe R0Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=mJFDfw+g9OuT0wOlNFL2GBollo5UBJxkeDTl/x7M484=; b=YrTuszatKlCdgHrmLfoZZX/BwdfblqR6g0jXaPbt+aQKV/VAwYv7w9UuQScyVraPWD 309gMdaeMMno/vEt4/aOhMUxCbuAuxgh+ptG44QHFInoiOWtSdu+X3FlWoVkQBQp/gvf KiFss4uzndmR9etTL5771aIV4sRFLZptwyZ9NY8OY0gMgdwfis8NBmQ+2FE8lMYLLejp kHJdQHw/jr7Qx+ATUgSH/Lev8v7Av12Fk6LDOARQbUh4KJZ4THodwuW1i2zP/+QiyIFD CdlDHCK8KVqeYm6HbTDmAPYs51dSkmfTT73iGI+/p7FbzESMGd0WS3L7g21d8mG57SW2 TV/g== X-Gm-Message-State: AOAM532/Li3AgIxkGeGOcHJkDcl2/xUYNAg5J/ny4KJfbQ3arZW17ufE q7JVxEsMAlFu5ZNMyyW0PBzsjdo80B+AEZBUdapLIxw4dg8brQ== X-Google-Smtp-Source: ABdhPJxj6y6/aZ07s3Vd4CR1quagDXGe4IxLc8ZgONl6A4fbWoB8PQKWpoBtNoYF+PhtxQ8KDEOs7V0MNtRr1KEV8xE= X-Received: by 2002:a6b:7501:: with SMTP id l1mr3075039ioh.92.1611066104905; Tue, 19 Jan 2021 06:21:44 -0800 (PST) MIME-Version: 1.0 References: <20200929230124.31491-1-miquel.raynal@bootlin.com> <20200929230124.31491-5-miquel.raynal@bootlin.com> <20210111112027.7cbda0ba@xps13> <20210112153534.5ba93cde@xps13> <20210114164224.5d21c170@xps13> <20210115171736.1c837c29@xps13> <20210119125634.6d4c5c1e@xps13> In-Reply-To: <20210119125634.6d4c5c1e@xps13> From: Adam Ford Date: Tue, 19 Jan 2021 08:21:33 -0600 Message-ID: Subject: Re: [PATCH 04/20] mtd: nand: ecc-bch: Stop exporting the private structure To: Miquel Raynal Cc: Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , linux-mtd@lists.infradead.org, Julien Su , ycllin@mxic.com.tw, Thomas Petazzoni , Linux-OMAP Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org On Tue, Jan 19, 2021 at 5:56 AM Miquel Raynal w= rote: > > Hi Adam, > > Thank you very much for troubleshooting this, here is my proposal. > > > > > I appear to have the NAND flash working with the following patch: > > > > > > > > @@ -247,11 +253,21 @@ int nand_ecc_sw_bch_init_ctx(struct nand_devi= ce *nand) > > > > nand->ecc.ctx.priv =3D engine_conf; > > > > nand->ecc.ctx.total =3D nsteps * code_size; > > > > > > > > + struct nand_chip *chip =3D mtd_to_nand(mtd); > > > > + chip->ecc.steps =3D nsteps; > > > > + chip->ecc.size =3D conf->step_size; > > I was fearing that many boards would be affected by this issue but it > appears that the problem will only show up here because the OMAP driver > makes a strange use of the BCH library: it initializes it itself > because it only needs it for a single operation while usually, the core > is in charge of doing that. During the initialization, the OOB layout > is verified. Usually, the BCH driver is used with one of the generic OOB > layouts, while here the OMAP driver uses its own, which reads raw NAND > chip entries. > > I recently moved the BCH driver to only use "generic" NAND bits, which > produced the bug because the entries derived by the layout helpers > have not been updated yet. > > So using raw NAND bits in the BCH driver is not an option here. > Instead, I think the best way to address this is to export the > declaration of the BCH internal configuration structure to the OMAP > driver and use the right values, recently derived by the driver: > > ---8<--- > > Author: Miquel Raynal > Date: Tue Jan 19 12:27:07 2021 +0100 > > wip: fix omap > > Signed-off-by: Miquel Raynal > Thanks for fixing this. I tested your patch, and I no longer get a Panic and the MTD device appears to appear correctly: mtdoops: mtd device (mtddev=3Dname/number) must be supplied omap2-nand 30000000.nand: GPIO lookup for consumer rb omap2-nand 30000000.nand: using device tree for GPIO lookup of_get_named_gpiod_flags: parsed 'rb-gpios' property of node '/ocp@68000000/gpmc@6e000000/nand@0,0[0]' - status (0) gpio gpiochip6: Persistence not supported for GPIO 0 nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xbc nand: Micron MT29F4G16ABBDA3W nand: 512 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 nand: using OMAP_ECC_BCH8_CODE_HW_DETECTION_SW 6 cmdlinepart partitions found on MTD device omap2-nand.0 Creating 6 MTD partitions on "omap2-nand.0": ... When you submit a formal patch, CC me on the patch, and I'll respond with a 'tested-by' adam > diff --git a/drivers/mtd/nand/raw/omap2.c b/drivers/mtd/nand/raw/omap2.c > index fbb9955f2467..2c3e65cb68f3 100644 > --- a/drivers/mtd/nand/raw/omap2.c > +++ b/drivers/mtd/nand/raw/omap2.c > @@ -15,6 +15,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -1866,18 +1867,19 @@ static const struct mtd_ooblayout_ops omap_ooblay= out_ops =3D { > static int omap_sw_ooblayout_ecc(struct mtd_info *mtd, int section, > struct mtd_oob_region *oobregion) > { > - struct nand_chip *chip =3D mtd_to_nand(mtd); > + struct nand_device *nand =3D mtd_to_nanddev(mtd); > + const struct nand_ecc_sw_bch_conf *engine_conf =3D nand->ecc.ctx.= priv; > int off =3D BADBLOCK_MARKER_LENGTH; > > - if (section >=3D chip->ecc.steps) > + if (section >=3D engine_conf->nsteps) > return -ERANGE; > > /* > * When SW correction is employed, one OMAP specific marker byte = is > * reserved after each ECC step. > */ > - oobregion->offset =3D off + (section * (chip->ecc.bytes + 1)); > - oobregion->length =3D chip->ecc.bytes; > + oobregion->offset =3D off + (section * (engine_conf->code_size + = 1)); > + oobregion->length =3D engine_conf->code_size; > > return 0; > } > @@ -1885,7 +1887,8 @@ static int omap_sw_ooblayout_ecc(struct mtd_info *m= td, int section, > static int omap_sw_ooblayout_free(struct mtd_info *mtd, int section, > struct mtd_oob_region *oobregion) > { > - struct nand_chip *chip =3D mtd_to_nand(mtd); > + struct nand_device *nand =3D mtd_to_nanddev(mtd); > + const struct nand_ecc_sw_bch_conf *engine_conf =3D nand->ecc.ctx.= priv; > int off =3D BADBLOCK_MARKER_LENGTH; > > if (section) > @@ -1895,7 +1898,7 @@ static int omap_sw_ooblayout_free(struct mtd_info *= mtd, int section, > * When SW correction is employed, one OMAP specific marker byte = is > * reserved after each ECC step. > */ > - off +=3D ((chip->ecc.bytes + 1) * chip->ecc.steps); > + off +=3D ((engine_conf->code_size + 1) * engine_conf->nsteps); > if (off >=3D mtd->oobsize) > return -ERANGE; > > --->8--- > > Can you please try this patch and compare the values between your hack > and mine of: > - chip->ecc.bytes vs. engine_conf->code_size > - chip->ecc.steps vs. engine_conf->nsteps > The values should be the same, but I prefer to be sure. > > Thanks, > Miqu=C3=A8l 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=-10.8 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 2A712C433DB for ; Tue, 19 Jan 2021 14:23:04 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 D0BDF23132 for ; Tue, 19 Jan 2021 14:23:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D0BDF23132 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FgFA/FL2FfIyn6tWGTQpeCKWGylsYn0SLV1O6BX4JeI=; b=c9vCTpN6BQYumV0UwNIvoXUsb B44pOcaf9H1Pbdtsa+TgcDpanb+V9B2l5EQODYtyFn0aopKSK6I+qRzWLgzHKBqrLkt4Z2z/juvT4 3M/GKyk9rzRQdiJWVK7dZ9U3M7nULR1KklCjhHHWgCEDmMtQbpg03Z7y4LwDpa62vqrLAoTm/s7Kf 5vrfQKATiB052OOXN5QCEJWviAZ75TspONmboELJhiVADt1gMjHAnl6FYfQwQiWimhLg+/eFlMiRs 899oxpTju6Cpf5LxakHZIfknAYWHhZeILTbEC+v4DXlt9yUuCHeHGfZpn9l+fCNPVrQC8DiD/ONTO KcxyhbWlw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l1rtG-0003B5-Gt; Tue, 19 Jan 2021 14:21:50 +0000 Received: from mail-io1-xd36.google.com ([2607:f8b0:4864:20::d36]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l1rtE-0003AL-A7 for linux-mtd@lists.infradead.org; Tue, 19 Jan 2021 14:21:49 +0000 Received: by mail-io1-xd36.google.com with SMTP id e22so16126530iog.6 for ; Tue, 19 Jan 2021 06:21:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=mJFDfw+g9OuT0wOlNFL2GBollo5UBJxkeDTl/x7M484=; b=AfmzuhGFzZ+mzDqvMjOjjVWCrq8X7Jw3OJMXlfmcfnZU9WcaagPTrzBzqvaj0t23Im hsPODsI1ge6xmb1dhix9m18eVPnYuAT5Z/Z+dtLOBWRTwwdaHV47OtiW9Qe9eYOG65K9 CJ4vqO41KRKviVQG4e+OUkCx9JHcec47MP9DR/DMXFlGaYdtv5OjmkK9p9ZKgLpuMiMn tiR/Hi++XIQIwRPvSjhfIl529oci60/hX2FDgaT3pz/X6MhIQ0eIoRnDS564DO815Q8f ULJhavsh4sKjn4LppZQDkCBOXIhyynigL/OvyX88iKIdUZ8mxANxplybb27Kuj5xhrYe R0Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=mJFDfw+g9OuT0wOlNFL2GBollo5UBJxkeDTl/x7M484=; b=sBL6qQd0e7uXG/7cNTqZgYKTazl3jDWjTY/UtZR7lseyOYm650B96vHQZitiISPRPB EvScBKJ8aJjrGMnf3qizJspvGiHwezWVGAn8LYHfdYWh8Cg/4BJWh4VWPdaF6RsQ+LYV 7/rGmxRpj+4dECeRLs03oPsDjsT/+URmByiKztfP3bt0+OZ2g6rASMTYkVE5tMb5SNP2 rFQA3I2xYcZMKpIKLJkxR3y/bW3S7oWN1EPSdKPbpJM7LDF0lFCQUNCuIbF1sOMYmnF1 HANvC+rko/VctHiuN7ZYTDYGndH/m6dS7OVYKxHorAzZ4g63eN/FG2jV0KbLni7k/Q0M coxw== X-Gm-Message-State: AOAM5302cNv551iEvJHFPaTTuast7zhfXnWY79lGw7PtZpHUyVNT/61r pHMab98KkeN7VD3vdLtbRiueAR0QV/KXJRduIII= X-Google-Smtp-Source: ABdhPJxj6y6/aZ07s3Vd4CR1quagDXGe4IxLc8ZgONl6A4fbWoB8PQKWpoBtNoYF+PhtxQ8KDEOs7V0MNtRr1KEV8xE= X-Received: by 2002:a6b:7501:: with SMTP id l1mr3075039ioh.92.1611066104905; Tue, 19 Jan 2021 06:21:44 -0800 (PST) MIME-Version: 1.0 References: <20200929230124.31491-1-miquel.raynal@bootlin.com> <20200929230124.31491-5-miquel.raynal@bootlin.com> <20210111112027.7cbda0ba@xps13> <20210112153534.5ba93cde@xps13> <20210114164224.5d21c170@xps13> <20210115171736.1c837c29@xps13> <20210119125634.6d4c5c1e@xps13> In-Reply-To: <20210119125634.6d4c5c1e@xps13> From: Adam Ford Date: Tue, 19 Jan 2021 08:21:33 -0600 Message-ID: Subject: Re: [PATCH 04/20] mtd: nand: ecc-bch: Stop exporting the private structure To: Miquel Raynal X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210119_092148_378121_E4982295 X-CRM114-Status: GOOD ( 31.83 ) 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: Vignesh Raghavendra , Tudor Ambarus , Julien Su , Richard Weinberger , ycllin@mxic.com.tw, linux-mtd@lists.infradead.org, Thomas Petazzoni , Linux-OMAP 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 T24gVHVlLCBKYW4gMTksIDIwMjEgYXQgNTo1NiBBTSBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5 bmFsQGJvb3RsaW4uY29tPiB3cm90ZToKPgo+IEhpIEFkYW0sCj4KPiBUaGFuayB5b3UgdmVyeSBt dWNoIGZvciB0cm91Ymxlc2hvb3RpbmcgdGhpcywgaGVyZSBpcyBteSBwcm9wb3NhbC4KPgo+ID4g PiA+IEkgYXBwZWFyIHRvIGhhdmUgdGhlIE5BTkQgZmxhc2ggd29ya2luZyB3aXRoIHRoZSBmb2xs b3dpbmcgcGF0Y2g6Cj4gPiA+ID4KPiA+ID4gPiBAQCAtMjQ3LDExICsyNTMsMjEgQEAgaW50IG5h bmRfZWNjX3N3X2JjaF9pbml0X2N0eChzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQpCj4gPiA+ID4g ICAgICAgICBuYW5kLT5lY2MuY3R4LnByaXYgPSBlbmdpbmVfY29uZjsKPiA+ID4gPiAgICAgICAg IG5hbmQtPmVjYy5jdHgudG90YWwgPSBuc3RlcHMgKiBjb2RlX3NpemU7Cj4gPiA+ID4KPiA+ID4g PiArICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+ID4g PiA+ICsgICAgICAgY2hpcC0+ZWNjLnN0ZXBzID0gbnN0ZXBzOwo+ID4gPiA+ICsgICAgICAgY2hp cC0+ZWNjLnNpemUgPSAgY29uZi0+c3RlcF9zaXplOwo+Cj4gSSB3YXMgZmVhcmluZyB0aGF0IG1h bnkgYm9hcmRzIHdvdWxkIGJlIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgYnV0IGl0Cj4gYXBwZWFy cyB0aGF0IHRoZSBwcm9ibGVtIHdpbGwgb25seSBzaG93IHVwIGhlcmUgYmVjYXVzZSB0aGUgT01B UCBkcml2ZXIKPiBtYWtlcyBhIHN0cmFuZ2UgdXNlIG9mIHRoZSBCQ0ggbGlicmFyeTogaXQgaW5p dGlhbGl6ZXMgaXQgaXRzZWxmCj4gYmVjYXVzZSBpdCBvbmx5IG5lZWRzIGl0IGZvciBhIHNpbmds ZSBvcGVyYXRpb24gd2hpbGUgdXN1YWxseSwgdGhlIGNvcmUKPiBpcyBpbiBjaGFyZ2Ugb2YgZG9p bmcgdGhhdC4gRHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIE9PQiBsYXlvdXQKPiBpcyB2 ZXJpZmllZC4gVXN1YWxseSwgdGhlIEJDSCBkcml2ZXIgaXMgdXNlZCB3aXRoIG9uZSBvZiB0aGUg Z2VuZXJpYyBPT0IKPiBsYXlvdXRzLCB3aGlsZSBoZXJlIHRoZSBPTUFQIGRyaXZlciB1c2VzIGl0 cyBvd24sIHdoaWNoIHJlYWRzIHJhdyBOQU5ECj4gY2hpcCBlbnRyaWVzLgo+Cj4gSSByZWNlbnRs eSBtb3ZlZCB0aGUgQkNIIGRyaXZlciB0byBvbmx5IHVzZSAiZ2VuZXJpYyIgTkFORCBiaXRzLCB3 aGljaAo+IHByb2R1Y2VkIHRoZSBidWcgYmVjYXVzZSB0aGUgZW50cmllcyBkZXJpdmVkIGJ5IHRo ZSBsYXlvdXQgaGVscGVycwo+IGhhdmUgbm90IGJlZW4gdXBkYXRlZCB5ZXQuCj4KPiBTbyB1c2lu ZyByYXcgTkFORCBiaXRzIGluIHRoZSBCQ0ggZHJpdmVyIGlzIG5vdCBhbiBvcHRpb24gaGVyZS4K PiBJbnN0ZWFkLCBJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBhZGRyZXNzIHRoaXMgaXMgdG8gZXhw b3J0IHRoZQo+IGRlY2xhcmF0aW9uIG9mIHRoZSBCQ0ggaW50ZXJuYWwgY29uZmlndXJhdGlvbiBz dHJ1Y3R1cmUgdG8gdGhlIE9NQVAKPiBkcml2ZXIgYW5kIHVzZSB0aGUgcmlnaHQgdmFsdWVzLCBy ZWNlbnRseSBkZXJpdmVkIGJ5IHRoZSBkcml2ZXI6Cj4KPiAtLS04PC0tLQo+Cj4gQXV0aG9yOiBN aXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPgo+IERhdGU6ICAgVHVlIEph biAxOSAxMjoyNzowNyAyMDIxICswMTAwCj4KPiAgICAgd2lwOiBmaXggb21hcAo+Cj4gICAgIFNp Z25lZC1vZmYtYnk6IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+Cj4K VGhhbmtzIGZvciBmaXhpbmcgdGhpcy4KCkkgdGVzdGVkIHlvdXIgcGF0Y2gsIGFuZCBJIG5vIGxv bmdlciBnZXQgYSBQYW5pYyBhbmQgdGhlIE1URCBkZXZpY2UKYXBwZWFycyB0byBhcHBlYXIgY29y cmVjdGx5OgoKbXRkb29wczogbXRkIGRldmljZSAobXRkZGV2PW5hbWUvbnVtYmVyKSBtdXN0IGJl IHN1cHBsaWVkCm9tYXAyLW5hbmQgMzAwMDAwMDAubmFuZDogR1BJTyBsb29rdXAgZm9yIGNvbnN1 bWVyIHJiCm9tYXAyLW5hbmQgMzAwMDAwMDAubmFuZDogdXNpbmcgZGV2aWNlIHRyZWUgZm9yIEdQ SU8gbG9va3VwCm9mX2dldF9uYW1lZF9ncGlvZF9mbGFnczogcGFyc2VkICdyYi1ncGlvcycgcHJv cGVydHkgb2Ygbm9kZQonL29jcEA2ODAwMDAwMC9ncG1jQDZlMDAwMDAwL25hbmRAMCwwWzBdJyAt IHN0YXR1cyAoMCkKZ3BpbyBncGlvY2hpcDY6IFBlcnNpc3RlbmNlIG5vdCBzdXBwb3J0ZWQgZm9y IEdQSU8gMApuYW5kOiBkZXZpY2UgZm91bmQsIE1hbnVmYWN0dXJlciBJRDogMHgyYywgQ2hpcCBJ RDogMHhiYwpuYW5kOiBNaWNyb24gTVQyOUY0RzE2QUJCREEzVwpuYW5kOiA1MTIgTWlCLCBTTEMs IGVyYXNlIHNpemU6IDEyOCBLaUIsIHBhZ2Ugc2l6ZTogMjA0OCwgT09CIHNpemU6IDY0Cm5hbmQ6 IHVzaW5nIE9NQVBfRUNDX0JDSDhfQ09ERV9IV19ERVRFQ1RJT05fU1cKNiBjbWRsaW5lcGFydCBw YXJ0aXRpb25zIGZvdW5kIG9uIE1URCBkZXZpY2Ugb21hcDItbmFuZC4wCkNyZWF0aW5nIDYgTVRE IHBhcnRpdGlvbnMgb24gIm9tYXAyLW5hbmQuMCI6Ci4uLgoKV2hlbiB5b3Ugc3VibWl0IGEgZm9y bWFsIHBhdGNoLCBDQyBtZSBvbiB0aGUgcGF0Y2gsIGFuZCBJJ2xsIHJlc3BvbmQKd2l0aCBhICd0 ZXN0ZWQtYnknCgphZGFtCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9vbWFw Mi5jIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvb21hcDIuYwo+IGluZGV4IGZiYjk5NTVmMjQ2Ny4u MmMzZTY1Y2I2OGYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L29tYXAyLmMK PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9vbWFwMi5jCj4gQEAgLTE1LDYgKzE1LDcgQEAK PiAgI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ Cj4gICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFu ZC1lY2Mtc3ctYmNoLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPgo+ICAjaW5j bHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29tYXAtZG1h Lmg+Cj4gQEAgLTE4NjYsMTggKzE4NjcsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGRfb29i bGF5b3V0X29wcyBvbWFwX29vYmxheW91dF9vcHMgPSB7Cj4gIHN0YXRpYyBpbnQgb21hcF9zd19v b2JsYXlvdXRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lv bikKPiAgewo+IC0gICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10 ZCk7Cj4gKyAgICAgICBzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQgPSBtdGRfdG9fbmFuZGRldiht dGQpOwo+ICsgICAgICAgY29uc3Qgc3RydWN0IG5hbmRfZWNjX3N3X2JjaF9jb25mICplbmdpbmVf Y29uZiA9IG5hbmQtPmVjYy5jdHgucHJpdjsKPiAgICAgICAgIGludCBvZmYgPSBCQURCTE9DS19N QVJLRVJfTEVOR1RIOwo+Cj4gLSAgICAgICBpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMp Cj4gKyAgICAgICBpZiAoc2VjdGlvbiA+PSBlbmdpbmVfY29uZi0+bnN0ZXBzKQo+ICAgICAgICAg ICAgICAgICByZXR1cm4gLUVSQU5HRTsKPgo+ICAgICAgICAgLyoKPiAgICAgICAgICAqIFdoZW4g U1cgY29ycmVjdGlvbiBpcyBlbXBsb3llZCwgb25lIE9NQVAgc3BlY2lmaWMgbWFya2VyIGJ5dGUg aXMKPiAgICAgICAgICAqIHJlc2VydmVkIGFmdGVyIGVhY2ggRUNDIHN0ZXAuCj4gICAgICAgICAg Ki8KPiAtICAgICAgIG9vYnJlZ2lvbi0+b2Zmc2V0ID0gb2ZmICsgKHNlY3Rpb24gKiAoY2hpcC0+ ZWNjLmJ5dGVzICsgMSkpOwo+IC0gICAgICAgb29icmVnaW9uLT5sZW5ndGggPSBjaGlwLT5lY2Mu Ynl0ZXM7Cj4gKyAgICAgICBvb2JyZWdpb24tPm9mZnNldCA9IG9mZiArIChzZWN0aW9uICogKGVu Z2luZV9jb25mLT5jb2RlX3NpemUgKyAxKSk7Cj4gKyAgICAgICBvb2JyZWdpb24tPmxlbmd0aCA9 IGVuZ2luZV9jb25mLT5jb2RlX3NpemU7Cj4KPiAgICAgICAgIHJldHVybiAwOwo+ICB9Cj4gQEAg LTE4ODUsNyArMTg4Nyw4IEBAIHN0YXRpYyBpbnQgb21hcF9zd19vb2JsYXlvdXRfZWNjKHN0cnVj dCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiAgc3RhdGljIGludCBvbWFwX3N3X29vYmxh eW91dF9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24p Cj4gIHsKPiAtICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Owo+ICsgICAgICAgc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kID0gbXRkX3RvX25hbmRkZXYobXRk KTsKPiArICAgICAgIGNvbnN0IHN0cnVjdCBuYW5kX2VjY19zd19iY2hfY29uZiAqZW5naW5lX2Nv bmYgPSBuYW5kLT5lY2MuY3R4LnByaXY7Cj4gICAgICAgICBpbnQgb2ZmID0gQkFEQkxPQ0tfTUFS S0VSX0xFTkdUSDsKPgo+ICAgICAgICAgaWYgKHNlY3Rpb24pCj4gQEAgLTE4OTUsNyArMTg5OCw3 IEBAIHN0YXRpYyBpbnQgb21hcF9zd19vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10 ZCwgaW50IHNlY3Rpb24sCj4gICAgICAgICAgKiBXaGVuIFNXIGNvcnJlY3Rpb24gaXMgZW1wbG95 ZWQsIG9uZSBPTUFQIHNwZWNpZmljIG1hcmtlciBieXRlIGlzCj4gICAgICAgICAgKiByZXNlcnZl ZCBhZnRlciBlYWNoIEVDQyBzdGVwLgo+ICAgICAgICAgICovCj4gLSAgICAgICBvZmYgKz0gKChj aGlwLT5lY2MuYnl0ZXMgKyAxKSAqIGNoaXAtPmVjYy5zdGVwcyk7Cj4gKyAgICAgICBvZmYgKz0g KChlbmdpbmVfY29uZi0+Y29kZV9zaXplICsgMSkgKiBlbmdpbmVfY29uZi0+bnN0ZXBzKTsKPiAg ICAgICAgIGlmIChvZmYgPj0gbXRkLT5vb2JzaXplKQo+ICAgICAgICAgICAgICAgICByZXR1cm4g LUVSQU5HRTsKPgo+IC0tLT44LS0tCj4KPiBDYW4geW91IHBsZWFzZSB0cnkgdGhpcyBwYXRjaCBh bmQgY29tcGFyZSB0aGUgdmFsdWVzIGJldHdlZW4geW91ciBoYWNrCj4gYW5kIG1pbmUgb2Y6Cj4g LSBjaGlwLT5lY2MuYnl0ZXMgdnMuIGVuZ2luZV9jb25mLT5jb2RlX3NpemUKPiAtIGNoaXAtPmVj Yy5zdGVwcyB2cy4gZW5naW5lX2NvbmYtPm5zdGVwcwo+IFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHRo ZSBzYW1lLCBidXQgSSBwcmVmZXIgdG8gYmUgc3VyZS4KPgo+IFRoYW5rcywKPiBNaXF1w6hsCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGlu dXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=