From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4582FD49222 for ; Mon, 18 Nov 2024 13:31:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=CgitSO12Tcu39jjcYc9b4qcvZmSoxQsq/VM/TY8Chgw=; b=uXPl+RH4vQt2Jw8OH361D7Qlo4 039lCa73AlRzSuodEpuQMJYyvwe6srCwZUHMUHiz94y9un87x1tWRWrMNEh13icEYORI3xtO8XpJK tDtXpQMOZGyqS9BiprtSL+9Tv08j5IRq+WWGhA08R/bSRKqtJk9ESjPk/jRIF01JJWfNP/cmbZOwH oEKLqKmMiFjvwvaeK8KFC12lvzCRU3vOsoO9o4DxV+5yf4/r5YmmLdsznBjqQgEKdiQC82BB+t1Dt goHyGIOz0211AVXn4kBaO/xJ0VWkikAV2dyUOsehB6HkxX9aGD4ND7xCb2g6zG+kPDztz3K8BSR3m PrCivKRQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tD1qd-00000009aR1-2djl; Mon, 18 Nov 2024 13:31:23 +0000 Received: from relay9-d.mail.gandi.net ([2001:4b98:dc4:8::229]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tD1SI-00000009Un1-1pVy; Mon, 18 Nov 2024 13:06:20 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id D80FEFF806; Mon, 18 Nov 2024 13:06:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1731935172; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CgitSO12Tcu39jjcYc9b4qcvZmSoxQsq/VM/TY8Chgw=; b=aKvYvzsMXQQ+ls8zRUxnMN6GkySr1qXCFabheMfnb2re1dpmlDRs93dxj9kRjTynCcg02/ 1lc4TLcQyEjdG3NW5kg5VBTiF1fQvkygHr6+KILeTA2Wnlol83xPMKVD9p4hwtueAlHR2k pJrl8oMnVn2K+jZXZEpETa0cG/fnJbFRbaxFDDXPlvfikQsC0lKc4EH+U0Ogv3HOAOL0Fh plKibB+fHaASv3ksfyfd2T3Z/6Nw9sJOzKVLdL0pr0wdQ6LGnzKINLswMe6BBtwk0cFd9M i0i/AMm4tNZjYt2Sz915at6l1cB72cQgMnfWgm6vfcxTI4IIDYnmMYJHaFZcuA== From: Miquel Raynal To: Sky Huang Cc: Matthias Brugger , AngeloGioacchino Del Regno , Richard Weinberger , Vignesh Raghavendra , Daniel Golle , Chia-Lin Kao , "Mika Westerberg" , Cheng Ming Lin , , , , , Steven Liu Subject: Re: [RFC PATCH nand/next 3/4] include: mtd: spinand: Add CASN page related macros and flags. In-Reply-To: <20241020132722.20565-4-SkyLake.Huang@mediatek.com> (Sky Huang's message of "Sun, 20 Oct 2024 21:27:21 +0800") References: <20241020132722.20565-1-SkyLake.Huang@mediatek.com> <20241020132722.20565-4-SkyLake.Huang@mediatek.com> User-Agent: mu4e 1.12.1; emacs 29.4 Date: Mon, 18 Nov 2024 14:06:08 +0100 Message-ID: <87r078y9mn.fsf@bootlin.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241118_050614_908658_323E61CB X-CRM114-Status: GOOD ( 21.08 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 20/10/2024 at 21:27:21 +08, Sky Huang wrote: > From: "Sky Huang" > > This patch adds SPINAND CASN page manipulation macros for > SPI-NAND driver to use. Also, some important flag bits, like > SPINAND_SUPR_CR(continuous read), are added to show the > SPI-NAND device's capability. > > Signed-off-by: Sky Huang > --- > include/linux/mtd/spinand.h | 100 +++++++++++++++++++++++++++++++++++- > 1 file changed, 98 insertions(+), 2 deletions(-) > > diff --git a/include/linux/mtd/spinand.h b/include/linux/mtd/spinand.h > index 702e5fb13dae..de97994c357b 100644 > --- a/include/linux/mtd/spinand.h > +++ b/include/linux/mtd/spinand.h > @@ -62,6 +62,59 @@ > SPI_MEM_OP_NO_DUMMY, \ > SPI_MEM_OP_NO_DATA) >=20=20 > +/* Macros for CASN */ > +#define SPINAND_CASN_PAGE_READ_FROM_CACHE_OP(fast, naddr, addr, ndummy, = buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(fast ? 0x0b : 0x03, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 1), \ > + SPI_MEM_OP_DUMMY(ndummy, 1), \ > + SPI_MEM_OP_DATA_IN(len, buf, 1)) > + > +#define SPINAND_CASN_PAGE_READ_FROM_CACHE_X2_OP(naddr, addr, ndummy, buf= , len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(0x3b, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 1), \ > + SPI_MEM_OP_DUMMY(ndummy, 1), \ > + SPI_MEM_OP_DATA_IN(len, buf, 2)) > + > +#define SPINAND_CASN_PAGE_READ_FROM_CACHE_DUALIO_OP(naddr, addr, ndummy,= buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(0xbb, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 2), \ > + SPI_MEM_OP_DUMMY(ndummy, 2), \ > + SPI_MEM_OP_DATA_IN(len, buf, 2)) > + > +#define SPINAND_CASN_PAGE_READ_FROM_CACHE_X4_OP(naddr, addr, ndummy, buf= , len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(0x6b, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 1), \ > + SPI_MEM_OP_DUMMY(ndummy, 1), \ > + SPI_MEM_OP_DATA_IN(len, buf, 4)) > + > +#define SPINAND_CASN_PAGE_READ_FROM_CACHE_QUADIO_OP(naddr, addr, ndummy,= buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(0xeb, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 4), \ > + SPI_MEM_OP_DUMMY(ndummy, 4), \ > + SPI_MEM_OP_DATA_IN(len, buf, 4)) > + > +#define SPINAND_CASN_PROG_LOAD(reset, naddr, addr, buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(reset ? 0x02 : 0x84, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 1), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(len, buf, 1)) > + > +#define SPINAND_CASN_PROG_LOAD_X4(reset, naddr, addr, buf, len) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(reset ? 0x32 : 0x34, 1), \ > + SPI_MEM_OP_ADDR(naddr, addr, 1), \ > + SPI_MEM_OP_NO_DUMMY, \ > + SPI_MEM_OP_DATA_OUT(len, buf, 4)) Why would you need to redefine all these? > + > +#define SPINAND_CASN_ADVECC_OP(casn_adv_ecc_status, buf) \ > + SPI_MEM_OP(SPI_MEM_OP_CMD(casn_adv_ecc_status.cmd, 1), \ > + SPI_MEM_OP_ADDR(casn_adv_ecc_status.addr_nbytes, \ > + casn_adv_ecc_status.addr, \ > + casn_adv_ecc_status.addr_buswidth), \ > + SPI_MEM_OP_DUMMY(casn_adv_ecc_status.dummy_nbytes, \ > + casn_adv_ecc_status.dummy_buswidth), \ > + SPI_MEM_OP_DATA_IN(casn_adv_ecc_status.status_nbytes, buf, 1)) > +/* Macros for CASN end */ > + > #define SPINAND_PAGE_READ_FROM_CACHE_OP(fast, addr, ndummy, buf, len) \ > SPI_MEM_OP(SPI_MEM_OP_CMD(fast ? 0x0b : 0x03, 1), \ > SPI_MEM_OP_ADDR(2, addr, 1), \ > @@ -312,8 +365,11 @@ struct spinand_ecc_info { >=20=20 > #define SPINAND_HAS_QE_BIT BIT(0) > #define SPINAND_HAS_CR_FEAT_BIT BIT(1) > -#define SPINAND_HAS_PROG_PLANE_SELECT_BIT BIT(2) > -#define SPINAND_HAS_READ_PLANE_SELECT_BIT BIT(3) Why do you remove that? > +#define SPINAND_SUP_CR BIT(2) > +#define SPINAND_SUP_ON_DIE_ECC BIT(3) > +#define SPINAND_SUP_LEGACY_ECC_STATUS BIT(4) > +#define SPINAND_SUP_ADV_ECC_STATUS BIT(5) > +#define SPINAND_ECC_PARITY_READABLE BIT(6) >=20=20 > /** > * struct spinand_ondie_ecc_conf - private SPI-NAND on-die ECC engine st= ructure > @@ -406,6 +462,28 @@ struct spinand_dirmap { > struct spi_mem_dirmap_desc *rdesc_ecc; > }; >=20=20 > +/** > + * struct CASN_ADVECC - CASN's advanced ECC description > + * @cmd: Command to access SPI-NAND on-chip ECC status registers > + * @mask: Mask to access SPI-NAND on-chip ECC status registers. > + * ADV_ECC_STATUS->status_nbytes | CASN_ADVECC->mask > + * 1 | 0 to 0xff > + * 2 | 0 to 0xffff > + * @shift: How many bits to shift to get on-chip ECC status > + * @pre_op: This comes from CASN page's ADV_ECC_STATUS's pre_op. > + * After reading on-chip ECC status, we need to do some math > + * operations if this is specified. I'm not sure I understand how you'll encode a math operation there. > + * @pre_mask: This comes from CASN page's ADV_ECC_STATUS's pre_mask. > + * This is used in companion with pre_op above. > + */ > +struct CASN_ADVECC { This is usually changing when continuous reads are enabled, it would need to be handled. > + u8 cmd; > + u16 mask; > + u8 shift; > + u8 pre_op; > + u8 pre_mask; > +}; > + 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 02DC3D49221 for ; Mon, 18 Nov 2024 13:31:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qbuhccqrk7CkB3fvCCYdYchwA6zrIZuk2C9j4/RP8wg=; b=gKQIubzVZQyf7S n7BtD3imrTp5kqMyd3Lws1trd7Ur6+ZJLMRZdVQP/iaV8zL9ZiubATJ/IdHHzGm5+UgJzrkEy7z6A rxttP69L203fXpUzdUbn6hrxBiyJVDBb1BzYY/PCWPA227Mn2XMzni8yl+LDMq5F44EwENFYoqWje 3RyFCOIB2BwF0lJXA/8LemA+kZj5nrjCQogC7go9wm+2mwkncc/dMkjrUKJtLDKOjptXq9rft0DBL wYdtMvVoRhAcJ0/XtWruOJWhNmftA0wW8JDEyOlcOL+3+wHOxgUB9F78lk2ZD9/MIifUct6MSZyV/ Y14EeMCR94YJFCMtFvhg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tD1qf-00000009aRZ-2fqb; Mon, 18 Nov 2024 13:31:25 +0000 Received: from relay9-d.mail.gandi.net ([2001:4b98:dc4:8::229]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tD1SI-00000009Un1-1pVy; Mon, 18 Nov 2024 13:06:20 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id D80FEFF806; Mon, 18 Nov 2024 13:06:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1731935172; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CgitSO12Tcu39jjcYc9b4qcvZmSoxQsq/VM/TY8Chgw=; b=aKvYvzsMXQQ+ls8zRUxnMN6GkySr1qXCFabheMfnb2re1dpmlDRs93dxj9kRjTynCcg02/ 1lc4TLcQyEjdG3NW5kg5VBTiF1fQvkygHr6+KILeTA2Wnlol83xPMKVD9p4hwtueAlHR2k pJrl8oMnVn2K+jZXZEpETa0cG/fnJbFRbaxFDDXPlvfikQsC0lKc4EH+U0Ogv3HOAOL0Fh plKibB+fHaASv3ksfyfd2T3Z/6Nw9sJOzKVLdL0pr0wdQ6LGnzKINLswMe6BBtwk0cFd9M i0i/AMm4tNZjYt2Sz915at6l1cB72cQgMnfWgm6vfcxTI4IIDYnmMYJHaFZcuA== From: Miquel Raynal To: Sky Huang Cc: Matthias Brugger , AngeloGioacchino Del Regno , Richard Weinberger , Vignesh Raghavendra , Daniel Golle , Chia-Lin Kao , "Mika Westerberg" , Cheng Ming Lin , , , , , Steven Liu Subject: Re: [RFC PATCH nand/next 3/4] include: mtd: spinand: Add CASN page related macros and flags. In-Reply-To: <20241020132722.20565-4-SkyLake.Huang@mediatek.com> (Sky Huang's message of "Sun, 20 Oct 2024 21:27:21 +0800") References: <20241020132722.20565-1-SkyLake.Huang@mediatek.com> <20241020132722.20565-4-SkyLake.Huang@mediatek.com> User-Agent: mu4e 1.12.1; emacs 29.4 Date: Mon, 18 Nov 2024 14:06:08 +0100 Message-ID: <87r078y9mn.fsf@bootlin.com> MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241118_050614_908658_323E61CB X-CRM114-Status: GOOD ( 21.08 ) 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 T24gMjAvMTAvMjAyNCBhdCAyMToyNzoyMSArMDgsIFNreSBIdWFuZyA8U2t5TGFrZS5IdWFuZ0Bt ZWRpYXRlay5jb20+IHdyb3RlOgoKPiBGcm9tOiAiU2t5IEh1YW5nIiA8c2t5bGFrZS5odWFuZ0Bt ZWRpYXRlay5jb20+Cj4KPiBUaGlzIHBhdGNoIGFkZHMgU1BJTkFORCBDQVNOIHBhZ2UgbWFuaXB1 bGF0aW9uIG1hY3JvcyBmb3IKPiBTUEktTkFORCBkcml2ZXIgdG8gdXNlLiBBbHNvLCBzb21lIGlt cG9ydGFudCBmbGFnIGJpdHMsIGxpa2UKPiBTUElOQU5EX1NVUFJfQ1IoY29udGludW91cyByZWFk KSwgYXJlIGFkZGVkIHRvIHNob3cgdGhlCj4gU1BJLU5BTkQgZGV2aWNlJ3MgY2FwYWJpbGl0eS4K Pgo+IFNpZ25lZC1vZmYtYnk6IFNreSBIdWFuZyA8c2t5bGFrZS5odWFuZ0BtZWRpYXRlay5jb20+ Cj4gLS0tCj4gIGluY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaCB8IDEwMCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDk4IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvc3Bp bmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oCj4gaW5kZXggNzAyZTVmYjEzZGFl Li5kZTk3OTk0YzM1N2IgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oCj4gQEAgLTYyLDYgKzYyLDU5IEBA Cj4gIAkJICAgU1BJX01FTV9PUF9OT19EVU1NWSwJCQkJCVwKPiAgCQkgICBTUElfTUVNX09QX05P X0RBVEEpCj4gIAo+ICsvKiBNYWNyb3MgZm9yIENBU04gKi8KPiArI2RlZmluZSBTUElOQU5EX0NB U05fUEFHRV9SRUFEX0ZST01fQ0FDSEVfT1AoZmFzdCwgbmFkZHIsIGFkZHIsIG5kdW1teSwgYnVm LCBsZW4pIFwKPiArCVNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQoZmFzdCA/IDB4MGIgOiAweDAz LCAxKSwJCVwKPiArCQkgICBTUElfTUVNX09QX0FERFIobmFkZHIsIGFkZHIsIDEpLAkJCVwKPiAr CQkgICBTUElfTUVNX09QX0RVTU1ZKG5kdW1teSwgMSksCQkJXAo+ICsJCSAgIFNQSV9NRU1fT1Bf REFUQV9JTihsZW4sIGJ1ZiwgMSkpCj4gKwo+ICsjZGVmaW5lIFNQSU5BTkRfQ0FTTl9QQUdFX1JF QURfRlJPTV9DQUNIRV9YMl9PUChuYWRkciwgYWRkciwgbmR1bW15LCBidWYsIGxlbikJXAo+ICsJ U1BJX01FTV9PUChTUElfTUVNX09QX0NNRCgweDNiLCAxKSwJCQlcCj4gKwkJICAgU1BJX01FTV9P UF9BRERSKG5hZGRyLCBhZGRyLCAxKSwJCQlcCj4gKwkJICAgU1BJX01FTV9PUF9EVU1NWShuZHVt bXksIDEpLAkJCVwKPiArCQkgICBTUElfTUVNX09QX0RBVEFfSU4obGVuLCBidWYsIDIpKQo+ICsK PiArI2RlZmluZSBTUElOQU5EX0NBU05fUEFHRV9SRUFEX0ZST01fQ0FDSEVfRFVBTElPX09QKG5h ZGRyLCBhZGRyLCBuZHVtbXksIGJ1ZiwgbGVuKQlcCj4gKwkJU1BJX01FTV9PUChTUElfTUVNX09Q X0NNRCgweGJiLCAxKSwJCQlcCj4gKwkJCSAgIFNQSV9NRU1fT1BfQUREUihuYWRkciwgYWRkciwg MiksCQkJXAo+ICsJCQkgICBTUElfTUVNX09QX0RVTU1ZKG5kdW1teSwgMiksCQkJXAo+ICsJCQkg ICBTUElfTUVNX09QX0RBVEFfSU4obGVuLCBidWYsIDIpKQo+ICsKPiArI2RlZmluZSBTUElOQU5E X0NBU05fUEFHRV9SRUFEX0ZST01fQ0FDSEVfWDRfT1AobmFkZHIsIGFkZHIsIG5kdW1teSwgYnVm LCBsZW4pCVwKPiArCVNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQoMHg2YiwgMSksCQkJCVwKPiAr CQkgICBTUElfTUVNX09QX0FERFIobmFkZHIsIGFkZHIsIDEpLAkJCQlcCj4gKwkJICAgU1BJX01F TV9PUF9EVU1NWShuZHVtbXksIDEpLAkJCQlcCj4gKwkJICAgU1BJX01FTV9PUF9EQVRBX0lOKGxl biwgYnVmLCA0KSkKPiArCj4gKyNkZWZpbmUgU1BJTkFORF9DQVNOX1BBR0VfUkVBRF9GUk9NX0NB Q0hFX1FVQURJT19PUChuYWRkciwgYWRkciwgbmR1bW15LCBidWYsIGxlbikJXAo+ICsJU1BJX01F TV9PUChTUElfTUVNX09QX0NNRCgweGViLCAxKSwJCQkJXAo+ICsJCSAgIFNQSV9NRU1fT1BfQURE UihuYWRkciwgYWRkciwgNCksCQkJCVwKPiArCQkgICBTUElfTUVNX09QX0RVTU1ZKG5kdW1teSwg NCksCQkJCVwKPiArCQkgICBTUElfTUVNX09QX0RBVEFfSU4obGVuLCBidWYsIDQpKQo+ICsKPiAr I2RlZmluZSBTUElOQU5EX0NBU05fUFJPR19MT0FEKHJlc2V0LCBuYWRkciwgYWRkciwgYnVmLCBs ZW4pCQkJXAo+ICsJU1BJX01FTV9PUChTUElfTUVNX09QX0NNRChyZXNldCA/IDB4MDIgOiAweDg0 LCAxKSwJCVwKPiArCQkgICBTUElfTUVNX09QX0FERFIobmFkZHIsIGFkZHIsIDEpLAkJCQlcCj4g KwkJICAgU1BJX01FTV9PUF9OT19EVU1NWSwJCQkJCVwKPiArCQkgICBTUElfTUVNX09QX0RBVEFf T1VUKGxlbiwgYnVmLCAxKSkKPiArCj4gKyNkZWZpbmUgU1BJTkFORF9DQVNOX1BST0dfTE9BRF9Y NChyZXNldCwgbmFkZHIsIGFkZHIsIGJ1ZiwgbGVuKQkJCVwKPiArCVNQSV9NRU1fT1AoU1BJX01F TV9PUF9DTUQocmVzZXQgPyAweDMyIDogMHgzNCwgMSksCQlcCj4gKwkJICAgU1BJX01FTV9PUF9B RERSKG5hZGRyLCBhZGRyLCAxKSwJCQkJXAo+ICsJCSAgIFNQSV9NRU1fT1BfTk9fRFVNTVksCQkJ CQlcCj4gKwkJICAgU1BJX01FTV9PUF9EQVRBX09VVChsZW4sIGJ1ZiwgNCkpCgpXaHkgd291bGQg eW91IG5lZWQgdG8gcmVkZWZpbmUgYWxsIHRoZXNlPwoKPiArCj4gKyNkZWZpbmUgU1BJTkFORF9D QVNOX0FEVkVDQ19PUChjYXNuX2Fkdl9lY2Nfc3RhdHVzLCBidWYpCQkJXAo+ICsJU1BJX01FTV9P UChTUElfTUVNX09QX0NNRChjYXNuX2Fkdl9lY2Nfc3RhdHVzLmNtZCwgMSksCQkJXAo+ICsJCSAg IFNQSV9NRU1fT1BfQUREUihjYXNuX2Fkdl9lY2Nfc3RhdHVzLmFkZHJfbmJ5dGVzLAkJXAo+ICsJ CQkJICAgY2Fzbl9hZHZfZWNjX3N0YXR1cy5hZGRyLAkJCVwKPiArCQkJCSAgIGNhc25fYWR2X2Vj Y19zdGF0dXMuYWRkcl9idXN3aWR0aCksCQlcCj4gKwkJICAgU1BJX01FTV9PUF9EVU1NWShjYXNu X2Fkdl9lY2Nfc3RhdHVzLmR1bW15X25ieXRlcywJCVwKPiArCQkJCSAgICBjYXNuX2Fkdl9lY2Nf c3RhdHVzLmR1bW15X2J1c3dpZHRoKSwJXAo+ICsJCSAgIFNQSV9NRU1fT1BfREFUQV9JTihjYXNu X2Fkdl9lY2Nfc3RhdHVzLnN0YXR1c19uYnl0ZXMsIGJ1ZiwgMSkpCj4gKy8qIE1hY3JvcyBmb3Ig Q0FTTiBlbmQgKi8KPiArCj4gICNkZWZpbmUgU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9P UChmYXN0LCBhZGRyLCBuZHVtbXksIGJ1ZiwgbGVuKQlcCj4gIAlTUElfTUVNX09QKFNQSV9NRU1f T1BfQ01EKGZhc3QgPyAweDBiIDogMHgwMywgMSksCQlcCj4gIAkJICAgU1BJX01FTV9PUF9BRERS KDIsIGFkZHIsIDEpLAkJCQlcCj4gQEAgLTMxMiw4ICszNjUsMTEgQEAgc3RydWN0IHNwaW5hbmRf ZWNjX2luZm8gewo+ICAKPiAgI2RlZmluZSBTUElOQU5EX0hBU19RRV9CSVQJCUJJVCgwKQo+ICAj ZGVmaW5lIFNQSU5BTkRfSEFTX0NSX0ZFQVRfQklUCQlCSVQoMSkKPiAtI2RlZmluZSBTUElOQU5E X0hBU19QUk9HX1BMQU5FX1NFTEVDVF9CSVQJCUJJVCgyKQo+IC0jZGVmaW5lIFNQSU5BTkRfSEFT X1JFQURfUExBTkVfU0VMRUNUX0JJVAkJQklUKDMpCgpXaHkgZG8geW91IHJlbW92ZSB0aGF0PwoK PiArI2RlZmluZSBTUElOQU5EX1NVUF9DUgkJCUJJVCgyKQo+ICsjZGVmaW5lIFNQSU5BTkRfU1VQ X09OX0RJRV9FQ0MJCUJJVCgzKQo+ICsjZGVmaW5lIFNQSU5BTkRfU1VQX0xFR0FDWV9FQ0NfU1RB VFVTCUJJVCg0KQo+ICsjZGVmaW5lIFNQSU5BTkRfU1VQX0FEVl9FQ0NfU1RBVFVTCUJJVCg1KQo+ ICsjZGVmaW5lIFNQSU5BTkRfRUNDX1BBUklUWV9SRUFEQUJMRQlCSVQoNikKPiAgCj4gIC8qKgo+ ICAgKiBzdHJ1Y3Qgc3BpbmFuZF9vbmRpZV9lY2NfY29uZiAtIHByaXZhdGUgU1BJLU5BTkQgb24t ZGllIEVDQyBlbmdpbmUgc3RydWN0dXJlCj4gQEAgLTQwNiw2ICs0NjIsMjggQEAgc3RydWN0IHNw aW5hbmRfZGlybWFwIHsKPiAgCXN0cnVjdCBzcGlfbWVtX2Rpcm1hcF9kZXNjICpyZGVzY19lY2M7 Cj4gIH07Cj4gIAo+ICsvKioKPiArICogc3RydWN0IENBU05fQURWRUNDIC0gQ0FTTidzIGFkdmFu Y2VkIEVDQyBkZXNjcmlwdGlvbgo+ICsgKiBAY21kOiBDb21tYW5kIHRvIGFjY2VzcyBTUEktTkFO RCBvbi1jaGlwIEVDQyBzdGF0dXMgcmVnaXN0ZXJzCj4gKyAqIEBtYXNrOiBNYXNrIHRvIGFjY2Vz cyBTUEktTkFORCBvbi1jaGlwIEVDQyBzdGF0dXMgcmVnaXN0ZXJzLgo+ICsgKgkgIEFEVl9FQ0Nf U1RBVFVTLT5zdGF0dXNfbmJ5dGVzIHwgQ0FTTl9BRFZFQ0MtPm1hc2sKPiArICoJCQkxCQl8ICAg ICAgMCB0byAweGZmCj4gKyAqCQkJMgkJfCAgICAgMCB0byAweGZmZmYKPiArICogQHNoaWZ0OiBI b3cgbWFueSBiaXRzIHRvIHNoaWZ0IHRvIGdldCBvbi1jaGlwIEVDQyBzdGF0dXMKPiArICogQHBy ZV9vcDogVGhpcyBjb21lcyBmcm9tIENBU04gcGFnZSdzIEFEVl9FQ0NfU1RBVFVTJ3MgcHJlX29w Lgo+ICsgKgkgICAgQWZ0ZXIgcmVhZGluZyBvbi1jaGlwIEVDQyBzdGF0dXMsIHdlIG5lZWQgdG8g ZG8gc29tZSBtYXRoCj4gKyAqCSAgICBvcGVyYXRpb25zIGlmIHRoaXMgaXMgc3BlY2lmaWVkLgoK SSdtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCBob3cgeW91J2xsIGVuY29kZSBhIG1hdGggb3BlcmF0 aW9uIHRoZXJlLgoKPiArICogQHByZV9tYXNrOiBUaGlzIGNvbWVzIGZyb20gQ0FTTiBwYWdlJ3Mg QURWX0VDQ19TVEFUVVMncyBwcmVfbWFzay4KPiArICoJICAgICAgVGhpcyBpcyB1c2VkIGluIGNv bXBhbmlvbiB3aXRoIHByZV9vcCBhYm92ZS4KPiArICovCj4gK3N0cnVjdCBDQVNOX0FEVkVDQyB7 CgpUaGlzIGlzIHVzdWFsbHkgY2hhbmdpbmcgd2hlbiBjb250aW51b3VzIHJlYWRzIGFyZSBlbmFi bGVkLCBpdCB3b3VsZApuZWVkIHRvIGJlIGhhbmRsZWQuCgo+ICsJdTggY21kOwo+ICsJdTE2IG1h c2s7Cj4gKwl1OCBzaGlmdDsKPiArCXU4IHByZV9vcDsKPiArCXU4IHByZV9tYXNrOwo+ICt9Owo+ ICsKClRoYW5rcywKTWlxdcOobAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==