diff mbox series

gpu: host1x: Do not setup DMA for virtual devices

Message ID 20240314154943.2487549-1-thierry.reding@gmail.com
State Accepted
Headers show
Series gpu: host1x: Do not setup DMA for virtual devices | expand

Commit Message

Thierry Reding March 14, 2024, 3:49 p.m. UTC
From: Thierry Reding <treding@nvidia.com>

The host1x devices are virtual compound devices and do not perform DMA
accesses themselves, so they do not need to be set up for DMA.

Ideally we would also not need to set up DMA masks for the virtual
devices, but we currently still need those for legacy support on old
hardware.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/gpu/host1x/bus.c | 8 --------
 1 file changed, 8 deletions(-)

Comments

Jon Hunter March 15, 2024, 11:25 a.m. UTC | #1
On 14/03/2024 15:49, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> The host1x devices are virtual compound devices and do not perform DMA
> accesses themselves, so they do not need to be set up for DMA.
> 
> Ideally we would also not need to set up DMA masks for the virtual
> devices, but we currently still need those for legacy support on old
> hardware.
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
>   drivers/gpu/host1x/bus.c | 8 --------
>   1 file changed, 8 deletions(-)
> 
> diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
> index 783975d1384f..7c52757a89db 100644
> --- a/drivers/gpu/host1x/bus.c
> +++ b/drivers/gpu/host1x/bus.c
> @@ -351,11 +351,6 @@ static int host1x_device_uevent(const struct device *dev,
>   	return 0;
>   }
>   
> -static int host1x_dma_configure(struct device *dev)
> -{
> -	return of_dma_configure(dev, dev->of_node, true);
> -}
> -
>   static const struct dev_pm_ops host1x_device_pm_ops = {
>   	.suspend = pm_generic_suspend,
>   	.resume = pm_generic_resume,
> @@ -369,7 +364,6 @@ const struct bus_type host1x_bus_type = {
>   	.name = "host1x",
>   	.match = host1x_device_match,
>   	.uevent = host1x_device_uevent,
> -	.dma_configure = host1x_dma_configure,
>   	.pm = &host1x_device_pm_ops,
>   };
>   
> @@ -458,8 +452,6 @@ static int host1x_device_add(struct host1x *host1x,
>   	device->dev.bus = &host1x_bus_type;
>   	device->dev.parent = host1x->dev;
>   
> -	of_dma_configure(&device->dev, host1x->dev->of_node, true);
> -
>   	device->dev.dma_parms = &device->dma_parms;
>   	dma_set_max_seg_size(&device->dev, UINT_MAX);
>   


Tested-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Jon Hunter <jonathanh@nvidia.com>

Thanks!
Jon
Jon Hunter April 3, 2024, 10:07 a.m. UTC | #2
Hi Thierry,

On 15/03/2024 11:25, Jon Hunter wrote:
> 
> On 14/03/2024 15:49, Thierry Reding wrote:
>> From: Thierry Reding <treding@nvidia.com>
>>
>> The host1x devices are virtual compound devices and do not perform DMA
>> accesses themselves, so they do not need to be set up for DMA.
>>
>> Ideally we would also not need to set up DMA masks for the virtual
>> devices, but we currently still need those for legacy support on old
>> hardware.
>>
>> Signed-off-by: Thierry Reding <treding@nvidia.com>
>> ---
>>   drivers/gpu/host1x/bus.c | 8 --------
>>   1 file changed, 8 deletions(-)
>>
>> diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
>> index 783975d1384f..7c52757a89db 100644
>> --- a/drivers/gpu/host1x/bus.c
>> +++ b/drivers/gpu/host1x/bus.c
>> @@ -351,11 +351,6 @@ static int host1x_device_uevent(const struct 
>> device *dev,
>>       return 0;
>>   }
>> -static int host1x_dma_configure(struct device *dev)
>> -{
>> -    return of_dma_configure(dev, dev->of_node, true);
>> -}
>> -
>>   static const struct dev_pm_ops host1x_device_pm_ops = {
>>       .suspend = pm_generic_suspend,
>>       .resume = pm_generic_resume,
>> @@ -369,7 +364,6 @@ const struct bus_type host1x_bus_type = {
>>       .name = "host1x",
>>       .match = host1x_device_match,
>>       .uevent = host1x_device_uevent,
>> -    .dma_configure = host1x_dma_configure,
>>       .pm = &host1x_device_pm_ops,
>>   };
>> @@ -458,8 +452,6 @@ static int host1x_device_add(struct host1x *host1x,
>>       device->dev.bus = &host1x_bus_type;
>>       device->dev.parent = host1x->dev;
>> -    of_dma_configure(&device->dev, host1x->dev->of_node, true);
>> -
>>       device->dev.dma_parms = &device->dma_parms;
>>       dma_set_max_seg_size(&device->dev, UINT_MAX);
> 
> 
> Tested-by: Jon Hunter <jonathanh@nvidia.com>
> Acked-by: Jon Hunter <jonathanh@nvidia.com>


I don't see this in -next yet?

Ideally, if we don't see any issues with this we should pull this into 
v6.8.y stable branch because I am now seeing the warning there. Should 
we apply a fixes tag to this?

Thanks
Jon
Thierry Reding April 8, 2024, 3:01 p.m. UTC | #3
On Wed Apr 3, 2024 at 12:07 PM CEST, Jon Hunter wrote:
> Hi Thierry,
>
> On 15/03/2024 11:25, Jon Hunter wrote:
> > 
> > On 14/03/2024 15:49, Thierry Reding wrote:
> >> From: Thierry Reding <treding@nvidia.com>
> >>
> >> The host1x devices are virtual compound devices and do not perform DMA
> >> accesses themselves, so they do not need to be set up for DMA.
> >>
> >> Ideally we would also not need to set up DMA masks for the virtual
> >> devices, but we currently still need those for legacy support on old
> >> hardware.
> >>
> >> Signed-off-by: Thierry Reding <treding@nvidia.com>
> >> ---
> >>   drivers/gpu/host1x/bus.c | 8 --------
> >>   1 file changed, 8 deletions(-)
> >>
> >> diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
> >> index 783975d1384f..7c52757a89db 100644
> >> --- a/drivers/gpu/host1x/bus.c
> >> +++ b/drivers/gpu/host1x/bus.c
> >> @@ -351,11 +351,6 @@ static int host1x_device_uevent(const struct 
> >> device *dev,
> >>       return 0;
> >>   }
> >> -static int host1x_dma_configure(struct device *dev)
> >> -{
> >> -    return of_dma_configure(dev, dev->of_node, true);
> >> -}
> >> -
> >>   static const struct dev_pm_ops host1x_device_pm_ops = {
> >>       .suspend = pm_generic_suspend,
> >>       .resume = pm_generic_resume,
> >> @@ -369,7 +364,6 @@ const struct bus_type host1x_bus_type = {
> >>       .name = "host1x",
> >>       .match = host1x_device_match,
> >>       .uevent = host1x_device_uevent,
> >> -    .dma_configure = host1x_dma_configure,
> >>       .pm = &host1x_device_pm_ops,
> >>   };
> >> @@ -458,8 +452,6 @@ static int host1x_device_add(struct host1x *host1x,
> >>       device->dev.bus = &host1x_bus_type;
> >>       device->dev.parent = host1x->dev;
> >> -    of_dma_configure(&device->dev, host1x->dev->of_node, true);
> >> -
> >>       device->dev.dma_parms = &device->dma_parms;
> >>       dma_set_max_seg_size(&device->dev, UINT_MAX);
> > 
> > 
> > Tested-by: Jon Hunter <jonathanh@nvidia.com>
> > Acked-by: Jon Hunter <jonathanh@nvidia.com>
>
>
> I don't see this in -next yet?
>
> Ideally, if we don't see any issues with this we should pull this into 
> v6.8.y stable branch because I am now seeing the warning there. Should 
> we apply a fixes tag to this?

I was finally able to run some finally tests on this and pushed it to
drm-misc-fixes, so it should go into linux-next and then Linus' tree
sometime soon.

I decided against adding a Fixes tag because it's difficult to backport
this all the way to the release which contains the commit that added
the issue. Adding a Fixes tag to the commit that ended up exposing the
issue didn't seem right either, so let's get this into mainline first
and then manually ask stable maintainers to pick this up.

Thierry
diff mbox series

Patch

diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c
index 783975d1384f..7c52757a89db 100644
--- a/drivers/gpu/host1x/bus.c
+++ b/drivers/gpu/host1x/bus.c
@@ -351,11 +351,6 @@  static int host1x_device_uevent(const struct device *dev,
 	return 0;
 }
 
-static int host1x_dma_configure(struct device *dev)
-{
-	return of_dma_configure(dev, dev->of_node, true);
-}
-
 static const struct dev_pm_ops host1x_device_pm_ops = {
 	.suspend = pm_generic_suspend,
 	.resume = pm_generic_resume,
@@ -369,7 +364,6 @@  const struct bus_type host1x_bus_type = {
 	.name = "host1x",
 	.match = host1x_device_match,
 	.uevent = host1x_device_uevent,
-	.dma_configure = host1x_dma_configure,
 	.pm = &host1x_device_pm_ops,
 };
 
@@ -458,8 +452,6 @@  static int host1x_device_add(struct host1x *host1x,
 	device->dev.bus = &host1x_bus_type;
 	device->dev.parent = host1x->dev;
 
-	of_dma_configure(&device->dev, host1x->dev->of_node, true);
-
 	device->dev.dma_parms = &device->dma_parms;
 	dma_set_max_seg_size(&device->dev, UINT_MAX);