2020-05-11 20:28:27

by Tuan Phan

[permalink] [raw]
Subject: [PATCH] ACPI/IORT: Fix PMCG node always look for a single ID mapping.

PMCG node can have zero ID mapping if its overflow interrupt
is wire based. The code to parse PMCG node can not assume it will
have a single ID mapping.

Signed-off-by: Tuan Phan <[email protected]>
---
drivers/acpi/arm64/iort.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index ed3d2d1..72444e1 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -441,7 +441,9 @@ static int iort_get_id_mapping_index(struct acpi_iort_node *node)

return smmu->id_mapping_index;
case ACPI_IORT_NODE_PMCG:
- return 0;
+ if (node->mapping_count)
+ return 0;
+ return -EINVAL;
default:
return -EINVAL;
}
--
2.7.4


2020-05-12 10:44:53

by Lorenzo Pieralisi

[permalink] [raw]
Subject: Re: [PATCH] ACPI/IORT: Fix PMCG node always look for a single ID mapping.

On Mon, May 11, 2020 at 01:22:56PM -0700, Tuan Phan wrote:
> PMCG node can have zero ID mapping if its overflow interrupt
> is wire based. The code to parse PMCG node can not assume it will
> have a single ID mapping.
>
> Signed-off-by: Tuan Phan <[email protected]>
> ---
> drivers/acpi/arm64/iort.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
> index ed3d2d1..72444e1 100644
> --- a/drivers/acpi/arm64/iort.c
> +++ b/drivers/acpi/arm64/iort.c
> @@ -441,7 +441,9 @@ static int iort_get_id_mapping_index(struct acpi_iort_node *node)
>
> return smmu->id_mapping_index;
> case ACPI_IORT_NODE_PMCG:
> - return 0;
> + if (node->mapping_count)
> + return 0;

Check struct acpi_iort_pmcg->overflow_gsiv to be coherent with SMMUv3
code.

Lorenzo

> + return -EINVAL;
> default:
> return -EINVAL;
> }
> --
> 2.7.4
>

2020-05-12 23:57:41

by Tuan Phan

[permalink] [raw]
Subject: Re: [PATCH] ACPI/IORT: Fix PMCG node always look for a single ID mapping.



> On May 12, 2020, at 3:40 AM, Lorenzo Pieralisi <[email protected]> wrote:
>
> On Mon, May 11, 2020 at 01:22:56PM -0700, Tuan Phan wrote:
>> PMCG node can have zero ID mapping if its overflow interrupt
>> is wire based. The code to parse PMCG node can not assume it will
>> have a single ID mapping.
>>
>> Signed-off-by: Tuan Phan <[email protected]>
>> ---
>> drivers/acpi/arm64/iort.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
>> index ed3d2d1..72444e1 100644
>> --- a/drivers/acpi/arm64/iort.c
>> +++ b/drivers/acpi/arm64/iort.c
>> @@ -441,7 +441,9 @@ static int iort_get_id_mapping_index(struct acpi_iort_node *node)
>>
>> return smmu->id_mapping_index;
>> case ACPI_IORT_NODE_PMCG:
>> - return 0;
>> + if (node->mapping_count)
>> + return 0;
>
> Check struct acpi_iort_pmcg->overflow_gsiv to be coherent with SMMUv3
> code.
>
> Lorenzo

Sure, I will fix it.
>
>> + return -EINVAL;
>> default:
>> return -EINVAL;
>> }
>> --
>> 2.7.4
>>