* [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
2022-04-04 12:41 [PATCH v9 00/11] ACPI/IORT: Support for IORT RMR node Shameer Kolothum
2022-04-04 12:42 ` Shameer Kolothum via iommu
@ 2022-04-04 12:42 ` Shameer Kolothum via iommu
0 siblings, 0 replies; 7+ messages in thread
From: Shameer Kolothum @ 2022-04-04 12:42 UTC (permalink / raw)
To: linux-arm-kernel, linux-acpi, iommu
Cc: linuxarm, lorenzo.pieralisi, joro, robin.murphy, will,
wanghuiqiang, guohanjun, steven.price, Sami.Mujawar, jon,
eric.auger, laurentiu.tudor, yangyicong
This will provide a way for SMMU drivers to retrieve StreamIDs
associated with IORT RMR nodes and use that to set bypass settings
for those IDs.
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
---
drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
include/linux/acpi_iort.h | 8 ++++++++
2 files changed, 37 insertions(+)
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 1147387cfddb..fb2b0163c27d 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
return nc_dma_get_range(dev, size);
}
+/**
+ * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
+ * associated StreamIDs information.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
+}
+EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
+
+/**
+ * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ struct iommu_resv_region *entry, *next;
+
+ iort_iommu_put_resv_regions(NULL, head);
+ list_for_each_entry_safe(entry, next, head, list)
+ kfree(entry);
+}
+EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
+
static void __init acpi_iort_register_irq(int hwirq, const char *name,
int trigger,
struct resource *res)
diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
index eb3c28853110..774b8bc16573 100644
--- a/include/linux/acpi_iort.h
+++ b/include/linux/acpi_iort.h
@@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
enum irq_domain_bus_token bus_token);
void acpi_configure_pmsi_domain(struct device *dev);
int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
/* IOMMU interface */
int iort_dma_get_ranges(struct device *dev, u64 *size);
int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
@@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
{ return NULL; }
static inline void acpi_configure_pmsi_domain(struct device *dev) { }
+static inline
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
+static inline
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
/* IOMMU interface */
static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
{ return -ENODEV; }
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
@ 2022-04-04 12:42 ` Shameer Kolothum via iommu
0 siblings, 0 replies; 7+ messages in thread
From: Shameer Kolothum via iommu @ 2022-04-04 12:42 UTC (permalink / raw)
To: linux-arm-kernel, linux-acpi, iommu
Cc: robin.murphy, jon, linuxarm, steven.price, guohanjun, yangyicong,
Sami.Mujawar, will, wanghuiqiang
This will provide a way for SMMU drivers to retrieve StreamIDs
associated with IORT RMR nodes and use that to set bypass settings
for those IDs.
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
---
drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
include/linux/acpi_iort.h | 8 ++++++++
2 files changed, 37 insertions(+)
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 1147387cfddb..fb2b0163c27d 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
return nc_dma_get_range(dev, size);
}
+/**
+ * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
+ * associated StreamIDs information.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
+}
+EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
+
+/**
+ * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ struct iommu_resv_region *entry, *next;
+
+ iort_iommu_put_resv_regions(NULL, head);
+ list_for_each_entry_safe(entry, next, head, list)
+ kfree(entry);
+}
+EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
+
static void __init acpi_iort_register_irq(int hwirq, const char *name,
int trigger,
struct resource *res)
diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
index eb3c28853110..774b8bc16573 100644
--- a/include/linux/acpi_iort.h
+++ b/include/linux/acpi_iort.h
@@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
enum irq_domain_bus_token bus_token);
void acpi_configure_pmsi_domain(struct device *dev);
int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
/* IOMMU interface */
int iort_dma_get_ranges(struct device *dev, u64 *size);
int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
@@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
{ return NULL; }
static inline void acpi_configure_pmsi_domain(struct device *dev) { }
+static inline
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
+static inline
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
/* IOMMU interface */
static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
{ return -ENODEV; }
--
2.25.1
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
@ 2022-04-04 12:42 ` Shameer Kolothum via iommu
0 siblings, 0 replies; 7+ messages in thread
From: Shameer Kolothum @ 2022-04-04 12:42 UTC (permalink / raw)
To: linux-arm-kernel, linux-acpi, iommu
Cc: linuxarm, lorenzo.pieralisi, joro, robin.murphy, will,
wanghuiqiang, guohanjun, steven.price, Sami.Mujawar, jon,
eric.auger, laurentiu.tudor, yangyicong
This will provide a way for SMMU drivers to retrieve StreamIDs
associated with IORT RMR nodes and use that to set bypass settings
for those IDs.
Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
---
drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
include/linux/acpi_iort.h | 8 ++++++++
2 files changed, 37 insertions(+)
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 1147387cfddb..fb2b0163c27d 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
return nc_dma_get_range(dev, size);
}
+/**
+ * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
+ * associated StreamIDs information.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
+}
+EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
+
+/**
+ * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
+ * @iommu_fwnode: fwnode associated with IOMMU
+ * @head: Resereved region list
+ */
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head)
+{
+ struct iommu_resv_region *entry, *next;
+
+ iort_iommu_put_resv_regions(NULL, head);
+ list_for_each_entry_safe(entry, next, head, list)
+ kfree(entry);
+}
+EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
+
static void __init acpi_iort_register_irq(int hwirq, const char *name,
int trigger,
struct resource *res)
diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
index eb3c28853110..774b8bc16573 100644
--- a/include/linux/acpi_iort.h
+++ b/include/linux/acpi_iort.h
@@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
enum irq_domain_bus_token bus_token);
void acpi_configure_pmsi_domain(struct device *dev);
int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
+ struct list_head *head);
/* IOMMU interface */
int iort_dma_get_ranges(struct device *dev, u64 *size);
int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
@@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
{ return NULL; }
static inline void acpi_configure_pmsi_domain(struct device *dev) { }
+static inline
+void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
+static inline
+void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
/* IOMMU interface */
static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
{ return -ENODEV; }
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
@ 2022-04-04 22:32 kernel test robot
0 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2022-04-04 22:32 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 3666 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
In-Reply-To: <20220404124209.1086-8-shameerali.kolothum.thodi@huawei.com>
References: <20220404124209.1086-8-shameerali.kolothum.thodi@huawei.com>
TO: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
TO: linux-arm-kernel(a)lists.infradead.org
TO: linux-acpi(a)vger.kernel.org
TO: iommu(a)lists.linux-foundation.org
CC: linuxarm(a)huawei.com
CC: lorenzo.pieralisi(a)arm.com
CC: joro(a)8bytes.org
CC: robin.murphy(a)arm.com
CC: will(a)kernel.org
CC: wanghuiqiang(a)huawei.com
CC: guohanjun(a)huawei.com
CC: steven.price(a)arm.com
CC: Sami.Mujawar(a)arm.com
CC: jon(a)solid-run.com
CC: eric.auger(a)redhat.com
CC: laurentiu.tudor(a)nxp.com
CC: yangyicong(a)huawei.com
Hi Shameer,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on joro-iommu/next]
[also build test WARNING on rafael-pm/linux-next arm/for-next soc/for-next arm64/for-next/core linus/master v5.18-rc1 next-20220404]
[cannot apply to xilinx-xlnx/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/intel-lab-lkp/linux/commits/Shameer-Kolothum/ACPI-IORT-Support-for-IORT-RMR-node/20220404-204553
base: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next
:::::: branch date: 10 hours ago
:::::: commit date: 10 hours ago
compiler: aarch64-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> drivers/gpio/gpio-pl061.c:225:3: warning: There is an unknown macro here somewhere. Configuration is required. If for_each_set_bit is a macro then please configure it. [unknownMacro]
for_each_set_bit(offset, &pending, PL061_GPIO_NR)
^
--
>> drivers/acpi/arm64/iort.c:1429:2: warning: There is an unknown macro here somewhere. Configuration is required. If list_for_each_entry_safe is a macro then please configure it. [unknownMacro]
list_for_each_entry_safe(entry, next, head, list)
^
vim +1429 drivers/acpi/arm64/iort.c
6a2c7db7318962 Shameer Kolothum 2022-04-04 1417
6a2c7db7318962 Shameer Kolothum 2022-04-04 1418 /**
6a2c7db7318962 Shameer Kolothum 2022-04-04 1419 * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
6a2c7db7318962 Shameer Kolothum 2022-04-04 1420 * @iommu_fwnode: fwnode associated with IOMMU
6a2c7db7318962 Shameer Kolothum 2022-04-04 1421 * @head: Resereved region list
6a2c7db7318962 Shameer Kolothum 2022-04-04 1422 */
6a2c7db7318962 Shameer Kolothum 2022-04-04 1423 void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
6a2c7db7318962 Shameer Kolothum 2022-04-04 1424 struct list_head *head)
6a2c7db7318962 Shameer Kolothum 2022-04-04 1425 {
6a2c7db7318962 Shameer Kolothum 2022-04-04 1426 struct iommu_resv_region *entry, *next;
6a2c7db7318962 Shameer Kolothum 2022-04-04 1427
6a2c7db7318962 Shameer Kolothum 2022-04-04 1428 iort_iommu_put_resv_regions(NULL, head);
6a2c7db7318962 Shameer Kolothum 2022-04-04 @1429 list_for_each_entry_safe(entry, next, head, list)
6a2c7db7318962 Shameer Kolothum 2022-04-04 1430 kfree(entry);
6a2c7db7318962 Shameer Kolothum 2022-04-04 1431 }
6a2c7db7318962 Shameer Kolothum 2022-04-04 1432 EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
6a2c7db7318962 Shameer Kolothum 2022-04-04 1433
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
2022-04-04 12:42 ` Shameer Kolothum via iommu
(?)
@ 2022-04-06 15:51 ` Lorenzo Pieralisi
-1 siblings, 0 replies; 7+ messages in thread
From: Lorenzo Pieralisi @ 2022-04-06 15:51 UTC (permalink / raw)
To: Shameer Kolothum
Cc: linux-arm-kernel, linux-acpi, iommu, linuxarm, joro, robin.murphy,
will, wanghuiqiang, guohanjun, steven.price, Sami.Mujawar, jon,
eric.auger, laurentiu.tudor, yangyicong
On Mon, Apr 04, 2022 at 01:42:05PM +0100, Shameer Kolothum wrote:
> This will provide a way for SMMU drivers to retrieve StreamIDs
> associated with IORT RMR nodes and use that to set bypass settings
> for those IDs.
>
> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> ---
> drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
> include/linux/acpi_iort.h | 8 ++++++++
> 2 files changed, 37 insertions(+)
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index 1147387cfddb..fb2b0163c27d 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
> return nc_dma_get_range(dev, size);
> }
>
> +/**
> + * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
> + * associated StreamIDs information.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
> +}
> +EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
> +
> +/**
> + * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + struct iommu_resv_region *entry, *next;
> +
> + iort_iommu_put_resv_regions(NULL, head);
> + list_for_each_entry_safe(entry, next, head, list)
> + kfree(entry);
> +}
> +EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
> +
> static void __init acpi_iort_register_irq(int hwirq, const char *name,
> int trigger,
> struct resource *res)
> diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
> index eb3c28853110..774b8bc16573 100644
> --- a/include/linux/acpi_iort.h
> +++ b/include/linux/acpi_iort.h
> @@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
> enum irq_domain_bus_token bus_token);
> void acpi_configure_pmsi_domain(struct device *dev);
> int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> /* IOMMU interface */
> int iort_dma_get_ranges(struct device *dev, u64 *size);
> int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
> @@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
> struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
> { return NULL; }
> static inline void acpi_configure_pmsi_domain(struct device *dev) { }
> +static inline
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> +static inline
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> /* IOMMU interface */
> static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
> { return -ENODEV; }
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
@ 2022-04-06 15:51 ` Lorenzo Pieralisi
0 siblings, 0 replies; 7+ messages in thread
From: Lorenzo Pieralisi @ 2022-04-06 15:51 UTC (permalink / raw)
To: Shameer Kolothum
Cc: will, jon, linuxarm, steven.price, linux-acpi, iommu,
wanghuiqiang, guohanjun, yangyicong, Sami.Mujawar, robin.murphy,
linux-arm-kernel
On Mon, Apr 04, 2022 at 01:42:05PM +0100, Shameer Kolothum wrote:
> This will provide a way for SMMU drivers to retrieve StreamIDs
> associated with IORT RMR nodes and use that to set bypass settings
> for those IDs.
>
> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> ---
> drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
> include/linux/acpi_iort.h | 8 ++++++++
> 2 files changed, 37 insertions(+)
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index 1147387cfddb..fb2b0163c27d 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
> return nc_dma_get_range(dev, size);
> }
>
> +/**
> + * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
> + * associated StreamIDs information.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
> +}
> +EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
> +
> +/**
> + * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + struct iommu_resv_region *entry, *next;
> +
> + iort_iommu_put_resv_regions(NULL, head);
> + list_for_each_entry_safe(entry, next, head, list)
> + kfree(entry);
> +}
> +EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
> +
> static void __init acpi_iort_register_irq(int hwirq, const char *name,
> int trigger,
> struct resource *res)
> diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
> index eb3c28853110..774b8bc16573 100644
> --- a/include/linux/acpi_iort.h
> +++ b/include/linux/acpi_iort.h
> @@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
> enum irq_domain_bus_token bus_token);
> void acpi_configure_pmsi_domain(struct device *dev);
> int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> /* IOMMU interface */
> int iort_dma_get_ranges(struct device *dev, u64 *size);
> int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
> @@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
> struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
> { return NULL; }
> static inline void acpi_configure_pmsi_domain(struct device *dev) { }
> +static inline
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> +static inline
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> /* IOMMU interface */
> static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
> { return -ENODEV; }
> --
> 2.25.1
>
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly
@ 2022-04-06 15:51 ` Lorenzo Pieralisi
0 siblings, 0 replies; 7+ messages in thread
From: Lorenzo Pieralisi @ 2022-04-06 15:51 UTC (permalink / raw)
To: Shameer Kolothum
Cc: linux-arm-kernel, linux-acpi, iommu, linuxarm, joro, robin.murphy,
will, wanghuiqiang, guohanjun, steven.price, Sami.Mujawar, jon,
eric.auger, laurentiu.tudor, yangyicong
On Mon, Apr 04, 2022 at 01:42:05PM +0100, Shameer Kolothum wrote:
> This will provide a way for SMMU drivers to retrieve StreamIDs
> associated with IORT RMR nodes and use that to set bypass settings
> for those IDs.
>
> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
> ---
> drivers/acpi/arm64/iort.c | 29 +++++++++++++++++++++++++++++
> include/linux/acpi_iort.h | 8 ++++++++
> 2 files changed, 37 insertions(+)
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index 1147387cfddb..fb2b0163c27d 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -1402,6 +1402,35 @@ int iort_dma_get_ranges(struct device *dev, u64 *size)
> return nc_dma_get_range(dev, size);
> }
>
> +/**
> + * iort_get_rmr_sids - Retrieve IORT RMR node reserved regions with
> + * associated StreamIDs information.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + iort_iommu_rmr_get_resv_regions(iommu_fwnode, NULL, head);
> +}
> +EXPORT_SYMBOL_GPL(iort_get_rmr_sids);
> +
> +/**
> + * iort_put_rmr_sids - Free all the memory allocated for RMR reserved regions.
> + * @iommu_fwnode: fwnode associated with IOMMU
> + * @head: Resereved region list
> + */
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head)
> +{
> + struct iommu_resv_region *entry, *next;
> +
> + iort_iommu_put_resv_regions(NULL, head);
> + list_for_each_entry_safe(entry, next, head, list)
> + kfree(entry);
> +}
> +EXPORT_SYMBOL_GPL(iort_put_rmr_sids);
> +
> static void __init acpi_iort_register_irq(int hwirq, const char *name,
> int trigger,
> struct resource *res)
> diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
> index eb3c28853110..774b8bc16573 100644
> --- a/include/linux/acpi_iort.h
> +++ b/include/linux/acpi_iort.h
> @@ -33,6 +33,10 @@ struct irq_domain *iort_get_device_domain(struct device *dev, u32 id,
> enum irq_domain_bus_token bus_token);
> void acpi_configure_pmsi_domain(struct device *dev);
> int iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id);
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode,
> + struct list_head *head);
> /* IOMMU interface */
> int iort_dma_get_ranges(struct device *dev, u64 *size);
> int iort_iommu_configure_id(struct device *dev, const u32 *id_in);
> @@ -47,6 +51,10 @@ static inline struct irq_domain *iort_get_device_domain(
> struct device *dev, u32 id, enum irq_domain_bus_token bus_token)
> { return NULL; }
> static inline void acpi_configure_pmsi_domain(struct device *dev) { }
> +static inline
> +void iort_get_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> +static inline
> +void iort_put_rmr_sids(struct fwnode_handle *iommu_fwnode, struct list_head *head) { }
> /* IOMMU interface */
> static inline int iort_dma_get_ranges(struct device *dev, u64 *size)
> { return -ENODEV; }
> --
> 2.25.1
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-04-06 17:40 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-04 22:32 [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2022-04-04 12:41 [PATCH v9 00/11] ACPI/IORT: Support for IORT RMR node Shameer Kolothum
2022-04-04 12:42 ` [PATCH v9 07/11] ACPI/IORT: Add a helper to retrieve RMR info directly Shameer Kolothum
2022-04-04 12:42 ` Shameer Kolothum
2022-04-04 12:42 ` Shameer Kolothum via iommu
2022-04-06 15:51 ` Lorenzo Pieralisi
2022-04-06 15:51 ` Lorenzo Pieralisi
2022-04-06 15:51 ` Lorenzo Pieralisi
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.