diff mbox

drm: rcar-du: Make sure DRM planes are created by VSP1

Message ID 1488528578-26978-1-git-send-email-jacopo+renesas@jmondi.org (mailing list archive)
State Not Applicable
Delegated to: Geert Uytterhoeven
Headers show

Commit Message

Jacopo Mondi March 3, 2017, 8:09 a.m. UTC
On Gen3 platforms compositing planes are allocated  by VSP on behalf of
DRM/KMS.
If VSP support is not compiled in, vsp1 initialization stub routine is
called, leading to invalid memory accesses later on when un-initialized
planes are accessed.

Fail explicitly earlier if planes are not properly created.

Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
---
 drivers/gpu/drm/rcar-du/rcar_du_kms.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Laurent Pinchart March 3, 2017, 11:26 a.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Friday 03 Mar 2017 09:09:38 Jacopo Mondi wrote:
> On Gen3 platforms compositing planes are allocated  by VSP on behalf of
> DRM/KMS.
> If VSP support is not compiled in, vsp1 initialization stub routine is
> called, leading to invalid memory accesses later on when un-initialized
> planes are accessed.
> 
> Fail explicitly earlier if planes are not properly created.
> 
> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
> ---
>  drivers/gpu/drm/rcar-du/rcar_du_kms.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index b5d3f16..7f56c09 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> @@ -616,6 +616,9 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
>  			ret = rcar_du_vsp_init(vsp);
>  			if (ret < 0)
>  				return ret;
> +
> +			if (!vsp->planes)
> +				return -EINVAL;

Given that this code is only called when the DU hardware requires the VSP to 
operate, how about modifying the rcar_du_vsp_init() stub function to return -
ENXIO instead of 0 ? That way you won't need to add an additional check here.

Ideally we should require VSP through Kconfig as well. If you feel like 
submitting a patch (and testing it with various combinations of module and 
built-in) it would be appreciated.

>  		}
>  	}
Jacopo Mondi March 3, 2017, 12:37 p.m. UTC | #2
HI Laurent,

On 03/03/2017 12:26, Laurent Pinchart wrote:
> Hi Jacopo,
>
> Thank you for the patch.
>
> On Friday 03 Mar 2017 09:09:38 Jacopo Mondi wrote:
>> On Gen3 platforms compositing planes are allocated  by VSP on behalf of
>> DRM/KMS.
>> If VSP support is not compiled in, vsp1 initialization stub routine is
>> called, leading to invalid memory accesses later on when un-initialized
>> planes are accessed.
>>
>> Fail explicitly earlier if planes are not properly created.
>>
>> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
>> ---
>>  drivers/gpu/drm/rcar-du/rcar_du_kms.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
>> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index b5d3f16..7f56c09 100644
>> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
>> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
>> @@ -616,6 +616,9 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
>>  			ret = rcar_du_vsp_init(vsp);
>>  			if (ret < 0)
>>  				return ret;
>> +
>> +			if (!vsp->planes)
>> +				return -EINVAL;
>
> Given that this code is only called when the DU hardware requires the VSP to
> operate, how about modifying the rcar_du_vsp_init() stub function to return -
> ENXIO instead of 0 ? That way you won't need to add an additional check here.
>

Ok, I'll make sure it is only called there also.

> Ideally we should require VSP through Kconfig as well. If you feel like
> submitting a patch (and testing it with various combinations of module and
> built-in) it would be appreciated.

That would be ideal.
Am I wrong or the condition that selects DRM_RCAR_VSP is (DRM_RCAR_DU && 
Gen3-platform)? Implying that on Gen2 DU can live without VSP enabled?

Thanks
    j


>
>>  		}
>>  	}
>
Laurent Pinchart March 3, 2017, 2:27 p.m. UTC | #3
Hi Jacopo,

On Friday 03 Mar 2017 13:37:56 jacopo mondi wrote:
> On 03/03/2017 12:26, Laurent Pinchart wrote:
> > On Friday 03 Mar 2017 09:09:38 Jacopo Mondi wrote:
> >> On Gen3 platforms compositing planes are allocated  by VSP on behalf of
> >> DRM/KMS. If VSP support is not compiled in, vsp1 initialization stub
> >> routine is called, leading to invalid memory accesses later on when un-
> >> initialized planes are accessed.
> >> 
> >> Fail explicitly earlier if planes are not properly created.
> >> 
> >> Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
> >> ---
> >> 
> >>  drivers/gpu/drm/rcar-du/rcar_du_kms.c | 3 +++
> >>  1 file changed, 3 insertions(+)
> >> 
> >> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> >> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index b5d3f16..7f56c09 100644
> >> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> >> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> >> @@ -616,6 +616,9 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
> >>  			ret = rcar_du_vsp_init(vsp);
> >>  			if (ret < 0)
> >>  				return ret;
> >> +
> >> +			if (!vsp->planes)
> >> +				return -EINVAL;
> > 
> > Given that this code is only called when the DU hardware requires the VSP
> > to operate, how about modifying the rcar_du_vsp_init() stub function to
> > return - ENXIO instead of 0 ? That way you won't need to add an
> > additional check here.
>
> Ok, I'll make sure it is only called there also.
> 
> > Ideally we should require VSP through Kconfig as well. If you feel like
> > submitting a patch (and testing it with various combinations of module and
> > built-in) it would be appreciated.
> 
> That would be ideal.
> Am I wrong or the condition that selects DRM_RCAR_VSP is (DRM_RCAR_DU &&
> Gen3-platform)? Implying that on Gen2 DU can live without VSP enabled?

That's correct. On Gen2 VSP isn't required to operate the display.

> >>  		}
> >>  	
> >>  	}
diff mbox

Patch

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index b5d3f16..7f56c09 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -616,6 +616,9 @@  int rcar_du_modeset_init(struct rcar_du_device *rcdu)
 			ret = rcar_du_vsp_init(vsp);
 			if (ret < 0)
 				return ret;
+
+			if (!vsp->planes)
+				return -EINVAL;
 		}
 	}