diff mbox series

drm/ast: Fix ARM compatibility

Message ID 20230302021905.2777-1-jammy_huang@aspeedtech.com (mailing list archive)
State New, archived
Headers show
Series drm/ast: Fix ARM compatibility | expand

Commit Message

Jammy Huang March 2, 2023, 2:19 a.m. UTC
ARM architecture only has 'memory', so all devices are accessed by MMIO.

Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
---
 drivers/gpu/drm/ast/ast_main.c | 17 +----------------
 1 file changed, 1 insertion(+), 16 deletions(-)


base-commit: 254986e324add8a30d0019c6da59f81adc8b565f

Comments

Jammy Huang April 7, 2023, 2:09 a.m. UTC | #1
Hi Thomas,

Could you help review this patch??

We met some problem on nvidia's ARM platfrom and need this patch to fix it.

On 2023/3/2 上午 10:19, Jammy Huang wrote:
> ARM architecture only has 'memory', so all devices are accessed by MMIO.
>
> Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
> ---
>   drivers/gpu/drm/ast/ast_main.c | 17 +----------------
>   1 file changed, 1 insertion(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index 794ffd4a29c5..f86d01e9f024 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -424,22 +424,7 @@ struct ast_device *ast_device_create(const struct drm_driver *drv,
>   	if (!ast->regs)
>   		return ERR_PTR(-EIO);
>   
> -	/*
> -	 * If we don't have IO space at all, use MMIO now and
> -	 * assume the chip has MMIO enabled by default (rev 0x20
> -	 * and higher).
> -	 */
> -	if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
> -		drm_info(dev, "platform has no IO space, trying MMIO\n");
> -		ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
> -	}
> -
> -	/* "map" IO regs if the above hasn't done so already */
> -	if (!ast->ioregs) {
> -		ast->ioregs = pcim_iomap(pdev, 2, 0);
> -		if (!ast->ioregs)
> -			return ERR_PTR(-EIO);
> -	}
> +	ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>   
>   	ast_detect_chip(dev, &need_post);
>   
>
> base-commit: 254986e324add8a30d0019c6da59f81adc8b565f
Thomas Zimmermann April 17, 2023, 11:51 a.m. UTC | #2
Hi

Am 07.04.23 um 04:09 schrieb Jammy Huang:
> Hi Thomas,
> 
> Could you help review this patch??
> 
> We met some problem on nvidia's ARM platfrom and need this patch to fix it.
> 
> On 2023/3/2 上午 10:19, Jammy Huang wrote:
>> ARM architecture only has 'memory', so all devices are accessed by MMIO.
>>
>> Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
>> ---
>>   drivers/gpu/drm/ast/ast_main.c | 17 +----------------
>>   1 file changed, 1 insertion(+), 16 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ast/ast_main.c 
>> b/drivers/gpu/drm/ast/ast_main.c
>> index 794ffd4a29c5..f86d01e9f024 100644
>> --- a/drivers/gpu/drm/ast/ast_main.c
>> +++ b/drivers/gpu/drm/ast/ast_main.c
>> @@ -424,22 +424,7 @@ struct ast_device *ast_device_create(const struct 
>> drm_driver *drv,
>>       if (!ast->regs)
>>           return ERR_PTR(-EIO);
>> -    /*
>> -     * If we don't have IO space at all, use MMIO now and
>> -     * assume the chip has MMIO enabled by default (rev 0x20
>> -     * and higher).
>> -     */
>> -    if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
>> -        drm_info(dev, "platform has no IO space, trying MMIO\n");
>> -        ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>> -    }
>> -
>> -    /* "map" IO regs if the above hasn't done so already */
>> -    if (!ast->ioregs) {
>> -        ast->ioregs = pcim_iomap(pdev, 2, 0);

What happens on systems that use this branch?

Best regards
Thomas

>> -        if (!ast->ioregs)
>> -            return ERR_PTR(-EIO);
>> -    }
>> +    ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>       ast_detect_chip(dev, &need_post);
>>
>> base-commit: 254986e324add8a30d0019c6da59f81adc8b565f
>
Jammy Huang April 18, 2023, 1:23 a.m. UTC | #3
Hi Thomas,

The Intel(x86) CPUs have a separate address space for "IO", but the ARM 
architecture only has "memory", so all IO devices are accessed as if 
they were memory. Which means ARM does not support isolated IO. Here is 
a related discussion on ARM's forum.

https://community.arm.com/support-forums/f/architectures-and-processors-forum/52046/how-to-read-write-an-i-o-port-in-aarch64

Thus, we want to adapt MMIO only after this patch.

On 2023/4/17 下午 07:51, Thomas Zimmermann wrote:
> Hi
>
> Am 07.04.23 um 04:09 schrieb Jammy Huang:
>> Hi Thomas,
>>
>> Could you help review this patch??
>>
>> We met some problem on nvidia's ARM platfrom and need this patch to 
>> fix it.
>>
>> On 2023/3/2 上午 10:19, Jammy Huang wrote:
>>> ARM architecture only has 'memory', so all devices are accessed by 
>>> MMIO.
>>>
>>> Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
>>> ---
>>>   drivers/gpu/drm/ast/ast_main.c | 17 +----------------
>>>   1 file changed, 1 insertion(+), 16 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/ast/ast_main.c 
>>> b/drivers/gpu/drm/ast/ast_main.c
>>> index 794ffd4a29c5..f86d01e9f024 100644
>>> --- a/drivers/gpu/drm/ast/ast_main.c
>>> +++ b/drivers/gpu/drm/ast/ast_main.c
>>> @@ -424,22 +424,7 @@ struct ast_device *ast_device_create(const 
>>> struct drm_driver *drv,
>>>       if (!ast->regs)
>>>           return ERR_PTR(-EIO);
>>> -    /*
>>> -     * If we don't have IO space at all, use MMIO now and
>>> -     * assume the chip has MMIO enabled by default (rev 0x20
>>> -     * and higher).
>>> -     */
>>> -    if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
>>> -        drm_info(dev, "platform has no IO space, trying MMIO\n");
>>> -        ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>> -    }
>>> -
>>> -    /* "map" IO regs if the above hasn't done so already */
>>> -    if (!ast->ioregs) {
>>> -        ast->ioregs = pcim_iomap(pdev, 2, 0);
>
> What happens on systems that use this branch?
>
> Best regards
> Thomas
>
>>> -        if (!ast->ioregs)
>>> -            return ERR_PTR(-EIO);
>>> -    }
>>> +    ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>>       ast_detect_chip(dev, &need_post);
>>>
>>> base-commit: 254986e324add8a30d0019c6da59f81adc8b565f
>>
>
Thomas Zimmermann April 18, 2023, 7:24 a.m. UTC | #4
Hi

Am 18.04.23 um 03:23 schrieb Jammy Huang:
> Hi Thomas,
> 
> The Intel(x86) CPUs have a separate address space for "IO", but the ARM 
> architecture only has "memory", so all IO devices are accessed as if 
> they were memory. Which means ARM does not support isolated IO. Here is 
> a related discussion on ARM's forum.
> 
> https://community.arm.com/support-forums/f/architectures-and-processors-forum/52046/how-to-read-write-an-i-o-port-in-aarch64
> 
> Thus, we want to adapt MMIO only after this patch.

What I mean is that there's a comment that says "assume the chip has 
MMIO enabled by default (rev 0x20 and higher)". We also support revs 
before 0x20. What happens to them?

Best regards
Thomas

> 
> On 2023/4/17 下午 07:51, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 07.04.23 um 04:09 schrieb Jammy Huang:
>>> Hi Thomas,
>>>
>>> Could you help review this patch??
>>>
>>> We met some problem on nvidia's ARM platfrom and need this patch to 
>>> fix it.
>>>
>>> On 2023/3/2 上午 10:19, Jammy Huang wrote:
>>>> ARM architecture only has 'memory', so all devices are accessed by 
>>>> MMIO.
>>>>
>>>> Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
>>>> ---
>>>>   drivers/gpu/drm/ast/ast_main.c | 17 +----------------
>>>>   1 file changed, 1 insertion(+), 16 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/ast/ast_main.c 
>>>> b/drivers/gpu/drm/ast/ast_main.c
>>>> index 794ffd4a29c5..f86d01e9f024 100644
>>>> --- a/drivers/gpu/drm/ast/ast_main.c
>>>> +++ b/drivers/gpu/drm/ast/ast_main.c
>>>> @@ -424,22 +424,7 @@ struct ast_device *ast_device_create(const 
>>>> struct drm_driver *drv,
>>>>       if (!ast->regs)
>>>>           return ERR_PTR(-EIO);
>>>> -    /*
>>>> -     * If we don't have IO space at all, use MMIO now and
>>>> -     * assume the chip has MMIO enabled by default (rev 0x20
>>>> -     * and higher).
>>>> -     */
>>>> -    if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
>>>> -        drm_info(dev, "platform has no IO space, trying MMIO\n");
>>>> -        ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>>> -    }
>>>> -
>>>> -    /* "map" IO regs if the above hasn't done so already */
>>>> -    if (!ast->ioregs) {
>>>> -        ast->ioregs = pcim_iomap(pdev, 2, 0);
>>
>> What happens on systems that use this branch?
>>
>> Best regards
>> Thomas
>>
>>>> -        if (!ast->ioregs)
>>>> -            return ERR_PTR(-EIO);
>>>> -    }
>>>> +    ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>>>       ast_detect_chip(dev, &need_post);
>>>>
>>>> base-commit: 254986e324add8a30d0019c6da59f81adc8b565f
>>>
>>
> -- 
> Best Regards
> Jammy
>
Jammy Huang April 18, 2023, 7:55 a.m. UTC | #5
Hi Thomas,

Thanks for you reminder. The comment you mentioned is added in 2014 for 
AST2400 rev 0x20, which means MMIO is not enable by default before that 
revision. I will send another patch to handle it.


On 2023/4/18 下午 03:24, Thomas Zimmermann wrote:
> Hi
>
> Am 18.04.23 um 03:23 schrieb Jammy Huang:
>> Hi Thomas,
>>
>> The Intel(x86) CPUs have a separate address space for "IO", but the 
>> ARM architecture only has "memory", so all IO devices are accessed as 
>> if they were memory. Which means ARM does not support isolated IO. 
>> Here is a related discussion on ARM's forum.
>>
>> https://community.arm.com/support-forums/f/architectures-and-processors-forum/52046/how-to-read-write-an-i-o-port-in-aarch64 
>>
>>
>> Thus, we want to adapt MMIO only after this patch.
>
> What I mean is that there's a comment that says "assume the chip has 
> MMIO enabled by default (rev 0x20 and higher)". We also support revs 
> before 0x20. What happens to them?
>
> Best regards
> Thomas
>
>>
>> On 2023/4/17 下午 07:51, Thomas Zimmermann wrote:
>>> Hi
>>>
>>> Am 07.04.23 um 04:09 schrieb Jammy Huang:
>>>> Hi Thomas,
>>>>
>>>> Could you help review this patch??
>>>>
>>>> We met some problem on nvidia's ARM platfrom and need this patch to 
>>>> fix it.
>>>>
>>>> On 2023/3/2 上午 10:19, Jammy Huang wrote:
>>>>> ARM architecture only has 'memory', so all devices are accessed by 
>>>>> MMIO.
>>>>>
>>>>> Signed-off-by: Jammy Huang <jammy_huang@aspeedtech.com>
>>>>> ---
>>>>>   drivers/gpu/drm/ast/ast_main.c | 17 +----------------
>>>>>   1 file changed, 1 insertion(+), 16 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/ast/ast_main.c 
>>>>> b/drivers/gpu/drm/ast/ast_main.c
>>>>> index 794ffd4a29c5..f86d01e9f024 100644
>>>>> --- a/drivers/gpu/drm/ast/ast_main.c
>>>>> +++ b/drivers/gpu/drm/ast/ast_main.c
>>>>> @@ -424,22 +424,7 @@ struct ast_device *ast_device_create(const 
>>>>> struct drm_driver *drv,
>>>>>       if (!ast->regs)
>>>>>           return ERR_PTR(-EIO);
>>>>> -    /*
>>>>> -     * If we don't have IO space at all, use MMIO now and
>>>>> -     * assume the chip has MMIO enabled by default (rev 0x20
>>>>> -     * and higher).
>>>>> -     */
>>>>> -    if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
>>>>> -        drm_info(dev, "platform has no IO space, trying MMIO\n");
>>>>> -        ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>>>> -    }
>>>>> -
>>>>> -    /* "map" IO regs if the above hasn't done so already */
>>>>> -    if (!ast->ioregs) {
>>>>> -        ast->ioregs = pcim_iomap(pdev, 2, 0);
>>>
>>> What happens on systems that use this branch?
>>>
>>> Best regards
>>> Thomas
>>>
>>>>> -        if (!ast->ioregs)
>>>>> -            return ERR_PTR(-EIO);
>>>>> -    }
>>>>> +    ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
>>>>>       ast_detect_chip(dev, &need_post);
>>>>>
>>>>> base-commit: 254986e324add8a30d0019c6da59f81adc8b565f
>>>>
>>>
>> -- 
>> Best Regards
>> Jammy
>>
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index 794ffd4a29c5..f86d01e9f024 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -424,22 +424,7 @@  struct ast_device *ast_device_create(const struct drm_driver *drv,
 	if (!ast->regs)
 		return ERR_PTR(-EIO);
 
-	/*
-	 * If we don't have IO space at all, use MMIO now and
-	 * assume the chip has MMIO enabled by default (rev 0x20
-	 * and higher).
-	 */
-	if (!(pci_resource_flags(pdev, 2) & IORESOURCE_IO)) {
-		drm_info(dev, "platform has no IO space, trying MMIO\n");
-		ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
-	}
-
-	/* "map" IO regs if the above hasn't done so already */
-	if (!ast->ioregs) {
-		ast->ioregs = pcim_iomap(pdev, 2, 0);
-		if (!ast->ioregs)
-			return ERR_PTR(-EIO);
-	}
+	ast->ioregs = ast->regs + AST_IO_MM_OFFSET;
 
 	ast_detect_chip(dev, &need_post);