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 6E68BC6FD1C for ; Sun, 26 Mar 2023 16:53:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232231AbjCZQxI (ORCPT ); Sun, 26 Mar 2023 12:53:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232215AbjCZQxC (ORCPT ); Sun, 26 Mar 2023 12:53:02 -0400 Received: from sender3-op-o19.zoho.com (sender3-op-o19.zoho.com [136.143.184.19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 753EA2706; Sun, 26 Mar 2023 09:53:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679849542; cv=none; d=zohomail.com; s=zohoarc; b=cGZWbB5JN/JIFEc3tTB3UP7NtGWQnQ7wzn5V1W/+J/swFJRSb/nsENYDpmPw+waxewiRzj3P7thE4jKuoK/l87SINy7T99nLt3TVJJB0/9ebT6Sf334IVDOxOJo2PSZzIhESXue4gMa7bONc1rujCwt9wZR46HNStKLsWmNaUCI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1679849542; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=Pm2id/8HeAjvdMr9qeOZKQ4PCbqDMhwjPFnaPN3ne2U=; b=RTZIV7Eqw55cvrY9VRSv1ZIeKV8rx6dttxkLkY4OFR5yfOxMyt/f464JnmYeDNxdlSl50X2BwhkINPOAVAD0718A++NbcRPONIBppW6duVvx51IU9Ho1rtf1cTsi90lpF/0UkeqXz4yeNecx0Z0WFKOkka7ruhB5RTyW7irYL5Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=arinc9.com; spf=pass smtp.mailfrom=arinc.unal@arinc9.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1679849542; s=zmail; d=arinc9.com; i=arinc.unal@arinc9.com; h=Message-ID:Date:Date:MIME-Version:From:From:Subject:Subject:To:To:Cc:Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=Pm2id/8HeAjvdMr9qeOZKQ4PCbqDMhwjPFnaPN3ne2U=; b=DQUDycAW/N2VVqHQJRLR5UEh5qR8iyrxOjIvrJQ/voqNEHyhnzJsRzqGJndXydW3 auNdHMl5VYyakzSTOntm9w+zydxKC/0ruZcgxlxJuRfay3U9RnmwFSluqk4hlfmwW4D YjDy94bbKuIxgk1Af9qngITD/vhn8miIRze2prOQ= Received: from [10.10.10.3] (149.91.1.15 [149.91.1.15]) by mx.zohomail.com with SMTPS id 1679849540391603.7287847039937; Sun, 26 Mar 2023 09:52:20 -0700 (PDT) Message-ID: <20ede15d-c5b0-bf96-4fe3-7639b4d646f8@arinc9.com> Date: Sun, 26 Mar 2023 19:52:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 From: =?UTF-8?B?QXLEsW7DpyDDnE5BTA==?= Subject: Re: Move MT7530 phy muxing from DSA to PHY driver To: Florian Fainelli , Andrew Lunn Cc: netdev , Linux ARM , "moderated list:ARM/Mediatek SoC support" , linux-kernel , Thibaut , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sean Wang , Landen Chao , DENG Qingfang , Vivien Didelot , Vladimir Oltean , Matthias Brugger , Philipp Zabel , Sergio Paracuellos References: <0e3ca573-2190-57b0-0e98-7f5b890d328e@arinc9.com> <4a291389-105a-6288-1347-4f02171b0dd0@arinc9.com> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ZohoMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 19.09.2022 01:58, Florian Fainelli wrote: > > > On 9/18/2022 4:28 AM, Arınç ÜNAL wrote: >> On 17.09.2022 18:07, Andrew Lunn wrote: >>>>> Where in the address range is the mux register? Officially, PHY >>>>> drivers only have access to PHY registers, via MDIO. If the mux >>>>> register is in the switch address space, it would be better if the >>>>> switch did the mux configuration. An alternative might be to represent >>>>> the mux in DT somewhere, and have a mux driver. >>>> >>>> I don't know this part very well but it's in the register for hw trap >>>> modification which, I think, is in the switch address space. >>>> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/drivers/net/dsa/mt7530.c?id=1f9a6abecf538cc73635f6082677a2f4dc9c89a4#n941 >>>> >>>> https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/drivers/net/dsa/mt7530.h?id=1f9a6abecf538cc73635f6082677a2f4dc9c89a4#n500 >>>> >>>> Like you said, I don't think we can move away from the DSA driver, >>>> and would >>>> rather keep the driver do the mux configuration. >>>> >>>> We could change the check for phy muxing to define the phy muxing >>>> bindings >>>> in the DSA node instead. If I understand correctly, the mdio address >>>> for >>>> PHYs is fake, it's for the sole purpose of making the driver check if >>>> there's request for phy muxing and which phy to mux. I'm saying this >>>> because >>>> the MT7530 switch works fine at address 0 while also using phy0 as a >>>> slave >>>> interface. >>>> >>>> A property could be introduced on the DSA node for the MT7530 DSA >>>> driver: >>>> >>>>      mdio { >>>>          #address-cells = <1>; >>>>          #size-cells = <0>; >>>> >>>>          switch@0 { >>>>              compatible = "mediatek,mt7530"; >>>>              reg = <0>; >>>> >>>>              reset-gpios = <&pio 33 0>; >>>> >>>>              core-supply = <&mt6323_vpa_reg>; >>>>              io-supply = <&mt6323_vemc3v3_reg>; >>>> >>>>              mt7530,mux-phy = <&sw0_p0>; >>>> >>>>              ethernet-ports { >>>>                  #address-cells = <1>; >>>>                  #size-cells = <0>; >>>> >>>>                  sw0_p0: port@0 { >>>>                      reg = <0>; >>>>                  }; >>>>              }; >>>>          }; >>>>      }; >>>> >>>> This would also allow using the phy muxing feature with any ethernet >>>> mac. >>>> Currently, phy muxing check wants the ethernet mac to be gmac1 of a >>>> MediaTek >>>> SoC. However, on a standalone MT7530, the switch can be wired to any >>>> SoC's >>>> ethernet mac. >>>> >>>> For the port which is set for PHY muxing, do not bring it as a slave >>>> interface, just do the phy muxing operation. >>>> >>>> Do not fail because there's no CPU port (ethernet property) defined >>>> when >>>> there's only one port defined and it's set for PHY muxing. >>>> >>>> I don't know if the ethernet mac needs phy-handle defined in this case. >>> >>>  From mediatek,mt7530.yaml: >>> >>>    Port 5 modes/configurations: >>>    1. Port 5 is disabled and isolated: An external phy can interface >>> to the 2nd >>>       GMAC of the SOC. >>>       In the case of a build-in MT7530 switch, port 5 shares the >>> RGMII bus with 2nd >>>       GMAC and an optional external phy. Mind the GPIO/pinctl >>> settings of the SOC! >>>    2. Port 5 is muxed to PHY of port 0/4: Port 0/4 interfaces with >>> 2nd GMAC. >>>       It is a simple MAC to PHY interface, port 5 needs to be setup >>> for xMII mode >>>       and RGMII delay. >>>    3. Port 5 is muxed to GMAC5 and can interface to an external phy. >>>       Port 5 becomes an extra switch port. >>>       Only works on platform where external phy TX<->RX lines are >>> swapped. >>>       Like in the Ubiquiti ER-X-SFP. >>>    4. Port 5 is muxed to GMAC5 and interfaces with the 2nd GAMC as >>> 2nd CPU port. >>>       Currently a 2nd CPU port is not supported by DSA code. >>> >>> So this mux has a scope bigger than the switch, it also affects one of >>> the SoCs MACs. >>> >>> The phy-handle should have all the information you need, but it is >>> scattered over multiple locations. It could be in switch port 5, or it >>> could be in the SoC GMAC node. >>> >>> Although the mux is in the switches address range, could you have a >>> tiny driver using that address range. Have this tiny driver export a >>> function to set the mux. Both the GMAC and the DSA driver make use of >>> the function, which should be enough to force the tiny driver to load >>> first. The GMAC and the DSA driver can then look at there phy-handle, >>> and determine how the mux should be set. The GMAC should probably do >>> that before register_netdev. The DSA driver before it registers the >>> switch with the DSA core. >>> >>> Does that solve all your ordering issues? >> >> I believe it does. >> >>> >>> By using the phy-handle, you don't need any additional properties, so >>> backwards compatibility should not be a problem. You can change driver >>> code as much as you want, but ABI like DT is fixed. >> >> Understood, thanks Andrew! > > Yes this seems like a reasonably good idea, I would be a bit concerned > about possibly running into issues with fw_devlink=on and whichever > driver is managing the PHY device not being an actual PHY device driver > provider and thus preventing the PHY device consumers from probing. This > is not necessarily an issue right now though because 'phy-handle' is not > (yet again) part of of_supplier_bindings. > > Maybe what you can do is just describe that mux register space using a > dedicated DT node, and use a syscon phandle for both the switch and/or > the MAC and have them use an exported symbol routine that is responsible > for configuring the mux in an atomic and consistent way. I'm currently working on the mt7530 driver and I think I found a way that takes the least effort, won't break the ABI, and most importantly, will work. As we acknowledged, the registers are in the switch address space. This must also mean that the switch must be properly probed before doing anything with the registers. I'm not sure how exactly making a tiny driver would work in this case. I figured we can just run the phy muxing code before the DSA driver exits because there are no (CPU) ports defined on the devicetree. Right after probing is done on mt7530_probe, before dsa_register_switch() is run. For proof of concept, I've moved some necessary switch probing code from mt7530_setup() to mt7530_probe(). After the switch is properly reset, phy4 is muxed, before dsa_register_switch() is run. diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index b0d9ea7b8e6d..0c1d9f83e73b 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2085,7 +2085,6 @@ mt7530_setup(struct dsa_switch *ds) struct device_node *dn = NULL; struct device_node *phy_node; struct device_node *mac_np; - struct mt7530_dummy_poll p; phy_interface_t interface; struct dsa_port *cpu_dp; u32 id, val; @@ -2111,58 +2110,6 @@ mt7530_setup(struct dsa_switch *ds) ds->assisted_learning_on_cpu_port = true; ds->mtu_enforcement_ingress = true; - if (priv->id == ID_MT7530) { - regulator_set_voltage(priv->core_pwr, 1000000, 1000000); - ret = regulator_enable(priv->core_pwr); - if (ret < 0) { - dev_err(priv->dev, - "Failed to enable core power: %d\n", ret); - return ret; - } - - regulator_set_voltage(priv->io_pwr, 3300000, 3300000); - ret = regulator_enable(priv->io_pwr); - if (ret < 0) { - dev_err(priv->dev, "Failed to enable io pwr: %d\n", - ret); - return ret; - } - } - - /* Reset whole chip through gpio pin or memory-mapped registers for - * different type of hardware - */ - if (priv->mcm) { - reset_control_assert(priv->rstc); - usleep_range(1000, 1100); - reset_control_deassert(priv->rstc); - } else { - gpiod_set_value_cansleep(priv->reset, 0); - usleep_range(1000, 1100); - gpiod_set_value_cansleep(priv->reset, 1); - } - - /* Waiting for MT7530 got to stable */ - INIT_MT7530_DUMMY_POLL(&p, priv, MT7530_HWTRAP); - ret = readx_poll_timeout(_mt7530_read, &p, val, val != 0, - 20, 1000000); - if (ret < 0) { - dev_err(priv->dev, "reset timeout\n"); - return ret; - } - - id = mt7530_read(priv, MT7530_CREV); - id >>= CHIP_NAME_SHIFT; - if (id != MT7530_ID) { - dev_err(priv->dev, "chip %x can't be supported\n", id); - return -ENODEV; - } - - /* Reset the switch through internal reset */ - mt7530_write(priv, MT7530_SYS_CTRL, - SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST | - SYS_CTRL_REG_RST); - mt7530_pll_setup(priv); /* Lower Tx driving for TRGMII path */ @@ -3079,6 +3026,9 @@ mt7530_probe(struct mdio_device *mdiodev) { struct mt7530_priv *priv; struct device_node *dn; + struct mt7530_dummy_poll p; + u32 id, val; + int ret; dn = mdiodev->dev.of_node; @@ -3155,6 +3105,91 @@ mt7530_probe(struct mdio_device *mdiodev) mutex_init(&priv->reg_mutex); dev_set_drvdata(&mdiodev->dev, priv); + if (priv->id == ID_MT7530) { + regulator_set_voltage(priv->core_pwr, 1000000, 1000000); + ret = regulator_enable(priv->core_pwr); + if (ret < 0) {thought a bit of what exactly + dev_err(priv->dev, + "Failed to enable core power: %d\n", ret); + return ret; + } + + regulator_set_voltage(priv->io_pwr, 3300000, 3300000); + ret = regulator_enable(priv->io_pwr); + if (ret < 0) { + dev_err(priv->dev, "Failed to enable io pwr: %d\n", + ret); + return ret; + } + } + + /* Reset whole chip through gpio pin or memory-mapped registers for + * different type of hardware + */ + if (priv->mcm) { + reset_control_assert(priv->rstc); + usleep_range(1000, 1100); + reset_control_deassert(priv->rstc); + } else { + gpiod_set_value_cansleep(priv->reset, 0); + usleep_range(1000, 1100); + gpiod_set_value_cansleep(priv->reset, 1); + } + + /* Waiting for MT7530 got to stable */ + INIT_MT7530_DUMMY_POLL(&p, priv, MT7530_HWTRAP); + ret = readx_poll_timeout(_mt7530_read, &p, val, val != 0, + 20, 1000000); + if (ret < 0) { + dev_err(priv->dev, "reset timeout\n"); + return ret; + } + + id = mt7530_read(priv, MT7530_CREV); + id >>= CHIP_NAME_SHIFT; + if (id != MT7530_ID) { + dev_err(priv->dev, "chip %x can't be supported\n", id); + return -ENODEV; + } + + /* Reset the switch through internal reset */ + mt7530_write(priv, MT7530_SYS_CTRL, + SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST | + SYS_CTRL_REG_RST); + + /* Setup phy muxing */ + mutex_lock(&priv->reg_mutex); + + val = mt7530_read(priv, MT7530_MHWTRAP); + + val |= MHWTRAP_MANUAL | MHWTRAP_P5_MAC_SEL | MHWTRAP_P5_DIS; + val &= ~MHWTRAP_P5_RGMII_MODE & ~MHWTRAP_PHY0_SEL; + + /* MT7530_P5_MODE_GPHY_P4: 2nd GMAC -> P5 -> P4 */ + val &= ~MHWTRAP_P5_MAC_SEL & ~MHWTRAP_P5_DIS; + + /* Setup the MAC by default for the cpu port */ + mt7530_write(priv, MT7530_PMCR_P(5), 0x56300); + + val |= MHWTRAP_P5_RGMII_MODE; + + /* P5 RGMII RX Clock Control: delay setting for 1000M */ + mt7530_write(priv, MT7530_P5RGMIIRXCR, CSR_RGMII_EDGE_ALIGN); + + /* P5 RGMII TX Clock Control: delay x */ + mt7530_write(priv, MT7530_P5RGMIITXCR, + CSR_RGMII_TXC_CFG(0x10 + 4)); + + /* reduce P5 RGMII Tx driving, 8mA */ + mt7530_write(priv, MT7530_IO_DRV_CR, + P5_IO_CLK_DRV(1) | P5_IO_DATA_DRV(1)); + + mt7530_write(priv, MT7530_MHWTRAP, val); + + dev_info(priv->dev, "muxing phy4 to gmac5\n"); + + mutex_unlock(&priv->reg_mutex); + return dsa_register_switch(priv->ds); } [ 0.650721] mt7530 mdio-bus:1f: MT7530 adapts as multi-chip module [ 0.660285] mt7530 mdio-bus:1f: muxing phy4 to gmac5 [ 0.665284] mt7530 mdio-bus:1f: no ports child node found [ 0.670688] mt7530: probe of mdio-bus:1f failed with error -22 [ 0.679118] mtk_soc_eth 1e100000.ethernet: generated random MAC address b6:9c:4d:eb:1f:8e [ 0.688922] mtk_soc_eth 1e100000.ethernet eth0: mediatek frame engine at 0xbe100000, irq 15 --- # ifup eth0 [ 30.674595] mtk_soc_eth 1e100000.ethernet eth0: configuring for fixed/rgmii link mode [ 30.683451] mtk_soc_eth 1e100000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx # ping 192.168.2.2 PING 192.168.2.2 (192.168.2.2): 56 data bytes 64 bytes from 192.168.2.2: seq=0 ttl=64 time=0.688 ms 64 bytes from 192.168.2.2: seq=1 ttl=64 time=0.375 ms 64 bytes from 192.168.2.2: seq=2 ttl=64 time=0.357 ms 64 bytes from 192.168.2.2: seq=3 ttl=64 time=0.323 ms --- # ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether b6:9c:4d:eb:1f:8e brd ff:ff:ff:ff:ff:ff inet 192.168.2.1/24 scope global eth0 valid_lft forever preferred_lft forever There is a lot to do, such as fixing the method to read from the devicetree as it relies on the mac node the CPU port is connected to but when this is finalised, we should be able to use it like this: mac@1 { compatible = "mediatek,eth-mac"; reg = <1>; phy-mode = "rgmii"; phy-handle = <ðphy0>; }; mdio-bus { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@0 { reg = <0>; }; switch@1f { compatible = "mediatek,mt7530"; reg = <0x1f>; reset-gpios = <&pio 33 0>; core-supply = <&mt6323_vpa_reg>; io-supply = <&mt6323_vemc3v3_reg>; }; }; Arınç 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 2BF84C6FD1C for ; Sun, 26 Mar 2023 16:53:59 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:References:Cc:To:Subject:From: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SwaN5l5bR62g7hC8zTSudDgLcdFnOlJUi0HAg+Tnlhg=; b=WduHpeN4Cm8Agz +fRBcowiWQeYMJUDgMqn/hyLqPeWlsIYk26t3JCjDBFxpPU8baZtuzu7vFc+Lo2PAfIq8kQTvziUk BkNhQAdQwyEM1ORKh4zhzaBkruMK6/7acJ92ZRjRdF87cLMSOeZOsOChUZNw016zQ/0xt/NzlicEQ s33SQuJ2bHfrb6GxSg4gK8zi33g6BynR2L+858FzfKRh/vUdyPi0uLk8pJXZ4F8M2vUYyqy8RDDz2 Elq5Ah36MQJzonlxecKgU8OneEHOxGLTbNNHuMpbMnRmVe60C1dzdNFbzxGjuP2zBXCsHryOxFDSM 1sySY1tlQjXYoS0dzrow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pgTbs-008q7V-2t; Sun, 26 Mar 2023 16:52:48 +0000 Received: from sender3-op-o19.zoho.com ([136.143.184.19]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pgTbp-008q70-0m; Sun, 26 Mar 2023 16:52:47 +0000 ARC-Seal: i=1; a=rsa-sha256; t=1679849542; cv=none; d=zohomail.com; s=zohoarc; b=cGZWbB5JN/JIFEc3tTB3UP7NtGWQnQ7wzn5V1W/+J/swFJRSb/nsENYDpmPw+waxewiRzj3P7thE4jKuoK/l87SINy7T99nLt3TVJJB0/9ebT6Sf334IVDOxOJo2PSZzIhESXue4gMa7bONc1rujCwt9wZR46HNStKLsWmNaUCI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1679849542; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=Pm2id/8HeAjvdMr9qeOZKQ4PCbqDMhwjPFnaPN3ne2U=; b=RTZIV7Eqw55cvrY9VRSv1ZIeKV8rx6dttxkLkY4OFR5yfOxMyt/f464JnmYeDNxdlSl50X2BwhkINPOAVAD0718A++NbcRPONIBppW6duVvx51IU9Ho1rtf1cTsi90lpF/0UkeqXz4yeNecx0Z0WFKOkka7ruhB5RTyW7irYL5Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=arinc9.com; spf=pass smtp.mailfrom=arinc.unal@arinc9.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1679849542; s=zmail; d=arinc9.com; i=arinc.unal@arinc9.com; h=Message-ID:Date:Date:MIME-Version:From:From:Subject:Subject:To:To:Cc:Cc:References:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=Pm2id/8HeAjvdMr9qeOZKQ4PCbqDMhwjPFnaPN3ne2U=; b=DQUDycAW/N2VVqHQJRLR5UEh5qR8iyrxOjIvrJQ/voqNEHyhnzJsRzqGJndXydW3 auNdHMl5VYyakzSTOntm9w+zydxKC/0ruZcgxlxJuRfay3U9RnmwFSluqk4hlfmwW4D YjDy94bbKuIxgk1Af9qngITD/vhn8miIRze2prOQ= Received: from [10.10.10.3] (149.91.1.15 [149.91.1.15]) by mx.zohomail.com with SMTPS id 1679849540391603.7287847039937; Sun, 26 Mar 2023 09:52:20 -0700 (PDT) Message-ID: <20ede15d-c5b0-bf96-4fe3-7639b4d646f8@arinc9.com> Date: Sun, 26 Mar 2023 19:52:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 From: =?UTF-8?B?QXLEsW7DpyDDnE5BTA==?= Subject: Re: Move MT7530 phy muxing from DSA to PHY driver To: Florian Fainelli , Andrew Lunn Cc: netdev , Linux ARM , "moderated list:ARM/Mediatek SoC support" , linux-kernel , Thibaut , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Sean Wang , Landen Chao , DENG Qingfang , Vivien Didelot , Vladimir Oltean , Matthias Brugger , Philipp Zabel , Sergio Paracuellos References: <0e3ca573-2190-57b0-0e98-7f5b890d328e@arinc9.com> <4a291389-105a-6288-1347-4f02171b0dd0@arinc9.com> Content-Language: en-US In-Reply-To: X-ZohoMailClient: External X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230326_095245_355480_DE1A3143 X-CRM114-Status: GOOD ( 44.85 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTkuMDkuMjAyMiAwMTo1OCwgRmxvcmlhbiBGYWluZWxsaSB3cm90ZToKPiAKPiAKPiBPbiA5 LzE4LzIwMjIgNDoyOCBBTSwgQXLEsW7DpyDDnE5BTCB3cm90ZToKPj4gT24gMTcuMDkuMjAyMiAx ODowNywgQW5kcmV3IEx1bm4gd3JvdGU6Cj4+Pj4+IFdoZXJlIGluIHRoZSBhZGRyZXNzIHJhbmdl IGlzIHRoZSBtdXggcmVnaXN0ZXI/IE9mZmljaWFsbHksIFBIWQo+Pj4+PiBkcml2ZXJzIG9ubHkg aGF2ZSBhY2Nlc3MgdG8gUEhZIHJlZ2lzdGVycywgdmlhIE1ESU8uIElmIHRoZSBtdXgKPj4+Pj4g cmVnaXN0ZXIgaXMgaW4gdGhlIHN3aXRjaCBhZGRyZXNzIHNwYWNlLCBpdCB3b3VsZCBiZSBiZXR0 ZXIgaWYgdGhlCj4+Pj4+IHN3aXRjaCBkaWQgdGhlIG11eCBjb25maWd1cmF0aW9uLiBBbiBhbHRl cm5hdGl2ZSBtaWdodCBiZSB0byByZXByZXNlbnQKPj4+Pj4gdGhlIG11eCBpbiBEVCBzb21ld2hl cmUsIGFuZCBoYXZlIGEgbXV4IGRyaXZlci4KPj4+Pgo+Pj4+IEkgZG9uJ3Qga25vdyB0aGlzIHBh cnQgdmVyeSB3ZWxsIGJ1dCBpdCdzIGluIHRoZSByZWdpc3RlciBmb3IgaHcgdHJhcAo+Pj4+IG1v ZGlmaWNhdGlvbiB3aGljaCwgSSB0aGluaywgaXMgaW4gdGhlIHN3aXRjaCBhZGRyZXNzIHNwYWNl Lgo+Pj4+Cj4+Pj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9n aXQvbmV0ZGV2L25ldC1uZXh0LmdpdC90cmVlL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz9pZD0x ZjlhNmFiZWNmNTM4Y2M3MzYzNWY2MDgyNjc3YTJmNGRjOWM4OWE0I245NDEKPj4+Pgo+Pj4+IGh0 dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L25ldGRldi9uZXQt bmV4dC5naXQvdHJlZS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmg/aWQ9MWY5YTZhYmVjZjUzOGNj NzM2MzVmNjA4MjY3N2EyZjRkYzljODlhNCNuNTAwCj4+Pj4KPj4+PiBMaWtlIHlvdSBzYWlkLCBJ IGRvbid0IHRoaW5rIHdlIGNhbiBtb3ZlIGF3YXkgZnJvbSB0aGUgRFNBIGRyaXZlciwgCj4+Pj4g YW5kIHdvdWxkCj4+Pj4gcmF0aGVyIGtlZXAgdGhlIGRyaXZlciBkbyB0aGUgbXV4IGNvbmZpZ3Vy YXRpb24uCj4+Pj4KPj4+PiBXZSBjb3VsZCBjaGFuZ2UgdGhlIGNoZWNrIGZvciBwaHkgbXV4aW5n IHRvIGRlZmluZSB0aGUgcGh5IG11eGluZyAKPj4+PiBiaW5kaW5ncwo+Pj4+IGluIHRoZSBEU0Eg bm9kZSBpbnN0ZWFkLiBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB0aGUgbWRpbyBhZGRyZXNz IAo+Pj4+IGZvcgo+Pj4+IFBIWXMgaXMgZmFrZSwgaXQncyBmb3IgdGhlIHNvbGUgcHVycG9zZSBv ZiBtYWtpbmcgdGhlIGRyaXZlciBjaGVjayBpZgo+Pj4+IHRoZXJlJ3MgcmVxdWVzdCBmb3IgcGh5 IG11eGluZyBhbmQgd2hpY2ggcGh5IHRvIG11eC4gSSdtIHNheWluZyB0aGlzIAo+Pj4+IGJlY2F1 c2UKPj4+PiB0aGUgTVQ3NTMwIHN3aXRjaCB3b3JrcyBmaW5lIGF0IGFkZHJlc3MgMCB3aGlsZSBh bHNvIHVzaW5nIHBoeTAgYXMgYSAKPj4+PiBzbGF2ZQo+Pj4+IGludGVyZmFjZS4KPj4+Pgo+Pj4+ IEEgcHJvcGVydHkgY291bGQgYmUgaW50cm9kdWNlZCBvbiB0aGUgRFNBIG5vZGUgZm9yIHRoZSBN VDc1MzAgRFNBIAo+Pj4+IGRyaXZlcjoKPj4+Pgo+Pj4+IMKgwqDCoMKgIG1kaW8gewo+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCAjc2l6ZS1jZWxscyA9IDwwPjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgc3dpdGNoQDAg ewo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 NzUzMCI7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZyA9IDwwPjsKPj4+Pgo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXNldC1ncGlvcyA9IDwmcGlvIDMzIDA+Owo+Pj4+ Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvcmUtc3VwcGx5ID0gPCZtdDYzMjNfdnBh X3JlZz47Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlvLXN1cHBseSA9IDwmbXQ2MzIz X3ZlbWMzdjNfcmVnPjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtdDc1MzAs bXV4LXBoeSA9IDwmc3cwX3AwPjsKPj4+Pgo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl dGhlcm5ldC1wb3J0cyB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgI2Fk ZHJlc3MtY2VsbHMgPSA8MT47Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg I3NpemUtY2VsbHMgPSA8MD47Cj4+Pj4KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdzBfcDA6IHBvcnRAMCB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZWcgPSA8MD47Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfTsKPj4+PiDCoMKgwqDCoMKgwqDC oMKgIH07Cj4+Pj4gwqDCoMKgwqAgfTsKPj4+Pgo+Pj4+IFRoaXMgd291bGQgYWxzbyBhbGxvdyB1 c2luZyB0aGUgcGh5IG11eGluZyBmZWF0dXJlIHdpdGggYW55IGV0aGVybmV0IAo+Pj4+IG1hYy4K Pj4+PiBDdXJyZW50bHksIHBoeSBtdXhpbmcgY2hlY2sgd2FudHMgdGhlIGV0aGVybmV0IG1hYyB0 byBiZSBnbWFjMSBvZiBhIAo+Pj4+IE1lZGlhVGVrCj4+Pj4gU29DLiBIb3dldmVyLCBvbiBhIHN0 YW5kYWxvbmUgTVQ3NTMwLCB0aGUgc3dpdGNoIGNhbiBiZSB3aXJlZCB0byBhbnkgCj4+Pj4gU29D J3MKPj4+PiBldGhlcm5ldCBtYWMuCj4+Pj4KPj4+PiBGb3IgdGhlIHBvcnQgd2hpY2ggaXMgc2V0 IGZvciBQSFkgbXV4aW5nLCBkbyBub3QgYnJpbmcgaXQgYXMgYSBzbGF2ZQo+Pj4+IGludGVyZmFj ZSwganVzdCBkbyB0aGUgcGh5IG11eGluZyBvcGVyYXRpb24uCj4+Pj4KPj4+PiBEbyBub3QgZmFp bCBiZWNhdXNlIHRoZXJlJ3Mgbm8gQ1BVIHBvcnQgKGV0aGVybmV0IHByb3BlcnR5KSBkZWZpbmVk IAo+Pj4+IHdoZW4KPj4+PiB0aGVyZSdzIG9ubHkgb25lIHBvcnQgZGVmaW5lZCBhbmQgaXQncyBz ZXQgZm9yIFBIWSBtdXhpbmcuCj4+Pj4KPj4+PiBJIGRvbid0IGtub3cgaWYgdGhlIGV0aGVybmV0 IG1hYyBuZWVkcyBwaHktaGFuZGxlIGRlZmluZWQgaW4gdGhpcyBjYXNlLgo+Pj4KPj4+IMKgRnJv bSBtZWRpYXRlayxtdDc1MzAueWFtbDoKPj4+Cj4+PiDCoMKgIFBvcnQgNSBtb2Rlcy9jb25maWd1 cmF0aW9uczoKPj4+IMKgwqAgMS4gUG9ydCA1IGlzIGRpc2FibGVkIGFuZCBpc29sYXRlZDogQW4g ZXh0ZXJuYWwgcGh5IGNhbiBpbnRlcmZhY2UgCj4+PiB0byB0aGUgMm5kCj4+PiDCoMKgwqDCoMKg IEdNQUMgb2YgdGhlIFNPQy4KPj4+IMKgwqDCoMKgwqAgSW4gdGhlIGNhc2Ugb2YgYSBidWlsZC1p biBNVDc1MzAgc3dpdGNoLCBwb3J0IDUgc2hhcmVzIHRoZSAKPj4+IFJHTUlJIGJ1cyB3aXRoIDJu ZAo+Pj4gwqDCoMKgwqDCoCBHTUFDIGFuZCBhbiBvcHRpb25hbCBleHRlcm5hbCBwaHkuIE1pbmQg dGhlIEdQSU8vcGluY3RsIAo+Pj4gc2V0dGluZ3Mgb2YgdGhlIFNPQyEKPj4+IMKgwqAgMi4gUG9y dCA1IGlzIG11eGVkIHRvIFBIWSBvZiBwb3J0IDAvNDogUG9ydCAwLzQgaW50ZXJmYWNlcyB3aXRo IAo+Pj4gMm5kIEdNQUMuCj4+PiDCoMKgwqDCoMKgIEl0IGlzIGEgc2ltcGxlIE1BQyB0byBQSFkg aW50ZXJmYWNlLCBwb3J0IDUgbmVlZHMgdG8gYmUgc2V0dXAgCj4+PiBmb3IgeE1JSSBtb2RlCj4+ PiDCoMKgwqDCoMKgIGFuZCBSR01JSSBkZWxheS4KPj4+IMKgwqAgMy4gUG9ydCA1IGlzIG11eGVk IHRvIEdNQUM1IGFuZCBjYW4gaW50ZXJmYWNlIHRvIGFuIGV4dGVybmFsIHBoeS4KPj4+IMKgwqDC oMKgwqAgUG9ydCA1IGJlY29tZXMgYW4gZXh0cmEgc3dpdGNoIHBvcnQuCj4+PiDCoMKgwqDCoMKg IE9ubHkgd29ya3Mgb24gcGxhdGZvcm0gd2hlcmUgZXh0ZXJuYWwgcGh5IFRYPC0+UlggbGluZXMg YXJlIAo+Pj4gc3dhcHBlZC4KPj4+IMKgwqDCoMKgwqAgTGlrZSBpbiB0aGUgVWJpcXVpdGkgRVIt WC1TRlAuCj4+PiDCoMKgIDQuIFBvcnQgNSBpcyBtdXhlZCB0byBHTUFDNSBhbmQgaW50ZXJmYWNl cyB3aXRoIHRoZSAybmQgR0FNQyBhcyAKPj4+IDJuZCBDUFUgcG9ydC4KPj4+IMKgwqDCoMKgwqAg Q3VycmVudGx5IGEgMm5kIENQVSBwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgRFNBIGNvZGUuCj4+ Pgo+Pj4gU28gdGhpcyBtdXggaGFzIGEgc2NvcGUgYmlnZ2VyIHRoYW4gdGhlIHN3aXRjaCwgaXQg YWxzbyBhZmZlY3RzIG9uZSBvZgo+Pj4gdGhlIFNvQ3MgTUFDcy4KPj4+Cj4+PiBUaGUgcGh5LWhh bmRsZSBzaG91bGQgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkLCBidXQgaXQgaXMK Pj4+IHNjYXR0ZXJlZCBvdmVyIG11bHRpcGxlIGxvY2F0aW9ucy4gSXQgY291bGQgYmUgaW4gc3dp dGNoIHBvcnQgNSwgb3IgaXQKPj4+IGNvdWxkIGJlIGluIHRoZSBTb0MgR01BQyBub2RlLgo+Pj4K Pj4+IEFsdGhvdWdoIHRoZSBtdXggaXMgaW4gdGhlIHN3aXRjaGVzIGFkZHJlc3MgcmFuZ2UsIGNv dWxkIHlvdSBoYXZlIGEKPj4+IHRpbnkgZHJpdmVyIHVzaW5nIHRoYXQgYWRkcmVzcyByYW5nZS4g SGF2ZSB0aGlzIHRpbnkgZHJpdmVyIGV4cG9ydCBhCj4+PiBmdW5jdGlvbiB0byBzZXQgdGhlIG11 eC4gQm90aCB0aGUgR01BQyBhbmQgdGhlIERTQSBkcml2ZXIgbWFrZSB1c2Ugb2YKPj4+IHRoZSBm dW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGVub3VnaCB0byBmb3JjZSB0aGUgdGlueSBkcml2ZXIg dG8gbG9hZAo+Pj4gZmlyc3QuIFRoZSBHTUFDIGFuZCB0aGUgRFNBIGRyaXZlciBjYW4gdGhlbiBs b29rIGF0IHRoZXJlIHBoeS1oYW5kbGUsCj4+PiBhbmQgZGV0ZXJtaW5lIGhvdyB0aGUgbXV4IHNo b3VsZCBiZSBzZXQuIFRoZSBHTUFDIHNob3VsZCBwcm9iYWJseSBkbwo+Pj4gdGhhdCBiZWZvcmUg cmVnaXN0ZXJfbmV0ZGV2LiBUaGUgRFNBIGRyaXZlciBiZWZvcmUgaXQgcmVnaXN0ZXJzIHRoZQo+ Pj4gc3dpdGNoIHdpdGggdGhlIERTQSBjb3JlLgo+Pj4KPj4+IERvZXMgdGhhdCBzb2x2ZSBhbGwg eW91ciBvcmRlcmluZyBpc3N1ZXM/Cj4+Cj4+IEkgYmVsaWV2ZSBpdCBkb2VzLgo+Pgo+Pj4KPj4+ IEJ5IHVzaW5nIHRoZSBwaHktaGFuZGxlLCB5b3UgZG9uJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBw cm9wZXJ0aWVzLCBzbwo+Pj4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc2hvdWxkIG5vdCBiZSBh IHByb2JsZW0uIFlvdSBjYW4gY2hhbmdlIGRyaXZlcgo+Pj4gY29kZSBhcyBtdWNoIGFzIHlvdSB3 YW50LCBidXQgQUJJIGxpa2UgRFQgaXMgZml4ZWQuCj4+Cj4+IFVuZGVyc3Rvb2QsIHRoYW5rcyBB bmRyZXchCj4gCj4gWWVzIHRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibHkgZ29vZCBpZGVhLCBJ IHdvdWxkIGJlIGEgYml0IGNvbmNlcm5lZCAKPiBhYm91dCBwb3NzaWJseSBydW5uaW5nIGludG8g aXNzdWVzIHdpdGggZndfZGV2bGluaz1vbiBhbmQgd2hpY2hldmVyIAo+IGRyaXZlciBpcyBtYW5h Z2luZyB0aGUgUEhZIGRldmljZSBub3QgYmVpbmcgYW4gYWN0dWFsIFBIWSBkZXZpY2UgZHJpdmVy IAo+IHByb3ZpZGVyIGFuZCB0aHVzIHByZXZlbnRpbmcgdGhlIFBIWSBkZXZpY2UgY29uc3VtZXJz IGZyb20gcHJvYmluZy4gVGhpcyAKPiBpcyBub3QgbmVjZXNzYXJpbHkgYW4gaXNzdWUgcmlnaHQg bm93IHRob3VnaCBiZWNhdXNlICdwaHktaGFuZGxlJyBpcyBub3QgCj4gKHlldCBhZ2FpbikgcGFy dCBvZiBvZl9zdXBwbGllcl9iaW5kaW5ncy4KPiAKPiBNYXliZSB3aGF0IHlvdSBjYW4gZG8gaXMg anVzdCBkZXNjcmliZSB0aGF0IG11eCByZWdpc3RlciBzcGFjZSB1c2luZyBhIAo+IGRlZGljYXRl ZCBEVCBub2RlLCBhbmQgdXNlIGEgc3lzY29uIHBoYW5kbGUgZm9yIGJvdGggdGhlIHN3aXRjaCBh bmQvb3IgCj4gdGhlIE1BQyBhbmQgaGF2ZSB0aGVtIHVzZSBhbiBleHBvcnRlZCBzeW1ib2wgcm91 dGluZSB0aGF0IGlzIHJlc3BvbnNpYmxlIAo+IGZvciBjb25maWd1cmluZyB0aGUgbXV4IGluIGFu IGF0b21pYyBhbmQgY29uc2lzdGVudCB3YXkuCgpJJ20gY3VycmVudGx5IHdvcmtpbmcgb24gdGhl IG10NzUzMCBkcml2ZXIgYW5kIEkgdGhpbmsgSSBmb3VuZCBhIHdheQp0aGF0IHRha2VzIHRoZSBs ZWFzdCBlZmZvcnQsIHdvbid0IGJyZWFrIHRoZSBBQkksIGFuZCBtb3N0IGltcG9ydGFudGx5LAp3 aWxsIHdvcmsuCgpBcyB3ZSBhY2tub3dsZWRnZWQsIHRoZSByZWdpc3RlcnMgYXJlIGluIHRoZSBz d2l0Y2ggYWRkcmVzcyBzcGFjZS4gVGhpcwptdXN0IGFsc28gbWVhbiB0aGF0IHRoZSBzd2l0Y2gg bXVzdCBiZSBwcm9wZXJseSBwcm9iZWQgYmVmb3JlIGRvaW5nCmFueXRoaW5nIHdpdGggdGhlIHJl Z2lzdGVycy4KCkknbSBub3Qgc3VyZSBob3cgZXhhY3RseSBtYWtpbmcgYSB0aW55IGRyaXZlciB3 b3VsZCB3b3JrIGluIHRoaXMgY2FzZS4KCkkgZmlndXJlZCB3ZSBjYW4ganVzdCBydW4gdGhlIHBo eSBtdXhpbmcgY29kZSBiZWZvcmUgdGhlIERTQSBkcml2ZXIKZXhpdHMgYmVjYXVzZSB0aGVyZSBh cmUgbm8gKENQVSkgcG9ydHMgZGVmaW5lZCBvbiB0aGUgZGV2aWNldHJlZS4gUmlnaHQKYWZ0ZXIg cHJvYmluZyBpcyBkb25lIG9uIG10NzUzMF9wcm9iZSwgYmVmb3JlIGRzYV9yZWdpc3Rlcl9zd2l0 Y2goKSBpcyBydW4uCgpGb3IgcHJvb2Ygb2YgY29uY2VwdCwgSSd2ZSBtb3ZlZCBzb21lIG5lY2Vz c2FyeSBzd2l0Y2ggcHJvYmluZyBjb2RlIGZyb20KbXQ3NTMwX3NldHVwKCkgdG8gbXQ3NTMwX3By b2JlKCkuIEFmdGVyIHRoZSBzd2l0Y2ggaXMgcHJvcGVybHkgcmVzZXQsCnBoeTQgaXMgbXV4ZWQs IGJlZm9yZSBkc2FfcmVnaXN0ZXJfc3dpdGNoKCkgaXMgcnVuLgoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L2RzYS9tdDc1MzAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYwppbmRleCBiMGQ5 ZWE3YjhlNmQuLjBjMWQ5ZjgzZTczYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUz MC5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYwpAQCAtMjA4NSw3ICsyMDg1LDYgQEAg bXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKICAJc3RydWN0IGRldmljZV9ub2Rl ICpkbiA9IE5VTEw7CiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CiAgCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbWFjX25wOwotCXN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwOwogIAlwaHlf aW50ZXJmYWNlX3QgaW50ZXJmYWNlOwogIAlzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcDsKICAJdTMy IGlkLCB2YWw7CkBAIC0yMTExLDU4ICsyMTEwLDYgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ff c3dpdGNoICpkcykKICAJZHMtPmFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTsK ICAJZHMtPm10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTsKICAKLQlpZiAocHJpdi0+aWQg PT0gSURfTVQ3NTMwKSB7Ci0JCXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShwcml2LT5jb3JlX3B3ciwg MTAwMDAwMCwgMTAwMDAwMCk7Ci0JCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0+Y29yZV9w d3IpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2Vycihwcml2LT5kZXYsCi0JCQkJIkZhaWxl ZCB0byBlbmFibGUgY29yZSBwb3dlcjogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9 Ci0KLQkJcmVndWxhdG9yX3NldF92b2x0YWdlKHByaXYtPmlvX3B3ciwgMzMwMDAwMCwgMzMwMDAw MCk7Ci0JCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0+aW9fcHdyKTsKLQkJaWYgKHJldCA8 IDApIHsKLQkJCWRldl9lcnIocHJpdi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBpbyBwd3I6ICVk XG4iLAotCQkJCXJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JLyogUmVzZXQgd2hv bGUgY2hpcCB0aHJvdWdoIGdwaW8gcGluIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvcgot CSAqIGRpZmZlcmVudCB0eXBlIG9mIGhhcmR3YXJlCi0JICovCi0JaWYgKHByaXYtPm1jbSkgewot CQlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LT5yc3RjKTsKLQkJdXNsZWVwX3JhbmdlKDEwMDAs IDExMDApOwotCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJzdGMpOwotCX0gZWxzZSB7 Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwcml2LT5yZXNldCwgMCk7Ci0JCXVzbGVlcF9y YW5nZSgxMDAwLCAxMTAwKTsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHByaXYtPnJlc2V0 LCAxKTsKLQl9Ci0KLQkvKiBXYWl0aW5nIGZvciBNVDc1MzAgZ290IHRvIHN0YWJsZSAqLwotCUlO SVRfTVQ3NTMwX0RVTU1ZX1BPTEwoJnAsIHByaXYsIE1UNzUzMF9IV1RSQVApOwotCXJldCA9IHJl YWR4X3BvbGxfdGltZW91dChfbXQ3NTMwX3JlYWQsICZwLCB2YWwsIHZhbCAhPSAwLAotCQkJCSAy MCwgMTAwMDAwMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycihwcml2LT5kZXYsICJyZXNl dCB0aW1lb3V0XG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZCA9IG10NzUzMF9yZWFkKHBy aXYsIE1UNzUzMF9DUkVWKTsKLQlpZCA+Pj0gQ0hJUF9OQU1FX1NISUZUOwotCWlmIChpZCAhPSBN VDc1MzBfSUQpIHsKLQkJZGV2X2Vycihwcml2LT5kZXYsICJjaGlwICV4IGNhbid0IGJlIHN1cHBv cnRlZFxuIiwgaWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZXNldCB0aGUgc3dp dGNoIHRocm91Z2ggaW50ZXJuYWwgcmVzZXQgKi8KLQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMw X1NZU19DVFJMLAotCQkgICAgIFNZU19DVFJMX1BIWV9SU1QgfCBTWVNfQ1RSTF9TV19SU1QgfAot CQkgICAgIFNZU19DVFJMX1JFR19SU1QpOwotCiAgCW10NzUzMF9wbGxfc2V0dXAocHJpdik7CiAg CiAgCS8qIExvd2VyIFR4IGRyaXZpbmcgZm9yIFRSR01JSSBwYXRoICovCkBAIC0zMDc5LDYgKzMw MjYsOSBAQCBtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQogIHsKICAJ c3RydWN0IG10NzUzMF9wcml2ICpwcml2OwogIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCXN0 cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwOworCXUzMiBpZCwgdmFsOworCWludCByZXQ7CiAgCiAg CWRuID0gbWRpb2Rldi0+ZGV2Lm9mX25vZGU7CiAgCkBAIC0zMTU1LDYgKzMxMDUsOTEgQEAgbXQ3 NTMwX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKICAJbXV0ZXhfaW5pdCgmcHJp di0+cmVnX211dGV4KTsKICAJZGV2X3NldF9kcnZkYXRhKCZtZGlvZGV2LT5kZXYsIHByaXYpOwog IAorCWlmIChwcml2LT5pZCA9PSBJRF9NVDc1MzApIHsKKwkJcmVndWxhdG9yX3NldF92b2x0YWdl KHByaXYtPmNvcmVfcHdyLCAxMDAwMDAwLCAxMDAwMDAwKTsKKwkJcmV0ID0gcmVndWxhdG9yX2Vu YWJsZShwcml2LT5jb3JlX3B3cik7CisJCWlmIChyZXQgPCAwKSB7dGhvdWdodCBhIGJpdCBvZiB3 aGF0IGV4YWN0bHkKKwkJCWRldl9lcnIocHJpdi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxl IGNvcmUgcG93ZXI6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJlZ3Vs YXRvcl9zZXRfdm9sdGFnZShwcml2LT5pb19wd3IsIDMzMDAwMDAsIDMzMDAwMDApOworCQlyZXQg PSByZWd1bGF0b3JfZW5hYmxlKHByaXYtPmlvX3B3cik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlk ZXZfZXJyKHByaXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgaW8gcHdyOiAlZFxuIiwKKwkJCQly ZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIFJlc2V0IHdob2xlIGNoaXAgdGhy b3VnaCBncGlvIHBpbiBvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyBmb3IKKwkgKiBkaWZmZXJl bnQgdHlwZSBvZiBoYXJkd2FyZQorCSAqLworCWlmIChwcml2LT5tY20pIHsKKwkJcmVzZXRfY29u dHJvbF9hc3NlcnQocHJpdi0+cnN0Yyk7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsKKwkJ cmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5yc3RjKTsKKwl9IGVsc2UgeworCQlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi0+cmVzZXQsIDApOworCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MTEwMCk7CisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwcml2LT5yZXNldCwgMSk7CisJfQor CisJLyogV2FpdGluZyBmb3IgTVQ3NTMwIGdvdCB0byBzdGFibGUgKi8KKwlJTklUX01UNzUzMF9E VU1NWV9QT0xMKCZwLCBwcml2LCBNVDc1MzBfSFdUUkFQKTsKKwlyZXQgPSByZWFkeF9wb2xsX3Rp bWVvdXQoX210NzUzMF9yZWFkLCAmcCwgdmFsLCB2YWwgIT0gMCwKKwkJCQkgMjAsIDEwMDAwMDAp OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIocHJpdi0+ZGV2LCAicmVzZXQgdGltZW91dFxu Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWQgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzBf Q1JFVik7CisJaWQgPj49IENISVBfTkFNRV9TSElGVDsKKwlpZiAoaWQgIT0gTVQ3NTMwX0lEKSB7 CisJCWRldl9lcnIocHJpdi0+ZGV2LCAiY2hpcCAleCBjYW4ndCBiZSBzdXBwb3J0ZWRcbiIsIGlk KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogUmVzZXQgdGhlIHN3aXRjaCB0aHJvdWdo IGludGVybmFsIHJlc2V0ICovCisJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9TWVNfQ1RSTCwK KwkJICAgICBTWVNfQ1RSTF9QSFlfUlNUIHwgU1lTX0NUUkxfU1dfUlNUIHwKKwkJICAgICBTWVNf Q1RSTF9SRUdfUlNUKTsKKworCS8qIFNldHVwIHBoeSBtdXhpbmcgKi8KKwltdXRleF9sb2NrKCZw cml2LT5yZWdfbXV0ZXgpOworCisJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMwX01IV1RS QVApOworCisJdmFsIHw9IE1IV1RSQVBfTUFOVUFMIHwgTUhXVFJBUF9QNV9NQUNfU0VMIHwgTUhX VFJBUF9QNV9ESVM7CisJdmFsICY9IH5NSFdUUkFQX1A1X1JHTUlJX01PREUgJiB+TUhXVFJBUF9Q SFkwX1NFTDsKKworCS8qIE1UNzUzMF9QNV9NT0RFX0dQSFlfUDQ6IDJuZCBHTUFDIC0+IFA1IC0+ IFA0ICovCisJdmFsICY9IH5NSFdUUkFQX1A1X01BQ19TRUwgJiB+TUhXVFJBUF9QNV9ESVM7CisK KwkvKiBTZXR1cCB0aGUgTUFDIGJ5IGRlZmF1bHQgZm9yIHRoZSBjcHUgcG9ydCAqLworCW10NzUz MF93cml0ZShwcml2LCBNVDc1MzBfUE1DUl9QKDUpLCAweDU2MzAwKTsKKworCXZhbCB8PSBNSFdU UkFQX1A1X1JHTUlJX01PREU7CisKKwkvKiBQNSBSR01JSSBSWCBDbG9jayBDb250cm9sOiBkZWxh eSBzZXR0aW5nIGZvciAxMDAwTSAqLworCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfUDVSR01J SVJYQ1IsIENTUl9SR01JSV9FREdFX0FMSUdOKTsKKworCS8qIFA1IFJHTUlJIFRYIENsb2NrIENv bnRyb2w6IGRlbGF5IHggKi8KKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1A1UkdNSUlUWENS LAorCQkgICAgIENTUl9SR01JSV9UWENfQ0ZHKDB4MTAgKyA0KSk7CisKKwkvKiByZWR1Y2UgUDUg UkdNSUkgVHggZHJpdmluZywgOG1BICovCisJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9JT19E UlZfQ1IsCisJCSAgICAgUDVfSU9fQ0xLX0RSVigxKSB8IFA1X0lPX0RBVEFfRFJWKDEpKTsKKwor CW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfTUhXVFJBUCwgdmFsKTsKKworCWRldl9pbmZvKHBy aXYtPmRldiwgIm11eGluZyBwaHk0IHRvIGdtYWM1XG4iKTsKKworCW11dGV4X3VubG9jaygmcHJp di0+cmVnX211dGV4KTsKKwogIAlyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LT5kcyk7 CiAgfQogIAoKWyAgICAwLjY1MDcyMV0gbXQ3NTMwIG1kaW8tYnVzOjFmOiBNVDc1MzAgYWRhcHRz IGFzIG11bHRpLWNoaXAgbW9kdWxlClsgICAgMC42NjAyODVdIG10NzUzMCBtZGlvLWJ1czoxZjog bXV4aW5nIHBoeTQgdG8gZ21hYzUKWyAgICAwLjY2NTI4NF0gbXQ3NTMwIG1kaW8tYnVzOjFmOiBu byBwb3J0cyBjaGlsZCBub2RlIGZvdW5kClsgICAgMC42NzA2ODhdIG10NzUzMDogcHJvYmUgb2Yg bWRpby1idXM6MWYgZmFpbGVkIHdpdGggZXJyb3IgLTIyClsgICAgMC42NzkxMThdIG10a19zb2Nf ZXRoIDFlMTAwMDAwLmV0aGVybmV0OiBnZW5lcmF0ZWQgcmFuZG9tIE1BQyBhZGRyZXNzIGI2Ojlj OjRkOmViOjFmOjhlClsgICAgMC42ODg5MjJdIG10a19zb2NfZXRoIDFlMTAwMDAwLmV0aGVybmV0 IGV0aDA6IG1lZGlhdGVrIGZyYW1lIGVuZ2luZSBhdCAweGJlMTAwMDAwLCBpcnEgMTUKCi0tLQoK IyBpZnVwIGV0aDAKWyAgIDMwLjY3NDU5NV0gbXRrX3NvY19ldGggMWUxMDAwMDAuZXRoZXJuZXQg ZXRoMDogY29uZmlndXJpbmcgZm9yIGZpeGVkL3JnbWlpIGxpbmsgbW9kZQpbICAgMzAuNjgzNDUx XSBtdGtfc29jX2V0aCAxZTEwMDAwMC5ldGhlcm5ldCBldGgwOiBMaW5rIGlzIFVwIC0gMUdicHMv RnVsbCAtIGZsb3cgY29udHJvbCByeC90eAojIHBpbmcgMTkyLjE2OC4yLjIKUElORyAxOTIuMTY4 LjIuMiAoMTkyLjE2OC4yLjIpOiA1NiBkYXRhIGJ5dGVzCjY0IGJ5dGVzIGZyb20gMTkyLjE2OC4y LjI6IHNlcT0wIHR0bD02NCB0aW1lPTAuNjg4IG1zCjY0IGJ5dGVzIGZyb20gMTkyLjE2OC4yLjI6 IHNlcT0xIHR0bD02NCB0aW1lPTAuMzc1IG1zCjY0IGJ5dGVzIGZyb20gMTkyLjE2OC4yLjI6IHNl cT0yIHR0bD02NCB0aW1lPTAuMzU3IG1zCjY0IGJ5dGVzIGZyb20gMTkyLjE2OC4yLjI6IHNlcT0z IHR0bD02NCB0aW1lPTAuMzIzIG1zCgotLS0KCiMgaXAgYQoxOiBsbzogPExPT1BCQUNLLFVQLExP V0VSX1VQPiBtdHUgNjU1MzYgcWRpc2Mgbm9xdWV1ZSBzdGF0ZSBVTktOT1dOIGdyb3VwIGRlZmF1 bHQgcWxlbiAxMDAwCiAgICAgbGluay9sb29wYmFjayAwMDowMDowMDowMDowMDowMCBicmQgMDA6 MDA6MDA6MDA6MDA6MDAKICAgICBpbmV0IDEyNy4wLjAuMS84IHNjb3BlIGhvc3QgbG8KICAgICAg ICB2YWxpZF9sZnQgZm9yZXZlciBwcmVmZXJyZWRfbGZ0IGZvcmV2ZXIKMjogZXRoMDogPEJST0FE Q0FTVCxNVUxUSUNBU1QsVVAsTE9XRVJfVVA+IG10dSAxNTAwIHFkaXNjIG1xIHN0YXRlIFVQIGdy b3VwIGRlZmF1bHQgcWxlbiAxMDAwCiAgICAgbGluay9ldGhlciBiNjo5Yzo0ZDplYjoxZjo4ZSBi cmQgZmY6ZmY6ZmY6ZmY6ZmY6ZmYKICAgICBpbmV0IDE5Mi4xNjguMi4xLzI0IHNjb3BlIGdsb2Jh bCBldGgwCiAgICAgICAgdmFsaWRfbGZ0IGZvcmV2ZXIgcHJlZmVycmVkX2xmdCBmb3JldmVyCgpU aGVyZSBpcyBhIGxvdCB0byBkbywgc3VjaCBhcyBmaXhpbmcgdGhlIG1ldGhvZCB0byByZWFkIGZy b20gdGhlCmRldmljZXRyZWUgYXMgaXQgcmVsaWVzIG9uIHRoZSBtYWMgbm9kZSB0aGUgQ1BVIHBv cnQgaXMgY29ubmVjdGVkIHRvIGJ1dAp3aGVuIHRoaXMgaXMgZmluYWxpc2VkLCB3ZSBzaG91bGQg YmUgYWJsZSB0byB1c2UgaXQgbGlrZSB0aGlzOgoKbWFjQDEgewoJY29tcGF0aWJsZSA9ICJtZWRp YXRlayxldGgtbWFjIjsKCXJlZyA9IDwxPjsKCXBoeS1tb2RlID0gInJnbWlpIjsKCXBoeS1oYW5k bGUgPSA8JmV0aHBoeTA+Owp9OwoKbWRpby1idXMgewoJI2FkZHJlc3MtY2VsbHMgPSA8MT47Cgkj c2l6ZS1jZWxscyA9IDwwPjsKCglldGhwaHkwOiBldGhlcm5ldC1waHlAMCB7CgkJcmVnID0gPDA+ OwoJfTsKCglzd2l0Y2hAMWYgewoJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMwIjsKCQly ZWcgPSA8MHgxZj47CgkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyAzMyAwPjsKCQljb3JlLXN1cHBseSA9 IDwmbXQ2MzIzX3ZwYV9yZWc+OwoJCWlvLXN1cHBseSA9IDwmbXQ2MzIzX3ZlbWMzdjNfcmVnPjsK CX07Cn07CgpBcsSxbsOnCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==