[PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached

Philippe CORNU philippe.cornu at foss.st.com
Mon Jul 19 06:40:19 PDT 2021



On 7/13/21 6:43 PM, Philippe CORNU wrote:
> Hi Jagan,
> 
> On 7/4/21 3:59 PM, Jagan Teki wrote:
>> As dw-mipi-dsi supported all possible ways to find the DSI
>> devices. It can take multiple iterations for ltdc to find
>> all components attached to the DSI bridge.
>>
>> The current ltdc driver failed to find the endpoint as
>> it returned -EINVAL for the first iteration itself. This leads
>> to following error:
>>
>> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
>>
>> So, check the return value and cleanup the encoder only if it's
>> not -EPROBE_DEFER. This make all components in the attached DSI
>> bridge found properly.
>>
>> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
>> ---
>>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>>   1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
>> index 08b71248044d..95e983d3ffb5 100644
>> --- a/drivers/gpu/drm/stm/ltdc.c
>> +++ b/drivers/gpu/drm/stm/ltdc.c
>> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device 
>> *ddev, struct drm_bridge *bridge)
>>       ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>>       if (ret) {
>> -        drm_encoder_cleanup(encoder);
>> -        return -EINVAL;
>> +        if (ret != -EPROBE_DEFER)
>> +            drm_encoder_cleanup(encoder);
> 
> Many thanks for your patch.
> 
> This means that we are counting on the future success of the deferred 
> probe because we do not clean the encoder...
> However, Yannick gave his "Tested-by" and this patch seems useful so
> 
> Acked-by: Philippe Cornu <philippe.cornu at foss.st.com>
> 
> I will merge it friday or early next week,
> 
> Thank you
> Philippe :-)
> 
> 
>> +        return ret;
>>       }
>>       DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
>> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>>           if (bridge) {
>>               ret = ltdc_encoder_init(ddev, bridge);
>>               if (ret) {
>> -                DRM_ERROR("init encoder endpoint %d\n", i);
>> +                if (ret != -EPROBE_DEFER)
>> +                    DRM_ERROR("init encoder endpoint %d\n", i);
>>                   goto err;
>>               }
>>           }
>>

Applied on drm-misc-next.
Many thanks for your patch,
Philippe :-)




More information about the linux-arm-kernel mailing list