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=-18.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 7BFFFC433FE for ; Sun, 5 Sep 2021 09:11:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5FC7660F9D for ; Sun, 5 Sep 2021 09:11:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236968AbhIEJMo (ORCPT ); Sun, 5 Sep 2021 05:12:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37978 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229691AbhIEJMm (ORCPT ); Sun, 5 Sep 2021 05:12:42 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D8B9BC061575; Sun, 5 Sep 2021 02:11:39 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id p15so5969810ljn.3; Sun, 05 Sep 2021 02:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=BZqEXOlldZy4cjwe/e2y3kHWRpLBIObr40ytbwHZ01M=; b=AJu2N7wP0Ofb66t1p9XF28Iquc4kV42NAJnMiZwtYb1YIhL/EnSJ9dbL4EJYnVrSW0 IcXvxck7Vmob3wASvzmaLQEOyIGF+fgQ9qiSc8DIBZBovmGbvKaEX+PumXFC2c7YdVdT xfEgMDdD0GJ5nergX4owH/pwYfrbToNApHZLh6S4I9biDgxMbJDt9sQ1TispeyUo/tnQ lqIfSYeoPVaPI3ai06yniKC56iXvAGie3yYzm/meyWvPVOdSWsTqIud2AY5dCYPPW09X /NomKhdrDNoho2buCO6+WrucVbgji2E7mfnEXIukPBU9oA74HYL0ao/HcFOudOrRDRBC tIWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BZqEXOlldZy4cjwe/e2y3kHWRpLBIObr40ytbwHZ01M=; b=bu5u1x120Q1LOcdYeLnCHNT5qSXZv7fv5ArCwn5Q2/KKwcW1gajuGXuWsedpUHEeqF 1QtWWixMaIsrraHEpdkDXnbCyNI0TVeBk7Tii2tVHRatFE5OK1g/aXMtefAUN8sMabjr YGnRjk38vp2LXYQRZryX0/tXvRECc54eqNOxNqREctYL4sxNWFnC2ThvtJaRDx2L+m/j w52qliGngcjnZnSmjcS4Sl/eub72gE3wlTgC2WP+LLeuGLOj40ASVbKPlCV4SuR0PBUv Y7AG6aqho50XYokb0ljrvSpFKRbx48vw7K8p7FjUMFac4mMRAM++zdSYpyQPp9/tBX5F VR1w== X-Gm-Message-State: AOAM531e0IIY4Qv6TvUBzOZSyyKC7McqH+kQd1w9PVbqoC0ipLLgR0hL jKdomJX429VrWtSSAW/5aZ6BEHI24+A= X-Google-Smtp-Source: ABdhPJySe9WiolDhMbxlQC+TCA3ZPHhNfG+lisytnB5/Y7snjj0saHinwspdYky87FjaAGwimqO8mA== X-Received: by 2002:a2e:bf1a:: with SMTP id c26mr6408439ljr.88.1630833098053; Sun, 05 Sep 2021 02:11:38 -0700 (PDT) Received: from [192.168.2.145] (46-138-3-129.dynamic.spd-mgts.ru. [46.138.3.129]) by smtp.googlemail.com with ESMTPSA id j20sm440222lfr.248.2021.09.05.02.11.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Sep 2021 02:11:37 -0700 (PDT) Subject: Re: [PATCH 3/3] PM: domains: Add a ->dev_get_performance_state() callback to genpd To: Ulf Hansson Cc: "Rafael J . Wysocki" , Viresh Kumar , Linux PM , Dmitry Baryshkov , Jonathan Hunter , Thierry Reding , Rajendra Nayak , Stephan Gerhold , Bjorn Andersson , Linux ARM , Linux Kernel Mailing List References: <20210902101634.827187-1-ulf.hansson@linaro.org> <20210902101634.827187-4-ulf.hansson@linaro.org> <4e36e732-6ca3-1d00-e6dd-38bb8877577b@gmail.com> <1124dae5-478f-f0ca-ea91-b6945f7c9254@gmail.com> From: Dmitry Osipenko Message-ID: <3d92711f-ce30-2c19-c6a4-bb77d32df2dd@gmail.com> Date: Sun, 5 Sep 2021 12:11:37 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 03.09.2021 17:09, Ulf Hansson пишет: > On Fri, 3 Sept 2021 at 12:06, Dmitry Osipenko wrote: >> >> 03.09.2021 11:55, Ulf Hansson пишет: >>> On Fri, 3 Sept 2021 at 08:00, Dmitry Osipenko wrote: >>>> >>>> 02.09.2021 13:16, Ulf Hansson пишет: >>>>> Hardware may be preprogrammed to a specific performance state, which may >>>>> not be zero initially during boot. This may lead to that genpd's current >>>>> performance state becomes inconsistent with the state of the hardware. To >>>>> deal with this, the driver for a device that is being attached to its >>>>> genpd, need to request an initial performance state vote, which is >>>>> typically done by calling some of the OPP APIs while probing. >>>>> >>>>> In some cases this would lead to boilerplate code in the drivers. Let's >>>>> make it possible to avoid this, by adding a new optional callback to genpd >>>>> and invoke it per device during the attach process. In this way, the genpd >>>>> provider driver can inform genpd about the initial performance state that >>>>> is needed for the device. >>>>> >>>>> Signed-off-by: Ulf Hansson >>>>> --- >>>>> drivers/base/power/domain.c | 8 +++++--- >>>>> include/linux/pm_domain.h | 2 ++ >>>>> 2 files changed, 7 insertions(+), 3 deletions(-) >>>>> >>>>> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c >>>>> index 800adf831cae..1a6f3538af8d 100644 >>>>> --- a/drivers/base/power/domain.c >>>>> +++ b/drivers/base/power/domain.c >>>>> @@ -2640,13 +2640,15 @@ static void genpd_dev_pm_sync(struct device *dev) >>>>> genpd_queue_power_off_work(pd); >>>>> } >>>>> >>>>> -static int genpd_get_default_performance_state(struct device *dev, >>>>> +static int genpd_get_default_performance_state(struct generic_pm_domain *genpd, >>>>> + struct device *dev, >>>>> unsigned int index) >>>>> { >>>>> int pstate = of_get_required_opp_performance_state(dev->of_node, index); >>>>> >>>>> if (pstate == -ENODEV || pstate == -EOPNOTSUPP) >>>>> - return 0; >>>>> + pstate = genpd->dev_get_performance_state ? >>>>> + genpd->dev_get_performance_state(genpd, dev) : 0; >>>>> >>>>> return pstate; >>>>> } >>>>> @@ -2701,7 +2703,7 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev, >>>>> } >>>>> >>>>> /* Set the default performance state */ >>>>> - pstate = genpd_get_default_performance_state(dev, index); >>>>> + pstate = genpd_get_default_performance_state(pd, dev, index); >>>> >>>> If base device is suspended, then its performance state is zero. >>>> >>>> When device will be rpm-resumed, then its performance should be set to >>>> the default state. >>>> You're setting performance state of the wrong device, it should be the >> Are you okay with my variant of handling the suspended device? > > Not sure if you intended to post this line? > > In any case, I am happy to help and review to move things forward. It's not clear to me whether you omitted handling the case of rpm-suspended device on purpose or not. I think it should be a part of this patch, but sounds like you want to work on it separately, correct? >>>> base device and not the virtual domain device. >>> >>> No I am not. :-) Let me elaborate. >>> >>> For the single PM domain case, 'dev' and 'base_dev' are pointing to >>> the same device. So this works fine. >>> >>> For the multiple PM domain case or when attaching goes via >>> genpd_dev_pm_attach_by_id(), 'dev' is the virtual device registered in >>> genpd_dev_pm_attach_by_id(). In this case, it's 'dev' that is becoming >>> attached to genpd and not the 'base_dev'. Note also that, runtime PM >>> has not been enabled for 'dev' yet at this point and 'dev' has been >>> assigned the same OF node as 'base_dev", to allow OF parsing to work >>> as is for it. >>> >>> Moreover, to deal with runtime PM in the multiple PM domain case, the >>> consumer driver should create a device link. Along the lines of this: >>> device_link_add(base_dev, dev, DL_FLAG_PM_RUNTIME | >>> DL_FLAG_STATELESS), thus assigning the virtual device ('dev') as the >>> supplier for its consumer device ('base_dev'). >>> >>>> >>>> These all is handled properly by my patch [1]. Hence it's complicated >>>> for the reason. >>> >>> See above. It shouldn't have to be complicated. If it still is, there >>> is something to fix for the multiple PM domain case. >>>> [1] >> Alright, it actually works now on Tegra using the dev in the callback >> for the case of multiple domains, I re-checked it. Previously, when I >> tried that, there was a conflict in regards to OPP usage, I don't >> remember details anymore. Maybe the recent changes that were suggested >> by Viresh helped with that. So yes, there is no need to pass the base >> device anymore. > > Great! So, it seems like $subject patch should be a way forward for you then? The current behaviour is incorrect for Tegra because it needs to set the rpm_pstate for rpm-suspended device, instead of bumping the state immediately. Power management is defeated without it on Tegra because SoC will start to consume extra power while device that needs this power is suspended. Otherwise $subject looks okay. > BTW, I forgot to add your Suggested-by: tag for the patch, you > certainly deserve at least that. Or perhaps you are fine with > co-developed by tag? Either is fine. Although, won't it be easier to keep these PD patches within the Tegra series since it depends on them? I can pick up the patches into the next version of Tegra series. 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=-16.1 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 18DAFC433EF for ; Sun, 5 Sep 2021 09:13:53 +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 C660A60F9D for ; Sun, 5 Sep 2021 09:13:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org C660A60F9D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:Date: Message-ID:From:References:Cc:To:Subject:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Frb5bOsP1uS/OOOIzKwxW5tbkOVSoSX4LiaHnAP/nYY=; b=VNsWCxe6HTJWsR8FmjNf/OLdPe U/i1xRWlBo/t62pLTM/EwWjZ+tggJfp9Fcqvg1TK4dDspHcS7GPT7+J3n2MSFGe3ftcgEa1z0doUR qcTb40aCOWJTg5qFyk02dOThm5CgI85Hn7ET0b9XC8LrDogBt1TypgPS0wCj+2Jbz9pToX8q96q5i gx1JBGCi6G48b8Zbc9u7t0DfKa3osQWc8tKocU9R3Pn7UdJMr+KYqhk3rHsA5sfpcJf+yy68oLf4I XRxZS3a/bTtXiUtJPjDx8Qp6Z80B+TopHFlJSoSYLGfsI0Pl8lFe4xZ6hC5+T0MkdnF2Eox78MzX+ DnvrMVJw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mMoBj-00FUY8-Jk; Sun, 05 Sep 2021 09:11:43 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mMoBf-00FUXj-Mx for linux-arm-kernel@lists.infradead.org; Sun, 05 Sep 2021 09:11:41 +0000 Received: by mail-lj1-x235.google.com with SMTP id m4so5940927ljq.8 for ; Sun, 05 Sep 2021 02:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=BZqEXOlldZy4cjwe/e2y3kHWRpLBIObr40ytbwHZ01M=; b=AJu2N7wP0Ofb66t1p9XF28Iquc4kV42NAJnMiZwtYb1YIhL/EnSJ9dbL4EJYnVrSW0 IcXvxck7Vmob3wASvzmaLQEOyIGF+fgQ9qiSc8DIBZBovmGbvKaEX+PumXFC2c7YdVdT xfEgMDdD0GJ5nergX4owH/pwYfrbToNApHZLh6S4I9biDgxMbJDt9sQ1TispeyUo/tnQ lqIfSYeoPVaPI3ai06yniKC56iXvAGie3yYzm/meyWvPVOdSWsTqIud2AY5dCYPPW09X /NomKhdrDNoho2buCO6+WrucVbgji2E7mfnEXIukPBU9oA74HYL0ao/HcFOudOrRDRBC tIWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=BZqEXOlldZy4cjwe/e2y3kHWRpLBIObr40ytbwHZ01M=; b=ZIc9C92KxxnnNALCqH8PPC+SHxu75DUNParNXntHSDOZhIqe95DSeq1VUAFVWK59iz PAEF/Qt7iL1jXuGscBc1+o72gC4CMvz3nIFZZCfC6uEpSp4alGL8JF1WrwDxKLR1k/Gs L+zL+neoKnLEhQWqnWhyQRQgoOTXm5lMiBYVO2+6i+CnKzV6s4EdemsRtIx18VQDYXhb yXN+GxyG5rs2BWtpH4abpE8uooqFz7Xhsw9uwLiYQWTnyPNNfW8ZxbXu2+rspd+OSQSo D7Fl9QddPqfzPrECvZW4hCRok6+QrjNPjhmV1E/Vkx4ub8+qUcWkFXJ/TSKym3wfy9Y6 2ajA== X-Gm-Message-State: AOAM532tDdTIn0GD24YmXneRyCmX+ruwwgNzh5+M3mviItVexbNIkDQc G+DhVlyxzrNAo/KnIWvXWzs= X-Google-Smtp-Source: ABdhPJySe9WiolDhMbxlQC+TCA3ZPHhNfG+lisytnB5/Y7snjj0saHinwspdYky87FjaAGwimqO8mA== X-Received: by 2002:a2e:bf1a:: with SMTP id c26mr6408439ljr.88.1630833098053; Sun, 05 Sep 2021 02:11:38 -0700 (PDT) Received: from [192.168.2.145] (46-138-3-129.dynamic.spd-mgts.ru. [46.138.3.129]) by smtp.googlemail.com with ESMTPSA id j20sm440222lfr.248.2021.09.05.02.11.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 05 Sep 2021 02:11:37 -0700 (PDT) Subject: Re: [PATCH 3/3] PM: domains: Add a ->dev_get_performance_state() callback to genpd To: Ulf Hansson Cc: "Rafael J . Wysocki" , Viresh Kumar , Linux PM , Dmitry Baryshkov , Jonathan Hunter , Thierry Reding , Rajendra Nayak , Stephan Gerhold , Bjorn Andersson , Linux ARM , Linux Kernel Mailing List References: <20210902101634.827187-1-ulf.hansson@linaro.org> <20210902101634.827187-4-ulf.hansson@linaro.org> <4e36e732-6ca3-1d00-e6dd-38bb8877577b@gmail.com> <1124dae5-478f-f0ca-ea91-b6945f7c9254@gmail.com> From: Dmitry Osipenko Message-ID: <3d92711f-ce30-2c19-c6a4-bb77d32df2dd@gmail.com> Date: Sun, 5 Sep 2021 12:11:37 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210905_021139_801197_6CEDB116 X-CRM114-Status: GOOD ( 36.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org MDMuMDkuMjAyMSAxNzowOSwgVWxmIEhhbnNzb24g0L/QuNGI0LXRgjoKPiBPbiBGcmksIDMgU2Vw dCAyMDIxIGF0IDEyOjA2LCBEbWl0cnkgT3NpcGVua28gPGRpZ2V0eEBnbWFpbC5jb20+IHdyb3Rl Ogo+Pgo+PiAwMy4wOS4yMDIxIDExOjU1LCBVbGYgSGFuc3NvbiDQv9C40YjQtdGCOgo+Pj4gT24g RnJpLCAzIFNlcHQgMjAyMSBhdCAwODowMCwgRG1pdHJ5IE9zaXBlbmtvIDxkaWdldHhAZ21haWwu Y29tPiB3cm90ZToKPj4+Pgo+Pj4+IDAyLjA5LjIwMjEgMTM6MTYsIFVsZiBIYW5zc29uINC/0LjR iNC10YI6Cj4+Pj4+IEhhcmR3YXJlIG1heSBiZSBwcmVwcm9ncmFtbWVkIHRvIGEgc3BlY2lmaWMg cGVyZm9ybWFuY2Ugc3RhdGUsIHdoaWNoIG1heQo+Pj4+PiBub3QgYmUgemVybyBpbml0aWFsbHkg ZHVyaW5nIGJvb3QuIFRoaXMgbWF5IGxlYWQgdG8gdGhhdCBnZW5wZCdzIGN1cnJlbnQKPj4+Pj4g cGVyZm9ybWFuY2Ugc3RhdGUgYmVjb21lcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgc3RhdGUgb2Yg dGhlIGhhcmR3YXJlLiBUbwo+Pj4+PiBkZWFsIHdpdGggdGhpcywgdGhlIGRyaXZlciBmb3IgYSBk ZXZpY2UgdGhhdCBpcyBiZWluZyBhdHRhY2hlZCB0byBpdHMKPj4+Pj4gZ2VucGQsIG5lZWQgdG8g cmVxdWVzdCBhbiBpbml0aWFsIHBlcmZvcm1hbmNlIHN0YXRlIHZvdGUsIHdoaWNoIGlzCj4+Pj4+ IHR5cGljYWxseSBkb25lIGJ5IGNhbGxpbmcgc29tZSBvZiB0aGUgT1BQIEFQSXMgd2hpbGUgcHJv YmluZy4KPj4+Pj4KPj4+Pj4gSW4gc29tZSBjYXNlcyB0aGlzIHdvdWxkIGxlYWQgdG8gYm9pbGVy cGxhdGUgY29kZSBpbiB0aGUgZHJpdmVycy4gTGV0J3MKPj4+Pj4gbWFrZSBpdCBwb3NzaWJsZSB0 byBhdm9pZCB0aGlzLCBieSBhZGRpbmcgYSBuZXcgb3B0aW9uYWwgY2FsbGJhY2sgdG8gZ2VucGQK Pj4+Pj4gYW5kIGludm9rZSBpdCBwZXIgZGV2aWNlIGR1cmluZyB0aGUgYXR0YWNoIHByb2Nlc3Mu IEluIHRoaXMgd2F5LCB0aGUgZ2VucGQKPj4+Pj4gcHJvdmlkZXIgZHJpdmVyIGNhbiBpbmZvcm0g Z2VucGQgYWJvdXQgdGhlIGluaXRpYWwgcGVyZm9ybWFuY2Ugc3RhdGUgdGhhdAo+Pj4+PiBpcyBu ZWVkZWQgZm9yIHRoZSBkZXZpY2UuCj4+Pj4+Cj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFVsZiBIYW5z c29uIDx1bGYuaGFuc3NvbkBsaW5hcm8ub3JnPgo+Pj4+PiAtLS0KPj4+Pj4gIGRyaXZlcnMvYmFz ZS9wb3dlci9kb21haW4uYyB8IDggKysrKystLS0KPj4+Pj4gIGluY2x1ZGUvbGludXgvcG1fZG9t YWluLmggICB8IDIgKysKPj4+Pj4gIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2Vy L2RvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCj4+Pj4+IGluZGV4IDgwMGFk ZjgzMWNhZS4uMWE2ZjM1MzhhZjhkIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2Jhc2UvcG93 ZXIvZG9tYWluLmMKPj4+Pj4gKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCj4+Pj4+ IEBAIC0yNjQwLDEzICsyNjQwLDE1IEBAIHN0YXRpYyB2b2lkIGdlbnBkX2Rldl9wbV9zeW5jKHN0 cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4gICAgICAgZ2VucGRfcXVldWVfcG93ZXJfb2ZmX3dvcmso cGQpOwo+Pj4+PiAgfQo+Pj4+Pgo+Pj4+PiAtc3RhdGljIGludCBnZW5wZF9nZXRfZGVmYXVsdF9w ZXJmb3JtYW5jZV9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+Pj4+ICtzdGF0aWMgaW50IGdl bnBkX2dldF9kZWZhdWx0X3BlcmZvcm1hbmNlX3N0YXRlKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFp biAqZ2VucGQsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkZXZpY2UgKmRldiwKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZGV4KQo+Pj4+PiAgewo+Pj4+PiAgICAg ICBpbnQgcHN0YXRlID0gb2ZfZ2V0X3JlcXVpcmVkX29wcF9wZXJmb3JtYW5jZV9zdGF0ZShkZXYt Pm9mX25vZGUsIGluZGV4KTsKPj4+Pj4KPj4+Pj4gICAgICAgaWYgKHBzdGF0ZSA9PSAtRU5PREVW IHx8IHBzdGF0ZSA9PSAtRU9QTk9UU1VQUCkKPj4+Pj4gLSAgICAgICAgICAgICByZXR1cm4gMDsK Pj4+Pj4gKyAgICAgICAgICAgICBwc3RhdGUgPSBnZW5wZC0+ZGV2X2dldF9wZXJmb3JtYW5jZV9z dGF0ZSA/Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgZ2VucGQtPmRldl9nZXRfcGVyZm9y bWFuY2Vfc3RhdGUoZ2VucGQsIGRldikgOiAwOwo+Pj4+Pgo+Pj4+PiAgICAgICByZXR1cm4gcHN0 YXRlOwo+Pj4+PiAgfQo+Pj4+PiBAQCAtMjcwMSw3ICsyNzAzLDcgQEAgc3RhdGljIGludCBfX2dl bnBkX2Rldl9wbV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpiYXNl X2RldiwKPj4+Pj4gICAgICAgfQo+Pj4+Pgo+Pj4+PiAgICAgICAvKiBTZXQgdGhlIGRlZmF1bHQg cGVyZm9ybWFuY2Ugc3RhdGUgKi8KPj4+Pj4gLSAgICAgcHN0YXRlID0gZ2VucGRfZ2V0X2RlZmF1 bHRfcGVyZm9ybWFuY2Vfc3RhdGUoZGV2LCBpbmRleCk7Cj4+Pj4+ICsgICAgIHBzdGF0ZSA9IGdl bnBkX2dldF9kZWZhdWx0X3BlcmZvcm1hbmNlX3N0YXRlKHBkLCBkZXYsIGluZGV4KTsKPj4+Pgo+ Pj4+IElmIGJhc2UgZGV2aWNlIGlzIHN1c3BlbmRlZCwgdGhlbiBpdHMgcGVyZm9ybWFuY2Ugc3Rh dGUgaXMgemVyby4KPj4+Pgo+Pj4+IFdoZW4gZGV2aWNlIHdpbGwgYmUgcnBtLXJlc3VtZWQsIHRo ZW4gaXRzIHBlcmZvcm1hbmNlIHNob3VsZCBiZSBzZXQgdG8KPj4+PiB0aGUgZGVmYXVsdCBzdGF0 ZS4KPj4+PiBZb3UncmUgc2V0dGluZyBwZXJmb3JtYW5jZSBzdGF0ZSBvZiB0aGUgd3JvbmcgZGV2 aWNlLCBpdCBzaG91bGQgYmUgdGhlCj4+IEFyZSB5b3Ugb2theSB3aXRoIG15IHZhcmlhbnQgb2Yg aGFuZGxpbmcgdGhlIHN1c3BlbmRlZCBkZXZpY2U/Cj4gCj4gTm90IHN1cmUgaWYgeW91IGludGVu ZGVkIHRvIHBvc3QgdGhpcyBsaW5lPwo+IAo+IEluIGFueSBjYXNlLCBJIGFtIGhhcHB5IHRvIGhl bHAgYW5kIHJldmlldyB0byBtb3ZlIHRoaW5ncyBmb3J3YXJkLgoKSXQncyBub3QgY2xlYXIgdG8g bWUgd2hldGhlciB5b3Ugb21pdHRlZCBoYW5kbGluZyB0aGUgY2FzZSBvZgpycG0tc3VzcGVuZGVk IGRldmljZSBvbiBwdXJwb3NlIG9yIG5vdC4gSSB0aGluayBpdCBzaG91bGQgYmUgYSBwYXJ0IG9m CnRoaXMgcGF0Y2gsIGJ1dCBzb3VuZHMgbGlrZSB5b3Ugd2FudCB0byB3b3JrIG9uIGl0IHNlcGFy YXRlbHksIGNvcnJlY3Q/Cgo+Pj4+IGJhc2UgZGV2aWNlIGFuZCBub3QgdGhlIHZpcnR1YWwgZG9t YWluIGRldmljZS4KPj4+Cj4+PiBObyBJIGFtIG5vdC4gOi0pIExldCBtZSBlbGFib3JhdGUuCj4+ Pgo+Pj4gRm9yIHRoZSBzaW5nbGUgUE0gZG9tYWluIGNhc2UsICdkZXYnIGFuZCAnYmFzZV9kZXYn IGFyZSBwb2ludGluZyB0bwo+Pj4gdGhlIHNhbWUgZGV2aWNlLiBTbyB0aGlzIHdvcmtzIGZpbmUu Cj4+Pgo+Pj4gRm9yIHRoZSBtdWx0aXBsZSBQTSBkb21haW4gY2FzZSBvciB3aGVuIGF0dGFjaGlu ZyBnb2VzIHZpYQo+Pj4gZ2VucGRfZGV2X3BtX2F0dGFjaF9ieV9pZCgpLCAnZGV2JyBpcyB0aGUg dmlydHVhbCBkZXZpY2UgcmVnaXN0ZXJlZCBpbgo+Pj4gZ2VucGRfZGV2X3BtX2F0dGFjaF9ieV9p ZCgpLiBJbiB0aGlzIGNhc2UsIGl0J3MgJ2RldicgdGhhdCBpcyBiZWNvbWluZwo+Pj4gYXR0YWNo ZWQgdG8gZ2VucGQgYW5kIG5vdCB0aGUgJ2Jhc2VfZGV2Jy4gTm90ZSBhbHNvIHRoYXQsIHJ1bnRp bWUgUE0KPj4+IGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciAnZGV2JyB5ZXQgYXQgdGhpcyBwb2lu dCBhbmQgJ2RldicgaGFzIGJlZW4KPj4+IGFzc2lnbmVkIHRoZSBzYW1lIE9GIG5vZGUgYXMgJ2Jh c2VfZGV2IiwgdG8gYWxsb3cgT0YgcGFyc2luZyB0byB3b3JrCj4+PiBhcyBpcyBmb3IgaXQuCj4+ Pgo+Pj4gTW9yZW92ZXIsIHRvIGRlYWwgd2l0aCBydW50aW1lIFBNIGluIHRoZSBtdWx0aXBsZSBQ TSBkb21haW4gY2FzZSwgdGhlCj4+PiBjb25zdW1lciBkcml2ZXIgc2hvdWxkIGNyZWF0ZSBhIGRl dmljZSBsaW5rLiBBbG9uZyB0aGUgbGluZXMgb2YgdGhpczoKPj4+IGRldmljZV9saW5rX2FkZChi YXNlX2RldiwgZGV2LCBETF9GTEFHX1BNX1JVTlRJTUUgfAo+Pj4gRExfRkxBR19TVEFURUxFU1Mp LCB0aHVzIGFzc2lnbmluZyB0aGUgdmlydHVhbCBkZXZpY2UgKCdkZXYnKSBhcyB0aGUKPj4+IHN1 cHBsaWVyIGZvciBpdHMgY29uc3VtZXIgZGV2aWNlICgnYmFzZV9kZXYnKS4KPj4+Cj4+Pj4KPj4+ PiBUaGVzZSBhbGwgaXMgaGFuZGxlZCBwcm9wZXJseSBieSBteSBwYXRjaCBbMV0uIEhlbmNlIGl0 J3MgY29tcGxpY2F0ZWQKPj4+PiBmb3IgdGhlIHJlYXNvbi4KPj4+Cj4+PiBTZWUgYWJvdmUuIEl0 IHNob3VsZG4ndCBoYXZlIHRvIGJlIGNvbXBsaWNhdGVkLiBJZiBpdCBzdGlsbCBpcywgdGhlcmUK Pj4+IGlzIHNvbWV0aGluZyB0byBmaXggZm9yIHRoZSBtdWx0aXBsZSBQTSBkb21haW4gY2FzZS4K Pj4+PiBbMV0KPj4gQWxyaWdodCwgaXQgYWN0dWFsbHkgd29ya3Mgbm93IG9uIFRlZ3JhIHVzaW5n IHRoZSBkZXYgaW4gdGhlIGNhbGxiYWNrCj4+IGZvciB0aGUgY2FzZSBvZiBtdWx0aXBsZSBkb21h aW5zLCBJIHJlLWNoZWNrZWQgaXQuIFByZXZpb3VzbHksIHdoZW4gSQo+PiB0cmllZCB0aGF0LCB0 aGVyZSB3YXMgYSBjb25mbGljdCBpbiByZWdhcmRzIHRvIE9QUCB1c2FnZSwgSSBkb24ndAo+PiBy ZW1lbWJlciBkZXRhaWxzIGFueW1vcmUuIE1heWJlIHRoZSByZWNlbnQgY2hhbmdlcyB0aGF0IHdl cmUgc3VnZ2VzdGVkCj4+IGJ5IFZpcmVzaCBoZWxwZWQgd2l0aCB0aGF0LiBTbyB5ZXMsIHRoZXJl IGlzIG5vIG5lZWQgdG8gcGFzcyB0aGUgYmFzZQo+PiBkZXZpY2UgYW55bW9yZS4KPiAKPiBHcmVh dCEgU28sIGl0IHNlZW1zIGxpa2UgJHN1YmplY3QgcGF0Y2ggc2hvdWxkIGJlIGEgd2F5IGZvcndh cmQgZm9yIHlvdSB0aGVuPwoKVGhlIGN1cnJlbnQgYmVoYXZpb3VyIGlzIGluY29ycmVjdCBmb3Ig VGVncmEgYmVjYXVzZSBpdCBuZWVkcyB0byBzZXQgdGhlCnJwbV9wc3RhdGUgZm9yIHJwbS1zdXNw ZW5kZWQgZGV2aWNlLCBpbnN0ZWFkIG9mIGJ1bXBpbmcgdGhlIHN0YXRlCmltbWVkaWF0ZWx5LgoK UG93ZXIgbWFuYWdlbWVudCBpcyBkZWZlYXRlZCB3aXRob3V0IGl0IG9uIFRlZ3JhIGJlY2F1c2Ug U29DIHdpbGwgc3RhcnQKdG8gY29uc3VtZSBleHRyYSBwb3dlciB3aGlsZSBkZXZpY2UgdGhhdCBu ZWVkcyB0aGlzIHBvd2VyIGlzIHN1c3BlbmRlZC4KCk90aGVyd2lzZSAkc3ViamVjdCBsb29rcyBv a2F5LgoKPiBCVFcsIEkgZm9yZ290IHRvIGFkZCB5b3VyIFN1Z2dlc3RlZC1ieTogdGFnIGZvciB0 aGUgcGF0Y2gsIHlvdQo+IGNlcnRhaW5seSBkZXNlcnZlIGF0IGxlYXN0IHRoYXQuIE9yIHBlcmhh cHMgeW91IGFyZSBmaW5lIHdpdGgKPiBjby1kZXZlbG9wZWQgYnkgdGFnPwoKRWl0aGVyIGlzIGZp bmUuIEFsdGhvdWdoLCB3b24ndCBpdCBiZSBlYXNpZXIgdG8ga2VlcCB0aGVzZSBQRCBwYXRjaGVz CndpdGhpbiB0aGUgVGVncmEgc2VyaWVzIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlbT8gSSBjYW4g cGljayB1cCB0aGUKcGF0Y2hlcyBpbnRvIHRoZSBuZXh0IHZlcnNpb24gb2YgVGVncmEgc2VyaWVz LgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=