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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C4DCCA9ED3 for ; Mon, 4 Nov 2019 18:07:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 40FE02080F for ; Mon, 4 Nov 2019 18:07:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gg9RZglh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729433AbfKDSHP (ORCPT ); Mon, 4 Nov 2019 13:07:15 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:53624 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728012AbfKDSHP (ORCPT ); Mon, 4 Nov 2019 13:07:15 -0500 Received: by mail-wm1-f67.google.com with SMTP id x4so6595186wmi.3; Mon, 04 Nov 2019 10:07:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=D72jRVZqmBfC7+Kb0tuNNuuY7Rbqh0u4ZcubYxJiVEw=; b=gg9RZglh3dQ4I9+Zrbd1c//TX0x8bXkbzTd7d9zunTP8ch+dDb4GuNaR8AxJbaDO4c gMzwKdy0JWl8EtwbGmeZ0f5nux/vtpAGkzSuPORs8AmbWG9FpekLb+jivIWLgha5NMgB s9MAaYyn/7ZheraWZiRQjs0d0MQLB88RCjv82Skmh3/0Fm4oXhzXXa/7J2wML4wuDVes P64tXVOd2Jy8BEbF5Mnzr6Q2nnVaWxs3zKkOQlmIzW1vUhqhrxyVIyvJCR6YQl7yqxJi /ta4JBzY6klYitSHVeFATcHL878nhxbkfevLByjfHmWcgKKfPyxBr+sqESD2oVWEWcj8 ZYdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=D72jRVZqmBfC7+Kb0tuNNuuY7Rbqh0u4ZcubYxJiVEw=; b=hW4HU1wEqU/nNySx9eKQeCWwwWqiqfA9fm05w0aSHdwtEm7UZgLN61ViBrYLLZ5yey d2sUFLgaLJmNbQVAVhoxH1laZfDbiFS+hzUeKak5r0Uok766bgyDmfX0M1bXZ/4bqrET +EPNz/6jmgqWppr6esMq1IJJqbqhP9pJY+NmtQqABFW26R6mut6n68kepZDzRmxyPx69 vNR+DIFg2HB7hHkga48l6rD13qdpPSt3+/Ph0VVCDeJOkzUsK1Ta8cj9vBvWfSggkg2e qkIh9fM3OuLGpBenI/RUwG/HPH11mNjpFmkkonU6NfJh/6+2QoWb+TgZePbTa/h1NOqd PafA== X-Gm-Message-State: APjAAAW5zXPv3+Xzk9i69Li3UJ7h2we/FHHNXKzdr7FovHmrzl7peY+M RV54WNFXGE3tzmq6UflDR8OvEmMYu80BI98Bvec= X-Google-Smtp-Source: APXvYqxE/svCT32/l15YGFj4OySpY2sp1btqvHGxgQbUQ4gig2jWXLFKgpgss9RjBjRgyjDvqnAyDZbUF5kA36KzIRQ= X-Received: by 2002:a1c:480a:: with SMTP id v10mr360011wma.138.1572890831792; Mon, 04 Nov 2019 10:07:11 -0800 (PST) MIME-Version: 1.0 References: <20191103203334.10539-1-peron.clem@gmail.com> <20191103203334.10539-4-peron.clem@gmail.com> <20191104082410.qdgcnphkamlzaipf@pengutronix.de> In-Reply-To: <20191104082410.qdgcnphkamlzaipf@pengutronix.de> From: =?UTF-8?B?Q2zDqW1lbnQgUMOpcm9u?= Date: Mon, 4 Nov 2019 19:07:00 +0100 Message-ID: Subject: Re: [PATCH v2 3/7] pwm: sun4i: Add an optional probe for bus clock To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= Cc: Thierry Reding , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , linux-pwm@vger.kernel.org, devicetree , linux-arm-kernel , linux-kernel , Jernej Skrabec , Pengutronix Kernel Team Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Mon, 4 Nov 2019 at 09:24, Uwe Kleine-K=C3=B6nig wrote: > > Hello, > > On Sun, Nov 03, 2019 at 09:33:30PM +0100, Cl=C3=A9ment P=C3=A9ron wrote: > > From: Jernej Skrabec > > > > H6 PWM core needs bus clock to be enabled in order to work. > > > > Add an optional probe for it and a fallback for previous > > bindings without name on module clock. > > > > Signed-off-by: Jernej Skrabec > > Signed-off-by: Cl=C3=A9ment P=C3=A9ron > > --- > > drivers/pwm/pwm-sun4i.c | 36 ++++++++++++++++++++++++++++++++++++ > > 1 file changed, 36 insertions(+) > > > > diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c > > index d194b8ebdb00..b5e7ac364f59 100644 > > --- a/drivers/pwm/pwm-sun4i.c > > +++ b/drivers/pwm/pwm-sun4i.c > > @@ -78,6 +78,7 @@ struct sun4i_pwm_data { > > > > struct sun4i_pwm_chip { > > struct pwm_chip chip; > > + struct clk *bus_clk; > > struct clk *clk; > > struct reset_control *rst; > > void __iomem *base; > > @@ -367,6 +368,31 @@ static int sun4i_pwm_probe(struct platform_device = *pdev) > > Adding more context here: > > | pwm->clk =3D devm_clk_get(&pdev->dev, NULL); > > if (IS_ERR(pwm->clk)) > > return PTR_ERR(pwm->clk); > > > > + /* Get all clocks and reset line */ > > + pwm->clk =3D devm_clk_get_optional(&pdev->dev, "mod"); > > + if (IS_ERR(pwm->clk)) { > > + dev_err(&pdev->dev, "get clock failed %ld\n", > > + PTR_ERR(pwm->clk)); > > + return PTR_ERR(pwm->clk); > > + } > > I guess you want to drop the first assignment to pwm->clk. devm_clk_get_optional will return NULL if there is no entry, I don't get where I need to drop it assignment. > > > + /* Fallback for old dtbs with a single clock and no name */ > > + if (!pwm->clk) { > > + pwm->clk =3D devm_clk_get(&pdev->dev, NULL); > > + if (IS_ERR(pwm->clk)) { > > + dev_err(&pdev->dev, "get clock failed %ld\n", > > + PTR_ERR(pwm->clk)); > > + return PTR_ERR(pwm->clk); > > + } > > + } > > There is a slight change of behaviour if I'm not mistaken. If you have > this: > > clocks =3D <&clk1>; > clock-names =3D "mod"; > > pwm { > compatible =3D "allwinner,sun4i-a10-pwm" > clocks =3D <&clk2>; > } > > you now use clk1 instead of clk2 before. > > Assuming this is only a theoretical problem, at least pointing this out > in the commit log would be good I think. Yes it's correct and as you said the driver don't check for a correct device tree, that why it's now optional probe. Let's assume that's the device-tree is correct, I will add a comment in the commit log. > > > + pwm->bus_clk =3D devm_clk_get_optional(&pdev->dev, "bus"); > > + if (IS_ERR(pwm->bus_clk)) { > > + dev_err(&pdev->dev, "get bus_clock failed %ld\n", > > + PTR_ERR(pwm->bus_clk)); > > + return PTR_ERR(pwm->bus_clk); > > + } > > + > > pwm->rst =3D devm_reset_control_get_optional(&pdev->dev, NULL); > > if (IS_ERR(pwm->rst)) { > > if (PTR_ERR(pwm->rst) =3D=3D -EPROBE_DEFER) > > @@ -381,6 +407,13 @@ static int sun4i_pwm_probe(struct platform_device = *pdev) > > return ret; > > } > > > > + /* Enable bus clock */ > > + ret =3D clk_prepare_enable(pwm->bus_clk); > > + if (ret) { > > + dev_err(&pdev->dev, "Cannot prepare_enable bus_clk\n"); > > I'd do s/prepare_enable/prepare and enable/ here. Ok > > > + goto err_bus; > > + } > > + > > pwm->chip.dev =3D &pdev->dev; > > pwm->chip.ops =3D &sun4i_pwm_ops; > > pwm->chip.base =3D -1; > > @@ -401,6 +434,8 @@ static int sun4i_pwm_probe(struct platform_device *= pdev) > > return 0; > > > > err_pwm_add: > > + clk_disable_unprepare(pwm->bus_clk); > > +err_bus: > > reset_control_assert(pwm->rst); > > > > return ret; > > What is that clock used for? Is it required to access the hardware > registers? Or is it only required while the PWM is enabled? If so you > could enable the clock more finegrainded. Regarding the datasheet it's required to access the hardware. page 261 : https://linux-sunxi.org/File:Allwinner_H6_V200_User_Manual_V1.1.= pdf Regards, Cl=C3=A9ment > > Best regards > Uwe > > -- > Pengutronix e.K. | Uwe Kleine-K=C3=B6nig = | > Industrial Linux Solutions | http://www.pengutronix.de/ = | 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 X-Spam-Level: X-Spam-Status: No, score=-6.7 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EE11CA9EB5 for ; Mon, 4 Nov 2019 18:07:19 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0AA9E2080F for ; Mon, 4 Nov 2019 18:07:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="cfqtRtRS"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gg9RZglh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0AA9E2080F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/Q/X+Uh14URcVEuqrSvQnW99hRSHA/rGFxbtn9yp41g=; b=cfqtRtRSlfQAXY UMRBacFzpXSVeyQmOcuEoXwcqpc44iZOaj7TpS9LEJ159pDxnkfKqt7Rb7sxiHYO+hpYQ2+i0dpMv AJgYG+QR0N1DUZtapNH4Ad4uE/5nzScLGX2NqaVewYkalTOjKd/JcRc4m+53SM0qneokXiW8aihCd PaimRijLmzbFH79C0vpIn5WIFTlkDXeA10gJQaRSPV2SEfB/l9K9aK/3SdWqBXJ/yjDOjPJVY254H DojCNYnckZSkDSxyoTnRO/FPBoOmWtBGKapwXA3yAK4ykcPZ6bKLZvwS0DPLUXEzJ6yswGpF3dboa oRMmT/CcuTWlSa9dRiEw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iRgl4-0004wN-8D; Mon, 04 Nov 2019 18:07:18 +0000 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iRgl0-0004ve-8l for linux-arm-kernel@lists.infradead.org; Mon, 04 Nov 2019 18:07:15 +0000 Received: by mail-wm1-x343.google.com with SMTP id z19so12927108wmk.3 for ; Mon, 04 Nov 2019 10:07:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=D72jRVZqmBfC7+Kb0tuNNuuY7Rbqh0u4ZcubYxJiVEw=; b=gg9RZglh3dQ4I9+Zrbd1c//TX0x8bXkbzTd7d9zunTP8ch+dDb4GuNaR8AxJbaDO4c gMzwKdy0JWl8EtwbGmeZ0f5nux/vtpAGkzSuPORs8AmbWG9FpekLb+jivIWLgha5NMgB s9MAaYyn/7ZheraWZiRQjs0d0MQLB88RCjv82Skmh3/0Fm4oXhzXXa/7J2wML4wuDVes P64tXVOd2Jy8BEbF5Mnzr6Q2nnVaWxs3zKkOQlmIzW1vUhqhrxyVIyvJCR6YQl7yqxJi /ta4JBzY6klYitSHVeFATcHL878nhxbkfevLByjfHmWcgKKfPyxBr+sqESD2oVWEWcj8 ZYdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=D72jRVZqmBfC7+Kb0tuNNuuY7Rbqh0u4ZcubYxJiVEw=; b=dHRysYuWxURzH7lkkrfULpacYQrawBuCdoG/C1eU/uuk98foWyRpkhO+LofaF0mDf7 R6kE7EzX7id+ot1nq5hEQYrzK17hJlgTwwzkr1PbG1HWL0UP+A6FOvnJiDvTY0EbuD3m b6YxgHxSh4b7BtVetiaJlCYeCpeQcRcX3F9XXjjHxsMfjbzz38KYuhx3aEA2IgSzKuqO xmhLV2S3/6qxnCg8ne5V3VH2VYG+y4M00tu6k9nlTqA1eX6QOfuPRRewCaTZs+u6T/nc JGHuWKerfsMd9eiB0Vccdm/fLpg93bTF+43EG48Q7KpfEAuwELG1NgTnEPTzbdIrOzbt PzWQ== X-Gm-Message-State: APjAAAU8VrVsjLFcKzOhtF/uOA/vSyg76qtJJy/A0PyoMpXAPDJ1A9He eep1r4gL4yzVcAUbs7p1VCFbs4oEY/EpyXsQtoc= X-Google-Smtp-Source: APXvYqxE/svCT32/l15YGFj4OySpY2sp1btqvHGxgQbUQ4gig2jWXLFKgpgss9RjBjRgyjDvqnAyDZbUF5kA36KzIRQ= X-Received: by 2002:a1c:480a:: with SMTP id v10mr360011wma.138.1572890831792; Mon, 04 Nov 2019 10:07:11 -0800 (PST) MIME-Version: 1.0 References: <20191103203334.10539-1-peron.clem@gmail.com> <20191103203334.10539-4-peron.clem@gmail.com> <20191104082410.qdgcnphkamlzaipf@pengutronix.de> In-Reply-To: <20191104082410.qdgcnphkamlzaipf@pengutronix.de> From: =?UTF-8?B?Q2zDqW1lbnQgUMOpcm9u?= Date: Mon, 4 Nov 2019 19:07:00 +0100 Message-ID: Subject: Re: [PATCH v2 3/7] pwm: sun4i: Add an optional probe for bus clock To: =?UTF-8?Q?Uwe_Kleine=2DK=C3=B6nig?= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191104_100714_335241_1575B2A7 X-CRM114-Status: GOOD ( 28.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , linux-pwm@vger.kernel.org, Jernej Skrabec , devicetree , linux-kernel , Maxime Ripard , Rob Herring , Chen-Yu Tsai , Thierry Reding , Pengutronix Kernel Team , linux-arm-kernel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpPbiBNb24sIDQgTm92IDIwMTkgYXQgMDk6MjQsIFV3ZSBLbGVpbmUtS8O2bmlnCjx1Lmts ZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IHdyb3RlOgo+Cj4gSGVsbG8sCj4KPiBPbiBTdW4s IE5vdiAwMywgMjAxOSBhdCAwOTozMzozMFBNICswMTAwLCBDbMOpbWVudCBQw6lyb24gd3JvdGU6 Cj4gPiBGcm9tOiBKZXJuZWogU2tyYWJlYyA8amVybmVqLnNrcmFiZWNAc2lvbC5uZXQ+Cj4gPgo+ ID4gSDYgUFdNIGNvcmUgbmVlZHMgYnVzIGNsb2NrIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8g d29yay4KPiA+Cj4gPiBBZGQgYW4gb3B0aW9uYWwgcHJvYmUgZm9yIGl0IGFuZCBhIGZhbGxiYWNr IGZvciBwcmV2aW91cwo+ID4gYmluZGluZ3Mgd2l0aG91dCBuYW1lIG9uIG1vZHVsZSBjbG9jay4K PiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBKZXJuZWogU2tyYWJlYyA8amVybmVqLnNrcmFiZWNAc2lv bC5uZXQ+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBQw6lyb24gPHBlcm9uLmNsZW1AZ21h aWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9wd20vcHdtLXN1bjRpLmMgfCAzNiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAxIGZpbGUgY2hhbmdlZCwgMzYgaW5z ZXJ0aW9ucygrKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9wd20tc3VuNGkuYyBi L2RyaXZlcnMvcHdtL3B3bS1zdW40aS5jCj4gPiBpbmRleCBkMTk0YjhlYmRiMDAuLmI1ZTdhYzM2 NGY1OSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvcHdtL3B3bS1zdW40aS5jCj4gPiArKysgYi9k cml2ZXJzL3B3bS9wd20tc3VuNGkuYwo+ID4gQEAgLTc4LDYgKzc4LDcgQEAgc3RydWN0IHN1bjRp X3B3bV9kYXRhIHsKPiA+Cj4gPiAgc3RydWN0IHN1bjRpX3B3bV9jaGlwIHsKPiA+ICAgICAgIHN0 cnVjdCBwd21fY2hpcCBjaGlwOwo+ID4gKyAgICAgc3RydWN0IGNsayAqYnVzX2NsazsKPiA+ICAg ICAgIHN0cnVjdCBjbGsgKmNsazsKPiA+ICAgICAgIHN0cnVjdCByZXNldF9jb250cm9sICpyc3Q7 Cj4gPiAgICAgICB2b2lkIF9faW9tZW0gKmJhc2U7Cj4gPiBAQCAtMzY3LDYgKzM2OCwzMSBAQCBz dGF0aWMgaW50IHN1bjRpX3B3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ Cj4gQWRkaW5nIG1vcmUgY29udGV4dCBoZXJlOgo+Cj4gfCAgICAgICBwd20tPmNsayA9IGRldm1f Y2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKPiA+ICAgICAgIGlmIChJU19FUlIocHdtLT5jbGsp KQo+ID4gICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwd20tPmNsayk7Cj4gPgo+ID4gKyAg ICAgLyogR2V0IGFsbCBjbG9ja3MgYW5kIHJlc2V0IGxpbmUgKi8KPiA+ICsgICAgIHB3bS0+Y2xr ID0gZGV2bV9jbGtfZ2V0X29wdGlvbmFsKCZwZGV2LT5kZXYsICJtb2QiKTsKPiA+ICsgICAgIGlm IChJU19FUlIocHdtLT5jbGspKSB7Cj4gPiArICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRl diwgImdldCBjbG9jayBmYWlsZWQgJWxkXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFBU Ul9FUlIocHdtLT5jbGspKTsKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocHdtLT5j bGspOwo+ID4gKyAgICAgfQo+Cj4gSSBndWVzcyB5b3Ugd2FudCB0byBkcm9wIHRoZSBmaXJzdCBh c3NpZ25tZW50IHRvIHB3bS0+Y2xrLgoKZGV2bV9jbGtfZ2V0X29wdGlvbmFsIHdpbGwgcmV0dXJu IE5VTEwgaWYgdGhlcmUgaXMgbm8gZW50cnksIEkgZG9uJ3QKZ2V0IHdoZXJlIEkgbmVlZCB0byBk cm9wIGl0IGFzc2lnbm1lbnQuCgo+Cj4gPiArICAgICAvKiBGYWxsYmFjayBmb3Igb2xkIGR0YnMg d2l0aCBhIHNpbmdsZSBjbG9jayBhbmQgbm8gbmFtZSAqLwo+ID4gKyAgICAgaWYgKCFwd20tPmNs aykgewo+ID4gKyAgICAgICAgICAgICBwd20tPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2 LCBOVUxMKTsKPiA+ICsgICAgICAgICAgICAgaWYgKElTX0VSUihwd20tPmNsaykpIHsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJnZXQgY2xvY2sgZmFpbGVk ICVsZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9FUlIocHdtLT5j bGspKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwd20tPmNsayk7 Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0KPgo+IFRoZXJlIGlzIGEgc2xpZ2h0IGNo YW5nZSBvZiBiZWhhdmlvdXIgaWYgSSdtIG5vdCBtaXN0YWtlbi4gSWYgeW91IGhhdmUKPiB0aGlz Ogo+Cj4gICAgICAgICBjbG9ja3MgPSA8JmNsazE+Owo+ICAgICAgICAgY2xvY2stbmFtZXMgPSAi bW9kIjsKPgo+ICAgICAgICAgcHdtIHsKPiAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJh bGx3aW5uZXIsc3VuNGktYTEwLXB3bSIKPiAgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZjbGsy PjsKPiAgICAgICAgIH0KPgo+IHlvdSBub3cgdXNlIGNsazEgaW5zdGVhZCBvZiBjbGsyIGJlZm9y ZS4KPgo+IEFzc3VtaW5nIHRoaXMgaXMgb25seSBhIHRoZW9yZXRpY2FsIHByb2JsZW0sIGF0IGxl YXN0IHBvaW50aW5nIHRoaXMgb3V0Cj4gaW4gdGhlIGNvbW1pdCBsb2cgd291bGQgYmUgZ29vZCBJ IHRoaW5rLgoKWWVzIGl0J3MgY29ycmVjdCBhbmQgYXMgeW91IHNhaWQgdGhlIGRyaXZlciBkb24n dCBjaGVjayBmb3IgYSBjb3JyZWN0CmRldmljZSB0cmVlLAp0aGF0IHdoeSBpdCdzIG5vdyBvcHRp b25hbCBwcm9iZS4KTGV0J3MgYXNzdW1lIHRoYXQncyB0aGUgZGV2aWNlLXRyZWUgaXMgY29ycmVj dCwgSSB3aWxsIGFkZCBhIGNvbW1lbnQKaW4gdGhlIGNvbW1pdCBsb2cuCgo+Cj4gPiArICAgICBw d20tPmJ1c19jbGsgPSBkZXZtX2Nsa19nZXRfb3B0aW9uYWwoJnBkZXYtPmRldiwgImJ1cyIpOwo+ ID4gKyAgICAgaWYgKElTX0VSUihwd20tPmJ1c19jbGspKSB7Cj4gPiArICAgICAgICAgICAgIGRl dl9lcnIoJnBkZXYtPmRldiwgImdldCBidXNfY2xvY2sgZmFpbGVkICVsZFxuIiwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICBQVFJfRVJSKHB3bS0+YnVzX2NsaykpOwo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gUFRSX0VSUihwd20tPmJ1c19jbGspOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gICAg ICAgcHdtLT5yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKCZwZGV2LT5kZXYs IE5VTEwpOwo+ID4gICAgICAgaWYgKElTX0VSUihwd20tPnJzdCkpIHsKPiA+ICAgICAgICAgICAg ICAgaWYgKFBUUl9FUlIocHdtLT5yc3QpID09IC1FUFJPQkVfREVGRVIpCj4gPiBAQCAtMzgxLDYg KzQwNywxMyBAQCBzdGF0aWMgaW50IHN1bjRpX3B3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQo+ID4gICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gICAgICAgfQo+ID4K PiA+ICsgICAgIC8qIEVuYWJsZSBidXMgY2xvY2sgKi8KPiA+ICsgICAgIHJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShwd20tPmJ1c19jbGspOwo+ID4gKyAgICAgaWYgKHJldCkgewo+ID4gKyAgICAg ICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcHJlcGFyZV9lbmFibGUgYnVzX2Ns a1xuIik7Cj4KPiBJJ2QgZG8gcy9wcmVwYXJlX2VuYWJsZS9wcmVwYXJlIGFuZCBlbmFibGUvIGhl cmUuCk9rCgo+Cj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX2J1czsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICAgICAgIHB3bS0+Y2hpcC5kZXYgPSAmcGRldi0+ZGV2Owo+ID4gICAgICAgcHdtLT5j aGlwLm9wcyA9ICZzdW40aV9wd21fb3BzOwo+ID4gICAgICAgcHdtLT5jaGlwLmJhc2UgPSAtMTsK PiA+IEBAIC00MDEsNiArNDM0LDggQEAgc3RhdGljIGludCBzdW40aV9wd21fcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICAgICAgIHJldHVybiAwOwo+ID4KPiA+ICBlcnJf cHdtX2FkZDoKPiA+ICsgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwd20tPmJ1c19jbGspOwo+ ID4gK2Vycl9idXM6Cj4gPiAgICAgICByZXNldF9jb250cm9sX2Fzc2VydChwd20tPnJzdCk7Cj4g Pgo+ID4gICAgICAgcmV0dXJuIHJldDsKPgo+IFdoYXQgaXMgdGhhdCBjbG9jayB1c2VkIGZvcj8g SXMgaXQgcmVxdWlyZWQgdG8gYWNjZXNzIHRoZSBoYXJkd2FyZQo+IHJlZ2lzdGVycz8gT3IgaXMg aXQgb25seSByZXF1aXJlZCB3aGlsZSB0aGUgUFdNIGlzIGVuYWJsZWQ/IElmIHNvIHlvdQo+IGNv dWxkIGVuYWJsZSB0aGUgY2xvY2sgbW9yZSBmaW5lZ3JhaW5kZWQuCgpSZWdhcmRpbmcgdGhlIGRh dGFzaGVldCBpdCdzIHJlcXVpcmVkIHRvIGFjY2VzcyB0aGUgaGFyZHdhcmUuCnBhZ2UgMjYxIDog aHR0cHM6Ly9saW51eC1zdW54aS5vcmcvRmlsZTpBbGx3aW5uZXJfSDZfVjIwMF9Vc2VyX01hbnVh bF9WMS4xLnBkZgoKUmVnYXJkcywKQ2zDqW1lbnQKCj4KPiBCZXN0IHJlZ2FyZHMKPiBVd2UKPgo+ IC0tCj4gUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVXdlIEts ZWluZS1Lw7ZuaWcgICAgICAgICAgICB8Cj4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICAg ICAgICAgICAgICAgIHwgaHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK