From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793959147; b=ZTaoy20ti0NQsmVGUZHBvERnwFjIaQE7unp61TrBDogotQhCWoB0fAx4XcHw6JrAgz+u h/v0xs+oYj+8RSBpYyyAbTVEPwvKEokMtdCGGr2PcWASBDRtWy0tpmAdv2n4COKH6h6RX h+fvdtqsokIb41+4MnWAJT0qHhnAsr0o+wGyyA7xC0snh+bzqEj3cW3YGmw+KL1vDg8HX sfvq75wml5LOZKSU83rXQcyEL5dCG+chHVLSNbcddTynMRMkuyoSAQ/MUheVahdlKSvlu h8zttNvwbqWJ1MSrmBbZxQaeLauTo1uQboEnzcrVGgNSNofdDr2lJ6lolo9LrZtDXuQ== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793959147; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=URtsFZrOncTBadDaPbRBozwKL5R8OwhE2UgxEKs7KTQ=; b=5tuPFqRX/V8j8hvrut8rrSFWHJB3cHRI0Z0FABJL8LYMHSUdOwAns5Cos5qvrxWvxIvM EVVi6eu3UtOuo1hThT2uKb/eFZ0ZNjAbiFoEsDdt0Deaq3AVEJhNf+C7bsDUtfj6tWiT+ oFUnchbRY+PrC1Ef/F6Qn7dCuswN1Up2/L7/q2PBFHo+z0hiNdwF//raSXxCTPX8cYxVg sqin6epPQ8yGk28EFQqw3M1OGbnhMx9N9iRSbfFzZmymrV17GAEPMrEMxisijmkmeNH5Q DdAlnRluW+ca817sKDOm/SOv0efI4pU/Cf4fX80JoFU9GrKMQYgm9MOXVMhzgpyk1Ig== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=dQl+nO6E; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00374606A32D; Fri, 6 Nov 2026 09:59:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=dQl+nO6E Received: by smtp.kernel.org (Postfix) with ESMTPSA id 12A931F008A1; Fri, 6 Nov 2026 09:59:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793959146; bh=URtsFZrOncTBadDaPbRBozwKL5R8OwhE2UgxEKs7KTQ=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=dQl+nO6E40aTdSZOvAHhiESg8uo2SvxKnudxK4416vR2YqkIy5Mja/W4FoKsq34V4 90Fqi0kSok5RZNlUf36DklI+GkQ+Hbc94GmTolIW7Ub4EE7oYG+ICfDm/Oi21Rvg/b YhQqNyRUVEB6lR2MuPwuvC5GMiEFsLn9N8qfqAkXG/vNjKahI7pLjIP8vv5ZwXiLjj 7HFAetA6VPboTwe9JR+80zEBUAkJa0xnSnPbvZGsmr+Y8dkg0yv+D2rV9cc/SjnsKR qjAmFOf0paqiw+WML7PpVWfCY+s9Y4B0bsJ0f/aeDJgNB+Q3VJVLqHDhYggKmIOGjJ YXjmUeqkFSXoA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 21/25] mmc: sdhci-of-dwcmshc: add MT2824 tuning and HS400 support Reply-To: sashiko-reviews@lists.linux.dev To: =?utf-8?b?QmVub8OudCBNb25pbg==?= Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, linux-usb@vger.kernel.org, linux-watchdog@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261106-mt2824-v1-21-86087eaf5af4@bootlin.com> References: <20261106-mt2824-v1-0-86087eaf5af4@bootlin.com> <20261106-mt2824-v1-21-86087eaf5af4@bootlin.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 06 Nov 2026 09:59:05 +0000 X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 3 potential issues to consider: - [High] mmc: sdhci-of-dwcmshc: improper HS400 PHY DLL handling in mt2824_set_clock() - [Medium] mmc: sdhci-of-dwcmshc: incomplete error rollback in mt2824_execute_tuning() - [Low] mmc: sdhci-of-dwcmshc: duplicate PHY DLL register macros for MT2824 -- commit 6e69732340199284e68817329ed4f3bf3f474149 Author: Beno=C3=AEt Monin mmc: sdhci-of-dwcmshc: add MT2824 tuning and HS400 support This commit adds software tuning over the 128-tap sampling delay line, a filter for stray data interrupts during tuning, and manual PHY DLL locking for HS400 mode on the Metanoia MT2824 controller. > diff --git a/drivers/mmc/host/sdhci-of-dwcmshc.c b/drivers/mmc/host/sdhci= -of-dwcmshc.c > index cb248fc572e21..324ae93295af0 100644 > --- a/drivers/mmc/host/sdhci-of-dwcmshc.c > +++ b/drivers/mmc/host/sdhci-of-dwcmshc.c [ ... ] > @@ -98,6 +103,10 @@ > #define MT2824_PHY_TXSLEW_P_STROBE 0x3 > #define MT2824_PHY_SMPLDL_CNFG 0x0c > #define MT2824_PHY_ATDL_CNFG 0x0c > +#define MT2824_PHY_DLL_CNFG1 0x20 > +#define MT2824_PHY_DLLDL_CNFG 0x60 > +#define MT2824_PHY_DLL_LOCKED BIT(0) > +#define MT2824_PHY_DLL_LOCK_ERR BIT(1) [Severity: Low] This isn't a bug, but these macros duplicate the Synopsys DWC MSHC PHY DLL definitions already present in this file (PHY_DLL_CNFG1_SLVDLY_MASK / PHY_DLL_CNFG1_SLVDLY, PHY_DLLDL_CNFG_SLV_INPSEL_MASK / PHY_DLLDL_CNFG_SLV_INPSEL, DLL_LOCK_STS, and DLL_ERROR_STS), while mt2824_set_dll() already uses the shared PHY_DLL_*_R register offsets. [ ... ] > @@ -2271,6 +2281,38 @@ static int mt2824_phy_init(struct sdhci_host *host= , bool v1v8) > return 0; > } > =20 > +/* HS400 needs the PHY DLL locked on the card clock; lock it by hand */ > +static void mt2824_set_dll(struct sdhci_host *host) > +{ > + u16 clk; > + u8 status; > + int ret; > + > + clk =3D sdhci_readw(host, SDHCI_CLOCK_CONTROL); > + clk &=3D ~SDHCI_CLOCK_CARD_EN; > + sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); > + > + sdhci_writeb(host, MT2824_PHY_DLL_CNFG1, PHY_DLL_CNFG1_R); > + sdhci_writeb(host, MT2824_PHY_DLLDL_CNFG, PHY_DLLDL_CNFG_R); > + > + sdhci_enable_clk(host, clk); > + usleep_range(10, 20); > + > + sdhci_writeb(host, PHY_DLL_CTRL_ENABLE, PHY_DLL_CTRL_R); > + ret =3D read_poll_timeout(sdhci_readb, status, > + status & MT2824_PHY_DLL_LOCKED, 10, 150000, > + false, host, PHY_DLL_STATUS_R); > + if (ret) { > + dev_err(mmc_dev(host->mmc), "PHY DLL did not lock: 0x%02x\n", > + status); > + return; > + } > + > + if (status & MT2824_PHY_DLL_LOCK_ERR) > + dev_err(mmc_dev(host->mmc), "PHY DLL locked with error: 0x%02x\n", > + status); > +} [ ... ] > @@ -2332,6 +2374,11 @@ static void mt2824_set_clock(struct sdhci_host *ho= st, unsigned int clock) > if (clock) > mt2824_enable_clk(host, sdhci_calc_clk(host, clock, > &mmc->actual_clock)); > + > + if (clock && host->timing =3D=3D MMC_TIMING_MMC_HS400) { > + mt2824_set_dll(host); > + dwcmshc_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); > + } > } [Severity: High] Does mt2824_set_clock() try to lock the HS400 PHY DLL at 52 MHz and then fail to re-lock it when the clock is raised to 200 MHz? During HS400 selection in mmc_select_hs400() (and mmc_select_hs400es()), the MMC core calls mmc_set_timing(host, MMC_TIMING_MMC_HS400) while host->clock is still 52 MHz, before calling mmc_set_bus_speed(card) to switch to 200 MHz. Because mt2824_set_clock() only checks for a non-zero clock in MMC_TIMING_MMC_HS400, the first call enables PHY_DLL_CTRL_R at 52 MHz. Neither mt2824_set_clock() nor mt2824_set_dll() ever writes PHY_DLL_CTRL_DISABLE to PHY_DLL_CTRL_R, so when mmc_set_bus_speed() later calls mt2824_set_clock() at 200 MHz, the clock is stopped and changed while the DLL stays enabled, and writing PHY_DLL_CTRL_ENABLE again never creates a 0-to-1 enable transition to lock onto the 200 MHz clock. Leaving HS400 (such as via mmc_hs400_to_hs200()) also leaves the DLL enabled at lower speeds. Should PHY_DLL_CTRL_R be disabled before changing the clock, and only configured and enabled when host->timing is MMC_TIMING_MMC_HS400 and the clock is above 52 MHz? [ ... ] > @@ -2460,6 +2507,156 @@ static void mt2824_hw_reset(struct sdhci_host *ho= st) [ ... ] > + /* > + * AT_CTRL_R must not be written while SAMPLE_CLK_SEL is set: enable > + * software tuning first, then select the tuned sampling clock. > + */ > + at_ctrl =3D sdhci_readl(host, at_ctrl_reg); > + sdhci_writel(host, at_ctrl | AT_CTRL_SW_TUNE_EN, at_ctrl_reg); > + ctrl2 =3D sdhci_readw(host, SDHCI_HOST_CONTROL2); > + sdhci_writew(host, ctrl2 | SDHCI_CTRL_TUNED_CLK, SDHCI_HOST_CONTROL2); > + /* > + * That HOST_CONTROL2 write breaks the response of the next command: > + * send one tuning command for nothing before the scan. > + */ > + mmc_send_tuning(host->mmc, opcode, NULL); > + host->ops->reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); [ ... ] > +fail: > + /* clear SAMPLE_CLK_SEL before AT_CTRL_R is written again */ > + sdhci_reset_tuning(host); > + sdhci_writel(host, at_ctrl, at_ctrl_reg); > + host->ops->reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); > + sdhci_end_tuning(host); > + WRITE_ONCE(dwc_priv->flags, dwc_priv->flags & ~FLAG_SW_TUNING); > + return ret; > +} [Severity: Medium] If a re-tuning pass fails after an earlier tuning pass succeeded, does the fail path leave AT_CTRL_SW_TUNE_EN enabled with the delay line stuck at the last scanned phase? A successful mt2824_execute_tuning() call leaves AT_CTRL_SW_TUNE_EN set in at_ctrl_reg, so on a subsequent tuning run at_ctrl is read with AT_CTRL_SW_TUNE_EN already set. If that scan fails, writing at_ctrl back verbatim does not clear AT_CTRL_SW_TUNE_EN, leaving software tuning active with DWCMSHC_AT_STAT set to phase 127. In addition, sdhci_reset_tuning() modifies the low byte of SDHCI_HOST_CONTROL2 while the card clock is enabled without a dummy command or stopping the card clock around the reset, which on this controller breaks the response of the next command. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261106-mt2824-v1-= 0-86087eaf5af4@bootlin.com?part=3D21 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 809C2606D806 for ; Fri, 6 Nov 2026 09:59:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=x6VnCTsn; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=dQl+nO6E 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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=P1iJ9vUmPfBq8J2/EiavdAv4+d6/VX5JvesK54UBrB8=; b=x6VnCTsnoFpy+aqug5y6PjLxwk AiOD2ZTaIJ07o/FoyB6pxWTKRgqC8T6wPHR34bqEBgX49AUhnqFaR6Cs7tiJQsK2RLZkSGr3K4L+X V6ffKmeDP2esdd0Fyfo2N9dttd8H9ACz/s3o2fR2n/GclME2ez4on6IsiOq6EClXemV0SCSPAeVJ4 4cS77VF/aaLO6KBqGTx0IamlqXx4uYsAeYxvMP8JEydDNZezl3D7D/RvCA9UOpsf2ju6NjYtL84MA /lDbNiyOCn2umeLFfkZaARvMekfMpVfArbBbZomTJMZoauwgnTDuG77sF4zsiu3Aoy1vJy3W4e7pC Lbgo1QlQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPGiy-0000000Bphz-189z; Fri, 06 Nov 2026 09:59:08 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPGix-0000000BphY-14yg for linux-phy@lists.infradead.org; Fri, 06 Nov 2026 09:59:07 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 9F1A4433AD; Fri, 6 Nov 2026 09:59:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 12A931F008A1; Fri, 6 Nov 2026 09:59:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793959146; bh=URtsFZrOncTBadDaPbRBozwKL5R8OwhE2UgxEKs7KTQ=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=dQl+nO6E40aTdSZOvAHhiESg8uo2SvxKnudxK4416vR2YqkIy5Mja/W4FoKsq34V4 90Fqi0kSok5RZNlUf36DklI+GkQ+Hbc94GmTolIW7Ub4EE7oYG+ICfDm/Oi21Rvg/b YhQqNyRUVEB6lR2MuPwuvC5GMiEFsLn9N8qfqAkXG/vNjKahI7pLjIP8vv5ZwXiLjj 7HFAetA6VPboTwe9JR+80zEBUAkJa0xnSnPbvZGsmr+Y8dkg0yv+D2rV9cc/SjnsKR qjAmFOf0paqiw+WML7PpVWfCY+s9Y4B0bsJ0f/aeDJgNB+Q3VJVLqHDhYggKmIOGjJ YXjmUeqkFSXoA== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 21/25] mmc: sdhci-of-dwcmshc: add MT2824 tuning and HS400 support To: =?utf-8?b?QmVub8OudCBNb25pbg==?= Cc: devicetree@vger.kernel.org, linux-phy@lists.infradead.org, linux-usb@vger.kernel.org, linux-watchdog@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261106-mt2824-v1-21-86087eaf5af4@bootlin.com> References: <20261106-mt2824-v1-0-86087eaf5af4@bootlin.com> <20261106-mt2824-v1-21-86087eaf5af4@bootlin.com> Date: Fri, 06 Nov 2026 09:59:05 +0000 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtIaWdoXSBtbWM6IHNkaGNpLW9mLWR3 Y21zaGM6IGltcHJvcGVyIEhTNDAwIFBIWSBETEwgaGFuZGxpbmcgaW4KICBtdDI4MjRfc2V0X2Ns b2NrKCkKLSBbTWVkaXVtXSBtbWM6IHNkaGNpLW9mLWR3Y21zaGM6IGluY29tcGxldGUgZXJyb3Ig cm9sbGJhY2sgaW4KICBtdDI4MjRfZXhlY3V0ZV90dW5pbmcoKQotIFtMb3ddIG1tYzogc2RoY2kt b2YtZHdjbXNoYzogZHVwbGljYXRlIFBIWSBETEwgcmVnaXN0ZXIgbWFjcm9zIGZvcgogIE1UMjgy NAotLQoKY29tbWl0IDZlNjk3MzIzNDAxOTkyODRlNjg4MTczMjllZDRmM2JmM2Y0NzQxNDkKQXV0 aG9yOiBCZW5vw650IE1vbmluIDxiZW5vaXQubW9uaW5AYm9vdGxpbi5jb20+CgptbWM6IHNkaGNp LW9mLWR3Y21zaGM6IGFkZCBNVDI4MjQgdHVuaW5nIGFuZCBIUzQwMCBzdXBwb3J0CgpUaGlzIGNv bW1pdCBhZGRzIHNvZnR3YXJlIHR1bmluZyBvdmVyIHRoZSAxMjgtdGFwIHNhbXBsaW5nIGRlbGF5 IGxpbmUsIGEKZmlsdGVyIGZvciBzdHJheSBkYXRhIGludGVycnVwdHMgZHVyaW5nIHR1bmluZywg YW5kIG1hbnVhbCBQSFkgRExMIGxvY2tpbmcKZm9yIEhTNDAwIG1vZGUgb24gdGhlIE1ldGFub2lh IE1UMjgyNCBjb250cm9sbGVyLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhj aS1vZi1kd2Ntc2hjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWR3Y21zaGMuYwo+IGlu ZGV4IGNiMjQ4ZmM1NzJlMjEuLjMyNGFlOTMyOTVhZjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t bWMvaG9zdC9zZGhjaS1vZi1kd2Ntc2hjLmMKPiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNp LW9mLWR3Y21zaGMuYwpbIC4uLiBdCj4gQEAgLTk4LDYgKzEwMywxMCBAQAo+ICAjZGVmaW5lIE1U MjgyNF9QSFlfVFhTTEVXX1BfU1RST0JFCQkweDMKPiAgI2RlZmluZSBNVDI4MjRfUEhZX1NNUExE TF9DTkZHCQkJMHgwYwo+ICAjZGVmaW5lIE1UMjgyNF9QSFlfQVRETF9DTkZHCQkJMHgwYwo+ICsj ZGVmaW5lIE1UMjgyNF9QSFlfRExMX0NORkcxCQkJMHgyMAo+ICsjZGVmaW5lIE1UMjgyNF9QSFlf RExMRExfQ05GRwkJCTB4NjAKPiArI2RlZmluZSBNVDI4MjRfUEhZX0RMTF9MT0NLRUQJCQlCSVQo MCkKPiArI2RlZmluZSBNVDI4MjRfUEhZX0RMTF9MT0NLX0VSUgkJCUJJVCgxKQoKW1NldmVyaXR5 OiBMb3ddClRoaXMgaXNuJ3QgYSBidWcsIGJ1dCB0aGVzZSBtYWNyb3MgZHVwbGljYXRlIHRoZSBT eW5vcHN5cyBEV0MgTVNIQyBQSFkgRExMCmRlZmluaXRpb25zIGFscmVhZHkgcHJlc2VudCBpbiB0 aGlzIGZpbGUgKFBIWV9ETExfQ05GRzFfU0xWRExZX01BU0sgLwpQSFlfRExMX0NORkcxX1NMVkRM WSwgUEhZX0RMTERMX0NORkdfU0xWX0lOUFNFTF9NQVNLIC8KUEhZX0RMTERMX0NORkdfU0xWX0lO UFNFTCwgRExMX0xPQ0tfU1RTLCBhbmQgRExMX0VSUk9SX1NUUyksIHdoaWxlCm10MjgyNF9zZXRf ZGxsKCkgYWxyZWFkeSB1c2VzIHRoZSBzaGFyZWQgUEhZX0RMTF8qX1IgcmVnaXN0ZXIgb2Zmc2V0 cy4KClsgLi4uIF0KCj4gQEAgLTIyNzEsNiArMjI4MSwzOCBAQCBzdGF0aWMgaW50IG10MjgyNF9w aHlfaW5pdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgYm9vbCB2MXY4KQo+ICAJcmV0dXJuIDA7 Cj4gIH0KPiAgCj4gKy8qIEhTNDAwIG5lZWRzIHRoZSBQSFkgRExMIGxvY2tlZCBvbiB0aGUgY2Fy ZCBjbG9jazsgbG9jayBpdCBieSBoYW5kICovCj4gK3N0YXRpYyB2b2lkIG10MjgyNF9zZXRfZGxs KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQo+ICt7Cj4gKwl1MTYgY2xrOwo+ICsJdTggc3RhdHVz Owo+ICsJaW50IHJldDsKPiArCj4gKwljbGsgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DTE9D S19DT05UUk9MKTsKPiArCWNsayAmPSB+U0RIQ0lfQ0xPQ0tfQ0FSRF9FTjsKPiArCXNkaGNpX3dy aXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOwo+ICsKPiArCXNkaGNpX3dyaXRl Yihob3N0LCBNVDI4MjRfUEhZX0RMTF9DTkZHMSwgUEhZX0RMTF9DTkZHMV9SKTsKPiArCXNkaGNp X3dyaXRlYihob3N0LCBNVDI4MjRfUEhZX0RMTERMX0NORkcsIFBIWV9ETExETF9DTkZHX1IpOwo+ ICsKPiArCXNkaGNpX2VuYWJsZV9jbGsoaG9zdCwgY2xrKTsKPiArCXVzbGVlcF9yYW5nZSgxMCwg MjApOwo+ICsKPiArCXNkaGNpX3dyaXRlYihob3N0LCBQSFlfRExMX0NUUkxfRU5BQkxFLCBQSFlf RExMX0NUUkxfUik7Cj4gKwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChzZGhjaV9yZWFkYiwgc3Rh dHVzLAo+ICsJCQkJc3RhdHVzICYgTVQyODI0X1BIWV9ETExfTE9DS0VELCAxMCwgMTUwMDAwLAo+ ICsJCQkJZmFsc2UsIGhvc3QsIFBIWV9ETExfU1RBVFVTX1IpOwo+ICsJaWYgKHJldCkgewo+ICsJ CWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiUEhZIERMTCBkaWQgbm90IGxvY2s6IDB4JTAy eFxuIiwKPiArCQkJc3RhdHVzKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJaWYgKHN0YXR1 cyAmIE1UMjgyNF9QSFlfRExMX0xPQ0tfRVJSKQo+ICsJCWRldl9lcnIobW1jX2Rldihob3N0LT5t bWMpLCAiUEhZIERMTCBsb2NrZWQgd2l0aCBlcnJvcjogMHglMDJ4XG4iLAo+ICsJCQlzdGF0dXMp Owo+ICt9ClsgLi4uIF0KPiBAQCAtMjMzMiw2ICsyMzc0LDExIEBAIHN0YXRpYyB2b2lkIG10Mjgy NF9zZXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jaykK PiAgCWlmIChjbG9jaykKPiAgCQltdDI4MjRfZW5hYmxlX2Nsayhob3N0LCBzZGhjaV9jYWxjX2Ns ayhob3N0LCBjbG9jaywKPiAgCQkJCQkJICAgICAgICZtbWMtPmFjdHVhbF9jbG9jaykpOwo+ICsK PiArCWlmIChjbG9jayAmJiBob3N0LT50aW1pbmcgPT0gTU1DX1RJTUlOR19NTUNfSFM0MDApIHsK PiArCQltdDI4MjRfc2V0X2RsbChob3N0KTsKPiArCQlkd2Ntc2hjX3Jlc2V0KGhvc3QsIFNESENJ X1JFU0VUX0NNRCB8IFNESENJX1JFU0VUX0RBVEEpOwo+ICsJfQo+ICB9CgpbU2V2ZXJpdHk6IEhp Z2hdCkRvZXMgbXQyODI0X3NldF9jbG9jaygpIHRyeSB0byBsb2NrIHRoZSBIUzQwMCBQSFkgRExM IGF0IDUyIE1IeiBhbmQgdGhlbgpmYWlsIHRvIHJlLWxvY2sgaXQgd2hlbiB0aGUgY2xvY2sgaXMg cmFpc2VkIHRvIDIwMCBNSHo/CgpEdXJpbmcgSFM0MDAgc2VsZWN0aW9uIGluIG1tY19zZWxlY3Rf aHM0MDAoKSAoYW5kIG1tY19zZWxlY3RfaHM0MDBlcygpKSwKdGhlIE1NQyBjb3JlIGNhbGxzIG1t Y19zZXRfdGltaW5nKGhvc3QsIE1NQ19USU1JTkdfTU1DX0hTNDAwKSB3aGlsZQpob3N0LT5jbG9j ayBpcyBzdGlsbCA1MiBNSHosIGJlZm9yZSBjYWxsaW5nIG1tY19zZXRfYnVzX3NwZWVkKGNhcmQp IHRvCnN3aXRjaCB0byAyMDAgTUh6LiAgQmVjYXVzZSBtdDI4MjRfc2V0X2Nsb2NrKCkgb25seSBj aGVja3MgZm9yIGEgbm9uLXplcm8KY2xvY2sgaW4gTU1DX1RJTUlOR19NTUNfSFM0MDAsIHRoZSBm aXJzdCBjYWxsIGVuYWJsZXMgUEhZX0RMTF9DVFJMX1IgYXQKNTIgTUh6LiAgTmVpdGhlciBtdDI4 MjRfc2V0X2Nsb2NrKCkgbm9yIG10MjgyNF9zZXRfZGxsKCkgZXZlciB3cml0ZXMKUEhZX0RMTF9D VFJMX0RJU0FCTEUgdG8gUEhZX0RMTF9DVFJMX1IsIHNvIHdoZW4gbW1jX3NldF9idXNfc3BlZWQo KSBsYXRlcgpjYWxscyBtdDI4MjRfc2V0X2Nsb2NrKCkgYXQgMjAwIE1IeiwgdGhlIGNsb2NrIGlz IHN0b3BwZWQgYW5kIGNoYW5nZWQKd2hpbGUgdGhlIERMTCBzdGF5cyBlbmFibGVkLCBhbmQgd3Jp dGluZyBQSFlfRExMX0NUUkxfRU5BQkxFIGFnYWluIG5ldmVyCmNyZWF0ZXMgYSAwLXRvLTEgZW5h YmxlIHRyYW5zaXRpb24gdG8gbG9jayBvbnRvIHRoZSAyMDAgTUh6IGNsb2NrLgpMZWF2aW5nIEhT NDAwIChzdWNoIGFzIHZpYSBtbWNfaHM0MDBfdG9faHMyMDAoKSkgYWxzbyBsZWF2ZXMgdGhlIERM TAplbmFibGVkIGF0IGxvd2VyIHNwZWVkcy4KClNob3VsZCBQSFlfRExMX0NUUkxfUiBiZSBkaXNh YmxlZCBiZWZvcmUgY2hhbmdpbmcgdGhlIGNsb2NrLCBhbmQgb25seQpjb25maWd1cmVkIGFuZCBl bmFibGVkIHdoZW4gaG9zdC0+dGltaW5nIGlzIE1NQ19USU1JTkdfTU1DX0hTNDAwIGFuZCB0aGUK Y2xvY2sgaXMgYWJvdmUgNTIgTUh6PwoKWyAuLi4gXQoKPiBAQCAtMjQ2MCw2ICsyNTA3LDE1NiBA QCBzdGF0aWMgdm9pZCBtdDI4MjRfaHdfcmVzZXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpClsg Li4uIF0KPiArCS8qCj4gKwkgKiBBVF9DVFJMX1IgbXVzdCBub3QgYmUgd3JpdHRlbiB3aGlsZSBT QU1QTEVfQ0xLX1NFTCBpcyBzZXQ6IGVuYWJsZQo+ICsJICogc29mdHdhcmUgdHVuaW5nIGZpcnN0 LCB0aGVuIHNlbGVjdCB0aGUgdHVuZWQgc2FtcGxpbmcgY2xvY2suCj4gKwkgKi8KPiArCWF0X2N0 cmwgPSBzZGhjaV9yZWFkbChob3N0LCBhdF9jdHJsX3JlZyk7Cj4gKwlzZGhjaV93cml0ZWwoaG9z dCwgYXRfY3RybCB8IEFUX0NUUkxfU1dfVFVORV9FTiwgYXRfY3RybF9yZWcpOwo+ICsJY3RybDIg PSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9IT1NUX0NPTlRST0wyKTsKPiArCXNkaGNpX3dyaXRl dyhob3N0LCBjdHJsMiB8IFNESENJX0NUUkxfVFVORURfQ0xLLCBTREhDSV9IT1NUX0NPTlRST0wy KTsKPiArCS8qCj4gKwkgKiBUaGF0IEhPU1RfQ09OVFJPTDIgd3JpdGUgYnJlYWtzIHRoZSByZXNw b25zZSBvZiB0aGUgbmV4dCBjb21tYW5kOgo+ICsJICogc2VuZCBvbmUgdHVuaW5nIGNvbW1hbmQg Zm9yIG5vdGhpbmcgYmVmb3JlIHRoZSBzY2FuLgo+ICsJICovCj4gKwltbWNfc2VuZF90dW5pbmco aG9zdC0+bW1jLCBvcGNvZGUsIE5VTEwpOwo+ICsJaG9zdC0+b3BzLT5yZXNldChob3N0LCBTREhD SV9SRVNFVF9DTUQgfCBTREhDSV9SRVNFVF9EQVRBKTsKWyAuLi4gXQo+ICtmYWlsOgo+ICsJLyog Y2xlYXIgU0FNUExFX0NMS19TRUwgYmVmb3JlIEFUX0NUUkxfUiBpcyB3cml0dGVuIGFnYWluICov Cj4gKwlzZGhjaV9yZXNldF90dW5pbmcoaG9zdCk7Cj4gKwlzZGhjaV93cml0ZWwoaG9zdCwgYXRf Y3RybCwgYXRfY3RybF9yZWcpOwo+ICsJaG9zdC0+b3BzLT5yZXNldChob3N0LCBTREhDSV9SRVNF VF9DTUQgfCBTREhDSV9SRVNFVF9EQVRBKTsKPiArCXNkaGNpX2VuZF90dW5pbmcoaG9zdCk7Cj4g KwlXUklURV9PTkNFKGR3Y19wcml2LT5mbGFncywgZHdjX3ByaXYtPmZsYWdzICYgfkZMQUdfU1df VFVOSU5HKTsKPiArCXJldHVybiByZXQ7Cj4gK30KCltTZXZlcml0eTogTWVkaXVtXQpJZiBhIHJl LXR1bmluZyBwYXNzIGZhaWxzIGFmdGVyIGFuIGVhcmxpZXIgdHVuaW5nIHBhc3Mgc3VjY2VlZGVk LCBkb2VzIHRoZQpmYWlsIHBhdGggbGVhdmUgQVRfQ1RSTF9TV19UVU5FX0VOIGVuYWJsZWQgd2l0 aCB0aGUgZGVsYXkgbGluZSBzdHVjayBhdCB0aGUKbGFzdCBzY2FubmVkIHBoYXNlPwoKQSBzdWNj ZXNzZnVsIG10MjgyNF9leGVjdXRlX3R1bmluZygpIGNhbGwgbGVhdmVzIEFUX0NUUkxfU1dfVFVO RV9FTiBzZXQgaW4KYXRfY3RybF9yZWcsIHNvIG9uIGEgc3Vic2VxdWVudCB0dW5pbmcgcnVuIGF0 X2N0cmwgaXMgcmVhZCB3aXRoCkFUX0NUUkxfU1dfVFVORV9FTiBhbHJlYWR5IHNldC4gIElmIHRo YXQgc2NhbiBmYWlscywgd3JpdGluZyBhdF9jdHJsIGJhY2sKdmVyYmF0aW0gZG9lcyBub3QgY2xl YXIgQVRfQ1RSTF9TV19UVU5FX0VOLCBsZWF2aW5nIHNvZnR3YXJlIHR1bmluZyBhY3RpdmUKd2l0 aCBEV0NNU0hDX0FUX1NUQVQgc2V0IHRvIHBoYXNlIDEyNy4gIEluIGFkZGl0aW9uLCBzZGhjaV9y ZXNldF90dW5pbmcoKQptb2RpZmllcyB0aGUgbG93IGJ5dGUgb2YgU0RIQ0lfSE9TVF9DT05UUk9M MiB3aGlsZSB0aGUgY2FyZCBjbG9jayBpcwplbmFibGVkIHdpdGhvdXQgYSBkdW1teSBjb21tYW5k IG9yIHN0b3BwaW5nIHRoZSBjYXJkIGNsb2NrIGFyb3VuZCB0aGUKcmVzZXQsIHdoaWNoIG9uIHRo aXMgY29udHJvbGxlciBicmVha3MgdGhlIHJlc3BvbnNlIG9mIHRoZSBuZXh0IGNvbW1hbmQuCgot LSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIw MjYxMTA2LW10MjgyNC12MS0wLTg2MDg3ZWFmNWFmNEBib290bGluLmNvbT9wYXJ0PTIxCgotLSAK bGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw czovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK