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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9206EC761A6 for ; Fri, 31 Mar 2023 20:34:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232720AbjCaUeH (ORCPT ); Fri, 31 Mar 2023 16:34:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229967AbjCaUeF (ORCPT ); Fri, 31 Mar 2023 16:34:05 -0400 Received: from fudo.makrotopia.org (fudo.makrotopia.org [IPv6:2a07:2ec0:3002::71]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D04491B7C3; Fri, 31 Mar 2023 13:34:03 -0700 (PDT) Received: from local by fudo.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.96) (envelope-from ) id 1piLRa-0007Dg-1j; Fri, 31 Mar 2023 22:33:54 +0200 Date: Fri, 31 Mar 2023 21:33:50 +0100 From: Daniel Golle To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Cc: netdev@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux@armlinux.org.uk, linux-kernel@vger.kernel.org, Andrew Lunn , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Sean Wang , Landen Chao , DENG Qingfang , Philipp Zabel , Sam Shih , Lorenzo Bianconi , John Crispin , Felix Fietkau , Luiz Angelo Daros de Luca Subject: Re: [PATCH net-next 14/15] net: dsa: mt7530: introduce driver for MT7988 built-in switch Message-ID: References: <6a7c5f81-a8a3-27b5-4af3-7175a3313f9a@arinc9.com> <7d0acaef-0cec-91b9-a5c6-d094b71e3dbd@arinc9.com> <28d048c9-6389-749b-d0eb-18a9c2d83c4e@arinc9.com> <56adf82a-3db0-5909-e948-e21717e3fe03@arinc9.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <56adf82a-3db0-5909-e948-e21717e3fe03@arinc9.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 31, 2023 at 11:07:51PM +0300, Arınç ÜNAL wrote: > On 31.03.2023 16:18, Arınç ÜNAL wrote: > > On 31.03.2023 15:06, Arınç ÜNAL wrote: > > > On 31.03.2023 13:16, Daniel Golle wrote: > > > > On Fri, Mar 31, 2023 at 08:50:28AM +0300, Arınç ÜNAL wrote: > > > > > On 30.03.2023 18:23, Daniel Golle wrote: > > > > > > Add driver for the built-in Gigabit Ethernet switch which can be found > > > > > > in the MediaTek MT7988 SoC. > > > > > > > > > > > > The switch shares most of its design with MT7530 and MT7531, but has > > > > > > it's registers mapped into the SoCs register space rather than being > > > > > > connected externally or internally via MDIO. > > > > > > > > > > > > Introduce a new platform driver to support that. > > > > > > > > > > > > Signed-off-by: Daniel Golle > > > > > > --- > > > > > >    MAINTAINERS                   |   2 + > > > > > >    drivers/net/dsa/Kconfig       |  12 ++++ > > > > > >    drivers/net/dsa/Makefile      |   1 + > > > > > >    drivers/net/dsa/mt7530-mmio.c | 101 > > > > > > ++++++++++++++++++++++++++++++++++ > > > > > >    drivers/net/dsa/mt7530.c      |  86 ++++++++++++++++++++++++++++- > > > > > >    drivers/net/dsa/mt7530.h      |  12 ++-- > > > > > >    6 files changed, 206 insertions(+), 8 deletions(-) > > > > > >    create mode 100644 drivers/net/dsa/mt7530-mmio.c > > > > > > > > > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > > > > > index 14924aed15ca7..674673dbdfd8b 100644 > > > > > > --- a/MAINTAINERS > > > > > > +++ b/MAINTAINERS > > > > > > @@ -13174,9 +13174,11 @@ MEDIATEK SWITCH DRIVER > > > > > >    M:    Sean Wang > > > > > >    M:    Landen Chao > > > > > >    M:    DENG Qingfang > > > > > > +M:    Daniel Golle > > > > > >    L:    netdev@vger.kernel.org > > > > > >    S:    Maintained > > > > > >    F:    drivers/net/dsa/mt7530-mdio.c > > > > > > +F:    drivers/net/dsa/mt7530-mmio.c > > > > > >    F:    drivers/net/dsa/mt7530.* > > > > > >    F:    net/dsa/tag_mtk.c > > > > > > diff --git a/drivers/net/dsa/Kconfig b/drivers/net/dsa/Kconfig > > > > > > index c2551b13324c2..de4d86e37973f 100644 > > > > > > --- a/drivers/net/dsa/Kconfig > > > > > > +++ b/drivers/net/dsa/Kconfig > > > > > > @@ -52,6 +52,18 @@ config NET_DSA_MT7530 > > > > > >          Multi-chip module MT7530 in MT7621AT, MT7621DAT, MT7621ST and > > > > > >          MT7623AI SoCs is supported as well. > > > > > > +config NET_DSA_MT7988 > > > > > > +    tristate "MediaTek MT7988 built-in Ethernet switch support" > > > > > > +    select NET_DSA_MT7530_COMMON > > > > > > +    depends on HAS_IOMEM > > > > > > +    help > > > > > > +      This enables support for the built-in Ethernet switch found > > > > > > +      in the MediaTek MT7988 SoC. > > > > > > +      The switch is a similar design as MT7531, however, unlike > > > > > > +      other MT7530 and MT7531 the switch registers are directly > > > > > > +      mapped into the SoCs register space rather than > > > > > > being accessible > > > > > > +      via MDIO. > > > > > > + > > > > > >    config NET_DSA_MV88E6060 > > > > > >        tristate "Marvell 88E6060 ethernet switch chip support" > > > > > >        select NET_DSA_TAG_TRAILER > > > > > > diff --git a/drivers/net/dsa/Makefile b/drivers/net/dsa/Makefile > > > > > > index 71250d7dd41af..103a33e20de4b 100644 > > > > > > --- a/drivers/net/dsa/Makefile > > > > > > +++ b/drivers/net/dsa/Makefile > > > > > > @@ -8,6 +8,7 @@ endif > > > > > >    obj-$(CONFIG_NET_DSA_LANTIQ_GSWIP) += lantiq_gswip.o > > > > > >    obj-$(CONFIG_NET_DSA_MT7530_COMMON) += mt7530.o > > > > > >    obj-$(CONFIG_NET_DSA_MT7530)    += mt7530-mdio.o > > > > > > +obj-$(CONFIG_NET_DSA_MT7988)    += mt7530-mmio.o > > > > > > > > > > I'm not fond of this way. Wouldn't it be better if we split > > > > > the mdio and > > > > > mmio drivers to separate modules and kept switch hardware support on > > > > > mt7530.c? > > > > > > > > You mean this in terms of Kconfig symbols? > > > > Because the way you describe is basically what I'm doing here: > > > >   * mt7530.c is the shared/common switch hardware driver > > > >   * mt7530-mdio.c contains the MDIO accessors and MDIO device > > > > drivers for > > > >     MT7530, MT7531, MT7621, MT7623, ... > > > >   * mt7530-mmio.c contains the platform device driver for in-SoC > > > > switches > > > >     which are accessed via MMIO, ie. MT7988 (and yes, this could be > > > >     extended to also support MT7620A/N). > > > > > > Ok great. > > > > > > > > > > > In early drafts I also named the Kconfig symbols > > > > CONFIG_NET_DSA_MT7530 for mt7530.c (ie. the common part) > > > > CONFIG_NET_DSA_MT7530_MDIO for the MDIO driver > > > > CONFIG_NET_DSA_MT7530_MMIO for the MMIO driver > > > > > > > > However, as existing kernel configurations expect > > > > CONFIG_NET_DSA_MT7530 to > > > > select the MDIO driver, I decided it would be better to hide the > > > > symbol of > > > > the common part and have CONFIG_NET_DSA_MT7530 select the MDIO > > > > driver like > > > > it was before. > > > > > > You can "imply NET_DSA_MT7530_MDIO" from NET_DSA_MT7530 so the MDIO > > > driver is also enabled when NET_DSA_MT7530 is selected. For example, > > > on Realtek, both MDIO and SMI drivers are enabled by default when > > > either of the main drivers are selected. > > > > > > config NET_DSA_MT7530 > > >      tristate "MediaTek MT7530 and MT7531 Ethernet switch support" > > >      select NET_DSA_TAG_MTK > > >      select MEDIATEK_GE_PHY > > >      select PCS_MTK_LYNXI > > >      imply NET_DSA_MT7530_MDIO > > >      imply NET_DSA_MT7530_MMIO > > > > The final kconfig should look like this: > > > > config NET_DSA_MT7530 > >     tristate "MediaTek MT7530 and MT7531 Ethernet switch support" > >     select NET_DSA_TAG_MTK > >     select MEDIATEK_GE_PHY > >     select PCS_MTK_LYNXI > > Looks like PCS_MTK_LYNXI is used on NET_DSA_MT7530_MDIO instead now. I also > see '#include ' on mt7530.c but don't see any > functions called on it. Leftover? Yes, you are right, it's only used in mt7530-mdio.c and the #include in mt7530.c is a left-over which I shall remove. > > >     imply NET_DSA_MT7530_MDIO > >     imply NET_DSA_MT7530_MMIO > >     help > >       This enables support for the MediaTek MT7530 and MT7531 Ethernet > >       switch chips. Multi-chip module MT7530 in MT7621AT, MT7621DAT, > >       MT7621ST and MT7623AI SoCs, and built-in switch in MT7688 SoC is > >       supported. > > > > config NET_DSA_MT7530_MDIO > >     tristate "MediaTek MT7530 MDIO interface driver" > > Should go here: > > select PCS_MTK_LYNXI Yeah, in Kconfig I had taken care of this already, but forgot to remove the include in mt7530.c... Thank you for spotting this. I'll soon post v2 which includes these fixes. 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 2BF6BC761A6 for ; Fri, 31 Mar 2023 20:35:15 +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:In-Reply-To:MIME-Version:References: 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=3XotuaQD155iqIo6vD7QJNH7Wgpf//8np7tlM5mKIj8=; b=WL3cBKZbgqpHzD 3dg3l65YOreSQJQmtiB7/AN2nVC2RfdbLNEuK3qV5rd0edB5nuHrcX/N+J6PVhsqRV3MroFb8wbX6 s5RyqdRK6f1RMe32OBGVjUneQAvTA1Nq7gVzvlP1RYD10rGp7Wg3j7gg+uIGny52wZEW3d2WpR1y7 yF9IOeB4cZ4WgdJ22Yfg7zQ9uZl7T4aC+2eiARqjm9h6wDadYhrwszrJ4U6nFc5kBs2exrRWj2W8j PdywAc5mbvFyRea0WGAWzgLt4Dy+8ealoQdg4jzw03Wkb0BOiCXLqeGLV3GQYWDl2Iy0ksMkrjKGl xlCVkxE7NPtXAEG0Kxww==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1piLRv-008mry-2z; Fri, 31 Mar 2023 20:34:15 +0000 Received: from fudo.makrotopia.org ([2a07:2ec0:3002::71]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1piLRp-008mpg-0r; Fri, 31 Mar 2023 20:34:14 +0000 Received: from local by fudo.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.96) (envelope-from ) id 1piLRa-0007Dg-1j; Fri, 31 Mar 2023 22:33:54 +0200 Date: Fri, 31 Mar 2023 21:33:50 +0100 From: Daniel Golle To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Cc: netdev@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux@armlinux.org.uk, linux-kernel@vger.kernel.org, Andrew Lunn , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Sean Wang , Landen Chao , DENG Qingfang , Philipp Zabel , Sam Shih , Lorenzo Bianconi , John Crispin , Felix Fietkau , Luiz Angelo Daros de Luca Subject: Re: [PATCH net-next 14/15] net: dsa: mt7530: introduce driver for MT7988 built-in switch Message-ID: References: <6a7c5f81-a8a3-27b5-4af3-7175a3313f9a@arinc9.com> <7d0acaef-0cec-91b9-a5c6-d094b71e3dbd@arinc9.com> <28d048c9-6389-749b-d0eb-18a9c2d83c4e@arinc9.com> <56adf82a-3db0-5909-e948-e21717e3fe03@arinc9.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <56adf82a-3db0-5909-e948-e21717e3fe03@arinc9.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230331_133409_480322_61BE105D X-CRM114-Status: GOOD ( 43.35 ) 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 T24gRnJpLCBNYXIgMzEsIDIwMjMgYXQgMTE6MDc6NTFQTSArMDMwMCwgQXLEsW7DpyDDnE5BTCB3 cm90ZToKPiBPbiAzMS4wMy4yMDIzIDE2OjE4LCBBcsSxbsOnIMOcTkFMIHdyb3RlOgo+ID4gT24g MzEuMDMuMjAyMyAxNTowNiwgQXLEsW7DpyDDnE5BTCB3cm90ZToKPiA+ID4gT24gMzEuMDMuMjAy MyAxMzoxNiwgRGFuaWVsIEdvbGxlIHdyb3RlOgo+ID4gPiA+IE9uIEZyaSwgTWFyIDMxLCAyMDIz IGF0IDA4OjUwOjI4QU0gKzAzMDAsIEFyxLFuw6cgw5xOQUwgd3JvdGU6Cj4gPiA+ID4gPiBPbiAz MC4wMy4yMDIzIDE4OjIzLCBEYW5pZWwgR29sbGUgd3JvdGU6Cj4gPiA+ID4gPiA+IEFkZCBkcml2 ZXIgZm9yIHRoZSBidWlsdC1pbiBHaWdhYml0IEV0aGVybmV0IHN3aXRjaCB3aGljaCBjYW4gYmUg Zm91bmQKPiA+ID4gPiA+ID4gaW4gdGhlIE1lZGlhVGVrIE1UNzk4OCBTb0MuCj4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiBUaGUgc3dpdGNoIHNoYXJlcyBtb3N0IG9mIGl0cyBkZXNpZ24gd2l0aCBN VDc1MzAgYW5kIE1UNzUzMSwgYnV0IGhhcwo+ID4gPiA+ID4gPiBpdCdzIHJlZ2lzdGVycyBtYXBw ZWQgaW50byB0aGUgU29DcyByZWdpc3RlciBzcGFjZSByYXRoZXIgdGhhbiBiZWluZwo+ID4gPiA+ ID4gPiBjb25uZWN0ZWQgZXh0ZXJuYWxseSBvciBpbnRlcm5hbGx5IHZpYSBNRElPLgo+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gSW50cm9kdWNlIGEgbmV3IHBsYXRmb3JtIGRyaXZlciB0byBzdXBw b3J0IHRoYXQuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwg R29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ IMKgwqAgTUFJTlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKg wqAgMiArCj4gPiA+ID4gPiA+IMKgwqAgZHJpdmVycy9uZXQvZHNhL0tjb25maWfCoMKgwqDCoMKg wqAgfMKgIDEyICsrKysKPiA+ID4gPiA+ID4gwqDCoCBkcml2ZXJzL25ldC9kc2EvTWFrZWZpbGXC oMKgwqDCoMKgIHzCoMKgIDEgKwo+ID4gPiA+ID4gPiDCoMKgIGRyaXZlcnMvbmV0L2RzYS9tdDc1 MzAtbW1pby5jIHwgMTAxCj4gPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ID4gPiA+ID4gwqDCoCBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmPCoMKgwqDCoMKg IHzCoCA4NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ID4gPiA+ID4gPiDCoMKgIGRy aXZlcnMvbmV0L2RzYS9tdDc1MzAuaMKgwqDCoMKgwqAgfMKgIDEyICsrLS0KPiA+ID4gPiA+ID4g wqDCoCA2IGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+ ID4gPiA+ID4gPiDCoMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9kc2EvbXQ3NTMw LW1taW8uYwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT IGIvTUFJTlRBSU5FUlMKPiA+ID4gPiA+ID4gaW5kZXggMTQ5MjRhZWQxNWNhNy4uNjc0NjczZGJk ZmQ4YiAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ID4gPiA+ID4gKysr IGIvTUFJTlRBSU5FUlMKPiA+ID4gPiA+ID4gQEAgLTEzMTc0LDkgKzEzMTc0LDExIEBAIE1FRElB VEVLIFNXSVRDSCBEUklWRVIKPiA+ID4gPiA+ID4gwqDCoCBNOsKgwqDCoCBTZWFuIFdhbmcgPHNl YW4ud2FuZ0BtZWRpYXRlay5jb20+Cj4gPiA+ID4gPiA+IMKgwqAgTTrCoMKgwqAgTGFuZGVuIENo YW8gPExhbmRlbi5DaGFvQG1lZGlhdGVrLmNvbT4KPiA+ID4gPiA+ID4gwqDCoCBNOsKgwqDCoCBE RU5HIFFpbmdmYW5nIDxkcWZleHRAZ21haWwuY29tPgo+ID4gPiA+ID4gPiArTTrCoMKgwqAgRGFu aWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+Cj4gPiA+ID4gPiA+IMKgwqAgTDrCoMKg wqAgbmV0ZGV2QHZnZXIua2VybmVsLm9yZwo+ID4gPiA+ID4gPiDCoMKgIFM6wqDCoMKgIE1haW50 YWluZWQKPiA+ID4gPiA+ID4gwqDCoCBGOsKgwqDCoCBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1k aW8uYwo+ID4gPiA+ID4gPiArRjrCoMKgwqAgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMK PiA+ID4gPiA+ID4gwqDCoCBGOsKgwqDCoCBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLioKPiA+ID4g PiA+ID4gwqDCoCBGOsKgwqDCoCBuZXQvZHNhL3RhZ19tdGsuYwo+ID4gPiA+ID4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwo+ ID4gPiA+ID4gPiBpbmRleCBjMjU1MWIxMzMyNGMyLi5kZTRkODZlMzc5NzNmIDEwMDY0NAo+ID4g PiA+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwo+ID4gPiA+ID4gPiArKysgYi9k cml2ZXJzL25ldC9kc2EvS2NvbmZpZwo+ID4gPiA+ID4gPiBAQCAtNTIsNiArNTIsMTggQEAgY29u ZmlnIE5FVF9EU0FfTVQ3NTMwCj4gPiA+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqAgTXVsdGktY2hp cCBtb2R1bGUgTVQ3NTMwIGluIE1UNzYyMUFULCBNVDc2MjFEQVQsIE1UNzYyMVNUIGFuZAo+ID4g PiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgIE1UNzYyM0FJIFNvQ3MgaXMgc3VwcG9ydGVkIGFzIHdl bGwuCj4gPiA+ID4gPiA+ICtjb25maWcgTkVUX0RTQV9NVDc5ODgKPiA+ID4gPiA+ID4gK8KgwqDC oCB0cmlzdGF0ZSAiTWVkaWFUZWsgTVQ3OTg4IGJ1aWx0LWluIEV0aGVybmV0IHN3aXRjaCBzdXBw b3J0Igo+ID4gPiA+ID4gPiArwqDCoMKgIHNlbGVjdCBORVRfRFNBX01UNzUzMF9DT01NT04KPiA+ ID4gPiA+ID4gK8KgwqDCoCBkZXBlbmRzIG9uIEhBU19JT01FTQo+ID4gPiA+ID4gPiArwqDCoMKg IGhlbHAKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRo ZSBidWlsdC1pbiBFdGhlcm5ldCBzd2l0Y2ggZm91bmQKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqAg aW4gdGhlIE1lZGlhVGVrIE1UNzk4OCBTb0MuCj4gPiA+ID4gPiA+ICvCoMKgwqDCoMKgIFRoZSBz d2l0Y2ggaXMgYSBzaW1pbGFyIGRlc2lnbiBhcyBNVDc1MzEsIGhvd2V2ZXIsIHVubGlrZQo+ID4g PiA+ID4gPiArwqDCoMKgwqDCoCBvdGhlciBNVDc1MzAgYW5kIE1UNzUzMSB0aGUgc3dpdGNoIHJl Z2lzdGVycyBhcmUgZGlyZWN0bHkKPiA+ID4gPiA+ID4gK8KgwqDCoMKgwqAgbWFwcGVkIGludG8g dGhlIFNvQ3MgcmVnaXN0ZXIgc3BhY2UgcmF0aGVyIHRoYW4KPiA+ID4gPiA+ID4gYmVpbmcgYWNj ZXNzaWJsZQo+ID4gPiA+ID4gPiArwqDCoMKgwqDCoCB2aWEgTURJTy4KPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiDCoMKgIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAo+ID4gPiA+ID4gPiDCoMKg wqDCoMKgwqAgdHJpc3RhdGUgIk1hcnZlbGwgODhFNjA2MCBldGhlcm5ldCBzd2l0Y2ggY2hpcCBz dXBwb3J0Igo+ID4gPiA+ID4gPiDCoMKgwqDCoMKgwqAgc2VsZWN0IE5FVF9EU0FfVEFHX1RSQUlM RVIKPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2Ry aXZlcnMvbmV0L2RzYS9NYWtlZmlsZQo+ID4gPiA+ID4gPiBpbmRleCA3MTI1MGQ3ZGQ0MWFmLi4x MDNhMzNlMjBkZTRiIDEwMDY0NAo+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFr ZWZpbGUKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCj4gPiA+ID4g PiA+IEBAIC04LDYgKzgsNyBAQCBlbmRpZgo+ID4gPiA+ID4gPiDCoMKgIG9iai0kKENPTkZJR19O RVRfRFNBX0xBTlRJUV9HU1dJUCkgKz0gbGFudGlxX2dzd2lwLm8KPiA+ID4gPiA+ID4gwqDCoCBv YmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfQ09NTU9OKSArPSBtdDc1MzAubwo+ID4gPiA+ID4g PiDCoMKgIG9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMCnCoMKgwqAgKz0gbXQ3NTMwLW1kaW8u bwo+ID4gPiA+ID4gPiArb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3OTg4KcKgwqDCoCArPSBtdDc1 MzAtbW1pby5vCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEknbSBub3QgZm9uZCBvZiB0aGlzIHdheS4g V291bGRuJ3QgaXQgYmUgYmV0dGVyIGlmIHdlIHNwbGl0Cj4gPiA+ID4gPiB0aGUgbWRpbyBhbmQK PiA+ID4gPiA+IG1taW8gZHJpdmVycyB0byBzZXBhcmF0ZSBtb2R1bGVzIGFuZCBrZXB0IHN3aXRj aCBoYXJkd2FyZSBzdXBwb3J0IG9uCj4gPiA+ID4gPiBtdDc1MzAuYz8KPiA+ID4gPiAKPiA+ID4g PiBZb3UgbWVhbiB0aGlzIGluIHRlcm1zIG9mIEtjb25maWcgc3ltYm9scz8KPiA+ID4gPiBCZWNh dXNlIHRoZSB3YXkgeW91IGRlc2NyaWJlIGlzIGJhc2ljYWxseSB3aGF0IEknbSBkb2luZyBoZXJl Ogo+ID4gPiA+IMKgICogbXQ3NTMwLmMgaXMgdGhlIHNoYXJlZC9jb21tb24gc3dpdGNoIGhhcmR3 YXJlIGRyaXZlcgo+ID4gPiA+IMKgICogbXQ3NTMwLW1kaW8uYyBjb250YWlucyB0aGUgTURJTyBh Y2Nlc3NvcnMgYW5kIE1ESU8gZGV2aWNlCj4gPiA+ID4gZHJpdmVycyBmb3IKPiA+ID4gPiDCoMKg wqAgTVQ3NTMwLCBNVDc1MzEsIE1UNzYyMSwgTVQ3NjIzLCAuLi4KPiA+ID4gPiDCoCAqIG10NzUz MC1tbWlvLmMgY29udGFpbnMgdGhlIHBsYXRmb3JtIGRldmljZSBkcml2ZXIgZm9yIGluLVNvQwo+ ID4gPiA+IHN3aXRjaGVzCj4gPiA+ID4gwqDCoMKgIHdoaWNoIGFyZSBhY2Nlc3NlZCB2aWEgTU1J TywgaWUuIE1UNzk4OCAoYW5kIHllcywgdGhpcyBjb3VsZCBiZQo+ID4gPiA+IMKgwqDCoCBleHRl bmRlZCB0byBhbHNvIHN1cHBvcnQgTVQ3NjIwQS9OKS4KPiA+ID4gCj4gPiA+IE9rIGdyZWF0Lgo+ ID4gPiAKPiA+ID4gPiAKPiA+ID4gPiBJbiBlYXJseSBkcmFmdHMgSSBhbHNvIG5hbWVkIHRoZSBL Y29uZmlnIHN5bWJvbHMKPiA+ID4gPiBDT05GSUdfTkVUX0RTQV9NVDc1MzAgZm9yIG10NzUzMC5j IChpZS4gdGhlIGNvbW1vbiBwYXJ0KQo+ID4gPiA+IENPTkZJR19ORVRfRFNBX01UNzUzMF9NRElP IGZvciB0aGUgTURJTyBkcml2ZXIKPiA+ID4gPiBDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTyBm b3IgdGhlIE1NSU8gZHJpdmVyCj4gPiA+ID4gCj4gPiA+ID4gSG93ZXZlciwgYXMgZXhpc3Rpbmcg a2VybmVsIGNvbmZpZ3VyYXRpb25zIGV4cGVjdAo+ID4gPiA+IENPTkZJR19ORVRfRFNBX01UNzUz MCB0bwo+ID4gPiA+IHNlbGVjdCB0aGUgTURJTyBkcml2ZXIsIEkgZGVjaWRlZCBpdCB3b3VsZCBi ZSBiZXR0ZXIgdG8gaGlkZSB0aGUKPiA+ID4gPiBzeW1ib2wgb2YKPiA+ID4gPiB0aGUgY29tbW9u IHBhcnQgYW5kIGhhdmUgQ09ORklHX05FVF9EU0FfTVQ3NTMwIHNlbGVjdCB0aGUgTURJTwo+ID4g PiA+IGRyaXZlciBsaWtlCj4gPiA+ID4gaXQgd2FzIGJlZm9yZS4KPiA+ID4gCj4gPiA+IFlvdSBj YW4gImltcGx5IE5FVF9EU0FfTVQ3NTMwX01ESU8iIGZyb20gTkVUX0RTQV9NVDc1MzAgc28gdGhl IE1ESU8KPiA+ID4gZHJpdmVyIGlzIGFsc28gZW5hYmxlZCB3aGVuIE5FVF9EU0FfTVQ3NTMwIGlz IHNlbGVjdGVkLiBGb3IgZXhhbXBsZSwKPiA+ID4gb24gUmVhbHRlaywgYm90aCBNRElPIGFuZCBT TUkgZHJpdmVycyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4KPiA+ID4gZWl0aGVyIG9mIHRo ZSBtYWluIGRyaXZlcnMgYXJlIHNlbGVjdGVkLgo+ID4gPiAKPiA+ID4gY29uZmlnIE5FVF9EU0Ff TVQ3NTMwCj4gPiA+IMKgwqDCoMKgwqB0cmlzdGF0ZSAiTWVkaWFUZWsgTVQ3NTMwIGFuZCBNVDc1 MzEgRXRoZXJuZXQgc3dpdGNoIHN1cHBvcnQiCj4gPiA+IMKgwqDCoMKgwqBzZWxlY3QgTkVUX0RT QV9UQUdfTVRLCj4gPiA+IMKgwqDCoMKgwqBzZWxlY3QgTUVESUFURUtfR0VfUEhZCj4gPiA+IMKg wqDCoMKgwqBzZWxlY3QgUENTX01US19MWU5YSQo+ID4gPiDCoMKgwqDCoMKgaW1wbHkgTkVUX0RT QV9NVDc1MzBfTURJTwo+ID4gPiDCoMKgwqDCoMKgaW1wbHkgTkVUX0RTQV9NVDc1MzBfTU1JTwo+ ID4gCj4gPiBUaGUgZmluYWwga2NvbmZpZyBzaG91bGQgbG9vayBsaWtlIHRoaXM6Cj4gPiAKPiA+ IGNvbmZpZyBORVRfRFNBX01UNzUzMAo+ID4gIMKgwqDCoMKgdHJpc3RhdGUgIk1lZGlhVGVrIE1U NzUzMCBhbmQgTVQ3NTMxIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0Igo+ID4gIMKgwqDCoMKgc2Vs ZWN0IE5FVF9EU0FfVEFHX01USwo+ID4gIMKgwqDCoMKgc2VsZWN0IE1FRElBVEVLX0dFX1BIWQo+ ID4gIMKgwqDCoMKgc2VsZWN0IFBDU19NVEtfTFlOWEkKPiAKPiBMb29rcyBsaWtlIFBDU19NVEtf TFlOWEkgaXMgdXNlZCBvbiBORVRfRFNBX01UNzUzMF9NRElPIGluc3RlYWQgbm93LiBJIGFsc28K PiBzZWUgJyNpbmNsdWRlIDxsaW51eC9wY3MvcGNzLW10ay1seW54aS5oPicgb24gbXQ3NTMwLmMg YnV0IGRvbid0IHNlZSBhbnkKPiBmdW5jdGlvbnMgY2FsbGVkIG9uIGl0LiBMZWZ0b3Zlcj8KClll cywgeW91IGFyZSByaWdodCwgaXQncyBvbmx5IHVzZWQgaW4gbXQ3NTMwLW1kaW8uYyBhbmQgdGhl ICNpbmNsdWRlIGluCm10NzUzMC5jIGlzIGEgbGVmdC1vdmVyIHdoaWNoIEkgc2hhbGwgcmVtb3Zl LgoKPiAKPiA+ICDCoMKgwqDCoGltcGx5IE5FVF9EU0FfTVQ3NTMwX01ESU8KPiA+ICDCoMKgwqDC oGltcGx5IE5FVF9EU0FfTVQ3NTMwX01NSU8KPiA+ICDCoMKgwqDCoGhlbHAKPiA+ICDCoMKgwqDC oMKgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWVkaWFUZWsgTVQ3NTMwIGFuZCBNVDc1 MzEgRXRoZXJuZXQKPiA+ICDCoMKgwqDCoMKgIHN3aXRjaCBjaGlwcy4gTXVsdGktY2hpcCBtb2R1 bGUgTVQ3NTMwIGluIE1UNzYyMUFULCBNVDc2MjFEQVQsCj4gPiAgwqDCoMKgwqDCoCBNVDc2MjFT VCBhbmQgTVQ3NjIzQUkgU29DcywgYW5kIGJ1aWx0LWluIHN3aXRjaCBpbiBNVDc2ODggU29DIGlz Cj4gPiAgwqDCoMKgwqDCoCBzdXBwb3J0ZWQuCj4gPiAKPiA+IGNvbmZpZyBORVRfRFNBX01UNzUz MF9NRElPCj4gPiAgwqDCoMKgwqB0cmlzdGF0ZSAiTWVkaWFUZWsgTVQ3NTMwIE1ESU8gaW50ZXJm YWNlIGRyaXZlciIKPiAKPiBTaG91bGQgZ28gaGVyZToKPiAKPiBzZWxlY3QgUENTX01US19MWU5Y SQoKWWVhaCwgaW4gS2NvbmZpZyBJIGhhZCB0YWtlbiBjYXJlIG9mIHRoaXMgYWxyZWFkeSwgYnV0 IGZvcmdvdCB0byByZW1vdmUKdGhlIGluY2x1ZGUgaW4gbXQ3NTMwLmMuLi4KCgpUaGFuayB5b3Ug Zm9yIHNwb3R0aW5nIHRoaXMuIEknbGwgc29vbiBwb3N0IHYyIHdoaWNoIGluY2x1ZGVzIHRoZXNl IGZpeGVzLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=