From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2881342E43D; Tue, 25 Aug 2026 15:53:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787673195; cv=none; b=UHVhiYNhkFwx5HUP4kiEA1VVbrZybpBFZDxR2AqXtV3SYWZyL/+LFvM54ToIl9GMtY2vLEM+LWL21EKQWnyT4LVlR5OgR1Ret71FQTXLbHFUdMXcsCmpsIICmMK+Bgz8ux0pjFSnn7v71NdiIn+7JxhC3OULavacMUFvZdUEjo8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787673195; c=relaxed/simple; bh=dcKT6azsjRjWutpi4ebH55Jr0c+6I4CEvnw1UsnE80g=; h=From:To:Cc:Subject:In-Reply-To:References:Date:Message-ID: MIME-Version:Content-Type; b=Pomv/50aUh3BqXpzkaGflmjkzvc4f+jQshkKPHaZzR1n3vFGTQ02e7gXipGvPV/9scW1cbjbPJraKCUOsPjvo6vOGh35wUA5M9WNrk78UQpVZmC7ORp4PeGiPgJVDjjx1DpHmdDjxGG8BCqWiiy30jCs5LkYjAiHkiZ0AZXJWd4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=Ttp339aZ; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="Ttp339aZ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 621B41A1766; Tue, 25 Aug 2026 15:53:09 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 344E2604C4; Tue, 25 Aug 2026 15:53:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E279D11C7A676; Tue, 25 Aug 2026 17:53:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1787673184; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=ayRsWbjbDg+OxGMZloCREgzB7cLLDf7rWS6c16W8m04=; b=Ttp339aZvzmPPp1xKY3R8tnslhH2kqZtTJOsY+TbirETxjUP34ngaOeHLkKkkoupWugiej FE2jlvbl7TxCWrCgFzTPbiRJgUqMp6y9hRg2XXv3fuJJKBeDL6lXp5RVybmXEDyTpVRKTs HLqsMvdBJ5L5WsT60LR8dweqPYRPwEmAFBInWrhd232HShmFxFTXfkCZOcJdhWtMEko8ti 9qTM5eoOI2RtzKZ4rY+XSZvH8odfN3kODQd8kO/RHtgVWstGniLlnpGFtOayje9sCjfcR/ SVfRPIP072W2MQwzk3xRk4JakoKI3N/NycfaBhrnm2MUnkUtCjD2X8umDS/6Jg== From: Miquel Raynal To: Maciej Andrzejewski ICEYE Cc: Linus Walleij , Bartosz Golaszewski , linux-gpio@vger.kernel.org, broonie@kernel.org, linux-spi@vger.kernel.org, richard@nod.at, vigneshr@ti.com, linux-mtd@lists.infradead.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] gpiolib: of: Only apply the SPI CS quirk to SPI buses In-Reply-To: <20260819155502.3934837-1-maciej.andrzejewski@m-works.net> (Maciej Andrzejewski ICEYE's message of "Wed, 19 Aug 2026 17:55:10 +0200") References: <20260819155502.3934837-1-maciej.andrzejewski@m-works.net> User-Agent: mu4e 1.12.12; emacs 30.2 Date: Tue, 25 Aug 2026 17:53:00 +0200 Message-ID: <877blegpsz.fsf@bootlin.com> Precedence: bulk X-Mailing-List: linux-spi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Last-TLS-Session-Version: TLSv1.3 Hello Maciej, On 19/08/2026 at 17:55:10 +02, Maciej Andrzejewski ICEYE wrote: > The legacy SPI chip-select polarity quirk in of_gpio_flags_quirks() is > keyed on nothing but the property name "cs-gpios". That name is not > exclusive to SPI: nand-controller.yaml documents the very same property > for NAND controllers, and rawnand_dt_parse_gpio_cs() requests those > lines with gpiod_count(dev, "cs"), which gpiolib expands to "cs-gpios". > A NAND controller therefore has SPI chip-select semantics forced onto > its chip selects, and any chip node whose first reg cell matches a GPIO > index is silently flipped to active low. The NAND core requests the > descriptors GPIOD_OUT_HIGH and drivers assert with a logical 0, so the > inversion leaves the die permanently deselected. > > The example in nand-controller.yaml is itself affected: it pairs a > native chip select with a GPIO one and gives the second chip a reg of 1, > which trips the quirk whenever CONFIG_SPI_MASTER is enabled. In-tree the > collision is real but latent. 36 board trees, all Atmel/Microchip at91, > give their nand@3 controller a cs-gpios line, and they escape only > because the sole child of those nodes is a partitions container with no > reg for the quirk to match against. :') > Device tree carries no bus type marker, so identify the bus from two > hints. Properties of an SPI peripheral are namespaced with "spi-" > (spi-max-frequency, spi-cpol, spi-cs-high and the rest of > spi-peripheral-props.yaml), whereas a NAND chip node carries only reg, > nand-* and its partition table. That is a convention rather than a > guarantee, since compatible and reg are the only properties > spi-controller.yaml makes mandatory for a peripheral, so let the > controller settle the remaining cases: spi-controller.yaml constrains > the controller nodename to ^spi(@.*|-[0-9]+)?$, which makes the name the > one bus marker every conforming controller has to carry. A peripheral > that carries nothing but compatible and reg therefore keeps its active > low default through its parent. Skip the quirk only when neither test > matches. > > Both tests were scored over every board device tree in the kernel, > expanded with the same cpp and scripts/dtc pipeline the build uses, at > v7.2-rc7. All 3620 trees under arch/*/boot/dts expand; 503 of them hold > at least one GPIO chip select that can reach the quirk, 765 such chip > selects in total. 761 are matched by both tests, and none are matched by > neither, so no in-tree board changes behaviour. > > One needs the property scan on its own: psc@11400 on ac14xx, a > fsl,mpc5121-psc-spi named after the hardware block rather than the bus, > whose m25p128@0 child carries spi-max-frequency. > > Three need the nodename on its own, all peripherals with no "spi-" > property of any kind: > > - panel@0 under the spi-gpio controller on rk3566-anbernic-rg503 > - can@0, an mcp251xfd, under ecspi3 on imx8mn-vhip4-evalboard-v1 > - spi@1 under ecspi1 on imx53-ppd > > The two tests are complementary, so both are needed to keep every > in-tree board working. A tree that names its controller after the > hardware block and gives it a peripheral with no "spi-" property would > still lose the quirk. No in-tree board does, and such a controller is > already outside the nodename pattern spi-controller.yaml requires. Sounds okay to me. > of_gpio_spi_cs_get_count() in this file identifies SPI controllers with > of_device_is_compatible() instead, but it only has to name three legacy > controllers whose bindings are closed. An allow-list here would have to > name every SPI controller binding in the tree, 71 distinct compatible > strings among the candidates alone, and grow with every new one. That would be impossible to maintain indeed. > > Signed-off-by: Maciej Andrzejewski ICEYE I believe "ICEYE" is your company which backed this work, in which case you should use "(ICEYE)" instead. Also, this probably deserves a Fixes and Cc: stable set of tags. > --- > Changes in v2: > - Squashed the two patches into one. The property scan and the nodename > test are complementary, so patch 1 alone stopped applying the quirk to > the three peripherals that carry no "spi-" property, which would have > broken those boards for anyone bisecting through the series. Reported > by an automated review of v1. > - Folded the two helpers into a single of_gpio_is_spi_chipselect(). > - Said outright that a peripheral with nothing but compatible and reg > keeps its active low default through the controller nodename. > - Rebased; drivers/gpio/gpiolib-of.c is unchanged since v7.2-rc7, so the > diff itself is the v1 pair verbatim. > > v1: https://lore.kernel.org/r/20260810141629.81650-1-maciej.andrzejewski@= m-works.net > > drivers/gpio/gpiolib-of.c | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c > index 940b566946ce..d73114166f6b 100644 > --- a/drivers/gpio/gpiolib-of.c > +++ b/drivers/gpio/gpiolib-of.c > @@ -340,6 +340,28 @@ static void of_gpio_set_polarity_by_property(const s= truct device_node *np, > } > } >=20=20 > +/* > + * The legacy SPI chip select binding below is keyed on a property name = that > + * other subsystems reuse for the same purpose, notably NAND controllers= (see > + * Documentation/devicetree/bindings/mtd/nand-controller.yaml), whose ch= ip > + * selects carry no SPI polarity semantics. Device tree has no bus type > + * marker, so take two hints. Properties of an SPI peripheral are namesp= aced > + * with "spi-", and a peripheral that declares none is covered by the > + * controller, whose nodename spi-controller.yaml constrains to > + * ^spi(@.*|-[0-9]+)?$. > + */ > +static bool of_gpio_is_spi_chipselect(const struct device_node *np, > + const struct device_node *child) > +{ This check will be done for each child, whereas we should have to do it only once for a given controller node. Plus, as soon as one of the children has a spi- property, it is enough for enabling the quirk for all the children whereas in this implementation, only one child is used at a time to derive the bus type, which means in theory you could have one child node that gets the quirk and another child node of the same parent which does not. This is not a show stopper, but I believe this can be slightly enhanced,if that does not make the code too complex. With the comments on the tags and SoB addressed, you can nevertheless add my: Reviewed-by: Miquel Raynal 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 A7D7DC61DB9 for ; Tue, 25 Aug 2026 15:53:24 +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=FWCLPkqxPkGpVigpF3+Kf4tOUqfTY4jN2ANhHIvHSgY=; b=kX5kQ0uN5rRPtV 3YJFjmag/aLWVQhIAwjk1DKh4Scch8pKr/YLZSEzkZjzHrzA5MWH+FTMJI/LKl3iKi3xBHuhyPO7O DSBsbvDzUCzHvJKmUsNhYEYZTjKZ0KZEAhF2H4vQkqpcjg/aGER+eg77DxP7j2RB8YcwnPeyBPe9P t12e66+3Bu0M6N2N/RTPV8mXj3FpUCGd/E3tlWA6K+o3QvTaWFjy4HO0+HrP5Crfdfr1IMItWZY5l AdDo1W6PYyzrSRFd0MNXjtW8N5gt/wgGM8g94jf8RR1pyhU6+qKHj02H6MP3IrQxkjyVfh6NrRAji eEx1SOupNw75uO9NOpcw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wytSe-0000000145o-33JF; Tue, 25 Aug 2026 15:53:16 +0000 Received: from smtpout-02.galae.net ([185.246.84.56]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wytSa-0000000144G-3nlS for linux-mtd@lists.infradead.org; Tue, 25 Aug 2026 15:53:15 +0000 Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 621B41A1766; Tue, 25 Aug 2026 15:53:09 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 344E2604C4; Tue, 25 Aug 2026 15:53:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E279D11C7A676; Tue, 25 Aug 2026 17:53:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1787673184; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=ayRsWbjbDg+OxGMZloCREgzB7cLLDf7rWS6c16W8m04=; b=Ttp339aZvzmPPp1xKY3R8tnslhH2kqZtTJOsY+TbirETxjUP34ngaOeHLkKkkoupWugiej FE2jlvbl7TxCWrCgFzTPbiRJgUqMp6y9hRg2XXv3fuJJKBeDL6lXp5RVybmXEDyTpVRKTs HLqsMvdBJ5L5WsT60LR8dweqPYRPwEmAFBInWrhd232HShmFxFTXfkCZOcJdhWtMEko8ti 9qTM5eoOI2RtzKZ4rY+XSZvH8odfN3kODQd8kO/RHtgVWstGniLlnpGFtOayje9sCjfcR/ SVfRPIP072W2MQwzk3xRk4JakoKI3N/NycfaBhrnm2MUnkUtCjD2X8umDS/6Jg== From: Miquel Raynal To: Maciej Andrzejewski ICEYE Cc: Linus Walleij , Bartosz Golaszewski , linux-gpio@vger.kernel.org, broonie@kernel.org, linux-spi@vger.kernel.org, richard@nod.at, vigneshr@ti.com, linux-mtd@lists.infradead.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] gpiolib: of: Only apply the SPI CS quirk to SPI buses In-Reply-To: <20260819155502.3934837-1-maciej.andrzejewski@m-works.net> (Maciej Andrzejewski ICEYE's message of "Wed, 19 Aug 2026 17:55:10 +0200") References: <20260819155502.3934837-1-maciej.andrzejewski@m-works.net> User-Agent: mu4e 1.12.12; emacs 30.2 Date: Tue, 25 Aug 2026 17:53:00 +0200 Message-ID: <877blegpsz.fsf@bootlin.com> MIME-Version: 1.0 X-Last-TLS-Session-Version: TLSv1.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260825_085313_091594_17AA83A2 X-CRM114-Status: GOOD ( 37.25 ) 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 SGVsbG8gTWFjaWVqLAoKT24gMTkvMDgvMjAyNiBhdCAxNzo1NToxMCArMDIsIE1hY2llaiBBbmRy emVqZXdza2kgSUNFWUUgPG1hY2llai5hbmRyemVqZXdza2lAbS13b3Jrcy5uZXQ+IHdyb3RlOgoK PiBUaGUgbGVnYWN5IFNQSSBjaGlwLXNlbGVjdCBwb2xhcml0eSBxdWlyayBpbiBvZl9ncGlvX2Zs YWdzX3F1aXJrcygpIGlzCj4ga2V5ZWQgb24gbm90aGluZyBidXQgdGhlIHByb3BlcnR5IG5hbWUg ImNzLWdwaW9zIi4gVGhhdCBuYW1lIGlzIG5vdAo+IGV4Y2x1c2l2ZSB0byBTUEk6IG5hbmQtY29u dHJvbGxlci55YW1sIGRvY3VtZW50cyB0aGUgdmVyeSBzYW1lIHByb3BlcnR5Cj4gZm9yIE5BTkQg Y29udHJvbGxlcnMsIGFuZCByYXduYW5kX2R0X3BhcnNlX2dwaW9fY3MoKSByZXF1ZXN0cyB0aG9z ZQo+IGxpbmVzIHdpdGggZ3Bpb2RfY291bnQoZGV2LCAiY3MiKSwgd2hpY2ggZ3Bpb2xpYiBleHBh bmRzIHRvICJjcy1ncGlvcyIuCj4gQSBOQU5EIGNvbnRyb2xsZXIgdGhlcmVmb3JlIGhhcyBTUEkg Y2hpcC1zZWxlY3Qgc2VtYW50aWNzIGZvcmNlZCBvbnRvCj4gaXRzIGNoaXAgc2VsZWN0cywgYW5k IGFueSBjaGlwIG5vZGUgd2hvc2UgZmlyc3QgcmVnIGNlbGwgbWF0Y2hlcyBhIEdQSU8KPiBpbmRl eCBpcyBzaWxlbnRseSBmbGlwcGVkIHRvIGFjdGl2ZSBsb3cuIFRoZSBOQU5EIGNvcmUgcmVxdWVz dHMgdGhlCj4gZGVzY3JpcHRvcnMgR1BJT0RfT1VUX0hJR0ggYW5kIGRyaXZlcnMgYXNzZXJ0IHdp dGggYSBsb2dpY2FsIDAsIHNvIHRoZQo+IGludmVyc2lvbiBsZWF2ZXMgdGhlIGRpZSBwZXJtYW5l bnRseSBkZXNlbGVjdGVkLgo+Cj4gVGhlIGV4YW1wbGUgaW4gbmFuZC1jb250cm9sbGVyLnlhbWwg aXMgaXRzZWxmIGFmZmVjdGVkOiBpdCBwYWlycyBhCj4gbmF0aXZlIGNoaXAgc2VsZWN0IHdpdGgg YSBHUElPIG9uZSBhbmQgZ2l2ZXMgdGhlIHNlY29uZCBjaGlwIGEgcmVnIG9mIDEsCj4gd2hpY2gg dHJpcHMgdGhlIHF1aXJrIHdoZW5ldmVyIENPTkZJR19TUElfTUFTVEVSIGlzIGVuYWJsZWQuIElu LXRyZWUgdGhlCj4gY29sbGlzaW9uIGlzIHJlYWwgYnV0IGxhdGVudC4gMzYgYm9hcmQgdHJlZXMs IGFsbCBBdG1lbC9NaWNyb2NoaXAgYXQ5MSwKPiBnaXZlIHRoZWlyIG5hbmRAMyBjb250cm9sbGVy IGEgY3MtZ3Bpb3MgbGluZSwgYW5kIHRoZXkgZXNjYXBlIG9ubHkKPiBiZWNhdXNlIHRoZSBzb2xl IGNoaWxkIG9mIHRob3NlIG5vZGVzIGlzIGEgcGFydGl0aW9ucyBjb250YWluZXIgd2l0aCBubwo+ IHJlZyBmb3IgdGhlIHF1aXJrIHRvIG1hdGNoIGFnYWluc3QuCgo6JykKCj4gRGV2aWNlIHRyZWUg Y2FycmllcyBubyBidXMgdHlwZSBtYXJrZXIsIHNvIGlkZW50aWZ5IHRoZSBidXMgZnJvbSB0d28K PiBoaW50cy4gUHJvcGVydGllcyBvZiBhbiBTUEkgcGVyaXBoZXJhbCBhcmUgbmFtZXNwYWNlZCB3 aXRoICJzcGktIgo+IChzcGktbWF4LWZyZXF1ZW5jeSwgc3BpLWNwb2wsIHNwaS1jcy1oaWdoIGFu ZCB0aGUgcmVzdCBvZgo+IHNwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwpLCB3aGVyZWFzIGEgTkFO RCBjaGlwIG5vZGUgY2FycmllcyBvbmx5IHJlZywKPiBuYW5kLSogYW5kIGl0cyBwYXJ0aXRpb24g dGFibGUuIFRoYXQgaXMgYSBjb252ZW50aW9uIHJhdGhlciB0aGFuIGEKPiBndWFyYW50ZWUsIHNp bmNlIGNvbXBhdGlibGUgYW5kIHJlZyBhcmUgdGhlIG9ubHkgcHJvcGVydGllcwo+IHNwaS1jb250 cm9sbGVyLnlhbWwgbWFrZXMgbWFuZGF0b3J5IGZvciBhIHBlcmlwaGVyYWwsIHNvIGxldCB0aGUK PiBjb250cm9sbGVyIHNldHRsZSB0aGUgcmVtYWluaW5nIGNhc2VzOiBzcGktY29udHJvbGxlci55 YW1sIGNvbnN0cmFpbnMKPiB0aGUgY29udHJvbGxlciBub2RlbmFtZSB0byBec3BpKEAuKnwtWzAt OV0rKT8kLCB3aGljaCBtYWtlcyB0aGUgbmFtZSB0aGUKPiBvbmUgYnVzIG1hcmtlciBldmVyeSBj b25mb3JtaW5nIGNvbnRyb2xsZXIgaGFzIHRvIGNhcnJ5LiBBIHBlcmlwaGVyYWwKPiB0aGF0IGNh cnJpZXMgbm90aGluZyBidXQgY29tcGF0aWJsZSBhbmQgcmVnIHRoZXJlZm9yZSBrZWVwcyBpdHMg YWN0aXZlCj4gbG93IGRlZmF1bHQgdGhyb3VnaCBpdHMgcGFyZW50LiBTa2lwIHRoZSBxdWlyayBv bmx5IHdoZW4gbmVpdGhlciB0ZXN0Cj4gbWF0Y2hlcy4KPgo+IEJvdGggdGVzdHMgd2VyZSBzY29y ZWQgb3ZlciBldmVyeSBib2FyZCBkZXZpY2UgdHJlZSBpbiB0aGUga2VybmVsLAo+IGV4cGFuZGVk IHdpdGggdGhlIHNhbWUgY3BwIGFuZCBzY3JpcHRzL2R0YyBwaXBlbGluZSB0aGUgYnVpbGQgdXNl cywgYXQKPiB2Ny4yLXJjNy4gQWxsIDM2MjAgdHJlZXMgdW5kZXIgYXJjaC8qL2Jvb3QvZHRzIGV4 cGFuZDsgNTAzIG9mIHRoZW0gaG9sZAo+IGF0IGxlYXN0IG9uZSBHUElPIGNoaXAgc2VsZWN0IHRo YXQgY2FuIHJlYWNoIHRoZSBxdWlyaywgNzY1IHN1Y2ggY2hpcAo+IHNlbGVjdHMgaW4gdG90YWwu IDc2MSBhcmUgbWF0Y2hlZCBieSBib3RoIHRlc3RzLCBhbmQgbm9uZSBhcmUgbWF0Y2hlZCBieQo+ IG5laXRoZXIsIHNvIG5vIGluLXRyZWUgYm9hcmQgY2hhbmdlcyBiZWhhdmlvdXIuCj4KPiBPbmUg bmVlZHMgdGhlIHByb3BlcnR5IHNjYW4gb24gaXRzIG93bjogcHNjQDExNDAwIG9uIGFjMTR4eCwg YQo+IGZzbCxtcGM1MTIxLXBzYy1zcGkgbmFtZWQgYWZ0ZXIgdGhlIGhhcmR3YXJlIGJsb2NrIHJh dGhlciB0aGFuIHRoZSBidXMsCj4gd2hvc2UgbTI1cDEyOEAwIGNoaWxkIGNhcnJpZXMgc3BpLW1h eC1mcmVxdWVuY3kuCj4KPiBUaHJlZSBuZWVkIHRoZSBub2RlbmFtZSBvbiBpdHMgb3duLCBhbGwg cGVyaXBoZXJhbHMgd2l0aCBubyAic3BpLSIKPiBwcm9wZXJ0eSBvZiBhbnkga2luZDoKPgo+ICAg LSBwYW5lbEAwIHVuZGVyIHRoZSBzcGktZ3BpbyBjb250cm9sbGVyIG9uIHJrMzU2Ni1hbmJlcm5p Yy1yZzUwMwo+ICAgLSBjYW5AMCwgYW4gbWNwMjUxeGZkLCB1bmRlciBlY3NwaTMgb24gaW14OG1u LXZoaXA0LWV2YWxib2FyZC12MQo+ICAgLSBzcGlAMSB1bmRlciBlY3NwaTEgb24gaW14NTMtcHBk Cj4KPiBUaGUgdHdvIHRlc3RzIGFyZSBjb21wbGVtZW50YXJ5LCBzbyBib3RoIGFyZSBuZWVkZWQg dG8ga2VlcCBldmVyeQo+IGluLXRyZWUgYm9hcmQgd29ya2luZy4gQSB0cmVlIHRoYXQgbmFtZXMg aXRzIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlCj4gaGFyZHdhcmUgYmxvY2sgYW5kIGdpdmVzIGl0IGEg cGVyaXBoZXJhbCB3aXRoIG5vICJzcGktIiBwcm9wZXJ0eSB3b3VsZAo+IHN0aWxsIGxvc2UgdGhl IHF1aXJrLiBObyBpbi10cmVlIGJvYXJkIGRvZXMsIGFuZCBzdWNoIGEgY29udHJvbGxlciBpcwo+ IGFscmVhZHkgb3V0c2lkZSB0aGUgbm9kZW5hbWUgcGF0dGVybiBzcGktY29udHJvbGxlci55YW1s IHJlcXVpcmVzLgoKU291bmRzIG9rYXkgdG8gbWUuCgo+IG9mX2dwaW9fc3BpX2NzX2dldF9jb3Vu dCgpIGluIHRoaXMgZmlsZSBpZGVudGlmaWVzIFNQSSBjb250cm9sbGVycyB3aXRoCj4gb2ZfZGV2 aWNlX2lzX2NvbXBhdGlibGUoKSBpbnN0ZWFkLCBidXQgaXQgb25seSBoYXMgdG8gbmFtZSB0aHJl ZSBsZWdhY3kKPiBjb250cm9sbGVycyB3aG9zZSBiaW5kaW5ncyBhcmUgY2xvc2VkLiBBbiBhbGxv dy1saXN0IGhlcmUgd291bGQgaGF2ZSB0bwo+IG5hbWUgZXZlcnkgU1BJIGNvbnRyb2xsZXIgYmlu ZGluZyBpbiB0aGUgdHJlZSwgNzEgZGlzdGluY3QgY29tcGF0aWJsZQo+IHN0cmluZ3MgYW1vbmcg dGhlIGNhbmRpZGF0ZXMgYWxvbmUsIGFuZCBncm93IHdpdGggZXZlcnkgbmV3IG9uZS4KClRoYXQg d291bGQgYmUgaW1wb3NzaWJsZSB0byBtYWludGFpbiBpbmRlZWQuCgo+Cj4gU2lnbmVkLW9mZi1i eTogTWFjaWVqIEFuZHJ6ZWpld3NraSBJQ0VZRSA8bWFjaWVqLmFuZHJ6ZWpld3NraUBtLXdvcmtz Lm5ldD4KCkkgYmVsaWV2ZSAiSUNFWUUiIGlzIHlvdXIgY29tcGFueSB3aGljaCBiYWNrZWQgdGhp cyB3b3JrLCBpbiB3aGljaCBjYXNlCnlvdSBzaG91bGQgdXNlICIoSUNFWUUpIiBpbnN0ZWFkLgoK QWxzbywgdGhpcyBwcm9iYWJseSBkZXNlcnZlcyBhIEZpeGVzIGFuZCBDYzogc3RhYmxlIHNldCBv ZiB0YWdzLgoKPiAtLS0KPiBDaGFuZ2VzIGluIHYyOgo+IC0gU3F1YXNoZWQgdGhlIHR3byBwYXRj aGVzIGludG8gb25lLiBUaGUgcHJvcGVydHkgc2NhbiBhbmQgdGhlIG5vZGVuYW1lCj4gICB0ZXN0 IGFyZSBjb21wbGVtZW50YXJ5LCBzbyBwYXRjaCAxIGFsb25lIHN0b3BwZWQgYXBwbHlpbmcgdGhl IHF1aXJrIHRvCj4gICB0aGUgdGhyZWUgcGVyaXBoZXJhbHMgdGhhdCBjYXJyeSBubyAic3BpLSIg cHJvcGVydHksIHdoaWNoIHdvdWxkIGhhdmUKPiAgIGJyb2tlbiB0aG9zZSBib2FyZHMgZm9yIGFu eW9uZSBiaXNlY3RpbmcgdGhyb3VnaCB0aGUgc2VyaWVzLiBSZXBvcnRlZAo+ICAgYnkgYW4gYXV0 b21hdGVkIHJldmlldyBvZiB2MS4KPiAtIEZvbGRlZCB0aGUgdHdvIGhlbHBlcnMgaW50byBhIHNp bmdsZSBvZl9ncGlvX2lzX3NwaV9jaGlwc2VsZWN0KCkuCj4gLSBTYWlkIG91dHJpZ2h0IHRoYXQg YSBwZXJpcGhlcmFsIHdpdGggbm90aGluZyBidXQgY29tcGF0aWJsZSBhbmQgcmVnCj4gICBrZWVw cyBpdHMgYWN0aXZlIGxvdyBkZWZhdWx0IHRocm91Z2ggdGhlIGNvbnRyb2xsZXIgbm9kZW5hbWUu Cj4gLSBSZWJhc2VkOyBkcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jIGlzIHVuY2hhbmdlZCBzaW5j ZSB2Ny4yLXJjNywgc28gdGhlCj4gICBkaWZmIGl0c2VsZiBpcyB0aGUgdjEgcGFpciB2ZXJiYXRp bS4KPgo+IHYxOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjYwODEwMTQxNjI5LjgxNjUw LTEtbWFjaWVqLmFuZHJ6ZWpld3NraUBtLXdvcmtzLm5ldAo+Cj4gIGRyaXZlcnMvZ3Bpby9ncGlv bGliLW9mLmMgfCAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gIDEgZmlsZSBj aGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jCj4g aW5kZXggOTQwYjU2Njk0NmNlLi5kNzMxMTQxNjZmNmIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cGlvL2dwaW9saWItb2YuYwo+ICsrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMKPiBAQCAt MzQwLDYgKzM0MCwyOCBAQCBzdGF0aWMgdm9pZCBvZl9ncGlvX3NldF9wb2xhcml0eV9ieV9wcm9w ZXJ0eShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAo+ICAJfQo+ICB9Cj4gIAo+ICsvKgo+ ICsgKiBUaGUgbGVnYWN5IFNQSSBjaGlwIHNlbGVjdCBiaW5kaW5nIGJlbG93IGlzIGtleWVkIG9u IGEgcHJvcGVydHkgbmFtZSB0aGF0Cj4gKyAqIG90aGVyIHN1YnN5c3RlbXMgcmV1c2UgZm9yIHRo ZSBzYW1lIHB1cnBvc2UsIG5vdGFibHkgTkFORCBjb250cm9sbGVycyAoc2VlCj4gKyAqIERvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvbmFuZC1jb250cm9sbGVyLnlhbWwpLCB3 aG9zZSBjaGlwCj4gKyAqIHNlbGVjdHMgY2Fycnkgbm8gU1BJIHBvbGFyaXR5IHNlbWFudGljcy4g RGV2aWNlIHRyZWUgaGFzIG5vIGJ1cyB0eXBlCj4gKyAqIG1hcmtlciwgc28gdGFrZSB0d28gaGlu dHMuIFByb3BlcnRpZXMgb2YgYW4gU1BJIHBlcmlwaGVyYWwgYXJlIG5hbWVzcGFjZWQKPiArICog d2l0aCAic3BpLSIsIGFuZCBhIHBlcmlwaGVyYWwgdGhhdCBkZWNsYXJlcyBub25lIGlzIGNvdmVy ZWQgYnkgdGhlCj4gKyAqIGNvbnRyb2xsZXIsIHdob3NlIG5vZGVuYW1lIHNwaS1jb250cm9sbGVy LnlhbWwgY29uc3RyYWlucyB0bwo+ICsgKiBec3BpKEAuKnwtWzAtOV0rKT8kLgo+ICsgKi8KPiAr c3RhdGljIGJvb2wgb2ZfZ3Bpb19pc19zcGlfY2hpcHNlbGVjdChjb25zdCBzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLAo+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCkK PiArewoKVGhpcyBjaGVjayB3aWxsIGJlIGRvbmUgZm9yIGVhY2ggY2hpbGQsIHdoZXJlYXMgd2Ug c2hvdWxkIGhhdmUgdG8gZG8gaXQKb25seSBvbmNlIGZvciBhIGdpdmVuIGNvbnRyb2xsZXIgbm9k ZS4gUGx1cywgYXMgc29vbiBhcyBvbmUgb2YgdGhlCmNoaWxkcmVuIGhhcyBhIHNwaS0gcHJvcGVy dHksIGl0IGlzIGVub3VnaCBmb3IgZW5hYmxpbmcgdGhlIHF1aXJrIGZvcgphbGwgdGhlIGNoaWxk cmVuIHdoZXJlYXMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgb25seSBvbmUgY2hpbGQgaXMgdXNl ZAphdCBhIHRpbWUgdG8gZGVyaXZlIHRoZSBidXMgdHlwZSwgd2hpY2ggbWVhbnMgaW4gdGhlb3J5 IHlvdSBjb3VsZCBoYXZlCm9uZSBjaGlsZCBub2RlIHRoYXQgZ2V0cyB0aGUgcXVpcmsgYW5kIGFu b3RoZXIgY2hpbGQgbm9kZSBvZiB0aGUgc2FtZQpwYXJlbnQgd2hpY2ggZG9lcyBub3QuCgpUaGlz IGlzIG5vdCBhIHNob3cgc3RvcHBlciwgYnV0IEkgYmVsaWV2ZSB0aGlzIGNhbiBiZSBzbGlnaHRs eQplbmhhbmNlZCxpZiB0aGF0IGRvZXMgbm90IG1ha2UgdGhlIGNvZGUgdG9vIGNvbXBsZXguCgpX aXRoIHRoZSBjb21tZW50cyBvbiB0aGUgdGFncyBhbmQgU29CIGFkZHJlc3NlZCwgeW91IGNhbiBu ZXZlcnRoZWxlc3MKYWRkIG15OgoKUmV2aWV3ZWQtYnk6IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5y YXluYWxAYm9vdGxpbi5jb20+CgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBt YWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1tdGQvCg==