From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) (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 475B915A848; Mon, 27 May 2024 16:14:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.199 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716826503; cv=none; b=hLQqwFRLWAiQ/QqaTOlSi2AjJntPWgBpka/kTl/8zO9e3akX7a8jNyaZlOdZbN8Nqz1M9moYfCpcaZrSySSljWO6n12PGNtyeO/XJn+wfgxE9xsAActGA7WZWqJpevh+51wtu7xZXiPXBrnBWEMKP6Svx/7GJ1M0xBJp5UACYNo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716826503; c=relaxed/simple; bh=Nkv1p3ZENfKDlNqI+54nRq6lBXcqUNOi6P16n+/l/Pk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=izng8jtseC3s/xmCgTZxbrNndECWoJGqM7Nk1iU9assc5IRYzzStiYwzSD/1cdtMClBJcbZ+faRJbW9025frvY+t+SqH9hPhyXeij37OdeB38ztGxQbc259wH/M/PoddLtMwD8woc7yf75ytWSwlfBPDMfp4hkS/78SW0mCpFQk= 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=Gc1IA0Cc; arc=none smtp.client-ip=217.70.183.199 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="Gc1IA0Cc" Received: by mail.gandi.net (Postfix) with ESMTPA id 5B2DFFF80F; Mon, 27 May 2024 16:14:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1716826498; 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; bh=W3Mdy4D5AfzKGYOQg2kvPo1SG7babkD1Hg9+fJZbynE=; b=Gc1IA0CcOaRQqvwBfyHOehrLkpRypTguANF5LYaSAFixeGPUpjMUucqkEoBEPTi7aziWgP K9PcQPainBGBKYLuFTOOIL+2UUvheA1dL/40FQncHKIrUvKQ+mYipIWJw86bBPNEtKklSZ r80033wBXkDwiaCJ36e0sr61X51Eq28l165w83O/X4mGz8tZiZlOCJK/DfUaARL6pESi2Y RHFI3n+TBmoW4RfT9Tk2vdJEgiecDvw2Kp8uZT/w1T8+dqy1Ud4peDQrCrAUXJX31baWpT UNGjuE4F6FAEDz0RDzn0FSuxcFBH+ZPNJT0DDT709saNHPfk/am7OA5GgUmNdQ== From: Herve Codina To: Simon Horman , Sai Krishna Gajula , Herve Codina , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Conor Dooley , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Lee Jones , Arnd Bergmann , Horatiu Vultur , UNGLinuxDriver@microchip.com, Andrew Lunn , Heiner Kallweit , Russell King , Saravana Kannan , Bjorn Helgaas , Philipp Zabel , Lars Povlsen , Steen Hegelund , Daniel Machon , Alexandre Belloni Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Allan Nielsen , Steen Hegelund , Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Date: Mon, 27 May 2024 18:14:27 +0200 Message-ID: <20240527161450.326615-1-herve.codina@bootlin.com> X-Mailer: git-send-email 2.45.0 Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: herve.codina@bootlin.com Hi, This series adds support for the LAN966x chip when used as a PCI device. For reference, the LAN996x chip is a System-on-chip that integrates an Ethernet switch and a number of other traditional hardware blocks such as a GPIO controller, I2C controllers, SPI controllers, etc. The LAN996x can be used in two different modes: - With Linux running on its Linux built-in ARM cores. This mode is already supported by the upstream Linux kernel, with the LAN996x described as a standard ARM Device Tree in arch/arm/boot/dts/microchip/lan966x.dtsi. Thanks to this support, all hardware blocks in the LAN996x already have drivers in the upstream Linux kernel. - As a PCI device, thanks to its built-in PCI endpoint controller. In this case, the LAN996x ARM cores are not used, but all peripherals of the LAN996x can be accessed by the PCI host using memory-mapped I/O through the PCI BARs. This series aims at supporting this second use-case. As all peripherals of the LAN996x already have drivers in the Linux kernel, our goal is to re-use them as-is to support this second use-case. Therefore, this patch series introduces a PCI driver that binds on the LAN996x PCI VID/PID, and when probed, instantiates all devices that are accessible through the PCI BAR. As the list and characteristics of such devices are non-discoverable, this PCI driver loads a Device Tree overlay that allows to teach the kernel about which devices are available, and allows to probe the relevant drivers in kernel, re-using all existing drivers with no change. This patch series for now adds a Device Tree overlay that describes an initial subset of the devices available over PCI in the LAN996x, and follow-up patch series will add support for more once this initial support has landed. In order to add this PCI driver, a number of preparation changes are needed: - Patches 1 to 5 allow the reset driver used for the LAN996x to be built as a module. Indeed, in the case where Linux runs on the ARM cores, it is common to have the reset driver built-in. However, when the LAN996x is used as a PCI device, it makes sense that all its drivers can be loaded as modules. - Patches 6 and 7 improve the MDIO controller driver to properly handle its reset signal. - Patches 8 to 12 introduce the internal interrupt controller used in the LAN996x. It is one of the few peripherals in the LAN996x that are only relevant when the LAN996x is used as a PCI device, which is why this interrupt controller did not have a driver so far. - Patches 13 to 16 make some small additions to the OF core and PCI/OF core to consider the PCI device as an interrupt controller. This topic was previously mentioned in [1] to avoid the need of phandle interrupt parents which are not available at some points. - Patches 17 and 18 introduce the LAN996x PCI driver itself, together with its DT bindings. We believe all items from the above list can be merged separately, with no build dependencies. We expect: - Patches 1 to 5 to be taken by reset maintainers - Patches 6 and 7 to be taken by network driver maintainers - Patches 8 to 12 to be taken by irqchip maintainers - Patch 13 to 17 to be taken by DT/PCI maintainers - Patch 18 and 19 by the MFD maintainers Additionally, we also believe all preparation items in this patch series can be taken even before there's a final agreement on the last part of the series (the MFD driver itself). [1] https://lore.kernel.org/all/CAL_Jsq+je7+9ATR=B6jXHjEJHjn24vQFs4Tvi9=vhDeK9n42Aw@mail.gmail.com/ Compare to the previous iteration: https://lore.kernel.org/lkml/20240430183301.46568e35@bootlin.com/ this v2 series mainly: - Adds tests for of_changeset_add_prop_*() function family - Fixes typos, coding style and doc descriptions - Fixes a missing ret value assignment in the OIC .probe() - Uses indices in the OIC register definition - Removes Patch 8 (sent alone to net) - Rebases on top of v6.10-rc1 Best regards, Hervé Changes v1 -> v2 - Patch 1 Fix a typo in syscon.h (s/intline/inline/) - Patches 2..5 No changes - Patch 6 Improve the reset property description - Patch 7 Fix a wrong reverse x-mass tree declaration - Patch 8 removed (sent alone to net) https://lore.kernel.org/lkml/20240513111853.58668-1-herve.codina@bootlin.com/ - Patch 8 (v1 patch 9) Add 'Reviewed-by: Rob Herring (Arm) ' - Patch 9 (v1 patch 10) Rephrase and ident parameters descriptions - Patch 10 (v1 patch 11) No changes - Patch 11 (v1 patch 12) Fix a missing ret value assignment before a goto in .probe() Limit lines to 80 columns Use indices in register offset definitions - Patch 13 and 14 (new patches in v2) Add new test cases for existing of_changeset_add_prop_*() - Patch 15 (v1 patch 14) No changes - Patch 16 (new patches in v2) Add tests for of_changeset_add_prop_bool() - Patch 17 (v1 patch 15) Update commit subject Rewrap a paragraph in commit log - Patch 18 (v1 patch 16) Use PCI_IRQ_INTX instead of PCI_IRQ_LEGACY - Patch 19 (v1 patch 17) No changes Clément Léger (5): mfd: syscon: Add reference counting and device managed support reset: mchp: sparx5: Remove dependencies and allow building as a module reset: mchp: sparx5: Release syscon when not use anymore reset: core: add get_device()/put_device on rcdev reset: mchp: sparx5: set the dev member of the reset controller Herve Codina (14): dt-bindings: net: mscc-miim: Add resets property net: mdio: mscc-miim: Handle the switch reset dt-bindings: interrupt-controller: Add support for Microchip LAN966x OIC irqdomain: Add missing parameter descriptions in docs irqdomain: Introduce irq_domain_alloc() and irq_domain_publish() irqchip: Add support for LAN966x OIC MAINTAINERS: Add the Microchip LAN966x OIC driver entry of: dynamic: Constify parameter in of_changeset_add_prop_string_array() of: unittest: Add tests for changeset properties adding of: dynamic: Introduce of_changeset_add_prop_bool() of: unittest: Add a test case for of_changeset_add_prop_bool() PCI: of_property: Add interrupt-controller property in PCI device nodes mfd: Add support for LAN966x PCI device MAINTAINERS: Add the Microchip LAN966x PCI driver entry .../microchip,lan966x-oic.yaml | 55 ++++ .../devicetree/bindings/net/mscc,miim.yaml | 11 + MAINTAINERS | 12 + drivers/irqchip/Kconfig | 12 + drivers/irqchip/Makefile | 1 + drivers/irqchip/irq-lan966x-oic.c | 308 ++++++++++++++++++ drivers/mfd/Kconfig | 24 ++ drivers/mfd/Makefile | 4 + drivers/mfd/lan966x_pci.c | 229 +++++++++++++ drivers/mfd/lan966x_pci.dtso | 167 ++++++++++ drivers/mfd/syscon.c | 145 ++++++++- drivers/net/mdio/mdio-mscc-miim.c | 8 + drivers/of/dynamic.c | 27 +- drivers/of/unittest.c | 166 ++++++++++ drivers/pci/of_property.c | 24 ++ drivers/pci/quirks.c | 1 + drivers/reset/Kconfig | 3 +- drivers/reset/core.c | 2 + drivers/reset/reset-microchip-sparx5.c | 11 +- include/linux/irqdomain.h | 16 + include/linux/mfd/syscon.h | 18 + include/linux/of.h | 5 +- kernel/irq/irqdomain.c | 118 +++++-- 23 files changed, 1323 insertions(+), 44 deletions(-) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/microchip,lan966x-oic.yaml create mode 100644 drivers/irqchip/irq-lan966x-oic.c create mode 100644 drivers/mfd/lan966x_pci.c create mode 100644 drivers/mfd/lan966x_pci.dtso -- 2.45.0 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 5B038C25B74 for ; Mon, 27 May 2024 16:15:20 +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:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=eQ9pUCyx8+Elh2s6pNfOCfFFQ6M7g76HHvOFxUkepNc=; b=D/eCBqf7Oz0J6Z lu6NDkuzWkHDkHdS3fBeKMz3HY+SQFfu2zDz83XOaftD3KKS8bmO6MtZOOqPdw/GasmNenjEjtpul Cxie5bjtAwi/yRPAQ/+nMcMy8VIi+RaPo7lgXS9CtrGh5aOkWLAL+FD3/KI3MJQhieFQ7GSlE0ydl OA2v5v1cg6FvmTkzRYMGLiMgz1CLEJ69RC+pPpMcnDvHRgU18x6BkREb2APQGyPNeuEdS7Xfu+yln WijDaTnMUTd6AHq/hL1IH8AUiJV96fSYpgmWVdU9xOcjUF2k3C9snWPjy7a/bfF9HV9XguRskEmLx j5/GvZqokhbtCXL5J6Lw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBd05-0000000FmTL-42Sd; Mon, 27 May 2024 16:15:05 +0000 Received: from relay9-d.mail.gandi.net ([2001:4b98:dc4:8::229]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sBd02-0000000FmQO-0Qdo for linux-arm-kernel@lists.infradead.org; Mon, 27 May 2024 16:15:04 +0000 Received: by mail.gandi.net (Postfix) with ESMTPA id 5B2DFFF80F; Mon, 27 May 2024 16:14:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1716826498; 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; bh=W3Mdy4D5AfzKGYOQg2kvPo1SG7babkD1Hg9+fJZbynE=; b=Gc1IA0CcOaRQqvwBfyHOehrLkpRypTguANF5LYaSAFixeGPUpjMUucqkEoBEPTi7aziWgP K9PcQPainBGBKYLuFTOOIL+2UUvheA1dL/40FQncHKIrUvKQ+mYipIWJw86bBPNEtKklSZ r80033wBXkDwiaCJ36e0sr61X51Eq28l165w83O/X4mGz8tZiZlOCJK/DfUaARL6pESi2Y RHFI3n+TBmoW4RfT9Tk2vdJEgiecDvw2Kp8uZT/w1T8+dqy1Ud4peDQrCrAUXJX31baWpT UNGjuE4F6FAEDz0RDzn0FSuxcFBH+ZPNJT0DDT709saNHPfk/am7OA5GgUmNdQ== From: Herve Codina To: Simon Horman , Sai Krishna Gajula , Herve Codina , Thomas Gleixner , Rob Herring , Krzysztof Kozlowski , Conor Dooley , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Lee Jones , Arnd Bergmann , Horatiu Vultur , UNGLinuxDriver@microchip.com, Andrew Lunn , Heiner Kallweit , Russell King , Saravana Kannan , Bjorn Helgaas , Philipp Zabel , Lars Povlsen , Steen Hegelund , Daniel Machon , Alexandre Belloni Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, netdev@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Allan Nielsen , Steen Hegelund , Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Date: Mon, 27 May 2024 18:14:27 +0200 Message-ID: <20240527161450.326615-1-herve.codina@bootlin.com> X-Mailer: git-send-email 2.45.0 MIME-Version: 1.0 X-GND-Sasl: herve.codina@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240527_091502_627916_62BF406C X-CRM114-Status: GOOD ( 35.45 ) 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 SGksCgpUaGlzIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBMQU45NjZ4IGNoaXAgd2hlbiB1 c2VkIGFzIGEgUENJCmRldmljZS4KCkZvciByZWZlcmVuY2UsIHRoZSBMQU45OTZ4IGNoaXAgaXMg YSBTeXN0ZW0tb24tY2hpcCB0aGF0IGludGVncmF0ZXMgYW4KRXRoZXJuZXQgc3dpdGNoIGFuZCBh IG51bWJlciBvZiBvdGhlciB0cmFkaXRpb25hbCBoYXJkd2FyZSBibG9ja3Mgc3VjaAphcyBhIEdQ SU8gY29udHJvbGxlciwgSTJDIGNvbnRyb2xsZXJzLCBTUEkgY29udHJvbGxlcnMsIGV0Yy4gVGhl CkxBTjk5NnggY2FuIGJlIHVzZWQgaW4gdHdvIGRpZmZlcmVudCBtb2RlczoKCi0gV2l0aCBMaW51 eCBydW5uaW5nIG9uIGl0cyBMaW51eCBidWlsdC1pbiBBUk0gY29yZXMuCiAgVGhpcyBtb2RlIGlz IGFscmVhZHkgc3VwcG9ydGVkIGJ5IHRoZSB1cHN0cmVhbSBMaW51eCBrZXJuZWwsIHdpdGggdGhl CiAgTEFOOTk2eCBkZXNjcmliZWQgYXMgYSBzdGFuZGFyZCBBUk0gRGV2aWNlIFRyZWUgaW4KICBh cmNoL2FybS9ib290L2R0cy9taWNyb2NoaXAvbGFuOTY2eC5kdHNpLiBUaGFua3MgdG8gdGhpcyBz dXBwb3J0LAogIGFsbCBoYXJkd2FyZSBibG9ja3MgaW4gdGhlIExBTjk5NnggYWxyZWFkeSBoYXZl IGRyaXZlcnMgaW4gdGhlCiAgdXBzdHJlYW0gTGludXgga2VybmVsLgoKLSBBcyBhIFBDSSBkZXZp Y2UsIHRoYW5rcyB0byBpdHMgYnVpbHQtaW4gUENJIGVuZHBvaW50IGNvbnRyb2xsZXIuCiAgSW4g dGhpcyBjYXNlLCB0aGUgTEFOOTk2eCBBUk0gY29yZXMgYXJlIG5vdCB1c2VkLCBidXQgYWxsIHBl cmlwaGVyYWxzCiAgb2YgdGhlIExBTjk5NnggY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZSBQQ0kgaG9z dCB1c2luZyBtZW1vcnktbWFwcGVkCiAgSS9PIHRocm91Z2ggdGhlIFBDSSBCQVJzLgoKVGhpcyBz ZXJpZXMgYWltcyBhdCBzdXBwb3J0aW5nIHRoaXMgc2Vjb25kIHVzZS1jYXNlLiBBcyBhbGwgcGVy aXBoZXJhbHMKb2YgdGhlIExBTjk5NnggYWxyZWFkeSBoYXZlIGRyaXZlcnMgaW4gdGhlIExpbnV4 IGtlcm5lbCwgb3VyIGdvYWwgaXMgdG8KcmUtdXNlIHRoZW0gYXMtaXMgdG8gc3VwcG9ydCB0aGlz IHNlY29uZCB1c2UtY2FzZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNl cyBhIFBDSSBkcml2ZXIgdGhhdCBiaW5kcyBvbiB0aGUKTEFOOTk2eCBQQ0kgVklEL1BJRCwgYW5k IHdoZW4gcHJvYmVkLCBpbnN0YW50aWF0ZXMgYWxsIGRldmljZXMgdGhhdCBhcmUKYWNjZXNzaWJs ZSB0aHJvdWdoIHRoZSBQQ0kgQkFSLiBBcyB0aGUgbGlzdCBhbmQgY2hhcmFjdGVyaXN0aWNzIG9m IHN1Y2gKZGV2aWNlcyBhcmUgbm9uLWRpc2NvdmVyYWJsZSwgdGhpcyBQQ0kgZHJpdmVyIGxvYWRz IGEgRGV2aWNlIFRyZWUKb3ZlcmxheSB0aGF0IGFsbG93cyB0byB0ZWFjaCB0aGUga2VybmVsIGFi b3V0IHdoaWNoIGRldmljZXMgYXJlCmF2YWlsYWJsZSwgYW5kIGFsbG93cyB0byBwcm9iZSB0aGUg cmVsZXZhbnQgZHJpdmVycyBpbiBrZXJuZWwsIHJlLXVzaW5nCmFsbCBleGlzdGluZyBkcml2ZXJz IHdpdGggbm8gY2hhbmdlLgoKVGhpcyBwYXRjaCBzZXJpZXMgZm9yIG5vdyBhZGRzIGEgRGV2aWNl IFRyZWUgb3ZlcmxheSB0aGF0IGRlc2NyaWJlcyBhbgppbml0aWFsIHN1YnNldCBvZiB0aGUgZGV2 aWNlcyBhdmFpbGFibGUgb3ZlciBQQ0kgaW4gdGhlIExBTjk5NngsIGFuZApmb2xsb3ctdXAgcGF0 Y2ggc2VyaWVzIHdpbGwgYWRkIHN1cHBvcnQgZm9yIG1vcmUgb25jZSB0aGlzIGluaXRpYWwKc3Vw cG9ydCBoYXMgbGFuZGVkLgoKSW4gb3JkZXIgdG8gYWRkIHRoaXMgUENJIGRyaXZlciwgYSBudW1i ZXIgb2YgcHJlcGFyYXRpb24gY2hhbmdlcyBhcmUKbmVlZGVkOgoKIC0gUGF0Y2hlcyAxIHRvIDUg YWxsb3cgdGhlIHJlc2V0IGRyaXZlciB1c2VkIGZvciB0aGUgTEFOOTk2eCB0byBiZQogICBidWls dCBhcyBhIG1vZHVsZS4gSW5kZWVkLCBpbiB0aGUgY2FzZSB3aGVyZSBMaW51eCBydW5zIG9uIHRo ZSBBUk0KICAgY29yZXMsIGl0IGlzIGNvbW1vbiB0byBoYXZlIHRoZSByZXNldCBkcml2ZXIgYnVp bHQtaW4uIEhvd2V2ZXIsIHdoZW4KICAgdGhlIExBTjk5NnggaXMgdXNlZCBhcyBhIFBDSSBkZXZp Y2UsIGl0IG1ha2VzIHNlbnNlIHRoYXQgYWxsIGl0cwogICBkcml2ZXJzIGNhbiBiZSBsb2FkZWQg YXMgbW9kdWxlcy4KCiAtIFBhdGNoZXMgNiBhbmQgNyBpbXByb3ZlIHRoZSBNRElPIGNvbnRyb2xs ZXIgZHJpdmVyIHRvIHByb3Blcmx5CiAgIGhhbmRsZSBpdHMgcmVzZXQgc2lnbmFsLgoKIC0gUGF0 Y2hlcyA4IHRvIDEyIGludHJvZHVjZSB0aGUgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXIg dXNlZCBpbgogICB0aGUgTEFOOTk2eC4gSXQgaXMgb25lIG9mIHRoZSBmZXcgcGVyaXBoZXJhbHMg aW4gdGhlIExBTjk5NnggdGhhdAogICBhcmUgb25seSByZWxldmFudCB3aGVuIHRoZSBMQU45OTZ4 IGlzIHVzZWQgYXMgYSBQQ0kgZGV2aWNlLCB3aGljaCBpcwogICB3aHkgdGhpcyBpbnRlcnJ1cHQg Y29udHJvbGxlciBkaWQgbm90IGhhdmUgYSBkcml2ZXIgc28gZmFyLgoKIC0gUGF0Y2hlcyAxMyB0 byAxNiBtYWtlIHNvbWUgc21hbGwgYWRkaXRpb25zIHRvIHRoZSBPRiBjb3JlIGFuZAogICBQQ0kv T0YgY29yZSB0byBjb25zaWRlciB0aGUgUENJIGRldmljZSBhcyBhbiBpbnRlcnJ1cHQgY29udHJv bGxlci4KICAgVGhpcyB0b3BpYyB3YXMgcHJldmlvdXNseSBtZW50aW9uZWQgaW4gWzFdIHRvIGF2 b2lkIHRoZSBuZWVkIG9mCiAgIHBoYW5kbGUgaW50ZXJydXB0IHBhcmVudHMgd2hpY2ggYXJlIG5v dCBhdmFpbGFibGUgYXQgc29tZSBwb2ludHMuCgogLSBQYXRjaGVzIDE3IGFuZCAxOCBpbnRyb2R1 Y2UgdGhlIExBTjk5NnggUENJIGRyaXZlciBpdHNlbGYsIHRvZ2V0aGVyCiAgIHdpdGggaXRzIERU IGJpbmRpbmdzLgoKV2UgYmVsaWV2ZSBhbGwgaXRlbXMgZnJvbSB0aGUgYWJvdmUgbGlzdCBjYW4g YmUgbWVyZ2VkIHNlcGFyYXRlbHksIHdpdGgKbm8gYnVpbGQgZGVwZW5kZW5jaWVzLiBXZSBleHBl Y3Q6CgogLSBQYXRjaGVzIDEgdG8gNSB0byBiZSB0YWtlbiBieSByZXNldCBtYWludGFpbmVycwoK IC0gUGF0Y2hlcyA2IGFuZCA3IHRvIGJlIHRha2VuIGJ5IG5ldHdvcmsgZHJpdmVyIG1haW50YWlu ZXJzCgogLSBQYXRjaGVzIDggdG8gMTIgdG8gYmUgdGFrZW4gYnkgaXJxY2hpcCBtYWludGFpbmVy cwoKIC0gUGF0Y2ggMTMgdG8gMTcgdG8gYmUgdGFrZW4gYnkgRFQvUENJIG1haW50YWluZXJzCgog LSBQYXRjaCAxOCBhbmQgMTkgYnkgdGhlIE1GRCBtYWludGFpbmVycwoKQWRkaXRpb25hbGx5LCB3 ZSBhbHNvIGJlbGlldmUgYWxsIHByZXBhcmF0aW9uIGl0ZW1zIGluIHRoaXMgcGF0Y2ggc2VyaWVz CmNhbiBiZSB0YWtlbiBldmVuIGJlZm9yZSB0aGVyZSdzIGEgZmluYWwgYWdyZWVtZW50IG9uIHRo ZSBsYXN0IHBhcnQgb2YKdGhlIHNlcmllcyAodGhlIE1GRCBkcml2ZXIgaXRzZWxmKS4KClsxXSBo dHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvQ0FMX0pzcStqZTcrOUFUUj1CNmpYSGpFSkhqbjI0 dlFGczRUdmk5PXZoRGVLOW40MkF3QG1haWwuZ21haWwuY29tLwoKQ29tcGFyZSB0byB0aGUgcHJl dmlvdXMgaXRlcmF0aW9uOgogIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAyNDA0MzAx ODMzMDEuNDY1NjhlMzVAYm9vdGxpbi5jb20vCnRoaXMgdjIgc2VyaWVzIG1haW5seToKICAtIEFk ZHMgdGVzdHMgZm9yIG9mX2NoYW5nZXNldF9hZGRfcHJvcF8qKCkgZnVuY3Rpb24gZmFtaWx5CiAg LSBGaXhlcyB0eXBvcywgY29kaW5nIHN0eWxlIGFuZCBkb2MgZGVzY3JpcHRpb25zCiAgLSBGaXhl cyBhIG1pc3NpbmcgcmV0IHZhbHVlIGFzc2lnbm1lbnQgaW4gdGhlIE9JQyAucHJvYmUoKQogIC0g VXNlcyBpbmRpY2VzIGluIHRoZSBPSUMgcmVnaXN0ZXIgZGVmaW5pdGlvbgogIC0gUmVtb3ZlcyBQ YXRjaCA4IChzZW50IGFsb25lIHRvIG5ldCkKICAtIFJlYmFzZXMgb24gdG9wIG9mIHY2LjEwLXJj MQoKQmVzdCByZWdhcmRzLApIZXJ2w6kKCkNoYW5nZXMgdjEgLT4gdjIKICAtIFBhdGNoIDEKICAg IEZpeCBhIHR5cG8gaW4gc3lzY29uLmggKHMvaW50bGluZS9pbmxpbmUvKQoKICAtIFBhdGNoZXMg Mi4uNQogICAgTm8gY2hhbmdlcwoKICAtIFBhdGNoIDYKICAgIEltcHJvdmUgdGhlIHJlc2V0IHBy b3BlcnR5IGRlc2NyaXB0aW9uCgogIC0gUGF0Y2ggNwogICAgRml4IGEgd3JvbmcgcmV2ZXJzZSB4 LW1hc3MgdHJlZSBkZWNsYXJhdGlvbgoKICAtIFBhdGNoIDggcmVtb3ZlZCAoc2VudCBhbG9uZSB0 byBuZXQpCiAgICBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjQwNTEzMTExODUzLjU4 NjY4LTEtaGVydmUuY29kaW5hQGJvb3RsaW4uY29tLwoKICAtIFBhdGNoIDggKHYxIHBhdGNoIDkp CiAgICBBZGQgJ1Jldmlld2VkLWJ5OiBSb2IgSGVycmluZyAoQXJtKSA8cm9iaEBrZXJuZWwub3Jn PicKCiAgLSBQYXRjaCA5ICh2MSBwYXRjaCAxMCkKICAgIFJlcGhyYXNlIGFuZCBpZGVudCBwYXJh bWV0ZXJzIGRlc2NyaXB0aW9ucwoKICAtIFBhdGNoIDEwICh2MSBwYXRjaCAxMSkKICAgIE5vIGNo YW5nZXMKCiAgLSBQYXRjaCAxMSAodjEgcGF0Y2ggMTIpCiAgICBGaXggYSBtaXNzaW5nIHJldCB2 YWx1ZSBhc3NpZ25tZW50IGJlZm9yZSBhIGdvdG8gaW4gLnByb2JlKCkKICAgIExpbWl0IGxpbmVz IHRvIDgwIGNvbHVtbnMKICAgIFVzZSBpbmRpY2VzIGluIHJlZ2lzdGVyIG9mZnNldCBkZWZpbml0 aW9ucwoKICAtIFBhdGNoIDEzIGFuZCAxNCAobmV3IHBhdGNoZXMgaW4gdjIpCiAgICBBZGQgbmV3 IHRlc3QgY2FzZXMgZm9yIGV4aXN0aW5nIG9mX2NoYW5nZXNldF9hZGRfcHJvcF8qKCkKCiAgLSBQ YXRjaCAxNSAodjEgcGF0Y2ggMTQpCiAgICBObyBjaGFuZ2VzCgogIC0gUGF0Y2ggMTYgKG5ldyBw YXRjaGVzIGluIHYyKQogICAgQWRkIHRlc3RzIGZvciBvZl9jaGFuZ2VzZXRfYWRkX3Byb3BfYm9v bCgpCgogIC0gUGF0Y2ggMTcgKHYxIHBhdGNoIDE1KQogICAgVXBkYXRlIGNvbW1pdCBzdWJqZWN0 CiAgICBSZXdyYXAgYSBwYXJhZ3JhcGggaW4gY29tbWl0IGxvZwoKICAtIFBhdGNoIDE4ICh2MSBw YXRjaCAxNikKICAgIFVzZSBQQ0lfSVJRX0lOVFggaW5zdGVhZCBvZiBQQ0lfSVJRX0xFR0FDWQoK ICAtIFBhdGNoIDE5ICh2MSBwYXRjaCAxNykKICAgIE5vIGNoYW5nZXMKCkNsw6ltZW50IEzDqWdl ciAoNSk6CiAgbWZkOiBzeXNjb246IEFkZCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGRldmljZSBt YW5hZ2VkIHN1cHBvcnQKICByZXNldDogbWNocDogc3Bhcng1OiBSZW1vdmUgZGVwZW5kZW5jaWVz IGFuZCBhbGxvdyBidWlsZGluZyBhcyBhCiAgICBtb2R1bGUKICByZXNldDogbWNocDogc3Bhcng1 OiBSZWxlYXNlIHN5c2NvbiB3aGVuIG5vdCB1c2UgYW55bW9yZQogIHJlc2V0OiBjb3JlOiBhZGQg Z2V0X2RldmljZSgpL3B1dF9kZXZpY2Ugb24gcmNkZXYKICByZXNldDogbWNocDogc3Bhcng1OiBz ZXQgdGhlIGRldiBtZW1iZXIgb2YgdGhlIHJlc2V0IGNvbnRyb2xsZXIKCkhlcnZlIENvZGluYSAo MTQpOgogIGR0LWJpbmRpbmdzOiBuZXQ6IG1zY2MtbWlpbTogQWRkIHJlc2V0cyBwcm9wZXJ0eQog IG5ldDogbWRpbzogbXNjYy1taWltOiBIYW5kbGUgdGhlIHN3aXRjaCByZXNldAogIGR0LWJpbmRp bmdzOiBpbnRlcnJ1cHQtY29udHJvbGxlcjogQWRkIHN1cHBvcnQgZm9yIE1pY3JvY2hpcCBMQU45 NjZ4CiAgICBPSUMKICBpcnFkb21haW46IEFkZCBtaXNzaW5nIHBhcmFtZXRlciBkZXNjcmlwdGlv bnMgaW4gZG9jcwogIGlycWRvbWFpbjogSW50cm9kdWNlIGlycV9kb21haW5fYWxsb2MoKSBhbmQg aXJxX2RvbWFpbl9wdWJsaXNoKCkKICBpcnFjaGlwOiBBZGQgc3VwcG9ydCBmb3IgTEFOOTY2eCBP SUMKICBNQUlOVEFJTkVSUzogQWRkIHRoZSBNaWNyb2NoaXAgTEFOOTY2eCBPSUMgZHJpdmVyIGVu dHJ5CiAgb2Y6IGR5bmFtaWM6IENvbnN0aWZ5IHBhcmFtZXRlciBpbgogICAgb2ZfY2hhbmdlc2V0 X2FkZF9wcm9wX3N0cmluZ19hcnJheSgpCiAgb2Y6IHVuaXR0ZXN0OiBBZGQgdGVzdHMgZm9yIGNo YW5nZXNldCBwcm9wZXJ0aWVzIGFkZGluZwogIG9mOiBkeW5hbWljOiBJbnRyb2R1Y2Ugb2ZfY2hh bmdlc2V0X2FkZF9wcm9wX2Jvb2woKQogIG9mOiB1bml0dGVzdDogQWRkIGEgdGVzdCBjYXNlIGZv ciBvZl9jaGFuZ2VzZXRfYWRkX3Byb3BfYm9vbCgpCiAgUENJOiBvZl9wcm9wZXJ0eTogQWRkIGlu dGVycnVwdC1jb250cm9sbGVyIHByb3BlcnR5IGluIFBDSSBkZXZpY2UKICAgIG5vZGVzCiAgbWZk OiBBZGQgc3VwcG9ydCBmb3IgTEFOOTY2eCBQQ0kgZGV2aWNlCiAgTUFJTlRBSU5FUlM6IEFkZCB0 aGUgTWljcm9jaGlwIExBTjk2NnggUENJIGRyaXZlciBlbnRyeQoKIC4uLi9taWNyb2NoaXAsbGFu OTY2eC1vaWMueWFtbCAgICAgICAgICAgICAgICB8ICA1NSArKysrCiAuLi4vZGV2aWNldHJlZS9i aW5kaW5ncy9uZXQvbXNjYyxtaWltLnlhbWwgICAgfCAgMTEgKwogTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyICsKIGRyaXZlcnMvaXJxY2hpcC9LY29u ZmlnICAgICAgICAgICAgICAgICAgICAgICB8ICAxMiArCiBkcml2ZXJzL2lycWNoaXAvTWFrZWZp bGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9pcnFjaGlwL2lycS1sYW45 NjZ4LW9pYy5jICAgICAgICAgICAgIHwgMzA4ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9t ZmQvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI0ICsrCiBkcml2ZXJzL21m ZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKwogZHJpdmVycy9tZmQv bGFuOTY2eF9wY2kuYyAgICAgICAgICAgICAgICAgICAgIHwgMjI5ICsrKysrKysrKysrKysKIGRy aXZlcnMvbWZkL2xhbjk2NnhfcGNpLmR0c28gICAgICAgICAgICAgICAgICB8IDE2NyArKysrKysr KysrCiBkcml2ZXJzL21mZC9zeXNjb24uYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNDUg KysrKysrKystCiBkcml2ZXJzL25ldC9tZGlvL21kaW8tbXNjYy1taWltLmMgICAgICAgICAgICAg fCAgIDggKwogZHJpdmVycy9vZi9keW5hbWljLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwg IDI3ICstCiBkcml2ZXJzL29mL3VuaXR0ZXN0LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAx NjYgKysrKysrKysrKwogZHJpdmVycy9wY2kvb2ZfcHJvcGVydHkuYyAgICAgICAgICAgICAgICAg ICAgIHwgIDI0ICsrCiBkcml2ZXJzL3BjaS9xdWlya3MuYyAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9yZXNldC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAzICstCiBkcml2ZXJzL3Jlc2V0L2NvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKwogZHJpdmVycy9yZXNldC9yZXNldC1taWNyb2NoaXAtc3Bhcng1LmMgICAgICAgIHwg IDExICstCiBpbmNsdWRlL2xpbnV4L2lycWRvbWFpbi5oICAgICAgICAgICAgICAgICAgICAgfCAg MTYgKwogaW5jbHVkZS9saW51eC9tZmQvc3lzY29uLmggICAgICAgICAgICAgICAgICAgIHwgIDE4 ICsKIGluY2x1ZGUvbGludXgvb2YuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSAr LQoga2VybmVsL2lycS9pcnFkb21haW4uYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTE4ICsr KysrLS0KIDIzIGZpbGVzIGNoYW5nZWQsIDEzMjMgaW5zZXJ0aW9ucygrKSwgNDQgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L2ludGVycnVwdC1jb250cm9sbGVyL21pY3JvY2hpcCxsYW45NjZ4LW9pYy55YW1sCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9pcnFjaGlwL2lycS1sYW45NjZ4LW9pYy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZmQvbGFuOTY2eF9wY2kuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWZkL2xhbjk2NnhfcGNpLmR0c28KCi0tIAoyLjQ1LjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==