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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 9CAD9C4320D for ; Tue, 24 Sep 2019 18:14:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 86F4421783 for ; Tue, 24 Sep 2019 18:14:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2439701AbfIXSM6 (ORCPT ); Tue, 24 Sep 2019 14:12:58 -0400 Received: from mx2.suse.de ([195.135.220.15]:44036 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2439610AbfIXSM6 (ORCPT ); Tue, 24 Sep 2019 14:12:58 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 3CDFFABBD; Tue, 24 Sep 2019 18:12:55 +0000 (UTC) From: Nicolas Saenz Julienne To: robh+dt@kernel.org, devicetree@vger.kernel.org, frowand.list@gmail.com, linux-arm-kernel@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dmaengine@vger.kernel.org, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-tegra@vger.kernel.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org Cc: mbrugger@suse.com, robin.murphy@arm.com, f.fainelli@gmail.com, james.quinlan@broadcom.com, wahrenst@gmx.net, Nicolas Saenz Julienne Subject: [PATCH 04/11] of: address: introduce of_translate_dma_address_parent() Date: Tue, 24 Sep 2019 20:12:35 +0200 Message-Id: <20190924181244.7159-5-nsaenzjulienne@suse.de> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190924181244.7159-1-nsaenzjulienne@suse.de> References: <20190924181244.7159-1-nsaenzjulienne@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org Some devices might not have a DT node of their own, but might still need to translate DMA addresses based on their bus DT node. Update of_translate_dma_address() to only depend on the parent DT node. Rename it to of_translate_dma_address_parent(). The later will be still available as a wrapper around the new function. Signed-off-by: Nicolas Saenz Julienne --- drivers/of/address.c | 60 ++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index 9c1e638fa8ea..c9eb4ebcc2e9 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -570,33 +570,32 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, * device that had registered logical PIO mapping, and the return code is * relative to that node. */ -static u64 __of_translate_address(struct device_node *dev, - struct device_node *(*get_parent)(const struct device_node *), - const __be32 *in_addr, const char *rprop, - struct device_node **host) +static u64 __of_translate_address_parent(struct device_node *parent, + struct device_node *(*get_parent) + (const struct device_node *), + const __be32 *in_addr, + const char *rprop, + struct device_node **host) { - struct device_node *parent = NULL; + struct device_node *dev = NULL; struct of_bus *bus, *pbus; __be32 addr[OF_MAX_ADDR_CELLS]; int na, ns, pna, pns; u64 result = OF_BAD_ADDR; - pr_debug("** translation for device %pOF **\n", dev); - - /* Increase refcount at current level */ - of_node_get(dev); - *host = NULL; - /* Get parent & match bus type */ - parent = get_parent(dev); - if (parent == NULL) + + if (!parent) goto bail; + + /* Increase refcount at current level and match bus type */ + of_node_get(parent); bus = of_match_bus(parent); /* Count address cells & copy address locally */ bus->count_cells(parent, &na, &ns); if (!OF_CHECK_COUNTS(na, ns)) { - pr_debug("Bad cell count for %pOF\n", dev); + pr_debug("Bad cell count for %pOF\n", parent); goto bail; } memcpy(addr, in_addr, na * 4); @@ -610,9 +609,8 @@ static u64 __of_translate_address(struct device_node *dev, struct logic_pio_hwaddr *iorange; /* Switch to parent bus */ - of_node_put(dev); dev = parent; - parent = get_parent(dev); + parent = get_parent(parent); /* If root, we have finished */ if (parent == NULL) { @@ -650,6 +648,8 @@ static u64 __of_translate_address(struct device_node *dev, break; /* Complete the move up one level */ + of_node_put(dev); + dev = parent; na = pna; ns = pns; bus = pbus; @@ -668,8 +668,10 @@ u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) struct device_node *host; u64 ret; - ret = __of_translate_address(dev, of_get_parent, - in_addr, "ranges", &host); + pr_debug("** translation for device %pOF **\n", dev); + + ret = __of_translate_address_parent(dev->parent, of_get_parent, + in_addr, "ranges", &host); if (host) { of_node_put(host); return OF_BAD_ADDR; @@ -697,14 +699,14 @@ static struct device_node *__of_get_dma_parent(const struct device_node *np) return of_node_get(args.np); } -u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) +static u64 of_translate_dma_address_parent(struct device_node *parent, + const __be32 *in_addr) { struct device_node *host; u64 ret; - ret = __of_translate_address(dev, __of_get_dma_parent, - in_addr, "dma-ranges", &host); - + ret = __of_translate_address_parent(parent, __of_get_dma_parent, in_addr, + "dma-ranges", &host); if (host) { of_node_put(host); return OF_BAD_ADDR; @@ -712,6 +714,14 @@ u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) return ret; } + +u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) +{ + pr_debug("** translation for device %pOF **\n", dev); + + return of_translate_dma_address_parent(__of_get_dma_parent(dev->parent), + in_addr); +} EXPORT_SYMBOL(of_translate_dma_address); const __be32 *of_get_address(struct device_node *dev, int index, u64 *size, @@ -759,8 +769,10 @@ static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr, unsigned long port; struct device_node *host; - taddr = __of_translate_address(dev, of_get_parent, - in_addr, "ranges", &host); + pr_debug("** translation for device %pOF **\n", dev); + + taddr = __of_translate_address_parent(dev->parent, of_get_parent, + in_addr, "ranges", &host); if (host) { /* host-specific port access */ port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size); -- 2.23.0 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=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 7736EC432C1 for ; Tue, 24 Sep 2019 18:15:12 +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 54C94214AF for ; Tue, 24 Sep 2019 18:15:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="UdsccE3z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 54C94214AF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de 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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=RrzfbGbacFa/7Uxnmp2y5RkkHaFAVf1opL0tXq3glDs=; b=UdsccE3z3+UT1C ms32Vz8bK32BhbxO/UAxzhNGrkQlJ7XyYkyZfwmwdf1lhZE1HX7WFn/ISdC8+g9jmiI7bMk4O/LBj +THeWXCwGvzYv90H7EwJlcCDg0rrcNI88aIuLPFjF7+PXx6XhTz/95Ocd0Xz/EmxgRnj+rB2OvyLk h5TukPYDGtu1Smwp7tM0ERpZt1iEtMrNFfSgotq79GLLaor/cW/JpPT4UimtkSLGX6j6WXLGtfkcG EHI1dqzhnh8QMMj8G+dk2ZzZn9CM7HvOazLZoF+KYWp3736SHYBmeoy6Dkr8rOc4yBnQ+J+5BGYzq tsyg4FwC7oKeMR4NuxGA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iCpL1-0004T3-CF; Tue, 24 Sep 2019 18:14:59 +0000 Received: from mx2.suse.de ([195.135.220.15] helo=mx1.suse.de) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iCpJ2-00034y-Gx for linux-arm-kernel@lists.infradead.org; Tue, 24 Sep 2019 18:12:59 +0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 3CDFFABBD; Tue, 24 Sep 2019 18:12:55 +0000 (UTC) From: Nicolas Saenz Julienne To: robh+dt@kernel.org, devicetree@vger.kernel.org, frowand.list@gmail.com, linux-arm-kernel@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dmaengine@vger.kernel.org, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-tegra@vger.kernel.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org Subject: [PATCH 04/11] of: address: introduce of_translate_dma_address_parent() Date: Tue, 24 Sep 2019 20:12:35 +0200 Message-Id: <20190924181244.7159-5-nsaenzjulienne@suse.de> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190924181244.7159-1-nsaenzjulienne@suse.de> References: <20190924181244.7159-1-nsaenzjulienne@suse.de> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190924_111256_848975_56A7B71C X-CRM114-Status: GOOD ( 13.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: f.fainelli@gmail.com, mbrugger@suse.com, wahrenst@gmx.net, james.quinlan@broadcom.com, robin.murphy@arm.com, Nicolas Saenz Julienne Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Some devices might not have a DT node of their own, but might still need to translate DMA addresses based on their bus DT node. Update of_translate_dma_address() to only depend on the parent DT node. Rename it to of_translate_dma_address_parent(). The later will be still available as a wrapper around the new function. Signed-off-by: Nicolas Saenz Julienne --- drivers/of/address.c | 60 ++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index 9c1e638fa8ea..c9eb4ebcc2e9 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -570,33 +570,32 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, * device that had registered logical PIO mapping, and the return code is * relative to that node. */ -static u64 __of_translate_address(struct device_node *dev, - struct device_node *(*get_parent)(const struct device_node *), - const __be32 *in_addr, const char *rprop, - struct device_node **host) +static u64 __of_translate_address_parent(struct device_node *parent, + struct device_node *(*get_parent) + (const struct device_node *), + const __be32 *in_addr, + const char *rprop, + struct device_node **host) { - struct device_node *parent = NULL; + struct device_node *dev = NULL; struct of_bus *bus, *pbus; __be32 addr[OF_MAX_ADDR_CELLS]; int na, ns, pna, pns; u64 result = OF_BAD_ADDR; - pr_debug("** translation for device %pOF **\n", dev); - - /* Increase refcount at current level */ - of_node_get(dev); - *host = NULL; - /* Get parent & match bus type */ - parent = get_parent(dev); - if (parent == NULL) + + if (!parent) goto bail; + + /* Increase refcount at current level and match bus type */ + of_node_get(parent); bus = of_match_bus(parent); /* Count address cells & copy address locally */ bus->count_cells(parent, &na, &ns); if (!OF_CHECK_COUNTS(na, ns)) { - pr_debug("Bad cell count for %pOF\n", dev); + pr_debug("Bad cell count for %pOF\n", parent); goto bail; } memcpy(addr, in_addr, na * 4); @@ -610,9 +609,8 @@ static u64 __of_translate_address(struct device_node *dev, struct logic_pio_hwaddr *iorange; /* Switch to parent bus */ - of_node_put(dev); dev = parent; - parent = get_parent(dev); + parent = get_parent(parent); /* If root, we have finished */ if (parent == NULL) { @@ -650,6 +648,8 @@ static u64 __of_translate_address(struct device_node *dev, break; /* Complete the move up one level */ + of_node_put(dev); + dev = parent; na = pna; ns = pns; bus = pbus; @@ -668,8 +668,10 @@ u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) struct device_node *host; u64 ret; - ret = __of_translate_address(dev, of_get_parent, - in_addr, "ranges", &host); + pr_debug("** translation for device %pOF **\n", dev); + + ret = __of_translate_address_parent(dev->parent, of_get_parent, + in_addr, "ranges", &host); if (host) { of_node_put(host); return OF_BAD_ADDR; @@ -697,14 +699,14 @@ static struct device_node *__of_get_dma_parent(const struct device_node *np) return of_node_get(args.np); } -u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) +static u64 of_translate_dma_address_parent(struct device_node *parent, + const __be32 *in_addr) { struct device_node *host; u64 ret; - ret = __of_translate_address(dev, __of_get_dma_parent, - in_addr, "dma-ranges", &host); - + ret = __of_translate_address_parent(parent, __of_get_dma_parent, in_addr, + "dma-ranges", &host); if (host) { of_node_put(host); return OF_BAD_ADDR; @@ -712,6 +714,14 @@ u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) return ret; } + +u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) +{ + pr_debug("** translation for device %pOF **\n", dev); + + return of_translate_dma_address_parent(__of_get_dma_parent(dev->parent), + in_addr); +} EXPORT_SYMBOL(of_translate_dma_address); const __be32 *of_get_address(struct device_node *dev, int index, u64 *size, @@ -759,8 +769,10 @@ static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr, unsigned long port; struct device_node *host; - taddr = __of_translate_address(dev, of_get_parent, - in_addr, "ranges", &host); + pr_debug("** translation for device %pOF **\n", dev); + + taddr = __of_translate_address_parent(dev->parent, of_get_parent, + in_addr, "ranges", &host); if (host) { /* host-specific port access */ port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size); -- 2.23.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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=-9.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 28D2CC4360D for ; Wed, 25 Sep 2019 04:16:35 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 05CC02075D for ; Wed, 25 Sep 2019 04:16:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 05CC02075D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iCyj0-0000Pq-Ri; Wed, 25 Sep 2019 04:16:22 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iCpJ4-0000EZ-4G for xen-devel@lists.xenproject.org; Tue, 24 Sep 2019 18:12:58 +0000 X-Inumbo-ID: ee742c50-def6-11e9-9625-12813bfff9fa Received: from mx1.suse.de (unknown [195.135.220.15]) by localhost (Halon) with ESMTPS id ee742c50-def6-11e9-9625-12813bfff9fa; Tue, 24 Sep 2019 18:12:56 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 3CDFFABBD; Tue, 24 Sep 2019 18:12:55 +0000 (UTC) From: Nicolas Saenz Julienne To: robh+dt@kernel.org, devicetree@vger.kernel.org, frowand.list@gmail.com, linux-arm-kernel@lists.infradead.org, linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dmaengine@vger.kernel.org, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, xen-devel@lists.xenproject.org, linux-tegra@vger.kernel.org, linux-media@vger.kernel.org, linux-pci@vger.kernel.org Date: Tue, 24 Sep 2019 20:12:35 +0200 Message-Id: <20190924181244.7159-5-nsaenzjulienne@suse.de> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190924181244.7159-1-nsaenzjulienne@suse.de> References: <20190924181244.7159-1-nsaenzjulienne@suse.de> MIME-Version: 1.0 X-Mailman-Approved-At: Wed, 25 Sep 2019 04:16:20 +0000 Subject: [Xen-devel] [PATCH 04/11] of: address: introduce of_translate_dma_address_parent() X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: f.fainelli@gmail.com, mbrugger@suse.com, wahrenst@gmx.net, james.quinlan@broadcom.com, robin.murphy@arm.com, Nicolas Saenz Julienne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" U29tZSBkZXZpY2VzIG1pZ2h0IG5vdCBoYXZlIGEgRFQgbm9kZSBvZiB0aGVpciBvd24sIGJ1dCBt aWdodCBzdGlsbCBuZWVkCnRvIHRyYW5zbGF0ZSBETUEgYWRkcmVzc2VzIGJhc2VkIG9uIHRoZWly IGJ1cyBEVCBub2RlLgoKVXBkYXRlIG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcygpIHRvIG9ubHkg ZGVwZW5kIG9uIHRoZSBwYXJlbnQgRFQgbm9kZS4KUmVuYW1lIGl0IHRvIG9mX3RyYW5zbGF0ZV9k bWFfYWRkcmVzc19wYXJlbnQoKS4gVGhlIGxhdGVyIHdpbGwgYmUgc3RpbGwKYXZhaWxhYmxlIGFz IGEgd3JhcHBlciBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbi4KClNpZ25lZC1vZmYtYnk6IE5pY29s YXMgU2FlbnogSnVsaWVubmUgPG5zYWVuemp1bGllbm5lQHN1c2UuZGU+Ci0tLQoKIGRyaXZlcnMv b2YvYWRkcmVzcy5jIHwgNjAgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2FkZHJlc3MuYyBiL2RyaXZlcnMvb2YvYWRkcmVzcy5j CmluZGV4IDljMWU2MzhmYThlYS4uYzllYjRlYmNjMmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29m L2FkZHJlc3MuYworKysgYi9kcml2ZXJzL29mL2FkZHJlc3MuYwpAQCAtNTcwLDMzICs1NzAsMzIg QEAgc3RhdGljIGludCBvZl90cmFuc2xhdGVfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50 LCBzdHJ1Y3Qgb2ZfYnVzICpidXMsCiAgKiBkZXZpY2UgdGhhdCBoYWQgcmVnaXN0ZXJlZCBsb2dp Y2FsIFBJTyBtYXBwaW5nLCBhbmQgdGhlIHJldHVybiBjb2RlIGlzCiAgKiByZWxhdGl2ZSB0byB0 aGF0IG5vZGUuCiAgKi8KLXN0YXRpYyB1NjQgX19vZl90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmRldiwKLQkJCQkgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKCpnZXRfcGFyZW50 KShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKiksCi0JCQkJICBjb25zdCBfX2JlMzIgKmluX2Fk ZHIsIGNvbnN0IGNoYXIgKnJwcm9wLAotCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICoqaG9zdCkK K3N0YXRpYyB1NjQgX19vZl90cmFuc2xhdGVfYWRkcmVzc19wYXJlbnQoc3RydWN0IGRldmljZV9u b2RlICpwYXJlbnQsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX25vZGUgKigqZ2V0X3BhcmVudCkKKwkJ CQkJCShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKiksCisJCQkJCSBjb25zdCBfX2JlMzIgKmlu X2FkZHIsCisJCQkJCSBjb25zdCBjaGFyICpycHJvcCwKKwkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqKmhvc3QpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgb2ZfYnVzICpidXMsICpwYnVzOwog CV9fYmUzMiBhZGRyW09GX01BWF9BRERSX0NFTExTXTsKIAlpbnQgbmEsIG5zLCBwbmEsIHBuczsK IAl1NjQgcmVzdWx0ID0gT0ZfQkFEX0FERFI7CiAKLQlwcl9kZWJ1ZygiKiogdHJhbnNsYXRpb24g Zm9yIGRldmljZSAlcE9GICoqXG4iLCBkZXYpOwotCi0JLyogSW5jcmVhc2UgcmVmY291bnQgYXQg Y3VycmVudCBsZXZlbCAqLwotCW9mX25vZGVfZ2V0KGRldik7Ci0KIAkqaG9zdCA9IE5VTEw7Ci0J LyogR2V0IHBhcmVudCAmIG1hdGNoIGJ1cyB0eXBlICovCi0JcGFyZW50ID0gZ2V0X3BhcmVudChk ZXYpOwotCWlmIChwYXJlbnQgPT0gTlVMTCkKKworCWlmICghcGFyZW50KQogCQlnb3RvIGJhaWw7 CisKKwkvKiBJbmNyZWFzZSByZWZjb3VudCBhdCBjdXJyZW50IGxldmVsIGFuZCBtYXRjaCBidXMg dHlwZSAqLworCW9mX25vZGVfZ2V0KHBhcmVudCk7CiAJYnVzID0gb2ZfbWF0Y2hfYnVzKHBhcmVu dCk7CiAKIAkvKiBDb3VudCBhZGRyZXNzIGNlbGxzICYgY29weSBhZGRyZXNzIGxvY2FsbHkgKi8K IAlidXMtPmNvdW50X2NlbGxzKHBhcmVudCwgJm5hLCAmbnMpOwogCWlmICghT0ZfQ0hFQ0tfQ09V TlRTKG5hLCBucykpIHsKLQkJcHJfZGVidWcoIkJhZCBjZWxsIGNvdW50IGZvciAlcE9GXG4iLCBk ZXYpOworCQlwcl9kZWJ1ZygiQmFkIGNlbGwgY291bnQgZm9yICVwT0ZcbiIsIHBhcmVudCk7CiAJ CWdvdG8gYmFpbDsKIAl9CiAJbWVtY3B5KGFkZHIsIGluX2FkZHIsIG5hICogNCk7CkBAIC02MTAs OSArNjA5LDggQEAgc3RhdGljIHU2NCBfX29mX3RyYW5zbGF0ZV9hZGRyZXNzKHN0cnVjdCBkZXZp Y2Vfbm9kZSAqZGV2LAogCQlzdHJ1Y3QgbG9naWNfcGlvX2h3YWRkciAqaW9yYW5nZTsKIAogCQkv KiBTd2l0Y2ggdG8gcGFyZW50IGJ1cyAqLwotCQlvZl9ub2RlX3B1dChkZXYpOwogCQlkZXYgPSBw YXJlbnQ7Ci0JCXBhcmVudCA9IGdldF9wYXJlbnQoZGV2KTsKKwkJcGFyZW50ID0gZ2V0X3BhcmVu dChwYXJlbnQpOwogCiAJCS8qIElmIHJvb3QsIHdlIGhhdmUgZmluaXNoZWQgKi8KIAkJaWYgKHBh cmVudCA9PSBOVUxMKSB7CkBAIC02NTAsNiArNjQ4LDggQEAgc3RhdGljIHU2NCBfX29mX3RyYW5z bGF0ZV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LAogCQkJYnJlYWs7CiAKIAkJLyog Q29tcGxldGUgdGhlIG1vdmUgdXAgb25lIGxldmVsICovCisJCW9mX25vZGVfcHV0KGRldik7CisJ CWRldiA9IHBhcmVudDsKIAkJbmEgPSBwbmE7CiAJCW5zID0gcG5zOwogCQlidXMgPSBwYnVzOwpA QCAtNjY4LDggKzY2OCwxMCBAQCB1NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmlj ZV9ub2RlICpkZXYsIGNvbnN0IF9fYmUzMiAqaW5fYWRkcikKIAlzdHJ1Y3QgZGV2aWNlX25vZGUg Kmhvc3Q7CiAJdTY0IHJldDsKIAotCXJldCA9IF9fb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBv Zl9nZXRfcGFyZW50LAotCQkJCSAgICAgaW5fYWRkciwgInJhbmdlcyIsICZob3N0KTsKKwlwcl9k ZWJ1ZygiKiogdHJhbnNsYXRpb24gZm9yIGRldmljZSAlcE9GICoqXG4iLCBkZXYpOworCisJcmV0 ID0gX19vZl90cmFuc2xhdGVfYWRkcmVzc19wYXJlbnQoZGV2LT5wYXJlbnQsIG9mX2dldF9wYXJl bnQsCisJCQkJCSAgICBpbl9hZGRyLCAicmFuZ2VzIiwgJmhvc3QpOwogCWlmIChob3N0KSB7CiAJ CW9mX25vZGVfcHV0KGhvc3QpOwogCQlyZXR1cm4gT0ZfQkFEX0FERFI7CkBAIC02OTcsMTQgKzY5 OSwxNCBAQCBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpfX29mX2dldF9kbWFfcGFyZW50KGNv bnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJcmV0dXJuIG9mX25vZGVfZ2V0KGFyZ3MubnAp OwogfQogCi11NjQgb2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAq ZGV2LCBjb25zdCBfX2JlMzIgKmluX2FkZHIpCitzdGF0aWMgdTY0IG9mX3RyYW5zbGF0ZV9kbWFf YWRkcmVzc19wYXJlbnQoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsCisJCQkJCSAgIGNvbnN0 IF9fYmUzMiAqaW5fYWRkcikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmhvc3Q7CiAJdTY0IHJl dDsKIAotCXJldCA9IF9fb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZGV2LCBfX29mX2dldF9kbWFfcGFy ZW50LAotCQkJCSAgICAgaW5fYWRkciwgImRtYS1yYW5nZXMiLCAmaG9zdCk7Ci0KKwlyZXQgPSBf X29mX3RyYW5zbGF0ZV9hZGRyZXNzX3BhcmVudChwYXJlbnQsIF9fb2ZfZ2V0X2RtYV9wYXJlbnQs IGluX2FkZHIsCisJCQkJCSAgICAiZG1hLXJhbmdlcyIsICZob3N0KTsKIAlpZiAoaG9zdCkgewog CQlvZl9ub2RlX3B1dChob3N0KTsKIAkJcmV0dXJuIE9GX0JBRF9BRERSOwpAQCAtNzEyLDYgKzcx NCwxNCBAQCB1NjQgb2ZfdHJhbnNsYXRlX2RtYV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAq ZGV2LCBjb25zdCBfX2JlMzIgKmluX2FkZHIpCiAKIAlyZXR1cm4gcmV0OwogfQorCit1NjQgb2Zf dHJhbnNsYXRlX2RtYV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBjb25zdCBfX2Jl MzIgKmluX2FkZHIpCit7CisJcHJfZGVidWcoIioqIHRyYW5zbGF0aW9uIGZvciBkZXZpY2UgJXBP RiAqKlxuIiwgZGV2KTsKKworCXJldHVybiBvZl90cmFuc2xhdGVfZG1hX2FkZHJlc3NfcGFyZW50 KF9fb2ZfZ2V0X2RtYV9wYXJlbnQoZGV2LT5wYXJlbnQpLAorCQkJCQkgICAgICAgaW5fYWRkcik7 Cit9CiBFWFBPUlRfU1lNQk9MKG9mX3RyYW5zbGF0ZV9kbWFfYWRkcmVzcyk7CiAKIGNvbnN0IF9f YmUzMiAqb2ZfZ2V0X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwg dTY0ICpzaXplLApAQCAtNzU5LDggKzc2OSwxMCBAQCBzdGF0aWMgdTY0IG9mX3RyYW5zbGF0ZV9p b3BvcnQoc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGNvbnN0IF9fYmUzMiAqaW5fYWRkciwKIAl1 bnNpZ25lZCBsb25nIHBvcnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpob3N0OwogCi0JdGFkZHIg PSBfX29mX3RyYW5zbGF0ZV9hZGRyZXNzKGRldiwgb2ZfZ2V0X3BhcmVudCwKLQkJCQkgICAgICAg aW5fYWRkciwgInJhbmdlcyIsICZob3N0KTsKKwlwcl9kZWJ1ZygiKiogdHJhbnNsYXRpb24gZm9y IGRldmljZSAlcE9GICoqXG4iLCBkZXYpOworCisJdGFkZHIgPSBfX29mX3RyYW5zbGF0ZV9hZGRy ZXNzX3BhcmVudChkZXYtPnBhcmVudCwgb2ZfZ2V0X3BhcmVudCwKKwkJCQkJICAgICAgaW5fYWRk ciwgInJhbmdlcyIsICZob3N0KTsKIAlpZiAoaG9zdCkgewogCQkvKiBob3N0LXNwZWNpZmljIHBv cnQgYWNjZXNzICovCiAJCXBvcnQgPSBsb2dpY19waW9fdHJhbnNfaHdhZGRyKCZob3N0LT5md25v ZGUsIHRhZGRyLCBzaXplKTsKLS0gCjIuMjMuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWw=