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=-5.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=no 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 AD1E4C433E0 for ; Mon, 15 Mar 2021 17:38:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6E39664F39 for ; Mon, 15 Mar 2021 17:38:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231974AbhCORho (ORCPT ); Mon, 15 Mar 2021 13:37:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237145AbhCORh1 (ORCPT ); Mon, 15 Mar 2021 13:37:27 -0400 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93518C06174A for ; Mon, 15 Mar 2021 10:37:27 -0700 (PDT) Received: by mail-pj1-x102f.google.com with SMTP id cl21-20020a17090af695b02900c61ac0f0e9so2281822pjb.1 for ; Mon, 15 Mar 2021 10:37:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=6tzWJFrnQsA9R0ltOnjmT6ONH7vUsFiXRrsDNZLyLeE=; b=geG7dA7E2zlS9xUqBaDEUdwx5UsGP1Xgs1ukLka9/F1hO2wL7a+sQtugn8N1aPmriD CR+M8zTuQqRHFM+qCDl6XyAnsg6ktSxgCsk3EIQbXTC2V2QR/IfLdA9bAS6SlWYaoUDk Xp1T65v1iPHG+f73m/odoiqRisah7Awbq4UHNYjDywCC/2usi9lq9kxwnslKwLMkIOtn 1kDjtCs8jQ92/vF6qtNSvVxES7ZcYguzt0EnDJ0InuSzjl3pOc+7I7JKHg1cROahtTRG dvaYxM/HHN9PGujCM2A/YYY2t8AIRjROikkaqWubv9azkfGEMjsAASX1dhT3100eTeCU bYvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=6tzWJFrnQsA9R0ltOnjmT6ONH7vUsFiXRrsDNZLyLeE=; b=aBCSde9FPmlvEQeLGq/o15xR89dxFr5tatrCveqr00tmSr9O0sY1UsQraqkrfJ3vKS nHsc894H2qO6G4aeCLR5nFEXC/J18pwRor5yXVRZDQKmBAt2cHjWkPWcKAyrKuVHmKkR sInX3RglvVt5Rs/fwVVhgAbqlVELubbNCPTWarDWYs0H85Gn0m1yfxJHKfdb+sLFDdLQ YtAN6rHNOqODI61ntrT3KI80xUjCgpA4EHkH/9SAHJkaLVIbtsTUmf5LitcRR0ehmNxm juoZYUsMxVUvak+knAE7iUH0TJXNi8Vd1KS/l9lonYRG8NH8npzMz+YWLMQ4RTvSNYrP LTGw== X-Gm-Message-State: AOAM531DJ6AB8iWLakRiFk93w44rrK02xncadqpEYuWaaLjrgKDg10kS mwhmdmL3Ml9gw4Q5eRL8IbpjVQ== X-Google-Smtp-Source: ABdhPJzjBVUfU6SxcPXB+wS9Ia8KPxsgV7MB4yaLdCDuVvNy+1MQJ3vYLTLfMobUudVVgJAtxBFz/w== X-Received: by 2002:a17:90a:8914:: with SMTP id u20mr209590pjn.90.1615829846821; Mon, 15 Mar 2021 10:37:26 -0700 (PDT) Received: from xps15 (S0106889e681aac74.cg.shawcable.net. [68.147.0.187]) by smtp.gmail.com with ESMTPSA id a20sm14934585pfl.97.2021.03.15.10.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Mar 2021 10:37:26 -0700 (PDT) Date: Mon, 15 Mar 2021 11:37:24 -0600 From: Mathieu Poirier To: Ben Levinsky Cc: "devicetree@vger.kernel.org" , "linux-remoteproc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Michal Simek , "Ed T. Mooring" Subject: Re: [PATCH v26 5/5] remoteproc: Add initial zynqmp R5 remoteproc driver Message-ID: <20210315173724.GB1342614@xps15> References: <20210223154447.13247-1-ben.levinsky@xilinx.com> <20210223154447.13247-6-ben.levinsky@xilinx.com> <20210309165330.GA4013290@xps15> <38527B70-FE3A-4D05-8C2E-6A95A3D4ADF3@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <38527B70-FE3A-4D05-8C2E-6A95A3D4ADF3@xilinx.com> Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On Thu, Mar 11, 2021 at 11:49:13PM +0000, Ben Levinsky wrote: > Hi Mathieu > > -----Original Message----- > From: Mathieu Poirier > Date: Tuesday, March 9, 2021 at 8:53 AM > To: Ben Levinsky > Cc: "devicetree@vger.kernel.org" , "linux-remoteproc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Michal Simek > Subject: Re: [PATCH v26 5/5] remoteproc: Add initial zynqmp R5 remoteproc driver > > [...] > > > + > > +/** > > + * zynqmp_r5_probe - Probes ZynqMP R5 processor device node > > + * this is called for each individual R5 core to > > + * set up mailbox, Xilinx platform manager unique ID, > > + * add to rproc core > > + * > > + * @pdev: domain platform device for current R5 core > > + * @node: pointer of the device node for current R5 core > > + * @rpu_mode: mode to configure RPU, split or lockstep > > + * > > + * Return: 0 for success, negative value for failure. > > + */ > > +static struct zynqmp_r5_rproc *zynqmp_r5_probe(struct platform_device *pdev, > > + struct device_node *node, > > + enum rpu_oper_mode rpu_mode) > > +{ > > + int ret, num_banks; > > + struct device *dev = &pdev->dev; > > + struct rproc *rproc_ptr; > > + struct zynqmp_r5_rproc *z_rproc; > > + struct device_node *r5_node; > > + > > + /* Allocate remoteproc instance */ > > + rproc_ptr = devm_rproc_alloc(dev, dev_name(dev), &zynqmp_r5_rproc_ops, > > + NULL, sizeof(struct zynqmp_r5_rproc)); > > + if (!rproc_ptr) { > > + ret = -ENOMEM; > > + goto error; > > + } > > + > > + rproc_ptr->auto_boot = false; > > + z_rproc = rproc_ptr->priv; > > + z_rproc->rproc = rproc_ptr; > > + r5_node = z_rproc->rproc->dev.parent->of_node; > > + > > + /* Set up DMA mask */ > > + ret = dma_set_coherent_mask(dev, DMA_BIT_MASK(32)); > > + if (ret) > > + goto error; > > + > > + /* Get R5 power domain node */ > > + ret = of_property_read_u32(node, "power-domain", &z_rproc->pnode_id); > > + if (ret) > > + goto error; > > + > > + ret = r5_set_mode(z_rproc, rpu_mode); > > + if (ret) > > + goto error; > > + > > + if (of_property_read_bool(node, "mboxes")) { > > + ret = zynqmp_r5_setup_mbox(z_rproc, node); > > + if (ret) > > + goto error; > > + } > > + > > + /* go through TCM banks for r5 node */ > > + num_banks = of_count_phandle_with_args(r5_node, BANK_LIST_PROP, NULL); > > + if (num_banks <= 0) { > > + dev_err(dev, "need to specify TCM banks\n"); > > + ret = -EINVAL; > > + goto error; > > + } > > + > > + if (num_banks > NUM_SRAMS) { > > + dev_err(dev, "max number of srams is %d. given: %d \r\n", > > + NUM_SRAMS, num_banks); > > + ret = -EINVAL; > > + goto error; > > + } > > + > > + /* construct collection of srams used by the current R5 core */ > > + for (; num_banks; num_banks--) { > > + struct resource rsc; > > + struct device_node *dt_node; > > + resource_size_t size; > > + int i; > > + > > + dt_node = of_parse_phandle(r5_node, BANK_LIST_PROP, i); > > Variable @i is not initialised but it is used as an index to retrieve a handle > to the sram banks. That code _should_ have failed frequently or at least have > yielded abnormal results often enough to be noticed. Why wasn't it the case? > > I will stop here for the moment. > > [Ben] > Yes this should be initialized. The reason this got through is that as i defaults to 0 and the 0th bank housed the required data. the case where SRAMS that can be written to, 0xFFE20000 in this case of split mode and on R5-0, was not caught. > Here @i is a variable allocated on the stack and as such it is garanteed to be garbage on initialisation - it will do anything but default to 0. > Instead of i I will use > > sram_node = of_parse_phandle(node, BANK_LIST_PROP, > num_banks - 1); Do you have to start with the last bank? If memory serves me well it isn't the case in the previous revisions. Why not go back to the implementation you had in V25? 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=-4.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=no 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 BFAFFC433DB for ; Mon, 15 Mar 2021 17:42:55 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 A9F4D64E31 for ; Mon, 15 Mar 2021 17:42:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A9F4D64E31 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=desiato.20200630; 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=GuriCF3MuMsKXV1mHVez78aWQtCb6H+Ed66pnO5O5CM=; b=AaCqjXfQf9yi0OUbqHgmIPoTA 3Yp5db5NZ0yQh0vw4Jlbn3uonNvXgL4hvs7b8AvFUtwdrjxzoPDDfCVmL5uKaVpiG34X3QMBNd0SC 0w5Ui7BNNCg2yqBBVvaWDGzUa2NQ83RSKZYvkk0JDQQzi49cumtUS2Wa+eA5xrxmlQU7HN06tu65n 3FQ29ysoiNfhSAzpABGd6vjCcqoYIOEy1qyoOJ4YLVhi4Ouym+Z1Y389pjmw4ePTqPOSolCuzX7x1 kc7P42h8KX+SWLr6UNlLMGgu8Pn+RRZp2JS2nx/+ln0JT/abOxkK24rBhCGKy2VbvKkMXA0TmcIgQ Qeu2y1WQA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lLrD7-00GYcm-MC; Mon, 15 Mar 2021 17:41:02 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lLr9l-00GXQG-NI for linux-arm-kernel@lists.infradead.org; Mon, 15 Mar 2021 17:37:34 +0000 Received: by mail-pj1-x102b.google.com with SMTP id lr10-20020a17090b4b8ab02900dd61b95c5eso12543204pjb.4 for ; Mon, 15 Mar 2021 10:37:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=6tzWJFrnQsA9R0ltOnjmT6ONH7vUsFiXRrsDNZLyLeE=; b=geG7dA7E2zlS9xUqBaDEUdwx5UsGP1Xgs1ukLka9/F1hO2wL7a+sQtugn8N1aPmriD CR+M8zTuQqRHFM+qCDl6XyAnsg6ktSxgCsk3EIQbXTC2V2QR/IfLdA9bAS6SlWYaoUDk Xp1T65v1iPHG+f73m/odoiqRisah7Awbq4UHNYjDywCC/2usi9lq9kxwnslKwLMkIOtn 1kDjtCs8jQ92/vF6qtNSvVxES7ZcYguzt0EnDJ0InuSzjl3pOc+7I7JKHg1cROahtTRG dvaYxM/HHN9PGujCM2A/YYY2t8AIRjROikkaqWubv9azkfGEMjsAASX1dhT3100eTeCU bYvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=6tzWJFrnQsA9R0ltOnjmT6ONH7vUsFiXRrsDNZLyLeE=; b=E/cNNiw0cHkvj2DLtIbmcDwyCg8B19ilcPbPdPnUIboGs7Yw21TNMGK7CENwnFvAZw WuopI3MKxW8pqdQ9hYF+dRDXty8F4z9sKVXPxWv6OqC+9i7hIC8PJfRZAnfyd0Gzdm3N +9tTgPGjVAbKXl6KHki0t3Sym/3xV+TgQBV4BxajxPhC3vbJwDkn+1RXiUa8c9XMwU+M HtZRMfKt37hNY6A1bx2tf9a3ehojN4AIVje9327kt0+njFS2AzfdaCMgqpEyAgOd7wlD KeKip2cOnj0TcatJsYwS4mj09Ao7+AjEbPqLDO2lNft44BPWHL+j5AW416z9cXHEC2YA ohdw== X-Gm-Message-State: AOAM531icG+gpdumuQiQhmLY9GXUBGVPodlI395wR4/CpZCy4qSrJAI+ kZWU8bMlJcrbWEqSsSQINlQrAg== X-Google-Smtp-Source: ABdhPJzjBVUfU6SxcPXB+wS9Ia8KPxsgV7MB4yaLdCDuVvNy+1MQJ3vYLTLfMobUudVVgJAtxBFz/w== X-Received: by 2002:a17:90a:8914:: with SMTP id u20mr209590pjn.90.1615829846821; Mon, 15 Mar 2021 10:37:26 -0700 (PDT) Received: from xps15 (S0106889e681aac74.cg.shawcable.net. [68.147.0.187]) by smtp.gmail.com with ESMTPSA id a20sm14934585pfl.97.2021.03.15.10.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Mar 2021 10:37:26 -0700 (PDT) Date: Mon, 15 Mar 2021 11:37:24 -0600 From: Mathieu Poirier To: Ben Levinsky Cc: "devicetree@vger.kernel.org" , "linux-remoteproc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , Michal Simek , "Ed T. Mooring" Subject: Re: [PATCH v26 5/5] remoteproc: Add initial zynqmp R5 remoteproc driver Message-ID: <20210315173724.GB1342614@xps15> References: <20210223154447.13247-1-ben.levinsky@xilinx.com> <20210223154447.13247-6-ben.levinsky@xilinx.com> <20210309165330.GA4013290@xps15> <38527B70-FE3A-4D05-8C2E-6A95A3D4ADF3@xilinx.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <38527B70-FE3A-4D05-8C2E-6A95A3D4ADF3@xilinx.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210315_173729_999435_81C2F38D X-CRM114-Status: GOOD ( 27.89 ) 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 T24gVGh1LCBNYXIgMTEsIDIwMjEgYXQgMTE6NDk6MTNQTSArMDAwMCwgQmVuIExldmluc2t5IHdy b3RlOgo+IEhpIE1hdGhpZXUKPiAKPiDvu78tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZy b206IE1hdGhpZXUgUG9pcmllciA8bWF0aGlldS5wb2lyaWVyQGxpbmFyby5vcmc+Cj4gRGF0ZTog VHVlc2RheSwgTWFyY2ggOSwgMjAyMSBhdCA4OjUzIEFNCj4gVG86IEJlbiBMZXZpbnNreSA8QkxF VklOU0tAeGlsaW54LmNvbT4KPiBDYzogImRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnIiA8ZGV2 aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc+LCAibGludXgtcmVtb3RlcHJvY0B2Z2VyLmtlcm5lbC5v cmciIDxsaW51eC1yZW1vdGVwcm9jQHZnZXIua2VybmVsLm9yZz4sICJsaW51eC1rZXJuZWxAdmdl ci5rZXJuZWwub3JnIiA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4sICJsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmciIDxsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmc+LCBNaWNoYWwgU2ltZWsgPG1pY2hhbHNAeGlsaW54LmNvbT4KPiBTdWJqZWN0OiBS ZTogW1BBVENIIHYyNiA1LzVdIHJlbW90ZXByb2M6IEFkZCBpbml0aWFsIHp5bnFtcCBSNSByZW1v dGVwcm9jIGRyaXZlcgo+IAo+ICAgICBbLi4uXQo+IAo+ICAgICA+ICsKPiAgICAgPiArLyoqCj4g ICAgID4gKyAqIHp5bnFtcF9yNV9wcm9iZSAtIFByb2JlcyBaeW5xTVAgUjUgcHJvY2Vzc29yIGRl dmljZSBub2RlCj4gICAgID4gKyAqCQkgICAgICAgdGhpcyBpcyBjYWxsZWQgZm9yIGVhY2ggaW5k aXZpZHVhbCBSNSBjb3JlIHRvCj4gICAgID4gKyAqCQkgICAgICAgc2V0IHVwIG1haWxib3gsIFhp bGlueCBwbGF0Zm9ybSBtYW5hZ2VyIHVuaXF1ZSBJRCwKPiAgICAgPiArICoJCSAgICAgICBhZGQg dG8gcnByb2MgY29yZQo+ICAgICA+ICsgKgo+ICAgICA+ICsgKiBAcGRldjogZG9tYWluIHBsYXRm b3JtIGRldmljZSBmb3IgY3VycmVudCBSNSBjb3JlCj4gICAgID4gKyAqIEBub2RlOiBwb2ludGVy IG9mIHRoZSBkZXZpY2Ugbm9kZSBmb3IgY3VycmVudCBSNSBjb3JlCj4gICAgID4gKyAqIEBycHVf bW9kZTogbW9kZSB0byBjb25maWd1cmUgUlBVLCBzcGxpdCBvciBsb2Nrc3RlcAo+ICAgICA+ICsg Kgo+ICAgICA+ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBm YWlsdXJlLgo+ICAgICA+ICsgKi8KPiAgICAgPiArc3RhdGljIHN0cnVjdCB6eW5xbXBfcjVfcnBy b2MgKnp5bnFtcF9yNV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ICAgICA+ ICsJCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4gICAgID4gKwkJCQkJICAg ICAgIGVudW0gcnB1X29wZXJfbW9kZSBycHVfbW9kZSkKPiAgICAgPiArewo+ICAgICA+ICsJaW50 IHJldCwgbnVtX2JhbmtzOwo+ICAgICA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl djsKPiAgICAgPiArCXN0cnVjdCBycHJvYyAqcnByb2NfcHRyOwo+ICAgICA+ICsJc3RydWN0IHp5 bnFtcF9yNV9ycHJvYyAqel9ycHJvYzsKPiAgICAgPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcjVf bm9kZTsKPiAgICAgPiArCj4gICAgID4gKwkvKiBBbGxvY2F0ZSByZW1vdGVwcm9jIGluc3RhbmNl ICovCj4gICAgID4gKwlycHJvY19wdHIgPSBkZXZtX3Jwcm9jX2FsbG9jKGRldiwgZGV2X25hbWUo ZGV2KSwgJnp5bnFtcF9yNV9ycHJvY19vcHMsCj4gICAgID4gKwkJCQkgICAgIE5VTEwsIHNpemVv ZihzdHJ1Y3QgenlucW1wX3I1X3Jwcm9jKSk7Cj4gICAgID4gKwlpZiAoIXJwcm9jX3B0cikgewo+ ICAgICA+ICsJCXJldCA9IC1FTk9NRU07Cj4gICAgID4gKwkJZ290byBlcnJvcjsKPiAgICAgPiAr CX0KPiAgICAgPiArCj4gICAgID4gKwlycHJvY19wdHItPmF1dG9fYm9vdCA9IGZhbHNlOwo+ICAg ICA+ICsJel9ycHJvYyA9IHJwcm9jX3B0ci0+cHJpdjsKPiAgICAgPiArCXpfcnByb2MtPnJwcm9j ID0gcnByb2NfcHRyOwo+ICAgICA+ICsJcjVfbm9kZSA9IHpfcnByb2MtPnJwcm9jLT5kZXYucGFy ZW50LT5vZl9ub2RlOwo+ICAgICA+ICsKPiAgICAgPiArCS8qIFNldCB1cCBETUEgbWFzayAqLwo+ ICAgICA+ICsJcmV0ID0gZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMy KSk7Cj4gICAgID4gKwlpZiAocmV0KQo+ICAgICA+ICsJCWdvdG8gZXJyb3I7Cj4gICAgID4gKwo+ ICAgICA+ICsJLyogR2V0IFI1IHBvd2VyIGRvbWFpbiBub2RlICovCj4gICAgID4gKwlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicG93ZXItZG9tYWluIiwgJnpfcnByb2MtPnBub2Rl X2lkKTsKPiAgICAgPiArCWlmIChyZXQpCj4gICAgID4gKwkJZ290byBlcnJvcjsKPiAgICAgPiAr Cj4gICAgID4gKwlyZXQgPSByNV9zZXRfbW9kZSh6X3Jwcm9jLCBycHVfbW9kZSk7Cj4gICAgID4g KwlpZiAocmV0KQo+ICAgICA+ICsJCWdvdG8gZXJyb3I7Cj4gICAgID4gKwo+ICAgICA+ICsJaWYg KG9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAibWJveGVzIikpIHsKPiAgICAgPiArCQlyZXQg PSB6eW5xbXBfcjVfc2V0dXBfbWJveCh6X3Jwcm9jLCBub2RlKTsKPiAgICAgPiArCQlpZiAocmV0 KQo+ICAgICA+ICsJCQlnb3RvIGVycm9yOwo+ICAgICA+ICsJfQo+ICAgICA+ICsKPiAgICAgPiAr CS8qIGdvIHRocm91Z2ggVENNIGJhbmtzIGZvciByNSBub2RlICovCj4gICAgID4gKwludW1fYmFu a3MgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhyNV9ub2RlLCBCQU5LX0xJU1RfUFJPUCwg TlVMTCk7Cj4gICAgID4gKwlpZiAobnVtX2JhbmtzIDw9IDApIHsKPiAgICAgPiArCQlkZXZfZXJy KGRldiwgIm5lZWQgdG8gc3BlY2lmeSBUQ00gYmFua3NcbiIpOwo+ICAgICA+ICsJCXJldCA9IC1F SU5WQUw7Cj4gICAgID4gKwkJZ290byBlcnJvcjsKPiAgICAgPiArCX0KPiAgICAgPiArCj4gICAg ID4gKwlpZiAobnVtX2JhbmtzID4gTlVNX1NSQU1TKSB7Cj4gICAgID4gKwkJZGV2X2VycihkZXYs ICJtYXggbnVtYmVyIG9mIHNyYW1zIGlzICVkLiBnaXZlbjogJWQgXHJcbiIsCj4gICAgID4gKwkJ CU5VTV9TUkFNUywgbnVtX2JhbmtzKTsKPiAgICAgPiArCQlyZXQgPSAtRUlOVkFMOwo+ICAgICA+ ICsJCWdvdG8gZXJyb3I7Cj4gICAgID4gKwl9Cj4gICAgID4gKwo+ICAgICA+ICsJLyogY29uc3Ry dWN0IGNvbGxlY3Rpb24gb2Ygc3JhbXMgdXNlZCBieSB0aGUgY3VycmVudCBSNSBjb3JlICovCj4g ICAgID4gKwlmb3IgKDsgbnVtX2JhbmtzOyBudW1fYmFua3MtLSkgewo+ICAgICA+ICsJCXN0cnVj dCByZXNvdXJjZSByc2M7Cj4gICAgID4gKwkJc3RydWN0IGRldmljZV9ub2RlICpkdF9ub2RlOwo+ ICAgICA+ICsJCXJlc291cmNlX3NpemVfdCBzaXplOwo+ICAgICA+ICsJCWludCBpOwo+ICAgICA+ ICsKPiAgICAgPiArCQlkdF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShyNV9ub2RlLCBCQU5LX0xJ U1RfUFJPUCwgaSk7Cj4gCj4gICAgIFZhcmlhYmxlIEBpIGlzIG5vdCBpbml0aWFsaXNlZCBidXQg aXQgaXMgdXNlZCBhcyBhbiBpbmRleCB0byByZXRyaWV2ZSBhIGhhbmRsZQo+ICAgICB0byB0aGUg c3JhbSBiYW5rcy4gIFRoYXQgY29kZSBfc2hvdWxkXyBoYXZlIGZhaWxlZCBmcmVxdWVudGx5IG9y IGF0IGxlYXN0IGhhdmUKPiAgICAgeWllbGRlZCBhYm5vcm1hbCByZXN1bHRzIG9mdGVuIGVub3Vn aCB0byBiZSBub3RpY2VkLiAgV2h5IHdhc24ndCBpdCB0aGUgY2FzZT8KPiAKPiAgICAgSSB3aWxs IHN0b3AgaGVyZSBmb3IgdGhlIG1vbWVudC4KPiAKPiBbQmVuXQo+IFllcyB0aGlzIHNob3VsZCBi ZSBpbml0aWFsaXplZC4gVGhlIHJlYXNvbiB0aGlzIGdvdCB0aHJvdWdoIGlzIHRoYXQgYXMgaSBk ZWZhdWx0cyB0byAwIGFuZCB0aGUgMHRoIGJhbmsgaG91c2VkIHRoZSByZXF1aXJlZCBkYXRhLiB0 aGUgY2FzZSB3aGVyZSBTUkFNUyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvLCAweEZGRTIwMDAwIGlu IHRoaXMgY2FzZSBvZiBzcGxpdCBtb2RlIGFuZCBvbiBSNS0wLCB3YXMgbm90IGNhdWdodC4KPiAK CkhlcmUgQGkgaXMgYSB2YXJpYWJsZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBhcyBzdWNo IGl0IGlzIGdhcmFudGVlZCB0byBiZQpnYXJiYWdlIG9uIGluaXRpYWxpc2F0aW9uIC0gaXQgd2ls bCBkbyBhbnl0aGluZyBidXQgZGVmYXVsdCB0byAwLgoKCj4gSW5zdGVhZCBvZiBpIEkgd2lsbCB1 c2UgCj4gCj4gICAgICAgICAgICAgICAgIHNyYW1fbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9k ZSwgQkFOS19MSVNUX1BST1AsICAgICAgICAgICAgICAKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBudW1fYmFua3MgLSAxKTsgCgpEbyB5b3UgaGF2ZSB0byBz dGFydCB3aXRoIHRoZSBsYXN0IGJhbms/ICBJZiBtZW1vcnkgc2VydmVzIG1lIHdlbGwgaXQgaXNu J3QgdGhlCmNhc2UgaW4gdGhlIHByZXZpb3VzIHJldmlzaW9ucy4gIFdoeSBub3QgZ28gYmFjayB0 byB0aGUgaW1wbGVtZW50YXRpb24geW91IGhhZAppbiBWMjU/ICAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==