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=-5.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable 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 D90ACC2D0EE for ; Tue, 31 Mar 2020 13:45:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A5F0620784 for ; Tue, 31 Mar 2020 13:45:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730931AbgCaNpa (ORCPT ); Tue, 31 Mar 2020 09:45:30 -0400 Received: from metis.ext.pengutronix.de ([85.220.165.71]:44719 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730366AbgCaNpa (ORCPT ); Tue, 31 Mar 2020 09:45:30 -0400 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJHCm-0004G3-Vy; Tue, 31 Mar 2020 15:45:24 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1jJHCi-00012N-Fv; Tue, 31 Mar 2020 15:45:20 +0200 Date: Tue, 31 Mar 2020 15:45:20 +0200 From: Oleksij Rempel To: Russell King - ARM Linux admin Cc: Florian Fainelli , Andrew Lunn , netdev@vger.kernel.org, Sascha Hauer , linux-kernel@vger.kernel.org, Fabio Estevam , linux-imx@nxp.com, kernel@pengutronix.de, David Jander , Shawn Guo , linux-arm-kernel@lists.infradead.org, Heiner Kallweit , Philippe Schenker , mkl@pengutronix.de Subject: Re: [PATCH v2] ARM: imx: allow to disable board specific PHY fixups Message-ID: <20200331134520.GA5756@pengutronix.de> References: <20200329110457.4113-1-o.rempel@pengutronix.de> <20200329150854.GA31812@lunn.ch> <20200330052611.2bgu7x4nmimf7pru@pengutronix.de> <40209d08-4acb-75c5-1766-6d39bb826ff9@gmail.com> <20200330174114.GG25745@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200330174114.GG25745@shell.armlinux.org.uk> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 08:16:10 up 201 days, 19:04, 452 users, load average: 1.89, 2.71, 2.76 User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Russell, On Mon, Mar 30, 2020 at 06:41:14PM +0100, Russell King - ARM Linux admin wrote: > On Mon, Mar 30, 2020 at 10:33:03AM -0700, Florian Fainelli wrote: > > > > > > On 3/29/2020 10:26 PM, Oleksij Rempel wrote: > > > Hi Andrew, > > > > > > On Sun, Mar 29, 2020 at 05:08:54PM +0200, Andrew Lunn wrote: > > >> On Sun, Mar 29, 2020 at 01:04:57PM +0200, Oleksij Rempel wrote: > > >> > > >> Hi Oleksij > > >> > > >>> +config DEPRECATED_PHY_FIXUPS > > >>> + bool "Enable deprecated PHY fixups" > > >>> + default y > > >>> + ---help--- > > >>> + In the early days it was common practice to configure PHYs by adding a > > >>> + phy_register_fixup*() in the machine code. This practice turned out to > > >>> + be potentially dangerous, because: > > >>> + - it affects all PHYs in the system > > >>> + - these register changes are usually not preserved during PHY reset > > >>> + or suspend/resume cycle. > > >>> + - it complicates debugging, since these configuration changes were not > > >>> + done by the actual PHY driver. > > >>> + This option allows to disable all fixups which are identified as > > >>> + potentially harmful and give the developers a chance to implement the > > >>> + proper configuration via the device tree (e.g.: phy-mode) and/or the > > >>> + related PHY drivers. > > >> > > >> This appears to be an IMX only problem. Everybody else seems to of got > > >> this right. There is no need to bother everybody with this new > > >> option. Please put this in arch/arm/mach-mxs/Kconfig and have IMX in > > >> the name. > > > > > > Actually, all fixups seems to do wring thing: > > > arch/arm/mach-davinci/board-dm644x-evm.c:915: phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK, > > > > > > Increased MII drive strength. Should be probably enabled by the PHY > > > driver. > > > > > > arch/arm/mach-imx/mach-imx6q.c:167: phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK, > > > arch/arm/mach-imx/mach-imx6q.c:169: phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK, > > > arch/arm/mach-imx/mach-imx6q.c:171: phy_register_fixup_for_uid(PHY_ID_AR8031, 0xffffffef, > > > arch/arm/mach-imx/mach-imx6q.c:173: phy_register_fixup_for_uid(PHY_ID_AR8035, 0xffffffef, > > As far as I'm concerned, the AR8035 fixup is there with good reason. > It's not just "random" but is required to make the AR8035 usable with > the iMX6 SoCs. Not because of a board level thing, but because it's > required for the AR8035 to be usable with an iMX6 SoC. > > So, having it registered by the iMX6 SoC code is entirely logical and > correct. > > That's likely true of the AR8031 situation as well. > > I can't speak for any of the others. OK, let's analyze it step by step: -------------------------------------------------------------------------------- arch/arm/mach-imx/mach-imx6q.c The AR8035 fixup is doing following configurations: - disable SmartEEE with following description: /* Ar803x phy SmartEEE feature cause link status generates glitch, * which cause ethernet link down/up issue, so disable SmartEEE - enable clock output from PHY, configures it to 125Mhz and configures clock skew. See the comment provided in the source code: * Enable 125MHz clock from CLK_25M on the AR8031. This * is fed in to the IMX6 on the ENET_REF_CLK (V22) pad. * Also, introduce a tx clock delay. * * This is the same as is the AR8031 fixup. - powers on the PHY. Probably to make sure the clock output will run before FEC is probed to avoid clock glitches. The AR8031 fixup only enables clock output of PHY, configures it to 125Mhz, and configures clock skew. The PHY not powered and although it supports SmartEEE, it's not disabled. Let's assume the fixup author did the correct configuration and SmartEEE is working without problems. The KSZ9031rn fixup is configuring only the clock skew. Never the less, this PHY is not able to provide a stable 125Mhz clock for the FEC, it's not recommended to use. See: | http://ww1.microchip.com/downloads/en/DeviceDoc/80000692D.pdf | Module 2: Duty cycle variation for optional 125MHz reference output clock The KSZ9021rn fixup is configuring clock skews. Summary: - SmartEEE is a PHY errata or bad configuration. It is present in both PHYs AR8035 and AR8031, and should be disabled via DT in the PHY driver. - Clock skew configuration is board specific and this fixup will apply it even if the PHY is not connected to the FEC. For example boards with additional NIC connected to the PCIe or a switch connected to the FEC. For the clock skew configuration we already have RGMII_ID*, which can be configured by devicetree and/or by ethernet driver directly, if no devicetree can be used. For example by USB Ethernet adapter. All affected PHYs in this fixup series already support clock skew configuration by PHY drivers. See latest versions of at803x.c and micrel.c. It means, configurations relying on these fixups (and not providing correct devicetree with proper phy-mode) will break sooner or later, or already did and are already fixed. - 125Mhz is a bigger issue: - It is board specific. Not all boards use PHYs as a clock source for the FEC. The following function is proof of my claim. It is responsible to configure iMX6Q to use own clock provider: arch/arm/mach-imx/mach-imx6q.c | static void __init imx6q_1588_init(void) | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-fec"); | if (!np) { | pr_warn("%s: failed to find fec node\n", __func__); | return; | } | | ptp_clk = of_clk_get(np, 2); | if (IS_ERR(ptp_clk)) { | pr_warn("%s: failed to get ptp clock\n", __func__); | goto put_node; | } | | enet_ref = clk_get_sys(NULL, "enet_ref"); | if (IS_ERR(enet_ref)) { | pr_warn("%s: failed to get enet clock\n", __func__); | goto put_ptp_clk; | } | | /* | * If enet_ref from ANATOP/CCM is the PTP clock source, we need to | * set bit IOMUXC_GPR1[21]. Or the PTP clock must be from pad | * (external OSC), and we need to clear the bit. | */ | clksel = clk_is_match(ptp_clk, enet_ref) ? | IMX6Q_GPR1_ENET_CLK_SEL_ANATOP : | IMX6Q_GPR1_ENET_CLK_SEL_PAD; | gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); | if (!IS_ERR(gpr)) | regmap_update_bits(gpr, IOMUXC_GPR1, | IMX6Q_GPR1_ENET_CLK_SEL_MASK, | clksel); - The at803x PHY driver already provides following devicetree bindings to to configure it as clock provider: qca,clk-out-frequency qca,keep-pll-enabled It is kind of replacement of the clock framework. - the micrel PHY is configured, in most cases, by bootstrap pins, but does not guarantee a glitch free clock, since the PHY can be suspended no matter if other devices are using the clock provided by this PHY or not. - In current case we have the FEC driver which is using clock framework, properly, requesting clock source and even trying to disable it for power management. But the clock providers are _NOT_ implementing clock framework and do not care about proper glitch free clock initialization and power management. Implementing proper clock support in the PHY drivers will most probably break all boards relying on these fixups. -------------------------------------------------------------------------------- arch/arm/mach-imx/mach-imx6sx.c - this fixup is configuring RGMII signal voltage to 1V8 and clock skews. Both configurations are supported by the at803x driver: vddio-regulator RGMII-ID* - This fixup is missing SmartEEE workaround. -------------------------------------------------------------------------------- arch/arm/mach-imx/mach-imx6ul.c static int ksz8081_phy_fixup(struct phy_device *dev) { if (dev && dev->interface == PHY_INTERFACE_MODE_MII) { phy_write(dev, 0x1f, 0x8110); phy_write(dev, 0x16, 0x201); } else if (dev && dev->interface == PHY_INTERFACE_MODE_RMII) { phy_write(dev, 0x1f, 0x8190); phy_write(dev, 0x16, 0x202); } This fixup gives me headaches: http://ww1.microchip.com/downloads/en/DeviceDoc/KSZ8081RNA_RND.pdf - 0x1f is PHY Control 2 register and it is changing mainly only one BIT(7) against default/reset values. This bit is configuring the clock frequency of XTAL attached to the PHY. Looking into the documentation shows that the meaning of this bit depends on the exact PHY variant (1 means 50MHz on the RNA and 25MHz on the RND variant). This fixup doesn't take this into account. :( - 0x16 is Operation Mode Strap Override this fixup is changing two 3 bits: - BIT(9) If bit is ‘1’, PHY Address 0 is non-broadcast. This bit is overwritten by the micrel driver, see kszphy_config_init() - BIT(1) are overwriting boot strap configuration for RMII mode. - BIT(0) is reserved. Since this PHY support only RMII mode and has not enough pins for MII mode, the benefit of this configuration is questionable. The patch introduced this fixup is trying to fix the imx6ul evk board. According to this devicetree: |arch/arm/boot/dts/imx6ul-14x14-evk.dtsi |&fec1 { | pinctrl-names = "default"; | pinctrl-0 = <&pinctrl_enet1>; | phy-mode = "rmii"; | phy-handle = <ðphy0>; | phy-supply = <®_peri_3v3>; | status = "okay"; |}; | |&fec2 { | pinctrl-names = "default"; | pinctrl-0 = <&pinctrl_enet2>; | phy-mode = "rmii"; | phy-handle = <ðphy1>; | phy-supply = <®_peri_3v3>; | status = "okay"; | | mdio { | #address-cells = <1>; | #size-cells = <0>; | | ethphy0: ethernet-phy@2 { | reg = <2>; | micrel,led-mode = <1>; | clocks = <&clks IMX6UL_CLK_ENET_REF>; | clock-names = "rmii-ref"; | }; | | ethphy1: ethernet-phy@1 { | reg = <1>; | micrel,led-mode = <1>; | clocks = <&clks IMX6UL_CLK_ENET2_REF>; | clock-names = "rmii-ref"; | }; | }; |}; This PHYs have proper clock configuration and can be used only in RGMII mode. So, this fixup should be removed any way. -------------------------------------------------------------------------------- arch/arm/mach-imx/mach-imx7d.c Both fixups added by following commit: |commit 69f9c5047d04945693ecc1bdfdb8a3dc2a1f48cf |Author: Fugang Duan |Date: Mon Sep 7 10:55:00 2015 +0800 | | ARM: imx: add enet init for i.MX7D platform | | Add enet phy fixup, clock source init for i.MX7D platform. | | Signed-off-by: Fugang Duan | Signed-off-by: Shawn Guo - the ar8031 fixup is configuring RGMII signal voltage to 1V8 and clock skews. Both configurations are supported by the at803x driver: vddio-regulator RGMII-ID* - this time SmartEEE workaround is included - the bcm54220 fixup is configuring clock skews. No driver is available for the bcm54220 PHY. This values are probably not overwritten by any other driver. -------------------------------------------------------------------------------- arch/arm/mach-mxs/mach-mxs.c This fixup was added by following commit: |commit 3143bbb42b3d27a5f799c97c84fb7a4a1de88f91 |Author: Shawn Guo |Date: Sat Jul 7 23:12:03 2012 +0800 | | ARM: mxs: convert apx4devkit board to device tree | | Tested-by: Lauri Hintsala | Signed-off-by: Shawn Guo This is the first fixup and this series which is not modifying the PHY registers directly, but set the legacy board file specific flags for the phy. The board specific XTAL frequency is reported to the PHY by setting MICREL_PHY_50MHZ_CLK flag and used by micrel driver. -------------------------------------------------------------------------------- arch/arm/mach-orion5x/dns323-setup.c This fixup was added by following commit: |commit 6e2daa49420777190c133d7097dd8d5c05b475ac |Author: Benjamin Herrenschmidt |Date: Mon Jun 21 13:21:53 2010 +1000 | | [ARM] orion5x: Base support for DNS-323 rev C1 | | This patch adds the base support for this new HW revision to the existing | dns323-setup.c file. The SoC seems to be the same as rev B1, the GPIOs | are all wired differently though and the fan control isn't i2c based | anymore. | | Signed-off-by: Benjamin Herrenschmidt | Signed-off-by: Nicolas Pitre This is related to a single board and do not modifies PHY registers. The LED configuration is requested per MARVELL_PHY_M1118_DNS323_LEDS flag by the marvell PHY driver. -------------------------------------------------------------------------------- arch/powerpc/platforms/85xx/mpc85xx_mds.c This fixup was added by following commit: |commit 94833a42765509a7aa95ed1ba7b227ead3c29c08 |Author: Andy Fleming |Date: Fri May 2 18:56:41 2008 -0500 | | [POWERPC] 85xx: Add 8568 PHY workarounds to board code | | The 8568 MDS needs some configuration changes to the PHY in order to | work properly. These are done in the firmware, normally, but Linux | shouldn't need to rely on the firmware running such things (someone | could disable the PHY support in the firmware to save space, for instance). | | Signed-off-by: Andy Fleming | Signed-off-by: Kumar Gala This fixup is hard to analyze. I was not able to find a documentation or related driver for the Marvell 88E1111 PHY. It seems to enable 125Mhz clock as previous fixups did. -------------------------------------------------------------------------------- drivers/net/ethernet/dnet.c This fixup was added by following commit: |commit 4796417417a62e2ae83d92cb92e1ecf9ec67b5f5 |Author: Ilya Yanok |Date: Wed Mar 11 23:26:02 2009 -0700 | | dnet: Dave DNET ethernet controller driver (updated) | | Driver for Dave DNET ethernet controller found on Dave/DENX QongEVB-LITE | FPGA. Heavily based on Dave sources, I've just adopted it to current | kernel version and done some code cleanup. | | Signed-off-by: Ilya Yanok | Signed-off-by: David S. Miller Same PHY as in previous case (Marvell 88E1111). The comment statement is: /* For Neptune board: LINK1000 as Link LED and TX as activity LED */ -------------------------------------------------------------------------------- drivers/net/usb/lan78xx.c This driver provides two fixups, added by following commit: |commit 02dc1f3d613d5a859513d7416c9aca370425a7e0 |Author: Woojung Huh |Date: Wed Dec 7 20:26:25 2016 +0000 | | lan78xx: add LAN7801 MAC only support | | Add LAN7801 MAC only support with phy fixup functions. | | Signed-off-by: Woojung Huh | Signed-off-by: David S. Miller These fixups are related to KSZ9031rnx and LAN8835 PHYs, are configuring clock skews. Please note: The KSZ9031 fixup is used on imx6q boards. What will happen if we attach this adapter to a imx6q based system? Or what will happen with all this usb ethernet adapters with atheros or micrel PHYs attached to imx6 based system? Regards, Oleksij & Marc -- Pengutronix e.K. Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | 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=-5.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 D038BC43331 for ; Tue, 31 Mar 2020 16:29:36 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 9DC6B20784 for ; Tue, 31 Mar 2020 16:29:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IgeOI3UN"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="Em8qM7BW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9DC6B20784 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject: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=X5qNLlMZ/aMqcU+Ubr8zMEhwmmqlYrkt7quUG4oK/vk=; b=IgeOI3UNPmdLej cUviVM2xnUWJTA/NkMaY2UgB/h+VGiK8LkM+Bid6NhqiBPgwSW+RAAKnh6O6ns9tzcbxfqNqAK/+c f1MqQSWCcWyNKY3OIxo3OoaSxuyd5A1QQ7rkNBUzETWi1N0LC64Wtjt5bhYBtiUR7M1DlwgNQQJGD Aax26F7dXqRPGSbCUkEmywNdCRtOPro3nGuSYMS0p5IPYbGdmnZzJfDIGfFhgMOuVrWrM9ef77roE 987BpepnKpOd8pVSxvqK9yxicIA/eB581CMsxSPnJRFynV4T6QF27tKikVDgtZARzY03Jy5N8xJKs Reoxd+zyo6iKa3xHqyvQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jJJlc-0001A2-MR; Tue, 31 Mar 2020 16:29:32 +0000 Received: from merlin.infradead.org ([205.233.59.134]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jJJlJ-0000qe-Ln for linux-arm-kernel@bombadil.infradead.org; Tue, 31 Mar 2020 16:29:13 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=In-Reply-To:Content-Transfer-Encoding: Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date: Sender:Reply-To:Content-ID:Content-Description; bh=SqD07tMHKMvMc+LEBdp1QMuCGODqvY57a83wAafLekw=; b=Em8qM7BWeeRP8uNtXmFKnuIQHl 2568kbBFsx+BFET0CS0FvkSaKtZYVXQ+1l4KixN52IyV0xmwsiapWw5tLrBDJAZRs6vBuIFJj3Nf4 0WmA4P6eeAHgDutKmNMzmi6HUYISzjaYJJBQap75LGvD0NDneDUYUaCSF9jCVyxAfZ8uH3chtHW5D fgjpKShsvj0zQWr0s7jw1JzKywwMDK3sIlpIrBisG1X9xfAjzqXJ1LHdiUqqSf7sPI/vNG5xv6/UD dp3ies1y+1fhZkDuD0ZBJA430ssFFRUELDP45tkT9FsHsp4v2XQdS3/zocg6nEVZP9x3j2YCgywbv JJLpPKLA==; Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jJHD3-0002Y9-AZ for linux-arm-kernel@lists.infradead.org; Tue, 31 Mar 2020 13:45:42 +0000 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jJHCm-0004G3-Vy; Tue, 31 Mar 2020 15:45:24 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1jJHCi-00012N-Fv; Tue, 31 Mar 2020 15:45:20 +0200 Date: Tue, 31 Mar 2020 15:45:20 +0200 From: Oleksij Rempel To: Russell King - ARM Linux admin Subject: Re: [PATCH v2] ARM: imx: allow to disable board specific PHY fixups Message-ID: <20200331134520.GA5756@pengutronix.de> References: <20200329110457.4113-1-o.rempel@pengutronix.de> <20200329150854.GA31812@lunn.ch> <20200330052611.2bgu7x4nmimf7pru@pengutronix.de> <40209d08-4acb-75c5-1766-6d39bb826ff9@gmail.com> <20200330174114.GG25745@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200330174114.GG25745@shell.armlinux.org.uk> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 08:16:10 up 201 days, 19:04, 452 users, load average: 1.89, 2.71, 2.76 User-Agent: Mutt/1.10.1 (2018-07-13) X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrew Lunn , Florian Fainelli , netdev@vger.kernel.org, Sascha Hauer , linux-kernel@vger.kernel.org, Philippe Schenker , mkl@pengutronix.de, linux-imx@nxp.com, kernel@pengutronix.de, David Jander , Shawn Guo , Fabio Estevam , linux-arm-kernel@lists.infradead.org, Heiner Kallweit Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgUnVzc2VsbCwKCk9uIE1vbiwgTWFyIDMwLCAyMDIwIGF0IDA2OjQxOjE0UE0gKzAxMDAsIFJ1 c3NlbGwgS2luZyAtIEFSTSBMaW51eCBhZG1pbiB3cm90ZToKPiBPbiBNb24sIE1hciAzMCwgMjAy MCBhdCAxMDozMzowM0FNIC0wNzAwLCBGbG9yaWFuIEZhaW5lbGxpIHdyb3RlOgo+ID4gCj4gPiAK PiA+IE9uIDMvMjkvMjAyMCAxMDoyNiBQTSwgT2xla3NpaiBSZW1wZWwgd3JvdGU6Cj4gPiA+IEhp IEFuZHJldywKPiA+ID4gCj4gPiA+IE9uIFN1biwgTWFyIDI5LCAyMDIwIGF0IDA1OjA4OjU0UE0g KzAyMDAsIEFuZHJldyBMdW5uIHdyb3RlOgo+ID4gPj4gT24gU3VuLCBNYXIgMjksIDIwMjAgYXQg MDE6MDQ6NTdQTSArMDIwMCwgT2xla3NpaiBSZW1wZWwgd3JvdGU6Cj4gPiA+Pgo+ID4gPj4gSGkg T2xla3Npago+ID4gPj4KPiA+ID4+PiArY29uZmlnIERFUFJFQ0FURURfUEhZX0ZJWFVQUwo+ID4g Pj4+ICsJYm9vbCAiRW5hYmxlIGRlcHJlY2F0ZWQgUEhZIGZpeHVwcyIKPiA+ID4+PiArCWRlZmF1 bHQgeQo+ID4gPj4+ICsJLS0taGVscC0tLQo+ID4gPj4+ICsJICBJbiB0aGUgZWFybHkgZGF5cyBp dCB3YXMgY29tbW9uIHByYWN0aWNlIHRvIGNvbmZpZ3VyZSBQSFlzIGJ5IGFkZGluZyBhCj4gPiA+ Pj4gKwkgIHBoeV9yZWdpc3Rlcl9maXh1cCooKSBpbiB0aGUgbWFjaGluZSBjb2RlLiBUaGlzIHBy YWN0aWNlIHR1cm5lZCBvdXQgdG8KPiA+ID4+PiArCSAgYmUgcG90ZW50aWFsbHkgZGFuZ2Vyb3Vz LCBiZWNhdXNlOgo+ID4gPj4+ICsJICAtIGl0IGFmZmVjdHMgYWxsIFBIWXMgaW4gdGhlIHN5c3Rl bQo+ID4gPj4+ICsJICAtIHRoZXNlIHJlZ2lzdGVyIGNoYW5nZXMgYXJlIHVzdWFsbHkgbm90IHBy ZXNlcnZlZCBkdXJpbmcgUEhZIHJlc2V0Cj4gPiA+Pj4gKwkgICAgb3Igc3VzcGVuZC9yZXN1bWUg Y3ljbGUuCj4gPiA+Pj4gKwkgIC0gaXQgY29tcGxpY2F0ZXMgZGVidWdnaW5nLCBzaW5jZSB0aGVz ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBub3QKPiA+ID4+PiArCSAgICBkb25lIGJ5IHRo ZSBhY3R1YWwgUEhZIGRyaXZlci4KPiA+ID4+PiArCSAgVGhpcyBvcHRpb24gYWxsb3dzIHRvIGRp c2FibGUgYWxsIGZpeHVwcyB3aGljaCBhcmUgaWRlbnRpZmllZCBhcwo+ID4gPj4+ICsJICBwb3Rl bnRpYWxseSBoYXJtZnVsIGFuZCBnaXZlIHRoZSBkZXZlbG9wZXJzIGEgY2hhbmNlIHRvIGltcGxl bWVudCB0aGUKPiA+ID4+PiArCSAgcHJvcGVyIGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBkZXZpY2Ug dHJlZSAoZS5nLjogcGh5LW1vZGUpIGFuZC9vciB0aGUKPiA+ID4+PiArCSAgcmVsYXRlZCBQSFkg ZHJpdmVycy4KPiA+ID4+Cj4gPiA+PiBUaGlzIGFwcGVhcnMgdG8gYmUgYW4gSU1YIG9ubHkgcHJv YmxlbS4gRXZlcnlib2R5IGVsc2Ugc2VlbXMgdG8gb2YgZ290Cj4gPiA+PiB0aGlzIHJpZ2h0LiBU aGVyZSBpcyBubyBuZWVkIHRvIGJvdGhlciBldmVyeWJvZHkgd2l0aCB0aGlzIG5ldwo+ID4gPj4g b3B0aW9uLiBQbGVhc2UgcHV0IHRoaXMgaW4gYXJjaC9hcm0vbWFjaC1teHMvS2NvbmZpZyBhbmQg aGF2ZSBJTVggaW4KPiA+ID4+IHRoZSBuYW1lLgo+ID4gPiAKPiA+ID4gQWN0dWFsbHksIGFsbCBm aXh1cHMgc2VlbXMgdG8gZG8gd3JpbmcgdGhpbmc6Cj4gPiA+IGFyY2gvYXJtL21hY2gtZGF2aW5j aS9ib2FyZC1kbTY0NHgtZXZtLmM6OTE1OgkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoTFhU OTcxX1BIWV9JRCwgTFhUOTcxX1BIWV9NQVNLLAo+ID4gPiAKPiA+ID4gSW5jcmVhc2VkIE1JSSBk cml2ZSBzdHJlbmd0aC4gU2hvdWxkIGJlIHByb2JhYmx5IGVuYWJsZWQgYnkgdGhlIFBIWQo+ID4g PiBkcml2ZXIuCj4gPiA+IAo+ID4gPiBhcmNoL2FybS9tYWNoLWlteC9tYWNoLWlteDZxLmM6MTY3 OgkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoUEhZX0lEX0tTWjkwMjEsIE1JQ1JFTF9QSFlf SURfTUFTSywKPiA+ID4gYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jOjE2OToJCXBoeV9y ZWdpc3Rlcl9maXh1cF9mb3JfdWlkKFBIWV9JRF9LU1o5MDMxLCBNSUNSRUxfUEhZX0lEX01BU0ss Cj4gPiA+IGFyY2gvYXJtL21hY2gtaW14L21hY2gtaW14NnEuYzoxNzE6CQlwaHlfcmVnaXN0ZXJf Zml4dXBfZm9yX3VpZChQSFlfSURfQVI4MDMxLCAweGZmZmZmZmVmLAo+ID4gPiBhcmNoL2FybS9t YWNoLWlteC9tYWNoLWlteDZxLmM6MTczOgkJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl91aWQoUEhZ X0lEX0FSODAzNSwgMHhmZmZmZmZlZiwKPiAKPiBBcyBmYXIgYXMgSSdtIGNvbmNlcm5lZCwgdGhl IEFSODAzNSBmaXh1cCBpcyB0aGVyZSB3aXRoIGdvb2QgcmVhc29uLgo+IEl0J3Mgbm90IGp1c3Qg InJhbmRvbSIgYnV0IGlzIHJlcXVpcmVkIHRvIG1ha2UgdGhlIEFSODAzNSB1c2FibGUgd2l0aAo+ IHRoZSBpTVg2IFNvQ3MuICBOb3QgYmVjYXVzZSBvZiBhIGJvYXJkIGxldmVsIHRoaW5nLCBidXQg YmVjYXVzZSBpdCdzCj4gcmVxdWlyZWQgZm9yIHRoZSBBUjgwMzUgdG8gYmUgdXNhYmxlIHdpdGgg YW4gaU1YNiBTb0MuCj4gCj4gU28sIGhhdmluZyBpdCByZWdpc3RlcmVkIGJ5IHRoZSBpTVg2IFNv QyBjb2RlIGlzIGVudGlyZWx5IGxvZ2ljYWwgYW5kCj4gY29ycmVjdC4KPiAKPiBUaGF0J3MgbGlr ZWx5IHRydWUgb2YgdGhlIEFSODAzMSBzaXR1YXRpb24gYXMgd2VsbC4KPiAKPiBJIGNhbid0IHNw ZWFrIGZvciBhbnkgb2YgdGhlIG90aGVycy4KCk9LLCBsZXQncyBhbmFseXplIGl0IHN0ZXAgYnkg c3RlcDoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2 cS5jCgpUaGUgQVI4MDM1IGZpeHVwIGlzIGRvaW5nIGZvbGxvd2luZyBjb25maWd1cmF0aW9uczoK LSBkaXNhYmxlIFNtYXJ0RUVFIHdpdGggZm9sbG93aW5nIGRlc2NyaXB0aW9uOgogIC8qIEFyODAz eCBwaHkgU21hcnRFRUUgZmVhdHVyZSBjYXVzZSBsaW5rIHN0YXR1cyBnZW5lcmF0ZXMgZ2xpdGNo LAogICAqIHdoaWNoIGNhdXNlIGV0aGVybmV0IGxpbmsgZG93bi91cCBpc3N1ZSwgc28gZGlzYWJs ZSBTbWFydEVFRQoKLSBlbmFibGUgY2xvY2sgb3V0cHV0IGZyb20gUEhZLCBjb25maWd1cmVzIGl0 IHRvIDEyNU1oeiBhbmQgY29uZmlndXJlcwogIGNsb2NrIHNrZXcuIFNlZSB0aGUgY29tbWVudCBw cm92aWRlZCBpbiB0aGUgc291cmNlIGNvZGU6CiAgKiBFbmFibGUgMTI1TUh6IGNsb2NrIGZyb20g Q0xLXzI1TSBvbiB0aGUgQVI4MDMxLiAgVGhpcwogICogaXMgZmVkIGluIHRvIHRoZSBJTVg2IG9u IHRoZSBFTkVUX1JFRl9DTEsgKFYyMikgcGFkLgogICogQWxzbywgaW50cm9kdWNlIGEgdHggY2xv Y2sgZGVsYXkuCiAgKgogICogVGhpcyBpcyB0aGUgc2FtZSBhcyBpcyB0aGUgQVI4MDMxIGZpeHVw LgoKLSBwb3dlcnMgb24gdGhlIFBIWS4gUHJvYmFibHkgdG8gbWFrZSBzdXJlIHRoZSBjbG9jayBv dXRwdXQgd2lsbCBydW4KICBiZWZvcmUgRkVDIGlzIHByb2JlZCB0byBhdm9pZCBjbG9jayBnbGl0 Y2hlcy4KClRoZSBBUjgwMzEgZml4dXAgb25seSBlbmFibGVzIGNsb2NrIG91dHB1dCBvZiBQSFks IGNvbmZpZ3VyZXMgaXQgdG8KMTI1TWh6LCBhbmQgY29uZmlndXJlcyBjbG9jayBza2V3LiBUaGUg UEhZIG5vdCBwb3dlcmVkIGFuZCBhbHRob3VnaCBpdApzdXBwb3J0cyBTbWFydEVFRSwgaXQncyBu b3QgZGlzYWJsZWQuIExldCdzIGFzc3VtZSB0aGUgZml4dXAgYXV0aG9yIGRpZAp0aGUgY29ycmVj dCBjb25maWd1cmF0aW9uIGFuZCBTbWFydEVFRSBpcyB3b3JraW5nIHdpdGhvdXQgcHJvYmxlbXMu CgpUaGUgS1NaOTAzMXJuIGZpeHVwIGlzIGNvbmZpZ3VyaW5nIG9ubHkgdGhlIGNsb2NrIHNrZXcu IE5ldmVyIHRoZSBsZXNzLAp0aGlzIFBIWSBpcyBub3QgYWJsZSB0byBwcm92aWRlIGEgc3RhYmxl IDEyNU1oeiBjbG9jayBmb3IgdGhlIEZFQywgaXQncyBub3QKcmVjb21tZW5kZWQgdG8gdXNlLiBT ZWU6CnwgaHR0cDovL3d3MS5taWNyb2NoaXAuY29tL2Rvd25sb2Fkcy9lbi9EZXZpY2VEb2MvODAw MDA2OTJELnBkZgp8IE1vZHVsZSAyOiBEdXR5IGN5Y2xlIHZhcmlhdGlvbiBmb3Igb3B0aW9uYWwg MTI1TUh6IHJlZmVyZW5jZSBvdXRwdXQgY2xvY2sKClRoZSBLU1o5MDIxcm4gZml4dXAgaXMgY29u ZmlndXJpbmcgY2xvY2sgc2tld3MuCgpTdW1tYXJ5OgotIFNtYXJ0RUVFIGlzIGEgUEhZIGVycmF0 YSBvciBiYWQgY29uZmlndXJhdGlvbi4gSXQgaXMgcHJlc2VudCBpbiBib3RoCiAgUEhZcyBBUjgw MzUgYW5kIEFSODAzMSwgYW5kIHNob3VsZCBiZSBkaXNhYmxlZCB2aWEgRFQgaW4gdGhlIFBIWSBk cml2ZXIuCgotIENsb2NrIHNrZXcgY29uZmlndXJhdGlvbiBpcyBib2FyZCBzcGVjaWZpYyBhbmQg dGhpcyBmaXh1cCB3aWxsIGFwcGx5CiAgaXQgZXZlbiBpZiB0aGUgUEhZIGlzIG5vdCBjb25uZWN0 ZWQgdG8gdGhlIEZFQy4gRm9yIGV4YW1wbGUgYm9hcmRzCiAgd2l0aCBhZGRpdGlvbmFsIE5JQyBj b25uZWN0ZWQgdG8gdGhlIFBDSWUgb3IgYSBzd2l0Y2ggY29ubmVjdGVkIHRvIHRoZQogIEZFQy4K ICBGb3IgdGhlIGNsb2NrIHNrZXcgY29uZmlndXJhdGlvbiB3ZSBhbHJlYWR5IGhhdmUgUkdNSUlf SUQqLCB3aGljaAogIGNhbiBiZSBjb25maWd1cmVkIGJ5IGRldmljZXRyZWUgYW5kL29yIGJ5IGV0 aGVybmV0IGRyaXZlciBkaXJlY3RseSwKICBpZiBubyBkZXZpY2V0cmVlIGNhbiBiZSB1c2VkLiBG b3IgZXhhbXBsZSBieSBVU0IgRXRoZXJuZXQgYWRhcHRlci4KICBBbGwgYWZmZWN0ZWQgUEhZcyBp biB0aGlzIGZpeHVwIHNlcmllcyBhbHJlYWR5IHN1cHBvcnQgY2xvY2sgc2tldwogIGNvbmZpZ3Vy YXRpb24gYnkgUEhZIGRyaXZlcnMuIFNlZSBsYXRlc3QgdmVyc2lvbnMgb2YgYXQ4MDN4LmMgYW5k CiAgbWljcmVsLmMuIEl0IG1lYW5zLCBjb25maWd1cmF0aW9ucyByZWx5aW5nIG9uIHRoZXNlIGZp eHVwcyAoYW5kIG5vdAogIHByb3ZpZGluZyBjb3JyZWN0IGRldmljZXRyZWUgd2l0aCBwcm9wZXIg cGh5LW1vZGUpIHdpbGwgYnJlYWsgc29vbmVyIG9yCiAgbGF0ZXIsIG9yIGFscmVhZHkgZGlkIGFu ZCBhcmUgYWxyZWFkeSBmaXhlZC4KCi0gMTI1TWh6IGlzIGEgYmlnZ2VyIGlzc3VlOgogIC0gSXQg aXMgYm9hcmQgc3BlY2lmaWMuIE5vdCBhbGwgYm9hcmRzIHVzZSBQSFlzIGFzIGEgY2xvY2sgc291 cmNlIGZvciB0aGUKICAgIEZFQy4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBwcm9vZiBvZiBt eSBjbGFpbS4gSXQgaXMgcmVzcG9uc2libGUgdG8KICAgIGNvbmZpZ3VyZSBpTVg2USB0byB1c2Ug b3duIGNsb2NrIHByb3ZpZGVyOgogICAgYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2cS5jCnwg ICAgc3RhdGljIHZvaWQgX19pbml0IGlteDZxXzE1ODhfaW5pdCh2b2lkKQp8CW5wID0gb2ZfZmlu ZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxpbXg2cS1mZWMiKTsKfAlpZiAoIW5w KSB7CnwJCXByX3dhcm4oIiVzOiBmYWlsZWQgdG8gZmluZCBmZWMgbm9kZVxuIiwgX19mdW5jX18p Owp8CQlyZXR1cm47CnwJfQp8CnwJcHRwX2NsayA9IG9mX2Nsa19nZXQobnAsIDIpOwp8CWlmIChJ U19FUlIocHRwX2NsaykpIHsKfAkJcHJfd2FybigiJXM6IGZhaWxlZCB0byBnZXQgcHRwIGNsb2Nr XG4iLCBfX2Z1bmNfXyk7CnwJCWdvdG8gcHV0X25vZGU7CnwJfQp8CnwJZW5ldF9yZWYgPSBjbGtf Z2V0X3N5cyhOVUxMLCAiZW5ldF9yZWYiKTsKfAlpZiAoSVNfRVJSKGVuZXRfcmVmKSkgewp8CQlw cl93YXJuKCIlczogZmFpbGVkIHRvIGdldCBlbmV0IGNsb2NrXG4iLCBfX2Z1bmNfXyk7CnwJCWdv dG8gcHV0X3B0cF9jbGs7CnwJfQp8CnwJLyoKfAkgKiBJZiBlbmV0X3JlZiBmcm9tIEFOQVRPUC9D Q00gaXMgdGhlIFBUUCBjbG9jayBzb3VyY2UsIHdlIG5lZWQgdG8KfAkgKiBzZXQgYml0IElPTVVY Q19HUFIxWzIxXS4gIE9yIHRoZSBQVFAgY2xvY2sgbXVzdCBiZSBmcm9tIHBhZAp8CSAqIChleHRl cm5hbCBPU0MpLCBhbmQgd2UgbmVlZCB0byBjbGVhciB0aGUgYml0Lgp8CSAqLwp8CWNsa3NlbCA9 IGNsa19pc19tYXRjaChwdHBfY2xrLCBlbmV0X3JlZikgPwp8CQkJCUlNWDZRX0dQUjFfRU5FVF9D TEtfU0VMX0FOQVRPUCA6CnwJCQkJSU1YNlFfR1BSMV9FTkVUX0NMS19TRUxfUEFEOwp8CWdwciA9 IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X2NvbXBhdGlibGUoImZzbCxpbXg2cS1pb211eGMtZ3By Iik7CnwJaWYgKCFJU19FUlIoZ3ByKSkKfAkJcmVnbWFwX3VwZGF0ZV9iaXRzKGdwciwgSU9NVVhD X0dQUjEsCnwJCQkJSU1YNlFfR1BSMV9FTkVUX0NMS19TRUxfTUFTSywKfAkJCQljbGtzZWwpOwoK ICAtIFRoZSBhdDgwM3ggUEhZIGRyaXZlciBhbHJlYWR5IHByb3ZpZGVzIGZvbGxvd2luZyBkZXZp Y2V0cmVlIGJpbmRpbmdzIHRvCiAgICB0byBjb25maWd1cmUgaXQgYXMgY2xvY2sgcHJvdmlkZXI6 CiAgICBxY2EsY2xrLW91dC1mcmVxdWVuY3kKICAgIHFjYSxrZWVwLXBsbC1lbmFibGVkCiAgICBJ dCBpcyBraW5kIG9mIHJlcGxhY2VtZW50IG9mIHRoZSBjbG9jayBmcmFtZXdvcmsuCiAgLSB0aGUg bWljcmVsIFBIWSBpcyBjb25maWd1cmVkLCBpbiBtb3N0IGNhc2VzLCBieSBib290c3RyYXAgcGlu cywgYnV0IGRvZXMKICAgIG5vdCBndWFyYW50ZWUgYSBnbGl0Y2ggZnJlZSBjbG9jaywgc2luY2Ug dGhlIFBIWSBjYW4gYmUgc3VzcGVuZGVkIG5vCiAgICBtYXR0ZXIgaWYgb3RoZXIgZGV2aWNlcyBh cmUgdXNpbmcgdGhlIGNsb2NrIHByb3ZpZGVkIGJ5IHRoaXMgUEhZIG9yCiAgICBub3QuCiAgLSBJ biBjdXJyZW50IGNhc2Ugd2UgaGF2ZSB0aGUgRkVDIGRyaXZlciB3aGljaCBpcyB1c2luZyBjbG9j ayBmcmFtZXdvcmssCiAgICBwcm9wZXJseSwgcmVxdWVzdGluZyBjbG9jayBzb3VyY2UgYW5kIGV2 ZW4gdHJ5aW5nIHRvIGRpc2FibGUgaXQgZm9yCiAgICBwb3dlciBtYW5hZ2VtZW50LiBCdXQgdGhl IGNsb2NrIHByb3ZpZGVycyBhcmUgX05PVF8gaW1wbGVtZW50aW5nIGNsb2NrCiAgICBmcmFtZXdv cmsgYW5kIGRvIG5vdCBjYXJlIGFib3V0IHByb3BlciBnbGl0Y2ggZnJlZSBjbG9jayBpbml0aWFs aXphdGlvbgogICAgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIEltcGxlbWVudGluZyBwcm9wZXIgY2xv Y2sgc3VwcG9ydCBpbiB0aGUgUEhZIGRyaXZlcnMKICAgIHdpbGwgbW9zdCBwcm9iYWJseSBicmVh ayBhbGwgYm9hcmRzIHJlbHlpbmcgb24gdGhlc2UgZml4dXBzLgoKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1pbXg2c3guYwotIHRoaXMgZml4dXAgaXMgY29u ZmlndXJpbmcgUkdNSUkgc2lnbmFsIHZvbHRhZ2UgdG8gMVY4IGFuZCBjbG9jayBza2V3cy4KICBC b3RoIGNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGF0ODAzeCBkcml2ZXI6CiAg dmRkaW8tcmVndWxhdG9yCiAgUkdNSUktSUQqCgotIFRoaXMgZml4dXAgaXMgbWlzc2luZyBTbWFy dEVFRSB3b3JrYXJvdW5kLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYXJjaC9hcm0vbWFjaC1p bXgvbWFjaC1pbXg2dWwuYwpzdGF0aWMgaW50IGtzejgwODFfcGh5X2ZpeHVwKHN0cnVjdCBwaHlf ZGV2aWNlICpkZXYpCnsKCWlmIChkZXYgJiYgZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFD RV9NT0RFX01JSSkgewoJCXBoeV93cml0ZShkZXYsIDB4MWYsIDB4ODExMCk7CgkJcGh5X3dyaXRl KGRldiwgMHgxNiwgMHgyMDEpOwoJfSBlbHNlIGlmIChkZXYgJiYgZGV2LT5pbnRlcmZhY2UgPT0g UEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpIHsKCQlwaHlfd3JpdGUoZGV2LCAweDFmLCAweDgxOTAp OwoJCXBoeV93cml0ZShkZXYsIDB4MTYsIDB4MjAyKTsKCX0KClRoaXMgZml4dXAgZ2l2ZXMgbWUg aGVhZGFjaGVzOgpodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURv Yy9LU1o4MDgxUk5BX1JORC5wZGYKCi0gMHgxZiBpcyBQSFkgQ29udHJvbCAyIHJlZ2lzdGVyIGFu ZCBpdCBpcyBjaGFuZ2luZyBtYWlubHkgb25seSBvbmUKICBCSVQoNykgYWdhaW5zdCBkZWZhdWx0 L3Jlc2V0IHZhbHVlcy4gVGhpcyBiaXQgaXMgY29uZmlndXJpbmcgdGhlCiAgY2xvY2sgZnJlcXVl bmN5IG9mIFhUQUwgYXR0YWNoZWQgdG8gdGhlIFBIWS4KICBMb29raW5nIGludG8gdGhlIGRvY3Vt ZW50YXRpb24gc2hvd3MgdGhhdCB0aGUgbWVhbmluZyBvZiB0aGlzIGJpdAogIGRlcGVuZHMgb24g dGhlIGV4YWN0IFBIWSB2YXJpYW50ICgxIG1lYW5zIDUwTUh6IG9uIHRoZSBSTkEgYW5kIDI1TUh6 CiAgb24gdGhlIFJORCB2YXJpYW50KS4gVGhpcyBmaXh1cCBkb2Vzbid0IHRha2UgdGhpcyBpbnRv IGFjY291bnQuIDooCgotIDB4MTYgaXMgT3BlcmF0aW9uIE1vZGUgU3RyYXAgT3ZlcnJpZGUKICB0 aGlzIGZpeHVwIGlzIGNoYW5naW5nIHR3byAzIGJpdHM6CiAgLSBCSVQoOSkgSWYgYml0IGlzIOKA mDHigJksIFBIWSBBZGRyZXNzIDAgaXMgbm9uLWJyb2FkY2FzdC4KICAgIFRoaXMgYml0IGlzIG92 ZXJ3cml0dGVuIGJ5IHRoZSBtaWNyZWwgZHJpdmVyLCBzZWUKICAgIGtzenBoeV9jb25maWdfaW5p dCgpCiAtIEJJVCgxKSBhcmUgb3ZlcndyaXRpbmcgYm9vdCBzdHJhcCBjb25maWd1cmF0aW9uIGZv ciBSTUlJIG1vZGUuCiAtIEJJVCgwKSBpcyByZXNlcnZlZC4gU2luY2UgdGhpcyBQSFkgc3VwcG9y dCBvbmx5IFJNSUkgbW9kZSBhbmQgaGFzIG5vdAogICBlbm91Z2ggcGlucyBmb3IgTUlJIG1vZGUs IHRoZSBiZW5lZml0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBpcwogICBxdWVzdGlvbmFibGUuCgpU aGUgcGF0Y2ggaW50cm9kdWNlZCB0aGlzIGZpeHVwIGlzIHRyeWluZyB0byBmaXggdGhlIGlteDZ1 bCBldmsgYm9hcmQuCkFjY29yZGluZyB0byB0aGlzIGRldmljZXRyZWU6Cgp8YXJjaC9hcm0vYm9v dC9kdHMvaW14NnVsLTE0eDE0LWV2ay5kdHNpCnwmZmVjMSB7CnwJcGluY3RybC1uYW1lcyA9ICJk ZWZhdWx0IjsKfAlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfZW5ldDE+Owp8CXBoeS1tb2RlID0gInJt aWkiOwp8CXBoeS1oYW5kbGUgPSA8JmV0aHBoeTA+Owp8CXBoeS1zdXBwbHkgPSA8JnJlZ19wZXJp XzN2Mz47CnwJc3RhdHVzID0gIm9rYXkiOwp8fTsKfAp8JmZlYzIgewp8CXBpbmN0cmwtbmFtZXMg PSAiZGVmYXVsdCI7CnwJcGluY3RybC0wID0gPCZwaW5jdHJsX2VuZXQyPjsKfAlwaHktbW9kZSA9 ICJybWlpIjsKfAlwaHktaGFuZGxlID0gPCZldGhwaHkxPjsKfAlwaHktc3VwcGx5ID0gPCZyZWdf cGVyaV8zdjM+Owp8CXN0YXR1cyA9ICJva2F5IjsKfAp8CW1kaW8gewp8CQkjYWRkcmVzcy1jZWxs cyA9IDwxPjsKfAkJI3NpemUtY2VsbHMgPSA8MD47CnwKfAkJZXRocGh5MDogZXRoZXJuZXQtcGh5 QDIgewp8CQkJcmVnID0gPDI+Owp8CQkJbWljcmVsLGxlZC1tb2RlID0gPDE+Owp8CQkJY2xvY2tz ID0gPCZjbGtzIElNWDZVTF9DTEtfRU5FVF9SRUY+Owp8CQkJY2xvY2stbmFtZXMgPSAicm1paS1y ZWYiOwp8CQl9Owp8CnwJCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAxIHsKfAkJCXJlZyA9IDwxPjsK fAkJCW1pY3JlbCxsZWQtbW9kZSA9IDwxPjsKfAkJCWNsb2NrcyA9IDwmY2xrcyBJTVg2VUxfQ0xL X0VORVQyX1JFRj47CnwJCQljbG9jay1uYW1lcyA9ICJybWlpLXJlZiI7CnwJCX07CnwJfTsKfH07 CgpUaGlzIFBIWXMgaGF2ZSBwcm9wZXIgY2xvY2sgY29uZmlndXJhdGlvbiBhbmQgY2FuIGJlIHVz ZWQgb25seSBpbiBSR01JSQptb2RlLiBTbywgdGhpcyBmaXh1cCBzaG91bGQgYmUgcmVtb3ZlZCBh bnkgd2F5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1p bXg3ZC5jCkJvdGggZml4dXBzIGFkZGVkIGJ5IGZvbGxvd2luZyBjb21taXQ6Cnxjb21taXQgNjlm OWM1MDQ3ZDA0OTQ1NjkzZWNjMWJkZmRiOGEzZGMyYTFmNDhjZgp8QXV0aG9yOiBGdWdhbmcgRHVh biA8YjM4NjExQGZyZWVzY2FsZS5jb20+CnxEYXRlOiAgIE1vbiBTZXAgNyAxMDo1NTowMCAyMDE1 ICswODAwCnwKfCAgICBBUk06IGlteDogYWRkIGVuZXQgaW5pdCBmb3IgaS5NWDdEIHBsYXRmb3Jt CnwKfCAgICBBZGQgZW5ldCBwaHkgZml4dXAsIGNsb2NrIHNvdXJjZSBpbml0IGZvciBpLk1YN0Qg cGxhdGZvcm0uCnwKfCAgICBTaWduZWQtb2ZmLWJ5OiBGdWdhbmcgRHVhbiA8QjM4NjExQGZyZWVz Y2FsZS5jb20+CnwgICAgU2lnbmVkLW9mZi1ieTogU2hhd24gR3VvIDxzaGF3bmd1b0BrZXJuZWwu b3JnPgoKLSB0aGUgYXI4MDMxIGZpeHVwIGlzIGNvbmZpZ3VyaW5nIFJHTUlJIHNpZ25hbCB2b2x0 YWdlIHRvIDFWOCBhbmQgY2xvY2sgc2tld3MuCiAgQm90aCBjb25maWd1cmF0aW9ucyBhcmUgc3Vw cG9ydGVkIGJ5IHRoZSBhdDgwM3ggZHJpdmVyOgogIHZkZGlvLXJlZ3VsYXRvcgogIFJHTUlJLUlE KgotIHRoaXMgdGltZSBTbWFydEVFRSB3b3JrYXJvdW5kIGlzIGluY2x1ZGVkCi0gdGhlIGJjbTU0 MjIwIGZpeHVwIGlzIGNvbmZpZ3VyaW5nIGNsb2NrIHNrZXdzLiBObyBkcml2ZXIgaXMgYXZhaWxh YmxlCiAgZm9yIHRoZSBiY201NDIyMCBQSFkuIFRoaXMgdmFsdWVzIGFyZSBwcm9iYWJseSBub3Qg b3ZlcndyaXR0ZW4gYnkgYW55CiAgb3RoZXIgZHJpdmVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYwpUaGlzIGZpeHVwIHdhcyBhZGRlZCBieSBm b2xsb3dpbmcgY29tbWl0Ogp8Y29tbWl0IDMxNDNiYmI0MmIzZDI3YTVmNzk5Yzk3Yzg0ZmI3YTRh MWRlODhmOTEKfEF1dGhvcjogU2hhd24gR3VvIDxzaGF3bi5ndW9AbGluYXJvLm9yZz4KfERhdGU6 ICAgU2F0IEp1bCA3IDIzOjEyOjAzIDIwMTIgKzA4MDAKfAp8ICAgIEFSTTogbXhzOiBjb252ZXJ0 IGFweDRkZXZraXQgYm9hcmQgdG8gZGV2aWNlIHRyZWUKfAp8ICAgIFRlc3RlZC1ieTogTGF1cmkg SGludHNhbGEgPGxhdXJpLmhpbnRzYWxhQGJsdWVnaWdhLmNvbT4KfCAgICBTaWduZWQtb2ZmLWJ5 OiBTaGF3biBHdW8gPHNoYXduLmd1b0BsaW5hcm8ub3JnPgoKVGhpcyBpcyB0aGUgZmlyc3QgZml4 dXAgYW5kIHRoaXMgc2VyaWVzIHdoaWNoIGlzIG5vdCBtb2RpZnlpbmcgdGhlIFBIWQpyZWdpc3Rl cnMgZGlyZWN0bHksIGJ1dCBzZXQgdGhlIGxlZ2FjeSBib2FyZCBmaWxlIHNwZWNpZmljIGZsYWdz IGZvciB0aGUKcGh5LiBUaGUgYm9hcmQgc3BlY2lmaWMgWFRBTCBmcmVxdWVuY3kgaXMgcmVwb3J0 ZWQgdG8gdGhlIFBIWSBieQpzZXR0aW5nIE1JQ1JFTF9QSFlfNTBNSFpfQ0xLIGZsYWcgYW5kIHVz ZWQgYnkgbWljcmVsIGRyaXZlci4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmFyY2gvYXJtL21h Y2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwpUaGlzIGZpeHVwIHdhcyBhZGRlZCBieSBmb2xsb3dp bmcgY29tbWl0Ogp8Y29tbWl0IDZlMmRhYTQ5NDIwNzc3MTkwYzEzM2Q3MDk3ZGQ4ZDVjMDViNDc1 YWMKfEF1dGhvcjogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcu b3JnPgp8RGF0ZTogICBNb24gSnVuIDIxIDEzOjIxOjUzIDIwMTAgKzEwMDAKfAp8ICAgIFtBUk1d IG9yaW9uNXg6IEJhc2Ugc3VwcG9ydCBmb3IgRE5TLTMyMyByZXYgQzEKfAp8ICAgIFRoaXMgcGF0 Y2ggYWRkcyB0aGUgYmFzZSBzdXBwb3J0IGZvciB0aGlzIG5ldyBIVyByZXZpc2lvbiB0byB0aGUg ZXhpc3RpbmcKfCAgICBkbnMzMjMtc2V0dXAuYyBmaWxlLiBUaGUgU29DIHNlZW1zIHRvIGJlIHRo ZSBzYW1lIGFzIHJldiBCMSwgdGhlIEdQSU9zCnwgICAgYXJlIGFsbCB3aXJlZCBkaWZmZXJlbnRs eSB0aG91Z2ggYW5kIHRoZSBmYW4gY29udHJvbCBpc24ndCBpMmMgYmFzZWQKfCAgICBhbnltb3Jl Lgp8CnwgICAgU2lnbmVkLW9mZi1ieTogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJu ZWwuY3Jhc2hpbmcub3JnPgp8ICAgIFNpZ25lZC1vZmYtYnk6IE5pY29sYXMgUGl0cmUgPG5pY29A Zmx1eG5pYy5uZXQ+CgoKVGhpcyBpcyByZWxhdGVkIHRvIGEgc2luZ2xlIGJvYXJkIGFuZCBkbyBu b3QgbW9kaWZpZXMgUEhZIHJlZ2lzdGVycy4gVGhlCkxFRCBjb25maWd1cmF0aW9uIGlzIHJlcXVl c3RlZCBwZXIgTUFSVkVMTF9QSFlfTTExMThfRE5TMzIzX0xFRFMgZmxhZyBieQp0aGUgbWFydmVs bCBQSFkgZHJpdmVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYXJjaC9wb3dlcnBjL3BsYXRm b3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKVGhpcyBmaXh1cCB3YXMgYWRkZWQgYnkgZm9sbG93aW5n IGNvbW1pdDoKfGNvbW1pdCA5NDgzM2E0Mjc2NTUwOWE3YWE5NWVkMWJhN2IyMjdlYWQzYzI5YzA4 CnxBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KfERhdGU6ICAg RnJpIE1heSAyIDE4OjU2OjQxIDIwMDggLTA1MDAKfAp8ICAgIFtQT1dFUlBDXSA4NXh4OiBBZGQg ODU2OCBQSFkgd29ya2Fyb3VuZHMgdG8gYm9hcmQgY29kZQp8CnwgICAgVGhlIDg1NjggTURTIG5l ZWRzIHNvbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHRvIHRoZSBQSFkgaW4gb3JkZXIgdG8KfCAg ICB3b3JrIHByb3Blcmx5LiAgVGhlc2UgYXJlIGRvbmUgaW4gdGhlIGZpcm13YXJlLCBub3JtYWxs eSwgYnV0IExpbnV4CnwgICAgc2hvdWxkbid0IG5lZWQgdG8gcmVseSBvbiB0aGUgZmlybXdhcmUg cnVubmluZyBzdWNoIHRoaW5ncyAoc29tZW9uZQp8ICAgIGNvdWxkIGRpc2FibGUgdGhlIFBIWSBz dXBwb3J0IGluIHRoZSBmaXJtd2FyZSB0byBzYXZlIHNwYWNlLCBmb3IgaW5zdGFuY2UpLgp8Cnwg ICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgp8 ICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+ CgpUaGlzIGZpeHVwIGlzIGhhcmQgdG8gYW5hbHl6ZS4gSSB3YXMgbm90IGFibGUgdG8gZmluZCBh IGRvY3VtZW50YXRpb24gb3IKcmVsYXRlZCBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIDg4RTExMTEg UEhZLiBJdCBzZWVtcyB0byBlbmFibGUgMTI1TWh6IGNsb2NrIGFzCnByZXZpb3VzIGZpeHVwcyBk aWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkcml2ZXJzL25ldC9ldGhlcm5ldC9kbmV0LmMK VGhpcyBmaXh1cCB3YXMgYWRkZWQgYnkgZm9sbG93aW5nIGNvbW1pdDoKfGNvbW1pdCA0Nzk2NDE3 NDE3YTYyZTJhZTgzZDkyY2I5MmUxZWNmOWVjNjdiNWY1CnxBdXRob3I6IElseWEgWWFub2sgPHlh bm9rQGVtY3JhZnQuY29tPgp8RGF0ZTogICBXZWQgTWFyIDExIDIzOjI2OjAyIDIwMDkgLTA3MDAK fAp8ICAgIGRuZXQ6IERhdmUgRE5FVCBldGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAodXBkYXRl ZCkKfAp8ICAgIERyaXZlciBmb3IgRGF2ZSBETkVUIGV0aGVybmV0IGNvbnRyb2xsZXIgZm91bmQg b24gRGF2ZS9ERU5YIFFvbmdFVkItTElURQp8ICAgIEZQR0EuIEhlYXZpbHkgYmFzZWQgb24gRGF2 ZSBzb3VyY2VzLCBJJ3ZlIGp1c3QgYWRvcHRlZCBpdCB0byBjdXJyZW50CnwgICAga2VybmVsIHZl cnNpb24gYW5kIGRvbmUgc29tZSBjb2RlIGNsZWFudXAuCnwKfCAgICBTaWduZWQtb2ZmLWJ5OiBJ bHlhIFlhbm9rIDx5YW5va0BlbWNyYWZ0LmNvbT4KfCAgICBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBT LiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CgpTYW1lIFBIWSBhcyBpbiBwcmV2aW91cyBj YXNlIChNYXJ2ZWxsIDg4RTExMTEpLiBUaGUgY29tbWVudCBzdGF0ZW1lbnQgaXM6Ci8qIEZvciBO ZXB0dW5lIGJvYXJkOiBMSU5LMTAwMCBhcyBMaW5rIExFRCBhbmQgVFggYXMgYWN0aXZpdHkgTEVE ICovCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jClRo aXMgZHJpdmVyIHByb3ZpZGVzIHR3byBmaXh1cHMsIGFkZGVkIGJ5IGZvbGxvd2luZyBjb21taXQ6 Cnxjb21taXQgMDJkYzFmM2Q2MTNkNWE4NTk1MTNkNzQxNmM5YWNhMzcwNDI1YTdlMAp8QXV0aG9y OiBXb29qdW5nIEh1aCA8d29vanVuZy5odWhAbWljcm9jaGlwLmNvbT4KfERhdGU6ICAgV2VkIERl YyA3IDIwOjI2OjI1IDIwMTYgKzAwMDAKfAp8ICAgIGxhbjc4eHg6IGFkZCBMQU43ODAxIE1BQyBv bmx5IHN1cHBvcnQKfAp8ICAgIEFkZCBMQU43ODAxIE1BQyBvbmx5IHN1cHBvcnQgd2l0aCBwaHkg Zml4dXAgZnVuY3Rpb25zLgp8CnwgICAgU2lnbmVkLW9mZi1ieTogV29vanVuZyBIdWggPHdvb2p1 bmcuaHVoQG1pY3JvY2hpcC5jb20+CnwgICAgU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVy IDxkYXZlbUBkYXZlbWxvZnQubmV0PgoKClRoZXNlIGZpeHVwcyBhcmUgcmVsYXRlZCB0byBLU1o5 MDMxcm54IGFuZCBMQU44ODM1IFBIWXMsIGFyZSBjb25maWd1cmluZyBjbG9jawpza2V3cy4KClBs ZWFzZSBub3RlOiBUaGUgS1NaOTAzMSBmaXh1cCBpcyB1c2VkIG9uIGlteDZxIGJvYXJkcy4gV2hh dCB3aWxsIGhhcHBlbgppZiB3ZSBhdHRhY2ggdGhpcyBhZGFwdGVyIHRvIGEgaW14NnEgYmFzZWQg c3lzdGVtPyBPciB3aGF0IHdpbGwgaGFwcGVuCndpdGggYWxsIHRoaXMgdXNiIGV0aGVybmV0IGFk YXB0ZXJzIHdpdGggYXRoZXJvcyBvciBtaWNyZWwgUEhZcyBhdHRhY2hlZAp0byBpbXg2IGJhc2Vk IHN5c3RlbT8KClJlZ2FyZHMsCk9sZWtzaWogJiBNYXJjCi0tIApQZW5ndXRyb25peCBlLksuClN0 ZXVlcndhbGRlciBTdHIuIDIxICAgICAgICAgICAgICAgICAgICAgICB8IGh0dHA6Ly93d3cucGVu Z3V0cm9uaXguZGUvICB8CjMxMTM3IEhpbGRlc2hlaW0sIEdlcm1hbnkgICAgICAgICAgICAgICAg ICB8IFBob25lOiArNDktNTEyMS0yMDY5MTctMCAgICB8CkFtdHNnZXJpY2h0IEhpbGRlc2hlaW0s IEhSQSAyNjg2ICAgICAgICAgICB8IEZheDogICArNDktNTEyMS0yMDY5MTctNTU1NSB8CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==