From patchwork Mon Feb 26 16:40:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 129689 Delivered-To: patch@linaro.org Received: by 10.80.172.228 with SMTP id x91csp3973775edc; Mon, 26 Feb 2018 07:50:17 -0800 (PST) X-Google-Smtp-Source: AH8x226WT3GvruG809Ua18Do+YEBE53b1hQqy3K3iONZwXGA/1HUuk/gfwtmVkolejouzo58mXeh X-Received: by 2002:a17:902:22e:: with SMTP id 43-v6mr11106651plc.384.1519660217398; Mon, 26 Feb 2018 07:50:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519660217; cv=none; d=google.com; s=arc-20160816; b=mAFBf1AT4nhyiWxntapNd9n51sOAse2dX1Ij2+1uPpczjq/O1m/fD+Z5x2vAjaTIak 5ofWzjYHj+aXgaDn0aa+ILoAInmxqxcSoYnWkB91tzCqP6OaD84lNBQGCptxfO24hhl1 aiZOSh1XLzlUR3KmPZyqNkvnoQQ5QbUKCGM+PsfvS2TPpRk3jAmBW6E/aolfaKRMMhq+ Zx0Ze+zXM0WsgIpbmeYEeoVN7FoNl9auGfTNfv8+xd0xnW2J3iicvSXJ22xQzD8ByGIL GY9OOkbPmtuF4lByF3WVOFi6j58dBLK15/3MlUAe8JR3XG7sfmTxM/eW0YAmoWx+YGjN xGdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=GmxRgKV2h1ZZIuT7tn+OTmC+vSWN5WsGTqevRu74q9s=; b=XKznRTyGHbGFIN2r3axF1Uf21G3smTnTJWRtJiHgfGOYIh7t6mLg6tK2CiN143fZ8y kU0cuaezVZmCQfm2OLZ18Ltr78CPmhZ8RCy4kLgoJtU79c1jQnOPdKHwI9+tf2lP9+pW UNcgp+vRIyn5fipdj2lgyEwcogRrlEON3ZFIt87ezufdS+Jsv75+0a/dQmXDZrjGhU/K rzNtkWUDftWOmx7pbW+NZ3uLyF0zzambT295aw8/LB++Org/zG9pa3DMI9iSGBX3t21j uWvLA6fVigqPC4+H0vUQyI5UPFMJ5bb6bmfsgE9QZN0o6TtV7k6gjHAwkWaKdK2VDY6s 2MZg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n4si204514pgt.712.2018.02.26.07.50.17; Mon, 26 Feb 2018 07:50:17 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751954AbeBZPuP (ORCPT + 8 others); Mon, 26 Feb 2018 10:50:15 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:49599 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751707AbeBZPuN (ORCPT ); Mon, 26 Feb 2018 10:50:13 -0500 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 871E1C371804A; Mon, 26 Feb 2018 23:50:06 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.361.1; Mon, 26 Feb 2018 23:49:59 +0800 From: John Garry To: , , , , , , , , , , , , , CC: , , , , , , , , , , , , , Subject: [PATCH v15 5/9] OF: Add missing I/O range exception for indirect-IO devices Date: Tue, 27 Feb 2018 00:40:45 +0800 Message-ID: <1519663249-9850-6-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1519663249-9850-1-git-send-email-john.garry@huawei.com> References: <1519663249-9850-1-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org From: Zhichang Yuan There are some special ISA/LPC devices that work on a specific I/O range where it is not correct to specify a 'ranges' property in DTS parent node as CPU addresses translated from DTS node are only for memory space on some architectures, such as Arm64. Without the parent 'ranges' property, current of_translate_address() return an error. Here we add special handling for this case. During the OF address translation, some checking will be performed to identify whether the device node is registered as indirect-IO. If yes, the I/O translation will be done in a different way from that one of PCI MMIO. In this way, the I/O 'reg' property of the special ISA/LPC devices will be parsed correctly. Signed-off-by: Zhichang Yuan Signed-off-by: Gabriele Paoloni Signed-off-by: Arnd Bergmann #earlier draft Acked-by: Rob Herring Andy Shevchenko Tested-by: dann frazier --- drivers/of/address.c | 92 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 16 deletions(-) -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/of/address.c b/drivers/of/address.c index cdf047b..c434f659 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -562,9 +563,14 @@ static int of_translate_one(struct device_node *parent, struct of_bus *bus, * that translation is impossible (that is we are not dealing with a value * that can be mapped to a cpu physical address). This is not really specified * that way, but this is traditionally the way IBM at least do things + * + * Whenever the translation fails, the *host pointer will be set to the + * 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, - const __be32 *in_addr, const char *rprop) + const __be32 *in_addr, const char *rprop, + struct device_node **host) { struct device_node *parent = NULL; struct of_bus *bus, *pbus; @@ -577,6 +583,7 @@ static u64 __of_translate_address(struct device_node *dev, /* Increase refcount at current level */ of_node_get(dev); + *host = NULL; /* Get parent & match bus type */ parent = of_get_parent(dev); if (parent == NULL) @@ -597,6 +604,8 @@ static u64 __of_translate_address(struct device_node *dev, /* Translate */ for (;;) { + struct logic_pio_hwaddr *iorange; + /* Switch to parent bus */ of_node_put(dev); dev = parent; @@ -609,6 +618,19 @@ static u64 __of_translate_address(struct device_node *dev, break; } + /* + * For indirectIO device which has no ranges property, get + * the address from reg directly. + */ + iorange = find_io_range_by_fwnode(&dev->fwnode); + if (iorange && (iorange->flags != LOGIC_PIO_CPU_MMIO)) { + result = of_read_number(addr + 1, na - 1); + pr_debug("indirectIO matched(%pOF) 0x%llx\n", + dev, result); + *host = of_node_get(dev); + break; + } + /* Get new parent bus and counts */ pbus = of_match_bus(parent); pbus->count_cells(dev, &pna, &pns); @@ -640,13 +662,32 @@ static u64 __of_translate_address(struct device_node *dev, u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) { - return __of_translate_address(dev, in_addr, "ranges"); + struct device_node *host; + u64 ret; + + ret = __of_translate_address(dev, in_addr, "ranges", &host); + if (host) { + of_node_put(host); + return OF_BAD_ADDR; + } + + return ret; } EXPORT_SYMBOL(of_translate_address); u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr) { - return __of_translate_address(dev, in_addr, "dma-ranges"); + struct device_node *host; + u64 ret; + + ret = __of_translate_address(dev, in_addr, "dma-ranges", &host); + + if (host) { + of_node_put(host); + return OF_BAD_ADDR; + } + + return ret; } EXPORT_SYMBOL(of_translate_dma_address); @@ -688,29 +729,48 @@ const __be32 *of_get_address(struct device_node *dev, int index, u64 *size, } EXPORT_SYMBOL(of_get_address); +static u64 of_translate_ioport(struct device_node *dev, const __be32 *in_addr, + u64 size) +{ + u64 taddr; + unsigned long port; + struct device_node *host; + + taddr = __of_translate_address(dev, in_addr, "ranges", &host); + if (host) { + /* host specific port access */ + port = logic_pio_trans_hwaddr(&host->fwnode, taddr, size); + of_node_put(host); + } else { + /* memory mapped I/O range */ + port = pci_address_to_pio(taddr); + } + + if (port == (unsigned long)-1) + return OF_BAD_ADDR; + + return port; +} + static int __of_address_to_resource(struct device_node *dev, const __be32 *addrp, u64 size, unsigned int flags, const char *name, struct resource *r) { u64 taddr; - if ((flags & (IORESOURCE_IO | IORESOURCE_MEM)) == 0) + if (flags & IORESOURCE_MEM) + taddr = of_translate_address(dev, addrp); + else if (flags & IORESOURCE_IO) + taddr = of_translate_ioport(dev, addrp, size); + else return -EINVAL; - taddr = of_translate_address(dev, addrp); + if (taddr == OF_BAD_ADDR) return -EINVAL; memset(r, 0, sizeof(struct resource)); - if (flags & IORESOURCE_IO) { - unsigned long port; - port = pci_address_to_pio(taddr); - if (port == (unsigned long)-1) - return -EINVAL; - r->start = port; - r->end = port + size - 1; - } else { - r->start = taddr; - r->end = taddr + size - 1; - } + + r->start = taddr; + r->end = taddr + size - 1; r->flags = flags; r->name = name ? name : dev->full_name; From patchwork Mon Feb 26 16:40:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Garry X-Patchwork-Id: 129690 Delivered-To: patch@linaro.org Received: by 10.80.172.228 with SMTP id x91csp3973834edc; Mon, 26 Feb 2018 07:50:20 -0800 (PST) X-Google-Smtp-Source: AH8x2245QR2UXzh1a2A32+QbMgkFjkbTOzdw61f2Sjz5xmeR1U44DLglFtm0fDCueQ1dQpud3AsF X-Received: by 10.101.90.10 with SMTP id y10mr8763308pgs.34.1519660220626; Mon, 26 Feb 2018 07:50:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519660220; cv=none; d=google.com; s=arc-20160816; b=jYu/t3Hgy4gJvyK3D9xINQ1RFOteB3xAHyynJbbmEiJJTnTxqRHoJkGMRghyz2H5Qr uge4Ebd9gj0vmNdfsIwhc2WFLHrKgKD0ChrRRn7mjoL8BGyXTSjsDB9hlo+9BDI1QTeI iuW+T8JSE0yMmjXjGaiSUlxFsrjI+AWCwXGojOjtBRCI7cAdShuSRd16O0wzCkBx6aQ4 fMXTJNzahHnaIFOnbL6TkMZXP3UTef2RfPqQnCNo2bF/JV2aADDwhToZf1a5qCtgwK1h 6wyWVJZ0NNNm4sMf65umtgXOwPNPvnvlv9v2m40sCrQy7ZS3QbvnBhr9Yrv8KsNDiZ3w vIDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=FqnGdUZuPqGKsp8zaippcCuL9OP5k+bTp1WMQXXzD8c=; b=ZpdN6QoLZx/HBGrE40E2izUgsVY/mflXDbJftMC5mi936Ba90a2/uR3DhKdgdClS8B ZdJME6kzUZ1QVTluhAInAJ5HvR9eA+ccQeDsjOgvP4/D4ridEkagTo26iErsbhm76CZS j8spm+YO0bwzlrRrxUNvgTFCWUwV3Xoq5Zktk2vp8xAJwX02qhvShpkSwMpaW0XYDqcZ GnfnjQJuVpmP8i1HLwQ/SwnMuz0d5NzETJ/cowv5v92AinXV8ubbgYtXoG4XM7i+t6h7 uQu3sAfDntXi63pJ8e52OC6n4Hk5rUHeMy6m4vW5e5FPC8sJGi+oi6f6aWq3zxKMQoRy pJbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x2si4268450pfk.231.2018.02.26.07.50.20; Mon, 26 Feb 2018 07:50:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-acpi-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-acpi-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751735AbeBZPuS (ORCPT + 8 others); Mon, 26 Feb 2018 10:50:18 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:49550 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1750969AbeBZPuO (ORCPT ); Mon, 26 Feb 2018 10:50:14 -0500 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 28ED5A91BE545; Mon, 26 Feb 2018 23:50:06 +0800 (CST) Received: from localhost.localdomain (10.67.212.75) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.361.1; Mon, 26 Feb 2018 23:50:01 +0800 From: John Garry To: , , , , , , , , , , , , , CC: , , , , , , , , , , , , , Subject: [PATCH v15 9/9] MAINTAINERS: Add maintainer for HiSilicon LPC driver Date: Tue, 27 Feb 2018 00:40:49 +0800 Message-ID: <1519663249-9850-10-git-send-email-john.garry@huawei.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1519663249-9850-1-git-send-email-john.garry@huawei.com> References: <1519663249-9850-1-git-send-email-john.garry@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.67.212.75] X-CFilter-Loop: Reflected Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Added maintainer for drivers/bus/hisi_lpc.c Signed-off-by: John Garry --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/MAINTAINERS b/MAINTAINERS index 8c2320e1..ef5c38a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6401,6 +6401,13 @@ W: http://www.hisilicon.com S: Maintained F: drivers/net/ethernet/hisilicon/hns3/ +HISILICON LPC BUS DRIVER +M: john.garry@huawei.com +W: http://www.hisilicon.com +S: Maintained +F: drivers/bus/hisi_lpc.c +F: Documentation/devicetree/bindings/arm/hisilicon/hisilicon-low-pin-count.txt + HISILICON NETWORK SUBSYSTEM DRIVER M: Yisen Zhuang M: Salil Mehta