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 55DA0C8D2 for ; Wed, 8 Nov 2023 05:49:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ul1KmJ3Y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AE29C433C7; Wed, 8 Nov 2023 05:49:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699422593; bh=fHKO9sEkg99Vd/BalQyPm6GJ2pRcwoiVjJTRjG7+h0I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ul1KmJ3YkfkSKre+fQiHXUzMA3EDFM3nH+mvnInuqrhkvI7ofaPijW4VH+oO3YZc5 QPM2CwX2PL0Y7jZMubjo1caUdqaEZCxUmYXz2EFNlkKQvbnyLI7JkWHbeRBNX0v2X3 JqY9kgvEiPQERaxdm8xc6k/mVzh2O2SoXF8LodVs6aGB23xVdS9cZxTPuq01SVh9VO zKb0afMgkC8nW2sCTy5y0a4zIRMZvszvecvvxJj3eyZgenaOk448NgrYVSg/eVfksL YxQ9y69nh20k0wd682binOKOrHQcwt61hY7ZACkd3fV+Y7gUmRFEHE8RX4oSAt+qOV AQC7/QWVuOS0A== Date: Wed, 8 Nov 2023 11:19:42 +0530 From: Manivannan Sadhasivam To: Dmitry Baryshkov Cc: Can Guo , quic_cang@quicinc.com, 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: <20231108054942.GF3296@thinkpad> References: <1699332374-9324-1-git-send-email-cang@qti.qualcomm.com> <1699332374-9324-7-git-send-email-cang@qti.qualcomm.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: 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. > > +}; > > + > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g5_serdes[] = { > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x1f), > > + > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_IETRIM, 0x1b), > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_IPTRIM, 0x1c), > > + QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x06), > > }; > > > > static const struct qmp_phy_init_tbl sm8550_ufsphy_tx[] = { > > - QMP_PHY_INIT_CFG(QSERDES_V6_TX_LANE_MODE_1, 0x05), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_TX_LANE_MODE_1, 0x05), > > QMP_PHY_INIT_CFG(QSERDES_UFS_V6_TX_RES_CODE_LANE_OFFSET_TX, 0x07), > > }; > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g4_tx[] = { > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_TX_FR_DCC_CTRL, 0x4c), > > +}; > > + > > static const struct qmp_phy_init_tbl sm8550_ufsphy_rx[] = { > > - QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE2, 0x0c), > > - QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE4, 0x0f), > > - QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_VGA_CAL_MAN_VAL, 0x0e), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE2, 0x0c), > > > > QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE_0_1_B0, 0xc2), > > QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE_0_1_B1, 0xc2), > > @@ -690,14 +709,46 @@ static const struct qmp_phy_init_tbl sm8550_ufsphy_rx[] = { > > QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE3_B8, 0x02), > > }; > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g4_rx[] = { > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_VGA_CAL_MAN_VAL, 0x0e), > > +}; > > + > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g5_rx[] = { > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FO_GAIN_RATE4, 0x0c), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_SO_GAIN_RATE4, 0x04), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x14), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_PI_CONTROLS, 0x07), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_OFFSET_ADAPTOR_CNTRL3, 0x0e), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FASTLOCK_COUNT_HIGH_RATE4, 0x02), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FASTLOCK_FO_GAIN_RATE4, 0x1c), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_UCDR_FASTLOCK_SO_GAIN_RATE4, 0x06), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_VGA_CAL_MAN_VAL, 0x08), > > + > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE4_B3, 0xb9), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE4_B4, 0x4f), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_MODE_RATE4_B6, 0xff), > > + QMP_PHY_INIT_CFG(QSERDES_UFS_V6_RX_DLL0_FTUNE_CTRL, 0x30), > > +}; > > + > > static const struct qmp_phy_init_tbl sm8550_ufsphy_pcs[] = { > > QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_SIGDET_CTRL2, 0x69), > > QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_LARGE_AMP_DRV_LVL, 0x0f), > > QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_MID_TERM_CTRL1, 0x43), > > - QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_PLL_CNTL, 0x2b), > > QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_MULTI_LANE_CTRL1, 0x02), > > }; > > > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g4_pcs[] = { > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_PLL_CNTL, 0x2b), > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_TX_HSGEAR_CAPABILITY, 0x04), > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_HSGEAR_CAPABILITY, 0x04), > > +}; > > + > > +static const struct qmp_phy_init_tbl sm8550_ufsphy_g5_pcs[] = { > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_PLL_CNTL, 0x33), > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_HS_G5_SYNC_LENGTH_CAPABILITY, 0x4f), > > + QMP_PHY_INIT_CFG(QPHY_V6_PCS_UFS_RX_HSG5_SYNC_WAIT_TIME, 0x9e), > > +}; > > + > > struct qmp_ufs_offsets { > > u16 serdes; > > u16 pcs; > > @@ -731,6 +782,8 @@ struct qmp_phy_cfg { > > const struct qmp_phy_cfg_tbls tbls_hs_b; > > /* Additional sequence for HS G4 */ > > const struct qmp_phy_cfg_tbls tbls_hs_g4; > > + /* Additional sequence for HS G4 */ HS G5 > > + const struct qmp_phy_cfg_tbls tbls_hs_g5; > > > > /* clock ids to be requested */ > > const char * const *clk_list; > > @@ -1157,6 +1210,28 @@ static const struct qmp_phy_cfg sm8550_ufsphy_cfg = { > > .pcs = sm8550_ufsphy_pcs, > > .pcs_num = ARRAY_SIZE(sm8550_ufsphy_pcs), > > }, > > + .tbls_hs_b = { > > + .serdes = sm8550_ufsphy_hs_b_serdes, > > + .serdes_num = ARRAY_SIZE(sm8550_ufsphy_hs_b_serdes), > > + }, > > + .tbls_hs_g4 = { > > + .serdes = sm8550_ufsphy_g4_serdes, > > + .serdes_num = ARRAY_SIZE(sm8550_ufsphy_g4_serdes), > > + .tx = sm8550_ufsphy_g4_tx, > > + .tx_num = ARRAY_SIZE(sm8550_ufsphy_g4_tx), > > + .rx = sm8550_ufsphy_g4_rx, > > + .rx_num = ARRAY_SIZE(sm8550_ufsphy_g4_rx), > > + .pcs = sm8550_ufsphy_g4_pcs, > > + .pcs_num = ARRAY_SIZE(sm8550_ufsphy_g4_pcs), > > + }, > > + .tbls_hs_g5 = { > > + .serdes = sm8550_ufsphy_g5_serdes, > > + .serdes_num = ARRAY_SIZE(sm8550_ufsphy_g5_serdes), > > + .rx = sm8550_ufsphy_g5_rx, > > + .rx_num = ARRAY_SIZE(sm8550_ufsphy_g5_rx), > > + .pcs = sm8550_ufsphy_g5_pcs, > > + .pcs_num = ARRAY_SIZE(sm8550_ufsphy_g5_pcs), > > + }, > > .clk_list = sdm845_ufs_phy_clk_l, > > .num_clks = ARRAY_SIZE(sdm845_ufs_phy_clk_l), > > .vreg_list = qmp_phy_vreg_l, > > @@ -1222,14 +1297,25 @@ static void qmp_ufs_pcs_init(struct qmp_ufs *qmp, const struct qmp_phy_cfg_tbls > > static void qmp_ufs_init_registers(struct qmp_ufs *qmp, const struct qmp_phy_cfg *cfg) > > { > > qmp_ufs_serdes_init(qmp, &cfg->tbls); > > + 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); > > + Should we program submode sequence after HS_B? - Mani -- மணிவண்ணன் சதாசிவம் 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 955A5C4167B for ; Wed, 8 Nov 2023 05:49:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-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=ExqKNs1UsgKkJfgYbqHozVaXxIIaOWAMdPwxqQcxO4I=; b=ogoikoTzYsDAti sm3BxWgxcJYhyX3G9beENLANYHHgLSXrVREEA+VZjbarS8GLhTi6Zz6Qfyz7LRcJyvBZK91v8MEia CuFiL2AaBdoqqr/Zo1PoBXlZtbpDbW/FZbAsi1GxR0qGSV6IaYWPHMeGb4JMGPF5YbZDpoDI178kE GZS8O66D9EY8pQSPRq0tSn0fyyXY3EVfbonZ40HXD7kR6B+5QyJ67KrnJ4OyFgxCjjGCfbbOe6dFy JO59o5NWbzJFzCswODwPgsZP1Ddq1n1XJTfawRVSxUNanZYvBz9HXmbv0X6eau6MC1+pqXLR/3e25 0r3H31ViMGRZpoLPgUXA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r0bRv-0031ED-0F; Wed, 08 Nov 2023 05:49:59 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r0bRs-0031Dc-0e for linux-phy@lists.infradead.org; Wed, 08 Nov 2023 05:49:58 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 63EE3B81A10; Wed, 8 Nov 2023 05:49:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AE29C433C7; Wed, 8 Nov 2023 05:49:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1699422593; bh=fHKO9sEkg99Vd/BalQyPm6GJ2pRcwoiVjJTRjG7+h0I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ul1KmJ3YkfkSKre+fQiHXUzMA3EDFM3nH+mvnInuqrhkvI7ofaPijW4VH+oO3YZc5 QPM2CwX2PL0Y7jZMubjo1caUdqaEZCxUmYXz2EFNlkKQvbnyLI7JkWHbeRBNX0v2X3 JqY9kgvEiPQERaxdm8xc6k/mVzh2O2SoXF8LodVs6aGB23xVdS9cZxTPuq01SVh9VO zKb0afMgkC8nW2sCTy5y0a4zIRMZvszvecvvxJj3eyZgenaOk448NgrYVSg/eVfksL YxQ9y69nh20k0wd682binOKOrHQcwt61hY7ZACkd3fV+Y7gUmRFEHE8RX4oSAt+qOV AQC7/QWVuOS0A== Date: Wed, 8 Nov 2023 11:19:42 +0530 From: Manivannan Sadhasivam To: Dmitry Baryshkov Cc: Can Guo , quic_cang@quicinc.com, 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: <20231108054942.GF3296@thinkpad> References: <1699332374-9324-1-git-send-email-cang@qti.qualcomm.com> <1699332374-9324-7-git-send-email-cang@qti.qualcomm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231107_214956_540198_56B0786C X-CRM114-Status: GOOD ( 31.72 ) 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 T24gVHVlLCBOb3YgMDcsIDIwMjMgYXQgMDM6MTg6MDlQTSArMDIwMCwgRG1pdHJ5IEJhcnlzaGtv diB3cm90ZToKPiBPbiBUdWUsIDcgTm92IDIwMjMgYXQgMDY6NDcsIENhbiBHdW8gPGNhbmdAcXRp LnF1YWxjb21tLmNvbT4gd3JvdGU6Cj4gPgo+ID4gRnJvbTogQ2FuIEd1byA8cXVpY19jYW5nQHF1 aWNpbmMuY29tPgo+ID4KPiA+IE9uIFNNODU1MCwgdHdvIHNldHMgb2YgVUZTIFBIWSBzZXR0aW5n cyBhcmUgcHJvdmlkZWQsIG9uZSBzZXQgaXMgdG8gc3VwcG9ydAo+ID4gSFMtRzUsIGFub3RoZXIg c2V0IGlzIHRvIHN1cHBvcnQgSFMtRzQgYW5kIGxvd2VyIGdlYXJzLiBUaGUgdHdvIHNldHMgb2Yg UEhZCj4gPiBzZXR0aW5ncyBhcmUgcHJvZ3JhbW1pbmcgZGlmZmVyZW50IHZhbHVlcyB0byBkaWZm ZXJlbnQgcmVnaXN0ZXJzLCBtaXhpbmcKPiA+IHRoZSB0d28gc2V0cyBhbmQvb3Igb3ZlcndyaXRp bmcgb25lIHNldCB3aXRoIGFub3RoZXIgc2V0IGlzIGRlZmluaXRlbHkgbm90Cj4gPiBibGVzc2Vk IGJ5IFVGUyBQSFkgZGVzaWduZXJzLiBJbiBvcmRlciB0byBhZGQgSFMtRzUgc3VwcG9ydCBmb3Ig U004NTUwLCB3ZQo+ID4gbmVlZCB0byBzcGxpdCB0aGUgdHdvIHNldHMgaW50byB0aGVpciBkZWRp Y2F0ZWQgdGFibGVzLCBhbmQgbGVhdmUgb25seSB0aGUKPiA+IGNvbW1vbiBzZXR0aW5ncyBpbiB0 aGUgLnRsYnMuIFRvIGhhdmUgdGhlIFBIWSBwcm9ncmFtbWVkIHdpdGggdGhlIGNvcnJlY3QKPiA+ IHNldCBvZiBQSFkgc2V0dGluZ3MsIHRoZSBzdWJtb2RlIHBhc3NlZCB0byBQSFkgZHJpdmVyIG11 c3QgYmUgZWl0aGVyIEhTLUc0Cj4gPiBvciBIUy1HNS4KPiA+CgpZb3Ugc2hvdWxkIGFsc28gbWVu dGlvbiB0aGF0IHRoaXMgaXNzdWUgaXMgYWxzbyBwcmVzZW50IGluIEc0IHN1cHBvcnRlZCB0YXJn ZXRzLgpBbmQgYSBub3RlIHRoYXQgaXQgd2lsbCBnZXQgZml4ZWQgbGF0ZXIuCgo+ID4gU2lnbmVk LW9mZi1ieTogQ2FuIEd1byA8cXVpY19jYW5nQHF1aWNpbmMuY29tPgo+ID4gLS0tCj4gPiAgZHJp dmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXBjcy11ZnMtdjYuaCAgICAgfCAgIDIgKwo+ ID4gIGRyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1xc2VyZGVzLWNvbS12Ni5oIHwg ICAyICsKPiA+ICAuLi4vcXVhbGNvbW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtdHhyeC11ZnMtdjYu aCAgICB8ICAxMiArKysKPiA+ICBkcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdWZz LmMgICAgICAgICAgICB8IDExMiArKysrKysrKysrKysrKysrKystLS0KPiA+ICA0IGZpbGVzIGNo YW5nZWQsIDExNSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1wLXBjcy11ZnMtdjYuaCBiL2Ry aXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1wY3MtdWZzLXY2LmgKPiA+IGluZGV4IGMy M2Q1ZTQuLmU1NjNhZjUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHkt cWNvbS1xbXAtcGNzLXVmcy12Ni5oCj4gPiArKysgYi9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHkt cWNvbS1xbXAtcGNzLXVmcy12Ni5oCj4gPiBAQCAtMTgsNiArMTgsNyBAQAo+ID4gICNkZWZpbmUg UVBIWV9WNl9QQ1NfVUZTX0JJU1RfRklYRURfUEFUX0NUUkwgICAgICAgICAgICAweDA2MAo+ID4g ICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1RYX0hTR0VBUl9DQVBBQklMSVRZICAgICAgICAgICAw eDA3NAo+ID4gICNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1JYX0hTR0VBUl9DQVBBQklMSVRZICAg ICAgICAgICAweDBiYwo+ID4gKyNkZWZpbmUgUVBIWV9WNl9QQ1NfVUZTX1JYX0hTX0c1X1NZTkNf TEVOR1RIX0NBUEFCSUxJVFkgICAgICAgIDB4MTJjCj4gPiAgI2RlZmluZSBRUEhZX1Y2X1BDU19V RlNfREVCVUdfQlVTX0NMS1NFTCAgICAgICAgICAgICAgIDB4MTU4Cj4gPiAgI2RlZmluZSBRUEhZ X1Y2X1BDU19VRlNfTElORUNGR19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHgxN2MK PiA+ICAjZGVmaW5lIFFQSFlfVjZfUENTX1VGU19SWF9NSU5fSElCRVJOOF9USU1FICAgICAgICAg ICAgMHgxODQKPiA+IEBAIC0yNyw1ICsyOCw2IEBACj4gPiAgI2RlZmluZSBRUEhZX1Y2X1BDU19V RlNfUkVBRFlfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4MWE4Cj4gPiAgI2RlZmluZSBRUEhZ X1Y2X1BDU19VRlNfVFhfTUlEX1RFUk1fQ1RSTDEgICAgICAgICAgICAgIDB4MWY0Cj4gPiAgI2Rl ZmluZSBRUEhZX1Y2X1BDU19VRlNfTVVMVElfTEFORV9DVFJMMSAgICAgICAgICAgICAgIDB4MWZj Cj4gPiArI2RlZmluZSBRUEhZX1Y2X1BDU19VRlNfUlhfSFNHNV9TWU5DX1dBSVRfVElNRSAgICAg ICAgIDB4MjIwCj4gPgo+ID4gICNlbmRpZgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3F1 YWxjb21tL3BoeS1xY29tLXFtcC1xc2VyZGVzLWNvbS12Ni5oIGIvZHJpdmVycy9waHkvcXVhbGNv bW0vcGh5LXFjb20tcW1wLXFzZXJkZXMtY29tLXY2LmgKPiA+IGluZGV4IGY0MjBmOGYuLmVmMzky Y2UgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtcXNl cmRlcy1jb20tdjYuaAo+ID4gKysrIGIvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tcW1w LXFzZXJkZXMtY29tLXY2LmgKPiA+IEBAIC01Niw2ICs1Niw4IEBACj4gPiAgI2RlZmluZSBRU0VS REVTX1Y2X0NPTV9TWVNfQ0xLX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhlNAo+ ID4gICNkZWZpbmUgUVNFUkRFU19WNl9DT01fU1lTQ0xLX0JVRl9FTkFCTEUgICAgICAgICAgICAg ICAgICAgICAgIDB4ZTgKPiA+ICAjZGVmaW5lIFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjQKPiA+ICsjZGVmaW5lIFFTRVJE RVNfVjZfQ09NX0NNTl9JRVRSSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjCj4g PiArI2RlZmluZSBRU0VSREVTX1Y2X0NPTV9DTU5fSVBUUklNICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgxMDAKPiA+ICAjZGVmaW5lIFFTRVJERVNfVjZfQ09NX1NZU0NMS19FTl9TRUwg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMAo+ID4gICNkZWZpbmUgUVNFUkRFU19WNl9D T01fUkVTRVRTTV9DTlRSTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE4Cj4gPiAgI2Rl ZmluZSBRU0VSREVTX1Y2X0NPTV9MT0NLX0NNUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgxMjAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1x bXAtcXNlcmRlcy10eHJ4LXVmcy12Ni5oIGIvZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20t cW1wLXFzZXJkZXMtdHhyeC11ZnMtdjYuaAo+ID4gaW5kZXggMTViY2I0Yi4uNDhmMzFjOCAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1xc2VyZGVzLXR4 cngtdWZzLXY2LmgKPiA+ICsrKyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC1x c2VyZGVzLXR4cngtdWZzLXY2LmgKPiA+IEBAIC0xMCwxMCArMTAsMjAgQEAKPiA+ICAjZGVmaW5l IFFTRVJERVNfVUZTX1Y2X1RYX1JFU19DT0RFX0xBTkVfUlggICAgICAgICAgICAgICAgICAgICAw eDJjCj4gPiAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9UWF9SRVNfQ09ERV9MQU5FX09GRlNFVF9U WCAgICAgICAgICAgICAgMHgzMAo+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNfVjZfVFhfUkVTX0NP REVfTEFORV9PRkZTRVRfUlggICAgICAgICAgICAgIDB4MzQKPiA+ICsjZGVmaW5lIFFTRVJERVNf VUZTX1Y2X1RYX0xBTkVfTU9ERV8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDdjCj4gPiAr I2RlZmluZSBRU0VSREVTX1VGU19WNl9UWF9GUl9EQ0NfQ1RSTCAgICAgICAgICAgICAgICAgICAg ICAgICAgMHgxMDgKPiA+Cj4gPiAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9VQ0RSX0ZBU1RM T0NLX0ZPX0dBSU5fUkFURTIgICAgICAgICAgMHgwOAo+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNf VjZfUlhfVUNEUl9GQVNUTE9DS19GT19HQUlOX1JBVEU0ICAgICAgICAgIDB4MTAKPiA+ICsjZGVm aW5lIFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tfU09fR0FJTl9SQVRFNCAgICAgICAg ICAweDI0Cj4gPiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9VQ0RSX0ZBU1RMT0NLX0NPVU5U X0hJR0hfUkFURTQgICAgICAgMHg1NAo+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfVUNE Ul9GT19HQUlOX1JBVEUyICAgICAgICAgICAgICAgICAgIDB4ZDQKPiA+ICsjZGVmaW5lIFFTRVJE RVNfVUZTX1Y2X1JYX1VDRFJfRk9fR0FJTl9SQVRFNCAgICAgICAgICAgICAgICAgICAweGRjCj4g PiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9VQ0RSX1NPX0dBSU5fUkFURTQgICAgICAgICAg ICAgICAgICAgMHhmMAo+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfVUNEUl9QSV9DT05U Uk9MUyAgICAgICAgICAgICAgICAgICAgIDB4ZjQKPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2 X1JYX1ZHQV9DQUxfTUFOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAweDE3OAo+ID4gKyNkZWZp bmUgUVNFUkRFU19VRlNfVjZfUlhfRVFfT0ZGU0VUX0FEQVBUT1JfQ05UUkwxICAgICAgICAgICAg IDB4MWJjCj4gPiArI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9PRkZTRVRfQURBUFRPUl9DTlRS TDMgICAgICAgICAgICAgICAgICAgICAgICAweDFjNAo+ID4gICNkZWZpbmUgUVNFUkRFU19VRlNf VjZfUlhfTU9ERV9SQVRFXzBfMV9CMCAgICAgICAgICAgICAgICAgICAgIDB4MjA4Cj4gPiAgI2Rl ZmluZSBRU0VSREVTX1VGU19WNl9SWF9NT0RFX1JBVEVfMF8xX0IxICAgICAgICAgICAgICAgICAg ICAgMHgyMGMKPiA+ICAjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURV8wXzFfQjMg ICAgICAgICAgICAgICAgICAgICAweDIxNAo+ID4gQEAgLTI1LDYgKzM1LDggQEAKPiA+ICAjZGVm aW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURTNfQjUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDB4MjY0Cj4gPiAgI2RlZmluZSBRU0VSREVTX1VGU19WNl9SWF9NT0RFX1JBVEUz X0I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MAo+ID4gICNkZWZpbmUgUVNF UkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFNF9CMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMHgyODAKPiA+ICsjZGVmaW5lIFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURTRfQjQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg0Cj4gPiAgI2RlZmluZSBRU0VSREVTX1VG U19WNl9SWF9NT0RFX1JBVEU0X0I2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4 Ywo+ID4gKyNkZWZpbmUgUVNFUkRFU19VRlNfVjZfUlhfRExMMF9GVFVORV9DVFJMICAgICAgICAg ICAgICAgICAgICAgIDB4MmY4Cj4gPgo+ID4gICNlbmRpZgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYyBiL2RyaXZlcnMvcGh5L3F1YWxjb21t L3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gaW5kZXggMzkyN2ViYS4uZTBhMDE0OTcgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9waHktcWNvbS1xbXAtdWZzLmMKPiA+ICsrKyBi L2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLXFtcC11ZnMuYwo+ID4gQEAgLTY0OSwzMiAr NjQ5LDUxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9pbml0X3RibCBzbTg1NTBfdWZz cGh5X3NlcmRlc1tdID0gewo+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZf Q09NX0hTQ0xLX1NFTF8xLCAweDExKSwKPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VS REVTX1Y2X0NPTV9IU0NMS19IU19TV0lUQ0hfU0VMXzEsIDB4MDApLAo+ID4gICAgICAgICBRTVBf UEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX0xPQ0tfQ01QX0VOLCAweDAxKSwKPiA+IC0gICAg ICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9WQ09fVFVORV9NQVAsIDB4MDQpLAo+ ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPLCAweDBm KSwKPiA+ICsKPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9WQ09f VFVORV9JTklUVkFMMiwgMHgwMCksCj4gPiAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRF U19WNl9DT01fREVDX1NUQVJUX01PREUwLCAweDQxKSwKPiA+IC0gICAgICAgUU1QX1BIWV9JTklU X0NGRyhRU0VSREVTX1Y2X0NPTV9DUF9DVFJMX01PREUwLCAweDBhKSwKPiA+ICAgICAgICAgUU1Q X1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9QTExfUkNUUkxfTU9ERTAsIDB4MTgpLAo+ID4g ICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9DQ1RSTF9NT0RFMCwg MHgxNCksCj4gPiAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fTE9DS19D TVAxX01PREUwLCAweDdmKSwKPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2 X0NPTV9MT0NLX0NNUDJfTU9ERTAsIDB4MDYpLAo+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZH KFFTRVJERVNfVjZfQ09NX0RFQ19TVEFSVF9NT0RFMCwgMHg0YyksCj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90Ymwgc204NTUwX3Vmc3BoeV9oc19i X3NlcmRlc1tdID0gewo+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09N X1ZDT19UVU5FX01BUCwgMHg0NCksCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHFtcF9waHlfaW5pdF90Ymwgc204NTUwX3Vmc3BoeV9nNF9zZXJkZXNbXSA9IHsKPiA+ICsg ICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9WQ09fVFVORV9NQVAsIDB4MDQp LAo+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPLCAw eDBmKSwKPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9DUF9DVFJM X01PREUwLCAweDBhKSwKPiA+IC0gICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NP TV9QTExfUkNUUkxfTU9ERTAsIDB4MTgpLAo+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFT RVJERVNfVjZfQ09NX1BMTF9DQ1RSTF9NT0RFMCwgMHgxNCksCj4gPiAtICAgICAgIFFNUF9QSFlf SU5JVF9DRkcoUVNFUkRFU19WNl9DT01fTE9DS19DTVAxX01PREUwLCAweDk5KSwKPiA+IC0gICAg ICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9MT0NLX0NNUDJfTU9ERTAsIDB4MDcp LAo+IAo+IEFzaWRlIGZyb20gbW92aW5nIHRoZXNlIHJlZ2lzdGVycyB0byB0aGUgSFNfRzQgdGFi bGUsIHlvdSBhcmUgYWxzbwo+IGNoYW5naW5nIHRoZXNlIHJlZ2lzdGVycy4gSXQgbWFrZXMgbWUg dGhpbmsgdGhhdCB0aGVyZSB3YXMgYW4gZXJyb3IgaW4KPiB0aGUgb3JpZ2luYWwgcHJvZ3JhbW1p bmcgc2VxdWVuY2UuCj4gSWYgdGhhdCBpcyBjb3JyZWN0LCBjb3VsZCB5b3UgcGxlYXNlIHNwbGl0 IHRoZSBwYXRjaCBpbnRvIHR3byBwaWVjZXM6Cj4gLSBGaXggcHJvZ3JhbW1pbmcgc2VxdWVuY2Ug KGFkZCBwcm9wZXIgRml4ZXMgdGFncykKPiAtIFNwbGl0IEc0IGFuZCBHNSB0YWJsZXMuCgpBY2sK Cj4gCj4gPiArCj4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fREVD X1NUQVJUX01PREUxLCAweDRjKSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVT X1Y2X0NPTV9DUF9DVFJMX01PREUxLCAweDBhKSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NG RyhRU0VSREVTX1Y2X0NPTV9QTExfUkNUUkxfTU9ERTEsIDB4MTgpLAo+ID4gKyAgICAgICBRTVBf UEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9DQ1RSTF9NT0RFMSwgMHgxNCksCj4gPiAr ICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19WNl9DT01fTE9DS19DTVAxX01PREUxLCAw eDk5KSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9MT0NLX0NN UDJfTU9ERTEsIDB4MDcpLAo+IAo+IEkgc2VlIGFsbCB0aGUgTU9ERTEgcmVnaXN0ZXJzIGJlaW5n IG9ubHkgcHJlc2VudCBpbiBHNCBhbmQgRzUgdGFibGVzLgo+IFNob3VsZCB0aGV5IGJlIHByb2dy YW1tZWQgZm9yIHRoZSBtb2RlcyBsb3dlciB0aGFuIEc0Pwo+IAoKV2UgdXNlIEc0IHRhYmxlIGZv ciBhbGwgdGhlIG1vZGVzIDw9IEc0LgoKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgcW1wX3BoeV9pbml0X3RibCBzbTg1NTBfdWZzcGh5X2c1X3NlcmRlc1tdID0gewo+ID4g KyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfQ09NX1BMTF9JVkNPLCAweDFmKSwK PiA+ICsKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9DTU5fSUVU UklNLCAweDFiKSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2X0NPTV9D TU5fSVBUUklNLCAweDFjKSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1Y2 X0NPTV9DUF9DVFJMX01PREUwLCAweDA2KSwKPiA+ICB9Owo+ID4KPiA+ICBzdGF0aWMgY29uc3Qg c3RydWN0IHFtcF9waHlfaW5pdF90Ymwgc204NTUwX3Vmc3BoeV90eFtdID0gewo+ID4gLSAgICAg ICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVjZfVFhfTEFORV9NT0RFXzEsIDB4MDUpLAo+ID4g KyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVUZTX1Y2X1RYX0xBTkVfTU9ERV8xLCAw eDA1KSwKPiA+ICAgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1VGU19WNl9UWF9SRVNf Q09ERV9MQU5FX09GRlNFVF9UWCwgMHgwNyksCj4gPiAgfTsKPiA+Cj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBxbXBfcGh5X2luaXRfdGJsIHNtODU1MF91ZnNwaHlfZzRfdHhbXSA9IHsKPiA+ICsg ICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1VGU19WNl9UWF9GUl9EQ0NfQ1RSTCwgMHg0 YyksCj4gPiArfTsKPiA+ICsKPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90 Ymwgc204NTUwX3Vmc3BoeV9yeFtdID0gewo+ID4gLSAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFT RVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tfRk9fR0FJTl9SQVRFMiwgMHgwYyksCj4gPiAt ICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfVUNEUl9GQVNUTE9DS19G T19HQUlOX1JBVEU0LCAweDBmKSwKPiA+IC0gICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVT X1VGU19WNl9SWF9WR0FfQ0FMX01BTl9WQUwsIDB4MGUpLAo+ID4gKyAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRk9fR0FJTl9SQVRFMiwgMHgwYyksCj4gPgo+ ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVUZTX1Y2X1JYX01PREVfUkFURV8w XzFfQjAsIDB4YzIpLAo+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVUZTX1Y2 X1JYX01PREVfUkFURV8wXzFfQjEsIDB4YzIpLAo+ID4gQEAgLTY5MCwxNCArNzA5LDQ2IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9pbml0X3RibCBzbTg1NTBfdWZzcGh5X3J4W10gPSB7 Cj4gPiAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRF M19COCwgMHgwMiksCj4gPiAgfTsKPiA+Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBxbXBfcGh5 X2luaXRfdGJsIHNtODU1MF91ZnNwaHlfZzRfcnhbXSA9IHsKPiA+ICsgICAgICAgUU1QX1BIWV9J TklUX0NGRyhRU0VSREVTX1VGU19WNl9SWF9WR0FfQ0FMX01BTl9WQUwsIDB4MGUpLAo+ID4gK307 Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBxbXBfcGh5X2luaXRfdGJsIHNtODU1MF91 ZnNwaHlfZzVfcnhbXSA9IHsKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1VG U19WNl9SWF9VQ0RSX0ZPX0dBSU5fUkFURTQsIDB4MGMpLAo+ID4gKyAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfU09fR0FJTl9SQVRFNCwgMHgwNCksCj4gPiAr ICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfRVFfT0ZGU0VUX0FEQVBU T1JfQ05UUkwxLCAweDE0KSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1VG U19WNl9SWF9VQ0RSX1BJX0NPTlRST0xTLCAweDA3KSwKPiA+ICsgICAgICAgUU1QX1BIWV9JTklU X0NGRyhRU0VSREVTX1VGU19WNl9SWF9PRkZTRVRfQURBUFRPUl9DTlRSTDMsIDB4MGUpLAo+ID4g KyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNfVUZTX1Y2X1JYX1VDRFJfRkFTVExPQ0tf Q09VTlRfSElHSF9SQVRFNCwgMHgwMiksCj4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNF UkRFU19VRlNfVjZfUlhfVUNEUl9GQVNUTE9DS19GT19HQUlOX1JBVEU0LCAweDFjKSwKPiA+ICsg ICAgICAgUU1QX1BIWV9JTklUX0NGRyhRU0VSREVTX1VGU19WNl9SWF9VQ0RSX0ZBU1RMT0NLX1NP X0dBSU5fUkFURTQsIDB4MDYpLAo+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFTRVJERVNf VUZTX1Y2X1JYX1ZHQV9DQUxfTUFOX1ZBTCwgMHgwOCksCj4gPiArCj4gPiArICAgICAgIFFNUF9Q SFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFNF9CMywgMHhiOSksCj4gPiAr ICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfTU9ERV9SQVRFNF9CNCwg MHg0ZiksCj4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19VRlNfVjZfUlhfTU9E RV9SQVRFNF9CNiwgMHhmZiksCj4gPiArICAgICAgIFFNUF9QSFlfSU5JVF9DRkcoUVNFUkRFU19V RlNfVjZfUlhfRExMMF9GVFVORV9DVFJMLCAweDMwKSwKPiA+ICt9Owo+ID4gKwo+ID4gIHN0YXRp YyBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9pbml0X3RibCBzbTg1NTBfdWZzcGh5X3Bjc1tdID0gewo+ ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFQSFlfVjZfUENTX1VGU19SWF9TSUdERVRfQ1RS TDIsIDB4NjkpLAo+ID4gICAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFQSFlfVjZfUENTX1VGU19U WF9MQVJHRV9BTVBfRFJWX0xWTCwgMHgwZiksCj4gPiAgICAgICAgIFFNUF9QSFlfSU5JVF9DRkco UVBIWV9WNl9QQ1NfVUZTX1RYX01JRF9URVJNX0NUUkwxLCAweDQzKSwKPiA+IC0gICAgICAgUU1Q X1BIWV9JTklUX0NGRyhRUEhZX1Y2X1BDU19VRlNfUExMX0NOVEwsIDB4MmIpLAo+ID4gICAgICAg ICBRTVBfUEhZX0lOSVRfQ0ZHKFFQSFlfVjZfUENTX1VGU19NVUxUSV9MQU5FX0NUUkwxLCAweDAy KSwKPiA+ICB9Owo+ID4KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHFtcF9waHlfaW5pdF90Ymwg c204NTUwX3Vmc3BoeV9nNF9wY3NbXSA9IHsKPiA+ICsgICAgICAgUU1QX1BIWV9JTklUX0NGRyhR UEhZX1Y2X1BDU19VRlNfUExMX0NOVEwsIDB4MmIpLAo+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRf Q0ZHKFFQSFlfVjZfUENTX1VGU19UWF9IU0dFQVJfQ0FQQUJJTElUWSwgMHgwNCksCj4gPiArICAg ICAgIFFNUF9QSFlfSU5JVF9DRkcoUVBIWV9WNl9QQ1NfVUZTX1JYX0hTR0VBUl9DQVBBQklMSVRZ LCAweDA0KSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9p bml0X3RibCBzbTg1NTBfdWZzcGh5X2c1X3Bjc1tdID0gewo+ID4gKyAgICAgICBRTVBfUEhZX0lO SVRfQ0ZHKFFQSFlfVjZfUENTX1VGU19QTExfQ05UTCwgMHgzMyksCj4gPiArICAgICAgIFFNUF9Q SFlfSU5JVF9DRkcoUVBIWV9WNl9QQ1NfVUZTX1JYX0hTX0c1X1NZTkNfTEVOR1RIX0NBUEFCSUxJ VFksIDB4NGYpLAo+ID4gKyAgICAgICBRTVBfUEhZX0lOSVRfQ0ZHKFFQSFlfVjZfUENTX1VGU19S WF9IU0c1X1NZTkNfV0FJVF9USU1FLCAweDllKSwKPiA+ICt9Owo+ID4gKwo+ID4gIHN0cnVjdCBx bXBfdWZzX29mZnNldHMgewo+ID4gICAgICAgICB1MTYgc2VyZGVzOwo+ID4gICAgICAgICB1MTYg cGNzOwo+ID4gQEAgLTczMSw2ICs3ODIsOCBAQCBzdHJ1Y3QgcW1wX3BoeV9jZmcgewo+ID4gICAg ICAgICBjb25zdCBzdHJ1Y3QgcW1wX3BoeV9jZmdfdGJscyB0YmxzX2hzX2I7Cj4gPiAgICAgICAg IC8qIEFkZGl0aW9uYWwgc2VxdWVuY2UgZm9yIEhTIEc0ICovCj4gPiAgICAgICAgIGNvbnN0IHN0 cnVjdCBxbXBfcGh5X2NmZ190YmxzIHRibHNfaHNfZzQ7Cj4gPiArICAgICAgIC8qIEFkZGl0aW9u YWwgc2VxdWVuY2UgZm9yIEhTIEc0ICovCgpIUyBHNQoKPiA+ICsgICAgICAgY29uc3Qgc3RydWN0 IHFtcF9waHlfY2ZnX3RibHMgdGJsc19oc19nNTsKPiA+Cj4gPiAgICAgICAgIC8qIGNsb2NrIGlk cyB0byBiZSByZXF1ZXN0ZWQgKi8KPiA+ICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICpjbGtf bGlzdDsKPiA+IEBAIC0xMTU3LDYgKzEyMTAsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbXBf cGh5X2NmZyBzbTg1NTBfdWZzcGh5X2NmZyA9IHsKPiA+ICAgICAgICAgICAgICAgICAucGNzICAg ICAgICAgICAgPSBzbTg1NTBfdWZzcGh5X3BjcywKPiA+ICAgICAgICAgICAgICAgICAucGNzX251 bSAgICAgICAgPSBBUlJBWV9TSVpFKHNtODU1MF91ZnNwaHlfcGNzKSwKPiA+ICAgICAgICAgfSwK PiA+ICsgICAgICAgLnRibHNfaHNfYiA9IHsKPiA+ICsgICAgICAgICAgICAgICAuc2VyZGVzICAg ICAgICAgPSBzbTg1NTBfdWZzcGh5X2hzX2Jfc2VyZGVzLAo+ID4gKyAgICAgICAgICAgICAgIC5z ZXJkZXNfbnVtICAgICA9IEFSUkFZX1NJWkUoc204NTUwX3Vmc3BoeV9oc19iX3NlcmRlcyksCj4g PiArICAgICAgIH0sCj4gPiArICAgICAgIC50YmxzX2hzX2c0ID0gewo+ID4gKyAgICAgICAgICAg ICAgIC5zZXJkZXMgICAgICAgICA9IHNtODU1MF91ZnNwaHlfZzRfc2VyZGVzLAo+ID4gKyAgICAg ICAgICAgICAgIC5zZXJkZXNfbnVtICAgICA9IEFSUkFZX1NJWkUoc204NTUwX3Vmc3BoeV9nNF9z ZXJkZXMpLAo+ID4gKyAgICAgICAgICAgICAgIC50eCAgICAgICAgICAgICA9IHNtODU1MF91ZnNw aHlfZzRfdHgsCj4gPiArICAgICAgICAgICAgICAgLnR4X251bSAgICAgICAgID0gQVJSQVlfU0la RShzbTg1NTBfdWZzcGh5X2c0X3R4KSwKPiA+ICsgICAgICAgICAgICAgICAucnggICAgICAgICAg ICAgPSBzbTg1NTBfdWZzcGh5X2c0X3J4LAo+ID4gKyAgICAgICAgICAgICAgIC5yeF9udW0gICAg ICAgICA9IEFSUkFZX1NJWkUoc204NTUwX3Vmc3BoeV9nNF9yeCksCj4gPiArICAgICAgICAgICAg ICAgLnBjcyAgICAgICAgICAgID0gc204NTUwX3Vmc3BoeV9nNF9wY3MsCj4gPiArICAgICAgICAg ICAgICAgLnBjc19udW0gICAgICAgID0gQVJSQVlfU0laRShzbTg1NTBfdWZzcGh5X2c0X3Bjcyks Cj4gPiArICAgICAgIH0sCj4gPiArICAgICAgIC50YmxzX2hzX2c1ID0gewo+ID4gKyAgICAgICAg ICAgICAgIC5zZXJkZXMgICAgICAgICA9IHNtODU1MF91ZnNwaHlfZzVfc2VyZGVzLAo+ID4gKyAg ICAgICAgICAgICAgIC5zZXJkZXNfbnVtICAgICA9IEFSUkFZX1NJWkUoc204NTUwX3Vmc3BoeV9n NV9zZXJkZXMpLAo+ID4gKyAgICAgICAgICAgICAgIC5yeCAgICAgICAgICAgICA9IHNtODU1MF91 ZnNwaHlfZzVfcngsCj4gPiArICAgICAgICAgICAgICAgLnJ4X251bSAgICAgICAgID0gQVJSQVlf U0laRShzbTg1NTBfdWZzcGh5X2c1X3J4KSwKPiA+ICsgICAgICAgICAgICAgICAucGNzICAgICAg ICAgICAgPSBzbTg1NTBfdWZzcGh5X2c1X3BjcywKPiA+ICsgICAgICAgICAgICAgICAucGNzX251 bSAgICAgICAgPSBBUlJBWV9TSVpFKHNtODU1MF91ZnNwaHlfZzVfcGNzKSwKPiA+ICsgICAgICAg fSwKPiA+ICAgICAgICAgLmNsa19saXN0ICAgICAgICAgICAgICAgPSBzZG04NDVfdWZzX3BoeV9j bGtfbCwKPiA+ICAgICAgICAgLm51bV9jbGtzICAgICAgICAgICAgICAgPSBBUlJBWV9TSVpFKHNk bTg0NV91ZnNfcGh5X2Nsa19sKSwKPiA+ICAgICAgICAgLnZyZWdfbGlzdCAgICAgICAgICAgICAg PSBxbXBfcGh5X3ZyZWdfbCwKPiA+IEBAIC0xMjIyLDE0ICsxMjk3LDI1IEBAIHN0YXRpYyB2b2lk IHFtcF91ZnNfcGNzX2luaXQoc3RydWN0IHFtcF91ZnMgKnFtcCwgY29uc3Qgc3RydWN0IHFtcF9w aHlfY2ZnX3RibHMKPiA+ICBzdGF0aWMgdm9pZCBxbXBfdWZzX2luaXRfcmVnaXN0ZXJzKHN0cnVj dCBxbXBfdWZzICpxbXAsIGNvbnN0IHN0cnVjdCBxbXBfcGh5X2NmZyAqY2ZnKQo+ID4gIHsKPiA+ ICAgICAgICAgcW1wX3Vmc19zZXJkZXNfaW5pdChxbXAsICZjZmctPnRibHMpOwo+ID4gKyAgICAg ICBpZiAocW1wLT5zdWJtb2RlID09IFVGU19IU19HNCkKPiA+ICsgICAgICAgICAgICAgICBxbXBf dWZzX3NlcmRlc19pbml0KHFtcCwgJmNmZy0+dGJsc19oc19nNCk7Cj4gPiArICAgICAgIGVsc2Ug aWYgKHFtcC0+c3VibW9kZSA9PSBVRlNfSFNfRzUpCj4gPiArICAgICAgICAgICAgICAgcW1wX3Vm c19zZXJkZXNfaW5pdChxbXAsICZjZmctPnRibHNfaHNfZzUpOwo+ID4gKwoKU2hvdWxkIHdlIHBy b2dyYW0gc3VibW9kZSBzZXF1ZW5jZSBhZnRlciBIU19CPwoKLSBNYW5pCgotLSAK4K6u4K6j4K6/ 4K614K6j4K+N4K6j4K6p4K+NIOCumuCupOCuvuCumuCuv+CuteCuruCvjQoKLS0gCmxpbnV4LXBo eSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcGh5Cg==