From patchwork Fri Apr 3 18:56:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 202438 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.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 7AB56C2BA12 for ; Fri, 3 Apr 2020 18:57:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4E466206F5 for ; Fri, 3 Apr 2020 18:57:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aX/RxiCc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728464AbgDCS4y (ORCPT ); Fri, 3 Apr 2020 14:56:54 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:52492 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728366AbgDCS4x (ORCPT ); Fri, 3 Apr 2020 14:56:53 -0400 Received: by mail-wm1-f65.google.com with SMTP id t8so8199120wmi.2; Fri, 03 Apr 2020 11:56:51 -0700 (PDT) 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=lQFf5QOW9wV2omuXCF0wGUv7jQKvZzP6SHvYmGO8r/g=; b=aX/RxiCc5BGzHQdPC56O4Dc7CED3JAddta77ld8C08ESz3Lwzb3AMYc1K5MoRWFTKH 5vriOAIg3eLq1vu8i2YNRtBoK5kgKqBnX+LKIJTbVYa8qY4pV0lIf62mWwLOIQMhIp0t yuAdXbVBcLyWItSZUlsP17s2a1owkuNphPQXbqEs3eEpmXLvF92Xy3krZnhtaXrKJbBv wipx859cNeBd/KNk08UuZTsWR5E35Wa8rSUg5ou8s87acOWCyGd9yGo5YZ0aJkhP/4T1 l3r4e4Lw+zI5Q4pt6xIltxQ7Bn3h9Qg4bFbjinKrBolkF8eE8sGQbOPHTSUFlvXrwrev Cl/g== 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=lQFf5QOW9wV2omuXCF0wGUv7jQKvZzP6SHvYmGO8r/g=; b=REVV4h4ER1htpABZz4uh53mGM16vydSSmufZG3RVF1s4PPO3N+VQ2xLzpEn+1Wudr3 qJN3Q5TWHLFAtcw3qutFmyy8wF56Der73x29L0QreFJ9DuxMSoSLfNLsdNRP+vBFySxS +38BM1NfxbUq/CakLeQzQa6gF03rc5KAGCaSxKoyoAXJO0u6rru+a1/cXXf/WdUH4Aei Gi8pPgdpY78ViLlZuLWg8QC8UKS49/26ZIcigN4YEm4G4L4kiPjkVq3YqlXaocHyDBPP u3JqGjLGPPm1b+GR02Yth1YLr+OVp6eYzisZmVqVuMHNFL0Cvuydh7NloYY0Gest1r+I ZQZw== X-Gm-Message-State: AGi0PuY4XEzZxnTjIADSZkTlZ+yXzqu2IBu87SOzVP+lPBhwLQIKAhT0 xppHuNfressVFjovLP8pHd8= X-Google-Smtp-Source: APiQypIFyWKi3vLABZNQO7VIsJF4PNRyAB4S2ec1HO//6VTVln/vV8HWeormMn8HvmMOcY17h6xLOQ== X-Received: by 2002:a1c:62c5:: with SMTP id w188mr10371768wmb.112.1585940210147; Fri, 03 Apr 2020 11:56:50 -0700 (PDT) Received: from localhost (pD9E51CDC.dip0.t-ipconnect.de. [217.229.28.220]) by smtp.gmail.com with ESMTPSA id j68sm13377870wrj.32.2020.04.03.11.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2020 11:56:49 -0700 (PDT) From: Thierry Reding To: Rob Herring , Frank Rowand Cc: devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] of: reserved-memory: Support memory-regions property Date: Fri, 3 Apr 2020 20:56:38 +0200 Message-Id: <20200403185640.118569-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200403185640.118569-1-thierry.reding@gmail.com> References: <20200403185640.118569-1-thierry.reding@gmail.com> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Thierry Reding Implement the memory-regions property as the preferred way to get at the list of reserved memory regions referenced by a device. For backwards- compatibility, fallback to the memory-region property. Signed-off-by: Thierry Reding --- drivers/of/of_reserved_mem.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 1a84bc0d5fa8..62a35422c28d 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -302,9 +302,9 @@ static DEFINE_MUTEX(of_rmem_assigned_device_mutex); * @idx: Index of selected region * * This function assigns respective DMA-mapping operations based on reserved - * memory region specified by 'memory-region' property in @np node to the @dev - * device. When driver needs to use more than one reserved memory region, it - * should allocate child devices and initialize regions by name for each of + * memory region specified by 'memory-region(s)' property in @np node to the + * @dev device. When driver needs to use more than one reserved memory region, + * it should allocate child devices and initialize regions by name for each of * child device. * * Returns error code or zero on success. @@ -320,7 +320,10 @@ int of_reserved_mem_device_init_by_idx(struct device *dev, if (!np || !dev) return -EINVAL; - target = of_parse_phandle(np, "memory-region", idx); + target = of_parse_phandle(np, "memory-regions", idx); + if (!target) + target = of_parse_phandle(np, "memory-region", idx); + if (!target) return -ENODEV; From patchwork Fri Apr 3 18:56:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 202439 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.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 979E1C43331 for ; Fri, 3 Apr 2020 18:56:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6AAB72076E for ; Fri, 3 Apr 2020 18:56:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KsbqPZWt" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728573AbgDCS45 (ORCPT ); Fri, 3 Apr 2020 14:56:57 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:34816 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728552AbgDCS44 (ORCPT ); Fri, 3 Apr 2020 14:56:56 -0400 Received: by mail-wm1-f65.google.com with SMTP id i19so8875529wmb.0; Fri, 03 Apr 2020 11:56:54 -0700 (PDT) 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=g5IL8lJ44sLe63OqUkMG0FhluuzRjw9oYGvmFBSOKwc=; b=KsbqPZWt4iG8tl6/L8/xJaRgrb6adiEVUu2L8vrCblQ8fd9bys7mAmKFOvr+bxRoMr +bDH2zrvm7Z2S/gX4YYLjke+OsongeJwD86C5kwgwp2Agr4A9xO+p+pnCfa3Qz+ag4EM p/vTcaCkN9B7XuD3IjFojy/ChethSaBLv/jmE2/vEuDNwOpXeDT5dFLvt3scVSItAbMZ BJTrL2++yFlE/XMAYGMgroG6ADcp9uxXQ7tPxuwh+BPNaNDyJ1gmOP6lLV32sK2BKIHa VvOfWNIs8GXKvNOzth/W+tbinQTOCL79b7WCZxgtwOfO1fzbY3Sn0FfgBPjEy0iIPFCE SmrA== 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=g5IL8lJ44sLe63OqUkMG0FhluuzRjw9oYGvmFBSOKwc=; b=okrtxupXRz4dpCU1kQBes2kh1hk9eGvB8vBM8VZQviECIcdlOiyKAkbcYMd8UzMLrf rwcKgplhZgK4dK+5mn5kYgxT4zv3Sd8GsRV6y008BbYQ5m8nUHNZhfc9XNd378cI9OlG wIaiyCQF4uWSLQPFDy3j0t2etGZAyqLMECdRMeXHyDRk3M65rgxpAB03csy7bpgNrlH6 RleyBzvLIwmHHkcRUiMKsFUylNNc3FYC/I48EB7Xb7+6YgjcUOG4LQ5yK+H5P3hPkUBQ HcaYPYc8CMRydf4AOelIOed6xJNgfq4D2c19vSPrLBPHpD9hFB3BCjP7ugIn8JdPfTDe 57fg== X-Gm-Message-State: AGi0PuYlBGdT+1kJxIzdFKVjvkdqcIY3Mfteomb+01YAjO/kwJ0qhZp+ /bbG//WHb0Dl91a9dxA+Bhs= X-Google-Smtp-Source: APiQypISdK/p0hNwYPL/cpMcWbAc5HTuGMWpnIvfl8NPGhTj5NckXqVCmuYf7O/Myd6yrS8kfdvHfA== X-Received: by 2002:a1c:8097:: with SMTP id b145mr10587211wmd.159.1585940214263; Fri, 03 Apr 2020 11:56:54 -0700 (PDT) Received: from localhost (pD9E51CDC.dip0.t-ipconnect.de. [217.229.28.220]) by smtp.gmail.com with ESMTPSA id t8sm11904135wmi.43.2020.04.03.11.56.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2020 11:56:53 -0700 (PDT) From: Thierry Reding To: Rob Herring , Frank Rowand Cc: devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] of: reserved-memory: Support multiple regions per device Date: Fri, 3 Apr 2020 20:56:40 +0200 Message-Id: <20200403185640.118569-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200403185640.118569-1-thierry.reding@gmail.com> References: <20200403185640.118569-1-thierry.reding@gmail.com> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org From: Thierry Reding While the lookup/initialization code already supports multiple memory regions per device, the release code will only ever release the first matching memory region. Enhance the code to release all matching regions. Each attachment of a region to a device is uniquely identifiable using a struct device pointer and a pointer to the memory region's struct reserved_mem. Signed-off-by: Thierry Reding --- drivers/of/of_reserved_mem.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index dae70b147552..3ad24df0f673 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -388,24 +388,22 @@ EXPORT_SYMBOL_GPL(of_reserved_mem_device_init_by_name); */ void of_reserved_mem_device_release(struct device *dev) { - struct rmem_assigned_device *rd; - struct reserved_mem *rmem = NULL; + struct rmem_assigned_device *rd, *tmp; + LIST_HEAD(release_list); mutex_lock(&of_rmem_assigned_device_mutex); - list_for_each_entry(rd, &of_rmem_assigned_device_list, list) { - if (rd->dev == dev) { - rmem = rd->rmem; - list_del(&rd->list); - kfree(rd); - break; - } + list_for_each_entry_safe(rd, tmp, &of_rmem_assigned_device_list, list) { + if (rd->dev == dev) + list_move_tail(&rd->list, &release_list); } mutex_unlock(&of_rmem_assigned_device_mutex); - if (!rmem || !rmem->ops || !rmem->ops->device_release) - return; + list_for_each_entry_safe(rd, tmp, &release_list, list) { + if (rd->rmem && rd->rmem->ops && rd->rmem->ops->device_release) + rd->rmem->ops->device_release(rd->rmem, dev); - rmem->ops->device_release(rmem, dev); + kfree(rd); + } } EXPORT_SYMBOL_GPL(of_reserved_mem_device_release);