linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices
@ 2017-06-08  4:44 Ganapatrao Kulkarni
  2017-06-08  4:44 ` [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping Ganapatrao Kulkarni
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Ganapatrao Kulkarni @ 2017-06-08  4:44 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	robin.murphy, lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

ARM IORT specification(rev. C) has added  provision to define proximity
domain in SMMUv3 IORT table. Adding required code to parse Proximity
domain and set numa_node of smmv3 platform devices.

v3:
  - Addressed Lorenzo Pieralisi comment.

v2:
  - Changed as per Lorenzo Pieralisi and Hanjun Guo suggestions.

v1:
  - Initial patch

Ganapatrao Kulkarni (2):
  acpica: iort: Update SMMUv3 header for proximity domain mapping
  acpi/iort: numa: Add numa node mapping for smmuv3 devices

 drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
 include/acpi/actbl2.h     |  4 ++++
 2 files changed, 30 insertions(+), 2 deletions(-)

-- 
1.8.1.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping
  2017-06-08  4:44 [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
@ 2017-06-08  4:44 ` Ganapatrao Kulkarni
  2017-06-19 17:54   ` Robin Murphy
  2017-06-08  4:44 ` [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
  2017-06-08  9:04 ` [PATCH v3 0/2] acpi/iort, " John Garry
  2 siblings, 1 reply; 12+ messages in thread
From: Ganapatrao Kulkarni @ 2017-06-08  4:44 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	robin.murphy, lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

ARM IORT specification (rev. C) has added two new fields to define
proximity domain for the SMMUv3 node in the IORT table.

Proximity Domain Valid:
	Set to 1 if the value provided in the Proximity Domain field is
	valid. Set to 0 otherwise.

Proximity domain:
	If the Proximity Domain Valid flag is set to 1, this entry
	provides the proximity domain to which this SMMU
	instance belongs.

Update header file to reflect this.

Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
---
 include/acpi/actbl2.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
index 4b306a6..389e91f 100644
--- a/include/acpi/actbl2.h
+++ b/include/acpi/actbl2.h
@@ -805,6 +805,9 @@ struct acpi_iort_smmu_v3 {
 	u32 pri_gsiv;
 	u32 gerr_gsiv;
 	u32 sync_gsiv;
+	u8 pxm;
+	u8 reserved1;
+	u16 reserved2;
 };
 
 /* Values for Model field above */
@@ -817,6 +820,7 @@ struct acpi_iort_smmu_v3 {
 
 #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
 #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
+#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
 
 /*******************************************************************************
  *
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-06-08  4:44 [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
  2017-06-08  4:44 ` [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping Ganapatrao Kulkarni
@ 2017-06-08  4:44 ` Ganapatrao Kulkarni
  2017-06-15 13:46   ` Lorenzo Pieralisi
  2017-07-22  3:23   ` Hanjun Guo
  2017-06-08  9:04 ` [PATCH v3 0/2] acpi/iort, " John Garry
  2 siblings, 2 replies; 12+ messages in thread
From: Ganapatrao Kulkarni @ 2017-06-08  4:44 UTC (permalink / raw)
  To: linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	robin.murphy, lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

Add code to parse proximity domain in SMMUv3 IORT table to
set numa node mapping for smmuv3 devices.

Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
---
 drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index bba2b59..e804386 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
 	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
 }
 
+/*
+ * set numa proximity domain for smmuv3 device
+ */
+static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
+		struct device *dev)
+{
+	struct acpi_iort_smmu_v3 *smmu;
+
+	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
+	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
+		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
+		pr_info("SMMUV3[%llx] Mapped to Proximity domain %d\n",
+			smmu->base_address,
+			smmu->pxm);
+	}
+}
+
 static int __init arm_smmu_count_resources(struct acpi_iort_node *node)
 {
 	struct acpi_iort_smmu *smmu;
@@ -951,20 +968,24 @@ struct iort_iommu_config {
 	int (*iommu_count_resources)(struct acpi_iort_node *node);
 	void (*iommu_init_resources)(struct resource *res,
 				     struct acpi_iort_node *node);
+	void (*iommu_set_proximity)(struct acpi_iort_node *node,
+				     struct device *dev);
 };
 
 static const struct iort_iommu_config iort_arm_smmu_v3_cfg __initconst = {
 	.name = "arm-smmu-v3",
 	.iommu_is_coherent = arm_smmu_v3_is_coherent,
 	.iommu_count_resources = arm_smmu_v3_count_resources,
-	.iommu_init_resources = arm_smmu_v3_init_resources
+	.iommu_init_resources = arm_smmu_v3_init_resources,
+	.iommu_set_proximity = arm_smmu_v3_set_proximity
 };
 
 static const struct iort_iommu_config iort_arm_smmu_cfg __initconst = {
 	.name = "arm-smmu",
 	.iommu_is_coherent = arm_smmu_is_coherent,
 	.iommu_count_resources = arm_smmu_count_resources,
-	.iommu_init_resources = arm_smmu_init_resources
+	.iommu_init_resources = arm_smmu_init_resources,
+	.iommu_set_proximity = NULL
 };
 
 static __init
@@ -1002,6 +1023,9 @@ static int __init iort_add_smmu_platform_device(struct acpi_iort_node *node)
 	if (!pdev)
 		return -ENOMEM;
 
+	if (ops->iommu_set_proximity)
+		ops->iommu_set_proximity(node, &pdev->dev);
+
 	count = ops->iommu_count_resources(node);
 
 	r = kcalloc(count, sizeof(*r), GFP_KERNEL);
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices
  2017-06-08  4:44 [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
  2017-06-08  4:44 ` [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping Ganapatrao Kulkarni
  2017-06-08  4:44 ` [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
@ 2017-06-08  9:04 ` John Garry
  2 siblings, 0 replies; 12+ messages in thread
From: John Garry @ 2017-06-08  9:04 UTC (permalink / raw)
  To: Ganapatrao Kulkarni, linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	robin.murphy, lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

On 08/06/2017 05:44, Ganapatrao Kulkarni wrote:
> ARM IORT specification(rev. C) has added  provision to define proximity
> domain in SMMUv3 IORT table. Adding required code to parse Proximity
> domain and set numa_node of smmv3 platform devices.
>
> v3:
>   - Addressed Lorenzo Pieralisi comment.
>
> v2:
>   - Changed as per Lorenzo Pieralisi and Hanjun Guo suggestions.
>
> v1:
>   - Initial patch
>
> Ganapatrao Kulkarni (2):
>   acpica: iort: Update SMMUv3 header for proximity domain mapping
>   acpi/iort: numa: Add numa node mapping for smmuv3 devices
>
>  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
>  include/acpi/actbl2.h     |  4 ++++
>  2 files changed, 30 insertions(+), 2 deletions(-)
>

We'll try and test this in the next day or so.

John

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-06-08  4:44 ` [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
@ 2017-06-15 13:46   ` Lorenzo Pieralisi
  2017-06-28 17:47     ` Robert Richter
  2017-07-22  3:23   ` Hanjun Guo
  1 sibling, 1 reply; 12+ messages in thread
From: Lorenzo Pieralisi @ 2017-06-15 13:46 UTC (permalink / raw)
  To: Ganapatrao Kulkarni, lv.zheng, rjw
  Cc: linux-kernel, linux-arm-kernel, linux-acpi, iommu, Will.Deacon,
	hanjun.guo, sudeep.holla, robin.murphy, joro, lenb, jnair,
	gpkulkarni

Hi,

On Thu, Jun 08, 2017 at 10:14:19AM +0530, Ganapatrao Kulkarni wrote:
> Add code to parse proximity domain in SMMUv3 IORT table to
> set numa node mapping for smmuv3 devices.
> 
> Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> ---
>  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
>  1 file changed, 26 insertions(+), 2 deletions(-)

I am happy to take this but I want to know what we shall do with
patch 1 and related ACPICA changes first.

Thanks,
Lorenzo

> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index bba2b59..e804386 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
>  	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
>  }
>  
> +/*
> + * set numa proximity domain for smmuv3 device
> + */
> +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
> +		struct device *dev)
> +{
> +	struct acpi_iort_smmu_v3 *smmu;
> +
> +	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
> +	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
> +		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
> +		pr_info("SMMUV3[%llx] Mapped to Proximity domain %d\n",
> +			smmu->base_address,
> +			smmu->pxm);
> +	}
> +}
> +
>  static int __init arm_smmu_count_resources(struct acpi_iort_node *node)
>  {
>  	struct acpi_iort_smmu *smmu;
> @@ -951,20 +968,24 @@ struct iort_iommu_config {
>  	int (*iommu_count_resources)(struct acpi_iort_node *node);
>  	void (*iommu_init_resources)(struct resource *res,
>  				     struct acpi_iort_node *node);
> +	void (*iommu_set_proximity)(struct acpi_iort_node *node,
> +				     struct device *dev);
>  };
>  
>  static const struct iort_iommu_config iort_arm_smmu_v3_cfg __initconst = {
>  	.name = "arm-smmu-v3",
>  	.iommu_is_coherent = arm_smmu_v3_is_coherent,
>  	.iommu_count_resources = arm_smmu_v3_count_resources,
> -	.iommu_init_resources = arm_smmu_v3_init_resources
> +	.iommu_init_resources = arm_smmu_v3_init_resources,
> +	.iommu_set_proximity = arm_smmu_v3_set_proximity
>  };
>  
>  static const struct iort_iommu_config iort_arm_smmu_cfg __initconst = {
>  	.name = "arm-smmu",
>  	.iommu_is_coherent = arm_smmu_is_coherent,
>  	.iommu_count_resources = arm_smmu_count_resources,
> -	.iommu_init_resources = arm_smmu_init_resources
> +	.iommu_init_resources = arm_smmu_init_resources,
> +	.iommu_set_proximity = NULL
>  };
>  
>  static __init
> @@ -1002,6 +1023,9 @@ static int __init iort_add_smmu_platform_device(struct acpi_iort_node *node)
>  	if (!pdev)
>  		return -ENOMEM;
>  
> +	if (ops->iommu_set_proximity)
> +		ops->iommu_set_proximity(node, &pdev->dev);
> +
>  	count = ops->iommu_count_resources(node);
>  
>  	r = kcalloc(count, sizeof(*r), GFP_KERNEL);
> -- 
> 1.8.1.4
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping
  2017-06-08  4:44 ` [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping Ganapatrao Kulkarni
@ 2017-06-19 17:54   ` Robin Murphy
  2017-06-20  2:27     ` Ganapatrao Kulkarni
  0 siblings, 1 reply; 12+ messages in thread
From: Robin Murphy @ 2017-06-19 17:54 UTC (permalink / raw)
  To: Ganapatrao Kulkarni, linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

On 08/06/17 05:44, Ganapatrao Kulkarni wrote:
> ARM IORT specification (rev. C) has added two new fields to define
> proximity domain for the SMMUv3 node in the IORT table.
> 
> Proximity Domain Valid:
> 	Set to 1 if the value provided in the Proximity Domain field is
> 	valid. Set to 0 otherwise.
> 
> Proximity domain:
> 	If the Proximity Domain Valid flag is set to 1, this entry
> 	provides the proximity domain to which this SMMU
> 	instance belongs.
> 
> Update header file to reflect this.
> 
> Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> ---
>  include/acpi/actbl2.h | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
> index 4b306a6..389e91f 100644
> --- a/include/acpi/actbl2.h
> +++ b/include/acpi/actbl2.h
> @@ -805,6 +805,9 @@ struct acpi_iort_smmu_v3 {
>  	u32 pri_gsiv;
>  	u32 gerr_gsiv;
>  	u32 sync_gsiv;
> +	u8 pxm;
> +	u8 reserved1;
> +	u16 reserved2;

Why add the padding if you're not also adding the following field that
it aligns? (side note: could it not just be a u8[3]?)

If the actual structure definition is changing, do there not need to be
corresponding IASL changes too?

>  };
>  
>  /* Values for Model field above */
> @@ -817,6 +820,7 @@ struct acpi_iort_smmu_v3 {
>  
>  #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
>  #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
> +#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)

Maybe it's just me, but "PXM" seems incredibly cryptic.

Robin.

>  
>  /*******************************************************************************
>   *
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping
  2017-06-19 17:54   ` Robin Murphy
@ 2017-06-20  2:27     ` Ganapatrao Kulkarni
  0 siblings, 0 replies; 12+ messages in thread
From: Ganapatrao Kulkarni @ 2017-06-20  2:27 UTC (permalink / raw)
  To: Robin Murphy
  Cc: Ganapatrao Kulkarni, linux-kernel, linux-arm-kernel, linux-acpi,
	iommu, Will Deacon, Lorenzo Pieralisi, Hanjun Guo, sudeep.holla,
	Lv Zheng, joro, Rafael J. Wysocki, Len Brown, Jayachandran C

On Mon, Jun 19, 2017 at 11:24 PM, Robin Murphy <robin.murphy@arm.com> wrote:
> On 08/06/17 05:44, Ganapatrao Kulkarni wrote:
>> ARM IORT specification (rev. C) has added two new fields to define
>> proximity domain for the SMMUv3 node in the IORT table.
>>
>> Proximity Domain Valid:
>>       Set to 1 if the value provided in the Proximity Domain field is
>>       valid. Set to 0 otherwise.
>>
>> Proximity domain:
>>       If the Proximity Domain Valid flag is set to 1, this entry
>>       provides the proximity domain to which this SMMU
>>       instance belongs.
>>
>> Update header file to reflect this.
>>
>> Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
>> ---
>>  include/acpi/actbl2.h | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h
>> index 4b306a6..389e91f 100644
>> --- a/include/acpi/actbl2.h
>> +++ b/include/acpi/actbl2.h
>> @@ -805,6 +805,9 @@ struct acpi_iort_smmu_v3 {
>>       u32 pri_gsiv;
>>       u32 gerr_gsiv;
>>       u32 sync_gsiv;
>> +     u8 pxm;
>> +     u8 reserved1;
>> +     u16 reserved2;
>
> Why add the padding if you're not also adding the following field that
> it aligns? (side note: could it not just be a u8[3]?)

added to align as well to comply with  the spec.

>
> If the actual structure definition is changing, do there not need to be
> corresponding IASL changes too?

yes, it is been added and sent to acpica devel ML.
https://lists.acpica.org/pipermail/devel/2017-June/001243.html

>
>>  };
>>
>>  /* Values for Model field above */
>> @@ -817,6 +820,7 @@ struct acpi_iort_smmu_v3 {
>>
>>  #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
>>  #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
>> +#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
>
> Maybe it's just me, but "PXM" seems incredibly cryptic.

PXM stands for proximity(refer ACPI spec)
it is widely used in spec and also in Linux kernel.

>
> Robin.
>
>>
>>  /*******************************************************************************
>>   *
>>
>

thanks
Ganapat

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-06-15 13:46   ` Lorenzo Pieralisi
@ 2017-06-28 17:47     ` Robert Richter
  2017-07-04 10:07       ` Lorenzo Pieralisi
  0 siblings, 1 reply; 12+ messages in thread
From: Robert Richter @ 2017-06-28 17:47 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: Ganapatrao Kulkarni, lv.zheng, rjw, linux-kernel,
	linux-arm-kernel, linux-acpi, iommu, Will.Deacon, hanjun.guo,
	sudeep.holla, robin.murphy, joro, lenb, jnair, gpkulkarni

On 15.06.17 14:46:03, Lorenzo Pieralisi wrote:
> On Thu, Jun 08, 2017 at 10:14:19AM +0530, Ganapatrao Kulkarni wrote:
> > Add code to parse proximity domain in SMMUv3 IORT table to
> > set numa node mapping for smmuv3 devices.
> > 
> > Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> > ---
> >  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
> >  1 file changed, 26 insertions(+), 2 deletions(-)
> 
> I am happy to take this but I want to know what we shall do with
> patch 1 and related ACPICA changes first.

The change is now in acpica:

 https://github.com/acpica/acpica/commit/8cadc4fb500e2aa52241e367c87a0f95d9760c58

So we could guard the code with an #ifdef until that patch is pulled
in via acpica tree:

> > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> > index bba2b59..e804386 100644
> > --- a/drivers/acpi/arm64/iort.c
> > +++ b/drivers/acpi/arm64/iort.c
> > @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
> >  	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
> >  }
> >  
> > +/*
> > + * set numa proximity domain for smmuv3 device
> > + */
> > +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
> > +		struct device *dev)
> > +{

#ifdef ACPI_IORT_SMMU_V3_PXM_VALID

> > +	struct acpi_iort_smmu_v3 *smmu;
> > +
> > +	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
> > +	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
> > +		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
> > +		pr_info("SMMUV3[%llx] Mapped to Proximity domain %d\n",
> > +			smmu->base_address,
> > +			smmu->pxm);
> > +	}

#endif

> > +}
> > +

Could the patch be applied with this change?

Thanks,

-Robert

> >  static int __init arm_smmu_count_resources(struct acpi_iort_node *node)
> >  {
> >  	struct acpi_iort_smmu *smmu;
> > @@ -951,20 +968,24 @@ struct iort_iommu_config {
> >  	int (*iommu_count_resources)(struct acpi_iort_node *node);
> >  	void (*iommu_init_resources)(struct resource *res,
> >  				     struct acpi_iort_node *node);
> > +	void (*iommu_set_proximity)(struct acpi_iort_node *node,
> > +				     struct device *dev);
> >  };
> >  
> >  static const struct iort_iommu_config iort_arm_smmu_v3_cfg __initconst = {
> >  	.name = "arm-smmu-v3",
> >  	.iommu_is_coherent = arm_smmu_v3_is_coherent,
> >  	.iommu_count_resources = arm_smmu_v3_count_resources,
> > -	.iommu_init_resources = arm_smmu_v3_init_resources
> > +	.iommu_init_resources = arm_smmu_v3_init_resources,
> > +	.iommu_set_proximity = arm_smmu_v3_set_proximity
> >  };
> >  
> >  static const struct iort_iommu_config iort_arm_smmu_cfg __initconst = {
> >  	.name = "arm-smmu",
> >  	.iommu_is_coherent = arm_smmu_is_coherent,
> >  	.iommu_count_resources = arm_smmu_count_resources,
> > -	.iommu_init_resources = arm_smmu_init_resources
> > +	.iommu_init_resources = arm_smmu_init_resources,
> > +	.iommu_set_proximity = NULL
> >  };
> >  
> >  static __init
> > @@ -1002,6 +1023,9 @@ static int __init iort_add_smmu_platform_device(struct acpi_iort_node *node)
> >  	if (!pdev)
> >  		return -ENOMEM;
> >  
> > +	if (ops->iommu_set_proximity)
> > +		ops->iommu_set_proximity(node, &pdev->dev);
> > +
> >  	count = ops->iommu_count_resources(node);
> >  
> >  	r = kcalloc(count, sizeof(*r), GFP_KERNEL);
> > -- 
> > 1.8.1.4
> > 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-06-28 17:47     ` Robert Richter
@ 2017-07-04 10:07       ` Lorenzo Pieralisi
  2017-07-06 11:20         ` Robert Richter
  0 siblings, 1 reply; 12+ messages in thread
From: Lorenzo Pieralisi @ 2017-07-04 10:07 UTC (permalink / raw)
  To: Robert Richter
  Cc: Ganapatrao Kulkarni, lv.zheng, rjw, linux-kernel,
	linux-arm-kernel, linux-acpi, iommu, Will.Deacon, hanjun.guo,
	sudeep.holla, robin.murphy, joro, lenb, jnair, gpkulkarni

Hi Robert,

On Wed, Jun 28, 2017 at 07:47:50PM +0200, Robert Richter wrote:
> On 15.06.17 14:46:03, Lorenzo Pieralisi wrote:
> > On Thu, Jun 08, 2017 at 10:14:19AM +0530, Ganapatrao Kulkarni wrote:
> > > Add code to parse proximity domain in SMMUv3 IORT table to
> > > set numa node mapping for smmuv3 devices.
> > > 
> > > Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> > > ---
> > >  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
> > >  1 file changed, 26 insertions(+), 2 deletions(-)
> > 
> > I am happy to take this but I want to know what we shall do with
> > patch 1 and related ACPICA changes first.
> 
> The change is now in acpica:
> 
>  https://github.com/acpica/acpica/commit/8cadc4fb500e2aa52241e367c87a0f95d9760c58
> 
> So we could guard the code with an #ifdef until that patch is pulled
> in via acpica tree:
> 
> > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> > > index bba2b59..e804386 100644
> > > --- a/drivers/acpi/arm64/iort.c
> > > +++ b/drivers/acpi/arm64/iort.c
> > > @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
> > >  	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
> > >  }
> > >  
> > > +/*
> > > + * set numa proximity domain for smmuv3 device
> > > + */
> > > +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
> > > +		struct device *dev)
> > > +{
> 
> #ifdef ACPI_IORT_SMMU_V3_PXM_VALID
> 
> > > +	struct acpi_iort_smmu_v3 *smmu;
> > > +
> > > +	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
> > > +	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
> > > +		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
> > > +		pr_info("SMMUV3[%llx] Mapped to Proximity domain %d\n",
> > > +			smmu->base_address,
> > > +			smmu->pxm);
> > > +	}
> 
> #endif
> 
> > > +}
> > > +
> 
> Could the patch be applied with this change?

Sorry I was away (and the ARM64 tree was not accepting any new code last
week anyway), I will send the patch upstream for 4.14 (with your change
above - or whatever ACPICA guard make it safe - since we will depend on
ACPICA changes merge timing anyway - they won't be merged this cycle).

Bad timing, apologies, I hope it is not a burden to carry it for one
cycle.

Thanks,
Lorenzo

> 
> Thanks,
> 
> -Robert
> 
> > >  static int __init arm_smmu_count_resources(struct acpi_iort_node *node)
> > >  {
> > >  	struct acpi_iort_smmu *smmu;
> > > @@ -951,20 +968,24 @@ struct iort_iommu_config {
> > >  	int (*iommu_count_resources)(struct acpi_iort_node *node);
> > >  	void (*iommu_init_resources)(struct resource *res,
> > >  				     struct acpi_iort_node *node);
> > > +	void (*iommu_set_proximity)(struct acpi_iort_node *node,
> > > +				     struct device *dev);
> > >  };
> > >  
> > >  static const struct iort_iommu_config iort_arm_smmu_v3_cfg __initconst = {
> > >  	.name = "arm-smmu-v3",
> > >  	.iommu_is_coherent = arm_smmu_v3_is_coherent,
> > >  	.iommu_count_resources = arm_smmu_v3_count_resources,
> > > -	.iommu_init_resources = arm_smmu_v3_init_resources
> > > +	.iommu_init_resources = arm_smmu_v3_init_resources,
> > > +	.iommu_set_proximity = arm_smmu_v3_set_proximity
> > >  };
> > >  
> > >  static const struct iort_iommu_config iort_arm_smmu_cfg __initconst = {
> > >  	.name = "arm-smmu",
> > >  	.iommu_is_coherent = arm_smmu_is_coherent,
> > >  	.iommu_count_resources = arm_smmu_count_resources,
> > > -	.iommu_init_resources = arm_smmu_init_resources
> > > +	.iommu_init_resources = arm_smmu_init_resources,
> > > +	.iommu_set_proximity = NULL
> > >  };
> > >  
> > >  static __init
> > > @@ -1002,6 +1023,9 @@ static int __init iort_add_smmu_platform_device(struct acpi_iort_node *node)
> > >  	if (!pdev)
> > >  		return -ENOMEM;
> > >  
> > > +	if (ops->iommu_set_proximity)
> > > +		ops->iommu_set_proximity(node, &pdev->dev);
> > > +
> > >  	count = ops->iommu_count_resources(node);
> > >  
> > >  	r = kcalloc(count, sizeof(*r), GFP_KERNEL);
> > > -- 
> > > 1.8.1.4
> > > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-07-04 10:07       ` Lorenzo Pieralisi
@ 2017-07-06 11:20         ` Robert Richter
  0 siblings, 0 replies; 12+ messages in thread
From: Robert Richter @ 2017-07-06 11:20 UTC (permalink / raw)
  To: Lorenzo Pieralisi
  Cc: Ganapatrao Kulkarni, lv.zheng, rjw, linux-kernel,
	linux-arm-kernel, linux-acpi, iommu, Will.Deacon, hanjun.guo,
	sudeep.holla, robin.murphy, joro, lenb, jnair, gpkulkarni

On 04.07.17 11:07:59, Lorenzo Pieralisi wrote:
> On Wed, Jun 28, 2017 at 07:47:50PM +0200, Robert Richter wrote:
> > On 15.06.17 14:46:03, Lorenzo Pieralisi wrote:
> > > On Thu, Jun 08, 2017 at 10:14:19AM +0530, Ganapatrao Kulkarni wrote:
> > > > Add code to parse proximity domain in SMMUv3 IORT table to
> > > > set numa node mapping for smmuv3 devices.
> > > > 
> > > > Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> > > > ---
> > > >  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
> > > >  1 file changed, 26 insertions(+), 2 deletions(-)
> > > 
> > > I am happy to take this but I want to know what we shall do with
> > > patch 1 and related ACPICA changes first.
> > 
> > The change is now in acpica:
> > 
> >  https://github.com/acpica/acpica/commit/8cadc4fb500e2aa52241e367c87a0f95d9760c58
> > 
> > So we could guard the code with an #ifdef until that patch is pulled
> > in via acpica tree:
> > 
> > > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> > > > index bba2b59..e804386 100644
> > > > --- a/drivers/acpi/arm64/iort.c
> > > > +++ b/drivers/acpi/arm64/iort.c
> > > > @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
> > > >  	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
> > > >  }
> > > >  
> > > > +/*
> > > > + * set numa proximity domain for smmuv3 device
> > > > + */
> > > > +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
> > > > +		struct device *dev)
> > > > +{
> > 
> > #ifdef ACPI_IORT_SMMU_V3_PXM_VALID
> > 
> > > > +	struct acpi_iort_smmu_v3 *smmu;
> > > > +
> > > > +	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
> > > > +	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
> > > > +		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
> > > > +		pr_info("SMMUV3[%llx] Mapped to Proximity domain %d\n",
> > > > +			smmu->base_address,
> > > > +			smmu->pxm);
> > > > +	}
> > 
> > #endif
> > 
> > > > +}
> > > > +
> > 
> > Could the patch be applied with this change?
> 
> Sorry I was away (and the ARM64 tree was not accepting any new code last
> week anyway), I will send the patch upstream for 4.14 (with your change
> above - or whatever ACPICA guard make it safe - since we will depend on
> ACPICA changes merge timing anyway - they won't be merged this cycle).
> 
> Bad timing, apologies, I hope it is not a burden to carry it for one
> cycle.

No problem. Good to hear this is accepted for 4.14.

Thanks,

-Robert

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-06-08  4:44 ` [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
  2017-06-15 13:46   ` Lorenzo Pieralisi
@ 2017-07-22  3:23   ` Hanjun Guo
  2017-07-22 13:05     ` Ganapatrao Kulkarni
  1 sibling, 1 reply; 12+ messages in thread
From: Hanjun Guo @ 2017-07-22  3:23 UTC (permalink / raw)
  To: Ganapatrao Kulkarni, linux-kernel, linux-arm-kernel, linux-acpi, iommu
  Cc: Will.Deacon, lorenzo.pieralisi, hanjun.guo, sudeep.holla,
	robin.murphy, lv.zheng, joro, rjw, lenb, jnair, gpkulkarni

Hi Ganapat,

On 2017/6/8 12:44, Ganapatrao Kulkarni wrote:
> Add code to parse proximity domain in SMMUv3 IORT table to
> set numa node mapping for smmuv3 devices.
>
> Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
> ---
>  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
>  1 file changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index bba2b59..e804386 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
>  	return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
>  }
>  
> +/*
> + * set numa proximity domain for smmuv3 device
> + */
> +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
> +		struct device *dev)
> +{
> +	struct acpi_iort_smmu_v3 *smmu;
> +
> +	smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
> +	if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
> +		set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
                                                          ^^
Will have compile error in !CONFIG_NUMA, I think we need to introduce
a stub function in acpi_numa.h.

Thanks
Hanjun

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices
  2017-07-22  3:23   ` Hanjun Guo
@ 2017-07-22 13:05     ` Ganapatrao Kulkarni
  0 siblings, 0 replies; 12+ messages in thread
From: Ganapatrao Kulkarni @ 2017-07-22 13:05 UTC (permalink / raw)
  To: Hanjun Guo
  Cc: Ganapatrao Kulkarni, linux-kernel, linux-arm-kernel, linux-acpi,
	iommu, Will Deacon, Lorenzo Pieralisi, Hanjun Guo, sudeep.holla,
	Robin Murphy, Lv Zheng, joro, Rafael J. Wysocki, Len Brown,
	Jayachandran C

On Sat, Jul 22, 2017 at 8:53 AM, Hanjun Guo <guohanjun@huawei.com> wrote:
> Hi Ganapat,
>
> On 2017/6/8 12:44, Ganapatrao Kulkarni wrote:
>> Add code to parse proximity domain in SMMUv3 IORT table to
>> set numa node mapping for smmuv3 devices.
>>
>> Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
>> ---
>>  drivers/acpi/arm64/iort.c | 28 ++++++++++++++++++++++++++--
>>  1 file changed, 26 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
>> index bba2b59..e804386 100644
>> --- a/drivers/acpi/arm64/iort.c
>> +++ b/drivers/acpi/arm64/iort.c
>> @@ -882,6 +882,23 @@ static bool __init arm_smmu_v3_is_coherent(struct acpi_iort_node *node)
>>       return smmu->flags & ACPI_IORT_SMMU_V3_COHACC_OVERRIDE;
>>  }
>>
>> +/*
>> + * set numa proximity domain for smmuv3 device
>> + */
>> +static void  __init arm_smmu_v3_set_proximity(struct acpi_iort_node *node,
>> +             struct device *dev)
>> +{
>> +     struct acpi_iort_smmu_v3 *smmu;
>> +
>> +     smmu = (struct acpi_iort_smmu_v3 *)node->node_data;
>> +     if (smmu->flags & ACPI_IORT_SMMU_V3_PXM_VALID) {
>> +             set_dev_node(dev, acpi_map_pxm_to_node(smmu->pxm));
>                                                           ^^
> Will have compile error in !CONFIG_NUMA, I think we need to introduce
> a stub function in acpi_numa.h.

thanks Hanjun, i thought it is already there in header file, however,
there is stub for acpi_map_pxm_to_online_node and not for this
function.
it is better to have ifdef. will do it in next version.

>
> Thanks
> Hanjun
>

thanks
Ganapat

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-07-22 13:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-08  4:44 [PATCH v3 0/2] acpi/iort, numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
2017-06-08  4:44 ` [PATCH v3 1/2] acpica: iort: Update SMMUv3 header for proximity domain mapping Ganapatrao Kulkarni
2017-06-19 17:54   ` Robin Murphy
2017-06-20  2:27     ` Ganapatrao Kulkarni
2017-06-08  4:44 ` [PATCH v3 2/2] acpi/iort: numa: Add numa node mapping for smmuv3 devices Ganapatrao Kulkarni
2017-06-15 13:46   ` Lorenzo Pieralisi
2017-06-28 17:47     ` Robert Richter
2017-07-04 10:07       ` Lorenzo Pieralisi
2017-07-06 11:20         ` Robert Richter
2017-07-22  3:23   ` Hanjun Guo
2017-07-22 13:05     ` Ganapatrao Kulkarni
2017-06-08  9:04 ` [PATCH v3 0/2] acpi/iort, " John Garry

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).