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 709BAF99344 for ; Thu, 23 Apr 2026 08:56:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To: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:List-Owner; bh=6j8TMuehB1vwPbMC4eMLGLbUX+KjScHIEJJ6/0doJIE=; b=wLj2W7aMABavFJh0GAG5oKMIIz UFRk5kyhwCnK1RsBZC95igFEgZnwzW5rexVcaSwsEzcSpW7XiQ6O71apgfTMUNi5sA9G9lUCbHj1p IqEmvhJYJHB5eRlQvDQXV2Hc50kPLDsh0rTQZdjk8Q2g4GWc/ZVFK4bPr6RJtp48+qTocRXCuRn4d hLjHNDx8l3twQtodZ27o5n/TJn8G1F2oDWP9nBsADDzaahgcmUBxcSVcHc248V+G9GBh4tNoN2xe+ W9E1w6M/44qKQq0nHUH8K0ejvhTC1XUU/3s+WbiqnrcZyBb6PkEOUz9uSwgTJpc3Ww71+O0Mb0EUR W2PJwZOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wFpre-0000000BHKU-1iv1; Thu, 23 Apr 2026 08:56:50 +0000 Received: from azure-sdnproxy.icoremail.net ([207.46.229.174]) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wFpra-0000000BHIG-3qra; Thu, 23 Apr 2026 08:56:48 +0000 Received: from E0004057DT.eswin.cn (unknown [10.11.96.26]) by app2 (Coremail) with SMTP id TQJkCgDX7aC93ulp6PkTAA--.23687S2; Thu, 23 Apr 2026 16:56:31 +0800 (CST) From: lizhi2@eswincomputing.com To: devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, rmk+kernel@armlinux.org.uk, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, linux-riscv@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, maxime.chevallier@bootlin.com Cc: ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com, pritesh.patel@einfochips.com, weishangjuan@eswincomputing.com, horms@kernel.org, Zhi Li Subject: [PATCH net-next v6 2/3] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing Date: Thu, 23 Apr 2026 16:56:23 +0800 Message-ID: <20260423085627.800-1-lizhi2@eswincomputing.com> X-Mailer: git-send-email 2.52.0.windows.1 In-Reply-To: <20260423085501.760-1-lizhi2@eswincomputing.com> References: <20260423085501.760-1-lizhi2@eswincomputing.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CM-TRANSID: TQJkCgDX7aC93ulp6PkTAA--.23687S2 X-Coremail-Antispam: 1UD129KBjvJXoW3Zw4ktF15AF1xAFyUtrWDArb_yoWDWFy5pF WkAFy5tr1jqr1fG3yvyF4kta4Fkw47WF1rArWfKFnFyF98trn8XayjyasIkF98Wry7Zr13 J3yUAFyxuF129rJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUBm14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2 Y2ka0xkIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r4a6rW5MxkIecxEwVCm-wCF04 k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18 MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr4 1lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1U MIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I 8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRMrWrDUUUU X-CM-SenderInfo: xol2xx2s6h245lqf0zpsxwx03jof0z/ X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260423_015647_142139_6E5DFE32 X-CRM114-Status: GOOD ( 16.74 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Zhi Li The second Ethernet controller (eth1) on the Eswin EIC7700 SoC may fail to sample RX data correctly at Gigabit speed due to EIC7700-specific receive clock to data skew at the MAC input in the silicon. The existing internal delay configuration does not provide sufficient adjustment range to compensate for this condition at 1000Mbps. Update the EIC7700 DWMAC glue driver to apply EIC7700-specific clock sampling inversion only during Gigabit operation on MAC instances that require it. TXD and RXD delay registers are explicitly cleared during initialization to override any residual configuration left by the bootloader. All HSP CSR register accesses are performed only after the required clocks are enabled. Fixes: ea77dbbdbc4e ("net: stmmac: add Eswin EIC7700 glue driver") Signed-off-by: Zhi Li --- .../ethernet/stmicro/stmmac/dwmac-eic7700.c | 183 ++++++++++++++---- 1 file changed, 140 insertions(+), 43 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c index bcb8e000e720..33144611da8d 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-eic7700.c @@ -28,20 +28,40 @@ /* * TX/RX Clock Delay Bit Masks: - * - TX Delay: bits [14:8] — TX_CLK delay (unit: 0.1ns per bit) - * - RX Delay: bits [30:24] — RX_CLK delay (unit: 0.1ns per bit) + * - TX Delay: bits [14:8] — TX_CLK delay (unit: 0.02ns per bit) + * - TX Invert : bit [15] + * - RX Delay: bits [30:24] — RX_CLK delay (unit: 0.02ns per bit) + * - RX Invert : bit [31] */ #define EIC7700_ETH_TX_ADJ_DELAY GENMASK(14, 8) #define EIC7700_ETH_RX_ADJ_DELAY GENMASK(30, 24) +#define EIC7700_ETH_TX_INV_DELAY BIT(15) +#define EIC7700_ETH_RX_INV_DELAY BIT(31) -#define EIC7700_MAX_DELAY_UNIT 0x7F +#define EIC7700_MAX_DELAY_STEPS 0x7F +#define EIC7700_DELAY_STEP_PS 20 +#define EIC7700_MAX_DELAY_PS \ + (EIC7700_MAX_DELAY_STEPS * EIC7700_DELAY_STEP_PS) static const char * const eic7700_clk_names[] = { "tx", "axi", "cfg", }; +struct eic7700_dwmac_data { + bool rgmii_rx_clk_invert; +}; + struct eic7700_qos_priv { + struct device *dev; struct plat_stmmacenet_data *plat_dat; + struct regmap *eic7700_hsp_regmap; + u32 eth_axi_lp_ctrl_offset; + u32 eth_phy_ctrl_offset; + u32 eth_txd_offset; + u32 eth_clk_offset; + u32 eth_rxd_offset; + u32 eth_clk_dly_param; + bool eth_rx_clk_inv; }; static int eic7700_clks_config(void *priv, bool enabled) @@ -61,8 +81,28 @@ static int eic7700_clks_config(void *priv, bool enabled) static int eic7700_dwmac_init(struct device *dev, void *priv) { struct eic7700_qos_priv *dwc = priv; + int ret; + + ret = eic7700_clks_config(dwc, true); + if (ret) + return ret; + + ret = regmap_set_bits(dwc->eic7700_hsp_regmap, + dwc->eth_phy_ctrl_offset, + EIC7700_ETH_TX_CLK_SEL | + EIC7700_ETH_PHY_INTF_SELI); + if (ret) { + eic7700_clks_config(dwc, false); + return ret; + } + + regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_axi_lp_ctrl_offset, + EIC7700_ETH_CSYSREQ_VAL); + + regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_txd_offset, 0); + regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_rxd_offset, 0); - return eic7700_clks_config(dwc, true); + return 0; } static void eic7700_dwmac_exit(struct device *dev, void *priv) @@ -88,18 +128,35 @@ static int eic7700_dwmac_resume(struct device *dev, void *priv) return ret; } +static void eic7700_dwmac_fix_speed(void *priv, phy_interface_t interface, + int speed, unsigned int mode) +{ + struct eic7700_qos_priv *dwc = (struct eic7700_qos_priv *)priv; + u32 dly_param = dwc->eth_clk_dly_param; + + switch (speed) { + case SPEED_1000: + if (dwc->eth_rx_clk_inv) + dly_param |= EIC7700_ETH_RX_INV_DELAY; + break; + case SPEED_100: + case SPEED_10: + break; + default: + dev_err(dwc->dev, "invalid speed %u\n", speed); + break; + } + + regmap_write(dwc->eic7700_hsp_regmap, dwc->eth_clk_offset, dly_param); +} + static int eic7700_dwmac_probe(struct platform_device *pdev) { + const struct eic7700_dwmac_data *data; struct plat_stmmacenet_data *plat_dat; struct stmmac_resources stmmac_res; struct eic7700_qos_priv *dwc_priv; - struct regmap *eic7700_hsp_regmap; - u32 eth_axi_lp_ctrl_offset; - u32 eth_phy_ctrl_offset; - u32 eth_phy_ctrl_regset; - u32 eth_rxd_dly_offset; - u32 eth_dly_param = 0; - u32 delay_ps; + u32 delay_ps, val; int i, ret; ret = stmmac_get_platform_resources(pdev, &stmmac_res); @@ -116,70 +173,95 @@ static int eic7700_dwmac_probe(struct platform_device *pdev) if (!dwc_priv) return -ENOMEM; + dwc_priv->dev = &pdev->dev; + + data = device_get_match_data(&pdev->dev); + if (!data) + return dev_err_probe(&pdev->dev, + -EINVAL, "no match data found\n"); + + dwc_priv->eth_rx_clk_inv = data->rgmii_rx_clk_invert; + /* Read rx-internal-delay-ps and update rx_clk delay */ if (!of_property_read_u32(pdev->dev.of_node, "rx-internal-delay-ps", &delay_ps)) { - u32 val = min(delay_ps / 100, EIC7700_MAX_DELAY_UNIT); + if (delay_ps % EIC7700_DELAY_STEP_PS) + return dev_err_probe(&pdev->dev, -EINVAL, + "rx delay must be multiple of %dps\n", + EIC7700_DELAY_STEP_PS); + + if (delay_ps > EIC7700_MAX_DELAY_PS) + return dev_err_probe(&pdev->dev, -EINVAL, + "rx delay out of range\n"); - eth_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY; - eth_dly_param |= FIELD_PREP(EIC7700_ETH_RX_ADJ_DELAY, val); - } else { - return dev_err_probe(&pdev->dev, -EINVAL, - "missing required property rx-internal-delay-ps\n"); + val = delay_ps / EIC7700_DELAY_STEP_PS; + + dwc_priv->eth_clk_dly_param &= ~EIC7700_ETH_RX_ADJ_DELAY; + dwc_priv->eth_clk_dly_param |= + FIELD_PREP(EIC7700_ETH_RX_ADJ_DELAY, val); } /* Read tx-internal-delay-ps and update tx_clk delay */ if (!of_property_read_u32(pdev->dev.of_node, "tx-internal-delay-ps", &delay_ps)) { - u32 val = min(delay_ps / 100, EIC7700_MAX_DELAY_UNIT); + if (delay_ps % EIC7700_DELAY_STEP_PS) + return dev_err_probe(&pdev->dev, -EINVAL, + "tx delay must be multiple of %dps\n", + EIC7700_DELAY_STEP_PS); + + if (delay_ps > EIC7700_MAX_DELAY_PS) + return dev_err_probe(&pdev->dev, -EINVAL, + "tx delay out of range\n"); + + val = delay_ps / EIC7700_DELAY_STEP_PS; - eth_dly_param &= ~EIC7700_ETH_TX_ADJ_DELAY; - eth_dly_param |= FIELD_PREP(EIC7700_ETH_TX_ADJ_DELAY, val); - } else { - return dev_err_probe(&pdev->dev, -EINVAL, - "missing required property tx-internal-delay-ps\n"); + dwc_priv->eth_clk_dly_param &= ~EIC7700_ETH_TX_ADJ_DELAY; + dwc_priv->eth_clk_dly_param |= + FIELD_PREP(EIC7700_ETH_TX_ADJ_DELAY, val); } - eic7700_hsp_regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, - "eswin,hsp-sp-csr"); - if (IS_ERR(eic7700_hsp_regmap)) + dwc_priv->eic7700_hsp_regmap = + syscon_regmap_lookup_by_phandle(pdev->dev.of_node, + "eswin,hsp-sp-csr"); + if (IS_ERR(dwc_priv->eic7700_hsp_regmap)) return dev_err_probe(&pdev->dev, - PTR_ERR(eic7700_hsp_regmap), + PTR_ERR(dwc_priv->eic7700_hsp_regmap), "Failed to get hsp-sp-csr regmap\n"); ret = of_property_read_u32_index(pdev->dev.of_node, "eswin,hsp-sp-csr", - 1, ð_phy_ctrl_offset); + 1, &dwc_priv->eth_phy_ctrl_offset); if (ret) return dev_err_probe(&pdev->dev, ret, "can't get eth_phy_ctrl_offset\n"); - regmap_read(eic7700_hsp_regmap, eth_phy_ctrl_offset, - ð_phy_ctrl_regset); - eth_phy_ctrl_regset |= - (EIC7700_ETH_TX_CLK_SEL | EIC7700_ETH_PHY_INTF_SELI); - regmap_write(eic7700_hsp_regmap, eth_phy_ctrl_offset, - eth_phy_ctrl_regset); - ret = of_property_read_u32_index(pdev->dev.of_node, "eswin,hsp-sp-csr", - 2, ð_axi_lp_ctrl_offset); + 2, &dwc_priv->eth_axi_lp_ctrl_offset); if (ret) return dev_err_probe(&pdev->dev, ret, "can't get eth_axi_lp_ctrl_offset\n"); - regmap_write(eic7700_hsp_regmap, eth_axi_lp_ctrl_offset, - EIC7700_ETH_CSYSREQ_VAL); + ret = of_property_read_u32_index(pdev->dev.of_node, + "eswin,hsp-sp-csr", + 3, &dwc_priv->eth_clk_offset); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "can't get eth_clk_offset\n"); ret = of_property_read_u32_index(pdev->dev.of_node, "eswin,hsp-sp-csr", - 3, ð_rxd_dly_offset); + 4, &dwc_priv->eth_txd_offset); if (ret) return dev_err_probe(&pdev->dev, ret, - "can't get eth_rxd_dly_offset\n"); + "can't get eth_txd_offset\n"); - regmap_write(eic7700_hsp_regmap, eth_rxd_dly_offset, - eth_dly_param); + ret = of_property_read_u32_index(pdev->dev.of_node, + "eswin,hsp-sp-csr", + 5, &dwc_priv->eth_rxd_offset); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "can't get eth_rxd_offset\n"); plat_dat->num_clks = ARRAY_SIZE(eic7700_clk_names); plat_dat->clks = devm_kcalloc(&pdev->dev, @@ -208,12 +290,27 @@ static int eic7700_dwmac_probe(struct platform_device *pdev) plat_dat->exit = eic7700_dwmac_exit; plat_dat->suspend = eic7700_dwmac_suspend; plat_dat->resume = eic7700_dwmac_resume; + plat_dat->fix_mac_speed = eic7700_dwmac_fix_speed; return devm_stmmac_pltfr_probe(pdev, plat_dat, &stmmac_res); } +static const struct eic7700_dwmac_data eic7700_dwmac_data = { + .rgmii_rx_clk_invert = false, +}; + +static const struct eic7700_dwmac_data eic7700_dwmac_data_clk_inversion = { + .rgmii_rx_clk_invert = true, +}; + static const struct of_device_id eic7700_dwmac_match[] = { - { .compatible = "eswin,eic7700-qos-eth" }, + { .compatible = "eswin,eic7700-qos-eth", + .data = &eic7700_dwmac_data, + }, + { + .compatible = "eswin,eic7700-qos-eth-clk-inversion", + .data = &eic7700_dwmac_data_clk_inversion, + }, { } }; MODULE_DEVICE_TABLE(of, eic7700_dwmac_match); -- 2.25.1 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 3A185F99356 for ; Thu, 23 Apr 2026 08:56:56 +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:References:In-Reply-To: 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: List-Owner; bh=oc7oLK9OPyLV4tBtyjaax0YDdWXC9bad4Kn+rIh5A58=; b=kV2tt2XXc+s3rb Dve/fnXF41ThN205WuVgryLuSNxMZdDt5bkYVguR4odgwtncMXQr2BiDyNYeRmTAfEndIz8wSnRHZ qU2xncR4kqU49o/f8ZpxQHb4sJMC1BZK4NTpLbqxmXS1hBAdNz4Gvi1Po0Z8ZayjevIPy3YBy1ZNS qiGsjmvOCHy4Hg44A3nkYANxj8WHPVtq5EnRuPuKcAZtnANjAlzu44j3ozrta1S/MnBOHFgSxjmjG zKOC/YfBE9VouS/JVgA6nQErgm/ZciJFiGqnONqB2HulSClJbS2R71Gsq4jJFdoXHT+sa7jFtHAJP 9t2ArGvlUqRFdkma5YsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wFpre-0000000BHK7-07mO; Thu, 23 Apr 2026 08:56:50 +0000 Received: from azure-sdnproxy.icoremail.net ([207.46.229.174]) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wFpra-0000000BHIG-3qra; Thu, 23 Apr 2026 08:56:48 +0000 Received: from E0004057DT.eswin.cn (unknown [10.11.96.26]) by app2 (Coremail) with SMTP id TQJkCgDX7aC93ulp6PkTAA--.23687S2; Thu, 23 Apr 2026 16:56:31 +0800 (CST) From: lizhi2@eswincomputing.com To: devicetree@vger.kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, rmk+kernel@armlinux.org.uk, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, linux-riscv@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, maxime.chevallier@bootlin.com Cc: ningyu@eswincomputing.com, linmin@eswincomputing.com, pinkesh.vaghela@einfochips.com, pritesh.patel@einfochips.com, weishangjuan@eswincomputing.com, horms@kernel.org, Zhi Li Subject: [PATCH net-next v6 2/3] net: stmmac: eic7700: enable clocks before syscon access and correct RX sampling timing Date: Thu, 23 Apr 2026 16:56:23 +0800 Message-ID: <20260423085627.800-1-lizhi2@eswincomputing.com> X-Mailer: git-send-email 2.52.0.windows.1 In-Reply-To: <20260423085501.760-1-lizhi2@eswincomputing.com> References: <20260423085501.760-1-lizhi2@eswincomputing.com> MIME-Version: 1.0 X-CM-TRANSID: TQJkCgDX7aC93ulp6PkTAA--.23687S2 X-Coremail-Antispam: 1UD129KBjvJXoW3Zw4ktF15AF1xAFyUtrWDArb_yoWDWFy5pF WkAFy5tr1jqr1fG3yvyF4kta4Fkw47WF1rArWfKFnFyF98trn8XayjyasIkF98Wry7Zr13 J3yUAFyxuF129rJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUBm14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gc CE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E 2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJV W8JwACjcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2 Y2ka0xkIwI1lw4CEc2x0rVAKj4xxMxkF7I0En4kS14v26r4a6rW5MxkIecxEwVCm-wCF04 k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18 MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr4 1lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1U MIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I 8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjTRMrWrDUUUU X-CM-SenderInfo: xol2xx2s6h245lqf0zpsxwx03jof0z/ X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260423_015647_142139_6E5DFE32 X-CRM114-Status: GOOD ( 16.74 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org RnJvbTogWmhpIExpIDxsaXpoaTJAZXN3aW5jb21wdXRpbmcuY29tPgoKVGhlIHNlY29uZCBFdGhl cm5ldCBjb250cm9sbGVyIChldGgxKSBvbiB0aGUgRXN3aW4gRUlDNzcwMCBTb0MgbWF5IGZhaWwK dG8gc2FtcGxlIFJYIGRhdGEgY29ycmVjdGx5IGF0IEdpZ2FiaXQgc3BlZWQgZHVlIHRvIEVJQzc3 MDAtc3BlY2lmaWMKcmVjZWl2ZSBjbG9jayB0byBkYXRhIHNrZXcgYXQgdGhlIE1BQyBpbnB1dCBp biB0aGUgc2lsaWNvbi4KClRoZSBleGlzdGluZyBpbnRlcm5hbCBkZWxheSBjb25maWd1cmF0aW9u IGRvZXMgbm90IHByb3ZpZGUgc3VmZmljaWVudAphZGp1c3RtZW50IHJhbmdlIHRvIGNvbXBlbnNh dGUgZm9yIHRoaXMgY29uZGl0aW9uIGF0IDEwMDBNYnBzLgpVcGRhdGUgdGhlIEVJQzc3MDAgRFdN QUMgZ2x1ZSBkcml2ZXIgdG8gYXBwbHkgRUlDNzcwMC1zcGVjaWZpYyBjbG9jawpzYW1wbGluZyBp bnZlcnNpb24gb25seSBkdXJpbmcgR2lnYWJpdCBvcGVyYXRpb24gb24gTUFDIGluc3RhbmNlcwp0 aGF0IHJlcXVpcmUgaXQuCgpUWEQgYW5kIFJYRCBkZWxheSByZWdpc3RlcnMgYXJlIGV4cGxpY2l0 bHkgY2xlYXJlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KdG8gb3ZlcnJpZGUgYW55IHJlc2lkdWFs IGNvbmZpZ3VyYXRpb24gbGVmdCBieSB0aGUgYm9vdGxvYWRlci4gQWxsIEhTUApDU1IgcmVnaXN0 ZXIgYWNjZXNzZXMgYXJlIHBlcmZvcm1lZCBvbmx5IGFmdGVyIHRoZSByZXF1aXJlZCBjbG9ja3Mg YXJlCmVuYWJsZWQuCgpGaXhlczogZWE3N2RiYmRiYzRlICgibmV0OiBzdG1tYWM6IGFkZCBFc3dp biBFSUM3NzAwIGdsdWUgZHJpdmVyIikKU2lnbmVkLW9mZi1ieTogWmhpIExpIDxsaXpoaTJAZXN3 aW5jb21wdXRpbmcuY29tPgotLS0KIC4uLi9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1l aWM3NzAwLmMgICB8IDE4MyArKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNDAg aW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZWljNzcwMC5jIGIvZHJpdmVycy9uZXQvZXRo ZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZWljNzcwMC5jCmluZGV4IGJjYjhlMDAwZTcyMC4u MzMxNDQ2MTFkYThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0 bW1hYy9kd21hYy1laWM3NzAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9z dG1tYWMvZHdtYWMtZWljNzcwMC5jCkBAIC0yOCwyMCArMjgsNDAgQEAKIAogLyoKICAqIFRYL1JY IENsb2NrIERlbGF5IEJpdCBNYXNrczoKLSAqIC0gVFggRGVsYXk6IGJpdHMgWzE0OjhdIOKAlCBU WF9DTEsgZGVsYXkgKHVuaXQ6IDAuMW5zIHBlciBiaXQpCi0gKiAtIFJYIERlbGF5OiBiaXRzIFsz MDoyNF0g4oCUIFJYX0NMSyBkZWxheSAodW5pdDogMC4xbnMgcGVyIGJpdCkKKyAqIC0gVFggRGVs YXk6IGJpdHMgWzE0OjhdIOKAlCBUWF9DTEsgZGVsYXkgKHVuaXQ6IDAuMDJucyBwZXIgYml0KQor ICogLSBUWCBJbnZlcnQgOiBiaXQgIFsxNV0KKyAqIC0gUlggRGVsYXk6IGJpdHMgWzMwOjI0XSDi gJQgUlhfQ0xLIGRlbGF5ICh1bml0OiAwLjAybnMgcGVyIGJpdCkKKyAqIC0gUlggSW52ZXJ0IDog Yml0ICBbMzFdCiAgKi8KICNkZWZpbmUgRUlDNzcwMF9FVEhfVFhfQURKX0RFTEFZCUdFTk1BU0so MTQsIDgpCiAjZGVmaW5lIEVJQzc3MDBfRVRIX1JYX0FESl9ERUxBWQlHRU5NQVNLKDMwLCAyNCkK KyNkZWZpbmUgRUlDNzcwMF9FVEhfVFhfSU5WX0RFTEFZCUJJVCgxNSkKKyNkZWZpbmUgRUlDNzcw MF9FVEhfUlhfSU5WX0RFTEFZCUJJVCgzMSkKIAotI2RlZmluZSBFSUM3NzAwX01BWF9ERUxBWV9V TklUIDB4N0YKKyNkZWZpbmUgRUlDNzcwMF9NQVhfREVMQVlfU1RFUFMJCTB4N0YKKyNkZWZpbmUg RUlDNzcwMF9ERUxBWV9TVEVQX1BTCQkyMAorI2RlZmluZSBFSUM3NzAwX01BWF9ERUxBWV9QUwlc CisJKEVJQzc3MDBfTUFYX0RFTEFZX1NURVBTICogRUlDNzcwMF9ERUxBWV9TVEVQX1BTKQogCiBz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVpYzc3MDBfY2xrX25hbWVzW10gPSB7CiAJInR4Iiwg ImF4aSIsICJjZmciLAogfTsKIAorc3RydWN0IGVpYzc3MDBfZHdtYWNfZGF0YSB7CisJYm9vbCBy Z21paV9yeF9jbGtfaW52ZXJ0OworfTsKKwogc3RydWN0IGVpYzc3MDBfcW9zX3ByaXYgeworCXN0 cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0 OworCXN0cnVjdCByZWdtYXAgKmVpYzc3MDBfaHNwX3JlZ21hcDsKKwl1MzIgZXRoX2F4aV9scF9j dHJsX29mZnNldDsKKwl1MzIgZXRoX3BoeV9jdHJsX29mZnNldDsKKwl1MzIgZXRoX3R4ZF9vZmZz ZXQ7CisJdTMyIGV0aF9jbGtfb2Zmc2V0OworCXUzMiBldGhfcnhkX29mZnNldDsKKwl1MzIgZXRo X2Nsa19kbHlfcGFyYW07CisJYm9vbCBldGhfcnhfY2xrX2ludjsKIH07CiAKIHN0YXRpYyBpbnQg ZWljNzcwMF9jbGtzX2NvbmZpZyh2b2lkICpwcml2LCBib29sIGVuYWJsZWQpCkBAIC02MSw4ICs4 MSwyOCBAQCBzdGF0aWMgaW50IGVpYzc3MDBfY2xrc19jb25maWcodm9pZCAqcHJpdiwgYm9vbCBl bmFibGVkKQogc3RhdGljIGludCBlaWM3NzAwX2R3bWFjX2luaXQoc3RydWN0IGRldmljZSAqZGV2 LCB2b2lkICpwcml2KQogewogCXN0cnVjdCBlaWM3NzAwX3Fvc19wcml2ICpkd2MgPSBwcml2Owor CWludCByZXQ7CisKKwlyZXQgPSBlaWM3NzAwX2Nsa3NfY29uZmlnKGR3YywgdHJ1ZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlZ21hcF9zZXRfYml0cyhkd2MtPmVpYzc3 MDBfaHNwX3JlZ21hcCwKKwkJCSAgICAgIGR3Yy0+ZXRoX3BoeV9jdHJsX29mZnNldCwKKwkJCSAg ICAgIEVJQzc3MDBfRVRIX1RYX0NMS19TRUwgfAorCQkJICAgICAgRUlDNzcwMF9FVEhfUEhZX0lO VEZfU0VMSSk7CisJaWYgKHJldCkgeworCQllaWM3NzAwX2Nsa3NfY29uZmlnKGR3YywgZmFsc2Up OworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ21hcF93cml0ZShkd2MtPmVpYzc3MDBfaHNwX3Jl Z21hcCwgZHdjLT5ldGhfYXhpX2xwX2N0cmxfb2Zmc2V0LAorCQkgICAgIEVJQzc3MDBfRVRIX0NT WVNSRVFfVkFMKTsKKworCXJlZ21hcF93cml0ZShkd2MtPmVpYzc3MDBfaHNwX3JlZ21hcCwgZHdj LT5ldGhfdHhkX29mZnNldCwgMCk7CisJcmVnbWFwX3dyaXRlKGR3Yy0+ZWljNzcwMF9oc3BfcmVn bWFwLCBkd2MtPmV0aF9yeGRfb2Zmc2V0LCAwKTsKIAotCXJldHVybiBlaWM3NzAwX2Nsa3NfY29u ZmlnKGR3YywgdHJ1ZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGVpYzc3MDBfZHdt YWNfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnByaXYpCkBAIC04OCwxOCArMTI4LDM1 IEBAIHN0YXRpYyBpbnQgZWljNzcwMF9kd21hY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2 b2lkICpwcml2KQogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGVpYzc3MDBfZHdtYWNf Zml4X3NwZWVkKHZvaWQgKnByaXYsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisJCQkJICAg IGludCBzcGVlZCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IGVpYzc3MDBfcW9zX3By aXYgKmR3YyA9IChzdHJ1Y3QgZWljNzcwMF9xb3NfcHJpdiAqKXByaXY7CisJdTMyIGRseV9wYXJh bSA9IGR3Yy0+ZXRoX2Nsa19kbHlfcGFyYW07CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBT UEVFRF8xMDAwOgorCQlpZiAoZHdjLT5ldGhfcnhfY2xrX2ludikKKwkJCWRseV9wYXJhbSB8PSBF SUM3NzAwX0VUSF9SWF9JTlZfREVMQVk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwOgorCWNh c2UgU1BFRURfMTA6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHdjLT5kZXYsICJp bnZhbGlkIHNwZWVkICV1XG4iLCBzcGVlZCk7CisJCWJyZWFrOworCX0KKworCXJlZ21hcF93cml0 ZShkd2MtPmVpYzc3MDBfaHNwX3JlZ21hcCwgZHdjLT5ldGhfY2xrX29mZnNldCwgZGx5X3BhcmFt KTsKK30KKwogc3RhdGljIGludCBlaWM3NzAwX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCiB7CisJY29uc3Qgc3RydWN0IGVpYzc3MDBfZHdtYWNfZGF0YSAqZGF0YTsK IAlzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0OwogCXN0cnVjdCBzdG1tYWNf cmVzb3VyY2VzIHN0bW1hY19yZXM7CiAJc3RydWN0IGVpYzc3MDBfcW9zX3ByaXYgKmR3Y19wcml2 OwotCXN0cnVjdCByZWdtYXAgKmVpYzc3MDBfaHNwX3JlZ21hcDsKLQl1MzIgZXRoX2F4aV9scF9j dHJsX29mZnNldDsKLQl1MzIgZXRoX3BoeV9jdHJsX29mZnNldDsKLQl1MzIgZXRoX3BoeV9jdHJs X3JlZ3NldDsKLQl1MzIgZXRoX3J4ZF9kbHlfb2Zmc2V0OwotCXUzMiBldGhfZGx5X3BhcmFtID0g MDsKLQl1MzIgZGVsYXlfcHM7CisJdTMyIGRlbGF5X3BzLCB2YWw7CiAJaW50IGksIHJldDsKIAog CXJldCA9IHN0bW1hY19nZXRfcGxhdGZvcm1fcmVzb3VyY2VzKHBkZXYsICZzdG1tYWNfcmVzKTsK QEAgLTExNiw3MCArMTczLDk1IEBAIHN0YXRpYyBpbnQgZWljNzcwMF9kd21hY19wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmICghZHdjX3ByaXYpCiAJCXJldHVybiAtRU5P TUVNOwogCisJZHdjX3ByaXYtPmRldiA9ICZwZGV2LT5kZXY7CisKKwlkYXRhID0gZGV2aWNlX2dl dF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUoJnBkZXYtPmRldiwKKwkJCQkgICAgIC1FSU5WQUwsICJubyBtYXRjaCBkYXRhIGZvdW5k XG4iKTsKKworCWR3Y19wcml2LT5ldGhfcnhfY2xrX2ludiA9IGRhdGEtPnJnbWlpX3J4X2Nsa19p bnZlcnQ7CisKIAkvKiBSZWFkIHJ4LWludGVybmFsLWRlbGF5LXBzIGFuZCB1cGRhdGUgcnhfY2xr IGRlbGF5ICovCiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwK IAkJCQkgICJyeC1pbnRlcm5hbC1kZWxheS1wcyIsICZkZWxheV9wcykpIHsKLQkJdTMyIHZhbCA9 IG1pbihkZWxheV9wcyAvIDEwMCwgRUlDNzcwMF9NQVhfREVMQVlfVU5JVCk7CisJCWlmIChkZWxh eV9wcyAlIEVJQzc3MDBfREVMQVlfU1RFUF9QUykKKwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZw ZGV2LT5kZXYsIC1FSU5WQUwsCisJCQkJInJ4IGRlbGF5IG11c3QgYmUgbXVsdGlwbGUgb2YgJWRw c1xuIiwKKwkJCQlFSUM3NzAwX0RFTEFZX1NURVBfUFMpOworCisJCWlmIChkZWxheV9wcyA+IEVJ Qzc3MDBfTUFYX0RFTEFZX1BTKQorCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwg LUVJTlZBTCwKKwkJCQkicnggZGVsYXkgb3V0IG9mIHJhbmdlXG4iKTsKIAotCQlldGhfZGx5X3Bh cmFtICY9IH5FSUM3NzAwX0VUSF9SWF9BREpfREVMQVk7Ci0JCWV0aF9kbHlfcGFyYW0gfD0gRklF TERfUFJFUChFSUM3NzAwX0VUSF9SWF9BREpfREVMQVksIHZhbCk7Ci0JfSBlbHNlIHsKLQkJcmV0 dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgLUVJTlZBTCwKLQkJCSJtaXNzaW5nIHJlcXVp cmVkIHByb3BlcnR5IHJ4LWludGVybmFsLWRlbGF5LXBzXG4iKTsKKwkJdmFsID0gZGVsYXlfcHMg LyBFSUM3NzAwX0RFTEFZX1NURVBfUFM7CisKKwkJZHdjX3ByaXYtPmV0aF9jbGtfZGx5X3BhcmFt ICY9IH5FSUM3NzAwX0VUSF9SWF9BREpfREVMQVk7CisJCWR3Y19wcml2LT5ldGhfY2xrX2RseV9w YXJhbSB8PQorCQkJCSBGSUVMRF9QUkVQKEVJQzc3MDBfRVRIX1JYX0FESl9ERUxBWSwgdmFsKTsK IAl9CiAKIAkvKiBSZWFkIHR4LWludGVybmFsLWRlbGF5LXBzIGFuZCB1cGRhdGUgdHhfY2xrIGRl bGF5ICovCiAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwKIAkJ CQkgICJ0eC1pbnRlcm5hbC1kZWxheS1wcyIsICZkZWxheV9wcykpIHsKLQkJdTMyIHZhbCA9IG1p bihkZWxheV9wcyAvIDEwMCwgRUlDNzcwMF9NQVhfREVMQVlfVU5JVCk7CisJCWlmIChkZWxheV9w cyAlIEVJQzc3MDBfREVMQVlfU1RFUF9QUykKKwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2 LT5kZXYsIC1FSU5WQUwsCisJCQkJInR4IGRlbGF5IG11c3QgYmUgbXVsdGlwbGUgb2YgJWRwc1xu IiwKKwkJCQlFSUM3NzAwX0RFTEFZX1NURVBfUFMpOworCisJCWlmIChkZWxheV9wcyA+IEVJQzc3 MDBfTUFYX0RFTEFZX1BTKQorCQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgLUVJ TlZBTCwKKwkJCQkidHggZGVsYXkgb3V0IG9mIHJhbmdlXG4iKTsKKworCQl2YWwgPSBkZWxheV9w cyAvIEVJQzc3MDBfREVMQVlfU1RFUF9QUzsKIAotCQlldGhfZGx5X3BhcmFtICY9IH5FSUM3NzAw X0VUSF9UWF9BREpfREVMQVk7Ci0JCWV0aF9kbHlfcGFyYW0gfD0gRklFTERfUFJFUChFSUM3NzAw X0VUSF9UWF9BREpfREVMQVksIHZhbCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGRldl9lcnJfcHJv YmUoJnBkZXYtPmRldiwgLUVJTlZBTCwKLQkJCSJtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IHR4 LWludGVybmFsLWRlbGF5LXBzXG4iKTsKKwkJZHdjX3ByaXYtPmV0aF9jbGtfZGx5X3BhcmFtICY9 IH5FSUM3NzAwX0VUSF9UWF9BREpfREVMQVk7CisJCWR3Y19wcml2LT5ldGhfY2xrX2RseV9wYXJh bSB8PQorCQkJCSBGSUVMRF9QUkVQKEVJQzc3MDBfRVRIX1RYX0FESl9ERUxBWSwgdmFsKTsKIAl9 CiAKLQllaWM3NzAwX2hzcF9yZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxl KHBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkJCSAgICAgImVzd2luLGhzcC1zcC1jc3IiKTsKLQlp ZiAoSVNfRVJSKGVpYzc3MDBfaHNwX3JlZ21hcCkpCisJZHdjX3ByaXYtPmVpYzc3MDBfaHNwX3Jl Z21hcCA9CisJCQlzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKHBkZXYtPmRldi5vZl9u b2RlLAorCQkJCQkJCSJlc3dpbixoc3Atc3AtY3NyIik7CisJaWYgKElTX0VSUihkd2NfcHJpdi0+ ZWljNzcwMF9oc3BfcmVnbWFwKSkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwK LQkJCQlQVFJfRVJSKGVpYzc3MDBfaHNwX3JlZ21hcCksCisJCQkJUFRSX0VSUihkd2NfcHJpdi0+ ZWljNzcwMF9oc3BfcmVnbWFwKSwKIAkJCQkiRmFpbGVkIHRvIGdldCBoc3Atc3AtY3NyIHJlZ21h cFxuIik7CiAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChwZGV2LT5kZXYub2Zf bm9kZSwKIAkJCQkJICJlc3dpbixoc3Atc3AtY3NyIiwKLQkJCQkJIDEsICZldGhfcGh5X2N0cmxf b2Zmc2V0KTsKKwkJCQkJIDEsICZkd2NfcHJpdi0+ZXRoX3BoeV9jdHJsX29mZnNldCk7CiAJaWYg KHJldCkKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgcmV0LAogCQkJCSAgICAg ImNhbid0IGdldCBldGhfcGh5X2N0cmxfb2Zmc2V0XG4iKTsKIAotCXJlZ21hcF9yZWFkKGVpYzc3 MDBfaHNwX3JlZ21hcCwgZXRoX3BoeV9jdHJsX29mZnNldCwKLQkJICAgICZldGhfcGh5X2N0cmxf cmVnc2V0KTsKLQlldGhfcGh5X2N0cmxfcmVnc2V0IHw9Ci0JCShFSUM3NzAwX0VUSF9UWF9DTEtf U0VMIHwgRUlDNzcwMF9FVEhfUEhZX0lOVEZfU0VMSSk7Ci0JcmVnbWFwX3dyaXRlKGVpYzc3MDBf aHNwX3JlZ21hcCwgZXRoX3BoeV9jdHJsX29mZnNldCwKLQkJICAgICBldGhfcGh5X2N0cmxfcmVn c2V0KTsKLQogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KHBkZXYtPmRldi5vZl9u b2RlLAogCQkJCQkgImVzd2luLGhzcC1zcC1jc3IiLAotCQkJCQkgMiwgJmV0aF9heGlfbHBfY3Ry bF9vZmZzZXQpOworCQkJCQkgMiwgJmR3Y19wcml2LT5ldGhfYXhpX2xwX2N0cmxfb2Zmc2V0KTsK IAlpZiAocmV0KQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCByZXQsCiAJCQkJ ICAgICAiY2FuJ3QgZ2V0IGV0aF9heGlfbHBfY3RybF9vZmZzZXRcbiIpOwogCi0JcmVnbWFwX3dy aXRlKGVpYzc3MDBfaHNwX3JlZ21hcCwgZXRoX2F4aV9scF9jdHJsX29mZnNldCwKLQkJICAgICBF SUM3NzAwX0VUSF9DU1lTUkVRX1ZBTCk7CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5k ZXgocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSAiZXN3aW4saHNwLXNwLWNzciIsCisJCQkJCSAz LCAmZHdjX3ByaXYtPmV0aF9jbGtfb2Zmc2V0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gZGV2X2Vy cl9wcm9iZSgmcGRldi0+ZGV2LCByZXQsCisJCQkJICAgICAiY2FuJ3QgZ2V0IGV0aF9jbGtfb2Zm c2V0XG4iKTsKIAogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KHBkZXYtPmRldi5v Zl9ub2RlLAogCQkJCQkgImVzd2luLGhzcC1zcC1jc3IiLAotCQkJCQkgMywgJmV0aF9yeGRfZGx5 X29mZnNldCk7CisJCQkJCSA0LCAmZHdjX3ByaXYtPmV0aF90eGRfb2Zmc2V0KTsKIAlpZiAocmV0 KQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmcGRldi0+ZGV2LCByZXQsCi0JCQkJICAgICAiY2Fu J3QgZ2V0IGV0aF9yeGRfZGx5X29mZnNldFxuIik7CisJCQkJICAgICAiY2FuJ3QgZ2V0IGV0aF90 eGRfb2Zmc2V0XG4iKTsKIAotCXJlZ21hcF93cml0ZShlaWM3NzAwX2hzcF9yZWdtYXAsIGV0aF9y eGRfZGx5X29mZnNldCwKLQkJICAgICBldGhfZGx5X3BhcmFtKTsKKwlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMl9pbmRleChwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICJlc3dpbixoc3Atc3At Y3NyIiwKKwkJCQkJIDUsICZkd2NfcHJpdi0+ZXRoX3J4ZF9vZmZzZXQpOworCWlmIChyZXQpCisJ CXJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIHJldCwKKwkJCQkgICAgICJjYW4ndCBn ZXQgZXRoX3J4ZF9vZmZzZXRcbiIpOwogCiAJcGxhdF9kYXQtPm51bV9jbGtzID0gQVJSQVlfU0la RShlaWM3NzAwX2Nsa19uYW1lcyk7CiAJcGxhdF9kYXQtPmNsa3MgPSBkZXZtX2tjYWxsb2MoJnBk ZXYtPmRldiwKQEAgLTIwOCwxMiArMjkwLDI3IEBAIHN0YXRpYyBpbnQgZWljNzcwMF9kd21hY19w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXBsYXRfZGF0LT5leGl0ID0gZWlj NzcwMF9kd21hY19leGl0OwogCXBsYXRfZGF0LT5zdXNwZW5kID0gZWljNzcwMF9kd21hY19zdXNw ZW5kOwogCXBsYXRfZGF0LT5yZXN1bWUgPSBlaWM3NzAwX2R3bWFjX3Jlc3VtZTsKKwlwbGF0X2Rh dC0+Zml4X21hY19zcGVlZCA9IGVpYzc3MDBfZHdtYWNfZml4X3NwZWVkOwogCiAJcmV0dXJuIGRl dm1fc3RtbWFjX3BsdGZyX3Byb2JlKHBkZXYsIHBsYXRfZGF0LCAmc3RtbWFjX3Jlcyk7CiB9CiAK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWljNzcwMF9kd21hY19kYXRhIGVpYzc3MDBfZHdtYWNfZGF0 YSA9IHsKKwkucmdtaWlfcnhfY2xrX2ludmVydCA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBlaWM3NzAwX2R3bWFjX2RhdGEgZWljNzcwMF9kd21hY19kYXRhX2Nsa19pbnZlcnNp b24gPSB7CisJLnJnbWlpX3J4X2Nsa19pbnZlcnQgPSB0cnVlLAorfTsKKwogc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWljNzcwMF9kd21hY19tYXRjaFtdID0gewotCXsgLmNvbXBh dGlibGUgPSAiZXN3aW4sZWljNzcwMC1xb3MtZXRoIiB9LAorCXsJLmNvbXBhdGlibGUgPSAiZXN3 aW4sZWljNzcwMC1xb3MtZXRoIiwKKwkJLmRhdGEgPSAmZWljNzcwMF9kd21hY19kYXRhLAorCX0s CisJeworCQkuY29tcGF0aWJsZSA9ICJlc3dpbixlaWM3NzAwLXFvcy1ldGgtY2xrLWludmVyc2lv biIsCisJCS5kYXRhID0gJmVpYzc3MDBfZHdtYWNfZGF0YV9jbGtfaW52ZXJzaW9uLAorCX0sCiAJ eyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZWljNzcwMF9kd21hY19tYXRjaCk7Ci0t IAoyLjI1LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2 Cg==