[82/86] drm/i915: Move custom hotplug code into separate callback

Sui Jingfeng sui.jingfeng at linux.dev
Tue Aug 20 10:39:29 UTC 2024


Hi,


On 2024/8/20 15:39, Thomas Zimmermann wrote:
> Hi
>
> Am 19.08.24 um 10:52 schrieb Sui Jingfeng:
>> Hi, Thomas
>>
>>
>> I love your patch, yet ...
>>
>>
>> On 2024/8/16 20:23, Thomas Zimmermann wrote:
>>> i915's fbdev contains additional code for hotplugging a display that
>>> cannot be ported to the common fbdev client. Introduce the callback
>>> struct drm_fb_helper.fb_hotplug and implement it for i915. The fbdev
>>> helpers invoke the callback before handing the hotplug event.
>>>
>>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>>> Cc: Jani Nikula <jani.nikula at linux.intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>>> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
>>> Cc: Tvrtko Ursulin <tursulin at ursulin.net>
>>> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>>> Cc: "Thomas Hellström" <thomas.hellstrom at linux.intel.com>
>>> ---
>>>   drivers/gpu/drm/drm_fb_helper.c            |  6 +++
>>>   drivers/gpu/drm/i915/display/intel_fbdev.c | 43 
>>> ++++++++++++----------
>>>   include/drm/drm_fb_helper.h                | 13 +++++++
>>>   3 files changed, 42 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/drm_fb_helper.c 
>>> b/drivers/gpu/drm/drm_fb_helper.c
>>> index d9e539b0fd1a..92926cb02dfb 100644
>>> --- a/drivers/gpu/drm/drm_fb_helper.c
>>> +++ b/drivers/gpu/drm/drm_fb_helper.c
>>> @@ -1938,6 +1938,12 @@ int drm_fb_helper_hotplug_event(struct 
>>> drm_fb_helper *fb_helper)
>>>       if (!drm_fbdev_emulation || !fb_helper)
>>>           return 0;
>>>   +    if (fb_helper->funcs->fb_hotplug) {
>>
>> We seems need to check the existence on the 'fb_helper->funcs' here,
>>
>> For example:
>>
>>
>> if (fb_helper->funcs && fb_helper->funcs->fb_hotplug) {
>>
>> Otherwise, it will de-reference NULL pointer.
>> Can be observed on a trivial driver though,
>> with no monitor(display) connected.
>
> Indeed. That needs to be fixed. Thank you for noting.
>

Thanks for you efforts then.


> To give some context:  I was hoping to remove drm_fb_helper_funcs at 
> some point. 


Yeah, too many helper functions may make peoples daze.


> fb_probe is now gone with these patches and fb_dirty can certainly be 
> replaced as well. (I once had prototype patches to do that). 


Well, the grammar of "ret = (*fb_helper->funcs->fb_probe)(fb_helper, &sizes);" looks strange, 
It's lengthy and I observed you have cleaned it up at the last patch. 
Which also eliminates one pair "if and else" clause, the codes looks 
more fluent now.


> This leaves the new callbacks for 915, for which I don't have a good 
> alternative solution. So it seems that drm_fb_helper_funcs will only 
> be used by i915/xe in the long term.
>

Well, since it is a DRM client now, maybe we could try to drop it into struct drm_driver.
Just like the '.fbdev_probe' callback, this may help to achieve a 100% DRM-based console/logger IMO.

Besides, a lot of DRM driver instances has the DMA/2D acceleration hardware, promote it
into drm_driver structure may has the potential to utilize hardware acceleration. Drivers
will more easily to have custom implementation. I'm not 100% sure if it will only be used
by i915 in the future.

Best regards,
Sui



More information about the dri-devel mailing list