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 98B29C77B7D for ; Mon, 15 May 2023 17:08:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type: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=2nHtEWxnGpGcZQSGGCC9iqpPMY8cRtXXTyviVXLj7sE=; b=Mh2npj4RPULfVCFPc3eDg5PzOw kKoGwHNBpP0jtrPAxMiz4hp5X27yw3jARrSAzkJ0jcrOxdvM9joqFtJAafijNq+mHTlpGv0uQ1I+w EsB0A4kJRn24Lc873OhIC2bJqru8+CYhCiJdcgZaIpjbS3f/QmFQ7VOCOVhEM+E0YEcv2i7JiyQik 5omLKUXT/+v4keC3FWa2KR6ZpoiVrYNlGCK7z209xXUcYPtx9KAIsYqPSfvjYqsAqUGqd3BRhWKoQ OqChJZPOMA9/Yq7z2vP9vtA/Gvnoxh2K7RgEFuW6wDyp61rahGjIcTZukPz1ABsNedz8uQsRPlUXg dn6czrzQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pybg0-002sPf-1h; Mon, 15 May 2023 17:08:00 +0000 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pybfx-002sOR-0O for linux-mediatek@lists.infradead.org; Mon, 15 May 2023 17:07:59 +0000 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-64388cf3263so9240169b3a.3 for ; Mon, 15 May 2023 10:07:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1684170476; x=1686762476; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=2nHtEWxnGpGcZQSGGCC9iqpPMY8cRtXXTyviVXLj7sE=; b=RfNBq7TDdB2IKmzexzeaLngBcSjUiBcZ76IWWMJjgqNJUzMd+r6cCkMiwv37HGifZ1 oUgOU3QJmdlwWc4gCYiUibfRVz/LIKi2erGbGCg0J9x/Am6T/uxzV4hNQJAb9I2pLr4n x7ERVV7Mwoedg3fxwt/WADMRh/cJMOIRIIWa8P0cFY0z4bVpqPONf2iazLAAUT/pNaO8 W3cLW8JQPhNRlKzm9JdZlHXzKVG9zlEcuxgS53YlvVkLs3VzTn3CfqPHe0w09VBrRUTx cLr++MTEfSCczuMcgvsvTdPa/Pg/vkKTaXFguNsYbaDZ24W+jjA2W37GpSo6TSjXptd+ VKmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684170476; x=1686762476; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2nHtEWxnGpGcZQSGGCC9iqpPMY8cRtXXTyviVXLj7sE=; b=Q4boOfTVhPHTXwDx2spBWff0jTI3CaXwkjVq70WH+dMvSphHtTH0OSaltb3FgZGiVq xposNew+DP2J2vcntV1Nib3usE9uuU6SSoULcprylbaSkMlypvzwhfRqKUdu2lX8PeFO rNJZJzkQqr1iPhOwX9AJjRYV1ACLyeuTJ5CcOsH+mwc1AJHPuHwqIBj1FCeSYXkWMd7R UKECcpp6ED9j5oPcZhYh8rnkZweSU4OtfD50vRuRD/x23QJbTaN/QikWG0r0d/oK48C5 EaGNzLvLm4djCt2nD2fRfQdg2yF0kP7VOvkeVmrhCiMeD+GOjzfkyKdOXoQplaTKGbmw u2cg== X-Gm-Message-State: AC+VfDxw9aW2V9MIRHWAhKRojwfu33z26MinT4coIAABvONLp5zH1OWu lJFnbx6tW7hD6gsHrzEWGazrZA== X-Google-Smtp-Source: ACHHUZ52HZolmtjdAn8T2k4UpZ3HNolbARPshrUQ24xkpbnjgc72ibaTbyTOGYAaZX0FatvS+jMmVg== X-Received: by 2002:a05:6a20:12d0:b0:102:f744:a708 with SMTP id v16-20020a056a2012d000b00102f744a708mr24322492pzg.35.1684170475724; Mon, 15 May 2023 10:07:55 -0700 (PDT) Received: from p14s ([2604:3d09:148c:c800:d401:af78:6aa0:cf61]) by smtp.gmail.com with ESMTPSA id h5-20020a62b405000000b0063f33e216dasm12365831pfn.96.2023.05.15.10.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 May 2023 10:07:55 -0700 (PDT) Date: Mon, 15 May 2023 11:07:52 -0600 From: Mathieu Poirier To: TingHan Shen =?utf-8?B?KOayiOW7t+e/sCk=?= Cc: "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "linux-remoteproc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "conor+dt@kernel.org" , Project_Global_Chrome_Upstream_Group , "linux-arm-kernel@lists.infradead.org" , "krzysztof.kozlowski+dt@linaro.org" , "matthias.bgg@gmail.com" , "andersson@kernel.org" , "angelogioacchino.delregno@collabora.com" Subject: Re: [PATCH v11 06/11] remoteproc: mediatek: Probe multi-core SCP Message-ID: References: <20230510063749.5127-1-tinghan.shen@mediatek.com> <20230510063749.5127-7-tinghan.shen@mediatek.com> <968894ff6a9ed9cfb71cd28eb3552047e4d298a6.camel@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <968894ff6a9ed9cfb71cd28eb3552047e4d298a6.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230515_100757_164198_39DA3E1C X-CRM114-Status: GOOD ( 46.50 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Mon, May 15, 2023 at 12:31:04PM +0000, TingHan Shen (沈廷翰) wrote: > Hi Mathieu, > > On Fri, 2023-05-12 at 11:56 -0600, Mathieu Poirier wrote: > > External email : Please do not click links or open attachments until you have verified the sender or the content. > > > > > > On Wed, May 10, 2023 at 02:37:44PM +0800, Tinghan Shen wrote: > > > The difference of single-core SCP and multi-core SCP device tree is > > > the presence of child device nodes described SCP cores. The SCP > > > driver populates the platform device and checks the child nodes > > > to identify whether it's a single-core SCP or a multi-core SCP. > > > > > > Add the remoteproc instances of multi-core SCP to the SCP cluster list. > > > When the SCP driver is removed, it cleanup resources by walking > > > through the cluster list. > > > > > > Signed-off-by: Tinghan Shen > > > --- > > > drivers/remoteproc/mtk_scp.c | 135 ++++++++++++++++++++++++++++++----- > > > 1 file changed, 117 insertions(+), 18 deletions(-) > > > > > > diff --git a/drivers/remoteproc/mtk_scp.c b/drivers/remoteproc/mtk_scp.c > > > index ff73c6dd9637..87215a0e145e 100644 > > > --- a/drivers/remoteproc/mtk_scp.c > > > +++ b/drivers/remoteproc/mtk_scp.c > > > @@ -864,7 +864,8 @@ static void scp_remove_rpmsg_subdev(struct mtk_scp *scp) > > > } > > > > > > static struct mtk_scp *scp_rproc_init(struct platform_device *pdev, > > > - struct mtk_scp_of_cluster *scp_cluster) > > > + struct mtk_scp_of_cluster *scp_cluster, > > > + const struct mtk_scp_of_data *of_data) > > > { > > > struct device *dev = &pdev->dev; > > > struct device_node *np = dev->of_node; > > > @@ -887,7 +888,7 @@ static struct mtk_scp *scp_rproc_init(struct platform_device *pdev, > > > scp = rproc->priv; > > > scp->rproc = rproc; > > > scp->dev = dev; > > > - scp->data = of_device_get_match_data(dev); > > > + scp->data = of_data; > > > platform_device_add_data(pdev, &scp, sizeof(scp)); > > > > > > scp->reg_base = scp_cluster->reg_base; > > > @@ -938,10 +939,6 @@ static struct mtk_scp *scp_rproc_init(struct platform_device *pdev, > > > goto remove_subdev; > > > } > > > > > > - ret = rproc_add(rproc); > > > - if (ret) > > > - goto remove_subdev; > > > - > > > > This should have been done in the previous patch. > > Ok. > > > > > > return scp; > > > > > > remove_subdev: > > > @@ -956,19 +953,116 @@ static struct mtk_scp *scp_rproc_init(struct platform_device *pdev, > > > return ERR_PTR(ret); > > > } > > > > > > +static void scp_rproc_free(struct mtk_scp *scp) > > > +{ > > > + int i; > > > + > > > + scp_remove_rpmsg_subdev(scp); > > > + scp_ipi_unregister(scp, SCP_IPI_INIT); > > > + scp_unmap_memory_region(scp); > > > + for (i = 0; i < SCP_IPI_MAX; i++) > > > + mutex_destroy(&scp->ipi_desc[i].lock); > > > + mutex_destroy(&scp->send_lock); > > > +} > > > + > > > +static int scp_is_single_core(struct platform_device *pdev) > > > +{ > > > + struct device *dev = &pdev->dev; > > > + struct device_node *np = dev_of_node(dev); > > > + struct device_node *child; > > > + > > > + child = of_get_next_available_child(np, NULL); > > > + if (!child) > > > + return dev_err_probe(dev, -ENODEV, "No child node\n"); > > > + > > > + of_node_put(child); > > > + return of_node_name_eq(child, "cros-ec-rpmsg"); > > > +} > > > + > > > static int scp_cluster_init(struct platform_device *pdev) > > > { > > > - struct mtk_scp *scp; > > > + struct mtk_scp *scp, *temp; > > > struct mtk_scp_of_cluster *scp_cluster = platform_get_drvdata(pdev); > > > struct list_head *cluster = &scp_cluster->mtk_scp_cluster; > > > > > > - scp = scp_rproc_init(pdev, scp_cluster); > > > - if (IS_ERR(scp)) > > > - return PTR_ERR(scp); > > > + struct device *dev = &pdev->dev; > > > + struct device_node *np = dev_of_node(dev); > > > + struct platform_device *cpdev; > > > + struct device_node *child; > > > + const struct mtk_scp_of_data **cluster_of_data; > > > + int core_id = 0; > > > + int ret; > > > + > > > + ret = scp_is_single_core(pdev); > > > + if (ret < 0) > > > + return ret; > > > + > > > + if (ret) { > > > + dev_dbg(dev, "single-core scp\n"); > > > + > > > + /* When using the SCP node phandle on exported SCP APIs, the drvdata > > > + * is expected to be the mtk_scp object, and as a result, it is intended > > > + * to be overwritten for single-core SCP usage. > > > + */ > > > > Is this comment still relevant? > > No, I'll remove it. > > > > > > + scp = scp_rproc_init(pdev, scp_cluster, of_device_get_match_data(dev)); > > > + if (IS_ERR(scp)) > > > + return PTR_ERR(scp); > > > + > > > + list_add_tail(&scp->elem, cluster); > > > > This is getting messy. Please add two new functions, i.e scp_add_single_core() > > and scp_add_multi_core(). > > Ok. > > > > > > + } else { > > > + dev_dbg(dev, "multi-core scp\n"); > > > + > > > + cluster_of_data = (const struct mtk_scp_of_data **)of_device_get_match_data(dev); > > > + > > > + for_each_available_child_of_node(np, child) { > > > + if (!cluster_of_data[core_id]) { > > > + ret = -EINVAL; > > > + dev_err(dev, "Not support core %d\n", core_id); > > > + of_node_put(child); > > > + goto init_fail; > > > + } > > > + > > > + cpdev = of_find_device_by_node(child); > > > + if (!cpdev) { > > > + ret = -ENODEV; > > > + dev_err(dev, "Not found platform device for core %d\n", core_id); > > > + of_node_put(child); > > > + goto init_fail; > > > + } > > > + > > > + scp = scp_rproc_init(cpdev, scp_cluster, cluster_of_data[core_id]); > > > + if (IS_ERR(scp)) { > > > + dev_err(dev, "Failed to initialize core %d rproc\n", core_id); > > > + put_device(&cpdev->dev); > > > + of_node_put(child); > > > + goto init_fail; > > > + } > > > + list_add_tail(&scp->elem, cluster); > > > + put_device(&cpdev->dev); > > > + > > > + core_id++; > > > + } > > > + } > > > > > > - list_add_tail(&scp->elem, cluster); > > > + list_for_each_entry_safe_reverse(scp, temp, cluster, elem) { > > > + ret = rproc_add(scp->rproc); > > > > Call rproc_add() in the for_each_available_child_of_node() loop above. That way > > it if fails you can call scp_rproc_free() right away and jump to init_fail to > > deal with the other cores on the list. > > Ok, I'll update it in next version. > > > > > > + if (ret) > > > + goto add_fail; > > > + } > > > > > > return 0; > > > + > > > +add_fail: > > > + list_for_each_entry_continue(scp, cluster, elem) { > > > + rproc_del(scp->rproc); > > > + } > > > +init_fail: > > > + list_for_each_entry_safe_reverse(scp, temp, cluster, elem) { > > > + list_del(&scp->elem); > > > + scp_rproc_free(scp); > > > + } > > > + > > > > There are a serious problems with the code in both labels above. I will let you > > think about that and I will stop here for this revision. > > > > Mathieu > > May be the problem is the possible null access of *scp? > Or, the resources bound with cpdev should be released at here? The first problem is related to list processing. Function list_for_each_entry_safe_reverse() starts at the end of the list and stops if an error is encountered. From there we go back the other way with list_for_each_entry_continue() and then reverse again for list_for_each_entry_safe_reverse(). This back and forth is error prone and very hard to maintain. The second problem is with rproc_del()... Does it need to be there? > > > > > > > + return ret; > > > } > > > > > > static int scp_probe(struct platform_device *pdev) > > > @@ -1005,6 +1099,10 @@ static int scp_probe(struct platform_device *pdev) > > > INIT_LIST_HEAD(&scp_cluster->mtk_scp_cluster); > > > platform_set_drvdata(pdev, scp_cluster); > > > > > > + ret = devm_of_platform_populate(dev); > > > + if (ret) > > > + return dev_err_probe(dev, ret, "Failed to populate platform devices\n"); > > > + > > > ret = scp_cluster_init(pdev); > > > if (ret) > > > return ret; > > > @@ -1016,17 +1114,11 @@ static int scp_remove(struct platform_device *pdev) > > > { > > > struct mtk_scp_of_cluster *scp_cluster = platform_get_drvdata(pdev); > > > struct mtk_scp *scp, *temp; > > > - int i; > > > > > > list_for_each_entry_safe_reverse(scp, temp, &scp_cluster->mtk_scp_cluster, elem) { > > > list_del(&scp->elem); > > > rproc_del(scp->rproc); > > > - scp_remove_rpmsg_subdev(scp); > > > - scp_ipi_unregister(scp, SCP_IPI_INIT); > > > - scp_unmap_memory_region(scp); > > > - for (i = 0; i < SCP_IPI_MAX; i++) > > > - mutex_destroy(&scp->ipi_desc[i].lock); > > > - mutex_destroy(&scp->send_lock); > > > + scp_rproc_free(scp); > > > } > > > > > > return 0; > > > @@ -1106,12 +1198,19 @@ static const struct mtk_scp_of_data mt8195_of_data_c1 = { > > > .host_to_scp_int_bit = MT8195_CORE1_HOST_IPC_INT_BIT, > > > }; > > > > > > +static const struct mtk_scp_of_data *mt8195_of_data_cores[] = { > > > + &mt8195_of_data, > > > + &mt8195_of_data_c1, > > > + NULL > > > +}; > > > + > > > static const struct of_device_id mtk_scp_of_match[] = { > > > { .compatible = "mediatek,mt8183-scp", .data = &mt8183_of_data }, > > > { .compatible = "mediatek,mt8186-scp", .data = &mt8186_of_data }, > > > { .compatible = "mediatek,mt8188-scp", .data = &mt8188_of_data }, > > > { .compatible = "mediatek,mt8192-scp", .data = &mt8192_of_data }, > > > { .compatible = "mediatek,mt8195-scp", .data = &mt8195_of_data }, > > > + { .compatible = "mediatek,mt8195-scp-dual", .data = &mt8195_of_data_cores }, > > > {}, > > > }; > > > MODULE_DEVICE_TABLE(of, mtk_scp_of_match); > > > -- > > > 2.18.0 > > > > > -- > Best regards, > TingHan 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 2BD50C7EE26 for ; Mon, 15 May 2023 17:08:28 +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=AjqpCK7USP+NqKtjtIv2bRzhcX9ay1gKXlriC+SD/pM=; b=uCu7AZitWW5DL1 leXkHKE39uE2Es/aQc0Ty3KyigH0X9Dwzd3Z6XLA0EzZeXCR0ZsjvE0X+ilvr2lYLo7INqz7zUo4t 5Q7G5X2KSAsWGTfK5KU5lLogULPJuWB1EHtRyW1BibyvgPkmkPPdgv9UVf5dK1ziN+VXKyj9/jiTm nJJb7sUenHseAPC9wxa/29hj2tlbWgM1GBq3RRRWepqhZHv/EkYga5jM+LFiNrrx6hQwmiK0s8ONb xupIJIoDmaDZwMTiscBnaFj8kUVC2iIelAS00XcTbbTy9lx5bjJt1h7TDOU6yPZY8wWWJXu8avrzn QyzV7JwimR7zTGPWbNTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pybg4-002sQS-0F; Mon, 15 May 2023 17:08:04 +0000 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pybg0-002sOQ-2M for linux-arm-kernel@lists.infradead.org; Mon, 15 May 2023 17:08:02 +0000 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-643a6f993a7so8227918b3a.1 for ; Mon, 15 May 2023 10:07:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1684170476; x=1686762476; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=2nHtEWxnGpGcZQSGGCC9iqpPMY8cRtXXTyviVXLj7sE=; b=RfNBq7TDdB2IKmzexzeaLngBcSjUiBcZ76IWWMJjgqNJUzMd+r6cCkMiwv37HGifZ1 oUgOU3QJmdlwWc4gCYiUibfRVz/LIKi2erGbGCg0J9x/Am6T/uxzV4hNQJAb9I2pLr4n x7ERVV7Mwoedg3fxwt/WADMRh/cJMOIRIIWa8P0cFY0z4bVpqPONf2iazLAAUT/pNaO8 W3cLW8JQPhNRlKzm9JdZlHXzKVG9zlEcuxgS53YlvVkLs3VzTn3CfqPHe0w09VBrRUTx cLr++MTEfSCczuMcgvsvTdPa/Pg/vkKTaXFguNsYbaDZ24W+jjA2W37GpSo6TSjXptd+ VKmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684170476; x=1686762476; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2nHtEWxnGpGcZQSGGCC9iqpPMY8cRtXXTyviVXLj7sE=; b=OXCw5kHvSecWYISDJ1/76wRl3ddmy75X52JS5Y+X0lSotfhBOwc88K50VOuv3uGUfx LN5sbM/uBbggAVTQqNgNdZSp6EShjM5mk9zCtNn9hQ6XEG62ayTqnJEkwzzJA8bbzG/i 0P7HieoASzwl8pU4XLF5tIDUePxwz1xdCvo40juf6tFmmWqWfAZWOQRGyCEDvjOc+/xM UF+OYa1gj1KCDwBMPv8aVkh0y0rhjBcpEgijDhvkjUafzTtJ8JFjqAN+YxAHVe/mAaU5 M1aXxu+DZUZvLcJFob/bqDC3AqBagZyFH7FtAEYHMKswQGGDqDYeYx0hIQvoSfMSnoo5 jCAw== X-Gm-Message-State: AC+VfDxRymcjpvCep72OVevsmUPLKnzWdobHKbMquWWTV7Ak1PW0Wl9m 1L7uF3YHfiozEOHZxb1SEBAmGQ== X-Google-Smtp-Source: ACHHUZ52HZolmtjdAn8T2k4UpZ3HNolbARPshrUQ24xkpbnjgc72ibaTbyTOGYAaZX0FatvS+jMmVg== X-Received: by 2002:a05:6a20:12d0:b0:102:f744:a708 with SMTP id v16-20020a056a2012d000b00102f744a708mr24322492pzg.35.1684170475724; Mon, 15 May 2023 10:07:55 -0700 (PDT) Received: from p14s ([2604:3d09:148c:c800:d401:af78:6aa0:cf61]) by smtp.gmail.com with ESMTPSA id h5-20020a62b405000000b0063f33e216dasm12365831pfn.96.2023.05.15.10.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 May 2023 10:07:55 -0700 (PDT) Date: Mon, 15 May 2023 11:07:52 -0600 From: Mathieu Poirier To: TingHan Shen =?utf-8?B?KOayiOW7t+e/sCk=?= Cc: "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "linux-remoteproc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "conor+dt@kernel.org" , Project_Global_Chrome_Upstream_Group , "linux-arm-kernel@lists.infradead.org" , "krzysztof.kozlowski+dt@linaro.org" , "matthias.bgg@gmail.com" , "andersson@kernel.org" , "angelogioacchino.delregno@collabora.com" Subject: Re: [PATCH v11 06/11] remoteproc: mediatek: Probe multi-core SCP Message-ID: References: <20230510063749.5127-1-tinghan.shen@mediatek.com> <20230510063749.5127-7-tinghan.shen@mediatek.com> <968894ff6a9ed9cfb71cd28eb3552047e4d298a6.camel@mediatek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <968894ff6a9ed9cfb71cd28eb3552047e4d298a6.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230515_100800_773575_4B9B5377 X-CRM114-Status: GOOD ( 47.92 ) 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 T24gTW9uLCBNYXkgMTUsIDIwMjMgYXQgMTI6MzE6MDRQTSArMDAwMCwgVGluZ0hhbiBTaGVuICjm sojlu7fnv7ApIHdyb3RlOgo+IEhpIE1hdGhpZXUsCj4gCj4gT24gRnJpLCAyMDIzLTA1LTEyIGF0 IDExOjU2IC0wNjAwLCBNYXRoaWV1IFBvaXJpZXIgd3JvdGU6Cj4gPiBFeHRlcm5hbCBlbWFpbCA6 IFBsZWFzZSBkbyBub3QgY2xpY2sgbGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bnRpbCB5b3Ug aGF2ZSB2ZXJpZmllZCB0aGUgc2VuZGVyIG9yIHRoZSBjb250ZW50Lgo+ID4gCj4gPiAKPiA+IE9u IFdlZCwgTWF5IDEwLCAyMDIzIGF0IDAyOjM3OjQ0UE0gKzA4MDAsIFRpbmdoYW4gU2hlbiB3cm90 ZToKPiA+ID4gVGhlIGRpZmZlcmVuY2Ugb2Ygc2luZ2xlLWNvcmUgU0NQIGFuZCBtdWx0aS1jb3Jl IFNDUCBkZXZpY2UgdHJlZSBpcwo+ID4gPiB0aGUgcHJlc2VuY2Ugb2YgY2hpbGQgZGV2aWNlIG5v ZGVzIGRlc2NyaWJlZCBTQ1AgY29yZXMuIFRoZSBTQ1AKPiA+ID4gZHJpdmVyIHBvcHVsYXRlcyB0 aGUgcGxhdGZvcm0gZGV2aWNlIGFuZCBjaGVja3MgdGhlIGNoaWxkIG5vZGVzCj4gPiA+IHRvIGlk ZW50aWZ5IHdoZXRoZXIgaXQncyBhIHNpbmdsZS1jb3JlIFNDUCBvciBhIG11bHRpLWNvcmUgU0NQ Lgo+ID4gPiAKPiA+ID4gQWRkIHRoZSByZW1vdGVwcm9jIGluc3RhbmNlcyBvZiBtdWx0aS1jb3Jl IFNDUCB0byB0aGUgU0NQIGNsdXN0ZXIgbGlzdC4KPiA+ID4gV2hlbiB0aGUgU0NQIGRyaXZlciBp cyByZW1vdmVkLCBpdCBjbGVhbnVwIHJlc291cmNlcyBieSB3YWxraW5nCj4gPiA+IHRocm91Z2gg dGhlIGNsdXN0ZXIgbGlzdC4KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IFRpbmdoYW4gU2hl biA8dGluZ2hhbi5zaGVuQG1lZGlhdGVrLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBkcml2ZXJzL3Jl bW90ZXByb2MvbXRrX3NjcC5jIHwgMTM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMTE3IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9u cygtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVtb3RlcHJvYy9tdGtfc2Nw LmMgYi9kcml2ZXJzL3JlbW90ZXByb2MvbXRrX3NjcC5jCj4gPiA+IGluZGV4IGZmNzNjNmRkOTYz Ny4uODcyMTVhMGUxNDVlIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvbXRr X3NjcC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvcmVtb3RlcHJvYy9tdGtfc2NwLmMKPiA+ID4gQEAg LTg2NCw3ICs4NjQsOCBAQCBzdGF0aWMgdm9pZCBzY3BfcmVtb3ZlX3JwbXNnX3N1YmRldihzdHJ1 Y3QgbXRrX3NjcCAqc2NwKQo+ID4gPiAgfQo+ID4gPiAKPiA+ID4gIHN0YXRpYyBzdHJ1Y3QgbXRr X3NjcCAqc2NwX3Jwcm9jX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG10a19zY3Bfb2ZfY2x1 c3RlciAqc2NwX2NsdXN0ZXIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtdGtfc2NwX29mX2NsdXN0ZXIgKnNjcF9jbHVzdGVyLAo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbXRrX3NjcF9vZl9kYXRh ICpvZl9kYXRhKQo+ID4gPiAgewo+ID4gPiAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Owo+ID4gPiAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2Rl Owo+ID4gPiBAQCAtODg3LDcgKzg4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXRrX3NjcCAqc2NwX3Jw cm9jX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiA+ID4gICAgICAgc2NwID0g cnByb2MtPnByaXY7Cj4gPiA+ICAgICAgIHNjcC0+cnByb2MgPSBycHJvYzsKPiA+ID4gICAgICAg c2NwLT5kZXYgPSBkZXY7Cj4gPiA+IC0gICAgIHNjcC0+ZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0 Y2hfZGF0YShkZXYpOwo+ID4gPiArICAgICBzY3AtPmRhdGEgPSBvZl9kYXRhOwo+ID4gPiAgICAg ICBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnNjcCwgc2l6ZW9mKHNjcCkpOwo+ID4g PiAKPiA+ID4gICAgICAgc2NwLT5yZWdfYmFzZSA9IHNjcF9jbHVzdGVyLT5yZWdfYmFzZTsKPiA+ ID4gQEAgLTkzOCwxMCArOTM5LDYgQEAgc3RhdGljIHN0cnVjdCBtdGtfc2NwICpzY3BfcnByb2Nf aW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ID4gPiAgICAgICAgICAgICAgIGdv dG8gcmVtb3ZlX3N1YmRldjsKPiA+ID4gICAgICAgfQo+ID4gPiAKPiA+ID4gLSAgICAgcmV0ID0g cnByb2NfYWRkKHJwcm9jKTsKPiA+ID4gLSAgICAgaWYgKHJldCkKPiA+ID4gLSAgICAgICAgICAg ICBnb3RvIHJlbW92ZV9zdWJkZXY7Cj4gPiA+IC0KPiA+IAo+ID4gVGhpcyBzaG91bGQgaGF2ZSBi ZWVuIGRvbmUgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgo+IAo+IE9rLgo+IAo+ID4gCj4gPiA+ICAg ICAgIHJldHVybiBzY3A7Cj4gPiA+IAo+ID4gPiAgcmVtb3ZlX3N1YmRldjoKPiA+ID4gQEAgLTk1 NiwxOSArOTUzLDExNiBAQCBzdGF0aWMgc3RydWN0IG10a19zY3AgKnNjcF9ycHJvY19pbml0KHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gPiA+ICAgICAgIHJldHVybiBFUlJfUFRSKHJl dCk7Cj4gPiA+ICB9Cj4gPiA+IAo+ID4gPiArc3RhdGljIHZvaWQgc2NwX3Jwcm9jX2ZyZWUoc3Ry dWN0IG10a19zY3AgKnNjcCkKPiA+ID4gK3sKPiA+ID4gKyAgICAgaW50IGk7Cj4gPiA+ICsKPiA+ ID4gKyAgICAgc2NwX3JlbW92ZV9ycG1zZ19zdWJkZXYoc2NwKTsKPiA+ID4gKyAgICAgc2NwX2lw aV91bnJlZ2lzdGVyKHNjcCwgU0NQX0lQSV9JTklUKTsKPiA+ID4gKyAgICAgc2NwX3VubWFwX21l bW9yeV9yZWdpb24oc2NwKTsKPiA+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IFNDUF9JUElfTUFY OyBpKyspCj4gPiA+ICsgICAgICAgICAgICAgbXV0ZXhfZGVzdHJveSgmc2NwLT5pcGlfZGVzY1tp XS5sb2NrKTsKPiA+ID4gKyAgICAgbXV0ZXhfZGVzdHJveSgmc2NwLT5zZW5kX2xvY2spOwo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IHNjcF9pc19zaW5nbGVfY29yZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiArewo+ID4gPiArICAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Owo+ID4gPiArICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g ZGV2X29mX25vZGUoZGV2KTsKPiA+ID4gKyAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsK PiA+ID4gKwo+ID4gPiArICAgICBjaGlsZCA9IG9mX2dldF9uZXh0X2F2YWlsYWJsZV9jaGlsZChu cCwgTlVMTCk7Cj4gPiA+ICsgICAgIGlmICghY2hpbGQpCj4gPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCAiTm8gY2hpbGQgbm9kZVxuIik7Cj4gPiA+ ICsKPiA+ID4gKyAgICAgb2Zfbm9kZV9wdXQoY2hpbGQpOwo+ID4gPiArICAgICByZXR1cm4gb2Zf bm9kZV9uYW1lX2VxKGNoaWxkLCAiY3Jvcy1lYy1ycG1zZyIpOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICBzdGF0aWMgaW50IHNjcF9jbHVzdGVyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiA+ID4gIHsKPiA+ID4gLSAgICAgc3RydWN0IG10a19zY3AgKnNjcDsKPiA+ID4gKyAg ICAgc3RydWN0IG10a19zY3AgKnNjcCwgKnRlbXA7Cj4gPiA+ICAgICAgIHN0cnVjdCBtdGtfc2Nw X29mX2NsdXN0ZXIgKnNjcF9jbHVzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4g PiA+ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsdXN0ZXIgPSAmc2NwX2NsdXN0ZXItPm10a19z Y3BfY2x1c3RlcjsKPiA+ID4gCj4gPiA+IC0gICAgIHNjcCA9IHNjcF9ycHJvY19pbml0KHBkZXYs IHNjcF9jbHVzdGVyKTsKPiA+ID4gLSAgICAgaWYgKElTX0VSUihzY3ApKQo+ID4gPiAtICAgICAg ICAgICAgIHJldHVybiBQVFJfRVJSKHNjcCk7Cj4gPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7Cj4gPiA+ICsgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXZf b2Zfbm9kZShkZXYpOwo+ID4gPiArICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcGRldjsK PiA+ID4gKyAgICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKPiA+ID4gKyAgICAgY29uc3Qg c3RydWN0IG10a19zY3Bfb2ZfZGF0YSAqKmNsdXN0ZXJfb2ZfZGF0YTsKPiA+ID4gKyAgICAgaW50 IGNvcmVfaWQgPSAwOwo+ID4gPiArICAgICBpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsgICAgIHJl dCA9IHNjcF9pc19zaW5nbGVfY29yZShwZGV2KTsKPiA+ID4gKyAgICAgaWYgKHJldCA8IDApCj4g PiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ID4gKwo+ID4gPiArICAgICBpZiAocmV0 KSB7Cj4gPiA+ICsgICAgICAgICAgICAgZGV2X2RiZyhkZXYsICJzaW5nbGUtY29yZSBzY3BcbiIp Owo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgLyogV2hlbiB1c2luZyB0aGUgU0NQIG5vZGUg cGhhbmRsZSBvbiBleHBvcnRlZCBTQ1AgQVBJcywgdGhlIGRydmRhdGEKPiA+ID4gKyAgICAgICAg ICAgICAgKiBpcyBleHBlY3RlZCB0byBiZSB0aGUgbXRrX3NjcCBvYmplY3QsIGFuZCBhcyBhIHJl c3VsdCwgaXQgaXMgaW50ZW5kZWQKPiA+ID4gKyAgICAgICAgICAgICAgKiB0byBiZSBvdmVyd3Jp dHRlbiBmb3Igc2luZ2xlLWNvcmUgU0NQIHVzYWdlLgo+ID4gPiArICAgICAgICAgICAgICAqLwo+ ID4gCj4gPiBJcyB0aGlzIGNvbW1lbnQgc3RpbGwgcmVsZXZhbnQ/Cj4gCj4gTm8sIEknbGwgcmVt b3ZlIGl0LiAKPiAKPiA+IAo+ID4gPiArICAgICAgICAgICAgIHNjcCA9IHNjcF9ycHJvY19pbml0 KHBkZXYsIHNjcF9jbHVzdGVyLCBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KSk7Cj4gPiA+ ICsgICAgICAgICAgICAgaWYgKElTX0VSUihzY3ApKQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIFBUUl9FUlIoc2NwKTsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgIGxpc3Rf YWRkX3RhaWwoJnNjcC0+ZWxlbSwgY2x1c3Rlcik7Cj4gPiAKPiA+IFRoaXMgaXMgZ2V0dGluZyBt ZXNzeS4gIFBsZWFzZSBhZGQgdHdvIG5ldyBmdW5jdGlvbnMsIGkuZSBzY3BfYWRkX3NpbmdsZV9j b3JlKCkKPiA+IGFuZCBzY3BfYWRkX211bHRpX2NvcmUoKS4KPiAKPiBPay4KPiAKPiA+IAo+ID4g PiArICAgICB9IGVsc2Ugewo+ID4gPiArICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAibXVsdGkt Y29yZSBzY3BcbiIpOwo+ID4gPiArCj4gPiA+ICsgICAgICAgICAgICAgY2x1c3Rlcl9vZl9kYXRh ID0gKGNvbnN0IHN0cnVjdCBtdGtfc2NwX29mX2RhdGEgKiopb2ZfZGV2aWNlX2dldF9tYXRjaF9k YXRhKGRldik7Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICBmb3JfZWFjaF9hdmFpbGFibGVf Y2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlm ICghY2x1c3Rlcl9vZl9kYXRhW2NvcmVfaWRdKSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRldl9lcnIoZGV2LCAiTm90IHN1cHBvcnQgY29yZSAlZFxuIiwgY29yZV9pZCk7Cj4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KGNoaWxkKTsKPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbml0X2ZhaWw7Cj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNw ZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjaGlsZCk7Cj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICBpZiAoIWNwZGV2KSB7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldCA9IC1FTk9ERVY7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9l cnIoZGV2LCAiTm90IGZvdW5kIHBsYXRmb3JtIGRldmljZSBmb3IgY29yZSAlZFxuIiwgY29yZV9p ZCk7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KGNoaWxk KTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbml0X2ZhaWw7Cj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICB9Cj4gPiA+ICsKPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHNjcCA9IHNjcF9ycHJvY19pbml0KGNwZGV2LCBzY3BfY2x1c3RlciwgY2x1c3Rlcl9v Zl9kYXRhW2NvcmVfaWRdKTsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChJU19FUlIo c2NwKSkgewo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBpbml0aWFsaXplIGNvcmUgJWQgcnByb2NcbiIsIGNvcmVfaWQpOwo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRfZGV2aWNlKCZjcGRldi0+ZGV2KTsKPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zfbm9kZV9wdXQoY2hpbGQpOwo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGluaXRfZmFpbDsKPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIGxpc3RfYWRk X3RhaWwoJnNjcC0+ZWxlbSwgY2x1c3Rlcik7Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBw dXRfZGV2aWNlKCZjcGRldi0+ZGV2KTsKPiA+ID4gKwo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgY29yZV9pZCsrOwo+ID4gPiArICAgICAgICAgICAgIH0KPiA+ID4gKyAgICAgfQo+ID4gPiAK PiA+ID4gLSAgICAgbGlzdF9hZGRfdGFpbCgmc2NwLT5lbGVtLCBjbHVzdGVyKTsKPiA+ID4gKyAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2Uoc2NwLCB0ZW1wLCBjbHVzdGVyLCBl bGVtKSB7Cj4gPiA+ICsgICAgICAgICAgICAgcmV0ID0gcnByb2NfYWRkKHNjcC0+cnByb2MpOwo+ ID4gCj4gPiBDYWxsIHJwcm9jX2FkZCgpIGluIHRoZSBmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRf b2Zfbm9kZSgpIGxvb3AgYWJvdmUuICBUaGF0IHdheQo+ID4gaXQgaWYgZmFpbHMgeW91IGNhbiBj YWxsIHNjcF9ycHJvY19mcmVlKCkgcmlnaHQgYXdheSBhbmQganVtcCB0byBpbml0X2ZhaWwgdG8K PiA+IGRlYWwgd2l0aCB0aGUgb3RoZXIgY29yZXMgb24gdGhlIGxpc3QuCj4gCj4gT2ssIEknbGwg dXBkYXRlIGl0IGluIG5leHQgdmVyc2lvbi4KPiAKPiA+IAo+ID4gPiArICAgICAgICAgICAgIGlm IChyZXQpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGFkZF9mYWlsOwo+ID4gPiAr ICAgICB9Cj4gPiA+IAo+ID4gPiAgICAgICByZXR1cm4gMDsKPiA+ID4gKwo+ID4gPiArYWRkX2Zh aWw6Cj4gPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoc2NwLCBjbHVzdGVy LCBlbGVtKSB7Cj4gPiA+ICsgICAgICAgICAgICAgcnByb2NfZGVsKHNjcC0+cnByb2MpOwo+ID4g PiArICAgICB9Cj4gPiA+ICtpbml0X2ZhaWw6Cj4gPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZV9yZXZlcnNlKHNjcCwgdGVtcCwgY2x1c3RlciwgZWxlbSkgewo+ID4gPiArICAgICAg ICAgICAgIGxpc3RfZGVsKCZzY3AtPmVsZW0pOwo+ID4gPiArICAgICAgICAgICAgIHNjcF9ycHJv Y19mcmVlKHNjcCk7Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gCj4gPiBUaGVyZSBhcmUgYSBz ZXJpb3VzIHByb2JsZW1zIHdpdGggdGhlIGNvZGUgaW4gYm90aCBsYWJlbHMgYWJvdmUuICBJIHdp bGwgbGV0IHlvdQo+ID4gdGhpbmsgYWJvdXQgdGhhdCBhbmQgSSB3aWxsIHN0b3AgaGVyZSBmb3Ig dGhpcyByZXZpc2lvbi4KPiA+IAo+ID4gTWF0aGlldQo+IAo+IE1heSBiZSB0aGUgcHJvYmxlbSBp cyB0aGUgcG9zc2libGUgbnVsbCBhY2Nlc3Mgb2YgKnNjcD8KPiBPciwgdGhlIHJlc291cmNlcyBi b3VuZCB3aXRoIGNwZGV2IHNob3VsZCBiZSByZWxlYXNlZCBhdCBoZXJlPwoKVGhlIGZpcnN0IHBy b2JsZW0gaXMgcmVsYXRlZCB0byBsaXN0IHByb2Nlc3NpbmcuICBGdW5jdGlvbgpsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmVfcmV2ZXJzZSgpIHN0YXJ0cyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFu ZCBzdG9wcyBpZiBhbgplcnJvciBpcyBlbmNvdW50ZXJlZC4gIEZyb20gdGhlcmUgd2UgZ28gYmFj ayB0aGUgb3RoZXIgd2F5IHdpdGgKbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSgpIGFuZCB0 aGVuIHJldmVyc2UgYWdhaW4gZm9yCmxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKCku ICBUaGlzIGJhY2sgYW5kIGZvcnRoIGlzIGVycm9yIHByb25lIGFuZCB2ZXJ5CmhhcmQgdG8gbWFp bnRhaW4uICAKClRoZSBzZWNvbmQgcHJvYmxlbSBpcyB3aXRoIHJwcm9jX2RlbCgpLi4uIERvZXMg aXQgbmVlZCB0byBiZSB0aGVyZT8KCj4gCj4gCj4gPiAKPiA+ID4gKyAgICAgcmV0dXJuIHJldDsK PiA+ID4gIH0KPiA+ID4gCj4gPiA+ICBzdGF0aWMgaW50IHNjcF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+ID4gPiBAQCAtMTAwNSw2ICsxMDk5LDEwIEBAIHN0YXRpYyBpbnQg c2NwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICAgICAgIElOSVRf TElTVF9IRUFEKCZzY3BfY2x1c3Rlci0+bXRrX3NjcF9jbHVzdGVyKTsKPiA+ID4gICAgICAgcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2NwX2NsdXN0ZXIpOwo+ID4gPiAKPiA+ID4gKyAgICAg cmV0ID0gZGV2bV9vZl9wbGF0Zm9ybV9wb3B1bGF0ZShkZXYpOwo+ID4gPiArICAgICBpZiAocmV0 KQo+ID4gPiArICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFp bGVkIHRvIHBvcHVsYXRlIHBsYXRmb3JtIGRldmljZXNcbiIpOwo+ID4gPiArCj4gPiA+ICAgICAg IHJldCA9IHNjcF9jbHVzdGVyX2luaXQocGRldik7Cj4gPiA+ICAgICAgIGlmIChyZXQpCj4gPiA+ ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ID4gQEAgLTEwMTYsMTcgKzExMTQsMTEgQEAg c3RhdGljIGludCBzY3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ ICB7Cj4gPiA+ICAgICAgIHN0cnVjdCBtdGtfc2NwX29mX2NsdXN0ZXIgKnNjcF9jbHVzdGVyID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gPiA+ICAgICAgIHN0cnVjdCBtdGtfc2NwICpz Y3AsICp0ZW1wOwo+ID4gPiAtICAgICBpbnQgaTsKPiA+ID4gCj4gPiA+ICAgICAgIGxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKHNjcCwgdGVtcCwgJnNjcF9jbHVzdGVyLT5tdGtfc2Nw X2NsdXN0ZXIsIGVsZW0pIHsKPiA+ID4gICAgICAgICAgICAgICBsaXN0X2RlbCgmc2NwLT5lbGVt KTsKPiA+ID4gICAgICAgICAgICAgICBycHJvY19kZWwoc2NwLT5ycHJvYyk7Cj4gPiA+IC0gICAg ICAgICAgICAgc2NwX3JlbW92ZV9ycG1zZ19zdWJkZXYoc2NwKTsKPiA+ID4gLSAgICAgICAgICAg ICBzY3BfaXBpX3VucmVnaXN0ZXIoc2NwLCBTQ1BfSVBJX0lOSVQpOwo+ID4gPiAtICAgICAgICAg ICAgIHNjcF91bm1hcF9tZW1vcnlfcmVnaW9uKHNjcCk7Cj4gPiA+IC0gICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IFNDUF9JUElfTUFYOyBpKyspCj4gPiA+IC0gICAgICAgICAgICAgICAgICAg ICBtdXRleF9kZXN0cm95KCZzY3AtPmlwaV9kZXNjW2ldLmxvY2spOwo+ID4gPiAtICAgICAgICAg ICAgIG11dGV4X2Rlc3Ryb3koJnNjcC0+c2VuZF9sb2NrKTsKPiA+ID4gKyAgICAgICAgICAgICBz Y3BfcnByb2NfZnJlZShzY3ApOwo+ID4gPiAgICAgICB9Cj4gPiA+IAo+ID4gPiAgICAgICByZXR1 cm4gMDsKPiA+ID4gQEAgLTExMDYsMTIgKzExOTgsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBt dGtfc2NwX29mX2RhdGEgbXQ4MTk1X29mX2RhdGFfYzEgPSB7Cj4gPiA+ICAgICAgIC5ob3N0X3Rv X3NjcF9pbnRfYml0ID0gTVQ4MTk1X0NPUkUxX0hPU1RfSVBDX0lOVF9CSVQsCj4gPiA+ICB9Owo+ ID4gPiAKPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NjcF9vZl9kYXRhICptdDgxOTVf b2ZfZGF0YV9jb3Jlc1tdID0gewo+ID4gPiArICAgICAmbXQ4MTk1X29mX2RhdGEsCj4gPiA+ICsg ICAgICZtdDgxOTVfb2ZfZGF0YV9jMSwKPiA+ID4gKyAgICAgTlVMTAo+ID4gPiArfTsKPiA+ID4g Kwo+ID4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3NjcF9vZl9tYXRj aFtdID0gewo+ID4gPiAgICAgICB7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4My1zY3Ai LCAuZGF0YSA9ICZtdDgxODNfb2ZfZGF0YSB9LAo+ID4gPiAgICAgICB7IC5jb21wYXRpYmxlID0g Im1lZGlhdGVrLG10ODE4Ni1zY3AiLCAuZGF0YSA9ICZtdDgxODZfb2ZfZGF0YSB9LAo+ID4gPiAg ICAgICB7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4OC1zY3AiLCAuZGF0YSA9ICZtdDgx ODhfb2ZfZGF0YSB9LAo+ID4gPiAgICAgICB7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5 Mi1zY3AiLCAuZGF0YSA9ICZtdDgxOTJfb2ZfZGF0YSB9LAo+ID4gPiAgICAgICB7IC5jb21wYXRp YmxlID0gIm1lZGlhdGVrLG10ODE5NS1zY3AiLCAuZGF0YSA9ICZtdDgxOTVfb2ZfZGF0YSB9LAo+ ID4gPiArICAgICB7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5NS1zY3AtZHVhbCIsIC5k YXRhID0gJm10ODE5NV9vZl9kYXRhX2NvcmVzIH0sCj4gPiA+ICAgICAgIHt9LAo+ID4gPiAgfTsK PiA+ID4gIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19zY3Bfb2ZfbWF0Y2gpOwo+ID4gPiAt LQo+ID4gPiAyLjE4LjAKPiA+ID4gCj4gCj4gLS0gCj4gQmVzdCByZWdhcmRzLAo+IFRpbmdIYW4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFy bS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1r ZXJuZWwK