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.7 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,URIBL_BLOCKED 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 351FDC433E0 for ; Fri, 15 Jan 2021 16:07:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D78D92388B for ; Fri, 15 Jan 2021 16:07:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727288AbhAOQHI (ORCPT ); Fri, 15 Jan 2021 11:07:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726801AbhAOQHI (ORCPT ); Fri, 15 Jan 2021 11:07:08 -0500 Received: from mail-io1-xd30.google.com (mail-io1-xd30.google.com [IPv6:2607:f8b0:4864:20::d30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C167FC0613C1 for ; Fri, 15 Jan 2021 08:06:27 -0800 (PST) Received: by mail-io1-xd30.google.com with SMTP id q2so17395044iow.13 for ; Fri, 15 Jan 2021 08:06:27 -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=8j+SubTzc7aiQoPF3+oOrZYdaeRp1EZ6gqGhEwgPi2I=; b=bovepj0RLUCsT4gBD61LE0ZTmgcfq4i8FaJLZHEhcQxkaIVnZr1nvHyhd1Qg/WZ+bE oLb5opTjpkqR4F8Gl9t2fl+3FqlNUA/BxwSjcr/KxzgQOkvGtVDKwkt15EEtqQ2XbmoW jFaPD2xWRwOidHrPqEmOUrRQTm6digLcCNyvAoM9HJHU0EPJ5POObaP91Br4eiUoKj3x qnA4MKT20bjwocHwfMIdw9qdYhpcBxDe+1i7Axra5RLVpELJKFx4NG09LxaoF37h88Ii xKLFHU00lxfudmKvP6lDlLaaDKDzzkPcrG+OSlWhaj6fK9tldLewV5myc1beBGTsSBNG A3fA== 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=8j+SubTzc7aiQoPF3+oOrZYdaeRp1EZ6gqGhEwgPi2I=; b=Ar6IZ4pOuPznxk9WdqMDadUCSqlFaPnuZdKSsNwgOJlKBrmqcgLPrY6BxtcaDOsURF 1uVW2Fq03W1JclsVz+J1Uj760TcPXtAP2G9kbjEv/G1Qh3V8fbxFQHNlQuGo+PSn+25g x6GmBAQfyiN/VCGUCOJzhotDIUqH1N/H5PySlQGbEPhf3WM1yDsqgCVMAscvpj85LMQm tYvhtbiJR0urTqn4r2vBQ2JHC8kZdz3IckSO5vp0L6yI4p2XPmcf4HjZHvO19LlAtK1H +JzVOjjrxFtWrHjSZprKTTXeKQSIvCspRPY1zgjKHmXgebarLI7qET50OtEh734v88il KhOA== X-Gm-Message-State: AOAM532uqYhorHXeHsKDbEPqlynSsDIicl+JB8cKZEkmZis9iCYEaiBD 3xHi/tOmwJdC+IkbKwTxG5qnriA8WV9ALkJAkas= X-Google-Smtp-Source: ABdhPJzx0og6PfdVnxpFQJTLpguU0d68JWvSasxiwCBGeJdcCkAMBB0dDMktgdZuAGIJafiKQd3Znp7GqCqJVn4XQCc= X-Received: by 2002:a6b:7501:: with SMTP id l1mr9094045ioh.92.1610726786773; Fri, 15 Jan 2021 08:06:26 -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> In-Reply-To: From: Adam Ford Date: Fri, 15 Jan 2021 10:06:14 -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 Fri, Jan 15, 2021 at 6:23 AM Adam Ford wrote: > > On Thu, Jan 14, 2021 at 9:42 AM Miquel Raynal = wrote: > > > > Hi Adam, > > > > Adam Ford wrote on Tue, 12 Jan 2021 11:20:24 -0600= : > > > > > On Tue, Jan 12, 2021 at 10:01 AM Adam Ford wrote= : > > > > > > > > On Tue, Jan 12, 2021 at 8:35 AM Miquel Raynal wrote: > > > > > > > > > > Hi Adam, > > > > > > > > > > Miquel Raynal wrote on Mon, 11 Jan 20= 21 > > > > > 11:20:27 +0100: > > > > > > > > > > > Hi Adam, > > > > > > > > > > > > Adam Ford wrote on Sat, 9 Jan 2021 08:46:4= 4 -0600: > > > > > > > > > > > > > On Tue, Sep 29, 2020 at 6:09 PM Miquel Raynal wrote: > > > > > > > > > > > > > > > > The NAND BCH control structure has nothing to do outside of= this > > > > > > > > driver, all users of the nand_bch_init/free() functions jus= t save it > > > > > > > > to chip->ecc.priv so do it in this driver directly and retu= rn a > > > > > > > > regular error code instead. > > > > > > > > > > > > > > > > Signed-off-by: Miquel Raynal > > > > > > > > --- > > > > > > > > > > > > > > Starting with this commit: 3c0fe36abebe, the kernel either d= oesn't > > > > > > > build or returns errors on some omap2plus devices with the fo= llowing > > > > > > > error: > > > > > > > > > > > > > > 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 > > > > > > > Invalid ECC layout > > > > > > > omap2-nand 30000000.nand: unable to use BCH library > > > > > > > omap2-nand: probe of 30000000.nand failed with error -22 > > > > > > > 8<--- cut here --- > > > > > > > > > > > > > > There are few commits using git bisect that have build errors= , so it > > > > > > > wasn't possible for me to determine the exact commit that bro= ke the > > > > > > > ECC. If the build failed, I marked it as 'bad' to git bisect= . > > > > > > > > > > > > I am sorry to hear that, I regularly rebase with a make run bet= ween each > > > > > > pick and push my branches to a 0-day repository to have robots = check > > > > > > for such errors, but sometimes I fail. > > > > > > > > > > > > > Newer commits have remedied the build issue, but the Invalid = ECC > > > > > > > layout error still exists as of 5.11-RC2. > > > > > > > > > > > > Ok so let's focus on these. > > > > > > > > > > > > > Do you have any suggestions on what I can do to remedy this? = I am > > > > > > > willing to try and test. > > > > > > > > > > > > Glad to hear that. > > > > > > > > > > > > Can you share the NAND controller DT node you are using? > > > > > > > > > > > > Also, can you please add a few printk's like below and give me = the > > > > > > output? > > > > > > > > > > Will you have the time to check these soon? I am ready to help an= d > > > > > would like to fix it asap. > > > > > > > > Sorry for the delay, I have to split my time with 3 different > > > > projects. I am hoping to get you data later today. > > > > > > > Miquel, > > > > > > Here is the dump from my boot sequence: > > > > > > [ 2.629089] omap2-nand 30000000.nand: GPIO lookup for consumer rb > > > [ 2.635253] omap2-nand 30000000.nand: using device tree for GPIO l= ookup > > > [ 2.642150] of_get_named_gpiod_flags: parsed 'rb-gpios' property o= f node '/o) > > > [ 2.653900] gpio gpiochip6: Persistence not supported for GPIO 0 > > > [ 2.660339] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x= bc > > > [ 2.666900] nand: Micron MT29F4G16ABBDA3W > > > [ 2.670959] nand: 512 MiB, SLC, erase size: 128 KiB, page size: 20= 48, OOB si4 > > > [ 2.678710] nand: using OMAP_ECC_BCH8_CODE_HW_DETECTION_SW > > > [ 2.684234] writesize 2048, step_size 512, nsteps 4 > > > [ 2.689300] strength 8, step size 512, code_size 13 > > > > Until here, everything looks fine. > > > > > [ 2.696807] count eccbytes 0 > > > > This is the cause of the error, the MTD OOB layout reports not ECC byte= . > > > > Can you please check that we effectively call the large page helpers > > (in particular nand_ooblayout_ecc_lp()) . I bet this function returns > > -ERANGE on its first call, which reduces the eccbytes variable above to > > zero. > > I will do what I can, but I am out of my element with this mtd and nand s= tuff. > > I added a printk to the beginning of nand_ooblayout_ecc_lp() and it's > not appearing, so I wonder if nand_ooblayout_ecc_lp() is not getting > called. > > I also added some printk's to the drivers/mtd/nand/raw/omap2.c to see > what's being defined for section and ecc.steps. > > [ 2.621978] mtdoops: mtd device (mtddev=3Dname/number) must be supplie= d > [ 2.629699] omap2-nand 30000000.nand: GPIO lookup for consumer rb > [ 2.635864] omap2-nand 30000000.nand: using device tree for GPIO looku= p > [ 2.642761] of_get_named_gpiod_flags: parsed 'rb-gpios' property of > node '/ocp@68000000/gpmc@6e000000/nand@0,0[0]' - status (0) > [ 2.654510] gpio gpiochip6: Persistence not supported for GPIO 0 > [ 2.660949] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xbc > [ 2.667510] nand: Micron MT29F4G16ABBDA3W > [ 2.671569] nand: 512 MiB, SLC, erase size: 128 KiB, page size: > 2048, OOB size: 64 > [ 2.679321] nand: using OMAP_ECC_BCH8_CODE_HW_DETECTION_SW > [ 2.684844] writesize 2048, step_size 512, nsteps 4 > [ 2.689910] strength 8, step size 512, code_size 13 > [ 2.694824] nand->ecc.ctx.total =3D 52 > [ 2.700988] omap_sw_ooblayout_ecc section 0, chip->ecc.steps 0 > > omap_sw_ooblayout_ecc() returns -ERANGE if section =3D> chip->ecc.steps > which appears to be the case here. > > Is it safe to assume that ecc.steps should be 4 if nsteps is 4? > > [ 2.707031] count eccbytes 0 > [ 2.709930] omap_sw_ooblayout_ecc section 0, chip->ecc.steps 0 > [ 2.715820] Invalid ECC layout > [ 2.719055] omap2-nand 30000000.nand: unable to use BCH library > [ 2.725067] omap2-nand: probe of 30000000.nand failed with error -22 > [ 2.738983] 8<--- cut here --- > > > > > What is strange is that, the only reason this would happen (to my eyes) > > is nand->ecc.ctx.total being 0. Can you please check its effective > > value? > > [ 2.694824] nand->ecc.ctx.total =3D 52 > > > > > I do not see the immediate reason because nand->ecc.ctx.total is set to > > nsteps (4) * code_size (13) right before calling > > mtd_ooblayout_count_eccbytes(). > > > > Can you please verify my sayings and perhaps tackle the root cause of > > this issue? Please do not hesitate to ask questions, I'll do my best to > > help because this is a critical section that is not only breaking > > OMAP boards, unfortunately. 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_device *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 am guessing it's not exactly what you want, but appears that the ecc.steps and ecc.size wasn't getting propagated to the mtd layer, so when omap_sw_ooblayout_ecc() was called, those fields were blank. If you have a suggestion on how you want this implemented, I can push a pat= ch. adam > > > > 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.7 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,URIBL_BLOCKED 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 5719DC433DB for ; Fri, 15 Jan 2021 16:07:26 +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 08AE82388B for ; Fri, 15 Jan 2021 16:07:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 08AE82388B 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=RVpWoMBFQHvfyfNV++KK9BAW4VtCYChaDUXrbEdWLiI=; b=N97Kr5+KQkluWaKI+ID4gsuKY pPQyDh9gVpCsJ1BbldkuvAFx8G5holjMZwL6VuDwK3phGF6bcjIlnhdKGJy2xoLghIrU49IXi3tZT Ea3Ra6vPzxyCxRbz8QGkVa1/tznenDSckvSU6zCXQ8l3Sem7bGJXRc8NLheHh+bDiSkzkz5B+Rm3v Ip9feNv4Lf8DoJdN3kIa2oUq3G5xJjVqyEk2AYrR6Qlr9SiptozxuJy4l+2SypZGyweZQDWJw23P0 GODfVfsRpY/ndKCQcHgDMnIVH+HGaR76nT0jLxp7Vd3Vr+oC9ldBH1HzkruHi2HLl4VRAjCBf0RZG PPZnmT+DQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0RcS-0001HV-On; Fri, 15 Jan 2021 16:06:36 +0000 Received: from mail-io1-xd2b.google.com ([2607:f8b0:4864:20::d2b]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l0RcL-0001Gk-SA for linux-mtd@lists.infradead.org; Fri, 15 Jan 2021 16:06:30 +0000 Received: by mail-io1-xd2b.google.com with SMTP id z5so19003196iob.11 for ; Fri, 15 Jan 2021 08:06:28 -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=8j+SubTzc7aiQoPF3+oOrZYdaeRp1EZ6gqGhEwgPi2I=; b=bovepj0RLUCsT4gBD61LE0ZTmgcfq4i8FaJLZHEhcQxkaIVnZr1nvHyhd1Qg/WZ+bE oLb5opTjpkqR4F8Gl9t2fl+3FqlNUA/BxwSjcr/KxzgQOkvGtVDKwkt15EEtqQ2XbmoW jFaPD2xWRwOidHrPqEmOUrRQTm6digLcCNyvAoM9HJHU0EPJ5POObaP91Br4eiUoKj3x qnA4MKT20bjwocHwfMIdw9qdYhpcBxDe+1i7Axra5RLVpELJKFx4NG09LxaoF37h88Ii xKLFHU00lxfudmKvP6lDlLaaDKDzzkPcrG+OSlWhaj6fK9tldLewV5myc1beBGTsSBNG A3fA== 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=8j+SubTzc7aiQoPF3+oOrZYdaeRp1EZ6gqGhEwgPi2I=; b=LcubfN9yvr2e1xitlAwfcvAoiMuM+g4ROuaYkV38Jtlei4GL9u9UQx+Cc3QjlYTPqX y5fs53MKtGleuEWj+u+wcMcnGoxCQtwmgHKfv/j4EkNNsvI3s2wDGWMqq3kQ8USyu9II B5lrPQ7DvKWUd4lDm+DhoHfYgWlDWKROD07ReUfR/vHi9DIUJDVxtNHx3vYCYu85wJda FNbtf6CkuzimMYxSGjqcudPNCw4PyiHWYDzi5RX4LCg+6WSsqv2DQ0CdxtrqJyTwBAdB yOqkyySdvZAl+hYNrU3fnomVm71s5Y5QEm0XPWzGkCqVFV6oviqPBM5pwEbH4NCFLy9Y 4h+w== X-Gm-Message-State: AOAM533sCJZ8nKidjivwfCQs0RJQq02wPT5rWUmYrmrbDXwVL05Y2WID L9QeCIAya6hPCGS823mwf8DF6usgSxRJ5Le7od0= X-Google-Smtp-Source: ABdhPJzx0og6PfdVnxpFQJTLpguU0d68JWvSasxiwCBGeJdcCkAMBB0dDMktgdZuAGIJafiKQd3Znp7GqCqJVn4XQCc= X-Received: by 2002:a6b:7501:: with SMTP id l1mr9094045ioh.92.1610726786773; Fri, 15 Jan 2021 08:06:26 -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> In-Reply-To: From: Adam Ford Date: Fri, 15 Jan 2021 10:06:14 -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-20210115_110629_967995_C8123A79 X-CRM114-Status: GOOD ( 42.21 ) 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 T24gRnJpLCBKYW4gMTUsIDIwMjEgYXQgNjoyMyBBTSBBZGFtIEZvcmQgPGFmb3JkMTczQGdtYWls LmNvbT4gd3JvdGU6Cj4KPiBPbiBUaHUsIEphbiAxNCwgMjAyMSBhdCA5OjQyIEFNIE1pcXVlbCBS YXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+IHdyb3RlOgo+ID4KPiA+IEhpIEFkYW0s Cj4gPgo+ID4gQWRhbSBGb3JkIDxhZm9yZDE3M0BnbWFpbC5jb20+IHdyb3RlIG9uIFR1ZSwgMTIg SmFuIDIwMjEgMTE6MjA6MjQgLTA2MDA6Cj4gPgo+ID4gPiBPbiBUdWUsIEphbiAxMiwgMjAyMSBh dCAxMDowMSBBTSBBZGFtIEZvcmQgPGFmb3JkMTczQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4K PiA+ID4gPiBPbiBUdWUsIEphbiAxMiwgMjAyMSBhdCA4OjM1IEFNIE1pcXVlbCBSYXluYWwgPG1p cXVlbC5yYXluYWxAYm9vdGxpbi5jb20+IHdyb3RlOgo+ID4gPiA+ID4KPiA+ID4gPiA+IEhpIEFk YW0sCj4gPiA+ID4gPgo+ID4gPiA+ID4gTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290 bGluLmNvbT4gd3JvdGUgb24gTW9uLCAxMSBKYW4gMjAyMQo+ID4gPiA+ID4gMTE6MjA6MjcgKzAx MDA6Cj4gPiA+ID4gPgo+ID4gPiA+ID4gPiBIaSBBZGFtLAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiBBZGFtIEZvcmQgPGFmb3JkMTczQGdtYWlsLmNvbT4gd3JvdGUgb24gU2F0LCA5IEphbiAyMDIx IDA4OjQ2OjQ0IC0wNjAwOgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IE9uIFR1ZSwgU2VwIDI5 LCAyMDIwIGF0IDY6MDkgUE0gTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNv bT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gVGhlIE5BTkQgQkNIIGNv bnRyb2wgc3RydWN0dXJlIGhhcyBub3RoaW5nIHRvIGRvIG91dHNpZGUgb2YgdGhpcwo+ID4gPiA+ ID4gPiA+ID4gZHJpdmVyLCBhbGwgdXNlcnMgb2YgdGhlIG5hbmRfYmNoX2luaXQvZnJlZSgpIGZ1 bmN0aW9ucyBqdXN0IHNhdmUgaXQKPiA+ID4gPiA+ID4gPiA+IHRvIGNoaXAtPmVjYy5wcml2IHNv IGRvIGl0IGluIHRoaXMgZHJpdmVyIGRpcmVjdGx5IGFuZCByZXR1cm4gYQo+ID4gPiA+ID4gPiA+ ID4gcmVndWxhciBlcnJvciBjb2RlIGluc3RlYWQuCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ID4gU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGlu LmNvbT4KPiA+ID4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gU3Rh cnRpbmcgd2l0aCB0aGlzIGNvbW1pdDogIDNjMGZlMzZhYmViZSwgdGhlIGtlcm5lbCBlaXRoZXIg ZG9lc24ndAo+ID4gPiA+ID4gPiA+IGJ1aWxkIG9yIHJldHVybnMgZXJyb3JzIG9uIHNvbWUgb21h cDJwbHVzIGRldmljZXMgd2l0aCB0aGUgZm9sbG93aW5nCj4gPiA+ID4gPiA+ID4gZXJyb3I6Cj4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiAgICAgbmFuZDogZGV2aWNlIGZvdW5kLCBNYW51ZmFj dHVyZXIgSUQ6IDB4MmMsIENoaXAgSUQ6IDB4YmMKPiA+ID4gPiA+ID4gPiAgICAgbmFuZDogTWlj cm9uIE1UMjlGNEcxNkFCQkRBM1cKPiA+ID4gPiA+ID4gPiAgICAgbmFuZDogNTEyIE1pQiwgU0xD LCBlcmFzZSBzaXplOiAxMjggS2lCLCBwYWdlIHNpemU6IDIwNDgsIE9PQiBzaXplOiA2NAo+ID4g PiA+ID4gPiA+ICAgICBuYW5kOiB1c2luZyBPTUFQX0VDQ19CQ0g4X0NPREVfSFdfREVURUNUSU9O X1NXCj4gPiA+ID4gPiA+ID4gICAgIEludmFsaWQgRUNDIGxheW91dAo+ID4gPiA+ID4gPiA+ICAg ICBvbWFwMi1uYW5kIDMwMDAwMDAwLm5hbmQ6IHVuYWJsZSB0byB1c2UgQkNIIGxpYnJhcnkKPiA+ ID4gPiA+ID4gPiAgICAgb21hcDItbmFuZDogcHJvYmUgb2YgMzAwMDAwMDAubmFuZCBmYWlsZWQg d2l0aCBlcnJvciAtMjIKPiA+ID4gPiA+ID4gPiAgICAgODwtLS0gY3V0IGhlcmUgLS0tCj4gPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBUaGVyZSBhcmUgZmV3IGNvbW1pdHMgdXNpbmcgZ2l0IGJp c2VjdCB0aGF0IGhhdmUgYnVpbGQgZXJyb3JzLCBzbyBpdAo+ID4gPiA+ID4gPiA+IHdhc24ndCBw b3NzaWJsZSBmb3IgbWUgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBjb21taXQgdGhhdCBicm9rZSB0 aGUKPiA+ID4gPiA+ID4gPiBFQ0MuICBJZiB0aGUgYnVpbGQgZmFpbGVkLCBJIG1hcmtlZCBpdCBh cyAnYmFkJyB0byBnaXQgYmlzZWN0Lgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBJIGFtIHNvcnJ5 IHRvIGhlYXIgdGhhdCwgSSByZWd1bGFybHkgcmViYXNlIHdpdGggYSBtYWtlIHJ1biBiZXR3ZWVu IGVhY2gKPiA+ID4gPiA+ID4gcGljayBhbmQgcHVzaCBteSBicmFuY2hlcyB0byBhIDAtZGF5IHJl cG9zaXRvcnkgdG8gaGF2ZSByb2JvdHMgY2hlY2sKPiA+ID4gPiA+ID4gZm9yIHN1Y2ggZXJyb3Jz LCBidXQgc29tZXRpbWVzIEkgZmFpbC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBOZXdlciBj b21taXRzIGhhdmUgcmVtZWRpZWQgdGhlIGJ1aWxkIGlzc3VlLCBidXQgdGhlIEludmFsaWQgRUND Cj4gPiA+ID4gPiA+ID4gbGF5b3V0IGVycm9yIHN0aWxsIGV4aXN0cyBhcyBvZiA1LjExLVJDMi4K PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gT2sgc28gbGV0J3MgZm9jdXMgb24gdGhlc2UuCj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gRG8geW91IGhhdmUgYW55IHN1Z2dlc3Rpb25zIG9uIHdoYXQg SSBjYW4gZG8gdG8gcmVtZWR5IHRoaXM/ICBJIGFtCj4gPiA+ID4gPiA+ID4gd2lsbGluZyB0byB0 cnkgYW5kIHRlc3QuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEdsYWQgdG8gaGVhciB0aGF0Lgo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBDYW4geW91IHNoYXJlIHRoZSBOQU5EIGNvbnRyb2xsZXIg RFQgbm9kZSB5b3UgYXJlIHVzaW5nPwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBBbHNvLCBjYW4g eW91IHBsZWFzZSBhZGQgYSBmZXcgcHJpbnRrJ3MgbGlrZSBiZWxvdyBhbmQgZ2l2ZSBtZSB0aGUK PiA+ID4gPiA+ID4gb3V0cHV0Pwo+ID4gPiA+ID4KPiA+ID4gPiA+IFdpbGwgeW91IGhhdmUgdGhl IHRpbWUgdG8gY2hlY2sgdGhlc2Ugc29vbj8gSSBhbSByZWFkeSB0byBoZWxwIGFuZAo+ID4gPiA+ ID4gd291bGQgbGlrZSB0byBmaXggaXQgYXNhcC4KPiA+ID4gPgo+ID4gPiA+IFNvcnJ5IGZvciB0 aGUgZGVsYXksIEkgaGF2ZSB0byBzcGxpdCBteSB0aW1lIHdpdGggMyBkaWZmZXJlbnQKPiA+ID4g PiBwcm9qZWN0cy4gIEkgYW0gaG9waW5nIHRvIGdldCB5b3UgZGF0YSBsYXRlciB0b2RheS4KPiA+ ID4gPgo+ID4gPiBNaXF1ZWwsCj4gPiA+Cj4gPiA+IEhlcmUgaXMgdGhlIGR1bXAgZnJvbSBteSBi b290IHNlcXVlbmNlOgo+ID4gPgo+ID4gPiBbICAgIDIuNjI5MDg5XSBvbWFwMi1uYW5kIDMwMDAw MDAwLm5hbmQ6IEdQSU8gbG9va3VwIGZvciBjb25zdW1lciByYgo+ID4gPiBbICAgIDIuNjM1MjUz XSBvbWFwMi1uYW5kIDMwMDAwMDAwLm5hbmQ6IHVzaW5nIGRldmljZSB0cmVlIGZvciBHUElPIGxv b2t1cAo+ID4gPiBbICAgIDIuNjQyMTUwXSBvZl9nZXRfbmFtZWRfZ3Bpb2RfZmxhZ3M6IHBhcnNl ZCAncmItZ3Bpb3MnIHByb3BlcnR5IG9mIG5vZGUgJy9vKQo+ID4gPiBbICAgIDIuNjUzOTAwXSBn cGlvIGdwaW9jaGlwNjogUGVyc2lzdGVuY2Ugbm90IHN1cHBvcnRlZCBmb3IgR1BJTyAwCj4gPiA+ IFsgICAgMi42NjAzMzldIG5hbmQ6IGRldmljZSBmb3VuZCwgTWFudWZhY3R1cmVyIElEOiAweDJj LCBDaGlwIElEOiAweGJjCj4gPiA+IFsgICAgMi42NjY5MDBdIG5hbmQ6IE1pY3JvbiBNVDI5RjRH MTZBQkJEQTNXCj4gPiA+IFsgICAgMi42NzA5NTldIG5hbmQ6IDUxMiBNaUIsIFNMQywgZXJhc2Ug c2l6ZTogMTI4IEtpQiwgcGFnZSBzaXplOiAyMDQ4LCBPT0Igc2k0Cj4gPiA+IFsgICAgMi42Nzg3 MTBdIG5hbmQ6IHVzaW5nIE9NQVBfRUNDX0JDSDhfQ09ERV9IV19ERVRFQ1RJT05fU1cKPiA+ID4g WyAgICAyLjY4NDIzNF0gd3JpdGVzaXplIDIwNDgsIHN0ZXBfc2l6ZSA1MTIsIG5zdGVwcyA0Cj4g PiA+IFsgICAgMi42ODkzMDBdIHN0cmVuZ3RoIDgsIHN0ZXAgc2l6ZSA1MTIsIGNvZGVfc2l6ZSAx Mwo+ID4KPiA+IFVudGlsIGhlcmUsIGV2ZXJ5dGhpbmcgbG9va3MgZmluZS4KPiA+Cj4gPiA+IFsg ICAgMi42OTY4MDddIGNvdW50IGVjY2J5dGVzIDAKPiA+Cj4gPiBUaGlzIGlzIHRoZSBjYXVzZSBv ZiB0aGUgZXJyb3IsIHRoZSBNVEQgT09CIGxheW91dCByZXBvcnRzIG5vdCBFQ0MgYnl0ZS4KPiA+ Cj4gPiBDYW4geW91IHBsZWFzZSBjaGVjayB0aGF0IHdlIGVmZmVjdGl2ZWx5IGNhbGwgdGhlIGxh cmdlIHBhZ2UgaGVscGVycwo+ID4gKGluIHBhcnRpY3VsYXIgbmFuZF9vb2JsYXlvdXRfZWNjX2xw KCkpIC4gSSBiZXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zCj4gPiAtRVJBTkdFIG9uIGl0cyBmaXJz dCBjYWxsLCB3aGljaCByZWR1Y2VzIHRoZSBlY2NieXRlcyB2YXJpYWJsZSBhYm92ZSB0bwo+ID4g emVyby4KPgo+IEkgd2lsbCBkbyB3aGF0IEkgY2FuLCBidXQgSSBhbSBvdXQgb2YgbXkgZWxlbWVu dCB3aXRoIHRoaXMgbXRkIGFuZCBuYW5kIHN0dWZmLgo+Cj4gSSBhZGRlZCBhIHByaW50ayB0byB0 aGUgYmVnaW5uaW5nIG9mIG5hbmRfb29ibGF5b3V0X2VjY19scCgpIGFuZCBpdCdzCj4gbm90IGFw cGVhcmluZywgc28gSSB3b25kZXIgaWYgbmFuZF9vb2JsYXlvdXRfZWNjX2xwKCkgaXMgbm90IGdl dHRpbmcKPiBjYWxsZWQuCj4KPiBJIGFsc28gYWRkZWQgc29tZSBwcmludGsncyB0byB0aGUgZHJp dmVycy9tdGQvbmFuZC9yYXcvb21hcDIuYyB0byBzZWUKPiB3aGF0J3MgYmVpbmcgZGVmaW5lZCBm b3Igc2VjdGlvbiBhbmQgZWNjLnN0ZXBzLgo+Cj4gWyAgICAyLjYyMTk3OF0gbXRkb29wczogbXRk IGRldmljZSAobXRkZGV2PW5hbWUvbnVtYmVyKSBtdXN0IGJlIHN1cHBsaWVkCj4gWyAgICAyLjYy OTY5OV0gb21hcDItbmFuZCAzMDAwMDAwMC5uYW5kOiBHUElPIGxvb2t1cCBmb3IgY29uc3VtZXIg cmIKPiBbICAgIDIuNjM1ODY0XSBvbWFwMi1uYW5kIDMwMDAwMDAwLm5hbmQ6IHVzaW5nIGRldmlj ZSB0cmVlIGZvciBHUElPIGxvb2t1cAo+IFsgICAgMi42NDI3NjFdIG9mX2dldF9uYW1lZF9ncGlv ZF9mbGFnczogcGFyc2VkICdyYi1ncGlvcycgcHJvcGVydHkgb2YKPiBub2RlICcvb2NwQDY4MDAw MDAwL2dwbWNANmUwMDAwMDAvbmFuZEAwLDBbMF0nIC0gc3RhdHVzICgwKQo+IFsgICAgMi42NTQ1 MTBdIGdwaW8gZ3Bpb2NoaXA2OiBQZXJzaXN0ZW5jZSBub3Qgc3VwcG9ydGVkIGZvciBHUElPIDAK PiBbICAgIDIuNjYwOTQ5XSBuYW5kOiBkZXZpY2UgZm91bmQsIE1hbnVmYWN0dXJlciBJRDogMHgy YywgQ2hpcCBJRDogMHhiYwo+IFsgICAgMi42Njc1MTBdIG5hbmQ6IE1pY3JvbiBNVDI5RjRHMTZB QkJEQTNXCj4gWyAgICAyLjY3MTU2OV0gbmFuZDogNTEyIE1pQiwgU0xDLCBlcmFzZSBzaXplOiAx MjggS2lCLCBwYWdlIHNpemU6Cj4gMjA0OCwgT09CIHNpemU6IDY0Cj4gWyAgICAyLjY3OTMyMV0g bmFuZDogdXNpbmcgT01BUF9FQ0NfQkNIOF9DT0RFX0hXX0RFVEVDVElPTl9TVwo+IFsgICAgMi42 ODQ4NDRdIHdyaXRlc2l6ZSAyMDQ4LCBzdGVwX3NpemUgNTEyLCBuc3RlcHMgNAo+IFsgICAgMi42 ODk5MTBdIHN0cmVuZ3RoIDgsIHN0ZXAgc2l6ZSA1MTIsIGNvZGVfc2l6ZSAxMwo+IFsgICAgMi42 OTQ4MjRdIG5hbmQtPmVjYy5jdHgudG90YWwgPSA1Mgo+IFsgICAgMi43MDA5ODhdIG9tYXBfc3df b29ibGF5b3V0X2VjYyBzZWN0aW9uIDAsIGNoaXAtPmVjYy5zdGVwcyAwCj4KPiBvbWFwX3N3X29v YmxheW91dF9lY2MoKSByZXR1cm5zIC1FUkFOR0UgaWYgc2VjdGlvbiA9PiBjaGlwLT5lY2Muc3Rl cHMKPiB3aGljaCBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIGhlcmUuCj4KPiBJcyBpdCBzYWZlIHRv IGFzc3VtZSB0aGF0IGVjYy5zdGVwcyBzaG91bGQgYmUgNCBpZiBuc3RlcHMgaXMgND8KPgo+IFsg ICAgMi43MDcwMzFdIGNvdW50IGVjY2J5dGVzIDAKPiBbICAgIDIuNzA5OTMwXSBvbWFwX3N3X29v YmxheW91dF9lY2Mgc2VjdGlvbiAwLCBjaGlwLT5lY2Muc3RlcHMgMAo+IFsgICAgMi43MTU4MjBd IEludmFsaWQgRUNDIGxheW91dAo+IFsgICAgMi43MTkwNTVdIG9tYXAyLW5hbmQgMzAwMDAwMDAu bmFuZDogdW5hYmxlIHRvIHVzZSBCQ0ggbGlicmFyeQo+IFsgICAgMi43MjUwNjddIG9tYXAyLW5h bmQ6IHByb2JlIG9mIDMwMDAwMDAwLm5hbmQgZmFpbGVkIHdpdGggZXJyb3IgLTIyCj4gWyAgICAy LjczODk4M10gODwtLS0gY3V0IGhlcmUgLS0tCj4KPiA+Cj4gPiBXaGF0IGlzIHN0cmFuZ2UgaXMg dGhhdCwgdGhlIG9ubHkgcmVhc29uIHRoaXMgd291bGQgaGFwcGVuICh0byBteSBleWVzKQo+ID4g aXMgbmFuZC0+ZWNjLmN0eC50b3RhbCBiZWluZyAwLiBDYW4geW91IHBsZWFzZSBjaGVjayBpdHMg ZWZmZWN0aXZlCj4gPiB2YWx1ZT8KPgo+IFsgICAgMi42OTQ4MjRdIG5hbmQtPmVjYy5jdHgudG90 YWwgPSA1Mgo+Cj4gPgo+ID4gSSBkbyBub3Qgc2VlIHRoZSBpbW1lZGlhdGUgcmVhc29uIGJlY2F1 c2UgbmFuZC0+ZWNjLmN0eC50b3RhbCBpcyBzZXQgdG8KPiA+IG5zdGVwcyAoNCkgKiBjb2RlX3Np emUgKDEzKSByaWdodCBiZWZvcmUgY2FsbGluZwo+ID4gbXRkX29vYmxheW91dF9jb3VudF9lY2Ni eXRlcygpLgo+ID4KPiA+IENhbiB5b3UgcGxlYXNlIHZlcmlmeSBteSBzYXlpbmdzIGFuZCBwZXJo YXBzIHRhY2tsZSB0aGUgcm9vdCBjYXVzZSBvZgo+ID4gdGhpcyBpc3N1ZT8gUGxlYXNlIGRvIG5v dCBoZXNpdGF0ZSB0byBhc2sgcXVlc3Rpb25zLCBJJ2xsIGRvIG15IGJlc3QgdG8KPiA+IGhlbHAg YmVjYXVzZSB0aGlzIGlzIGEgY3JpdGljYWwgc2VjdGlvbiB0aGF0IGlzIG5vdCBvbmx5IGJyZWFr aW5nCj4gPiBPTUFQIGJvYXJkcywgdW5mb3J0dW5hdGVseS4KCkkgYXBwZWFyIHRvIGhhdmUgdGhl IE5BTkQgZmxhc2ggd29ya2luZyB3aXRoIHRoZSBmb2xsb3dpbmcgcGF0Y2g6CgpAQCAtMjQ3LDEx ICsyNTMsMjEgQEAgaW50IG5hbmRfZWNjX3N3X2JjaF9pbml0X2N0eChzdHJ1Y3QgbmFuZF9kZXZp Y2UgKm5hbmQpCiAgICAgICAgbmFuZC0+ZWNjLmN0eC5wcml2ID0gZW5naW5lX2NvbmY7CiAgICAg ICAgbmFuZC0+ZWNjLmN0eC50b3RhbCA9IG5zdGVwcyAqIGNvZGVfc2l6ZTsKCisgICAgICAgc3Ry dWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7CisgICAgICAgY2hpcC0+ZWNj LnN0ZXBzID0gbnN0ZXBzOworICAgICAgIGNoaXAtPmVjYy5zaXplID0gIGNvbmYtPnN0ZXBfc2l6 ZTsKCkkgYW0gZ3Vlc3NpbmcgaXQncyBub3QgZXhhY3RseSB3aGF0IHlvdSB3YW50LCBidXQgYXBw ZWFycyB0aGF0IHRoZQplY2Muc3RlcHMgYW5kIGVjYy5zaXplIHdhc24ndCBnZXR0aW5nIHByb3Bh Z2F0ZWQgdG8gdGhlIG10ZCBsYXllciwgc28Kd2hlbiBvbWFwX3N3X29vYmxheW91dF9lY2MoKSB3 YXMgY2FsbGVkLCB0aG9zZSBmaWVsZHMgd2VyZSBibGFuay4KCklmIHlvdSBoYXZlIGEgc3VnZ2Vz dGlvbiBvbiBob3cgeW91IHdhbnQgdGhpcyBpbXBsZW1lbnRlZCwgSSBjYW4gcHVzaCBhIHBhdGNo LgoKYWRhbQoKCgo+ID4KPiA+IFRoYW5rcywKPiA+IE1pcXXDqGwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lv biBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1tdGQvCg==