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 DBCFDC432C2 for ; Tue, 24 Sep 2019 18:13:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C37D121655 for ; Tue, 24 Sep 2019 18:13:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2439740AbfIXSNC (ORCPT ); Tue, 24 Sep 2019 14:13:02 -0400 Received: from mx2.suse.de ([195.135.220.15]:44098 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2439705AbfIXSNB (ORCPT ); Tue, 24 Sep 2019 14:13:01 -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 376C8AC93; Tue, 24 Sep 2019 18:12:58 +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 06/11] of: address: use parent OF node in of_dma_get_range() Date: Tue, 24 Sep 2019 20:12:37 +0200 Message-Id: <20190924181244.7159-7-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 don't have their own OF node, and are stuck passing their bus node. Adapt the function for this use case. Signed-off-by: Nicolas Saenz Julienne --- drivers/of/address.c | 33 +++++++++++++++------------------ drivers/of/device.c | 3 ++- include/linux/of_address.h | 8 ++++---- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index 53666063e938..b7b864b0ac75 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -914,30 +914,21 @@ EXPORT_SYMBOL(of_io_request_and_map); * It returns -ENODEV if "dma-ranges" property was not found * for this device in DT. */ -int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *size) +int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size) { - struct device_node *node = of_node_get(np); + struct device_node *node = of_node_get(parent); const __be32 *ranges = NULL; int naddr, nsize, pna; int ret = 0; u64 dmaaddr; - if (!node) - return -EINVAL; - while (1) { - struct device_node *parent; + struct device_node *tmp; int len; - naddr = of_n_addr_cells(node); - nsize = of_n_size_cells(node); - - parent = __of_get_dma_parent(node); - of_node_put(node); - - node = parent; - if (!node) - break; + naddr = __of_n_addr_cells_parent(node); + nsize = __of_n_size_cells_parent(node); ranges = of_get_property(node, "dma-ranges", &len); @@ -951,10 +942,16 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz */ if (!ranges) break; + + tmp = __of_get_dma_parent(node); + of_node_put(node); + node = tmp; + if (!node) + break; } if (!ranges) { - pr_debug("no dma-ranges found for node(%pOF)\n", np); + pr_debug("no dma-ranges found for node(%pOF)\n", node); ret = -ENODEV; goto out; } @@ -967,10 +964,10 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz * size : nsize cells */ dmaaddr = of_read_number(ranges, naddr); - *paddr = of_translate_dma_address(np, ranges); + *paddr = of_translate_dma_address_parent(parent, ranges); if (*paddr == OF_BAD_ADDR) { pr_err("translation of DMA address(%pad) to CPU address failed node(%pOF)\n", - dma_addr, np); + dma_addr, parent); ret = -EINVAL; goto out; } diff --git a/drivers/of/device.c b/drivers/of/device.c index da8158392010..267b509df517 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c @@ -95,7 +95,8 @@ int of_dma_configure(struct device *dev, struct device_node *np, bool force_dma) const struct iommu_ops *iommu; u64 mask; - ret = of_dma_get_range(np, &dma_addr, &paddr, &size); + ret = of_dma_get_range(__of_get_dma_parent(np), &dma_addr, + &paddr, &size); if (ret < 0) { /* * For legacy reasons, we have to assume some devices need diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 30e40fb6936b..aa1ce0cb59a1 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -55,8 +55,8 @@ extern int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser, extern struct of_pci_range *of_pci_range_parser_one( struct of_pci_range_parser *parser, struct of_pci_range *range); -extern int of_dma_get_range(struct device_node *np, u64 *dma_addr, - u64 *paddr, u64 *size); +extern int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size); extern bool of_dma_is_coherent(struct device_node *np); #else /* CONFIG_OF_ADDRESS */ static inline void __iomem *of_io_request_and_map(struct device_node *device, @@ -104,8 +104,8 @@ static inline struct of_pci_range *of_pci_range_parser_one( return NULL; } -static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr, - u64 *paddr, u64 *size) +static inline int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size) { return -ENODEV; } -- 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 66FB1C432C2 for ; Tue, 24 Sep 2019 18:15:44 +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 41B55214AF for ; Tue, 24 Sep 2019 18:15:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="cGFKJsp+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 41B55214AF 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=4XbaIwb6qwQJz8VHtED44ocnx9o33DdKePYR5SeVSTo=; b=cGFKJsp+pK7iir FSXHKGYCFA6R2Cd9CXQqURu7yRz9jQ7RV2TdcJ/U7742wKyILRcGjODLkrOnaU27ZcJtxXFUCAonM xuWJ6xDk7wJwPEaQ7J2nxC91+Ioe9LZyYr5IiXFjZN6C/W0Z1YypTwnScheqmuVa3xoPwVGhE5xjA CH+Fudhx2ngavwZ9MIU1zc4hMizuxVz9Xei+6GlZISsEEMPFxPD5hHoqA8OI0+5eZZ03ah8kRdHeI QfawYhMC4Tni5HVQbgIiMGDDUKE5azXIf1JKPmcx+bsnZEE1VJBRmdWTKOgivYv7WSYXfkAONPWx1 2Icqvpbg/+uTnuYA2KsQ==; 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 1iCpLj-00068o-ER; Tue, 24 Sep 2019 18:15:43 +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 1iCpJ5-00037X-Hm for linux-arm-kernel@lists.infradead.org; Tue, 24 Sep 2019 18:13:01 +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 376C8AC93; Tue, 24 Sep 2019 18:12:58 +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 06/11] of: address: use parent OF node in of_dma_get_range() Date: Tue, 24 Sep 2019 20:12:37 +0200 Message-Id: <20190924181244.7159-7-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_111300_052223_D197E24E X-CRM114-Status: GOOD ( 13.50 ) 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 don't have their own OF node, and are stuck passing their bus node. Adapt the function for this use case. Signed-off-by: Nicolas Saenz Julienne --- drivers/of/address.c | 33 +++++++++++++++------------------ drivers/of/device.c | 3 ++- include/linux/of_address.h | 8 ++++---- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index 53666063e938..b7b864b0ac75 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -914,30 +914,21 @@ EXPORT_SYMBOL(of_io_request_and_map); * It returns -ENODEV if "dma-ranges" property was not found * for this device in DT. */ -int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *size) +int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size) { - struct device_node *node = of_node_get(np); + struct device_node *node = of_node_get(parent); const __be32 *ranges = NULL; int naddr, nsize, pna; int ret = 0; u64 dmaaddr; - if (!node) - return -EINVAL; - while (1) { - struct device_node *parent; + struct device_node *tmp; int len; - naddr = of_n_addr_cells(node); - nsize = of_n_size_cells(node); - - parent = __of_get_dma_parent(node); - of_node_put(node); - - node = parent; - if (!node) - break; + naddr = __of_n_addr_cells_parent(node); + nsize = __of_n_size_cells_parent(node); ranges = of_get_property(node, "dma-ranges", &len); @@ -951,10 +942,16 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz */ if (!ranges) break; + + tmp = __of_get_dma_parent(node); + of_node_put(node); + node = tmp; + if (!node) + break; } if (!ranges) { - pr_debug("no dma-ranges found for node(%pOF)\n", np); + pr_debug("no dma-ranges found for node(%pOF)\n", node); ret = -ENODEV; goto out; } @@ -967,10 +964,10 @@ int of_dma_get_range(struct device_node *np, u64 *dma_addr, u64 *paddr, u64 *siz * size : nsize cells */ dmaaddr = of_read_number(ranges, naddr); - *paddr = of_translate_dma_address(np, ranges); + *paddr = of_translate_dma_address_parent(parent, ranges); if (*paddr == OF_BAD_ADDR) { pr_err("translation of DMA address(%pad) to CPU address failed node(%pOF)\n", - dma_addr, np); + dma_addr, parent); ret = -EINVAL; goto out; } diff --git a/drivers/of/device.c b/drivers/of/device.c index da8158392010..267b509df517 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c @@ -95,7 +95,8 @@ int of_dma_configure(struct device *dev, struct device_node *np, bool force_dma) const struct iommu_ops *iommu; u64 mask; - ret = of_dma_get_range(np, &dma_addr, &paddr, &size); + ret = of_dma_get_range(__of_get_dma_parent(np), &dma_addr, + &paddr, &size); if (ret < 0) { /* * For legacy reasons, we have to assume some devices need diff --git a/include/linux/of_address.h b/include/linux/of_address.h index 30e40fb6936b..aa1ce0cb59a1 100644 --- a/include/linux/of_address.h +++ b/include/linux/of_address.h @@ -55,8 +55,8 @@ extern int of_pci_dma_range_parser_init(struct of_pci_range_parser *parser, extern struct of_pci_range *of_pci_range_parser_one( struct of_pci_range_parser *parser, struct of_pci_range *range); -extern int of_dma_get_range(struct device_node *np, u64 *dma_addr, - u64 *paddr, u64 *size); +extern int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size); extern bool of_dma_is_coherent(struct device_node *np); #else /* CONFIG_OF_ADDRESS */ static inline void __iomem *of_io_request_and_map(struct device_node *device, @@ -104,8 +104,8 @@ static inline struct of_pci_range *of_pci_range_parser_one( return NULL; } -static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr, - u64 *paddr, u64 *size) +static inline int of_dma_get_range(struct device_node *parent, u64 *dma_addr, + u64 *paddr, u64 *size) { return -ENODEV; } -- 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 EA601C4360C for ; Wed, 25 Sep 2019 04:16:34 +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 C490421655 for ; Wed, 25 Sep 2019 04:16:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C490421655 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 1iCyj3-0000UC-JV; Wed, 25 Sep 2019 04:16:25 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iCpJJ-0000GV-EJ for xen-devel@lists.xenproject.org; Tue, 24 Sep 2019 18:13:13 +0000 X-Inumbo-ID: f03d052a-def6-11e9-8628-bc764e2007e4 Received: from mx1.suse.de (unknown [195.135.220.15]) by localhost (Halon) with ESMTPS id f03d052a-def6-11e9-8628-bc764e2007e4; Tue, 24 Sep 2019 18:12:59 +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 376C8AC93; Tue, 24 Sep 2019 18:12:58 +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:37 +0200 Message-Id: <20190924181244.7159-7-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 06/11] of: address: use parent OF node in of_dma_get_range() 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" U29tZSBkZXZpY2VzIGRvbid0IGhhdmUgdGhlaXIgb3duIE9GIG5vZGUsIGFuZCBhcmUgc3R1Y2sg cGFzc2luZyB0aGVpcgpidXMgbm9kZS4gQWRhcHQgdGhlIGZ1bmN0aW9uIGZvciB0aGlzIHVzZSBj YXNlLgoKU2lnbmVkLW9mZi1ieTogTmljb2xhcyBTYWVueiBKdWxpZW5uZSA8bnNhZW56anVsaWVu bmVAc3VzZS5kZT4KLS0tCgogZHJpdmVycy9vZi9hZGRyZXNzLmMgICAgICAgfCAzMyArKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvb2YvZGV2aWNlLmMgICAgICAgIHwg IDMgKystCiBpbmNsdWRlL2xpbnV4L29mX2FkZHJlc3MuaCB8ICA4ICsrKystLS0tCiAzIGZpbGVz IGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvb2YvYWRkcmVzcy5jIGIvZHJpdmVycy9vZi9hZGRyZXNzLmMKaW5kZXggNTM2NjYw NjNlOTM4Li5iN2I4NjRiMGFjNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvYWRkcmVzcy5jCisr KyBiL2RyaXZlcnMvb2YvYWRkcmVzcy5jCkBAIC05MTQsMzAgKzkxNCwyMSBAQCBFWFBPUlRfU1lN Qk9MKG9mX2lvX3JlcXVlc3RfYW5kX21hcCk7CiAgKiBJdCByZXR1cm5zIC1FTk9ERVYgaWYgImRt YS1yYW5nZXMiIHByb3BlcnR5IHdhcyBub3QgZm91bmQKICAqIGZvciB0aGlzIGRldmljZSBpbiBE VC4KICAqLwotaW50IG9mX2RtYV9nZXRfcmFuZ2Uoc3RydWN0IGRldmljZV9ub2RlICpucCwgdTY0 ICpkbWFfYWRkciwgdTY0ICpwYWRkciwgdTY0ICpzaXplKQoraW50IG9mX2RtYV9nZXRfcmFuZ2Uo c3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIHU2NCAqZG1hX2FkZHIsCisJCSAgICAgdTY0ICpw YWRkciwgdTY0ICpzaXplKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IG9mX25vZGVf Z2V0KG5wKTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBvZl9ub2RlX2dldChwYXJlbnQp OwogCWNvbnN0IF9fYmUzMiAqcmFuZ2VzID0gTlVMTDsKIAlpbnQgbmFkZHIsIG5zaXplLCBwbmE7 CiAJaW50IHJldCA9IDA7CiAJdTY0IGRtYWFkZHI7CiAKLQlpZiAoIW5vZGUpCi0JCXJldHVybiAt RUlOVkFMOwotCiAJd2hpbGUgKDEpIHsKLQkJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CisJ CXN0cnVjdCBkZXZpY2Vfbm9kZSAqdG1wOwogCQlpbnQgbGVuOwogCi0JCW5hZGRyID0gb2Zfbl9h ZGRyX2NlbGxzKG5vZGUpOwotCQluc2l6ZSA9IG9mX25fc2l6ZV9jZWxscyhub2RlKTsKLQotCQlw YXJlbnQgPSBfX29mX2dldF9kbWFfcGFyZW50KG5vZGUpOwotCQlvZl9ub2RlX3B1dChub2RlKTsK LQotCQlub2RlID0gcGFyZW50OwotCQlpZiAoIW5vZGUpCi0JCQlicmVhazsKKwkJbmFkZHIgPSBf X29mX25fYWRkcl9jZWxsc19wYXJlbnQobm9kZSk7CisJCW5zaXplID0gX19vZl9uX3NpemVfY2Vs bHNfcGFyZW50KG5vZGUpOwogCiAJCXJhbmdlcyA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAiZG1h LXJhbmdlcyIsICZsZW4pOwogCkBAIC05NTEsMTAgKzk0MiwxNiBAQCBpbnQgb2ZfZG1hX2dldF9y YW5nZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1NjQgKmRtYV9hZGRyLCB1NjQgKnBhZGRyLCB1 NjQgKnNpegogCQkgKi8KIAkJaWYgKCFyYW5nZXMpCiAJCQlicmVhazsKKworCQl0bXAgPSBfX29m X2dldF9kbWFfcGFyZW50KG5vZGUpOworCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJbm9kZSA9IHRt cDsKKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CiAJfQogCiAJaWYgKCFyYW5nZXMpIHsKLQkJcHJf ZGVidWcoIm5vIGRtYS1yYW5nZXMgZm91bmQgZm9yIG5vZGUoJXBPRilcbiIsIG5wKTsKKwkJcHJf ZGVidWcoIm5vIGRtYS1yYW5nZXMgZm91bmQgZm9yIG5vZGUoJXBPRilcbiIsIG5vZGUpOwogCQly ZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CkBAIC05NjcsMTAgKzk2NCwxMCBAQCBpbnQg b2ZfZG1hX2dldF9yYW5nZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCB1NjQgKmRtYV9hZGRyLCB1 NjQgKnBhZGRyLCB1NjQgKnNpegogCSAqIHNpemUJCTogbnNpemUgY2VsbHMKIAkgKi8KIAlkbWFh ZGRyID0gb2ZfcmVhZF9udW1iZXIocmFuZ2VzLCBuYWRkcik7Ci0JKnBhZGRyID0gb2ZfdHJhbnNs YXRlX2RtYV9hZGRyZXNzKG5wLCByYW5nZXMpOworCSpwYWRkciA9IG9mX3RyYW5zbGF0ZV9kbWFf YWRkcmVzc19wYXJlbnQocGFyZW50LCByYW5nZXMpOwogCWlmICgqcGFkZHIgPT0gT0ZfQkFEX0FE RFIpIHsKIAkJcHJfZXJyKCJ0cmFuc2xhdGlvbiBvZiBETUEgYWRkcmVzcyglcGFkKSB0byBDUFUg YWRkcmVzcyBmYWlsZWQgbm9kZSglcE9GKVxuIiwKLQkJICAgICAgIGRtYV9hZGRyLCBucCk7CisJ CSAgICAgICBkbWFfYWRkciwgcGFyZW50KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7 CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9kZXZpY2UuYyBiL2RyaXZlcnMvb2YvZGV2aWNl LmMKaW5kZXggZGE4MTU4MzkyMDEwLi4yNjdiNTA5ZGY1MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv b2YvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9vZi9kZXZpY2UuYwpAQCAtOTUsNyArOTUsOCBAQCBp bnQgb2ZfZG1hX2NvbmZpZ3VyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAsIGJvb2wgZm9yY2VfZG1hKQogCWNvbnN0IHN0cnVjdCBpb21tdV9vcHMgKmlvbW11Owog CXU2NCBtYXNrOwogCi0JcmV0ID0gb2ZfZG1hX2dldF9yYW5nZShucCwgJmRtYV9hZGRyLCAmcGFk ZHIsICZzaXplKTsKKwlyZXQgPSBvZl9kbWFfZ2V0X3JhbmdlKF9fb2ZfZ2V0X2RtYV9wYXJlbnQo bnApLCAmZG1hX2FkZHIsCisJCQkgICAgICAgJnBhZGRyLCAmc2l6ZSk7CiAJaWYgKHJldCA8IDAp IHsKIAkJLyoKIAkJICogRm9yIGxlZ2FjeSByZWFzb25zLCB3ZSBoYXZlIHRvIGFzc3VtZSBzb21l IGRldmljZXMgbmVlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZl9hZGRyZXNzLmggYi9p bmNsdWRlL2xpbnV4L29mX2FkZHJlc3MuaAppbmRleCAzMGU0MGZiNjkzNmIuLmFhMWNlMGNiNTlh MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9hZGRyZXNzLmgKKysrIGIvaW5jbHVkZS9s aW51eC9vZl9hZGRyZXNzLmgKQEAgLTU1LDggKzU1LDggQEAgZXh0ZXJuIGludCBvZl9wY2lfZG1h X3JhbmdlX3BhcnNlcl9pbml0KHN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyICpwYXJzZXIsCiBl eHRlcm4gc3RydWN0IG9mX3BjaV9yYW5nZSAqb2ZfcGNpX3JhbmdlX3BhcnNlcl9vbmUoCiAJCQkJ CXN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyICpwYXJzZXIsCiAJCQkJCXN0cnVjdCBvZl9wY2lf cmFuZ2UgKnJhbmdlKTsKLWV4dGVybiBpbnQgb2ZfZG1hX2dldF9yYW5nZShzdHJ1Y3QgZGV2aWNl X25vZGUgKm5wLCB1NjQgKmRtYV9hZGRyLAotCQkJCXU2NCAqcGFkZHIsIHU2NCAqc2l6ZSk7Citl eHRlcm4gaW50IG9mX2RtYV9nZXRfcmFuZ2Uoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIHU2 NCAqZG1hX2FkZHIsCisJCQkgICAgdTY0ICpwYWRkciwgdTY0ICpzaXplKTsKIGV4dGVybiBib29s IG9mX2RtYV9pc19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKICNlbHNlIC8qIENP TkZJR19PRl9BRERSRVNTICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqb2ZfaW9fcmVx dWVzdF9hbmRfbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLApAQCAtMTA0LDggKzEwNCw4 IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9mX3BjaV9yYW5nZSAqb2ZfcGNpX3JhbmdlX3BhcnNl cl9vbmUoCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG9mX2RtYV9nZXRf cmFuZ2Uoc3RydWN0IGRldmljZV9ub2RlICpucCwgdTY0ICpkbWFfYWRkciwKLQkJCQl1NjQgKnBh ZGRyLCB1NjQgKnNpemUpCitzdGF0aWMgaW5saW5lIGludCBvZl9kbWFfZ2V0X3JhbmdlKHN0cnVj dCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1NjQgKmRtYV9hZGRyLAorCQkJCSAgIHU2NCAqcGFkZHIs IHU2NCAqc2l6ZSkKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KLS0gCjIuMjMuMAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=