From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-177.mta1.migadu.com (out-177.mta1.migadu.com [95.215.58.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 51F253D6CCA for ; Thu, 30 Apr 2026 07:40:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777534825; cv=none; b=NIAaur4H7CiMqTM5JzwkwnnhKWOwLhpg6Zq0I0NnX5RRdw5txKsVYNqpVBmEFsK/TwqKIt/cg2xypxNj1AgmGM8hVo2UV4pacMVD9gq05AWDJ6M5MIoX7hIOkdcLZoD2viFDC7hH4o72NTp6lrWDSWx6MJMjcp36okwPECDusCc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777534825; c=relaxed/simple; bh=EyPHxf0ehRzXEsuoJlskpc8fqHb5W7l8rppyyRuygo8=; h=Mime-Version:Content-Type:Date:Message-Id:Cc:Subject:From:To: References:In-Reply-To; b=G5bF1D3hjeoZS3Y55xvS/SPYWp90W8OB/Cl+ULpLk/ynJlqyW5L0UIYUxPVP4m8peCLGnQwHH2Thj4qiIb1xCatsErT7WO2XnvGEWyk6RVVDREgdLa4mEqSxAKVXcEzbNIL1Fu8uq7wvl9gWed7IZEXGIhZkNSFii0S0Ey1PISg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=nQOR0aFq; arc=none smtp.client-ip=95.215.58.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="nQOR0aFq" Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1777534809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uWbOTpyRniAKjshI/2NiVtoUUbISuGkNkeknFU1zfVA=; b=nQOR0aFqq66/NT0rEUhedqhEbI9q6p60CQBfgO1Y5fIzXQfDLZO4MBdzUxPm1Y8C4DE1rF fiDZhka3pWI8VeHltk1tHQzdJ1uwPzKONw0mzQO6aFFzn57BhFko5RUeNto8dPUc4Fz8a2 gIcnb9knHuCNabztZ2kIiwPZcY0lJsQ= Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Thu, 30 Apr 2026 15:39:51 +0800 Message-Id: Cc: , , , , , , "Yixun Lan" , "Longbin Li" Subject: Re: [PATCH 2/2] phy: spacemit: Add USB3/PCIe comb PHY driver for Spacemit K3 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: "Ze Huang" To: "Inochi Amaoto" , "Vinod Koul" , "Neil Armstrong" , "Rob Herring" , "Krzysztof Kozlowski" , "Conor Dooley" , "Yixun Lan" , "Kees Cook" , "Gustavo A. R. Silva" , "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" , "Ze Huang" , "Alex Elder" References: <20260430022843.1090138-1-inochiama@gmail.com> <20260430022843.1090138-3-inochiama@gmail.com> In-Reply-To: <20260430022843.1090138-3-inochiama@gmail.com> X-Migadu-Flow: FLOW_OUT On Thu Apr 30, 2026 at 10:28 AM CST, Inochi Amaoto wrote: > The comb PHY on K3 requires to configure a syscon device for the > right mux configuration. And it requires calibration before any > usage. > > Add USB3/PCIe comb PHY driver for Spacemit K3. > > Signed-off-by: Inochi Amaoto > --- > drivers/phy/spacemit/Kconfig | 16 ++ > drivers/phy/spacemit/Makefile | 2 + > drivers/phy/spacemit/phy-k3-combphy.c | 250 ++++++++++++++++ > drivers/phy/spacemit/phy-k3-common.c | 398 ++++++++++++++++++++++++++ > drivers/phy/spacemit/phy-k3-common.h | 27 ++ > 5 files changed, 693 insertions(+) > create mode 100644 drivers/phy/spacemit/phy-k3-combphy.c > create mode 100644 drivers/phy/spacemit/phy-k3-common.c > create mode 100644 drivers/phy/spacemit/phy-k3-common.h > > diff --git a/drivers/phy/spacemit/Kconfig b/drivers/phy/spacemit/Kconfig > index 50b0005acf66..5fdf18fce499 100644 > --- a/drivers/phy/spacemit/Kconfig > +++ b/drivers/phy/spacemit/Kconfig > @@ -23,3 +23,19 @@ config PHY_SPACEMIT_K1_USB2 > help > Enable this to support K1 USB 2.0 PHY driver. This driver takes care = of > enabling and clock setup and will be used by K1 udc/ehci/otg/xhci dri= ver. > + > +config PHY_SPACEMIT_K3_COMMON_OPS > + tristate > + select MFD_SYSCON > + select GENERIC_PHY > + > +config PHY_SPACEMIT_K3_COMBO_PHY > + tristate "SpacemiT K3 USB3/PCIe PHY support" > + depends on (ARCH_SPACEMIT || COMPILE_TEST) && OF > + depends on COMMON_CLK > + select PHY_SPACEMIT_K3_COMMON_OPS > + help > + Enable this to support K3 USB3/PCIe combo PHY driver. This > + driver takes care of enabling and clock setup and will be used > + by K3 dwc3 driver. > + If unsure, say N. > diff --git a/drivers/phy/spacemit/Makefile b/drivers/phy/spacemit/Makefil= e > index a821a21d6142..41be7b0388da 100644 > --- a/drivers/phy/spacemit/Makefile > +++ b/drivers/phy/spacemit/Makefile > @@ -1,3 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0-only > obj-$(CONFIG_PHY_SPACEMIT_K1_PCIE) +=3D phy-k1-pcie.o > obj-$(CONFIG_PHY_SPACEMIT_K1_USB2) +=3D phy-k1-usb2.o > +obj-$(CONFIG_PHY_SPACEMIT_K3_COMBO_PHY) +=3D phy-k3-combphy.o > +obj-$(CONFIG_PHY_SPACEMIT_K3_COMMON_OPS) +=3D phy-k3-common.o > diff --git a/drivers/phy/spacemit/phy-k3-combphy.c b/drivers/phy/spacemit= /phy-k3-combphy.c > new file mode 100644 > index 000000000000..66fa6330ad6e > --- /dev/null > +++ b/drivers/phy/spacemit/phy-k3-combphy.c > @@ -0,0 +1,250 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * phy-k3-usb3.c - SpacemiT K3 Type-C Orientation Switch Driver > + * > + * Copyright (c) 2025 SpacemiT Technology Co. Ltd > + */ > + > +#include > +#include ... > + > + phy->apb_spare =3D syscon_regmap_lookup_by_phandle(node, "spacemit,apb-= spare"); > + if (IS_ERR(phy->apb_spare)) > + return dev_err_probe(dev, PTR_ERR(phy->apb_spare), > + "Failed to fine APB SPARE syscon"); typo, s/fine/find > + > + apmu =3D syscon_regmap_lookup_by_phandle_args(node, "spacemit,apmu", 1,= &config); > + if (IS_ERR(apmu)) > + return dev_err_probe(dev, PTR_ERR(phy->apb_spare), > + "Failed to fine APMU syscon"); 1. typo, s/fine/find 2. PTR_ERR(phy->apb_spare) should be PTR_ERR(apmu) > + > + ret =3D k3_comb_phy_update_config(apmu, config); > + if (ret < 0) > + return dev_err_probe(dev, ret, "Failed to set lane configuration"); > + > + phy->dev =3D dev; > + platform_set_drvdata(pdev, phy); > + > + ret =3D k3_phy_calibrate(phy->apb_spare); > + if (ret < 0) > + return dev_err_probe(dev, ret, "Failed to calibrate phy"); > + > + ret =3D k3_comb_phy_init_lanes(phy, config); > + if (ret < 0) > + return dev_err_probe(dev, ret, "Failed to init lanes"); > + > + provider =3D devm_of_phy_provider_register(dev, k3_comb_phy_xlate); > + if (IS_ERR(provider)) > + return dev_err_probe(dev, PTR_ERR(provider), > + "Failed to register provider\n"); > + > + return 0; > +} > + > +static const struct of_device_id k3_comb_phy_of_match[] =3D { > + { .compatible =3D "spacemit,k3-comb-phy" }, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, k3_comb_phy_of_match); > + > +static struct platform_driver k3_comb_phy_driver =3D { > + .probe =3D k3_comb_phy_probe, > + .driver =3D { > + .name =3D "spacemit,k3-comb-phy", > + .of_match_table =3D k3_comb_phy_of_match, > + }, > +}; > +module_platform_driver(k3_comb_phy_driver); > + > +MODULE_DESCRIPTION("SpacemiT K3 USB3/PCIe comb PHY driver"); > +MODULE_LICENSE("GPL"); > diff --git a/drivers/phy/spacemit/phy-k3-common.c b/drivers/phy/spacemit/= phy-k3-common.c > new file mode 100644 > index 000000000000..77c4b4073b96 > --- /dev/null > +++ b/drivers/phy/spacemit/phy-k3-common.c > @@ -0,0 +1,398 @@ > +// SPDX-License-Identifier: GPL-2.0-only > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > + > +#include "phy-k3-common.h" > + > +/* PHY Registers */ > +#define PHY_VERSION 0x0 > + > +#define PHY_RESET_CFG 0x04 > + > +#define PHY_RESET_RXBUF_RST BIT(0) > +#define PHY_RESET_SOFT_RST_PCS BIT(1) > +#define PHY_RESET_SOFT_RST_AHB BIT(2) > +#define PHY_RESET_EN_SD_AFTER_LOCK BIT(6) > + > +#define PHY_CLK_CFG 0x08 > + > +#define PHY_CLK_PLL_READY BIT(0) > +#define PHY_CLK_TXCLK_INV BIT(2) > +#define PHY_CLK_RXCLK_EN BIT(3) > +#define PHY_CLK_TXCLK_EN BIT(4) > +#define PHY_CLK_PCLK_EN BIT(5) > +#define PHY_CLK_PIPE_PCLK_EN BIT(6) > +#define PHY_CLK_REFCLK_FREQ GENMASK(10, 7) > +#define PHY_CLK_REFCLK_24M 2 > +#define PHY_CLK_SW_INIT_DONE BIT(11) > +#define PHY_CLK_PU_SSC_OUT BIT(23) > + > +#define PHY_MODE_CFG 0x0C > + > +#define PHY_MODE_PCIE_INT_EN BIT(0) > +#define PHY_MODE_LFPS_TPERIOD GENMASK(9, 8) > +#define PHY_MODE_LFPS_TPERIOD_USB 3 > + > +#define PHY_PU_SEL 0x40 > + > +#define PHY_PU_CFG_STATUS BIT(9) > +#define PHY_PU_OVRD_STATUS BIT(10) > + > +#define PHY_PU_CK_REG 0x54 > + > +#define PHY_PU_REFCLK_100 BIT(25) > + > +#define PHY_PLL_REG1 0x58 > + > +#define PHY_PLL_FREF_SEL GENMASK(15, 13) > +#define PHY_PLL_FREF_24M 0x1 > +#define PHY_PLL_SSC_DEP_SEL GENMASK(27, 24) > +#define PHY_PLL_SSC_5000PPM 0xa > +#define PHY_PLL_SSC_MODE GENMASK(29, 28) > +#define PHY_PLL_SSC_MODE_CENTER_SPREAD 0 > +#define PHY_PLL_SSC_MODE_UP_SPREAD 1 > +#define PHY_PLL_SSC_MODE_DOWN_SPREAD 2 > +#define PHY_PLL_SSC_MODE_DOWN_SPREAD1 3 > + > +#define PHY_PLL_REG2 0x5c > + > +#define PHY_PLL_SEL_REF100 BIT(21) > + > +/* PHY RX Register Definitions */ > +#define PHY_RX_REG_A 0x60 > + > +#define PHY_RX_REG0_RLOAD BIT(4) > +#define PHY_RX_REG1_RTERM GENMASK(11, 8) > +#define PHY_RX_REG1_RC_CALI GENMASK(15, 12) > +#define PHY_RX_REG2_CSEL GENMASK(19, 16) > +#define PHY_RX_REG2_FORCE_CSEL BIT(20) > +#define PHY_RX_REG2_PSEL GENMASK(23, 21) > +#define PHY_RX_REG3_I_LOAD GENMASK(26, 24) > +#define PHY_RX_REG3_SEL_CBOOST_CODE BIT(27) > +#define PHY_RX_REG3_ADJ_BIAS GENMASK(29, 28) > +#define PHY_RX_REG3_RDEG1 GENMASK(31, 30) > + > +#define PHY_RX_REG_B 0x64 > + > +#define PHY_RX_REGB_MASK GENMASK(23, 0) > + > +#define PHY_RX_REG4_RDEG2 GENMASK(2, 1) > +#define PHY_RX_REG4_ENVOS BIT(4) > +#define PHY_RX_REG4_RTERM_SEL BIT(5) > +#define PHY_RX_REG4_MANUAL_CFG BIT(7) > +#define PHY_RX_REG5_RCELL_VCM GENMASK(11, 8) > +#define PHY_RX_REG5_RCELL_BIAS GENMASK(15, 12) > +#define PHY_RX_REG6_H1_REG GENMASK(19, 16) > +#define PHY_RX_REG6_ADAPT_GAIN GENMASK(21, 20) > +#define PHY_RX_REG6_BYPASS_ADPT BIT(22) > + > +#define PHY_ADPT_CFG0 0x140 > +#define PHY_ADPT_AFE_RST_OVRD_EN BIT(1) > +#define PHY_ADPT_AFE_RST_OVRD_VAL BIT(4) > + > +#define PHY_RXEQ_TIME 0xb4 > +#define PHY_RXEQ_TIME_OVRD_POST_C_SOC BIT(21) > +#define PHY_RXEQ_TIME_CFG_AMP_SOC GENMASK(23, 22) > +#define PHY_RXEQ_TIME_AMP_SOC_650M 0 > +#define PHY_RXEQ_TIME_AMP_SOC_800M 1 > +#define PHY_RXEQ_TIME_AMP_SOC_870M 2 > +#define PHY_RXEQ_TIME_AMP_SOC_900M 3 > +#define PHY_RXEQ_TIME_OVRD_AMP_SOC BIT(24) > + > +#define PCIE_PU_ADDR_CLK_CFG 0x0008 > +#define PHY_CLK_PLL_READY BIT(0) > +#define PCIE_INITAL_TIMER GENMASK(6, 3) > +#define CFG_INTERNAL_TIMER_ADJ GENMASK(10, 7) > +#define CFG_SW_PHY_INIT_DONE BIT(11) > + > +/* Lane RX/TX configuration (per=E2=80=91lane, at lane_base) */ > +#define PCIE_RX_REG1 0x050 > +#define PCIE_TX_REG1 0x064 > + > +#define PCIE_PLL_TIMEOUT 500000 > +#define PCIE_POLL_DELAY 500 > + > + ... > +static int k3_pcie_phy_init(struct phy *phy) > +{ > + struct k3_lane_group *lg =3D phy_get_drvdata(phy); > + void __iomem *phy_base =3D lg->base + lg->data->offsets[0]; > + u32 val; > + int ret; > + int i; > + > + val =3D readl(phy_base + PHY_PLL_REG1); > + val =3D u32_replace_bits(val, 0x2, GENMASK(15, 12)); > + writel(val, phy_base + PHY_PLL_REG1); > + > + val =3D readl(phy_base + PHY_PLL_REG2); > + val =3D u32_replace_bits(val, 0, BIT(21)); > + writel(val, phy_base + PHY_PLL_REG2); > + > + for (i =3D 0; i < lg->data->lanes; i++) { > + void __iomem *lane_base =3D lg->base + lg->data->offsets[i]; > + > + val =3D readl(lane_base + PCIE_RX_REG1); > + val =3D u32_replace_bits(val, 0, 0x3); > + writel(val, phy_base + PCIE_RX_REG1); This looks like a copy-paste bug. Read from lane_base but write the modified value to phy_base. > + } > + > + val =3D readl(phy_base + PHY_PLL_REG2); > + val |=3D BIT(20); > + writel(val, phy_base + PHY_PLL_REG2); > + > + writel(0x00006505, phy_base + PCIE_RX_REG1); Is it intentional? The loop above configured PCIE_RX_REG1, while the hard-coded 0x00006505 overwrites what's done for lane0. > + > + /* pll_reg1 of lane0, disable SSC: pll_reg4[3:0] =3D 0 */ > + val =3D readl(phy_base + PHY_PLL_REG1); > + val =3D u32_replace_bits(val, 0, GENMASK(27, 24)); > + writel(val, phy_base + PHY_PLL_REG1); A little confusing here, comment says "pll_reg4[3:0] =3D 0" but the code is modifying PHY_PLL_REG1[27:24] > + > + for (i =3D 0; i < lg->data->lanes; i++) { > + void __iomem *lane_base =3D lg->base + lg->data->offsets[i]; > + > + /* set cfg_tx_send_dummy_data to be 1'b1 for disable dash data */ > + val =3D readl(lane_base + PHY_PU_SEL); > + val =3D u32_replace_bits(val, 1, BIT(13)); > + writel(val, lane_base + PHY_PU_SEL); > + > + /* disable en_sample_data_after_cdr_locked */ > + val =3D readl(lane_base + PHY_RESET_CFG); > + val =3D u32_replace_bits(val, 0, BIT(6)); > + writel(val, lane_base + PHY_RESET_CFG); > + > + /* Dynamic Lock */ > + val =3D readl(lane_base + PHY_MODE_CFG); > + val =3D u32_replace_bits(val, 1, BIT(2)); > + writel(val, lane_base + PHY_MODE_CFG); > + > + val =3D FIELD_PREP(GENMASK(7, 0), 0x10) | > + FIELD_PREP(GENMASK(15, 8), 0x78) | > + FIELD_PREP(GENMASK(23, 16), 0x98) | > + FIELD_PREP(GENMASK(31, 24), 0xdf); > + writel(val, lane_base + PHY_RX_REG_A); > + > + val =3D readl(lane_base + PHY_RX_REG_B); > + val &=3D ~PHY_RX_REGB_MASK; > + val |=3D FIELD_PREP(GENMASK(7, 0), 0xb4) | > + FIELD_PREP(GENMASK(15, 8), 0x88) | > + FIELD_PREP(GENMASK(23, 16), 0x28); > + writel(val, lane_base + PHY_RX_REG_B); Can we define macros for these values? Just like you did for PHY_CLK_CFG. > + > + /* Set init done */ > + val =3D readl(lane_base + PCIE_PU_ADDR_CLK_CFG); > + val =3D u32_replace_bits(val, 1, CFG_SW_PHY_INIT_DONE); > + writel(val, lane_base + PCIE_PU_ADDR_CLK_CFG); > + } > + > + ret =3D readl_poll_timeout(phy_base + PCIE_PU_ADDR_CLK_CFG, val, > + (val & PHY_CLK_PLL_READY), PCIE_POLL_DELAY, > + PCIE_PLL_TIMEOUT); > + if (ret) { > + dev_err(&lg->phy->dev, "PHY PLL lock timeout\n"); > + return ret; > + } > + > + return 0; > +} From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 91A99FF8875 for ; Thu, 30 Apr 2026 07:40:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:To:From:Subject: Cc:Message-Id:Date:Mime-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ae8N9tT41OtkYLcTKwDerOgiwJi935iNkvOot6/0fYY=; b=QzY/Wlayxnk9FW AzhP3dzs9B42HUGrA5tuOFr+CcifQqNvwsatoVa8dj9ChzZPuMU/1hIplu5XxLE6xs1cWkKnO97xn oC1Hpd75x6DKo/1H/vxs7kdkVy6T0BabWXoJpTYrDMiuk28fNMhs3oveuMCWYldpVfhNM9PGq32LB dCJvtSsnfmFUWmOnErBxiRqUkx7BoThIa75XkDBGqlMTbgPdx5+xlO77xXU3ICAzZuagowC+o0xD1 003r5m3ZXJP+AkPw9DDIypCsfqRMAnggFLE6x0uua3q0aEe+Xt5w9LzepuzaQ5YhG3Fg/7gIaEZli a16R9177NafS1TE2FR/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wIM0h-00000004uGe-40AT; Thu, 30 Apr 2026 07:40:35 +0000 Received: from out-179.mta1.migadu.com ([95.215.58.179]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wIM0g-00000004uDC-01x9 for linux-phy@lists.infradead.org; Thu, 30 Apr 2026 07:40:35 +0000 Mime-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1777534809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uWbOTpyRniAKjshI/2NiVtoUUbISuGkNkeknFU1zfVA=; b=nQOR0aFqq66/NT0rEUhedqhEbI9q6p60CQBfgO1Y5fIzXQfDLZO4MBdzUxPm1Y8C4DE1rF fiDZhka3pWI8VeHltk1tHQzdJ1uwPzKONw0mzQO6aFFzn57BhFko5RUeNto8dPUc4Fz8a2 gIcnb9knHuCNabztZ2kIiwPZcY0lJsQ= Date: Thu, 30 Apr 2026 15:39:51 +0800 Message-Id: Cc: , , , , , , "Yixun Lan" , "Longbin Li" Subject: Re: [PATCH 2/2] phy: spacemit: Add USB3/PCIe comb PHY driver for Spacemit K3 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: "Ze Huang" To: "Inochi Amaoto" , "Vinod Koul" , "Neil Armstrong" , "Rob Herring" , "Krzysztof Kozlowski" , "Conor Dooley" , "Yixun Lan" , "Kees Cook" , "Gustavo A. R. Silva" , "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" , "Ze Huang" , "Alex Elder" References: <20260430022843.1090138-1-inochiama@gmail.com> <20260430022843.1090138-3-inochiama@gmail.com> In-Reply-To: <20260430022843.1090138-3-inochiama@gmail.com> X-Migadu-Flow: FLOW_OUT X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260430_004034_290919_0747B369 X-CRM114-Status: GOOD ( 31.23 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org T24gVGh1IEFwciAzMCwgMjAyNiBhdCAxMDoyOCBBTSBDU1QsIElub2NoaSBBbWFvdG8gd3JvdGU6 Cj4gVGhlIGNvbWIgUEhZIG9uIEszIHJlcXVpcmVzIHRvIGNvbmZpZ3VyZSBhIHN5c2NvbiBkZXZp Y2UgZm9yIHRoZQo+IHJpZ2h0IG11eCBjb25maWd1cmF0aW9uLiBBbmQgaXQgcmVxdWlyZXMgY2Fs aWJyYXRpb24gYmVmb3JlIGFueQo+IHVzYWdlLgo+Cj4gQWRkIFVTQjMvUENJZSBjb21iIFBIWSBk cml2ZXIgZm9yIFNwYWNlbWl0IEszLgo+Cj4gU2lnbmVkLW9mZi1ieTogSW5vY2hpIEFtYW90byA8 aW5vY2hpYW1hQGdtYWlsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9waHkvc3BhY2VtaXQvS2NvbmZp ZyAgICAgICAgICB8ICAxNiArKwo+ICBkcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZSAgICAg ICAgIHwgICAyICsKPiAgZHJpdmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYyB8IDI1 MCArKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvcGh5L3NwYWNlbWl0L3BoeS1rMy1jb21tb24u YyAgfCAzOTggKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9waHkvc3BhY2Vt aXQvcGh5LWszLWNvbW1vbi5oICB8ICAyNyArKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDY5MyBpbnNl cnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9zcGFjZW1pdC9waHkt azMtY29tYnBoeS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9zcGFjZW1pdC9w aHktazMtY29tbW9uLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L3NwYWNlbWl0 L3BoeS1rMy1jb21tb24uaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3NwYWNlbWl0L0tj b25maWcgYi9kcml2ZXJzL3BoeS9zcGFjZW1pdC9LY29uZmlnCj4gaW5kZXggNTBiMDAwNWFjZjY2 Li41ZmRmMThmY2U0OTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvc3BhY2VtaXQvS2NvbmZp Zwo+ICsrKyBiL2RyaXZlcnMvcGh5L3NwYWNlbWl0L0tjb25maWcKPiBAQCAtMjMsMyArMjMsMTkg QEAgY29uZmlnIFBIWV9TUEFDRU1JVF9LMV9VU0IyCj4gIAloZWxwCj4gIAkgIEVuYWJsZSB0aGlz IHRvIHN1cHBvcnQgSzEgVVNCIDIuMCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciB0YWtlcyBjYXJl IG9mCj4gIAkgIGVuYWJsaW5nIGFuZCBjbG9jayBzZXR1cCBhbmQgd2lsbCBiZSB1c2VkIGJ5IEsx IHVkYy9laGNpL290Zy94aGNpIGRyaXZlci4KPiArCj4gK2NvbmZpZyBQSFlfU1BBQ0VNSVRfSzNf Q09NTU9OX09QUwo+ICsJdHJpc3RhdGUKPiArCXNlbGVjdCBNRkRfU1lTQ09OCj4gKwlzZWxlY3Qg R0VORVJJQ19QSFkKPiArCj4gK2NvbmZpZyBQSFlfU1BBQ0VNSVRfSzNfQ09NQk9fUEhZCj4gKwl0 cmlzdGF0ZSAiU3BhY2VtaVQgSzMgVVNCMy9QQ0llIFBIWSBzdXBwb3J0Igo+ICsJZGVwZW5kcyBv biAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpICYmIE9GCj4gKwlkZXBlbmRzIG9uIENP TU1PTl9DTEsKPiArCXNlbGVjdCBQSFlfU1BBQ0VNSVRfSzNfQ09NTU9OX09QUwo+ICsJaGVscAo+ ICsJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEszIFVTQjMvUENJZSBjb21ibyBQSFkgZHJpdmVy LiBUaGlzCj4gKwkgIGRyaXZlciB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nIGFuZCBjbG9jayBzZXR1 cCBhbmQgd2lsbCBiZSB1c2VkCj4gKwkgIGJ5IEszIGR3YzMgZHJpdmVyLgo+ICsJICBJZiB1bnN1 cmUsIHNheSBOLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZSBi L2RyaXZlcnMvcGh5L3NwYWNlbWl0L01ha2VmaWxlCj4gaW5kZXggYTgyMWEyMWQ2MTQyLi40MWJl N2IwMzg4ZGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvc3BhY2VtaXQvTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZQo+IEBAIC0xLDMgKzEsNSBAQAo+ICAj IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiAgb2JqLSQoQ09ORklHX1BI WV9TUEFDRU1JVF9LMV9QQ0lFKQkJKz0gcGh5LWsxLXBjaWUubwo+ICBvYmotJChDT05GSUdfUEhZ X1NQQUNFTUlUX0sxX1VTQjIpCQkrPSBwaHktazEtdXNiMi5vCj4gK29iai0kKENPTkZJR19QSFlf U1BBQ0VNSVRfSzNfQ09NQk9fUEhZKQkJKz0gcGh5LWszLWNvbWJwaHkubwo+ICtvYmotJChDT05G SUdfUEhZX1NQQUNFTUlUX0szX0NPTU1PTl9PUFMpCSs9IHBoeS1rMy1jb21tb24ubwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BoeS9zcGFjZW1pdC9waHktazMtY29tYnBoeS5jIGIvZHJpdmVycy9w aHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi42NmZhNjMzMGFkNmUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYwo+IEBAIC0wLDAgKzEsMjUwIEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoKPiArICogcGh5 LWszLXVzYjMuYyAtIFNwYWNlbWlUIEszIFR5cGUtQyBPcmllbnRhdGlvbiBTd2l0Y2ggRHJpdmVy Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBTcGFjZW1pVCBUZWNobm9sb2d5IENvLiBM dGQKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLmg+CgouLi4KCj4gKwo+ICsJcGh5LT5hcGJfc3BhcmUgPSBzeXNjb25fcmVnbWFw X2xvb2t1cF9ieV9waGFuZGxlKG5vZGUsICJzcGFjZW1pdCxhcGItc3BhcmUiKTsKPiArCWlmIChJ U19FUlIocGh5LT5hcGJfc3BhcmUpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRS X0VSUihwaHktPmFwYl9zcGFyZSksCj4gKwkJCQkgICAgICJGYWlsZWQgdG8gZmluZSBBUEIgU1BB UkUgc3lzY29uIik7Cgp0eXBvLCBzL2ZpbmUvZmluZAoKPiArCj4gKwlhcG11ID0gc3lzY29uX3Jl Z21hcF9sb29rdXBfYnlfcGhhbmRsZV9hcmdzKG5vZGUsICJzcGFjZW1pdCxhcG11IiwgMSwgJmNv bmZpZyk7Cj4gKwlpZiAoSVNfRVJSKGFwbXUpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgUFRSX0VSUihwaHktPmFwYl9zcGFyZSksCj4gKwkJCQkgICAgICJGYWlsZWQgdG8gZmluZSBB UE1VIHN5c2NvbiIpOwoKMS4gdHlwbywgcy9maW5lL2ZpbmQKMi4gUFRSX0VSUihwaHktPmFwYl9z cGFyZSkgc2hvdWxkIGJlIFBUUl9FUlIoYXBtdSkKCj4gKwo+ICsJcmV0ID0gazNfY29tYl9waHlf dXBkYXRlX2NvbmZpZyhhcG11LCBjb25maWcpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gc2V0IGxhbmUgY29uZmlndXJhdGlv biIpOwo+ICsKPiArCXBoeS0+ZGV2ID0gZGV2Owo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgcGh5KTsKPiArCj4gKwlyZXQgPSBrM19waHlfY2FsaWJyYXRlKHBoeS0+YXBiX3NwYXJlKTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFp bGVkIHRvIGNhbGlicmF0ZSBwaHkiKTsKPiArCj4gKwlyZXQgPSBrM19jb21iX3BoeV9pbml0X2xh bmVzKHBoeSwgY29uZmlnKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgcmV0LCAiRmFpbGVkIHRvIGluaXQgbGFuZXMiKTsKPiArCj4gKwlwcm92aWRlciA9 IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgazNfY29tYl9waHlfeGxhdGUpOwo+ ICsJaWYgKElTX0VSUihwcm92aWRlcikpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQ VFJfRVJSKHByb3ZpZGVyKSwKPiArCQkJCSAgICAgIkZhaWxlZCB0byByZWdpc3RlciBwcm92aWRl clxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGszX2NvbWJfcGh5X29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxl ID0gInNwYWNlbWl0LGszLWNvbWItcGh5IiB9LAo+ICsJeyB9LAo+ICt9Owo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBrM19jb21iX3BoeV9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBrM19jb21iX3BoeV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBrM19j b21iX3BoeV9wcm9iZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAic3BhY2VtaXQsazMt Y29tYi1waHkiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGszX2NvbWJfcGh5X29mX21hdGNoLAo+ ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrM19jb21iX3BoeV9kcml2ZXIp Owo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGFjZW1pVCBLMyBVU0IzL1BDSWUgY29tYiBQ SFkgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbW1vbi5jIGIvZHJpdmVycy9waHkvc3BhY2VtaXQv cGh5LWszLWNvbW1vbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjc3YzRiNDA3M2I5Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3BoeS9zcGFj ZW1pdC9waHktazMtY29tbW9uLmMKPiBAQCAtMCwwICsxLDM5OCBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0Zmll bGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NsZWFudXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lv Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2Iu aD4KPiArCj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waHkvcGh5Lmg+Cj4gKwo+ICsjaW5jbHVk ZSAicGh5LWszLWNvbW1vbi5oIgo+ICsKPiArLyogUEhZIFJlZ2lzdGVycyAqLwo+ICsjZGVmaW5l IFBIWV9WRVJTSU9OCQkJMHgwCj4gKwo+ICsjZGVmaW5lIFBIWV9SRVNFVF9DRkcJCQkweDA0Cj4g Kwo+ICsjZGVmaW5lIFBIWV9SRVNFVF9SWEJVRl9SU1QJCUJJVCgwKQo+ICsjZGVmaW5lIFBIWV9S RVNFVF9TT0ZUX1JTVF9QQ1MJCUJJVCgxKQo+ICsjZGVmaW5lIFBIWV9SRVNFVF9TT0ZUX1JTVF9B SEIJCUJJVCgyKQo+ICsjZGVmaW5lIFBIWV9SRVNFVF9FTl9TRF9BRlRFUl9MT0NLCUJJVCg2KQo+ ICsKPiArI2RlZmluZSBQSFlfQ0xLX0NGRwkJCTB4MDgKPiArCj4gKyNkZWZpbmUgUEhZX0NMS19Q TExfUkVBRFkJCUJJVCgwKQo+ICsjZGVmaW5lIFBIWV9DTEtfVFhDTEtfSU5WCQlCSVQoMikKPiAr I2RlZmluZSBQSFlfQ0xLX1JYQ0xLX0VOCQlCSVQoMykKPiArI2RlZmluZSBQSFlfQ0xLX1RYQ0xL X0VOCQlCSVQoNCkKPiArI2RlZmluZSBQSFlfQ0xLX1BDTEtfRU4JCQlCSVQoNSkKPiArI2RlZmlu ZSBQSFlfQ0xLX1BJUEVfUENMS19FTgkJQklUKDYpCj4gKyNkZWZpbmUgUEhZX0NMS19SRUZDTEtf RlJFUQkJR0VOTUFTSygxMCwgNykKPiArI2RlZmluZSBQSFlfQ0xLX1JFRkNMS18yNE0JCTIKPiAr I2RlZmluZSBQSFlfQ0xLX1NXX0lOSVRfRE9ORQkJQklUKDExKQo+ICsjZGVmaW5lIFBIWV9DTEtf UFVfU1NDX09VVAkJQklUKDIzKQo+ICsKPiArI2RlZmluZSBQSFlfTU9ERV9DRkcJCQkweDBDCj4g Kwo+ICsjZGVmaW5lIFBIWV9NT0RFX1BDSUVfSU5UX0VOCQlCSVQoMCkKPiArI2RlZmluZSBQSFlf TU9ERV9MRlBTX1RQRVJJT0QJCUdFTk1BU0soOSwgOCkKPiArI2RlZmluZSBQSFlfTU9ERV9MRlBT X1RQRVJJT0RfVVNCCTMKPiArCj4gKyNkZWZpbmUgUEhZX1BVX1NFTAkJCTB4NDAKPiArCj4gKyNk ZWZpbmUgUEhZX1BVX0NGR19TVEFUVVMJCUJJVCg5KQo+ICsjZGVmaW5lIFBIWV9QVV9PVlJEX1NU QVRVUwkJQklUKDEwKQo+ICsKPiArI2RlZmluZSBQSFlfUFVfQ0tfUkVHCQkJMHg1NAo+ICsKPiAr I2RlZmluZSBQSFlfUFVfUkVGQ0xLXzEwMAkJQklUKDI1KQo+ICsKPiArI2RlZmluZSBQSFlfUExM X1JFRzEJCQkweDU4Cj4gKwo+ICsjZGVmaW5lIFBIWV9QTExfRlJFRl9TRUwJCUdFTk1BU0soMTUs IDEzKQo+ICsjZGVmaW5lIFBIWV9QTExfRlJFRl8yNE0JCTB4MQo+ICsjZGVmaW5lIFBIWV9QTExf U1NDX0RFUF9TRUwJCUdFTk1BU0soMjcsIDI0KQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDXzUwMDBQ UE0JCTB4YQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREUJCUdFTk1BU0soMjksIDI4KQo+ICsj ZGVmaW5lIFBIWV9QTExfU1NDX01PREVfQ0VOVEVSX1NQUkVBRAkwCj4gKyNkZWZpbmUgUEhZX1BM TF9TU0NfTU9ERV9VUF9TUFJFQUQJMQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREVfRE9XTl9T UFJFQUQJMgo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREVfRE9XTl9TUFJFQUQxCTMKPiArCj4g KyNkZWZpbmUgUEhZX1BMTF9SRUcyCQkJMHg1Ywo+ICsKPiArI2RlZmluZSBQSFlfUExMX1NFTF9S RUYxMDAJCUJJVCgyMSkKPiArCj4gKy8qIFBIWSBSWCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLwo+ ICsjZGVmaW5lIFBIWV9SWF9SRUdfQQkJCTB4NjAKPiArCj4gKyNkZWZpbmUgUEhZX1JYX1JFRzBf UkxPQUQJCUJJVCg0KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUcxX1JURVJNCQlHRU5NQVNLKDExLCA4 KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUcxX1JDX0NBTEkJCUdFTk1BU0soMTUsIDEyKQo+ICsjZGVm aW5lIFBIWV9SWF9SRUcyX0NTRUwJCUdFTk1BU0soMTksIDE2KQo+ICsjZGVmaW5lIFBIWV9SWF9S RUcyX0ZPUkNFX0NTRUwJCUJJVCgyMCkKPiArI2RlZmluZSBQSFlfUlhfUkVHMl9QU0VMCQlHRU5N QVNLKDIzLCAyMSkKPiArI2RlZmluZSBQSFlfUlhfUkVHM19JX0xPQUQJCUdFTk1BU0soMjYsIDI0 KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUczX1NFTF9DQk9PU1RfQ09ERQlCSVQoMjcpCj4gKyNkZWZp bmUgUEhZX1JYX1JFRzNfQURKX0JJQVMJCUdFTk1BU0soMjksIDI4KQo+ICsjZGVmaW5lIFBIWV9S WF9SRUczX1JERUcxCQlHRU5NQVNLKDMxLCAzMCkKPiArCj4gKyNkZWZpbmUgUEhZX1JYX1JFR19C CQkJMHg2NAo+ICsKPiArI2RlZmluZSBQSFlfUlhfUkVHQl9NQVNLCQlHRU5NQVNLKDIzLCAwKQo+ ICsKPiArI2RlZmluZSBQSFlfUlhfUkVHNF9SREVHMgkJR0VOTUFTSygyLCAxKQo+ICsjZGVmaW5l IFBIWV9SWF9SRUc0X0VOVk9TCQlCSVQoNCkKPiArI2RlZmluZSBQSFlfUlhfUkVHNF9SVEVSTV9T RUwJCUJJVCg1KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc0X01BTlVBTF9DRkcJCUJJVCg3KQo+ICsj ZGVmaW5lIFBIWV9SWF9SRUc1X1JDRUxMX1ZDTQkJR0VOTUFTSygxMSwgOCkKPiArI2RlZmluZSBQ SFlfUlhfUkVHNV9SQ0VMTF9CSUFTCQlHRU5NQVNLKDE1LCAxMikKPiArI2RlZmluZSBQSFlfUlhf UkVHNl9IMV9SRUcJCUdFTk1BU0soMTksIDE2KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc2X0FEQVBU X0dBSU4JCUdFTk1BU0soMjEsIDIwKQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc2X0JZUEFTU19BRFBU CQlCSVQoMjIpCj4gKwo+ICsjZGVmaW5lIFBIWV9BRFBUX0NGRzAJCQkweDE0MAo+ICsjZGVmaW5l IFBIWV9BRFBUX0FGRV9SU1RfT1ZSRF9FTglCSVQoMSkKPiArI2RlZmluZSBQSFlfQURQVF9BRkVf UlNUX09WUkRfVkFMCUJJVCg0KQo+ICsKPiArI2RlZmluZSBQSFlfUlhFUV9USU1FCQkJMHhiNAo+ ICsjZGVmaW5lIFBIWV9SWEVRX1RJTUVfT1ZSRF9QT1NUX0NfU09DCUJJVCgyMSkKPiArI2RlZmlu ZSBQSFlfUlhFUV9USU1FX0NGR19BTVBfU09DCUdFTk1BU0soMjMsIDIyKQo+ICsjZGVmaW5lIFBI WV9SWEVRX1RJTUVfQU1QX1NPQ182NTBNCTAKPiArI2RlZmluZSBQSFlfUlhFUV9USU1FX0FNUF9T T0NfODAwTQkxCj4gKyNkZWZpbmUgUEhZX1JYRVFfVElNRV9BTVBfU09DXzg3ME0JMgo+ICsjZGVm aW5lIFBIWV9SWEVRX1RJTUVfQU1QX1NPQ185MDBNCTMKPiArI2RlZmluZSBQSFlfUlhFUV9USU1F X09WUkRfQU1QX1NPQwlCSVQoMjQpCj4gKwo+ICsjZGVmaW5lIFBDSUVfUFVfQUREUl9DTEtfQ0ZH CQkweDAwMDgKPiArI2RlZmluZSBQSFlfQ0xLX1BMTF9SRUFEWQkJQklUKDApCj4gKyNkZWZpbmUg UENJRV9JTklUQUxfVElNRVIJCUdFTk1BU0soNiwgMykKPiArI2RlZmluZSBDRkdfSU5URVJOQUxf VElNRVJfQURKCQlHRU5NQVNLKDEwLCA3KQo+ICsjZGVmaW5lIENGR19TV19QSFlfSU5JVF9ET05F CQlCSVQoMTEpCj4gKwo+ICsvKiBMYW5lIFJYL1RYIGNvbmZpZ3VyYXRpb24gKHBlcuKAkWxhbmUs IGF0IGxhbmVfYmFzZSkgKi8KPiArI2RlZmluZSBQQ0lFX1JYX1JFRzEJCQkweDA1MAo+ICsjZGVm aW5lIFBDSUVfVFhfUkVHMQkJCTB4MDY0Cj4gKwo+ICsjZGVmaW5lIFBDSUVfUExMX1RJTUVPVVQJ CTUwMDAwMAo+ICsjZGVmaW5lIFBDSUVfUE9MTF9ERUxBWQkJCTUwMAo+ICsKPiArCgouLi4KCj4g K3N0YXRpYyBpbnQgazNfcGNpZV9waHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCj4gK3sKPiArCXN0 cnVjdCBrM19sYW5lX2dyb3VwICpsZyA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJdm9pZCBf X2lvbWVtICpwaHlfYmFzZSA9IGxnLT5iYXNlICsgbGctPmRhdGEtPm9mZnNldHNbMF07Cj4gKwl1 MzIgdmFsOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCXZhbCA9IHJlYWRsKHBoeV9i YXNlICsgUEhZX1BMTF9SRUcxKTsKPiArCXZhbCA9IHUzMl9yZXBsYWNlX2JpdHModmFsLCAweDIs IEdFTk1BU0soMTUsIDEyKSk7Cj4gKwl3cml0ZWwodmFsLCBwaHlfYmFzZSArIFBIWV9QTExfUkVH MSk7Cj4gKwo+ICsJdmFsID0gcmVhZGwocGh5X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsJdmFs ID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIEJJVCgyMSkpOwo+ICsJd3JpdGVsKHZhbCwgcGh5 X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZy0+ZGF0YS0+ bGFuZXM7IGkrKykgewo+ICsJCXZvaWQgX19pb21lbSAqbGFuZV9iYXNlID0gbGctPmJhc2UgKyBs Zy0+ZGF0YS0+b2Zmc2V0c1tpXTsKPiArCgo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBD SUVfUlhfUkVHMSk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIDB4Myk7Cj4g KwkJd3JpdGVsKHZhbCwgcGh5X2Jhc2UgKyBQQ0lFX1JYX1JFRzEpOwoKVGhpcyBsb29rcyBsaWtl IGEgY29weS1wYXN0ZSBidWcuCgpSZWFkIGZyb20gbGFuZV9iYXNlIGJ1dCB3cml0ZSB0aGUgbW9k aWZpZWQgdmFsdWUgdG8gcGh5X2Jhc2UuCgo+ICsJfQo+ICsKPiArCXZhbCA9IHJlYWRsKHBoeV9i YXNlICsgUEhZX1BMTF9SRUcyKTsKPiArCXZhbCB8PSBCSVQoMjApOwo+ICsJd3JpdGVsKHZhbCwg cGh5X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsKCj4gKwl3cml0ZWwoMHgwMDAwNjUwNSwgcGh5 X2Jhc2UgKyBQQ0lFX1JYX1JFRzEpOwoKSXMgaXQgaW50ZW50aW9uYWw/IFRoZSBsb29wIGFib3Zl IGNvbmZpZ3VyZWQgUENJRV9SWF9SRUcxLCB3aGlsZSB0aGUKaGFyZC1jb2RlZCAweDAwMDA2NTA1 IG92ZXJ3cml0ZXMgd2hhdCdzIGRvbmUgZm9yIGxhbmUwLgoKPiArCj4gKwkvKiBwbGxfcmVnMSBv ZiBsYW5lMCwgZGlzYWJsZSBTU0M6IHBsbF9yZWc0WzM6MF0gPSAwICovCj4gKwl2YWwgPSByZWFk bChwaHlfYmFzZSArIFBIWV9QTExfUkVHMSk7Cj4gKwl2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKHZh bCwgMCwgR0VOTUFTSygyNywgMjQpKTsKPiArCXdyaXRlbCh2YWwsIHBoeV9iYXNlICsgUEhZX1BM TF9SRUcxKTsKCkEgbGl0dGxlIGNvbmZ1c2luZyBoZXJlLCBjb21tZW50IHNheXMgInBsbF9yZWc0 WzM6MF0gPSAwIiBidXQgdGhlIGNvZGUgaXMKbW9kaWZ5aW5nIFBIWV9QTExfUkVHMVsyNzoyNF0K Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxnLT5kYXRhLT5sYW5lczsgaSsrKSB7Cj4gKwkJdm9p ZCBfX2lvbWVtICpsYW5lX2Jhc2UgPSBsZy0+YmFzZSArIGxnLT5kYXRhLT5vZmZzZXRzW2ldOwo+ ICsKPiArCQkvKiBzZXQgY2ZnX3R4X3NlbmRfZHVtbXlfZGF0YSB0byBiZSAxJ2IxIGZvciBkaXNh YmxlIGRhc2ggZGF0YSAqLwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBIWV9QVV9TRUwp Owo+ICsJCXZhbCA9IHUzMl9yZXBsYWNlX2JpdHModmFsLCAxLCBCSVQoMTMpKTsKPiArCQl3cml0 ZWwodmFsLCBsYW5lX2Jhc2UgKyBQSFlfUFVfU0VMKTsKPiArCj4gKwkJLyogZGlzYWJsZSBlbl9z YW1wbGVfZGF0YV9hZnRlcl9jZHJfbG9ja2VkICovCj4gKwkJdmFsID0gcmVhZGwobGFuZV9iYXNl ICsgUEhZX1JFU0VUX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIEJJ VCg2KSk7Cj4gKwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX1JFU0VUX0NGRyk7Cj4gKwo+ ICsJCS8qIER5bmFtaWMgTG9jayAqLwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBIWV9N T0RFX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDEsIEJJVCgyKSk7Cj4g KwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX01PREVfQ0ZHKTsKPiArCj4gKwkJdmFsID0g RklFTERfUFJFUChHRU5NQVNLKDcsIDApLCAweDEwKSB8Cj4gKwkJCUZJRUxEX1BSRVAoR0VOTUFT SygxNSwgOCksIDB4NzgpIHwKPiArCQkJRklFTERfUFJFUChHRU5NQVNLKDIzLCAxNiksIDB4OTgp IHwKPiArCQkJRklFTERfUFJFUChHRU5NQVNLKDMxLCAyNCksIDB4ZGYpOwo+ICsJCXdyaXRlbCh2 YWwsIGxhbmVfYmFzZSArIFBIWV9SWF9SRUdfQSk7Cj4gKwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVf YmFzZSArIFBIWV9SWF9SRUdfQik7Cj4gKwkJdmFsICY9IH5QSFlfUlhfUkVHQl9NQVNLOwo+ICsJ CXZhbCB8PSBGSUVMRF9QUkVQKEdFTk1BU0soNywgMCksIDB4YjQpIHwKPiArCQkJRklFTERfUFJF UChHRU5NQVNLKDE1LCA4KSwgMHg4OCkgfAo+ICsJCQlGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE2 KSwgMHgyOCk7Cj4gKwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX1JYX1JFR19CKTsKCkNh biB3ZSBkZWZpbmUgbWFjcm9zIGZvciB0aGVzZSB2YWx1ZXM/IEp1c3QgbGlrZSB5b3UgZGlkIGZv cgpQSFlfQ0xLX0NGRy4KCj4gKwo+ICsJCS8qIFNldCBpbml0IGRvbmUgKi8KPiArCQl2YWwgPSBy ZWFkbChsYW5lX2Jhc2UgKyBQQ0lFX1BVX0FERFJfQ0xLX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3Jl cGxhY2VfYml0cyh2YWwsIDEsIENGR19TV19QSFlfSU5JVF9ET05FKTsKPiArCQl3cml0ZWwodmFs LCBsYW5lX2Jhc2UgKyBQQ0lFX1BVX0FERFJfQ0xLX0NGRyk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g cmVhZGxfcG9sbF90aW1lb3V0KHBoeV9iYXNlICsgUENJRV9QVV9BRERSX0NMS19DRkcsIHZhbCwK PiArCQkJCSAodmFsICYgUEhZX0NMS19QTExfUkVBRFkpLCBQQ0lFX1BPTExfREVMQVksCj4gKwkJ CQkgUENJRV9QTExfVElNRU9VVCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycigmbGctPnBo eS0+ZGV2LCAiUEhZIFBMTCBsb2NrIHRpbWVvdXRcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4 LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo= 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 DCD7EFF8875 for ; Thu, 30 Apr 2026 07:40:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:To:From:Subject: Cc:Message-Id:Date:Mime-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BzRHKJowYWuouuWljN/RuwVQW9LoqaYAgYvOnq3mSaI=; b=FeMHVIZHo3r3ZL 55JcyBNljnAVFx/CWM5uJ7vLjHEqnBbJVWm5P9UYhmhc9TijQC40S19ETaGwBSq+UdMpovcYaQP46 zO9ZqbM8IQAmvth+zHpjUPjC5T8VlDUFQjw9SBZAqLJYdYeySuCHBtfzTgdhVoZ/C65ZYuJrgj+S5 b0GOGzMqaNi/Qp1vjLGuPyQpTzq304cnidqZ5z9cWZ9COXb1deUvkKM7NTXSBzw4oDfJh5wRxwR3t 6WP7K0Jk4VLEjBfVazbjRjpVMivZbVkKtFtIOvuGsfFiqCWJIxYAoPBtmwSTDEWZgb9EAmATE0sgG n5cDY9yWQkvgomSFlKwA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1wIM0l-00000004uHn-0u3A; Thu, 30 Apr 2026 07:40:39 +0000 Received: from mta1.migadu.com ([2001:41d0:203:375::] helo=out-176.mta1.migadu.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1wIM0i-00000004uEM-2jBU for linux-riscv@lists.infradead.org; Thu, 30 Apr 2026 07:40:37 +0000 Mime-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1777534809; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uWbOTpyRniAKjshI/2NiVtoUUbISuGkNkeknFU1zfVA=; b=nQOR0aFqq66/NT0rEUhedqhEbI9q6p60CQBfgO1Y5fIzXQfDLZO4MBdzUxPm1Y8C4DE1rF fiDZhka3pWI8VeHltk1tHQzdJ1uwPzKONw0mzQO6aFFzn57BhFko5RUeNto8dPUc4Fz8a2 gIcnb9knHuCNabztZ2kIiwPZcY0lJsQ= Date: Thu, 30 Apr 2026 15:39:51 +0800 Message-Id: Cc: , , , , , , "Yixun Lan" , "Longbin Li" Subject: Re: [PATCH 2/2] phy: spacemit: Add USB3/PCIe comb PHY driver for Spacemit K3 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: "Ze Huang" To: "Inochi Amaoto" , "Vinod Koul" , "Neil Armstrong" , "Rob Herring" , "Krzysztof Kozlowski" , "Conor Dooley" , "Yixun Lan" , "Kees Cook" , "Gustavo A. R. Silva" , "Paul Walmsley" , "Palmer Dabbelt" , "Albert Ou" , "Alexandre Ghiti" , "Ze Huang" , "Alex Elder" References: <20260430022843.1090138-1-inochiama@gmail.com> <20260430022843.1090138-3-inochiama@gmail.com> In-Reply-To: <20260430022843.1090138-3-inochiama@gmail.com> X-Migadu-Flow: FLOW_OUT X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260430_004036_832568_A155757F X-CRM114-Status: GOOD ( 31.22 ) 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 T24gVGh1IEFwciAzMCwgMjAyNiBhdCAxMDoyOCBBTSBDU1QsIElub2NoaSBBbWFvdG8gd3JvdGU6 Cj4gVGhlIGNvbWIgUEhZIG9uIEszIHJlcXVpcmVzIHRvIGNvbmZpZ3VyZSBhIHN5c2NvbiBkZXZp Y2UgZm9yIHRoZQo+IHJpZ2h0IG11eCBjb25maWd1cmF0aW9uLiBBbmQgaXQgcmVxdWlyZXMgY2Fs aWJyYXRpb24gYmVmb3JlIGFueQo+IHVzYWdlLgo+Cj4gQWRkIFVTQjMvUENJZSBjb21iIFBIWSBk cml2ZXIgZm9yIFNwYWNlbWl0IEszLgo+Cj4gU2lnbmVkLW9mZi1ieTogSW5vY2hpIEFtYW90byA8 aW5vY2hpYW1hQGdtYWlsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9waHkvc3BhY2VtaXQvS2NvbmZp ZyAgICAgICAgICB8ICAxNiArKwo+ICBkcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZSAgICAg ICAgIHwgICAyICsKPiAgZHJpdmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYyB8IDI1 MCArKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvcGh5L3NwYWNlbWl0L3BoeS1rMy1jb21tb24u YyAgfCAzOTggKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9waHkvc3BhY2Vt aXQvcGh5LWszLWNvbW1vbi5oICB8ICAyNyArKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDY5MyBpbnNl cnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9zcGFjZW1pdC9waHkt azMtY29tYnBoeS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9zcGFjZW1pdC9w aHktazMtY29tbW9uLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L3NwYWNlbWl0 L3BoeS1rMy1jb21tb24uaAo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3NwYWNlbWl0L0tj b25maWcgYi9kcml2ZXJzL3BoeS9zcGFjZW1pdC9LY29uZmlnCj4gaW5kZXggNTBiMDAwNWFjZjY2 Li41ZmRmMThmY2U0OTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvc3BhY2VtaXQvS2NvbmZp Zwo+ICsrKyBiL2RyaXZlcnMvcGh5L3NwYWNlbWl0L0tjb25maWcKPiBAQCAtMjMsMyArMjMsMTkg QEAgY29uZmlnIFBIWV9TUEFDRU1JVF9LMV9VU0IyCj4gIAloZWxwCj4gIAkgIEVuYWJsZSB0aGlz IHRvIHN1cHBvcnQgSzEgVVNCIDIuMCBQSFkgZHJpdmVyLiBUaGlzIGRyaXZlciB0YWtlcyBjYXJl IG9mCj4gIAkgIGVuYWJsaW5nIGFuZCBjbG9jayBzZXR1cCBhbmQgd2lsbCBiZSB1c2VkIGJ5IEsx IHVkYy9laGNpL290Zy94aGNpIGRyaXZlci4KPiArCj4gK2NvbmZpZyBQSFlfU1BBQ0VNSVRfSzNf Q09NTU9OX09QUwo+ICsJdHJpc3RhdGUKPiArCXNlbGVjdCBNRkRfU1lTQ09OCj4gKwlzZWxlY3Qg R0VORVJJQ19QSFkKPiArCj4gK2NvbmZpZyBQSFlfU1BBQ0VNSVRfSzNfQ09NQk9fUEhZCj4gKwl0 cmlzdGF0ZSAiU3BhY2VtaVQgSzMgVVNCMy9QQ0llIFBIWSBzdXBwb3J0Igo+ICsJZGVwZW5kcyBv biAoQVJDSF9TUEFDRU1JVCB8fCBDT01QSUxFX1RFU1QpICYmIE9GCj4gKwlkZXBlbmRzIG9uIENP TU1PTl9DTEsKPiArCXNlbGVjdCBQSFlfU1BBQ0VNSVRfSzNfQ09NTU9OX09QUwo+ICsJaGVscAo+ ICsJICBFbmFibGUgdGhpcyB0byBzdXBwb3J0IEszIFVTQjMvUENJZSBjb21ibyBQSFkgZHJpdmVy LiBUaGlzCj4gKwkgIGRyaXZlciB0YWtlcyBjYXJlIG9mIGVuYWJsaW5nIGFuZCBjbG9jayBzZXR1 cCBhbmQgd2lsbCBiZSB1c2VkCj4gKwkgIGJ5IEszIGR3YzMgZHJpdmVyLgo+ICsJICBJZiB1bnN1 cmUsIHNheSBOLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZSBi L2RyaXZlcnMvcGh5L3NwYWNlbWl0L01ha2VmaWxlCj4gaW5kZXggYTgyMWEyMWQ2MTQyLi40MWJl N2IwMzg4ZGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvc3BhY2VtaXQvTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL3BoeS9zcGFjZW1pdC9NYWtlZmlsZQo+IEBAIC0xLDMgKzEsNSBAQAo+ICAj IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiAgb2JqLSQoQ09ORklHX1BI WV9TUEFDRU1JVF9LMV9QQ0lFKQkJKz0gcGh5LWsxLXBjaWUubwo+ICBvYmotJChDT05GSUdfUEhZ X1NQQUNFTUlUX0sxX1VTQjIpCQkrPSBwaHktazEtdXNiMi5vCj4gK29iai0kKENPTkZJR19QSFlf U1BBQ0VNSVRfSzNfQ09NQk9fUEhZKQkJKz0gcGh5LWszLWNvbWJwaHkubwo+ICtvYmotJChDT05G SUdfUEhZX1NQQUNFTUlUX0szX0NPTU1PTl9PUFMpCSs9IHBoeS1rMy1jb21tb24ubwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3BoeS9zcGFjZW1pdC9waHktazMtY29tYnBoeS5jIGIvZHJpdmVycy9w aHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi42NmZhNjMzMGFkNmUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbWJwaHkuYwo+IEBAIC0wLDAgKzEsMjUwIEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoKPiArICogcGh5 LWszLXVzYjMuYyAtIFNwYWNlbWlUIEszIFR5cGUtQyBPcmllbnRhdGlvbiBTd2l0Y2ggRHJpdmVy Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBTcGFjZW1pVCBUZWNobm9sb2d5IENvLiBM dGQKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2lvLmg+CgouLi4KCj4gKwo+ICsJcGh5LT5hcGJfc3BhcmUgPSBzeXNjb25fcmVnbWFw X2xvb2t1cF9ieV9waGFuZGxlKG5vZGUsICJzcGFjZW1pdCxhcGItc3BhcmUiKTsKPiArCWlmIChJ U19FUlIocGh5LT5hcGJfc3BhcmUpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRS X0VSUihwaHktPmFwYl9zcGFyZSksCj4gKwkJCQkgICAgICJGYWlsZWQgdG8gZmluZSBBUEIgU1BB UkUgc3lzY29uIik7Cgp0eXBvLCBzL2ZpbmUvZmluZAoKPiArCj4gKwlhcG11ID0gc3lzY29uX3Jl Z21hcF9sb29rdXBfYnlfcGhhbmRsZV9hcmdzKG5vZGUsICJzcGFjZW1pdCxhcG11IiwgMSwgJmNv bmZpZyk7Cj4gKwlpZiAoSVNfRVJSKGFwbXUpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgUFRSX0VSUihwaHktPmFwYl9zcGFyZSksCj4gKwkJCQkgICAgICJGYWlsZWQgdG8gZmluZSBB UE1VIHN5c2NvbiIpOwoKMS4gdHlwbywgcy9maW5lL2ZpbmQKMi4gUFRSX0VSUihwaHktPmFwYl9z cGFyZSkgc2hvdWxkIGJlIFBUUl9FUlIoYXBtdSkKCj4gKwo+ICsJcmV0ID0gazNfY29tYl9waHlf dXBkYXRlX2NvbmZpZyhhcG11LCBjb25maWcpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gc2V0IGxhbmUgY29uZmlndXJhdGlv biIpOwo+ICsKPiArCXBoeS0+ZGV2ID0gZGV2Owo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgcGh5KTsKPiArCj4gKwlyZXQgPSBrM19waHlfY2FsaWJyYXRlKHBoeS0+YXBiX3NwYXJlKTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFp bGVkIHRvIGNhbGlicmF0ZSBwaHkiKTsKPiArCj4gKwlyZXQgPSBrM19jb21iX3BoeV9pbml0X2xh bmVzKHBoeSwgY29uZmlnKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgcmV0LCAiRmFpbGVkIHRvIGluaXQgbGFuZXMiKTsKPiArCj4gKwlwcm92aWRlciA9 IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgazNfY29tYl9waHlfeGxhdGUpOwo+ ICsJaWYgKElTX0VSUihwcm92aWRlcikpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQ VFJfRVJSKHByb3ZpZGVyKSwKPiArCQkJCSAgICAgIkZhaWxlZCB0byByZWdpc3RlciBwcm92aWRl clxuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGszX2NvbWJfcGh5X29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxl ID0gInNwYWNlbWl0LGszLWNvbWItcGh5IiB9LAo+ICsJeyB9LAo+ICt9Owo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBrM19jb21iX3BoeV9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBrM19jb21iX3BoeV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBrM19j b21iX3BoeV9wcm9iZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAic3BhY2VtaXQsazMt Y29tYi1waHkiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGszX2NvbWJfcGh5X29mX21hdGNoLAo+ ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihrM19jb21iX3BoeV9kcml2ZXIp Owo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGFjZW1pVCBLMyBVU0IzL1BDSWUgY29tYiBQ SFkgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9waHkvc3BhY2VtaXQvcGh5LWszLWNvbW1vbi5jIGIvZHJpdmVycy9waHkvc3BhY2VtaXQv cGh5LWszLWNvbW1vbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjc3YzRiNDA3M2I5Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3BoeS9zcGFj ZW1pdC9waHktazMtY29tbW9uLmMKPiBAQCAtMCwwICsxLDM5OCBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0Zmll bGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NsZWFudXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lv Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2Iu aD4KPiArCj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waHkvcGh5Lmg+Cj4gKwo+ICsjaW5jbHVk ZSAicGh5LWszLWNvbW1vbi5oIgo+ICsKPiArLyogUEhZIFJlZ2lzdGVycyAqLwo+ICsjZGVmaW5l IFBIWV9WRVJTSU9OCQkJMHgwCj4gKwo+ICsjZGVmaW5lIFBIWV9SRVNFVF9DRkcJCQkweDA0Cj4g Kwo+ICsjZGVmaW5lIFBIWV9SRVNFVF9SWEJVRl9SU1QJCUJJVCgwKQo+ICsjZGVmaW5lIFBIWV9S RVNFVF9TT0ZUX1JTVF9QQ1MJCUJJVCgxKQo+ICsjZGVmaW5lIFBIWV9SRVNFVF9TT0ZUX1JTVF9B SEIJCUJJVCgyKQo+ICsjZGVmaW5lIFBIWV9SRVNFVF9FTl9TRF9BRlRFUl9MT0NLCUJJVCg2KQo+ ICsKPiArI2RlZmluZSBQSFlfQ0xLX0NGRwkJCTB4MDgKPiArCj4gKyNkZWZpbmUgUEhZX0NMS19Q TExfUkVBRFkJCUJJVCgwKQo+ICsjZGVmaW5lIFBIWV9DTEtfVFhDTEtfSU5WCQlCSVQoMikKPiAr I2RlZmluZSBQSFlfQ0xLX1JYQ0xLX0VOCQlCSVQoMykKPiArI2RlZmluZSBQSFlfQ0xLX1RYQ0xL X0VOCQlCSVQoNCkKPiArI2RlZmluZSBQSFlfQ0xLX1BDTEtfRU4JCQlCSVQoNSkKPiArI2RlZmlu ZSBQSFlfQ0xLX1BJUEVfUENMS19FTgkJQklUKDYpCj4gKyNkZWZpbmUgUEhZX0NMS19SRUZDTEtf RlJFUQkJR0VOTUFTSygxMCwgNykKPiArI2RlZmluZSBQSFlfQ0xLX1JFRkNMS18yNE0JCTIKPiAr I2RlZmluZSBQSFlfQ0xLX1NXX0lOSVRfRE9ORQkJQklUKDExKQo+ICsjZGVmaW5lIFBIWV9DTEtf UFVfU1NDX09VVAkJQklUKDIzKQo+ICsKPiArI2RlZmluZSBQSFlfTU9ERV9DRkcJCQkweDBDCj4g Kwo+ICsjZGVmaW5lIFBIWV9NT0RFX1BDSUVfSU5UX0VOCQlCSVQoMCkKPiArI2RlZmluZSBQSFlf TU9ERV9MRlBTX1RQRVJJT0QJCUdFTk1BU0soOSwgOCkKPiArI2RlZmluZSBQSFlfTU9ERV9MRlBT X1RQRVJJT0RfVVNCCTMKPiArCj4gKyNkZWZpbmUgUEhZX1BVX1NFTAkJCTB4NDAKPiArCj4gKyNk ZWZpbmUgUEhZX1BVX0NGR19TVEFUVVMJCUJJVCg5KQo+ICsjZGVmaW5lIFBIWV9QVV9PVlJEX1NU QVRVUwkJQklUKDEwKQo+ICsKPiArI2RlZmluZSBQSFlfUFVfQ0tfUkVHCQkJMHg1NAo+ICsKPiAr I2RlZmluZSBQSFlfUFVfUkVGQ0xLXzEwMAkJQklUKDI1KQo+ICsKPiArI2RlZmluZSBQSFlfUExM X1JFRzEJCQkweDU4Cj4gKwo+ICsjZGVmaW5lIFBIWV9QTExfRlJFRl9TRUwJCUdFTk1BU0soMTUs IDEzKQo+ICsjZGVmaW5lIFBIWV9QTExfRlJFRl8yNE0JCTB4MQo+ICsjZGVmaW5lIFBIWV9QTExf U1NDX0RFUF9TRUwJCUdFTk1BU0soMjcsIDI0KQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDXzUwMDBQ UE0JCTB4YQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREUJCUdFTk1BU0soMjksIDI4KQo+ICsj ZGVmaW5lIFBIWV9QTExfU1NDX01PREVfQ0VOVEVSX1NQUkVBRAkwCj4gKyNkZWZpbmUgUEhZX1BM TF9TU0NfTU9ERV9VUF9TUFJFQUQJMQo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREVfRE9XTl9T UFJFQUQJMgo+ICsjZGVmaW5lIFBIWV9QTExfU1NDX01PREVfRE9XTl9TUFJFQUQxCTMKPiArCj4g KyNkZWZpbmUgUEhZX1BMTF9SRUcyCQkJMHg1Ywo+ICsKPiArI2RlZmluZSBQSFlfUExMX1NFTF9S RUYxMDAJCUJJVCgyMSkKPiArCj4gKy8qIFBIWSBSWCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLwo+ ICsjZGVmaW5lIFBIWV9SWF9SRUdfQQkJCTB4NjAKPiArCj4gKyNkZWZpbmUgUEhZX1JYX1JFRzBf UkxPQUQJCUJJVCg0KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUcxX1JURVJNCQlHRU5NQVNLKDExLCA4 KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUcxX1JDX0NBTEkJCUdFTk1BU0soMTUsIDEyKQo+ICsjZGVm aW5lIFBIWV9SWF9SRUcyX0NTRUwJCUdFTk1BU0soMTksIDE2KQo+ICsjZGVmaW5lIFBIWV9SWF9S RUcyX0ZPUkNFX0NTRUwJCUJJVCgyMCkKPiArI2RlZmluZSBQSFlfUlhfUkVHMl9QU0VMCQlHRU5N QVNLKDIzLCAyMSkKPiArI2RlZmluZSBQSFlfUlhfUkVHM19JX0xPQUQJCUdFTk1BU0soMjYsIDI0 KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUczX1NFTF9DQk9PU1RfQ09ERQlCSVQoMjcpCj4gKyNkZWZp bmUgUEhZX1JYX1JFRzNfQURKX0JJQVMJCUdFTk1BU0soMjksIDI4KQo+ICsjZGVmaW5lIFBIWV9S WF9SRUczX1JERUcxCQlHRU5NQVNLKDMxLCAzMCkKPiArCj4gKyNkZWZpbmUgUEhZX1JYX1JFR19C CQkJMHg2NAo+ICsKPiArI2RlZmluZSBQSFlfUlhfUkVHQl9NQVNLCQlHRU5NQVNLKDIzLCAwKQo+ ICsKPiArI2RlZmluZSBQSFlfUlhfUkVHNF9SREVHMgkJR0VOTUFTSygyLCAxKQo+ICsjZGVmaW5l IFBIWV9SWF9SRUc0X0VOVk9TCQlCSVQoNCkKPiArI2RlZmluZSBQSFlfUlhfUkVHNF9SVEVSTV9T RUwJCUJJVCg1KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc0X01BTlVBTF9DRkcJCUJJVCg3KQo+ICsj ZGVmaW5lIFBIWV9SWF9SRUc1X1JDRUxMX1ZDTQkJR0VOTUFTSygxMSwgOCkKPiArI2RlZmluZSBQ SFlfUlhfUkVHNV9SQ0VMTF9CSUFTCQlHRU5NQVNLKDE1LCAxMikKPiArI2RlZmluZSBQSFlfUlhf UkVHNl9IMV9SRUcJCUdFTk1BU0soMTksIDE2KQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc2X0FEQVBU X0dBSU4JCUdFTk1BU0soMjEsIDIwKQo+ICsjZGVmaW5lIFBIWV9SWF9SRUc2X0JZUEFTU19BRFBU CQlCSVQoMjIpCj4gKwo+ICsjZGVmaW5lIFBIWV9BRFBUX0NGRzAJCQkweDE0MAo+ICsjZGVmaW5l IFBIWV9BRFBUX0FGRV9SU1RfT1ZSRF9FTglCSVQoMSkKPiArI2RlZmluZSBQSFlfQURQVF9BRkVf UlNUX09WUkRfVkFMCUJJVCg0KQo+ICsKPiArI2RlZmluZSBQSFlfUlhFUV9USU1FCQkJMHhiNAo+ ICsjZGVmaW5lIFBIWV9SWEVRX1RJTUVfT1ZSRF9QT1NUX0NfU09DCUJJVCgyMSkKPiArI2RlZmlu ZSBQSFlfUlhFUV9USU1FX0NGR19BTVBfU09DCUdFTk1BU0soMjMsIDIyKQo+ICsjZGVmaW5lIFBI WV9SWEVRX1RJTUVfQU1QX1NPQ182NTBNCTAKPiArI2RlZmluZSBQSFlfUlhFUV9USU1FX0FNUF9T T0NfODAwTQkxCj4gKyNkZWZpbmUgUEhZX1JYRVFfVElNRV9BTVBfU09DXzg3ME0JMgo+ICsjZGVm aW5lIFBIWV9SWEVRX1RJTUVfQU1QX1NPQ185MDBNCTMKPiArI2RlZmluZSBQSFlfUlhFUV9USU1F X09WUkRfQU1QX1NPQwlCSVQoMjQpCj4gKwo+ICsjZGVmaW5lIFBDSUVfUFVfQUREUl9DTEtfQ0ZH CQkweDAwMDgKPiArI2RlZmluZSBQSFlfQ0xLX1BMTF9SRUFEWQkJQklUKDApCj4gKyNkZWZpbmUg UENJRV9JTklUQUxfVElNRVIJCUdFTk1BU0soNiwgMykKPiArI2RlZmluZSBDRkdfSU5URVJOQUxf VElNRVJfQURKCQlHRU5NQVNLKDEwLCA3KQo+ICsjZGVmaW5lIENGR19TV19QSFlfSU5JVF9ET05F CQlCSVQoMTEpCj4gKwo+ICsvKiBMYW5lIFJYL1RYIGNvbmZpZ3VyYXRpb24gKHBlcuKAkWxhbmUs IGF0IGxhbmVfYmFzZSkgKi8KPiArI2RlZmluZSBQQ0lFX1JYX1JFRzEJCQkweDA1MAo+ICsjZGVm aW5lIFBDSUVfVFhfUkVHMQkJCTB4MDY0Cj4gKwo+ICsjZGVmaW5lIFBDSUVfUExMX1RJTUVPVVQJ CTUwMDAwMAo+ICsjZGVmaW5lIFBDSUVfUE9MTF9ERUxBWQkJCTUwMAo+ICsKPiArCgouLi4KCj4g K3N0YXRpYyBpbnQgazNfcGNpZV9waHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCj4gK3sKPiArCXN0 cnVjdCBrM19sYW5lX2dyb3VwICpsZyA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwo+ICsJdm9pZCBf X2lvbWVtICpwaHlfYmFzZSA9IGxnLT5iYXNlICsgbGctPmRhdGEtPm9mZnNldHNbMF07Cj4gKwl1 MzIgdmFsOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCXZhbCA9IHJlYWRsKHBoeV9i YXNlICsgUEhZX1BMTF9SRUcxKTsKPiArCXZhbCA9IHUzMl9yZXBsYWNlX2JpdHModmFsLCAweDIs IEdFTk1BU0soMTUsIDEyKSk7Cj4gKwl3cml0ZWwodmFsLCBwaHlfYmFzZSArIFBIWV9QTExfUkVH MSk7Cj4gKwo+ICsJdmFsID0gcmVhZGwocGh5X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsJdmFs ID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIEJJVCgyMSkpOwo+ICsJd3JpdGVsKHZhbCwgcGh5 X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZy0+ZGF0YS0+ bGFuZXM7IGkrKykgewo+ICsJCXZvaWQgX19pb21lbSAqbGFuZV9iYXNlID0gbGctPmJhc2UgKyBs Zy0+ZGF0YS0+b2Zmc2V0c1tpXTsKPiArCgo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBD SUVfUlhfUkVHMSk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIDB4Myk7Cj4g KwkJd3JpdGVsKHZhbCwgcGh5X2Jhc2UgKyBQQ0lFX1JYX1JFRzEpOwoKVGhpcyBsb29rcyBsaWtl IGEgY29weS1wYXN0ZSBidWcuCgpSZWFkIGZyb20gbGFuZV9iYXNlIGJ1dCB3cml0ZSB0aGUgbW9k aWZpZWQgdmFsdWUgdG8gcGh5X2Jhc2UuCgo+ICsJfQo+ICsKPiArCXZhbCA9IHJlYWRsKHBoeV9i YXNlICsgUEhZX1BMTF9SRUcyKTsKPiArCXZhbCB8PSBCSVQoMjApOwo+ICsJd3JpdGVsKHZhbCwg cGh5X2Jhc2UgKyBQSFlfUExMX1JFRzIpOwo+ICsKCj4gKwl3cml0ZWwoMHgwMDAwNjUwNSwgcGh5 X2Jhc2UgKyBQQ0lFX1JYX1JFRzEpOwoKSXMgaXQgaW50ZW50aW9uYWw/IFRoZSBsb29wIGFib3Zl IGNvbmZpZ3VyZWQgUENJRV9SWF9SRUcxLCB3aGlsZSB0aGUKaGFyZC1jb2RlZCAweDAwMDA2NTA1 IG92ZXJ3cml0ZXMgd2hhdCdzIGRvbmUgZm9yIGxhbmUwLgoKPiArCj4gKwkvKiBwbGxfcmVnMSBv ZiBsYW5lMCwgZGlzYWJsZSBTU0M6IHBsbF9yZWc0WzM6MF0gPSAwICovCj4gKwl2YWwgPSByZWFk bChwaHlfYmFzZSArIFBIWV9QTExfUkVHMSk7Cj4gKwl2YWwgPSB1MzJfcmVwbGFjZV9iaXRzKHZh bCwgMCwgR0VOTUFTSygyNywgMjQpKTsKPiArCXdyaXRlbCh2YWwsIHBoeV9iYXNlICsgUEhZX1BM TF9SRUcxKTsKCkEgbGl0dGxlIGNvbmZ1c2luZyBoZXJlLCBjb21tZW50IHNheXMgInBsbF9yZWc0 WzM6MF0gPSAwIiBidXQgdGhlIGNvZGUgaXMKbW9kaWZ5aW5nIFBIWV9QTExfUkVHMVsyNzoyNF0K Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGxnLT5kYXRhLT5sYW5lczsgaSsrKSB7Cj4gKwkJdm9p ZCBfX2lvbWVtICpsYW5lX2Jhc2UgPSBsZy0+YmFzZSArIGxnLT5kYXRhLT5vZmZzZXRzW2ldOwo+ ICsKPiArCQkvKiBzZXQgY2ZnX3R4X3NlbmRfZHVtbXlfZGF0YSB0byBiZSAxJ2IxIGZvciBkaXNh YmxlIGRhc2ggZGF0YSAqLwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBIWV9QVV9TRUwp Owo+ICsJCXZhbCA9IHUzMl9yZXBsYWNlX2JpdHModmFsLCAxLCBCSVQoMTMpKTsKPiArCQl3cml0 ZWwodmFsLCBsYW5lX2Jhc2UgKyBQSFlfUFVfU0VMKTsKPiArCj4gKwkJLyogZGlzYWJsZSBlbl9z YW1wbGVfZGF0YV9hZnRlcl9jZHJfbG9ja2VkICovCj4gKwkJdmFsID0gcmVhZGwobGFuZV9iYXNl ICsgUEhZX1JFU0VUX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDAsIEJJ VCg2KSk7Cj4gKwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX1JFU0VUX0NGRyk7Cj4gKwo+ ICsJCS8qIER5bmFtaWMgTG9jayAqLwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVfYmFzZSArIFBIWV9N T0RFX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3JlcGxhY2VfYml0cyh2YWwsIDEsIEJJVCgyKSk7Cj4g KwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX01PREVfQ0ZHKTsKPiArCj4gKwkJdmFsID0g RklFTERfUFJFUChHRU5NQVNLKDcsIDApLCAweDEwKSB8Cj4gKwkJCUZJRUxEX1BSRVAoR0VOTUFT SygxNSwgOCksIDB4NzgpIHwKPiArCQkJRklFTERfUFJFUChHRU5NQVNLKDIzLCAxNiksIDB4OTgp IHwKPiArCQkJRklFTERfUFJFUChHRU5NQVNLKDMxLCAyNCksIDB4ZGYpOwo+ICsJCXdyaXRlbCh2 YWwsIGxhbmVfYmFzZSArIFBIWV9SWF9SRUdfQSk7Cj4gKwo+ICsJCXZhbCA9IHJlYWRsKGxhbmVf YmFzZSArIFBIWV9SWF9SRUdfQik7Cj4gKwkJdmFsICY9IH5QSFlfUlhfUkVHQl9NQVNLOwo+ICsJ CXZhbCB8PSBGSUVMRF9QUkVQKEdFTk1BU0soNywgMCksIDB4YjQpIHwKPiArCQkJRklFTERfUFJF UChHRU5NQVNLKDE1LCA4KSwgMHg4OCkgfAo+ICsJCQlGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE2 KSwgMHgyOCk7Cj4gKwkJd3JpdGVsKHZhbCwgbGFuZV9iYXNlICsgUEhZX1JYX1JFR19CKTsKCkNh biB3ZSBkZWZpbmUgbWFjcm9zIGZvciB0aGVzZSB2YWx1ZXM/IEp1c3QgbGlrZSB5b3UgZGlkIGZv cgpQSFlfQ0xLX0NGRy4KCj4gKwo+ICsJCS8qIFNldCBpbml0IGRvbmUgKi8KPiArCQl2YWwgPSBy ZWFkbChsYW5lX2Jhc2UgKyBQQ0lFX1BVX0FERFJfQ0xLX0NGRyk7Cj4gKwkJdmFsID0gdTMyX3Jl cGxhY2VfYml0cyh2YWwsIDEsIENGR19TV19QSFlfSU5JVF9ET05FKTsKPiArCQl3cml0ZWwodmFs LCBsYW5lX2Jhc2UgKyBQQ0lFX1BVX0FERFJfQ0xLX0NGRyk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g cmVhZGxfcG9sbF90aW1lb3V0KHBoeV9iYXNlICsgUENJRV9QVV9BRERSX0NMS19DRkcsIHZhbCwK PiArCQkJCSAodmFsICYgUEhZX0NMS19QTExfUkVBRFkpLCBQQ0lFX1BPTExfREVMQVksCj4gKwkJ CQkgUENJRV9QTExfVElNRU9VVCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycigmbGctPnBo eS0+ZGV2LCAiUEhZIFBMTCBsb2NrIHRpbWVvdXRcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtcmlzY3YK