From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> To: iommu@lists.linux-foundation.org Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, Hanjun Guo <hanjun.guo@linaro.org>, Tomasz Nowicki <tn@semihalf.com>, "Rafael J. Wysocki" <rjw@rjwysocki.net>, Will Deacon <will.deacon@arm.com>, Marc Zyngier <marc.zyngier@arm.com>, Robin Murphy <robin.murphy@arm.com>, Joerg Roedel <joro@8bytes.org>, Jon Masters <jcm@redhat.com>, Sinan Kaya <okaya@codeaurora.org>, linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [RFC PATCH v3 03/13] drivers: acpi: iort: add support for IOMMU fwnode registration Date: Wed, 20 Jul 2016 12:23:25 +0100 [thread overview] Message-ID: <1469013815-24380-4-git-send-email-lorenzo.pieralisi@arm.com> (raw) In-Reply-To: <1469013815-24380-1-git-send-email-lorenzo.pieralisi@arm.com> The ACPI IORT table provide entries for IOMMU (aka SMMU in ARM world) components that allow creating the kernel data structures required to probe and initialize the IOMMU devices. This patch provides support in the IORT kernel code to register IOMMU components and their respective fwnode. Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Hanjun Guo <hanjun.guo@linaro.org> Cc: Tomasz Nowicki <tn@semihalf.com> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> --- drivers/acpi/iort.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/drivers/acpi/iort.c b/drivers/acpi/iort.c index 1f440d2..86f6985 100644 --- a/drivers/acpi/iort.c +++ b/drivers/acpi/iort.c @@ -20,7 +20,9 @@ #include <linux/iort.h> #include <linux/kernel.h> +#include <linux/list.h> #include <linux/pci.h> +#include <linux/slab.h> struct iort_its_msi_chip { struct list_head list; @@ -28,6 +30,69 @@ struct iort_its_msi_chip { u32 translation_id; }; +struct iort_fwnode { + struct list_head list; + struct acpi_iort_node *iort_node; + struct fwnode_handle *fwnode; +}; +static LIST_HEAD(iort_fwnode_list); +static DEFINE_SPINLOCK(iort_fwnode_lock); + +/** + * iort_set_fwnode() - Create iort_fwnode and use it to register + * iommu data in the iort_fwnode_list + * + * @node: IORT table node associated with the IOMMU + * @fwnode: fwnode associated with the IORT node + * + * Returns: 0 on success + * -ENOMEM on failure + */ +static inline int iort_set_fwnode(struct acpi_iort_node *iort_node, + struct fwnode_handle *fwnode) +{ + struct iort_fwnode *np; + + np = kzalloc(sizeof(struct iort_fwnode), GFP_KERNEL); + + if (WARN_ON(!np)) + return -ENOMEM; + + INIT_LIST_HEAD(&np->list); + np->iort_node = iort_node; + np->fwnode = fwnode; + + spin_lock(&iort_fwnode_lock); + list_add_tail(&np->list, &iort_fwnode_list); + spin_unlock(&iort_fwnode_lock); + + return 0; +} + +/** + * iort_get_fwnode() - Retrieve fwnode associated with an IORT node + * + * @node: IORT table node to be looked-up + * + * Returns: fwnode_handle pointer on success NULL on failure +*/ +static inline struct fwnode_handle * +iort_get_fwnode(struct acpi_iort_node *node) +{ + struct iort_fwnode *curr, *iommu_fwnode = NULL; + + spin_lock(&iort_fwnode_lock); + list_for_each_entry(curr, &iort_fwnode_list, list) { + if (curr->iort_node == node) { + iommu_fwnode = curr; + break; + } + } + spin_unlock(&iort_fwnode_lock); + + return iommu_fwnode ? iommu_fwnode->fwnode : NULL; +} + typedef acpi_status (*iort_find_node_callback) (struct acpi_iort_node *node, void *context); -- 2.6.4
WARNING: multiple messages have this Message-ID (diff)
From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi) To: linux-arm-kernel@lists.infradead.org Subject: [RFC PATCH v3 03/13] drivers: acpi: iort: add support for IOMMU fwnode registration Date: Wed, 20 Jul 2016 12:23:25 +0100 [thread overview] Message-ID: <1469013815-24380-4-git-send-email-lorenzo.pieralisi@arm.com> (raw) In-Reply-To: <1469013815-24380-1-git-send-email-lorenzo.pieralisi@arm.com> The ACPI IORT table provide entries for IOMMU (aka SMMU in ARM world) components that allow creating the kernel data structures required to probe and initialize the IOMMU devices. This patch provides support in the IORT kernel code to register IOMMU components and their respective fwnode. Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Hanjun Guo <hanjun.guo@linaro.org> Cc: Tomasz Nowicki <tn@semihalf.com> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> --- drivers/acpi/iort.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/drivers/acpi/iort.c b/drivers/acpi/iort.c index 1f440d2..86f6985 100644 --- a/drivers/acpi/iort.c +++ b/drivers/acpi/iort.c @@ -20,7 +20,9 @@ #include <linux/iort.h> #include <linux/kernel.h> +#include <linux/list.h> #include <linux/pci.h> +#include <linux/slab.h> struct iort_its_msi_chip { struct list_head list; @@ -28,6 +30,69 @@ struct iort_its_msi_chip { u32 translation_id; }; +struct iort_fwnode { + struct list_head list; + struct acpi_iort_node *iort_node; + struct fwnode_handle *fwnode; +}; +static LIST_HEAD(iort_fwnode_list); +static DEFINE_SPINLOCK(iort_fwnode_lock); + +/** + * iort_set_fwnode() - Create iort_fwnode and use it to register + * iommu data in the iort_fwnode_list + * + * @node: IORT table node associated with the IOMMU + * @fwnode: fwnode associated with the IORT node + * + * Returns: 0 on success + * -ENOMEM on failure + */ +static inline int iort_set_fwnode(struct acpi_iort_node *iort_node, + struct fwnode_handle *fwnode) +{ + struct iort_fwnode *np; + + np = kzalloc(sizeof(struct iort_fwnode), GFP_KERNEL); + + if (WARN_ON(!np)) + return -ENOMEM; + + INIT_LIST_HEAD(&np->list); + np->iort_node = iort_node; + np->fwnode = fwnode; + + spin_lock(&iort_fwnode_lock); + list_add_tail(&np->list, &iort_fwnode_list); + spin_unlock(&iort_fwnode_lock); + + return 0; +} + +/** + * iort_get_fwnode() - Retrieve fwnode associated with an IORT node + * + * @node: IORT table node to be looked-up + * + * Returns: fwnode_handle pointer on success NULL on failure +*/ +static inline struct fwnode_handle * +iort_get_fwnode(struct acpi_iort_node *node) +{ + struct iort_fwnode *curr, *iommu_fwnode = NULL; + + spin_lock(&iort_fwnode_lock); + list_for_each_entry(curr, &iort_fwnode_list, list) { + if (curr->iort_node == node) { + iommu_fwnode = curr; + break; + } + } + spin_unlock(&iort_fwnode_lock); + + return iommu_fwnode ? iommu_fwnode->fwnode : NULL; +} + typedef acpi_status (*iort_find_node_callback) (struct acpi_iort_node *node, void *context); -- 2.6.4
next prev parent reply other threads:[~2016-07-20 11:23 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-07-20 11:23 [RFC PATCH v3 00/13] ACPI IORT ARM SMMU v3 support Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi [not found] ` <1469013815-24380-1-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org> 2016-07-20 11:23 ` [RFC PATCH v3 01/13] drivers: iommu: add FWNODE_IOMMU fwnode type Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 02/13] drivers: acpi: iort: introduce linker section for IORT entries probing Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 04/13] drivers: platform: add fwnode base platform devices retrieval Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 05/13] drivers: iommu: make iommu_fwspec OF agnostic Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-25 15:09 ` Robin Murphy 2016-07-25 15:09 ` Robin Murphy [not found] ` <1499f802-5f98-b0c0-d3aa-dabcac81e84e-5wv7dgnIgG8@public.gmane.org> 2016-07-25 15:21 ` Rob Herring 2016-07-25 15:21 ` Rob Herring 2016-07-25 15:21 ` Rob Herring 2016-07-25 15:21 ` Rob Herring 2016-07-25 15:56 ` Lorenzo Pieralisi 2016-07-25 15:56 ` Lorenzo Pieralisi 2016-07-25 15:56 ` Lorenzo Pieralisi 2016-07-25 15:41 ` Lorenzo Pieralisi 2016-07-25 15:41 ` Lorenzo Pieralisi 2016-07-25 15:51 ` Robin Murphy 2016-07-25 15:51 ` Robin Murphy 2016-07-25 16:12 ` Lorenzo Pieralisi 2016-07-25 16:12 ` Lorenzo Pieralisi 2016-08-11 11:26 ` Lorenzo Pieralisi 2016-08-11 11:26 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 07/13] drivers: acpi: iort: add node match function Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 08/13] drivers: acpi: iort: add support for ARM SMMU platform devices creation Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 10/13] drivers: iommu: arm-smmu-v3: enable ACPI driver initialization Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 11/13] drivers: iommu: arm-smmu-v3: add IORT platform device creation Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 12/13] drivers: acpi: iort: replace rid map type with type mask Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-25 5:53 ` [RFC PATCH v3 00/13] ACPI IORT ARM SMMU v3 support Dennis Chen 2016-07-25 5:53 ` Dennis Chen 2016-07-25 5:53 ` Dennis Chen [not found] ` <20160725055330.GA21004-5wv7dgnIgG8@public.gmane.org> 2016-07-25 8:36 ` Lorenzo Pieralisi 2016-07-25 8:36 ` Lorenzo Pieralisi 2016-07-25 8:36 ` Lorenzo Pieralisi 2016-07-26 1:16 ` Dennis Chen 2016-07-26 1:16 ` Dennis Chen 2016-07-26 1:16 ` Dennis Chen 2016-07-20 11:23 ` Lorenzo Pieralisi [this message] 2016-07-20 11:23 ` [RFC PATCH v3 03/13] drivers: acpi: iort: add support for IOMMU fwnode registration Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 06/13] drivers: acpi: implement acpi_dma_configure Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 09/13] drivers: iommu: arm-smmu-v3: split probe functions into DT/generic portions Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi 2016-07-20 11:23 ` [RFC PATCH v3 13/13] drivers: acpi: iort: introduce iort_iommu_configure Lorenzo Pieralisi 2016-07-20 11:23 ` Lorenzo Pieralisi [not found] ` <1469013815-24380-14-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org> 2016-08-03 14:19 ` nwatters-sgV2jX0FEOL9JmXXK+q4OQ 2016-08-03 14:19 ` nwatters at codeaurora.org 2016-08-03 14:19 ` nwatters [not found] ` <016fb1080595ef61ec7a91da15ef2430-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> 2016-08-08 16:16 ` Lorenzo Pieralisi 2016-08-08 16:16 ` Lorenzo Pieralisi 2016-08-08 16:16 ` Lorenzo Pieralisi 2016-08-11 8:44 ` Lorenzo Pieralisi 2016-08-11 8:44 ` Lorenzo Pieralisi 2016-08-11 8:44 ` Lorenzo Pieralisi
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1469013815-24380-4-git-send-email-lorenzo.pieralisi@arm.com \ --to=lorenzo.pieralisi@arm.com \ --cc=hanjun.guo@linaro.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jcm@redhat.com \ --cc=joro@8bytes.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=marc.zyngier@arm.com \ --cc=okaya@codeaurora.org \ --cc=rjw@rjwysocki.net \ --cc=robin.murphy@arm.com \ --cc=tn@semihalf.com \ --cc=will.deacon@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.