diff mbox series

[RFC,6/6] ACPI/IORT: Drop code to set the PMCG software-defined model

Message ID 1569854031-237636-7-git-send-email-john.garry@huawei.com
State New
Headers show
Series SMMUv3 PMCG IMP DEF event support | expand

Commit Message

John Garry Sept. 30, 2019, 2:33 p.m. UTC
Now that we can identify a PMCG implementation from the parent SMMUv3
IIDR, drop all the code to match based on the ACPI OEM ID.

Signed-off-by: John Garry <john.garry@huawei.com>

---
 drivers/acpi/arm64/iort.c | 35 +----------------------------------
 include/linux/acpi_iort.h |  8 --------
 2 files changed, 1 insertion(+), 42 deletions(-)

-- 
2.17.1

Comments

Hanjun Guo Oct. 15, 2019, 3:06 a.m. UTC | #1
On 2019/9/30 22:33, John Garry wrote:
> Now that we can identify a PMCG implementation from the parent SMMUv3

> IIDR, drop all the code to match based on the ACPI OEM ID.

> 

> Signed-off-by: John Garry <john.garry@huawei.com>

> ---

>  drivers/acpi/arm64/iort.c | 35 +----------------------------------

>  include/linux/acpi_iort.h |  8 --------

>  2 files changed, 1 insertion(+), 42 deletions(-)

> 

> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c

> index 0b687520c3e7..d04888cb8cff 100644

> --- a/drivers/acpi/arm64/iort.c

> +++ b/drivers/acpi/arm64/iort.c

> @@ -1377,27 +1377,6 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,

>  				       ACPI_EDGE_SENSITIVE, &res[2]);

>  }

>  

> -static struct acpi_platform_list pmcg_plat_info[] __initdata = {

> -	/* HiSilicon Hip08 Platform */

> -	{"HISI  ", "HIP08   ", 0, ACPI_SIG_IORT, greater_than_or_equal,

> -	 "Erratum #162001800", IORT_SMMU_V3_PMCG_HISI_HIP08},

> -	{ }

> -};

> -

> -static int __init arm_smmu_v3_pmcg_add_platdata(struct platform_device *pdev)

> -{

> -	u32 model;

> -	int idx;

> -

> -	idx = acpi_match_platform_list(pmcg_plat_info);

> -	if (idx >= 0)

> -		model = pmcg_plat_info[idx].data;

> -	else

> -		model = IORT_SMMU_V3_PMCG_GENERIC;

> -

> -	return platform_device_add_data(pdev, &model, sizeof(model));

> -}

> -

>  struct iort_dev_config {

>  	const char *name;

>  	int (*dev_init)(struct acpi_iort_node *node);

> @@ -1408,7 +1387,6 @@ struct iort_dev_config {

>  				     struct acpi_iort_node *node);

>  	int (*dev_set_proximity)(struct device *dev,

>  				    struct acpi_iort_node *node);

> -	int (*dev_add_platdata)(struct platform_device *pdev);

>  };

>  

>  static const struct iort_dev_config iort_arm_smmu_v3_cfg __initconst = {

> @@ -1430,7 +1408,6 @@ static const struct iort_dev_config iort_arm_smmu_v3_pmcg_cfg __initconst = {

>  	.name = "arm-smmu-v3-pmcg",

>  	.dev_count_resources = arm_smmu_v3_pmcg_count_resources,

>  	.dev_init_resources = arm_smmu_v3_pmcg_init_resources,

> -	.dev_add_platdata = arm_smmu_v3_pmcg_add_platdata,

>  };

>  

>  static __init const struct iort_dev_config *iort_get_dev_cfg(

> @@ -1494,17 +1471,7 @@ static int __init iort_add_platform_device(struct acpi_iort_node *node,

>  	if (ret)

>  		goto dev_put;

>  

> -	/*

> -	 * Platform devices based on PMCG nodes uses platform_data to

> -	 * pass the hardware model info to the driver. For others, add

> -	 * a copy of IORT node pointer to platform_data to be used to

> -	 * retrieve IORT data information.

> -	 */

> -	if (ops->dev_add_platdata)

> -		ret = ops->dev_add_platdata(pdev);

> -	else

> -		ret = platform_device_add_data(pdev, &node, sizeof(node));

> -

> +	ret = platform_device_add_data(pdev, &node, sizeof(node));

>  	if (ret)

>  		goto dev_put;

>  

> diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h

> index 8e7e2ec37f1b..7a8961e6a8bb 100644

> --- a/include/linux/acpi_iort.h

> +++ b/include/linux/acpi_iort.h

> @@ -14,14 +14,6 @@

>  #define IORT_IRQ_MASK(irq)		(irq & 0xffffffffULL)

>  #define IORT_IRQ_TRIGGER_MASK(irq)	((irq >> 32) & 0xffffffffULL)

>  

> -/*

> - * PMCG model identifiers for use in smmu pmu driver. Please note

> - * that this is purely for the use of software and has nothing to

> - * do with hardware or with IORT specification.

> - */

> -#define IORT_SMMU_V3_PMCG_GENERIC        0x00000000 /* Generic SMMUv3 PMCG */

> -#define IORT_SMMU_V3_PMCG_HISI_HIP08     0x00000001 /* HiSilicon HIP08 PMCG */


Since only HiSilicon platform has such erratum, and I think it works with
both old version of firmware, I'm fine with removing this erratum framework.

Acked-by: Hanjun Guo <guohanjun@huawei.com>


Thanks
Hanjun
John Garry Oct. 15, 2019, 8:47 a.m. UTC | #2
On 15/10/2019 04:06, Hanjun Guo wrote:
>> -/*

>> > - * PMCG model identifiers for use in smmu pmu driver. Please note

>> > - * that this is purely for the use of software and has nothing to

>> > - * do with hardware or with IORT specification.

>> > - */

>> > -#define IORT_SMMU_V3_PMCG_GENERIC        0x00000000 /* Generic SMMUv3 PMCG */

>> > -#define IORT_SMMU_V3_PMCG_HISI_HIP08     0x00000001 /* HiSilicon HIP08 PMCG */

> Since only HiSilicon platform has such erratum, and I think it works with

> both old version of firmware, I'm fine with removing this erratum framework.

>


Yeah, seems a decent change on its own, even without the SMMU PMCG 
driver changes.

But we still need to check on patch "[PATCH RFC 2/6] iommu/arm-smmu-v3: 
Record IIDR in arm_smmu_device structure" to progress any of this.

Will, Robin, Any opinion on that patch?

https://lore.kernel.org/linux-iommu/1569854031-237636-1-git-send-email-john.garry@huawei.com/T/#m1e24771a23ee5426ec94ca2c4ec572642c155a77

> Acked-by: Hanjun Guo <guohanjun@huawei.com>


Cheers,
John

>

> Thanks

> Hanjun

>

>

> .

>
diff mbox series

Patch

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 0b687520c3e7..d04888cb8cff 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1377,27 +1377,6 @@  static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,
 				       ACPI_EDGE_SENSITIVE, &res[2]);
 }
 
-static struct acpi_platform_list pmcg_plat_info[] __initdata = {
-	/* HiSilicon Hip08 Platform */
-	{"HISI  ", "HIP08   ", 0, ACPI_SIG_IORT, greater_than_or_equal,
-	 "Erratum #162001800", IORT_SMMU_V3_PMCG_HISI_HIP08},
-	{ }
-};
-
-static int __init arm_smmu_v3_pmcg_add_platdata(struct platform_device *pdev)
-{
-	u32 model;
-	int idx;
-
-	idx = acpi_match_platform_list(pmcg_plat_info);
-	if (idx >= 0)
-		model = pmcg_plat_info[idx].data;
-	else
-		model = IORT_SMMU_V3_PMCG_GENERIC;
-
-	return platform_device_add_data(pdev, &model, sizeof(model));
-}
-
 struct iort_dev_config {
 	const char *name;
 	int (*dev_init)(struct acpi_iort_node *node);
@@ -1408,7 +1387,6 @@  struct iort_dev_config {
 				     struct acpi_iort_node *node);
 	int (*dev_set_proximity)(struct device *dev,
 				    struct acpi_iort_node *node);
-	int (*dev_add_platdata)(struct platform_device *pdev);
 };
 
 static const struct iort_dev_config iort_arm_smmu_v3_cfg __initconst = {
@@ -1430,7 +1408,6 @@  static const struct iort_dev_config iort_arm_smmu_v3_pmcg_cfg __initconst = {
 	.name = "arm-smmu-v3-pmcg",
 	.dev_count_resources = arm_smmu_v3_pmcg_count_resources,
 	.dev_init_resources = arm_smmu_v3_pmcg_init_resources,
-	.dev_add_platdata = arm_smmu_v3_pmcg_add_platdata,
 };
 
 static __init const struct iort_dev_config *iort_get_dev_cfg(
@@ -1494,17 +1471,7 @@  static int __init iort_add_platform_device(struct acpi_iort_node *node,
 	if (ret)
 		goto dev_put;
 
-	/*
-	 * Platform devices based on PMCG nodes uses platform_data to
-	 * pass the hardware model info to the driver. For others, add
-	 * a copy of IORT node pointer to platform_data to be used to
-	 * retrieve IORT data information.
-	 */
-	if (ops->dev_add_platdata)
-		ret = ops->dev_add_platdata(pdev);
-	else
-		ret = platform_device_add_data(pdev, &node, sizeof(node));
-
+	ret = platform_device_add_data(pdev, &node, sizeof(node));
 	if (ret)
 		goto dev_put;
 
diff --git a/include/linux/acpi_iort.h b/include/linux/acpi_iort.h
index 8e7e2ec37f1b..7a8961e6a8bb 100644
--- a/include/linux/acpi_iort.h
+++ b/include/linux/acpi_iort.h
@@ -14,14 +14,6 @@ 
 #define IORT_IRQ_MASK(irq)		(irq & 0xffffffffULL)
 #define IORT_IRQ_TRIGGER_MASK(irq)	((irq >> 32) & 0xffffffffULL)
 
-/*
- * PMCG model identifiers for use in smmu pmu driver. Please note
- * that this is purely for the use of software and has nothing to
- * do with hardware or with IORT specification.
- */
-#define IORT_SMMU_V3_PMCG_GENERIC        0x00000000 /* Generic SMMUv3 PMCG */
-#define IORT_SMMU_V3_PMCG_HISI_HIP08     0x00000001 /* HiSilicon HIP08 PMCG */
-
 int iort_register_domain_token(int trans_id, phys_addr_t base,
 			       struct fwnode_handle *fw_node);
 void iort_deregister_domain_token(int trans_id);