From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 619C263AF for ; Sat, 11 Nov 2023 04:12:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dHoKp4c/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 692E4C433C7; Sat, 11 Nov 2023 04:12:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699675944; bh=zlVIXusYR5JdUHxMJMxftsT7sO1DFB+E1/HW4Mh2VWM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=dHoKp4c/LKd6Oe4wiG+RqKMWf02cMbbbly0aJ4BZ5u8QD00M8WD16CFXtWjLADtec IUCr7WQskZHkf8nruGtAEYzlKgWFs50mvLQK9DTIiX4M3wF17I6dbzsaVbdjPRnGVd okTax5TdIqn2uMdaORHRv2036KJs1p0zYY5r7j59q9vlOY+1QOdSoZYo9xOHPDcAzj 5TuoFWsfG2NAT0y1HT1YYw/zGhj5pVPIRHCouYxtTDqe21ECsg3mAOK212QYIYS/w/ ng6WNlB90n5p6oKy5i/0ryvE5GestCHA0yoEWZzFTkUhJ/bH11F3uxfbytNIcCDBRu xzo/tyYlfhG5Q== Date: Sat, 11 Nov 2023 09:42:15 +0530 From: Manivannan Sadhasivam To: Can Guo Cc: Manivannan Sadhasivam , Dmitry Baryshkov , Can Guo , bvanassche@acm.org, stanley.chu@mediatek.com, adrian.hunter@intel.com, beanhuo@micron.com, avri.altman@wdc.com, junwoo80.lee@samsung.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Andy Gross , Bjorn Andersson , Konrad Dybcio , Vinod Koul , Kishon Vijay Abraham I , "open list:ARM/QUALCOMM SUPPORT" , "open list:GENERIC PHY FRAMEWORK" , open list Subject: Re: [PATCH v2 6/7] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550 Message-ID: <20231111041215.GA4823@thinkpad> References: <20231108054942.GF3296@thinkpad> <20231109032418.GA3752@thinkpad> <20231109104250.GF3752@thinkpad> <20231109160430.GG3752@thinkpad> <20231110131803.GA5025@thinkpad> <1ac5ae60-7e76-43f2-8b3d-c286eade0251@quicinc.com> Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1ac5ae60-7e76-43f2-8b3d-c286eade0251@quicinc.com> On Fri, Nov 10, 2023 at 10:40:53PM +0800, Can Guo wrote: > > > On 11/10/2023 9:18 PM, Manivannan Sadhasivam wrote: > > On Fri, Nov 10, 2023 at 12:11:46AM +0200, Dmitry Baryshkov wrote: > > > On Thu, 9 Nov 2023 at 18:04, Manivannan Sadhasivam wrote: > > > > > > > > On Thu, Nov 09, 2023 at 01:00:51PM +0200, Dmitry Baryshkov wrote: > > > > > On Thu, 9 Nov 2023 at 12:43, Manivannan Sadhasivam wrote: > > > > > > > > > > > > On Thu, Nov 09, 2023 at 11:40:51AM +0200, Dmitry Baryshkov wrote: > > > > > > > On Thu, 9 Nov 2023 at 05:24, Manivannan Sadhasivam wrote: > > > > > > > > > > > > > > > > On Wed, Nov 08, 2023 at 08:56:16AM +0200, Dmitry Baryshkov wrote: > > > > > > > > > On Wed, 8 Nov 2023 at 07:49, Manivannan Sadhasivam wrote: > > > > > > > > > > > > > > > > > > > > On Tue, Nov 07, 2023 at 03:18:09PM +0200, Dmitry Baryshkov wrote: > > > > > > > > > > > On Tue, 7 Nov 2023 at 06:47, Can Guo wrote: > > > > > > > > > > > > > > > > > > > > > > > > From: Can Guo > > > > > > > > > > > > > > > > > > > > > > > > On SM8550, two sets of UFS PHY settings are provided, one set is to support > > > > > > > > > > > > HS-G5, another set is to support HS-G4 and lower gears. The two sets of PHY > > > > > > > > > > > > settings are programming different values to different registers, mixing > > > > > > > > > > > > the two sets and/or overwriting one set with another set is definitely not > > > > > > > > > > > > blessed by UFS PHY designers. In order to add HS-G5 support for SM8550, we > > > > > > > > > > > > need to split the two sets into their dedicated tables, and leave only the > > > > > > > > > > > > common settings in the .tlbs. To have the PHY programmed with the correct > > > > > > > > > > > > set of PHY settings, the submode passed to PHY driver must be either HS-G4 > > > > > > > > > > > > or HS-G5. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > You should also mention that this issue is also present in G4 supported targets. > > > > > > > > > > And a note that it will get fixed later. > > > > > > > > > > > > > > > > > > > > > > Signed-off-by: Can Guo > > > > > > > > > > > > --- > > > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h | 2 + > > > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h | 2 + > > > > > > > > > > > > .../qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h | 12 +++ > > > > > > > > > > > > drivers/phy/qualcomm/phy-qcom-qmp-ufs.c | 112 ++++++++++++++++++--- > > > > > > > > > > > > 4 files changed, 115 insertions(+), 13 deletions(-) > > > > > > > > > > > > > > > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > > > index c23d5e4..e563af5 100644 > > > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcs-ufs-v6.h > > > > > > > > > > > > @@ -18,6 +18,7 @@ > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_BIST_FIXED_PAT_CTRL 0x060 > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_TX_HSGEAR_CAPABILITY 0x074 > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_RX_HSGEAR_CAPABILITY 0x0bc > > > > > > > > > > > > +#define QPHY_V6_PCS_UFS_RX_HS_G5_SYNC_LENGTH_CAPABILITY 0x12c > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_DEBUG_BUS_CLKSEL 0x158 > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_LINECFG_DISABLE 0x17c > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_RX_MIN_HIBERN8_TIME 0x184 > > > > > > > > > > > > @@ -27,5 +28,6 @@ > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_READY_STATUS 0x1a8 > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_TX_MID_TERM_CTRL1 0x1f4 > > > > > > > > > > > > #define QPHY_V6_PCS_UFS_MULTI_LANE_CTRL1 0x1fc > > > > > > > > > > > > +#define QPHY_V6_PCS_UFS_RX_HSG5_SYNC_WAIT_TIME 0x220 > > > > > > > > > > > > > > > > > > > > > > > > #endif > > > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > > > index f420f8f..ef392ce 100644 > > > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v6.h > > > > > > > > > > > > @@ -56,6 +56,8 @@ > > > > > > > > > > > > #define QSERDES_V6_COM_SYS_CLK_CTRL 0xe4 > > > > > > > > > > > > #define QSERDES_V6_COM_SYSCLK_BUF_ENABLE 0xe8 > > > > > > > > > > > > #define QSERDES_V6_COM_PLL_IVCO 0xf4 > > > > > > > > > > > > +#define QSERDES_V6_COM_CMN_IETRIM 0xfc > > > > > > > > > > > > +#define QSERDES_V6_COM_CMN_IPTRIM 0x100 > > > > > > > > > > > > #define QSERDES_V6_COM_SYSCLK_EN_SEL 0x110 > > > > > > > > > > > > #define QSERDES_V6_COM_RESETSM_CNTRL 0x118 > > > > > > > > > > > > #define QSERDES_V6_COM_LOCK_CMP_EN 0x120 > > > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > > > index 15bcb4b..48f31c8 100644 > > > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-txrx-ufs-v6.h > > > > > > > > > > > > @@ -10,10 +10,20 @@ > > > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_RX 0x2c > > > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_OFFSET_TX 0x30 > > > > > > > > > > > > #define QSERDES_UFS_V6_TX_RES_CODE_LANE_OFFSET_RX 0x34 > > > > > > > > > > > > +#define QSERDES_UFS_V6_TX_LANE_MODE_1 0x7c > > > > > > > > > > > > +#define QSERDES_UFS_V6_TX_FR_DCC_CTRL 0x108 > > > > > > > > > > > > > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE2 0x08 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE4 0x10 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_SO_GAIN_RATE4 0x24 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FASTLOCK_COUNT_HIGH_RATE4 0x54 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE2 0xd4 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE4 0xdc > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_SO_GAIN_RATE4 0xf0 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_UCDR_PI_CONTROLS 0xf4 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_VGA_CAL_MAN_VAL 0x178 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_EQ_OFFSET_ADAPTOR_CNTRL1 0x1bc > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_OFFSET_ADAPTOR_CNTRL3 0x1c4 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B0 0x208 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B1 0x20c > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE_0_1_B3 0x214 > > > > > > > > > > > > @@ -25,6 +35,8 @@ > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE3_B5 0x264 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE3_B8 0x270 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE4_B3 0x280 > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_MODE_RATE4_B4 0x284 > > > > > > > > > > > > #define QSERDES_UFS_V6_RX_MODE_RATE4_B6 0x28c > > > > > > > > > > > > +#define QSERDES_UFS_V6_RX_DLL0_FTUNE_CTRL 0x2f8 > > > > > > > > > > > > > > > > > > > > > > > > #endif > > > > > > > > > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > > > index 3927eba..e0a01497 100644 > > > > > > > > > > > > --- a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > > > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c > > > > > > > > > > > > @@ -649,32 +649,51 @@ static const struct qmp_phy_init_tbl sm8550_ufsphy_serdes[] = { > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x11), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x01), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x04), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), > > > > > > > > > > > > + > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_INITVAL2, 0x00), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x0a), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x18), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x14), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x7f), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x06), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x4c), > > > > > > > > > > > > +}; > > > > > > > > > > > > + > > > > > > > > > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_hs_b_serdes[] = { > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x44), > > > > > > > > > > > > +}; > > > > > > > > > > > > + > > > > > > > > > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g4_serdes[] = { > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x04), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), > > > > > > > > > > > > QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x0a), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x18), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x14), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x99), > > > > > > > > > > > > - QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x07), > > > > > > > > > > > > > > > > > > > > > > Aside from moving these registers to the HS_G4 table, you are also > > > > > > > > > > > changing these registers. It makes me think that there was an error in > > > > > > > > > > > the original programming sequence. > > > > > > > > > > > If that is correct, could you please split the patch into two pieces: > > > > > > > > > > > - Fix programming sequence (add proper Fixes tags) > > > > > > > > > > > - Split G4 and G5 tables. > > > > > > > > > > > > > > > > > > > > Ack > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > + > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x4c), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x0a), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x18), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x14), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x99), > > > > > > > > > > > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x07), > > > > > > > > > > > > > > > > > > > > > > I see all the MODE1 registers being only present in G4 and G5 tables. > > > > > > > > > > > Should they be programmed for the modes lower than G4? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > We use G4 table for all the modes <= G4. > > > > > > > > > > > > > > > > > > Could you please point me how it's handled? > > > > > > > > > In the patch I see just: > > > > > > > > > > > > > > > > > > if (qmp->submode == UFS_HS_G4) > > > > > > > > > qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_g4); > > > > > > > > > else if (qmp->submode == UFS_HS_G5) > > > > > > > > > qmp_ufs_serdes_init(qmp, &cfg->tbls_hs_g5); > > > > > > > > > > > > > > > > > > Which looks like two special cases (HS_G4 and HS_G5) and nothing for > > > > > > > > > anything else. > > > > > > > > > > > > > > > > > > > > > > > > > Yes, and the UFS driver passes only G4/G5. For all the gears <=G4, G4 init > > > > > > > > sequence will be used and for G5, G5 sequence will be used. > > > > > > > > > > > > > > > > > > > > > > That's what I could not find in the UFS driver. I see a call to > > > > > > > `phy_set_mode_ext(phy, PHY_MODE_UFS_HS_B, host->phy_gear);` and > > > > > > > host->phy_gear is initialised to UFS_HS_G2. > > > > > > > > > > > > > > > > > > > You need to check the UFS driver changes in this series to get the complete > > > > > > picture as the logic is getting changed. > > > > > > > > > > > > It is common to get confused because of the way the UFS driver (qcom mostly) > > > > > > handles the PHY init sequence programming. We used to have only one init > > > > > > sequence for older targets and life was easy. But when I wanted to add G4 > > > > > > support for SM8250, I learned that there are 2 separate init sequences. One for > > > > > > non-G4 and other for G4. So I used the phy_sub_mode property to pass the > > > > > > relevant mode from the UFS driver to the PHY driver and programmed the sequence > > > > > > accordingly. This got extended to non-G5 and G5 now. > > > > > > > > > > > > Now, the UFS driver will start probing from a low gear for older targets (G2) > > > > > > and G4/G5 for newer ones then scale up based on the device and host capability. > > > > > > For older targets, the common table (tbls) will be used if the submode doesn't > > > > > > match G4/G5. But for newer targets, the UFS driver will _only_ pass G4 or G5 as > > > > > > the phy_gear, so those specific sequence will only be used. > > > > > > > > > > > > Hope I'm clear. > > > > > > > > > > Yes, it is now clear, thank you! > > > > > > > > > > Would it be possible / feasible / logical to maintain this idea even > > > > > for newer platforms (leaving the HS_A / HS_B aside)? > > > > > > > > > > tbls - works for HS_G2 > > > > > tbls + tbls_g4 - works for HS_G4 > > > > > tbls + tbls_g5 - works for HS_G5 > > > > > > > > > > > > > No. The PHY team only gives 2 init sequences for any SoC now. > > > > > > Ack. Then the code should become > > > if (HS_G5) > > > program(tbls_hs_g5) > > > else > > > program(tbls_hs_g4); > > > > > > > This should work. Even if we have to accomodate G6 in the future, we can use > > "else if" for that and keep G4 as the "else" condition. This logic can also be > > optimized in the future. > > That would make dual init meaningless for old targets. Say on SM8450, the > initial PHY gear is G2, with the "else" condition, during the first init, G4 > table would be programmed, then gear negotiation happens btw host and device > and the negotiated gear is G3 (assume a UFS2.x is connected). During the 2nd > init, the "else" condition would __again__ program the G4 table - it is not > programming the non-G4 table for power saving. The dual init is supposed to > find the optimal PHY settings, but the "else" condition is programming G4 > table unconditinally. > > With the original code change in this patch, the dual init works as it is > for old targets. say SM8450, the initial PHY gear is G2, during the 2nd > init, it is programming the non-G4 table (assume a UFS2.x is connected), but > not the G4 table. > You are right. I completely overlooked the compatibility for old targets. But still we can move the common table to the "else" condition. This makes it clear that one of the 3 will be programmed at a time. But with the current logic, I get the impression that common table is overridden by G4/G5 tables. So this is what I'm suggesting: if (HS_G5) program(tbls_hs_g5) else if (HS_G4) program(tbls_hs_g4); else program(tbls_hs_common); - Mani > Thanks, > Can Guo. > > > > - Mani > > > > > > > > > > - Mani > > > > > > > > > I mean here that the PHY driver should not depend on the knowledge > > > > > that the UFS driver will not be setting HS_G2 for some particular > > > > > platform and ideally it should continue working if at some point we > > > > > change the UFS driver to set HS_G2. > > > > > > > > > > > > > > > > > > > > > > - Mani > > > > > > > > > > > > > Maybe we should change the condition here (in the PHY driver) to: > > > > > > > > > > > > > > if (qmp->submode <= UFS_HS_G4) > > > > > > > > > > > > > > ? > > > > > > > -- > > > > > > > With best wishes > > > > > > > Dmitry > > > > > > > > > > > > -- > > > > > > மணிவண்ணன் சதாசிவம் > > > > > > > > > > > > > > > > > > > > -- > > > > > With best wishes > > > > > Dmitry > > > > > > > > -- > > > > மணிவண்ணன் சதாசிவம் > > > > > > > > > > > > -- > > > With best wishes > > > Dmitry > > -- மணிவண்ணன் சதாசிவம் 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 AAE82C4332F for ; Sat, 11 Nov 2023 04:12:38 +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:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IxD5AAd/gpKQq+n+p5nSXMNqsbXW7hB1XB5qfPiDDwg=; b=QX6fXAVStYICvY B+oC/Tqe6WZ4zU08lhsxNURQFKY9xqc/sKxkZtQKkhteSXufbJNUGG3CspalL76lBKOPyALyaxbVl /hfkOkIgI29FsgH5NxUfbn4x1O5nKn2UNIxNYuqNYAQWwiz1CSPy4CAbfqQNL75fY5gz09ojRmJpm Xh6PulRa8gL5cBS9o2pVmwQN4unPWbTDBApn64tLISvVVtHnRrqgnXlbcPYroYslChlisM+a2Q9+p Z79iB9b82hqExNWN9ft3KrAfN44zoRRTBCMwdYIpn2Ya4YZ3m+2uHcaY4xDWhhQZFUfSiOumUyOG8 G0Ok9GEMVUPQ+SYld4TQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r1fMM-009zKf-0u; Sat, 11 Nov 2023 04:12:38 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r1fMH-009zJh-0c for linux-phy@lists.infradead.org; Sat, 11 Nov 2023 04:12:35 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 3AF83B81F5D; Sat, 11 Nov 2023 04:12:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 692E4C433C7; Sat, 11 Nov 2023 04:12:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699675944; bh=zlVIXusYR5JdUHxMJMxftsT7sO1DFB+E1/HW4Mh2VWM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=dHoKp4c/LKd6Oe4wiG+RqKMWf02cMbbbly0aJ4BZ5u8QD00M8WD16CFXtWjLADtec IUCr7WQskZHkf8nruGtAEYzlKgWFs50mvLQK9DTIiX4M3wF17I6dbzsaVbdjPRnGVd okTax5TdIqn2uMdaORHRv2036KJs1p0zYY5r7j59q9vlOY+1QOdSoZYo9xOHPDcAzj 5TuoFWsfG2NAT0y1HT1YYw/zGhj5pVPIRHCouYxtTDqe21ECsg3mAOK212QYIYS/w/ ng6WNlB90n5p6oKy5i/0ryvE5GestCHA0yoEWZzFTkUhJ/bH11F3uxfbytNIcCDBRu xzo/tyYlfhG5Q== Date: Sat, 11 Nov 2023 09:42:15 +0530 From: Manivannan Sadhasivam To: Can Guo Cc: Manivannan Sadhasivam , Dmitry Baryshkov , Can Guo , bvanassche@acm.org, stanley.chu@mediatek.com, adrian.hunter@intel.com, beanhuo@micron.com, avri.altman@wdc.com, junwoo80.lee@samsung.com, martin.petersen@oracle.com, linux-scsi@vger.kernel.org, Andy Gross , Bjorn Andersson , Konrad Dybcio , Vinod Koul , Kishon Vijay Abraham I , "open list:ARM/QUALCOMM SUPPORT" , "open list:GENERIC PHY FRAMEWORK" , open list Subject: Re: [PATCH v2 6/7] phy: qualcomm: phy-qcom-qmp-ufs: Add High Speed Gear 5 support for SM8550 Message-ID: <20231111041215.GA4823@thinkpad> References: <20231108054942.GF3296@thinkpad> <20231109032418.GA3752@thinkpad> <20231109104250.GF3752@thinkpad> <20231109160430.GG3752@thinkpad> <20231110131803.GA5025@thinkpad> <1ac5ae60-7e76-43f2-8b3d-c286eade0251@quicinc.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1ac5ae60-7e76-43f2-8b3d-c286eade0251@quicinc.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231110_201233_529118_276A3A26 X-CRM114-Status: GOOD ( 41.77 ) 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 T24gRnJpLCBOb3YgMTAsIDIwMjMgYXQgMTA6NDA6NTNQTSArMDgwMCwgQ2FuIEd1byB3cm90ZToK PiAKPiAKPiBPbiAxMS8xMC8yMDIzIDk6MTggUE0sIE1hbml2YW5uYW4gU2FkaGFzaXZhbSB3cm90 ZToKPiA+IE9uIEZyaSwgTm92IDEwLCAyMDIzIGF0IDEyOjExOjQ2QU0gKzAyMDAsIERtaXRyeSBC YXJ5c2hrb3Ygd3JvdGU6Cj4gPiA+IE9uIFRodSwgOSBOb3YgMjAyMyBhdCAxODowNCwgTWFuaXZh bm5hbiBTYWRoYXNpdmFtIDxtYW5pQGtlcm5lbC5vcmc+IHdyb3RlOgo+ID4gPiA+IAo+ID4gPiA+ IE9uIFRodSwgTm92IDA5LCAyMDIzIGF0IDAxOjAwOjUxUE0gKzAyMDAsIERtaXRyeSBCYXJ5c2hr b3Ygd3JvdGU6Cj4gPiA+ID4gPiBPbiBUaHUsIDkgTm92IDIwMjMgYXQgMTI6NDMsIE1hbml2YW5u YW4gU2FkaGFzaXZhbSA8bWFuaUBrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+IE9uIFRodSwgTm92IDA5LCAyMDIzIGF0IDExOjQwOjUxQU0gKzAyMDAsIERtaXRyeSBC YXJ5c2hrb3Ygd3JvdGU6Cj4gPiA+ID4gPiA+ID4gT24gVGh1LCA5IE5vdiAyMDIzIGF0IDA1OjI0 LCBNYW5pdmFubmFuIFNhZGhhc2l2YW0gPG1hbmlAa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+IE9uIFdlZCwgTm92IDA4LCAyMDIzIGF0IDA4OjU2OjE2 QU0gKzAyMDAsIERtaXRyeSBCYXJ5c2hrb3Ygd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+IE9uIFdl ZCwgOCBOb3YgMjAyMyBhdCAwNzo0OSwgTWFuaXZhbm5hbiBTYWRoYXNpdmFtIDxtYW5pQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+IE9u IFR1ZSwgTm92IDA3LCAyMDIzIGF0IDAzOjE4OjA5UE0gKzAyMDAsIERtaXRyeSBCYXJ5c2hrb3Yg d3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBPbiBUdWUsIDcgTm92IDIwMjMgYXQgMDY6NDcs IENhbiBHdW8gPGNhbmdAcXRpLnF1YWxjb21tLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBGcm9tOiBDYW4gR3VvIDxxdWljX2NhbmdA cXVpY2luYy5jb20+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiBPbiBTTTg1NTAsIHR3byBzZXRzIG9mIFVGUyBQSFkgc2V0dGluZ3MgYXJlIHByb3ZpZGVk LCBvbmUgc2V0IGlzIHRvIHN1cHBvcnQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gSFMtRzUsIGFu b3RoZXIgc2V0IGlzIHRvIHN1cHBvcnQgSFMtRzQgYW5kIGxvd2VyIGdlYXJzLiBUaGUgdHdvIHNl dHMgb2YgUEhZCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHNldHRpbmdzIGFyZSBwcm9ncmFtbWlu ZyBkaWZmZXJlbnQgdmFsdWVzIHRvIGRpZmZlcmVudCByZWdpc3RlcnMsIG1peGluZwo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiB0aGUgdHdvIHNldHMgYW5kL29yIG92ZXJ3cml0aW5nIG9uZSBzZXQg d2l0aCBhbm90aGVyIHNldCBpcyBkZWZpbml0ZWx5IG5vdAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiBibGVzc2VkIGJ5IFVGUyBQSFkgZGVzaWduZXJzLiBJbiBvcmRlciB0byBhZGQgSFMtRzUgc3Vw cG9ydCBmb3IgU004NTUwLCB3ZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBuZWVkIHRvIHNwbGl0 IHRoZSB0d28gc2V0cyBpbnRvIHRoZWlyIGRlZGljYXRlZCB0YWJsZXMsIGFuZCBsZWF2ZSBvbmx5 IHRoZQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBjb21tb24gc2V0dGluZ3MgaW4gdGhlIC50bGJz LiBUbyBoYXZlIHRoZSBQSFkgcHJvZ3JhbW1lZCB3aXRoIHRoZSBjb3JyZWN0Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IHNldCBvZiBQSFkgc2V0dGluZ3MsIHRoZSBzdWJtb2RlIHBhc3NlZCB0byBQ SFkgZHJpdmVyIG11c3QgYmUgZWl0aGVyIEhTLUc0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IG9y IEhTLUc1Lgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gPiA+ID4gPiBZb3Ugc2hvdWxkIGFsc28gbWVudGlvbiB0aGF0IHRoaXMgaXNzdWUg aXMgYWxzbyBwcmVzZW50IGluIEc0IHN1cHBvcnRlZCB0YXJnZXRzLgo+ID4gPiA+ID4gPiA+ID4g PiA+IEFuZCBhIG5vdGUgdGhhdCBpdCB3aWxsIGdldCBmaXhlZCBsYXRlci4KPiA+ID4gPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogQ2FuIEd1byA8 cXVpY19jYW5nQHF1aWNpbmMuY29tPgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0KPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gICBkcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcGNz LXVmcy12Ni5oICAgICB8ICAgMiArCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgZHJpdmVycy9w aHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtY29tLXY2LmggfCAgIDIgKwo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiAgIC4uLi9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy10eHJ4 LXVmcy12Ni5oICAgIHwgIDEyICsrKwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIGRyaXZlcnMv cGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYyAgICAgICAgICAgIHwgMTEyICsrKysrKysr KysrKysrKysrKy0tLQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgIDQgZmlsZXMgY2hhbmdlZCwg MTE1IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3F1YWxj b21tL3BoeS1xY29tLXFtcC1wY3MtdWZzLXY2LmggYi9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHkt cWNvbS1xbXAtcGNzLXVmcy12Ni5oCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IGluZGV4IGMyM2Q1 ZTQuLmU1NjNhZjUgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMv cGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1wY3MtdWZzLXY2LmgKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gKysrIGIvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXBjcy11ZnMtdjYu aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBAQCAtMTgsNiArMTgsNyBAQAo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gPiAgICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX0JJU1RfRklYRURfUEFUX0NUUkwg ICAgICAgICAgICAweDA2MAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVBIWV9W Nl9QQ1NfVUZTX1RYX0hTR0VBUl9DQVBBQklMSVRZICAgICAgICAgICAweDA3NAo+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1JYX0hTR0VBUl9DQVBBQklM SVRZICAgICAgICAgICAweDBiYwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBRUEhZ X1Y2X1BDU19VRlNfUlhfSFNfRzVfU1lOQ19MRU5HVEhfQ0FQQUJJTElUWSAgICAgICAgMHgxMmMK PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAjZGVmaW5lIFFQSFlfVjZfUENTX1VGU19ERUJVR19C VVNfQ0xLU0VMICAgICAgICAgICAgICAgMHgxNTgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAj ZGVmaW5lIFFQSFlfVjZfUENTX1VGU19MSU5FQ0ZHX0RJU0FCTEUgICAgICAgICAgICAgICAgICAg ICAgICAweDE3Ywo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVBIWV9WNl9QQ1Nf VUZTX1JYX01JTl9ISUJFUk44X1RJTUUgICAgICAgICAgICAweDE4NAo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiBAQCAtMjcsNSArMjgsNiBAQAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZp bmUgUVBIWV9WNl9QQ1NfVUZTX1JFQURZX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDFhOAo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1RYX01JRF9U RVJNX0NUUkwxICAgICAgICAgICAgICAweDFmNAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNk ZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX01VTFRJX0xBTkVfQ1RSTDEgICAgICAgICAgICAgICAweDFm Ywo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBRUEhZX1Y2X1BDU19VRlNfUlhfSFNH NV9TWU5DX1dBSVRfVElNRSAgICAgICAgIDB4MjIwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNlbmRpZgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtY29t LXY2LmggYi9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy1jb20tdjYu aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbmRleCBmNDIwZjhmLi5lZjM5MmNlIDEwMDY0NAo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNv bS1xbXAtcXNlcmRlcy1jb20tdjYuaAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2 ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNlcmRlcy1jb20tdjYuaAo+ID4gPiA+ID4g PiA+ID4gPiA+ID4gPiBAQCAtNTYsNiArNTYsOCBAQAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAg ICNkZWZpbmUgUVNFUkRFU19WNl9DT01fU1lTX0NMS19DVFJMICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4ZTQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAjZGVmaW5lIFFTRVJERVNfVjZf Q09NX1NZU0NMS19CVUZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweGU4Cj4gPiA+ID4g PiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1Y2X0NPTV9QTExfSVZDTyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGY0Cj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ICsjZGVmaW5lIFFTRVJERVNfVjZfQ09NX0NNTl9JRVRSSU0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweGZjCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNf VjZfQ09NX0NNTl9JUFRSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMAo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVNFUkRFU19WNl9DT01fU1lTQ0xLX0VOX1NF TCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ICAgI2RlZmluZSBRU0VSREVTX1Y2X0NPTV9SRVNFVFNNX0NOVFJMICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgxMTgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAjZGVmaW5lIFFTRVJERVNf VjZfQ09NX0xPQ0tfQ01QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyMAo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5 LXFjb20tcW1wLXFzZXJkZXMtdHhyeC11ZnMtdjYuaCBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3Bo eS1xY29tLXFtcC1xc2VyZGVzLXR4cngtdWZzLXY2LmgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g aW5kZXggMTViY2I0Yi4uNDhmMzFjOCAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLS0t IGEvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtdHhyeC11ZnMtdjYu aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHkt cWNvbS1xbXAtcXNlcmRlcy10eHJ4LXVmcy12Ni5oCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEBA IC0xMCwxMCArMTAsMjAgQEAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAjZGVmaW5lIFFTRVJE RVNfVUZTX1Y2X1RYX1JFU19DT0RFX0xBTkVfUlggICAgICAgICAgICAgICAgICAgICAweDJjCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9UWF9SRVNfQ09E RV9MQU5FX09GRlNFVF9UWCAgICAgICAgICAgICAgMHgzMAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g PiAgICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfVFhfUkVTX0NPREVfTEFORV9PRkZTRVRfUlggICAg ICAgICAgICAgIDB4MzQKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19V RlNfVjZfVFhfTEFORV9NT0RFXzEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2MKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfVFhfRlJfRENDX0NUUkwg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA4Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfVUNEUl9G QVNUTE9DS19GT19HQUlOX1JBVEUyICAgICAgICAgIDB4MDgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tfRk9fR0FJTl9SQVRF NCAgICAgICAgICAweDEwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNf VUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tfU09fR0FJTl9SQVRFNCAgICAgICAgICAweDI0Cj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExP Q0tfQ09VTlRfSElHSF9SQVRFNCAgICAgICAweDU0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsj ZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRk9fR0FJTl9SQVRFMiAgICAgICAgICAgICAg ICAgICAweGQ0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2 X1JYX1VDRFJfRk9fR0FJTl9SQVRFNCAgICAgICAgICAgICAgICAgICAweGRjCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfU09fR0FJTl9SQVRF NCAgICAgICAgICAgICAgICAgICAweGYwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5l IFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfUElfQ09OVFJPTFMgICAgICAgICAgICAgICAgICAgICAw eGY0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9W R0FfQ0FMX01BTl9WQUwgICAgICAgICAgICAgICAgICAgICAgMHgxNzgKPiA+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfRVFfT0ZGU0VUX0FEQVBUT1JfQ05U UkwxICAgICAgICAgICAgIDB4MWJjCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFT RVJERVNfVUZTX1Y2X1JYX09GRlNFVF9BREFQVE9SX0NOVFJMMyAgICAgICAgICAgICAgICAgICAg ICAgIDB4MWM0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1VGU19W Nl9SWF9NT0RFX1JBVEVfMF8xX0IwICAgICAgICAgICAgICAgICAgICAgMHgyMDgKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURV8wXzFf QjEgICAgICAgICAgICAgICAgICAgICAweDIwYwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICNk ZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFXzBfMV9CMyAgICAgICAgICAgICAgICAg ICAgIDB4MjE0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEBAIC0yNSw2ICszNSw4IEBACj4gPiA+ ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9NT0RFX1JBVEUz X0I1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2NAo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiAgICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFM19COCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAj ZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURTRfQjMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4MjgwCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsjZGVmaW5lIFFTRVJE RVNfVUZTX1Y2X1JYX01PREVfUkFURTRfQjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4Mjg0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9S WF9NT0RFX1JBVEU0X0I2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4Ywo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gPiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9ETEwwX0ZUVU5F X0NUUkwgICAgICAgICAgICAgICAgICAgICAgMHgyZjgKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4g Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgI2VuZGlmCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdWZzLmMgYi9k cml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdWZzLmMKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gaW5kZXggMzkyN2ViYS4uZTBhMDE0OTcgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAt dWZzLmMKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gQEAgLTY0OSwzMiArNjQ5LDUxIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9pbml0X3RibCBzbTg1NTBfdWZzcGh5X3NlcmRlc1tdID0g ewo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJE RVNfVjZfQ09NX0hTQ0xLX1NFTF8xLCAweDExKSwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAg ICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9IU0NMS19IU19TV0lUQ0hfU0VM XzEsIDB4MDApLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgICBRTVBfUEhZX0lOSVRf Q0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QX0VOLCAweDAxKSwKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1ZDT19UVU5FX01B UCwgMHgwNCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gICAgICAgUU1QX1BIWV9JTklUX0NG RyhRU0VSREVTX1Y2X0NPTV9QTExfSVZDTywgMHgwZiksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VS REVTX1Y2X0NPTV9WQ09fVFVORV9JTklUVkFMMiwgMHgwMCksCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ICAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fREVDX1NUQVJUX01P REUwLCAweDQxKSwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRf Q0ZHKFFTRVJERVNfVjZfQ09NX0NQX0NUUkxfTU9ERTAsIDB4MGEpLAo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiAgICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9SQ1RS TF9NT0RFMCwgMHgxOCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgIFFNUF9QSFlf SU5JVF9DRkcoUVNFUkRFU19WNl9DT01fUExMX0NDVFJMX01PREUwLCAweDE0KSwKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9M T0NLX0NNUDFfTU9ERTAsIDB4N2YpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAgICAgICAgICBR TVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QMl9NT0RFMCwgMHgwNiksCj4g PiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2 X0NPTV9ERUNfU1RBUlRfTU9ERTAsIDB4NGMpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArfTsK PiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBxbXBfcGh5X2luaXRfdGJsIHNtODU1MF91ZnNwaHlfaHNfYl9zZXJkZXNb XSA9IHsKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFT RVJERVNfVjZfQ09NX1ZDT19UVU5FX01BUCwgMHg0NCksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ ICt9Owo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90Ymwgc204NTUwX3Vmc3BoeV9nNF9zZXJk ZXNbXSA9IHsKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZH KFFTRVJERVNfVjZfQ09NX1ZDT19UVU5FX01BUCwgMHgwNCksCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9QTExfSVZDTywgMHgw ZiksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNF UkRFU19WNl9DT01fQ1BfQ1RSTF9NT0RFMCwgMHgwYSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ IC0gICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9QTExfUkNUUkxfTU9ERTAs IDB4MTgpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gPiAtICAgICAgIFFNUF9QSFlfSU5JVF9DRkco UVNFUkRFU19WNl9DT01fUExMX0NDVFJMX01PREUwLCAweDE0KSwKPiA+ID4gPiA+ID4gPiA+ID4g PiA+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QMV9N T0RFMCwgMHg5OSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gICAgICAgUU1QX1BIWV9JTklU X0NGRyhRU0VSREVTX1Y2X0NPTV9MT0NLX0NNUDJfTU9ERTAsIDB4MDcpLAo+ID4gPiA+ID4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBBc2lkZSBmcm9tIG1vdmluZyB0aGVzZSBy ZWdpc3RlcnMgdG8gdGhlIEhTX0c0IHRhYmxlLCB5b3UgYXJlIGFsc28KPiA+ID4gPiA+ID4gPiA+ ID4gPiA+IGNoYW5naW5nIHRoZXNlIHJlZ2lzdGVycy4gSXQgbWFrZXMgbWUgdGhpbmsgdGhhdCB0 aGVyZSB3YXMgYW4gZXJyb3IgaW4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IHRoZSBvcmlnaW5hbCBw cm9ncmFtbWluZyBzZXF1ZW5jZS4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IElmIHRoYXQgaXMgY29y cmVjdCwgY291bGQgeW91IHBsZWFzZSBzcGxpdCB0aGUgcGF0Y2ggaW50byB0d28gcGllY2VzOgo+ ID4gPiA+ID4gPiA+ID4gPiA+ID4gLSBGaXggcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKGFkZCBwcm9w ZXIgRml4ZXMgdGFncykKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IC0gU3BsaXQgRzQgYW5kIEc1IHRh Ymxlcy4KPiA+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gPiBBY2sKPiA+ID4g PiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhR U0VSREVTX1Y2X0NPTV9ERUNfU1RBUlRfTU9ERTEsIDB4NGMpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fQ1BfQ1RSTF9NT0RF MSwgMHgwYSksCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NG RyhRU0VSREVTX1Y2X0NPTV9QTExfUkNUUkxfTU9ERTEsIDB4MTgpLAo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fUExMX0NDVFJM X01PREUxLCAweDE0KSwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QMV9NT0RFMSwgMHg5OSksCj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9MT0NL X0NNUDJfTU9ERTEsIDB4MDcpLAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4g PiA+ID4gPiBJIHNlZSBhbGwgdGhlIE1PREUxIHJlZ2lzdGVycyBiZWluZyBvbmx5IHByZXNlbnQg aW4gRzQgYW5kIEc1IHRhYmxlcy4KPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNob3VsZCB0aGV5IGJl IHByb2dyYW1tZWQgZm9yIHRoZSBtb2RlcyBsb3dlciB0aGFuIEc0Pwo+ID4gPiA+ID4gPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ID4gV2UgdXNlIEc0 IHRhYmxlIGZvciBhbGwgdGhlIG1vZGVzIDw9IEc0Lgo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+ID4gQ291bGQgeW91IHBsZWFzZSBwb2ludCBtZSBob3cgaXQncyBoYW5kbGVkPwo+ ID4gPiA+ID4gPiA+ID4gPiBJbiB0aGUgcGF0Y2ggSSBzZWUganVzdDoKPiA+ID4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgaWYgKHFtcC0+c3VibW9kZSA9PSBVRlNfSFNf RzQpCj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgICAgICAgICBxbXBfdWZzX3NlcmRlc19pbml0 KHFtcCwgJmNmZy0+dGJsc19oc19nNCk7Cj4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgZWxzZSBp ZiAocW1wLT5zdWJtb2RlID09IFVGU19IU19HNSkKPiA+ID4gPiA+ID4gPiA+ID4gICAgICAgICAg ICAgICAgIHFtcF91ZnNfc2VyZGVzX2luaXQocW1wLCAmY2ZnLT50YmxzX2hzX2c1KTsKPiA+ID4g PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IFdoaWNoIGxvb2tzIGxpa2UgdHdvIHNwZWNp YWwgY2FzZXMgKEhTX0c0IGFuZCBIU19HNSkgYW5kIG5vdGhpbmcgZm9yCj4gPiA+ID4gPiA+ID4g PiA+IGFueXRoaW5nIGVsc2UuCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID4gPiBZZXMsIGFuZCB0aGUgVUZTIGRyaXZlciBwYXNzZXMgb25seSBHNC9HNS4g Rm9yIGFsbCB0aGUgZ2VhcnMgPD1HNCwgRzQgaW5pdAo+ID4gPiA+ID4gPiA+ID4gc2VxdWVuY2Ug d2lsbCBiZSB1c2VkIGFuZCBmb3IgRzUsIEc1IHNlcXVlbmNlIHdpbGwgYmUgdXNlZC4KPiA+ID4g PiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFRoYXQncyB3aGF0IEkgY291 bGQgbm90IGZpbmQgaW4gdGhlIFVGUyBkcml2ZXIuIEkgc2VlIGEgY2FsbCB0bwo+ID4gPiA+ID4g PiA+IGBwaHlfc2V0X21vZGVfZXh0KHBoeSwgUEhZX01PREVfVUZTX0hTX0IsIGhvc3QtPnBoeV9n ZWFyKTtgIGFuZAo+ID4gPiA+ID4gPiA+IGhvc3QtPnBoeV9nZWFyIGlzIGluaXRpYWxpc2VkIHRv IFVGU19IU19HMi4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFlvdSBu ZWVkIHRvIGNoZWNrIHRoZSBVRlMgZHJpdmVyIGNoYW5nZXMgaW4gdGhpcyBzZXJpZXMgdG8gZ2V0 IHRoZSBjb21wbGV0ZQo+ID4gPiA+ID4gPiBwaWN0dXJlIGFzIHRoZSBsb2dpYyBpcyBnZXR0aW5n IGNoYW5nZWQuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBJdCBpcyBjb21tb24gdG8gZ2V0IGNv bmZ1c2VkIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgVUZTIGRyaXZlciAocWNvbSBtb3N0bHkpCj4g PiA+ID4gPiA+IGhhbmRsZXMgdGhlIFBIWSBpbml0IHNlcXVlbmNlIHByb2dyYW1taW5nLiBXZSB1 c2VkIHRvIGhhdmUgb25seSBvbmUgaW5pdAo+ID4gPiA+ID4gPiBzZXF1ZW5jZSBmb3Igb2xkZXIg dGFyZ2V0cyBhbmQgbGlmZSB3YXMgZWFzeS4gQnV0IHdoZW4gSSB3YW50ZWQgdG8gYWRkIEc0Cj4g PiA+ID4gPiA+IHN1cHBvcnQgZm9yIFNNODI1MCwgSSBsZWFybmVkIHRoYXQgdGhlcmUgYXJlIDIg c2VwYXJhdGUgaW5pdCBzZXF1ZW5jZXMuIE9uZSBmb3IKPiA+ID4gPiA+ID4gbm9uLUc0IGFuZCBv dGhlciBmb3IgRzQuIFNvIEkgdXNlZCB0aGUgcGh5X3N1Yl9tb2RlIHByb3BlcnR5IHRvIHBhc3Mg dGhlCj4gPiA+ID4gPiA+IHJlbGV2YW50IG1vZGUgZnJvbSB0aGUgVUZTIGRyaXZlciB0byB0aGUg UEhZIGRyaXZlciBhbmQgcHJvZ3JhbW1lZCB0aGUgc2VxdWVuY2UKPiA+ID4gPiA+ID4gYWNjb3Jk aW5nbHkuIFRoaXMgZ290IGV4dGVuZGVkIHRvIG5vbi1HNSBhbmQgRzUgbm93Lgo+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gTm93LCB0aGUgVUZTIGRyaXZlciB3aWxsIHN0YXJ0IHByb2JpbmcgZnJv bSBhIGxvdyBnZWFyIGZvciBvbGRlciB0YXJnZXRzIChHMikKPiA+ID4gPiA+ID4gYW5kIEc0L0c1 IGZvciBuZXdlciBvbmVzIHRoZW4gc2NhbGUgdXAgYmFzZWQgb24gdGhlIGRldmljZSBhbmQgaG9z dCBjYXBhYmlsaXR5Lgo+ID4gPiA+ID4gPiBGb3Igb2xkZXIgdGFyZ2V0cywgdGhlIGNvbW1vbiB0 YWJsZSAodGJscykgd2lsbCBiZSB1c2VkIGlmIHRoZSBzdWJtb2RlIGRvZXNuJ3QKPiA+ID4gPiA+ ID4gbWF0Y2ggRzQvRzUuIEJ1dCBmb3IgbmV3ZXIgdGFyZ2V0cywgdGhlIFVGUyBkcml2ZXIgd2ls bCBfb25seV8gcGFzcyBHNCBvciBHNSBhcwo+ID4gPiA+ID4gPiB0aGUgcGh5X2dlYXIsIHNvIHRo b3NlIHNwZWNpZmljIHNlcXVlbmNlIHdpbGwgb25seSBiZSB1c2VkLgo+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gSG9wZSBJJ20gY2xlYXIuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFllcywgaXQgaXMg bm93IGNsZWFyLCB0aGFuayB5b3UhCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFdvdWxkIGl0IGJlIHBv c3NpYmxlIC8gZmVhc2libGUgLyBsb2dpY2FsIHRvIG1haW50YWluIHRoaXMgaWRlYSBldmVuCj4g PiA+ID4gPiBmb3IgbmV3ZXIgcGxhdGZvcm1zIChsZWF2aW5nIHRoZSBIU19BICAvIEhTX0IgYXNp ZGUpPwo+ID4gPiA+ID4gCj4gPiA+ID4gPiB0YmxzIC0gd29ya3MgZm9yIEhTX0cyCj4gPiA+ID4g PiB0YmxzICsgdGJsc19nNCAtIHdvcmtzIGZvciBIU19HNAo+ID4gPiA+ID4gdGJscyArIHRibHNf ZzUgLSB3b3JrcyBmb3IgSFNfRzUKPiA+ID4gPiA+IAo+ID4gPiA+IAo+ID4gPiA+IE5vLiBUaGUg UEhZIHRlYW0gb25seSBnaXZlcyAyIGluaXQgc2VxdWVuY2VzIGZvciBhbnkgU29DIG5vdy4KPiA+ ID4gCj4gPiA+IEFjay4gVGhlbiB0aGUgY29kZSBzaG91bGQgYmVjb21lCj4gPiA+IGlmIChIU19H NSkKPiA+ID4gICAgIHByb2dyYW0odGJsc19oc19nNSkKPiA+ID4gZWxzZQo+ID4gPiAgICAgcHJv Z3JhbSh0YmxzX2hzX2c0KTsKPiA+ID4gCj4gPiAKPiA+IFRoaXMgc2hvdWxkIHdvcmsuIEV2ZW4g aWYgd2UgaGF2ZSB0byBhY2NvbW9kYXRlIEc2IGluIHRoZSBmdXR1cmUsIHdlIGNhbiB1c2UKPiA+ ICJlbHNlIGlmIiBmb3IgdGhhdCBhbmQga2VlcCBHNCBhcyB0aGUgImVsc2UiIGNvbmRpdGlvbi4g VGhpcyBsb2dpYyBjYW4gYWxzbyBiZQo+ID4gb3B0aW1pemVkIGluIHRoZSBmdXR1cmUuCj4gCj4g VGhhdCB3b3VsZCBtYWtlIGR1YWwgaW5pdCBtZWFuaW5nbGVzcyBmb3Igb2xkIHRhcmdldHMuIFNh eSBvbiBTTTg0NTAsIHRoZQo+IGluaXRpYWwgUEhZIGdlYXIgaXMgRzIsIHdpdGggdGhlICJlbHNl IiBjb25kaXRpb24sIGR1cmluZyB0aGUgZmlyc3QgaW5pdCwgRzQKPiB0YWJsZSB3b3VsZCBiZSBw cm9ncmFtbWVkLCB0aGVuIGdlYXIgbmVnb3RpYXRpb24gaGFwcGVucyBidHcgaG9zdCBhbmQgZGV2 aWNlCj4gYW5kIHRoZSBuZWdvdGlhdGVkIGdlYXIgaXMgRzMgKGFzc3VtZSBhIFVGUzIueCBpcyBj b25uZWN0ZWQpLiBEdXJpbmcgdGhlIDJuZAo+IGluaXQsIHRoZSAiZWxzZSIgY29uZGl0aW9uIHdv dWxkIF9fYWdhaW5fXyBwcm9ncmFtIHRoZSBHNCB0YWJsZSAtIGl0IGlzIG5vdAo+IHByb2dyYW1t aW5nIHRoZSBub24tRzQgdGFibGUgZm9yIHBvd2VyIHNhdmluZy4gVGhlIGR1YWwgaW5pdCBpcyBz dXBwb3NlZCB0bwo+IGZpbmQgdGhlIG9wdGltYWwgUEhZIHNldHRpbmdzLCBidXQgdGhlICJlbHNl IiBjb25kaXRpb24gaXMgcHJvZ3JhbW1pbmcgRzQKPiB0YWJsZSB1bmNvbmRpdGluYWxseS4KPiAK PiBXaXRoIHRoZSBvcmlnaW5hbCBjb2RlIGNoYW5nZSBpbiB0aGlzIHBhdGNoLCB0aGUgZHVhbCBp bml0IHdvcmtzIGFzIGl0IGlzCj4gZm9yIG9sZCB0YXJnZXRzLiBzYXkgU004NDUwLCB0aGUgaW5p dGlhbCBQSFkgZ2VhciBpcyBHMiwgZHVyaW5nIHRoZSAybmQKPiBpbml0LCBpdCBpcyBwcm9ncmFt bWluZyB0aGUgbm9uLUc0IHRhYmxlIChhc3N1bWUgYSBVRlMyLnggaXMgY29ubmVjdGVkKSwgYnV0 Cj4gbm90IHRoZSBHNCB0YWJsZS4KPiAKCllvdSBhcmUgcmlnaHQuIEkgY29tcGxldGVseSBvdmVy bG9va2VkIHRoZSBjb21wYXRpYmlsaXR5IGZvciBvbGQgdGFyZ2V0cy4gQnV0CnN0aWxsIHdlIGNh biBtb3ZlIHRoZSBjb21tb24gdGFibGUgdG8gdGhlICJlbHNlIiBjb25kaXRpb24uIFRoaXMgbWFr ZXMgaXQgY2xlYXIKdGhhdCBvbmUgb2YgdGhlIDMgd2lsbCBiZSBwcm9ncmFtbWVkIGF0IGEgdGlt ZS4gQnV0IHdpdGggdGhlIGN1cnJlbnQgbG9naWMsIEkKZ2V0IHRoZSBpbXByZXNzaW9uIHRoYXQg Y29tbW9uIHRhYmxlIGlzIG92ZXJyaWRkZW4gYnkgRzQvRzUgdGFibGVzLgoKU28gdGhpcyBpcyB3 aGF0IEknbSBzdWdnZXN0aW5nOgoKaWYgKEhTX0c1KQoJcHJvZ3JhbSh0YmxzX2hzX2c1KQplbHNl IGlmIChIU19HNCkKCXByb2dyYW0odGJsc19oc19nNCk7CmVsc2UKCXByb2dyYW0odGJsc19oc19j b21tb24pOwoKLSBNYW5pCgo+IFRoYW5rcywKPiBDYW4gR3VvLgo+ID4gCj4gPiAtIE1hbmkKPiA+ IAo+ID4gPiA+IAo+ID4gPiA+IC0gTWFuaQo+ID4gPiA+IAo+ID4gPiA+ID4gSSBtZWFuIGhlcmUg dGhhdCB0aGUgUEhZIGRyaXZlciBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGUga25vd2xlZGdlCj4g PiA+ID4gPiB0aGF0IHRoZSBVRlMgZHJpdmVyIHdpbGwgbm90IGJlIHNldHRpbmcgSFNfRzIgZm9y IHNvbWUgcGFydGljdWxhcgo+ID4gPiA+ID4gcGxhdGZvcm0gYW5kIGlkZWFsbHkgaXQgc2hvdWxk IGNvbnRpbnVlIHdvcmtpbmcgaWYgYXQgc29tZSBwb2ludCB3ZQo+ID4gPiA+ID4gY2hhbmdlIHRo ZSBVRlMgZHJpdmVyIHRvIHNldCBIU19HMi4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiAtIE1hbmkKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gTWF5YmUg d2Ugc2hvdWxkIGNoYW5nZSB0aGUgY29uZGl0aW9uIGhlcmUgKGluIHRoZSBQSFkgZHJpdmVyKSB0 bzoKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBpZiAocW1wLT5zdWJtb2RlIDw9IFVGU19I U19HNCkKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA/Cj4gPiA+ID4gPiA+ID4gLS0KPiA+ ID4gPiA+ID4gPiBXaXRoIGJlc3Qgd2lzaGVzCj4gPiA+ID4gPiA+ID4gRG1pdHJ5Cj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gPiDgrq7grqPgrr/grrXgrqPgr43grqPgrqng r40g4K6a4K6k4K6+4K6a4K6/4K614K6u4K+NCj4gPiA+ID4gPiAKPiA+ID4gPiA+IAo+ID4gPiA+ ID4gCj4gPiA+ID4gPiAtLQo+ID4gPiA+ID4gV2l0aCBiZXN0IHdpc2hlcwo+ID4gPiA+ID4gRG1p dHJ5Cj4gPiA+ID4gCj4gPiA+ID4gLS0KPiA+ID4gPiDgrq7grqPgrr/grrXgrqPgr43grqPgrqng r40g4K6a4K6k4K6+4K6a4K6/4K614K6u4K+NCj4gPiA+IAo+ID4gPiAKPiA+ID4gCj4gPiA+IC0t IAo+ID4gPiBXaXRoIGJlc3Qgd2lzaGVzCj4gPiA+IERtaXRyeQo+ID4gCgotLSAK4K6u4K6j4K6/ 4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+CuteCuruCvjQoKLS0gCmxpbnV4LXBo eSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==