From patchwork Thu Feb 13 16:39:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11380805 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C447D921 for ; Thu, 13 Feb 2020 16:40:32 +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 43F9724650 for ; Thu, 13 Feb 2020 16:40:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="VbnkTIrk"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EfmemPcp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 43F9724650 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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=2z1s9zZ7FTuZnzQKuuKBdNCi8gG9FqSmJARRXsPMR8c=; b=VbnkTIrk37VEDW VfP5i8oPDFbAKT4mu4mRIm+WqfuAzI4ZtuBgqDJgs2xQ87XDwzK3glyB5IVm8xwAp222s48sjb0HI eXP1e7b17y7WcLvf6nIrEc1aQpJO6rovBXjauT34CUTFldf4ktY878SgPdu4YifKPYpHNK04CWeBe oZPD5U5emjtgWa7017tA+VplHoEkkIDlf2HgNZPhgk8/wyO4hYDW4hUvuocQGei09FA6uQW0DAxnn Y/2H0nsgRcOcabrU7ygBBK5lJEGJB5OWrYh9OjwxBo7XwUS5T4g2jI5PImyCHrUZ63OWH09M33vtB lIWg0Ar4YzuZZzfyhw6w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXL-0000cq-Ju; Thu, 13 Feb 2020 16:40:23 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXA-0000Qq-RL for linux-arm-kernel@lists.infradead.org; Thu, 13 Feb 2020 16:40:14 +0000 Received: by mail-wr1-x444.google.com with SMTP id w12so7515871wrt.2 for ; Thu, 13 Feb 2020 08:40:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=p2uFK6KKYdYtPUVDDYy0uzQtv76HpgnZNeuTDoj+jDo=; b=EfmemPcpI15FP/1eISeFgDAvHIXtZK3NjmSai3nK0kaddNyEb3kwxnYrMueDFUUeu5 QZXPsxXUeKhm+I1xCUtqKpNbEFUrRG+W0xnv9+iBYhvw1HpaDj0XzuMIuU/41vpkdzJy 2Zj7VZOOpDYX3rwrl969E0vMCN1vCDTSoomL1riWQ8I/nfkbsyPpQPHk/9t4CKyWXdOt 8tnkI+e1GwURyuaF0LvmZJ5sU7PJHVxEG0McRg1k/sEyxCUcu6IlSzj+OQI2ZYRB6jLx npIlIBX0yaq9tDFy67rke6kHOCkCnJTuIipXoJgzFEzoUgiqxbw9615ulXtKQT3DQhXK /EEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p2uFK6KKYdYtPUVDDYy0uzQtv76HpgnZNeuTDoj+jDo=; b=TljMHr75NlXokyBEXxQxftgf84nDXGmwLFod+yYETEFDlmrKif0xWCLuAn139vmhUY QHYBtznumU9vvIvtKAFbnd3Sb1G46EakUPlVoycru+yVp1YYMCYhXDKAIpV6jQMaMhym Poc4vBmvcBseVLSVOpqdHsxol8P2NtciS759EDbfk0eNRDZ3NavDXYYgfaBtqeQOVPO1 o4zsS6vmxK0uHm7BS7MATUF6u9wx+hXxE5zQi4PAdqRpZqZykbdkGXanm2IaUjhcKol4 FBSvNBIBvSo8lU09O0XHr7/4xrj22r9ADgSk5AfX/QC5PA6JWJwrdPXfoxz76nukCLVU iXOQ== X-Gm-Message-State: APjAAAX5z2jNfMJH9Dr9nyT22jxjfGUOv3lcLr5cIRCqhjxIkUogDG63 69JrA4xWJj4QYPFOZ+bs01HaQO23 X-Google-Smtp-Source: APXvYqx8VQjaga8fOGZZT0G2o0Kvfo0ucpKfM5avVBwqi0khvmBAtSsPumSuFOqEEXt3q4LjhRwyEg== X-Received: by 2002:a5d:5403:: with SMTP id g3mr23784994wrv.302.1581612010365; Thu, 13 Feb 2020 08:40:10 -0800 (PST) Received: from localhost (p2E5BEF3F.dip0.t-ipconnect.de. [46.91.239.63]) by smtp.gmail.com with ESMTPSA id o4sm3454944wrx.25.2020.02.13.08.40.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 08:40:08 -0800 (PST) From: Thierry Reding To: Arnd Bergmann , Will Deacon , Robin Murphy , Rob Herring Subject: [PATCH v4 1/5] dt-bindings: Add memory controller bindings Date: Thu, 13 Feb 2020 17:39:55 +0100 Message-Id: <20200213163959.819733-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200213163959.819733-1-thierry.reding@gmail.com> References: <20200213163959.819733-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200213_084012_918646_3D47F875 X-CRM114-Status: GOOD ( 15.40 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:444 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [thierry.reding[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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: Joerg Roedel , linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, Olof Johansson , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org From: Thierry Reding Add the DT schema for memory controller and consumer bindings. Signed-off-by: Thierry Reding --- .../bindings/memory-controllers/consumer.yaml | 14 ++++++++ .../memory-controllers/memory-controller.yaml | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 Documentation/devicetree/bindings/memory-controllers/consumer.yaml create mode 100644 Documentation/devicetree/bindings/memory-controllers/memory-controller.yaml diff --git a/Documentation/devicetree/bindings/memory-controllers/consumer.yaml b/Documentation/devicetree/bindings/memory-controllers/consumer.yaml new file mode 100644 index 000000000000..7b71a6110c51 --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/consumer.yaml @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/memory-controllers/consumer.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Common memory controller consumer binding + +maintainers: + - Thierry Reding + +properties: + memory-controller: + $ref: /schemas/types.yaml#/definitions/phandle-array diff --git a/Documentation/devicetree/bindings/memory-controllers/memory-controller.yaml b/Documentation/devicetree/bindings/memory-controllers/memory-controller.yaml new file mode 100644 index 000000000000..26257a666c3c --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/memory-controller.yaml @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/memory-controllers/memory-controller.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Common memory controller binding + +maintainers: + - Thierry Reding + +description: | + The memory access hierarchy in a modern device can be fairly complicated. + Accesses to system memory typically end up going through a memory controller + that ensures that data is stored. Along the way, these accesses can undergo + classification and be prioritized and/or arbitrated. + + The interconnect bindings (see ../interconnect/interconnect.txt) provides a + way of describing the data paths between devices and system memory. However + these interconnect paths, in order to be most flexible, describe the paths + in a very fine-grained way, so situations can arise where it is no longer + possible to derive a unique memory parent for any given device. + + In order to remove such potential ambiguities, a memory controller can be + specified in device tree. A memory controller specified in this way will be + used as the DMA parent for a given device. The memory controller defines a + memory bus via the "dma-ranges" property, which will in turn be used to set + the range of memory accessible to DMA children of the memory controller. + +properties: + "#memory-controller-cells": true + dma-ranges: true From patchwork Thu Feb 13 16:39:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11380807 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AF74C13A4 for ; Thu, 13 Feb 2020 16:40:52 +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 8D4C02467C for ; Thu, 13 Feb 2020 16:40:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="JM7q95R6"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RSxmEE/j" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8D4C02467C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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=bO0gnbV2+51dhADcmYk/qnYssvIr4mG/SmJMjbLT4Qw=; b=JM7q95R6Xb8zVi 3rKkmbXz0r0mg7jyUr0hCfjhVl2DgeaCnse54vVyEtsGmTrzsDGlVPz12QcQSBGDzG2RbagVU1Ivg qo3oSynPFFO61zX5jYvt4q/EGeH99ED/Wc0jigIK9zEosRw92/YZBY4VS3yqKb/NqMxyFKvXFzBPy jxqWFTd7GdmvVYPb0xjufX9hiTfsYENPhwUl441naeURWHRxanPevg0c+aFv522U21OzffeYw0P64 yBitF0ZwERE+h4+veWx2Ylv8qjaNQ6vUUoYedauBGSiT7Er1SkV3qY3rcrcXxy1ZA4AkXfeSp9vfo cU5olOi5lfHLXM7pPTWQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXi-0000wd-BZ; Thu, 13 Feb 2020 16:40:46 +0000 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXB-0000RA-EC for linux-arm-kernel@lists.infradead.org; Thu, 13 Feb 2020 16:40:16 +0000 Received: by mail-wm1-x344.google.com with SMTP id b17so7517939wmb.0 for ; Thu, 13 Feb 2020 08:40:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WYs51DTWcpY/Z0Mrusx8O/2oW5iuRXCgerYN0ZZKm9Y=; b=RSxmEE/jHbfX+qZPdrlhKUfzfZB0bOqYvOreeIMwy4VplOCTAPR6mhE8oQfjshT1U9 5vYdcMghcYmzE4iAQHAUxqnfxAhfDHq63+XWobt34fNdDBrHbkXZ1okFQy3xLwbinAdO t4yRTBfxS7O9wiBOKiCCIjuvS4Pw2s8DYtvTJuIMZKkDtLy77EAdqJPzrGO0LdI/tdas adTfiqeBzrx/DvG6UZxpPKOHhR+hJF4T6CxRxiVsbTQo6tjfE286KoXQvV0IRHI27OTl SGovm73hq2DEDoElDGTDLsZPGcLCdRzEFSwfRkA1nfQc/ui+1CBhTG1bqmZMgTipkVHO v3TQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WYs51DTWcpY/Z0Mrusx8O/2oW5iuRXCgerYN0ZZKm9Y=; b=tQO3NsiE1ReUhyzEVtyddlFLvJdEEizhxHxZX3rKjUyOcBZo3qwgkft5cI05DQnxdi E5FUUZozrPVCx/I22sw87y4ectY13e5/gjgNQhJ7kDM7PbjnxWO1GPJeGi3hzRcYkFXP Z1TCuROXbyH1ewDkbKsM2VhHuhedVa+hazTDDwDwYOEjgC0cntVh+HSNEaV1gdHJoETE UuD77Ewq6y5DuUTv72zF57Q1fBbBN8at23iHNlclS8NpzX4ZRsaqVzwW4aOMs+t/xjwx KLfiSBWmsD6TYd5yCdzVubj5WNQB4gZn29rE1vFbDLyCSSWI2XIz/cu+Kat9ddREOsJV VC6Q== X-Gm-Message-State: APjAAAXs+aRd9LzWCejsopIwr6LX/TDh32joOeZhRQNXqrT2UnWhForU awWWagwNaVDGfZHU4KCcNLQ= X-Google-Smtp-Source: APXvYqw7j8Tekzs4LcNAuJ1ri+Mrd+LCBOLE2GE/xwhUFmLwrvqbghwhx63vfIvD8Gy3IDaZ3tHtcw== X-Received: by 2002:a1c:e007:: with SMTP id x7mr6518555wmg.3.1581612012009; Thu, 13 Feb 2020 08:40:12 -0800 (PST) Received: from localhost (p2E5BEF3F.dip0.t-ipconnect.de. [46.91.239.63]) by smtp.gmail.com with ESMTPSA id q1sm3347264wrw.5.2020.02.13.08.40.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 08:40:11 -0800 (PST) From: Thierry Reding To: Arnd Bergmann , Will Deacon , Robin Murphy , Rob Herring Subject: [PATCH v4 2/5] of: Use memory-controllers property for DMA parent Date: Thu, 13 Feb 2020 17:39:56 +0100 Message-Id: <20200213163959.819733-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200213163959.819733-1-thierry.reding@gmail.com> References: <20200213163959.819733-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200213_084013_517644_FB9B4CB5 X-CRM114-Status: GOOD ( 14.51 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:344 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [thierry.reding[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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: Joerg Roedel , linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, Olof Johansson , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org From: Thierry Reding Prefer the memory-controllers property to determine the DMA parent of a device over the interconnects property, which can be ambiguous since it can be used to describe multiple paths to system memory. Signed-off-by: Thierry Reding --- drivers/of/address.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/of/address.c b/drivers/of/address.c index e8a39c3ec4d4..ae841bd36bb0 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -697,17 +697,24 @@ static struct device_node *__of_get_dma_parent(const struct device_node *np) struct of_phandle_args args; int ret, index; - index = of_property_match_string(np, "interconnect-names", "dma-mem"); - if (index < 0) - return of_get_parent(np); + ret = of_parse_phandle_with_args(np, "memory-controllers", + "#memory-controller-cells", + 0, &args); + if (!ret) { + return of_node_get(args.np); + } - ret = of_parse_phandle_with_args(np, "interconnects", - "#interconnect-cells", - index, &args); - if (ret < 0) - return of_get_parent(np); + index = of_property_match_string(np, "interconnect-names", "dma-mem"); + if (index >= 0) { + ret = of_parse_phandle_with_args(np, "interconnects", + "#interconnect-cells", + index, &args); + if (!ret) { + return of_node_get(args.np); + } + } - return of_node_get(args.np); + return of_get_parent(np); } static struct device_node *of_get_next_dma_parent(struct device_node *np) From patchwork Thu Feb 13 16:39:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11380809 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8605513A4 for ; Thu, 13 Feb 2020 16:41:11 +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 49DAC2082F for ; Thu, 13 Feb 2020 16:41:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="N7iI5tF5"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pm4N8Ii1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 49DAC2082F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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=fJPnGZS2D4yxIvq7DzP+yavek6BWue3a5eYR7N9CzuU=; b=N7iI5tF5WtPJnJ L34HR0M0eSpkn/1HM4KyZ8ED9SiroehbfbdMmjfNWweR12ORI7KD2kMIElnWawFAQsiv7aPJfjjno +dVdukEUCwCqmSiH+JaIfJUjjYYmhGPl1fteo73DVEOID5ibz8hC0NT45S83vnt3Z1Ya+T4Bh7n+i zFoh9FzMqg7R/j45zb+eanrpmFY6UMNTuFl0bnKIN6U73m0bgx7rEuNsInXif5P7Dpyx+ODreM/8p c0KFygpDeJJKB7e+VJNP57IJ9pDv8/tM3TYxbH/QMa9bVUHeB5bJfPcnAkRwlwRuK4UBsYNqo7mH9 ++HNtVvjJGYRWzO3Rz7w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXz-0001Qt-0F; Thu, 13 Feb 2020 16:41:03 +0000 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXD-0000TQ-8u for linux-arm-kernel@lists.infradead.org; Thu, 13 Feb 2020 16:40:17 +0000 Received: by mail-wr1-x443.google.com with SMTP id t3so7499524wru.7 for ; Thu, 13 Feb 2020 08:40:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=w3xvzwyOcTX6jrZCmLPn1xPCdXLA1nzGkBSyRyltXjk=; b=pm4N8Ii165b0PL12/aNBBO5dsYM8aT8KKCzM91JjbkYwNvHB/6EX4CQPfvsbfw5ZqM soIkHHO1hk9pg6Jy/SZrIVazNboCiqilkZbQliAWBBXhpfdpc2rUJedclINykTjcT0uo n+AukqdJAxj6ugTbe8ZfvoK4zx07WeCleRfyXQxAnNctcWsDFAQ9Yb7c5L5tE8iWqw69 p62DM8N16wex4hZ+q0adAW5uJyygpNEVO0nznpRY8xy57ZQeZkyk8wdRxFmIKkLIulml gnpsIXEaCqJqsUaRhMPBxlHeidD9vefcuyZMCN3gw4VbIE/eCwhAmVwP9W3Rq3gByTQa MnVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=w3xvzwyOcTX6jrZCmLPn1xPCdXLA1nzGkBSyRyltXjk=; b=UUZqClsfD1bmeZIZjAfG82eChU/U+ASxlKRomjIcMPFRHvHAp2NuLDukanRxQ3KBZh dzVYqsOoIgkaSalwNxGmT5mctETWy9CVH7JOYJwg3fjPqgw7jlJMY8Q15cPfJh7ASIEY rRUycDtVW3e7L8hrOlN0Md68VTgeH8WC/UgOPzz1bWEYc+Z7N/dq/1c1Ts/hosCggAaO /1j0jSK+DBuSDGuvCrviLh+J+unjK/z5R2u82cS9/XR1XdiK5518mv8yvlbtwJQEnnT3 so2fL5AvYqeO4BdJhK2FUjIRqedmRd7lZ5DvzI2Zlanmc9/9B1g+AnG40ZvhLtL3lZpf P6wg== X-Gm-Message-State: APjAAAUa94evZirAwxvDhH5k5zlpkRZvay90iorzr4eml75i/Qp3/jau blHA/xPuF77rlJKlVmUUHSF/8dBE X-Google-Smtp-Source: APXvYqwAQ8ZhIMvrFsFR4RRaNhv2IV0NL2QgoB1KS82Vk12y4CqKdnUSuXVHDuARmEIGukcWcD/GVA== X-Received: by 2002:adf:f7c6:: with SMTP id a6mr23670566wrq.164.1581612013884; Thu, 13 Feb 2020 08:40:13 -0800 (PST) Received: from localhost (p2E5BEF3F.dip0.t-ipconnect.de. [46.91.239.63]) by smtp.gmail.com with ESMTPSA id w19sm3553724wmc.22.2020.02.13.08.40.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 08:40:12 -0800 (PST) From: Thierry Reding To: Arnd Bergmann , Will Deacon , Robin Murphy , Rob Herring Subject: [PATCH v4 3/5] memory: Introduce memory controller mini-framework Date: Thu, 13 Feb 2020 17:39:57 +0100 Message-Id: <20200213163959.819733-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200213163959.819733-1-thierry.reding@gmail.com> References: <20200213163959.819733-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200213_084015_350356_5F3D57D8 X-CRM114-Status: GOOD ( 25.84 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:443 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [thierry.reding[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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: Joerg Roedel , linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, Olof Johansson , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org From: Thierry Reding This new framework is currently nothing more than a registry of memory controllers, with the goal being to order device probing. One use-case where this is useful, for example, is a memory controller device which needs to program some registers before the system MMU can be enabled. Associating the memory controller with the SMMU allows the SMMU driver to defer the probe until the memory controller has been registered. One such example is Tegra186 where the memory controller contains some registers that are used to program stream IDs for the various memory clients (display, USB, PCI, ...) in the system. Programming these SIDs is required for the memory clients to emit the proper SIDs as part of their memory requests. The memory controller driver therefore needs to be programmed prior to the SMMU driver. To achieve that, the memory controller will be referenced via phandle from the SMMU device tree node, the SMMU driver can then use the memory controller framework to find it and defer probe until it has been registered. Signed-off-by: Thierry Reding --- Changes in v3: - add device-managed variants of the consumer APIs - add kerneldoc Changes in v2: - fix double unlock (Dan Carpenter, kbuild test robot) - add helper to get optional memory controllers - acquire and release module reference drivers/memory/Makefile | 1 + drivers/memory/core.c | 248 ++++++++++++++++++++++++++++++ include/linux/memory-controller.h | 34 ++++ 3 files changed, 283 insertions(+) create mode 100644 drivers/memory/core.c create mode 100644 include/linux/memory-controller.h diff --git a/drivers/memory/Makefile b/drivers/memory/Makefile index 27b493435e61..d16e7dca8ef9 100644 --- a/drivers/memory/Makefile +++ b/drivers/memory/Makefile @@ -3,6 +3,7 @@ # Makefile for memory devices # +obj-y += core.o obj-$(CONFIG_DDR) += jedec_ddr_data.o ifeq ($(CONFIG_DDR),y) obj-$(CONFIG_OF) += of_memory.o diff --git a/drivers/memory/core.c b/drivers/memory/core.c new file mode 100644 index 000000000000..b2fbd2e808de --- /dev/null +++ b/drivers/memory/core.c @@ -0,0 +1,248 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019-2020 NVIDIA Corporation. + */ + +#include +#include +#include + +static DEFINE_MUTEX(controllers_lock); +static LIST_HEAD(controllers); + +static void memory_controller_release(struct kref *ref) +{ + struct memory_controller *mc = container_of(ref, struct memory_controller, ref); + + WARN_ON(!list_empty(&mc->list)); +} + +/** + * memory_controller_register() - register a memory controller + * @mc: memory controller + */ +int memory_controller_register(struct memory_controller *mc) +{ + kref_init(&mc->ref); + + mutex_lock(&controllers_lock); + list_add_tail(&mc->list, &controllers); + mutex_unlock(&controllers_lock); + + return 0; +} +EXPORT_SYMBOL_GPL(memory_controller_register); + +/** + * memory_controller_unregister() - unregister a memory controller + * @mc: memory controller + */ +void memory_controller_unregister(struct memory_controller *mc) +{ + mutex_lock(&controllers_lock); + list_del_init(&mc->list); + mutex_unlock(&controllers_lock); + + kref_put(&mc->ref, memory_controller_release); +} +EXPORT_SYMBOL_GPL(memory_controller_unregister); + +static struct memory_controller * +of_memory_controller_get(struct device *dev, struct device_node *np, + const char *con_id) +{ + const char *cells = "#memory-controller-cells"; + const char *names = "memory-controller-names"; + const char *prop = "memory-controllers"; + struct memory_controller *mc; + struct of_phandle_args args; + int index = 0, err; + + if (con_id) { + index = of_property_match_string(np, names, con_id); + if (index < 0) + return ERR_PTR(index); + } + + err = of_parse_phandle_with_args(np, prop, cells, index, &args); + if (err) { + if (err == -ENOENT) + err = -ENODEV; + + return ERR_PTR(err); + } + + mutex_lock(&controllers_lock); + + list_for_each_entry(mc, &controllers, list) { + if (mc->dev && mc->dev->of_node == args.np) { + __module_get(mc->dev->driver->owner); + kref_get(&mc->ref); + goto unlock; + } + } + + mc = ERR_PTR(-EPROBE_DEFER); + +unlock: + mutex_unlock(&controllers_lock); + of_node_put(args.np); + return mc; +} + +/** + * memory_controller_get() - obtain a reference to a memory controller + * @dev: consumer device + * @con_id: consumer name + * + * Returns: A pointer to the requested memory controller or an ERR_PTR()- + * encoded error code on failure. + */ +struct memory_controller * +memory_controller_get(struct device *dev, const char *con_id) +{ + if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) + return of_memory_controller_get(dev, dev->of_node, con_id); + + return ERR_PTR(-ENODEV); +} +EXPORT_SYMBOL_GPL(memory_controller_get); + +/** + * memory_controller_get_optional() - obtain a reference to an optional + * memory controller + * @dev: consumer device + * @con_id: consumer name + * + * Returns: A pointer to the requested memory controller, NULL if no memory + * controller for the consumer device/name pair exists, or an ERR_PTR()- + * encoded error code on failure. + */ +struct memory_controller * +memory_controller_get_optional(struct device *dev, const char *con_id) +{ + struct memory_controller *mc; + + mc = memory_controller_get(dev, con_id); + if (IS_ERR(mc)) { + if (mc == ERR_PTR(-ENODEV)) + return NULL; + } + + return mc; +} +EXPORT_SYMBOL_GPL(memory_controller_get_optional); + +/** + * memory_controller_put() - release a reference to a memory controller + * @mc: memory controller + */ +void memory_controller_put(struct memory_controller *mc) +{ + if (mc) { + kref_put(&mc->ref, memory_controller_release); + module_put(mc->dev->driver->owner); + } +} +EXPORT_SYMBOL_GPL(memory_controller_put); + +static void devm_memory_controller_release(struct device *dev, void *res) +{ + memory_controller_put(*(struct memory_controller **)res); +} + +/** + * devm_memory_controller_get() - obtain a reference to a memory controller + * @dev: consumer device + * @con_id: consumer name + * + * This is a device-managed variant of memory_controller_get(). The memory + * controller reference obtained with this function is automatically released + * when the device is unbound from its driver. + * + * Returns: A pointer to the requested memory controller or an ERR_PTR()- + * encoded error code on failure. + */ +struct memory_controller *devm_memory_controller_get(struct device *dev, + const char *con_id) +{ + struct memory_controller **ptr, *mc; + + ptr = devres_alloc(devm_memory_controller_release, sizeof(*ptr), + GFP_KERNEL); + if (!ptr) + return ERR_PTR(-ENOMEM); + + mc = memory_controller_get(dev, con_id); + if (!IS_ERR(mc)) { + *ptr = mc; + devres_add(dev, ptr); + } else { + devres_free(ptr); + } + + return mc; +} +EXPORT_SYMBOL_GPL(devm_memory_controller_get); + +/** + * memory_controller_get_optional() - obtain a reference to an optional + * memory controller + * @dev: consumer device + * @con_id: consumer name + * + * This is a device-managed variant of memory_controller_get_optional(). The + * memory controller reference obtained with this function is automatically + * released when the device is unbound from its driver. + * + * Returns: A pointer to the requested memory controller, NULL if no memory + * controller for the consumer device/name pair exists, or an ERR_PTR()- + * encoded error code on failure. + */ +struct memory_controller * +devm_memory_controller_get_optional(struct device *dev, const char *con_id) +{ + struct memory_controller **ptr, *mc; + + ptr = devres_alloc(devm_memory_controller_release, sizeof(*ptr), + GFP_KERNEL); + if (!ptr) + return ERR_PTR(-ENOMEM); + + mc = memory_controller_get_optional(dev, con_id); + if (!IS_ERR(mc)) { + *ptr = mc; + devres_add(dev, ptr); + } else { + devres_free(ptr); + } + + return mc; +} +EXPORT_SYMBOL_GPL(devm_memory_controller_get_optional); + +static int devm_memory_controller_match(struct device *dev, void *res, void *data) +{ + struct memory_controller **mc = res; + + if (WARN_ON(!mc || !*mc)) + return 0; + + return *mc == data; +} + +/** + * devm_memory_controller_put() - release a reference to a memory controller + * @mc: memory controller + * + * This is a device-managed variant of memory_controller_put(). Typically it + * should never be necessary to call this function, since the device-managed + * code should take care of releasing the reference at the right time. + */ +void devm_memory_controller_put(struct device *dev, + struct memory_controller *mc) +{ + WARN_ON(devres_release(dev, devm_memory_controller_release, + devm_memory_controller_match, mc)); +} +EXPORT_SYMBOL_GPL(devm_memory_controller_put); diff --git a/include/linux/memory-controller.h b/include/linux/memory-controller.h new file mode 100644 index 000000000000..54490cb5e625 --- /dev/null +++ b/include/linux/memory-controller.h @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019-2020 NVIDIA Corporation. + */ + +#ifndef _LINUX_MEMORY_CONTROLLER_H +#define _LINUX_MEMORY_CONTROLLER_H + +#include +#include + +struct memory_controller { + struct device *dev; + struct kref ref; + struct list_head list; +}; + +int memory_controller_register(struct memory_controller *mc); +void memory_controller_unregister(struct memory_controller *mc); + +struct memory_controller *memory_controller_get(struct device *dev, + const char *con_id); +struct memory_controller *memory_controller_get_optional(struct device *dev, + const char *con_id); +void memory_controller_put(struct memory_controller *mc); + +struct memory_controller *devm_memory_controller_get(struct device *dev, + const char *con_id); +struct memory_controller * +devm_memory_controller_get_optional(struct device *dev, const char *con_id); +void devm_memory_controller_put(struct device *dev, + struct memory_controller *mc); + +#endif From patchwork Thu Feb 13 16:39:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11380811 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 435A11395 for ; Thu, 13 Feb 2020 16:41:17 +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 21616217F4 for ; Thu, 13 Feb 2020 16:41:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Uypd28rc"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LOBGN7F6" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 21616217F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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=Y2JV9LqxyX60iVhDqm5ma+qpEYAlnpaDNk2GDLlBj3E=; b=Uypd28rcNuS58H z/t1tXwo4W4DqACHmW8MD0qQ+atE1XxkD6OWu2S8J1gVKvWEpMP2qs2G2r5Sovle33U8XlQ3NZZWY YvxvCqoKNq+lOuekH7IcqobxskdH2KQFMI18taPOaQ0K9Ut4sscVk4ArAE1MkVJihgcszqhr8M9g+ +AqEt9zD53kBVdPsnomQjMngKDJmbyDGrYN5fvURiEJgotjBapaVoyHE/cduzdRAHVPYa7j1LwyQu H0E5ZdSdtdKkQRWbNlUrgdpeOaOqeXK8uKy1XbjoO5xU2SpTe9s0PafB+EtM1QgS4s5f5jMLQgjeS /gBlb59IKq6gkL8b4iCw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HYC-0001fL-Bw; Thu, 13 Feb 2020 16:41:16 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXE-0000VJ-RX for linux-arm-kernel@lists.infradead.org; Thu, 13 Feb 2020 16:40:18 +0000 Received: by mail-wr1-x444.google.com with SMTP id w12so7516269wrt.2 for ; Thu, 13 Feb 2020 08:40:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OYWSVDDbY/UxSIzaZwoEm71Xw+c2/ceHjCKgkFAt7oc=; b=LOBGN7F6A+j/KSjmlfWKAL6xYBfzNY6jWq/aJt0gIVfRpWfAdpTomvbazv587FWCH4 b/jLQO2aILx3cSL6MH6XlveVUiXrJp6WYV6aTNox5A5uYyXlqIVkutunXN7PdA6YJPOM i+aDHTC0xR7l5mJ/0q0uMx9lDOtuH3TWZHMCaoCbk66JMPp0T5lUh7rYwEluVoxipwhJ 2pcEfBwmhfTLC0DSn6OjH7g5Bp4TdoXUJEIVC8r3n+XEZin08tulv6BagQSY7vXyS1TU JAKfqoLYunkSTGldInLrCBlTL/PXTyG92O15pRv6cFXwf8qlxemwTUTMZSDK0OTHSMuz D5EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OYWSVDDbY/UxSIzaZwoEm71Xw+c2/ceHjCKgkFAt7oc=; b=ll/RTHXswHfU3jCr7zaLPy8gbBrQULSFc6DLEMnt4wOAi1j0ok5PVM5QNVE1htpw26 irCRVBtW/n0/sXrsT/PEIY/I234wn5oj60Ky2/G6e5B9W5RtTJJSARLYIVAw3GBkeX9m 7vEGx4rDFmD2VIlzlz2KYgiBwh7PjmOUEm9vVUMWDf4ci8jQUzc/qY+JtOkt4K4JgzDS nA8RZ7aPhcCTwFkzlsZaawDxodD6CBs4PcTq2SCMadY/rncuYZJ5T5i+rldNAeOxN1SM JxC09SRnnwZP0SMMVFkFvyw9LCvpzBrkLVagfNUW5t4W8YwJge23BpHF3U+5sWfjqTLk uACA== X-Gm-Message-State: APjAAAVMJ8zGTBX2zFzBXvsj35XDKLjeZRWArf92g22eiTrmaUqpe6ui 0lKJZvBG8YGSb9ccSVMPSLY= X-Google-Smtp-Source: APXvYqwcKc8OQOLbjhzBWeyXihMSClM0SSK/ywAQmwsvkxrLdQEL2WkFxm0wyd0LYcMkdI11IjjTZg== X-Received: by 2002:a5d:6151:: with SMTP id y17mr22130398wrt.110.1581612015663; Thu, 13 Feb 2020 08:40:15 -0800 (PST) Received: from localhost (p2E5BEF3F.dip0.t-ipconnect.de. [46.91.239.63]) by smtp.gmail.com with ESMTPSA id o9sm592460wrw.20.2020.02.13.08.40.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 08:40:14 -0800 (PST) From: Thierry Reding To: Arnd Bergmann , Will Deacon , Robin Murphy , Rob Herring Subject: [PATCH v4 4/5] memory: tegra186: Register as memory controller Date: Thu, 13 Feb 2020 17:39:58 +0100 Message-Id: <20200213163959.819733-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200213163959.819733-1-thierry.reding@gmail.com> References: <20200213163959.819733-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200213_084016_903543_7D642058 X-CRM114-Status: GOOD ( 13.19 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:444 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [thierry.reding[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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: Joerg Roedel , linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, Olof Johansson , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org From: Thierry Reding Registering as memory controller allows other drivers to obtain a reference to it. This is mostly useful as a way of ordering probe between devices depending on one another. Signed-off-by: Thierry Reding --- drivers/memory/tegra/tegra186.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/memory/tegra/tegra186.c b/drivers/memory/tegra/tegra186.c index 5d53f11ca7b6..8c43702340e8 100644 --- a/drivers/memory/tegra/tegra186.c +++ b/drivers/memory/tegra/tegra186.c @@ -4,6 +4,7 @@ */ #include +#include #include #include #include @@ -32,6 +33,7 @@ struct tegra186_mc_soc { }; struct tegra186_mc { + struct memory_controller base; struct device *dev; void __iomem *regs; @@ -1532,13 +1534,18 @@ static int tegra186_mc_probe(struct platform_device *pdev) return -ENOMEM; mc->soc = of_device_get_match_data(&pdev->dev); + mc->dev = &pdev->dev; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); mc->regs = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(mc->regs)) return PTR_ERR(mc->regs); - mc->dev = &pdev->dev; + mc->base.dev = &pdev->dev; + + err = memory_controller_register(&mc->base); + if (err < 0) + return err; err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); if (err < 0) From patchwork Thu Feb 13 16:39:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 11380813 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 21E0B13A4 for ; Thu, 13 Feb 2020 16:41:38 +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 EFFA221734 for ; Thu, 13 Feb 2020 16:41:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SkCS7y2s"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OMkAGME7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EFFA221734 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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=sR3DuErcuNoiJxmXblwGuujSTLssBmWcjSuT+yjyr10=; b=SkCS7y2sWrZJtB vZ0hp54cPYgE1txYHkVPalRvJ0zpjLbxfoQIRYmDI3JhGl338cfAVVW1weRitVYoRJKxQElU/ROMn BQQBiGjw/Q4Fgd7SA2CewI6a9vlG9sBrqfQJr+ftXzZiiH25KGjEBZMwJ7fJ94fmpO/xv6m28PTL8 DI6awbuXQM/bFqOQFvPS9vch80e+N4h2sd1NnvANEoTQGg4vDbPrON11X7QlqR2aWYp3tURK1XVh3 myUHS4zH+megpxTiXQ8GOjD8G3z3L/6VS+TUG+7a9Nr69hVIu7Gb2rdbPKpNIskl3KvsKqkpFvLvg D/A2nRaBWn72IDgUWJYw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HYS-0001tR-0e; Thu, 13 Feb 2020 16:41:32 +0000 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1j2HXH-0000XQ-4b for linux-arm-kernel@lists.infradead.org; Thu, 13 Feb 2020 16:40:20 +0000 Received: by mail-wm1-x341.google.com with SMTP id a5so6997541wmb.0 for ; Thu, 13 Feb 2020 08:40:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ljIvDHLN6tog1gjQ51iNc2XMRU3cMi+uSkVVHu8cuT4=; b=OMkAGME7j7rQnbLnlKwKqvhjvo5FGigM7wlHU4CrcLnpiLC86ihdKcBsofYTSxPYRa KGW5vVaAF/GZ3G/ddvB9xGhznGLkrPRgmy1cagbrgJD4JfTiVEpTAZrru5VrHjeeaPWI kE4FOcM/lEx5lU7e3eD+mqvL3xOyFU1BQORJ26Q6jaH6IbjDtsO9XLK8oUVw478zdqa/ peqvVcAUWFVhRbH9/zAv/g/e40YHVFdd6Zm8zBdbxlsYd8GAFHF+Va2g313xWjGqd/gX Ax+Hi+JHQVG0hbR23B73PHZWmAtYDIDUPCFX5cW8ktC2+XWiC1JDzhN4Ka03y8Fsh5cM /C+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ljIvDHLN6tog1gjQ51iNc2XMRU3cMi+uSkVVHu8cuT4=; b=HIBjYCGSPi3t48OUwqPStI9EDKMTX8cZkqtYqS1VkKhbd4bH8fQdU6uroLgDrHS1Fl tHK65G5m9+jktgI/r2suyzRSyzsbjBuXGxQGDTBRC9QGYGKjH87Zb570T8zFnxYRXrta DQmxHrlF5fo8i1YgiRCkS+x/qm3nmqyBHQ2vUfh9ui3PU8ZXsCvM4zHQPmNzUyYQt5SL P/Y8AiA+7+HwkJV4SiILJb1WO5tYdin3Z88YyZyDzbDlRfdlnIYHemySWKcVGQzKQonQ gP8l2NETA2+GgCOn8bWK7vry3d5d87i3CYV+6qqrfa19FQF5+ZT8e70U4ZZshBbnpzfV fIvQ== X-Gm-Message-State: APjAAAVLfnGud/Z/kPPuVq84Nt69j+Shnplzu0psB3OMYWH1nOe6XodE dnzJyjd8pfigTH9db8Y0VKl/kosp X-Google-Smtp-Source: APXvYqw7sINzUbnoD5ydFKpKcLaCTZ30fHyF6HFAksiO/pDQK8NvJDQvWRxVCSqMtK3CJfsOF10GSg== X-Received: by 2002:a1c:5445:: with SMTP id p5mr6643132wmi.75.1581612017438; Thu, 13 Feb 2020 08:40:17 -0800 (PST) Received: from localhost (p2E5BEF3F.dip0.t-ipconnect.de. [46.91.239.63]) by smtp.gmail.com with ESMTPSA id y7sm3352850wrr.56.2020.02.13.08.40.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Feb 2020 08:40:16 -0800 (PST) From: Thierry Reding To: Arnd Bergmann , Will Deacon , Robin Murphy , Rob Herring Subject: [PATCH v4 5/5] iommu: arm-smmu: Get reference to memory controller Date: Thu, 13 Feb 2020 17:39:59 +0100 Message-Id: <20200213163959.819733-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200213163959.819733-1-thierry.reding@gmail.com> References: <20200213163959.819733-1-thierry.reding@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200213_084019_238785_9BB49F8E X-CRM114-Status: GOOD ( 13.19 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.3 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:341 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [thierry.reding[at]gmail.com] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 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: Joerg Roedel , linux-kernel@vger.kernel.org, linux-tegra@vger.kernel.org, iommu@lists.linux-foundation.org, Olof Johansson , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org From: Thierry Reding Use the memory controller framework to obtain a reference to the memory controller to which the SMMU will make memory requests. This allows the two drivers to properly order their probes so that the memory controller can be programmed first. An example where this is required is Tegra186 where the stream IDs need to be associated with memory clients before memory requests are emitted with the correct stream ID. Signed-off-by: Thierry Reding --- drivers/iommu/arm-smmu.c | 11 +++++++++++ drivers/iommu/arm-smmu.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 16c4b87af42b..862ea55018e8 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -2109,6 +2109,17 @@ static int arm_smmu_device_probe(struct platform_device *pdev) } smmu->dev = dev; + smmu->mc = devm_memory_controller_get_optional(dev, NULL); + if (IS_ERR(smmu->mc)) { + err = PTR_ERR(smmu->mc); + + if (err != -EPROBE_DEFER) + dev_err(dev, "failed to get memory controller: %d\n", + err); + + return err; + } + if (dev->of_node) err = arm_smmu_device_dt_probe(pdev, smmu); else diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h index 8d1cd54d82a6..d38bcd3ce447 100644 --- a/drivers/iommu/arm-smmu.h +++ b/drivers/iommu/arm-smmu.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -253,6 +254,7 @@ enum arm_smmu_implementation { struct arm_smmu_device { struct device *dev; + struct memory_controller *mc; void __iomem *base; unsigned int numpage;